This "sandbox" is a place where Code Golf users can get feedback on prospective challenges they wish to post to main. This is useful because writing a clear and fully specified challenge on your first try can be difficult, and there is a much better chance of your challenge being well received if you post it in the sandbox first.

Sandbox FAQ


To post to the sandbox, scroll to the bottom of this page and click "Answer This Question". Click "OK" when it asks if you really want to add another answer.

Write your challenge just as you would when actually posting it, though you can optionally add a title at the top. You may also add some notes about specific things you would like to clarify before posting it. Other users will help you improve your challenge by rating and discussing it.

When you think your challenge is ready for the public, go ahead and post it, and replace the post here with a link to the challenge and delete the sandbox post.


The purpose of the sandbox is to give and receive feedback on posts. If you want to, feel free to give feedback to any posts you see here. Important things to comment about can include:

  • Parts of the challenge you found unclear
  • Comments addressing specific points mentioned in the proposal
  • Problems that could make the challenge uninteresting or unfit for the site

You don't need any qualifications to review sandbox posts. The target audience of most of these challenges is code golfers like you, so anything you find unclear will probably be unclear to others.

If you think one of your posts requires more feedback, but it's been ignored, you can ask for feedback in The Nineteenth Byte. It's not only allowed, but highly recommended! Be patient and try not to nag people though, you might have to ask multiple times.

It is recommended to leave your posts in the sandbox for at least several days, and until it receives upvotes and any feedback has been addressed.


Search the sandbox / Browse your pending proposals

The sandbox works best if you sort posts by active.

To add an inline tag to a proposal, use shortcut link syntax with a prefix: [tag:king-of-the-hill]. To search for posts with a certain tag, include the name in quotes: "king-of-the-hill".


4636 Answers 4636

106 107
109 110

How many substitutions till palindromization?

Given a string, find the minimum number of character substitutions needed so that the string is a palindrome.

E.g. the string abchefa needs 2 substitutions, so it can take any of the following paths:

abchefa -> afchefa -> afehefa
                   -> afchcfa
        -> abehefa -> afehefa
                   -> abeheba
        -> abchcfa -> afchcfa
                   -> abchcba
        -> abcheba -> abeheba
                   -> abchcba

You must return a minimal number, e.g. abc can use 3 substitutions (abc -> dbc -> ddc -> ddd) but it really only needs 1 (abc -> aba) so you must return 1.

The string will only contain printable ASCII, no newlines.

Additional testcases:










  • You can take the string as a string or as a list of chars, but not as a list of strings
  • You must return a minimal value in a generally accepted output format.
  • \$\begingroup\$ I thought there was a near-dupe somewhere, but I'm pretty sure this is the one I was thinking of... \$\endgroup\$ Jun 1, 2017 at 23:38
  • \$\begingroup\$ Actually this might be a dupe of this: perform any answer for all indexes in the string, sum, divide by two. \$\endgroup\$ Jun 1, 2017 at 23:41
  • \$\begingroup\$ @ETHproductions You spoiled the hidden way to do it... \$\endgroup\$ Jun 2, 2017 at 5:39
  • \$\begingroup\$ I'm pretty sure I've seen an exact dupe, although it might still be in the sandbox; codegolf.stackexchange.com/q/95343/194 is a generalisation. \$\endgroup\$ Jun 2, 2017 at 9:00

Write machine code that also works when left rotated one byte

Write machine code for a CPU that runs and does something. The twist is that your code should run and do something else, without errors, if it is left rotated one byte.

Suggestions? Ideas? Thoughts? Let me know.

  • 4
    \$\begingroup\$ So is this "any code that doesn't crash if rotated"? Generally it's best to give a specific task, not just "do something", or else it's quite broad. \$\endgroup\$
    – Geobits
    Oct 26, 2016 at 0:15
  • 2
    \$\begingroup\$ This is completely uninteresting in any instruction set which has one-byte instructions. E.g. in x86 the byte that's rotated away can be INC, and then the "something else" is just the same function with an offset to one of the arguments. \$\endgroup\$ Oct 26, 2016 at 7:53
  • 1
    \$\begingroup\$ Far too broad, IMO. Also very, very easy in machine code dialects which have single-byte jump instructions, or any instruction that has a single-byte opcode plus X bytes of data, where X is no shorter than the length of the jump instruction; this describes almost every machine code dialect in existence. \$\endgroup\$
    – user62131
    Jun 2, 2017 at 15:03
  • \$\begingroup\$ What about reversing it? \$\endgroup\$
    – anna328p
    Jun 2, 2017 at 16:49

Reverse divmod


The divmod function is one that is included in many standard libraries and is defined as follows:

enter image description here

Or, in other words, divmod(a,b) returns a list containing the integer quotient of a/b (i.e. floor(a/b)) and mod(a,b) (i.e. the remainder in the division of a/b).

Your challenge is not to implement the divmodfunction, but rather reverse it.


You will take two integers x and y as input, in any reasonable input format (two integers, list, etc.). Both x and y are guaranteed to be in the range -2^31 to 2^31-1, inclusive.


The output of your code shall be two integers, in any reasonable output format (two integers, list, etc.). Note that you must output the two integers in such a way that a human is able to distinguish one from another. These two integers should be an a and b such that divmod(a,b)==(x,y) (i.e. floor(a/b)==x && mod(a,b)==y). Please specify in your answer how these two integers are outputted if it is not immediately clear (for example, if you output b before a).

Remember that this is , so shortest solution in bytes wins!

  • \$\begingroup\$ Note to self: add I/O examples \$\endgroup\$
    – GamrCorps
    Jun 3, 2017 at 2:10
  • 1
    \$\begingroup\$ So: given x and y output x*b+y, b for any b > y if y is positive or b < y if y is negative? Or have I missed something? \$\endgroup\$ Jun 3, 2017 at 12:59
  • \$\begingroup\$ @PeterTaylor No you haven't, I realized that the challenge is much simpler than I originally thought (because of the method you mentioned). I am going to try and increase the difficulty later. \$\endgroup\$
    – GamrCorps
    Jun 3, 2017 at 13:05

Help me golf my numbers! (Part 2)

Thanks for all your help in Part 1! I recently just found out that my language also supports expressions, and we can use those to make our numbers even shorter!


Write a full program that takes in a list of integers less than 2^53-1. For each integer, rewrite it in the shortest way possible using expressions, and output the result.

Allowed operators

The operators below are given in order of precedence from highest to lowest, with groups separated by empty lines. (These precedence levels are the same as Python.) All binary operators are left-associative, except exponentiation, which is right-associative. Note that some operators are two bytes in length.

**: Exponentiation

* : Multiplication
/ : Integer Division
% : Modulus

+ : Addition
- : Subtraction
~ : Bitwise NOT

<<: Left shift
>>: Right shift

& : Bitwise AND

^ : Bitwise XOR

| : Bitwise OR

You may use decimal, hexadecimal, or scientific notation to represent integers in your output (the answers to Part 1 will help you choose the shortest representation for each integer). You may also use parentheses to group subexpressions.


I will post a list of 1000 integers to be used as the test battery. A program's score will be the size of the output for the provided test, where the lowest score wins. A solutions is invalid if any of the expressions do not evaluate to the given integer. There will also be an execution time limit of 20 minutes for all 1000 inputs (roughly 1 second per input) in order to discourage brute-force solutions.

Numbers for the test battery will be chosen according to the following algorithm:

def choose():
    msb = randint(0, 52)
    return randint(0, 1 << msb)

with duplicates filtered out.


  • Is there anything here that can be clarified?
  • Anything else that can make this challenge more fun?
  • \$\begingroup\$ Sandbox #2 - I don't think bitwise operators will make it too broad. #3 The community has generally agreed that penalties do not make the challenge any more interesting. General advice- make some more rules. Clarify what you mean by "shorten them as much as possible", I had to read that three times to understand. And what do you mean by takes a list of integers? How does one shorten a list using arithmetic? \$\endgroup\$
    – MD XF
    Jun 2, 2017 at 22:32
  • \$\begingroup\$ You should specify how your expressions handle precedence and associativity. I assume expressions can use any number literals? \$\endgroup\$
    – xnor
    Jun 2, 2017 at 22:38
  • \$\begingroup\$ I think it would be good to say something about you're choosing numbers for the test battery. If they are random, heuristic solutions will be effective (or maybe just hardcoding?). Or, if you intentionally choose inputs that benefit from rarely-useful operations like `%, that would be useful to optimize for. \$\endgroup\$
    – xnor
    Jun 2, 2017 at 22:41
  • \$\begingroup\$ @xnor Yes, they may. I'll add information about precedence and associativity as well. \$\endgroup\$ Jun 2, 2017 at 22:41
  • \$\begingroup\$ @xnor Good point. My plan was to choose randomly, do you think this is a good idea? \$\endgroup\$ Jun 2, 2017 at 22:42
  • \$\begingroup\$ I think random would be good. Maybe with some bias towards shorter numbers so they're not all 50-ish bits. It might hard though to beat hardcoding, though the bitwise operations might help. Perhaps you could try to hand-optimizing some random numbers and see how well you do. I think you also need something to rule out brute-force solutions, like a run-time bound. \$\endgroup\$
    – xnor
    Jun 2, 2017 at 22:46
  • \$\begingroup\$ I feel like this might be a dupe. \$\endgroup\$
    – Shaggy
    Jun 3, 2017 at 10:54
  • \$\begingroup\$ @Shaggy could you link to the duplicate please? \$\endgroup\$ Jun 3, 2017 at 12:12
  • \$\begingroup\$ I haven't figured out the right search terms to get me there yet. \$\endgroup\$
    – Shaggy
    Jun 3, 2017 at 12:29
  • \$\begingroup\$ @xnor I added a possible algorithm for choosing numbers as well as a time bound. Do you think this is ready for posting? \$\endgroup\$ Jun 3, 2017 at 18:39
  • \$\begingroup\$ @musicman523 Having thought about it a bit more, I worry hardcoding the number is too effective. It seems really unlikely a random number allows a shorter arithmetic expression than its digit length. I'm not even sure such a number would appear in 1000 samples. \$\endgroup\$
    – xnor
    Jun 3, 2017 at 19:14
  • \$\begingroup\$ I agree. I previously entered 'there can be only one' ( codegolf.stackexchange.com/questions/92962/there-can-be-only-1 ), which was simliar but only allowed using '1'. I don't believe the operators will be useful for almost all numbers, and if you require an operator is used people will just use '+1' most of the time. While a break from your original plan, you could (for example) require using scientific notation, with one number before and after the 'e', so things like '2e5' and '3e7'. That would make operators required and useful. \$\endgroup\$ Jun 4, 2017 at 21:12
  • \$\begingroup\$ Maybe make operators cost less than digits. e.g each operator is 2 and each digit is 5 in order to discourage hardcoding \$\endgroup\$
    – H.PWiz
    Jul 9, 2017 at 15:53
  • \$\begingroup\$ Not a bad idea. I'll probably revive this at some point. Thanks guys! \$\endgroup\$ Jul 9, 2017 at 18:43

Insert a simulated Ken Thompson virus into a program

A Ken Thompson virus is a virus that infects your compiler and other programs. Since it infects all your tools, you can not detect it without using tools from before the virus was introduced.

Your will create a prototype for inserting the Ken Thompson virus into code. The goal of this virus will be to allow you to (fake) destroy any computer running a program infected with it.

Inserting a Ken Thompson virus is defined as follows. Start with an input program P. Your program will output a modified program Q that works as follows:

  • If the input to Q is aNouIQ5xKvUfdZVzo0Xs, it will output BOOM (in a real Ken Thompson virus, this would actually do something bad, but since it this is a fake virus, outputing BOOM is done instead).
  • For any other input to Q, run program P with that input
    • If the output of P is valid source code in the language you are using, insert the Ken Thompson virus into it and then Q will output the resulting infected program.
    • Otherwise, the output of Q is just the output of P.

You will write a program that takes P's code as input and produces Q's code as output.

You can use either a currently (at the time of this post) existing programming language, or a subset of one, for this challenge. (The idea is that language you are using would be the target language of some self-compiling compiler, but this is not required.) Since you want to be as subtle as possible, the shortest code (in bytes) wins!


Find the Harmonic Mean

The harmonic mean of a sequence of numbers is the reciprocal of the arithmetic mean of the reciprocal of each number. For example, the harmonic mean of [1, 2, 3] is 1/((1/1+1/2+1/3)/3) = 3/(1/1+1/2+1/3).


A list/array/tuple/string with some delimeter/etc. of positive integers which fit within the standard integer/float type of your language of choice.


The harmonic mean of those integers, accurate to at least 6 (?) decimal places.

Test Cases

input => output

1 4 4 => 2.0

1 2 3 => 1.63636

527 => 527.0

52 33 400 => 52.6548

7 20 333 45 1 => 4.10481
  • \$\begingroup\$ Sub-challenge of this. \$\endgroup\$ Jun 6, 2017 at 1:28
  • \$\begingroup\$ If you're going to specify the output accuracy in decimal places you need to restrict the input such that it's possible. A 64-bit floating point number (double) can represent about 16 significant decimal figures, but it can represent numbers up to a bit more than 10^300. \$\endgroup\$ Jun 6, 2017 at 7:30
  • \$\begingroup\$ @PeterTaylor not really sure how to handle this... I want people to be able to use the most natural method without allowing silly abuses such as "I can only handle one decimal place" or something. \$\endgroup\$
    – Cyoce
    Jun 6, 2017 at 7:40
  • \$\begingroup\$ If you guarantee that there will be at most 20 numbers, all in the range 1E-8 to 1E8 then I think that should easily be sufficient. \$\endgroup\$ Jun 6, 2017 at 8:46

The problem

As I sometimes build bots, I often came across real time image reading. The goal in this problem is to be able to identify a character given pixel representation with the minimal amount of tests. For that, you will have to generate a tree that can identify any char.


  • A list of frequency
  • A png file containing each char in a 1 wide red box. Its exact color is #ed1c24 and it is not present in any of the chars.


A series of specific test that can identify any char. A test is defined by the pixel coordinates, the exact colour to check, the list of chars to have this pixel and the list of chars that donot.


Let's have a look at only four chars (number 1-4) of equal frequency.


Here we could say that we check for the for pixel in 0,0 (upper left corner). If it is white, it means it's a 1, otherwise we check for the pixel 1,0 (to the right of the upper left corner). If this one is white, it's a 4, otherwise we check for the pixel in 2,2 (the blanck beetween the 3 and the box). If it is white, it's a 3, otherwise it's a 2.

That way we can identify any number in 3 tests at most. If we calculate our score with this layout, it would be 0.25x1 + 0.25x3 + 0.25x3 + 0.25x2 = 2.25 so on average our tree needs 2.25 pixel reading to identify a number.

The solution that lead to that is written like this:

[0,0], [255,255,255], [1], [2,3,4]
[1,0], [255,255,255], [4], [2,3]
[2,2], [255,255,255], [3], [2]

However the best solution for this example has a score of 2. One of the trees that lead to that is

[0,1], [255,255,255], [1,4], [2,3]
[0,0], [255,255,255], [1], [4]
[2,2], [255,255,255], [3], [2]


  • Count each time you read a pixel.
  • Use the number frequency to average your score
  • Your score is the sum of the char frequency times the number of pixels read to identify this number.
  • \$\begingroup\$ What do you mean by 'any number'? If it is more than 1,2,3,4, you should demonstrate what these additional numbers look like. \$\endgroup\$ Jun 7, 2017 at 13:26
  • \$\begingroup\$ Good point. I meant any chars, I extended the problem while writting it. I will fix this \$\endgroup\$
    – Philippe
    Jun 7, 2017 at 13:48

Sources and Strings

The challenge: Output a string with the same length as the source code.

The requirements:

  • Standard loopholes apply, etc., etc.
  • Input may not be taken
  • The output must be deterministic (for scoring purposes)
  • Output must be a string
  • Functions and full programs are allowed, no snippets though

The scoring: This is , so the shortest code in bytes wins. However, for each individual character in the source that has a match in the outputted string, your byte score is increased by 2 bytes.

Examples of scoring (of course, most of these aren't working programs):

Program            Output            Score
nn                 ng                2+(1*2)=4
print('h'*14);     hhhhhhhhhhhhhh    14+(1*2)=16
print('prnt'*4);   prntprntprntprnt  16+(8*2)=32
q                  q                 1+(1*2)=3
qwertyuiop         mmmmmmmmmm        10+(0*2)=10
System.out.println("lol");           Invalid=Infinity points

Prime Factors Zip

Take an integer strictly greater than 2, for example 66. Its prime factors are [2,3,11], when ordered from smallest to biggest. If we zip the digits of those factors, we get [231,1]. Multiplying them yields the integer 231.

If we apply this process back on 231, we get 371. If we apply this multiple times, we get the following sequence:


At this point, we stop because 0 cannot be factored. We say that 0 is the prime factors zip of 66.

If we start with 19, we get the following sequence:


Here, we can see that once we reach 3, we will always get 3. Therefore, 3 is the prime factors zip of 19.

If we start with 22, we get the following sequence:


Here, we can see that once we reach 21, we will always get the loop [21,37]. Therefore, [21,37] is the prime factors zip of 22.

Note that it is possible for an integer to be its own prime factors zip (e.g. 5) or that it is contained in its prime factors zip (e.g. 23 which has prime factors zip [23,6]).


Given an integer strictly greater than 1, output its prime factors zip.

This is , so the shortest answer in bytes wins.

Test Cases

Input        Prime factors zip
7            7
46           0
48           [22103,72463]
100          0
113          3
1337         [337,63]    


I have no idea (nor have I checked extensively) if it is possible than this procedure never loops for some integers.

  • 2
    \$\begingroup\$ I'd suggest explaining "zip" more precisely. I think it is more commonly called "transpose" and you could try to visualise it by drawing out a matrix? For the never looping thing, I think you can just say the programs don't have to handle that. \$\endgroup\$ Jun 9, 2017 at 14:22

Color the Grayscale

Given an image containing only grayscale colors (for RGB, R==G==B), and a RGB value (that is not grayscale), color the image with your given color.

//Is there a formula that does this? If so this can definitely have objective input and output.

Should this be like a lot of the other challenges?


This question is up for adoption! If you would like to finish and post it, please include a little mention for @gryphon :)

Battle of the Bots

Your Task

Program a bot to compete in a battle with other bots. Each robot has fifteen flags situated around their exterior. Your goal is to have at least one flag left on your robot for as long as possible. Each turn you will move diagonally (or not at all) on a square grid with a width/length equal to the number of bots competing squared (attempting to move off the edge of the grid will result in either you moving adjacent to your previous position, or no movement at all if attempting to move from a corner), and use two or less of the four weapons/shields that are situated facing along the horizontal and vertical rows of the grid. You will choose which weapon you would prefer to have in each of your four slots at the beginning of the game. After 2,500 turns, each bot with flags remaining will receive a 500 point bonus, and the game will end. If all flags have been destroyed before this time, the game will end then. The winner will be the person with the most points at the end of 1,000 matches.

Your Code

Each bot will begin in a randomly chosen location on the playing field (bots may be on top of each other). Your code will take the form of two python 2.7 functions, one named (name of your submission) start, which will take no input and return 4 values, one for each weapon/shield slot. The first value will be the top of the bot, and they will continue in clockwise order. The integer values to be returned and weapons/shields they represent are shown below:

1: Firestarter, a weapon that will start a fire adjacent to the bot. Fires start at class 1 and increment upward every turn. If, at the start of a bot's turn they are on top of a fire they lose flags equal to the level of the fire. If a fire is at level 3, it spreads fires of level 1 to all directly (not diagonally) adjacent squares that are not already on fire. When a fire reaches level 8, rather than becoming a level 8 fire, it dies, turning back to an "O" on the map, having used up all available burning material. It may then be lit on fire again in the future.

2: Laser, a weapon that destroys one flag on any bot in a straight line from its firing point outwards from the bot.

3: Buzzsaw, a weapon that destroys five flags on any bot adjacent to the bot using it on the side it is used on.

4: Shield, a defensive mechanism that protects flags from lasers and buzzsaws, and is unaffected by our next weapon.

5: Acid Sprayer, a weapon that destroys the weapon facing it on any bot within three spaces of the bot using it in a straight line (not an arc) from its mounting point

Your second function will receive, first the turn number, second a map of the battlefield in a string, with "R" representing robots (including itself), "O" representing empty space, and the level a fire is at representing any fires. The end of a row will be shown with a semicolon ";". For example, if the battlefield looks like this:


Each bot will receive this:


Next, the bot will receive its X coordinate, and then its Y coordinate, 0 indexed and with the top left corner being 0,0. Finally, the bot will receive how many flags it has remaining.

If multiple bots are in the same square, only a single "R" will be shown. If a bot is standing on the same square as a fire, only the fire will be shown. A bot can tell if it is standing on a fire if its own X and Y coordinates show an integer rather than a "R".

Sample Bots

Will show sample bots here when they are completed


Will show controller here when it is completed

Additional Rules

  • No copying other bots, or copying with only minor changes.

  • No messing around with the judging process, other bots, or writing programs to acquire information that does not come from the inputs given to them, randomizers, or other legitimate sources of information.

  • No writing bots specifically designed to prop up other bots.

  • Maximum of three submissions per user.


Is the explanation clear enough?

Are there any loopholes for programs to exploit?

Any tags other than ?

  • \$\begingroup\$ There are a few points which I think could be clearer. 1. The description of the goal ("on average ... one or more flags left on it for the longest period of time") doesn't seem to match the actual scoring mechanism. 2. Must the weapon selection be deterministic? 3. Does a fire spread to adjacent cells on the turn that it becomes level 3 or on the next turn? 4. How do multiple fires interact? 5. Having burnt to level 8, can a cell be set on fire again in the future? 6. Does the acid sprayer work along the same axis-aligned line as the laser, or does it hit in a semicircle? \$\endgroup\$ Jun 5, 2017 at 11:00
  • \$\begingroup\$ 7. How does a bot know whether the cell it is currently standing in is on fire? 8. I assume that movement is blocked at the edges, but this could be more explicit. \$\endgroup\$ Jun 5, 2017 at 11:01
  • \$\begingroup\$ Edited to fix concerns. \$\endgroup\$
    – Gryphon
    Jun 6, 2017 at 17:15
  • \$\begingroup\$ you should probably use classes rather than two functions, since the ability to remember how opponents behave is useful. \$\endgroup\$ Jun 7, 2017 at 23:23
  • \$\begingroup\$ @DestructibleLemon, I've actually moved on from this challenge now, so consider it abandoned. If you want, you can take it over. \$\endgroup\$
    – Gryphon
    Jun 7, 2017 at 23:25
  • \$\begingroup\$ But... if I did that I would have three koths on the waiting list! \$\endgroup\$ Jun 7, 2017 at 23:29
  • \$\begingroup\$ Wow, that is a lot. I dropped it because I'm working on a new language, but I may readopt it if no one else does after I'm finished. \$\endgroup\$
    – Gryphon
    Jun 7, 2017 at 23:36

Print all video urls of YouTube channel

Inspired by Count the videos in a Youtube Playlist, the input will be the "VIDEOS" view from a channel like this one:


The output will be a complete, newline-delimited list of all video urls the respective channel has to offer. It would look something like


This is codegolf, so shortest answer wins.


  • I am unsure whether the permitted use of Google's YouTube API might be a good idea. It requires an API_KEY and can only retrieve 50 results per request.

Thanks for the feedback.


Patch Tuesdays Calendar


Patch Tuesday happens every second Tuesday of the month, Microsoft and other companies release their monthly security patch on that Tuesday.


The challenge is to write a program that writes 24 consecutive Patch Tuesdays dates separated by newline to the console. The Tuesdays must be the ones of the current year and the next year (not a parameter). Date format must be mm/dd/yyyy.


Code with the fewest bytes wins, there are no bonuses.


Is there a good write up with conventions for golf questions?



My challenge, is for you to generate a Menger Sponge based on the level/iteration given. You need to draw it in 3d, see the Specifications below!

3D Specifications

  • You can use existing 3D libraries


Inputs: 0, 1, 2, 3



Background Information

What is a Menger Sponge

In mathematics, the Menger sponge (also known as the Menger universal curve) is a fractal curve. It is a three-dimensional generalization of the Cantor set and Sierpinski carpet


See https://en.wikipedia.org/wiki/Menger_sponge#Properties (too long to copy and paste)

How do I construct the sponge?


  1. Begin with a cube (first image).

  2. Divide every face of the cube into 9 squares, like a Rubik's Cube. This will sub-divide the cube into 27 smaller cubes.

  3. Remove the smaller cube in the middle of each face, and remove the smaller cube in the very center of the larger cube, leaving 20 smaller cubes (second image). This is a level-1 Menger sponge (resembling a Void Cube).

  4. Repeat steps 2 and 3 for each of the remaining smaller cubes, and continue to iterate ad infinitum.

The second iteration gives a level-2 sponge (third image), the third iteration gives a level-3 sponge (fourth image), and so on. The Menger sponge itself is the limit of this process after an infinite number of iterations.


Background info taken from this wikipedia page on Menger Sponges.

Good Luck!

Remember this is the shortest program wins!


I need help with specifications for the 3d output:

Since 3D is now required (invalidating existing answers), I think the question is now unclear. There is a lot you need to specify for 3D including but not limited to viewing angle, projection, lighting, shading.

  • \$\begingroup\$ This may be a bit too much for the usual golfing techniques. 3D graphics isn't easy to golf. \$\endgroup\$
    – Daffy
    Jun 13, 2017 at 21:32
  • \$\begingroup\$ @Daffy Then, should I try making it a coding challenge? \$\endgroup\$ Jun 13, 2017 at 21:33
  • 7
    \$\begingroup\$ @downvoters - Noah has listened to advice and posted this in sandbox. If you downvote, please give some specific indication of what you think could be improved \$\endgroup\$ Jun 13, 2017 at 21:33
  • \$\begingroup\$ @NoahCristino Personally, I think it would make a better coding challenge, yes. \$\endgroup\$
    – Daffy
    Jun 13, 2017 at 21:35
  • 1
    \$\begingroup\$ @Daffy If the question is about implementing a 3D rendering engine (I don't think it is) then you are probably right. However, if the OP chooses to allow the use of existing 3D libraries (which would not be untypical for this site), then I don't see a problem with it being code-golf \$\endgroup\$ Jun 13, 2017 at 21:35
  • \$\begingroup\$ @Daffy Ok, well I still need to specify the 3d specifications better. \$\endgroup\$ Jun 13, 2017 at 21:35
  • \$\begingroup\$ @DigitalTrauma I would like to keep it code golf, since people have already coded it like this guy: youtube.com/watch?v=LG8ZK-rRkXo \$\endgroup\$ Jun 13, 2017 at 21:36
  • 1
    \$\begingroup\$ I'll edit and say that you can use existing 3d libraries. \$\endgroup\$ Jun 13, 2017 at 21:37
  • 3
    \$\begingroup\$ @Daffy who said challenges need to be easy? There's a question with 250+ upvotes asking for Tetris inside of Conway's game of life... \$\endgroup\$
    – steenbergh
    Jun 14, 2017 at 14:33
  • \$\begingroup\$ @steenbergh Hah! Very very good point. \$\endgroup\$
    – Daffy
    Jun 14, 2017 at 19:56
  • \$\begingroup\$ Could output be as a list of vertices, with you providing a default renderer? This would eliminate the need for a 3d-render on the part of the answerer, might simplify things a bit... \$\endgroup\$
    – steenbergh
    Jun 16, 2017 at 11:03
  • \$\begingroup\$ @steenbergh What if it was the x, y, z coordinates of each block? \$\endgroup\$ Jun 16, 2017 at 18:16
  • \$\begingroup\$ @NoahCristino That would come too far off of your 3d-idea, I believe. Unless you'd make this about voxels, perhaps?. \$\endgroup\$
    – steenbergh
    Jun 16, 2017 at 19:14
  • \$\begingroup\$ @steenbergh but, you still technically outputting a representation of a Menger Sponge \$\endgroup\$ Jun 16, 2017 at 19:49

I Got All Night


  • Is this interesting?
  • Has this already been submitted?
  • Issues/loopholes in the rules?
  • Suitable tags?

The goal

Make a program that takes as much time as possible to complete. That's it.


  • It must not be infinite. while(1){} will not be accepted.
  • You must be able to show how long it will take. Either through calculating it or by measuring it.
  • It must be doing something non-trivial. for(var x=0; x<1000000000000; x++){y++;} will not be accepted.


Your score is the time it takes to complete in milliseconds divided by the size of the program in bytes. Round to the nearest point if needed.

For example, if your program is 95 bytes long and takes 3 hours to complete, your score is (3*60*60*1000)/95 = 113,684 (rounded)

  • \$\begingroup\$ busy beaver tag? \$\endgroup\$ Jun 15, 2017 at 2:29
  • \$\begingroup\$ also nontrivial is a bad requirement \$\endgroup\$ Jun 15, 2017 at 2:29
  • 1
    \$\begingroup\$ The main issue here is that time taken isn't objectively measurable on regular computers. Further, "trivial" is also not objective. Any computable task is largely equivalent to the for loop you have, besides some "minor" details. \$\endgroup\$ Jun 15, 2017 at 2:29
  • \$\begingroup\$ also be prepared for answers that would go past the heat death of the universe \$\endgroup\$ Jun 15, 2017 at 2:29
  • 2
    \$\begingroup\$ @DestructibleLemon Please don't post so many short comments, this isn't a chat room. Take time to think through what you want to say, and say it all at once. You can edit your comments for a couple minutes to add more details you realised that you omitted. \$\endgroup\$ Jun 15, 2017 at 2:32
  • \$\begingroup\$ @FryAmTheEggman The wording I was going to use was "useful" instead of "non-trivial", but I figured that was even less descript. Do you have any suggestions for that? Also, what if I write a python script that measures computer speed (i.e. spinning around in a loop for 10 seconds, incrementing a variable) to normalize for different computer speeds? \$\endgroup\$
    – Daffy
    Jun 15, 2017 at 2:37
  • \$\begingroup\$ @DestructibleLemon That's what I meant by Either through calculating it or by measuring it. If you can calculate that your program will take 15 billion years, then it's completely usable. Converting 15 billion years to milliseconds might be a hassle though ;) \$\endgroup\$
    – Daffy
    Jun 15, 2017 at 2:38
  • 2
    \$\begingroup\$ You would have to run all the submissions yourself then, however the problem will then be answers that take too long to verify. Calculations would be very difficult to say, for example, what if my program will only run on some ancient computer, will I be able to use that clock time? Also what about context switches/interrupts/etc? Generally I don't think this kind of challenge works, it's sort of like why world records for "shortest concert" don't exist anymore: programs that take forever are not really programs. \$\endgroup\$ Jun 15, 2017 at 2:46
  • \$\begingroup\$ I think this ground has been well-covered by existing challenges to make large numbers and this would add anything new. \$\endgroup\$
    – xnor
    Jun 15, 2017 at 3:29

Help me play Battleship!

Battleship is a two-player guessing game in which each player guesses the placement of the opponent's ships, placed on a grid.

Each column is labeled with a letter, and each row with a number. The label starts from top left (A and 1), and descends as you move right/down.

Each player is given two grids, one for placing ships, and one for guessing the enemy's ship placement. Each player places 5 ships -- one ship of length 5, one ship of length 4, two ships of length 3, and one ship of length 2 -- on her grid, either horizontally or vertically. The players should not share their ship placements.

After placing all ships, each player takes turn guessing the opponent's ship placements. The guessing player guesses one position, and the defending player must announce "hit" or "miss," depending on whether she (the defending player) had a ship there. When all positions of a ship is hit, it is "sunk."

The player who sinks all of the opponent's ships win.

This is an example of a battleship board (taken from Wikipedia):

enter image description here


Given the list of guesses a player has made, construct a 10x10 array that represents the board.


  • The input can take any reasonable format, as long as it is explained. Some examples are [[position, result], [position, result], ...] and [[hit positions], [miss positions]].
  • The output array can have any characters, as long as empty, "hit," and "miss" squares are distinguishable from one another. (e.g. unknown = 0, hit = 1, miss = 2)
  • You may not take the list of unknown grid positions in the input.

Test Cases

Pastebin link


  • Is this challenge interesting?
  • Are there any dupes? (I couldn't find one)
  • Did I include too much detail in the introduction? (If so, what should I remove?)
  • Are my test cases sufficient?

Star Trekkin'

Just an idea at this stage; wanted to get it down lest I forget it. I'll come back to it in a few days to work out the details.


Generate an ASCII art representation of the USS Enterprise with an animated, randomised ASCII starfield behind it.


Programming Challenge: Winning criterion is the shortest byte program which can tell me (x, y) which number "x" was doubled in the list, and which number "y" was removed from the list of 1000 numbers from 1 to 1000.

Given a list of 1000 positive integers in random order, find the integer that is repeated more than once, the integers that are not present in the range [1,1000] and output the count of the repeated integer present in the list.

The format of the list is a space deliminated text file such as this:

779 990 5 814 353
627 173 797 714 619
802 719 895 966 325
275 158 322 215 271
631 232 175 10 397
892 124 26 287 878
757 754 508 871 255
363 159 482 400 247
223 857 862 18 434
919 335 586 65 579
828 943 366 874 999
238 289 362 600 321
193 863 613 930 143
107 879 530 284 110
437 426 981 546 924
701 441 941 43 614
542 727 694 351 643
794 563 476 834 624
804 634 776 672 57
597 338 748 908 156
297 234 444 598 891
925 163 229 791 326
944 182 262 987 734
582 910 567 132 28
645 962 994 6 917
617 64 106 304 404
88 93 849 882 677
749 254 12 399 897
329 988 31 379 654
25 646 134 445 327
577 848 673 551 408
405 806 244 40 601
497 177 972 526 545
796 755 630 663 423
428 562 610 1 686
548 281 101 154 747
763 32 236 368 956
639 522 507 792 771
693 147 728 203 845
615 889 931 440 299
348 707 235 320 295
803 513 703 940 717
205 150 702 189 183
296 875 575 454 492
194 425 126 657 976
570 809 945 825 168
890 217 656 29 550
684 188 78 221 446
523 952 676 900 583
484 933 268 608 708
665 17 963 212 253
432 964 858 909 316
155 120 114 210 477
319 647 822 409 388
818 308 77 102 373
929 113 402 841 213
470 877 648 968 135
309 824 690 844 463
323 240 706 391 653
372 985 346 788 510
991 554 494 44 915
758 756 989 759 659
534 142 939 675 378
974 345 462 54 942
681 1000 7 716 415
42 264 996 438 464
386 350 197 141 84
123 127 811 853 516
60 49 277 70 986
98 733 905 978 103
390 230 501 449 731
34 370 541 958 466
251 71 108 846 260
576 830 100 140 529
869 333 303 664 589
856 777 427 187 184
305 766 829 136 456
786 401 737 961 475
412 887 178 91 698
448 433 62 519 832
314 957 861 898 683
983 515 893 220 817
979 149 267 3 63
458 473 139 970 835
666 119 967 695 343
242 947 41 47 623
973 53 354 74 816
121 471 151 246 369
499 45 593 691 376
111 46 226 83 431
274 606 506 265 753
79 387 451 883 525
479 744 162 949 8
292 95 97 324 823
315 152 394 671 718
347 836 50 195 360
812 566 725 612 923
537 911 620 51 328
243 19 556 592 288
334 298 873 655 443
705 66 767 604 285
760 896 474 406 73
918 688 667 914 730
729 826 959 774 543
594 192 27 948 912
491 419 341 518 55
146 787 495 904 172
469 761 840 626 637
144 616 465 712 660
785 365 250 636 384
208 2 174 864 839
741 410 621 342 442
245 568 998 485 216
960 224 239 782 855
291 355 860 807 936
920 56 669 561 697
112 270 715 913 938
364 851 467 751 468
450 995 609 490 72
674 713 640 185 801
361 742 38 784 167
225 743 692 790 907
859 762 569 115 521
116 200 580 632 997
85 82 249 207 486
218 196 14 932 867
429 258 125 793 69
865 385 902 222 531
611 658 318 935 980
808 23 105 722 300
520 30 420 286 662
227 581 745 585 928
330 638 358 587 16
452 635 736 489 252
89 951 137 591 721
880 555 204 535 769
9 820 605 854 148
128 934 396 480 307
161 711 750 704 651
696 133 813 789 517
263 775 553 75 992
293 190 916 273 602
461 11 977 202 764
483 76 52 773 723
870 872 498 359 868
67 544 504 279 833
599 48 171 687 80
547 336 417 642 181
558 906 256 219 81
866 810 709 186 668
572 145 209 739 682
847 752 720 332 393
770 965 574 629 176
746 306 138 798 15
528 778 392 457 726
337 39 86 380 160
493 211 436 180 241
795 94 955 837 214
584 954 117 549 59
340 805 367 927 633
946 738 819 487 557
768 4 37 827 596
511 628 381 68 679
838 179 603 680 13
231 650 35 700 735
975 595 502 301 424
527 678 950 280 532
649 685 710 539 903
248 276 571 500 435
560 109 926 588 278
414 509 237 169 740
885 118 430 382 689
481 311 199 993 821
261 447 540 357 92
129 131 953 375 377
852 61 191 228 937
122 418 439 573 198
331 302 505 644 283
421 416 36 894 884
831 22 24 104 876
371 272 622 312 578
459 395 455 536 374
969 403 565 269 389
552 90 164 922 781
503 460 524 206 356
130 259 533 294 157
901 422 290 514 982
641 661 478 559 496
282 512 266 257 538
765 564 96 783 724
843 317 411 799 652
488 310 349 313 413
453 886 58 971 20
921 618 815 850 99
339 87 21 472 699
33 607 800 352 899
233 166 780 407 625
670 201 170 383 772
344 376 881 984 590
165 732 153 398 842  

For example in this list 376 is repeated twice, and 888 is removed once. In this challenge a number "x" can only be repeated "once", so the number "888" can only be removed once, so an acceptable output for a programmed answer is this "(x, y)" where "x" is the number repeated twice, and "y" is the number removed.

I attempted to make this programming question, but because I included a bonus for web-scraping, and the format of the output for an answer was not clear it didn't receive positive reviews.

So I would like suggestions I how I can make this challenge clearer. Thank you.

Here is my challenge and the comments I received.

Programming Challenge: Tell me which number I repeated, how many times, and which one I skipped?

  • 1
    \$\begingroup\$ I have gone through and made the challenge clearer here: hastebin.com/ucesohawok.md Feel free to use or disregard this. However, one of my suggestions is to loosen the I/O formats (meaning stating input and output can be in any reasonable format). This would mean that the list could be taken as a list/array instead of a string. Same thing for output. This is ultimately up to you, but note that it is discouraged to restrict I/O formats as you have done. \$\endgroup\$
    – GamrCorps
    Jun 15, 2017 at 20:26
  • \$\begingroup\$ Thank you very much. \$\endgroup\$
    – xyz123
    Jun 15, 2017 at 20:47
  • \$\begingroup\$ My first reaction was that this is too straightforward to golf, but thinking more led to some interesting tricks. I think this is a nice challenge. \$\endgroup\$
    – xnor
    Jun 16, 2017 at 0:14
  • \$\begingroup\$ I suggest relaxing the input format and also allow a list or array of numbers. \$\endgroup\$
    – Laikoni
    Jun 17, 2017 at 7:00

Working For The Weekend

Option 1

Taking no input, output true if today is Saturday or Sunday or false otherwise.

Option 2

Taking no input, output how many days, from today, until the weekend.

Sunday:    0
Monday:    5
Tuesday:   4
Wednesday: 3
Thursday:  2
Friday:    1
Saturday:  0


  • Which option do you prefer?
  • Too trivial?
  • Dupe?
  • Allow local times to be used or require UTC? (I wanna say UTC)
  • true & false or truthy & falsey? (if option 1)
  • Working or Livin' For The Weekend?
  • 1
    \$\begingroup\$ 1) option 2 is less trivial and so Peter Taylor may not downvote / 2) Local times, not UTC / 3) truthy & falsey if you choose option 1 / 4) Working For The Weekend \$\endgroup\$ Jun 16, 2017 at 14:28
  • 2
    \$\begingroup\$ In my opinion this is far too trivial to be interesting. I feel in general time based questions are pretty boring. I don't feel it provides anything that hasn't been covered extensively by other date/time questions. \$\endgroup\$
    – Wheat Wizard Mod
    Jun 16, 2017 at 14:32

What could I add to improve this post? I have some questions that are inside of brackets.


A farmer needs help calculating the least time it will take him to pick his fruit each day.


  • This farmer has X orchards.
  • Each orchard has Y [is Y the correct variable to use here? does it matter?] fruits in it. If the orchard has no fruits, then it will contain the string "none".
  • The farmer has a list, this list contains the fruit he must pick.
  • The farmer will only go down the list in order
  • You must calculate how long it will take the farmer to pick his fruit on each day.

More on the orchards

  • All of the orchards are in a line.
  • Each orchard is exactly 1 unit [should I say unit or kilometer?] away from the next and previous one.
  • The farmer can go up and down the line, but may not jump from one orchard to another

Input and Output

You will receive an input in the following format:

*string* *string* *string* *string*
*string* *string*
*string* *string*
*string* *string*
*string* *string*

X is the number of orchards

  • Everything after X and before Y is an orchard containing a/some string(s), each string is a different fruit in that orchard.

Y is the number of days that the farmer must gather fruit.

  • Each day consists of two strings that are different fruits.
  • You must find what orchard these strings are in and calculate the difference.

Input Rules:

  1. Each fruit name string will be one word with no spaces
  2. [Should I add more here? if so, what should I add?]

Real Example

Still confused? Maybe this will clear it up:





orange pear pear


orange lemon pumpkin

pumpkin lettuce flowers peas


peas lettuce 

apple orange 

apple pumpkin 

flowers orange 

output: [ 0, 1, 3, 1 ]



  • 6 the number of orchards
  • A set of 6 orchards containing fruit, each orchard on a new line.
  • 4 the number of days on the farmers list.
  • A set of 4 fruits to compare, each pair of fruits is on a new line.


  • Output an array of the differences between each set of fruits.
  • The difference between peas and lettuce is 0, because they are in the same orchard.
  • The difference between apples and oranges is 1 because they are one orchard apart.
  • The difference between apples and pumpkins is 3 Because they are three orchards apart.
  • The difference between flowers and oranges is 1 because they are one orchard apart.

Annotated input/output

6 orchards 

a none

b apple

c orange pear pear

d none

e orange lemon pumpkin

f pumpkin lettuce flowers peas


4 fruits

peas lettuce 0

apple orange 1

apple pumpkin 3

flower orange 1


output: [ 0, 1, 3, 1 ]
  • \$\begingroup\$ I would only use the name y one time, as using it for two different things makes this a little confusing. \$\endgroup\$
    – Gryphon
    Jun 21, 2017 at 20:07

Studio 54

Studio 54 was a famous nightclub in Manhattan. The club is referenced in the Futurama episode Rebirth in which the crew visits a nightclub called Studio 122133. The mathematical expression 122133 evaluates to (1 x 1) x (2) x (3 x 3 x 3) = 1 x 2 x 27 = 54.


Determine whether a positive integer is a "studio number." We define a studio number to be a number n that can be expressed as the product of a set of distinct positive integers that does not include n, each of which is raised to the power of one of the numbers in the set. Or, more mathematically:

Studio Numbers

You should have a consistent output value for "is a studio number" and "is not a studio number," and nothing else.

Test cases

These are inexhaustive lists and are just meant for basic ad-hoc testing.

Studio numbers:


Not studio numbers:


Computed by this script.


I'm going off of this for the two consistent outputs, but I'm not really sold either way. I could also change the requirements to be to output the "studio" representation of the number.

Does the math-y bit help? Could I make the studio number definition clearer?

I've been unable to find any "nice" properties of these numbers that allow for methods besides brute force. Would this still be interesting enough to golf? I could also add a "reasonable time" limit that would enforce some non-naive code to reject bad attempts, but I'm not sure that's much better.

The studio numbers do not appear to be a sequence recorded on the OEIS.

  • \$\begingroup\$ You say "does include n", but I think you mean, "does not include n". \$\endgroup\$ Jun 17, 2017 at 22:32
  • \$\begingroup\$ @Challenger5 Uhhh, whooops... Thanks :) \$\endgroup\$ Jun 17, 2017 at 22:37

Only HeLlO WoRLd is allowed.

We are all familiar that "Hello World" is the 1st introductory program that most people learn when they first start to program. Then programmers go on to greater and better programs. But who says they have to go on to greater and better programs? What if all other programs were censored?

Your Task:

Write a computer program that takes in standard input. If the standard input is any case-insensitive version of HeLlO WoRLd, do nothing. If the Standard input is anything other than a case insensitive HeLlO WoRLd, print an infinite loop of a HELLO WORLD matrix to the standard output.

To print an infinite HELLO-WORLD-Matrix, randomly sort the letters of "HELLO" and the letters of "WORLD", join the two words with a space as if you were saying HELLO WORLD, although you are probably saying "HELLO DWROL", " OELLH LWODR" gibberish with an occasional "HELLO WORLD". Then just keep printing all this gibberish to the standard output.
























There is actually only one "HELLO WORLD" amid all this gibberish

Winning criterion: shortest program in bytes.

  • \$\begingroup\$ What is an infinite loop of a HELLO WORLD matrix? \$\endgroup\$
    – user42649
    Jun 18, 2017 at 16:08
  • \$\begingroup\$ Actually, I think I would like to up the challenge and request that HELLO WORLDS be printed to the standard output in a tab deliminated string with the letters randomly sorted, so occassionally the standard output would get HELLO WORLD HELLO WORLD ... But it would mostly get "EHLLO DWORL HEOW LLROD ... etc. \$\endgroup\$
    – xyz123
    Jun 18, 2017 at 16:11
  • \$\begingroup\$ I updated my HELLO WORLD INFINITE matrix problem and made it more difficult. You should check it out. Is there anyway that I can have the tab separation show up on the problem the same way it shows up on the edit tab? \$\endgroup\$
    – xyz123
    Jun 18, 2017 at 17:01
  • \$\begingroup\$ You may want to say "anagram of..." instead of "randomly sort the letters of..." \$\endgroup\$
    – Mr. Xcoder
    Jun 18, 2017 at 17:29
  • \$\begingroup\$ Are there rules about the horizontal and vertical spacing of your matrix, and the number of helloworldoids per line? This needs to be explicitly specified or else explicitly left flexible. \$\endgroup\$
    – user62131
    Jun 19, 2017 at 18:54
  • \$\begingroup\$ What do you think would make the challenge the most fun? \$\endgroup\$
    – xyz123
    Jun 20, 2017 at 3:54

Golfing a Busy Turing Machine

For the sandbox

This question is really hard, and the solution is restricted to one "language" – a 1-tape, 2-symbol Turing Machine. So I'm not sure if it belongs on PPCG. I've written up a basic description below, but can go into more detail if anyone is interested.


I recently came across a paper that explicitly presents a 7910-state 1-tape, 2-symbol Turing machine that cannot be proven to run forever in ZFC, assuming ZFC is consistent. It also cites codegolf.stackexchange.com!

The existence of this Turing machine proves that calculating BB(7910) is independent of ZFC.

So, we know that we can calculate up to at least BB(4), and definitely can't calculate BB(7910) and above.

Can you create a Turing Machine with under 7910 states that cannot be proven to run forever in ZFC?

The author designed two custom-purpose programming languages (Laconic and TMD) to create this Turing Machine. In order to improve upon his work, I imagine you could go one of three ways:

  1. Optimize his algorithm in Laconic such that it encodes the interpreter or Friedman's mathematical statement (section 3.1) more tersely.

  2. Optimize TMD so individual instructions are translated to fewer states.

  3. Find a simpler statement whose truth implies the consistency of ZFC, and encode that instead of Friedman's statement.

  4. Go another direction entirely!

Winning criteria

The Turing Machine with the fewest number of states that cannot be proven to run forever in ZFC, wins. The length of the code you used to generate this Turing Machine is irrelevant.

You don't win if you compute BB(5), but you do get eternal fame.

  • \$\begingroup\$ There's currently a huge loophole in the question: you can just present a Turing machine that trivially halts, without violating any of the rules. Defining this unambiguously is going to be hard; the problem is that the submitter has to prove that the Turing machine always halts, but also prove that the Turing machine can't be proven to always halt, which is almost a contradiction (and only works because the first "prove" is subjective but the last objective; but how do you enforce a subjective criterion?). That said, I like the question and it'd be nice if it could be made to work. \$\endgroup\$
    – user62131
    Jun 19, 2017 at 19:24
  • \$\begingroup\$ It's also worth noting that the vast majority of PPCG users won't understand the question no matter how precisely you try to word it. That probably isn't a problem for the people who are interested in or are willing to learn computability theory, but expect a large number of wrong answers that misunderstand the question and have to be deleted. \$\endgroup\$
    – user62131
    Jun 19, 2017 at 19:25
  • \$\begingroup\$ @ais523 "Cannot be proven to run forever" is a subtle point – it's not that it doesn't run forever but that it's impossible to prove whether or not it does. If the submitter can prove that the Turing machine always halts, then it would not be a valid submission. Or if it were, would solve the halting problem. I should clarify to say "cannot be proven either to halt or to run forever." My big concern is your second comment, though. In any case, this post explains the main points in the paper, and is very accessible and worth reading independent of PPCG! scottaaronson.com/blog/?p=2725 \$\endgroup\$ Jun 19, 2017 at 19:33
  • \$\begingroup\$ Right, I think the correct framing of this problem is "produce a Turing machine that cannot be proven to halt and cannot be proven not to halt". (Of course, we know it won't halt in practice, because if it did, you could prove it halts by running it, but that should be left out of the framing of the question.) That makes it clearer what's going on to people who haven't seen the problem in question beforehand. I wonder if opening this up to other languages might not be interesting too: brainfuck, for example, is a good fit for this challenge. Things like Jelly probably aren't though. \$\endgroup\$
    – user62131
    Jun 19, 2017 at 19:36
  • \$\begingroup\$ @ais523 The way to construct a program like this is usually to say "this machine halts iff conjecture A is true" where conjecture A's truth implies the consistency of ZFC. \$\endgroup\$ Jun 19, 2017 at 19:37
  • \$\begingroup\$ Opening up to other languages seems reasonable enough, especially as I imagine it wouldn't be too hard to write a brainfuck to 1-tape turing machine transpiler \$\endgroup\$ Jun 19, 2017 at 19:38
  • \$\begingroup\$ I can tell you haven't read the discussion about this in the comments of two blog posts in Aaronson's blog, because Stefan O'Rear one-upped with a search for a contradiction in ZFC in about 1900 states. See github.com/sorear/metamath-turing-machines . NB codegolf.stackexchange.com/q/79620/194 was also inspired by that discussion, although in a slightly different direction. See cheddarmonk.org/papers/laver.pdf for a 64-state machine which is not known to halt in ZFC, but is proven to halt assuming a rank-into-rank cardinal. \$\endgroup\$ Jun 19, 2017 at 22:17
  • \$\begingroup\$ @PeterTaylor very cool, thanks! I generally try to steer clear of comment-reading on blogs, but I should probably make an exception for academic ones. \$\endgroup\$ Jun 19, 2017 at 22:20
  • \$\begingroup\$ @PeterTaylor I just noticed that the Laver paper is yours. Super impressive. I'd love to know if/when you ever end up publishing it \$\endgroup\$ Jun 19, 2017 at 22:31
  • \$\begingroup\$ Any answer to this is also an answer to Write a program whose nontermination is independent of Peano arithmetic. Turing machine answers are welcome. (Though I’m not sure how we score those in bytes… perhaps the entropy measure (2n lg (4n + 1))/8?) Also (conjecturally) related: Laver table computations and an algorithm that is not known to terminate in ZFC. \$\endgroup\$ Jun 23, 2017 at 20:44

Grouped Keyboard Scores

color board

In the above graphic, one can see 12 distinct color groups, which roughly correspond to columns on a keyboard. The following is a plaintext representation of which characters occur in each group.

Group 1:  ~` \n\t
Group 2:  !1QqAaZz
Group 3:  @2WwSsXx
Group 4:  #3EeDdCc
Group 5:  $4RrFfVv
Group 6:  %5TtGgBb
Group 7:  ^6YyHhNn
Group 8:  &7UuJjMm
Group 9:  *8IiKk<,
Group 10: (9OoLl>.
Group 11: )0Pp:;?/
Group 12: _-{["'+=}]|\

Challenge: Sort characters in the input according to their position in the aforementioned table. For input "Hello, World!", the output would be " !WedrH,llool". The relative order of characters within the same group does not matter, so the output " !WderH,llloo" is just as acceptable.

Scoring: Let P be the product of the number of characters in each non-empty section. Let S be the number of sections your program uses. Then, your score is P × S.

For example, the program QAZ would have a score of 3, and QWERTY would have a score of 6. 12321 would have a score of 12. The lowest such score wins.

Here is a code snippet for scoring your submission:

var sections = [
    "`~\t\n ",

function getSection(chr){
    for(var i = 0; i < sections.length; i++){
        if(sections[i].indexOf(chr) >= 0){
            return i;
    return -1;

function score(program){
    // group by sections
    var sectionHolder = [];
    var foundSections = [];
    for(var i = 0; i < program.length; i++){
        var chr = program[i];
        var index = getSection(chr);
        if(index < 0)
            return "n/a\nInvalid character: " + chr;
            sectionHolder[index] = [];
        if(foundSections.indexOf(index) < 0)
    var S = foundSections.length;
    var P = foundSections.map(function(e){
        return sectionHolder[e].length;
    }).reduce(function(a, c){
        return a * c;
    }, 1);;
    return S * P;
var output, code;
window.addEventListener("load", function(){
    output = document.getElementById("output");
    code = document.getElementById("code");
function update(){
    output.innerHTML = "";
        "Score = " + score(code.value)
* { font-family: Consolas, monospace; }
#output { white-space: pre; }
<textarea id="code" oninput="update();"></textarea>

<div id="output"></div>

Test cases

Note: represents a tab and represents a newline.

 "input" => "output"

 "Hello, World!" => " !WedrH,llool"
 "Grouped Keyboard Scoring" => "  aSededcrrrGbgynuKiooop"
 "QWERTYUIOPqwertyuiop" => "QqWwEeRrTtYyUuIiOoPp"
 "2017 + 42 = something" => "    122se4tghn7mio0+="
 "Tab␉ulator" => "␉aarTbtulo"
 "Hello␤World" => "␤WedrHllool"
  • \$\begingroup\$ Should group one be: ~` \n\t? \$\endgroup\$ Jun 19, 2017 at 14:33
  • \$\begingroup\$ @carusocomputing Yes, indeed \$\endgroup\$ Jun 19, 2017 at 16:16

Call a library function

Given a single int32, a path to a Dynamic Link Library (.dll) or Shared Library (.so), and the name of a function, return the single int32 result of calling the function on the single int32.


On 64 bit Linux: 0 /usr/lib64/libm-2.24.so fesetround0

On 64 bit Linux: 1 /usr/lib64/libm-2.24.so fesetround1

On 32 bit Linux: 1023 /usr/lib/libm-2.24.so fesetround1

On 32 bit Linux: 1024 /usr/lib/libm-2.24.so fesetround0

On 64 bit Windows: inp please\edit\filename.dll fnameout

On 64 bit Windows: inp please\edit\filename.dll fnameout

  • \$\begingroup\$ Please help me find a suitable DLL! \$\endgroup\$
    – Adám
    Jun 19, 2017 at 19:53
  • \$\begingroup\$ This needs to specify that the function takes a single int32 as argument and returns a single int32. \$\endgroup\$
    – user62131
    Jun 19, 2017 at 19:58
  • \$\begingroup\$ @ais523 Thanks, done. \$\endgroup\$
    – Adám
    Jun 19, 2017 at 20:03
  • \$\begingroup\$ Where's the int32 in the Windows examples? \$\endgroup\$ Jun 19, 2017 at 20:36
  • \$\begingroup\$ @PeterTaylor I need help with a dll that's commonly found on Windows. \$\endgroup\$
    – Adám
    Jun 19, 2017 at 20:38
  • \$\begingroup\$ It's worth noting in the testcases that although libm is very commonly seen on Linux, the exact file path tends to vary from distribution to distribution. (For example, it's different on Fedora and Ubuntu.) \$\endgroup\$
    – user62131
    Jun 19, 2017 at 21:59
  • \$\begingroup\$ @ais523 Can you edit the Linux samples to replace "Linux" with "Fedora" and "Ubuntu" and give the correct paths? \$\endgroup\$
    – Adám
    Jun 19, 2017 at 22:00
  • \$\begingroup\$ @Adám: Not easily, they frequently change as a result of the system being updated, and it depends on processor architecture (not just bit depth) and sometimes even configuration. Just tell people to find the path to their own libm library for the appropriate architecture. (Note that the situation on Windows is much worse, because it doesn't ship even standard DLLs like libm by default.) \$\endgroup\$
    – user62131
    Jun 19, 2017 at 22:02
  • \$\begingroup\$ @ais523 Just as plausible example, I mean. \$\endgroup\$
    – Adám
    Jun 19, 2017 at 22:03

What is the maximum number of backslashes (escape characters) required to mean one backslash?

If you want to use a regex to look for a backslash, you have to escape that backslash, so that the character after it isn't escaped instead. But if you then have to store this regex in a string (in a c-style language, for instance), you need to double the number of backslashes, so that a regex string to match \stuff\ would need to be "\\\\stu(f+)\\\\" (and I had to further double the backslashes to post it in StackOverflow, but that isn't executable so doesn't count).

In your answer, explain the language and the (reasonable) situation, from either real or made-up business needs, and the answer with the most backslashes (per final, output backslash) will get upvoted (permanently) and accepted (until a better one comes along). If using AutoHotKey or another language that has a different escape character (for instance, `), then instances of that character will count instead of backslashes.

This question is not how many backslashes could you use in some esoteric code-golfing language to eventually calculate to a backslash, otherwise I don't think there would be an upper limit. This instead is about feasible scenarios that force you to use a lot of backslashes.

  • \$\begingroup\$ I feel as though this simply devolves into finding as many languages as possible that have something like eval. You can't enforce "reasonableness" as it isn't objective. Sorry, but I don't think this kind of challenge is a good fit for our site. But thank you for using the sandbox! \$\endgroup\$ Jun 19, 2017 at 20:35

Write an interpreter for XKCD's broken language


  • Is this a good idea?
  • Is the point system good?
    • If so, are the point values good? I based them off of how difficult I imaged each part to be.


Randall Munroe, author of the webcomic XKCD, posted a comic a while back about a joke programming language and how it gets types confused.

Here's the comic in question

Your job is to write an interpreter for a slightly modified version of this language.


  • If your language supports it, it must be a live interpreter where all input lines start with [#]> (where # is the line number) and all outputs must start with =>.
    • If your language does not support it, you may substitute this with reading all the lines on the input and printing out each output on its own line, still starting with =>. Remember to keep track of line numbers.
  • All commands must be usable in any order and with any parameters (within reason)
  • Each command you implement correctly is worth the listed point value. See scoring to find your final score.

Integers plus numeric strings (1 point)

Given an int and a string containing a number (in that order) calculate the numeric sum of them, then return the result as a string with quotes surrounding it.

[1]> 2 + "2"
=> "4"
[2]> 6 + "13"
=> "19"

Numeric strings plus lists (1 point)

Given a numeric string and a list, append the numeric value to the list and return the list as a string.

[1]> "3" + []
=> "[3]"
[2]> "7" + [1,4]
=> "[1,4,7]"

Dividing by zero (1 point)

Any number divided by zero returns a NaN object. This does not have quotes around it.

[1]> 1/0
=> NaN

NaN plus integer (2 points)

Given a NaN object and an integer, pretend it's a string and increment the leading character, carrying over if needed. The result does not have quotes.

[1]> (5/0)+2
=> NaP
[2]> NaN+256
=> NbN

You do not need to use ASCII for this, any character set works, as long as it includes at minimum the 52 uppercase and lowercase letters.

You will never have to add a result from this to another integer. (For example, NaP+4 is invalid)

String plus string (1 point)

Given two strings, remove swap the first and last quotes with single quotes and return the result.

[1]> ""+""
=> '"+"'
[2]> "Hello"+"world"
=> 'Hello"+"world'

List of integers plus integer (3 points)

Given a list of integers (or an empty list) and another integer, return True or False based on whether the new integer matches the linear pattern.

It will follow this rule:

If the list has 0 or 1 items, return True regardless (everything matches).
Determine the pattern of the list by subtracting every item by the item right before it. If the pattern is inconsistent, return False regardless (nothing matches).
Otherwise, check if the new integer matches the pattern. If it does, return True. If it doesn't, return False.

[1]> [1, 2, 3, 4] + 5
=> True
[2]> [5, 7, 9, 11] + 13
=> True
[3]> [6, 5, 4, 3] + 2
=> True
[4]> [2, 4, 6, 8] + 9
=> False
[5]> [1, 2, 1, 4] + 5
=> False

Range(a, b) (1 point)

With the Range function given two numbers, return a list of numbers from a to b.

[1]> Range(1, 5)
=> [1, 2, 3, 4, 5]
[2]> Range(3, 6)
=> [3, 4, 5, 6]
[3]> Range(6, 4)
=> [6, 5, 4]

Plus integer (1 point)

Given simply "+" and an integer, return the line number plus the integer.

[1]> +2
=> 3
[2]> +2
=> 4
[3]> +1
=> 4

Single digit plus single digit (2 points)

Given two single digit integers a and b, replace all future instances of a in the output with (a+b)%10 (where % means modulo, essentially wrap around if the result is more than 1 digit). Return Done. This effect is superficial and has no effect on math. This only affects output, not input.

[1]> 3+2
=> Done
[2]> Range(1, 6)
=> [1, 2, 5, 4, 5, 6]
[5]> 1+2
=> Done
[4]> Range(1, 6)
=> [3, 2, 5, 4, 5, 6]

Floor (1 point)

Draw an ascii art floor with the number at the bottom. The specifications are 3 lines of only pipes, then a line with a pipe, 3 underscores, the number, and 3 underscores.

[1]> Floor(4.7)
=> |
=> |
=> |
=> |___4.7___
[2]> Floor(105.3)
=> |
=> |
=> |
=> |___105.3___


Add up the points you've earned. Your score is now calculated as (15-points) * bytecount. Lower is better.


  • You do not have to account for mixing functions. For example, Range(Floor(2.3)) is invalid.
  • Whitespace may be added or removed as is convenient.
  • Double quotes or single quotes may be used as convenient (as long as you use the opposite for "String plus string")
  • Any brackets may be used for lists, as long as it's consistent.
  • A few commands were omitted from the original comic because I couldn't figure out a way to make it well specified.
  • 2
    \$\begingroup\$ Scoring is broken: it goes up when you implement more features, but down when you golf bytes off the program. Those should probably both aim in the same direction. Also, even if you change "multiply" to "divide", you're still only scoring on the average number of bytes per feature (which incentivizes only implementing one feature, the shortest). The normal fix is to divide the byte count by the square of the points from features, lower is better. \$\endgroup\$
    – user62131
    Jun 19, 2017 at 7:52
  • 2
    \$\begingroup\$ If your language supports this, do that. If not, do this is not a very good idea. Also, reading multiple lines and the => prefix seems like it's just extra code for no good reason. \$\endgroup\$
    – Okx
    Jun 19, 2017 at 7:56
  • \$\begingroup\$ @ais523 Ah thanks for catching that. What I meant was, you take your point score and calculate (15-points)*bytes. If you get all of them, your score is simply your byte count. If you get a few of them, your score is larger accordingly. Lower is better. \$\endgroup\$
    – Daffy
    Jun 19, 2017 at 18:29
  • \$\begingroup\$ @Okx The => prefix is to keep with the style of the comic. And reading multiple lines is important because some of the commands affect things in the future, which you wouldn't see if you can't input multiple lines. I see what you mean though about if this, that, if not, this. Do you think the interactive approach is better or the non-interactive one? \$\endgroup\$
    – Daffy
    Jun 19, 2017 at 18:31
  • \$\begingroup\$ Dupe? codegolf.stackexchange.com/q/52953/8478 \$\endgroup\$ Jun 20, 2017 at 9:15
  • \$\begingroup\$ @MartinEnder I would argue that is not a dupe. That question hopes to simulate the comic's output, without making it general. Return values to functions can be hardcoded. Mine has stricter specifications. \$\endgroup\$
    – Daffy
    Jun 21, 2017 at 6:10

Counting from 0 - 100

I posted this question, but it was not taken very well, so I wanted to put it through the sandbox and get some feedback/help before re-posting.


Output all numbers from 0-100. Without using any of your languages built in loops.

Loops that are not allowed

This list contains, but is not limited to

  • For loops
  • While loops
  • Do While loops
  • Goto Statment
  • In Range


  • \$\begingroup\$ I really don't think this is a good idea for a challenge. It would either be builtins, like this in Jelly, or printing literal strings, with maybe some clever compression. \$\endgroup\$ Jun 20, 2017 at 14:37
  • \$\begingroup\$ Ok, I will leave it here in the sandbox incase anyone else thinks that they have a way to make it better. But I will not post it. \$\endgroup\$
    – zoecarver
    Jun 20, 2017 at 14:38
  • \$\begingroup\$ @Christian Definitely golfable too. \$\endgroup\$ Jun 20, 2017 at 14:49
  • \$\begingroup\$ Also the Python answer \$\endgroup\$ Jun 20, 2017 at 15:04
  • \$\begingroup\$ "but is not limited to" - I think you're going to need to be more explicit than that. Does array mapping count as a loop, for example? \$\endgroup\$
    – Shaggy
    Jun 20, 2017 at 15:42
  • \$\begingroup\$ @EriktheOutgolfer I actually had that ready to post when this challenge was posted in PPCG, but it was deleted before I had the chance to. I was just too lazy to look up the atom list when commenting on this post :P \$\endgroup\$ Jun 20, 2017 at 16:33
  • 1
    \$\begingroup\$ "Without loops in your code" is a non-observable requirement. I don't think there is a good way to do what you want at all, since there are so many ways to "loop" that you can't possibly define them all. Take this for example. \$\endgroup\$ Jun 21, 2017 at 1:20
  • \$\begingroup\$ This is what Fry is referring to with "non-observable requirement". In general imposing restrictions on which features answers can use is highly problematic. a) There are many many languages that don't have to constructs you explicitly disallow, but which may have similar constructs which aren't in the spirit of the restriction either. But b) "not limited to" doesn't fly because who is to decide whether any given construct is a loop or not? There are even languages where you can write loops without any specific syntax element for them. \$\endgroup\$ Jun 21, 2017 at 8:58
  • 1
    \$\begingroup\$ In general, if you find yourself having to impose explicit restrictions on the allowed approaches to a challenge, it's often a sign that it's not a great idea in the first place. I assume this is why the challenge wasn't received well in the first place. \$\endgroup\$ Jun 21, 2017 at 8:59


In this challenge you will attempt to write a program to perform OCR in the fewest bytes possible. The tests are linked below, the only data that your program receives is the contents of the image, you may not rely on file name, timestamp, or other metadata, additionally you may not query any external source such as the internet or dispatch an independent program to outsource the task of OCR.


Given a hand written word in in image of 80px in height. Output the word. words will consist of lowercase latin letters:



Given the test cases, your score is a percent of the words you have gotten correct. No partial credit.

Tests cases:


  • \$\begingroup\$ The scoring doesn't seem to be affected by the length of the code. Should the specification in the fewest bytes possible be there? \$\endgroup\$ Jun 21, 2017 at 3:16
  • \$\begingroup\$ Closely related. I think this gives a good example of how to do an OCR question well, but it also demonstrates that they're not a good fit for the site. It uses a standard database rather than home-made test cases, and tries to model the standard approach of training set and test set to prevent overfitting, but that standard approach isn't really compatible with our definition of objective scoring, because only the OP knows what the test set is. \$\endgroup\$ Jun 21, 2017 at 8:35

Data exfiltration

Frenzy in the frequency domain.

Summary of the challenge

You must find a way to broadcast a ten-character password through a lossy communication channel and recover the password on the other side. To achieve this you must write two programs. The first program will receive the password as input and encode it as output data for the channel, the second program has to decode the output of the channel back to the password.

Some background

In signal processing theory, many problems are usually dealt with by converting a signal from the time domain to the so-called frequency domain, a trick that relies on the fact that any function can be written as an infinite series of sine waves. Signals can be converted into this domain using a Fourier transform. This transform is lossless, and the resulting signal can be converted back into the time domain using the inverse Fourier transform. The frequency domain has some interesting properties, as the actual values of the signal in it represent the amplitude and phase of different frequencies in the original signal.

A special case exists for when the signal exists out of equally spaced sampled points, called the discrete-time Fourier transform. To perform this transform the fast fourier transform algorithm is commonly used. Given a signal of N samples spaced with dt spacing, it will convert it into a signal containing N frequency bins which are each 1/(N*dt) apart.

Channel definition

The communication channel requires 256 unsigned bytes data as input, and returns 256 unsigned bytes data as output. If the input values are centered around zero and interpreted as data samples on regular intervals, then the output values represent the amplitude of the signal in the frequency domain scaled to use the range 0 to 255, calculated using a discrete fourier transform. The channel is lossy as it only transfers the amplitude of each frequency, not the phase.

It can be simulated using the following python 3 script:

import cmath
def channel():
    # amount of input and output values
    # read the input values from standard input as newline separated integers and center them around zero
    n=list(map(lambda: min(255, max(0, int(raw_input())))-127.5, range(l)))
    # perform a discrete fourier transform
    v=[sum(v*cmath.exp(-2.0j*cmath.pi*t*k/l)for t,v in enumerate(n))/l for k in range(l)]
    # remove artifacts due to the Nyquist limit
    v[1:128]=map(lambda n:n*2,v[1:128])
    # return the scaled magnitude of each frequency bin
    for i in v:print(int(round(abs(i)*cmath.pi/2)))


The password is randomly generated using only using visible ASCII characters (0x20 up to and including 0x7E) and is 10 characters long.

Inputting the password to the encoder, communicating it to the channel, receiving data from the channel and communicating the decoded password should all follow the default input/output rules. The password must be decoded only from data received from the channel, no side-channels are allowed.


This is , where the score is calculated by adding the length of both the encoder and decoder program. For each language, the shortest entry in bytes wins.


  • Is the challenge clear
  • Is the difficulty okay
  • Anything else?


  • \$\begingroup\$ I feel like the background could use some work. I don't think someone unfamiliar with the FFT would know things like how it is periodic in time and in frequency, or that you could use and inverse DFT formula, barring calculation inaccuracies. Your description of the channel largely requires that people are already familiar with this, or that they understand python well. The penalties are largely pointless, it only really serves to make people not want to answer your question. The question is not too hard, but I think as it is it isn't accessible to people who haven't learned this already. \$\endgroup\$ Jun 21, 2017 at 1:09
  • \$\begingroup\$ "Must output to standard output" is the sort of restriction which 90% of languages don't care about and the other 10% will require crazy amounts of boilerplate to accomplish, rather detracting from the rest of the challenge. I recommend that you link to this post to define legal forms of input and output, unless you have a good reason not to. Additionally, penalising builtins with character penalties doesn't really work because the size of the penalty differs from language to language (and those penalties are prohibitively large in most). \$\endgroup\$
    – user62131
    Jun 21, 2017 at 1:35
  • \$\begingroup\$ I've changed the input/output rules and removed the penalties in accordance with your comments. However I'm not sure how to improve the background, as explaining all the interesting tricks you can do with frequency domain manipulation would require significantly more explanation than possible (or interesting for most people) in a challenge. If people really want to learn about the details of it, the background section offers a few links that explain it much better than I could myself. \$\endgroup\$ Jun 21, 2017 at 12:37
106 107
109 110

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .