What is the Sandbox?

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

To post to the Sandbox, scroll to the bottom of this page or click on the "Add Proposal" link below, 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. 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, replace the post here with a link to the challenge and delete it.

See the Sandbox FAQ for more information on how to use the Sandbox.

The Sandbox works best if you sort posts by "active".

Add Proposal

Search the Sandbox

Browse your pending proposals

Get the Sandbox Viewer to view the sandbox more easily

To add an inline tag to a proposal use shortcut link syntax with a prefix: [tag:king-of-the-hill]

| |

2844 Answers 2844

55 56
58 59

Sloppy Shuffle

Write a program that will shuffle the numbers from 1 to 52. Rather than from your language's random facility, the result will be determined by the input. But not in any particular way -- however you choose!

The Rules

  • The program must accept all possible (finite) inputs. It doesn't matter if it is empty, or the result of monkeys with typewriters, or anything in between. Literally any input must be accepted without (unhandled) errors.
  • For each of the 52-factorial possible ways of shuffling the numbers, there must be at least one finite input that will make your program produce this permutation.
  • No matter what (finite) input is given to the program, it must produce some permutation of the numbers.
  • If given the same input, the program must always produce the same permutation.
  • Nothing should be produced on stderr.
  • Standard restrictions apply.


Default input methods (such as stdin or command line args) are acceptable. If using stdin, any finite input from stdin must be accepted (although it doesn't all have to be read). For other input methods, use your best judgement in accepting arbitrary binary or string data as appropriate.

Default output methods (such as stdout) are acceptable. The form of the output should be the number from 1 to 52 in some order corresponding to the permutation as appropriate for your output method.


This is code golf. The shortest answer in bytes wins!

However, in case of a tie in code length, the first tiebreaker is the maximum over all permutations of the minimum input length needed to generate that permutation. The program that has a larger minimum input wins.

(That may have been confusing, so an example: if program A can generate any permutation with no fewer than 100 bytes of input, but program B needs at least 1000 bytes to generate the identity permutation, program B wins the tie.)


This is an example of a program which fulfills the requirements in Lua:

-- return a number from (1,n) depending on input
local function pick_from(n)
  local str = io.read() or ""

  -- always proceed even if input is not a number
  local num = math.floor(tonumber(str) or 0)

  -- guard in case of parsing overflow (e.g. input of 1e99999999999)
  if num ~= num or num > 1000 or num < -1000 then
    num = 0

  return 1 + (num % n)

-- create a list of 52 numbers
local deck = {}
for i = 1, 52 do
  deck[i] = i

-- Fisher-Yates shuffle algorithm
for i = 52, 1, -1 do
  local j = pick_from(52)
  if i ~= j then
    deck[i], deck[j] = deck[j], deck[i]

for i = 1, 52 do

Notice that although I used the Fisher-Yates algorithm, the property that Fisher-Yates generates a permutation uniformly is irrelevant to the correctness of the program.

Another note -- if you never read at least log2(52!) bytes from the input, it is probably impossible for your program to generate all permutations.

| |
  • 3
    \$\begingroup\$ As far as I can tell, printing the input unchanged satisfies the spec. \$\endgroup\$ – feersum Feb 7 '16 at 14:28
  • \$\begingroup\$ "Each possible finite input must produce some permutation of the numbers." If the input is not a valid output (as most are not), simply printing the input does not satisfy this requirement. \$\endgroup\$ – tehtmi Feb 7 '16 at 20:07
  • \$\begingroup\$ Okay, the intent was that every input must be accepted, but I can see how that is not clear from what I wrote. I'll try to edit it. \$\endgroup\$ – tehtmi Feb 7 '16 at 20:12
  • 1
    \$\begingroup\$ Okay, so I see that there must be some input that corresponds to every permutation. But input can be literally anything? I'm also confused by what you mean by "uniform" that is usually used in regard to some sort of probability distribution, but you say that the same input must always do the same permutation, so there doesn't seem to be anything random. \$\endgroup\$ – Liam Feb 7 '16 at 21:15
  • \$\begingroup\$ Yes, the intent is that the program should accept literally any input and produce a valid output. Also true that there is nothing random. I am trying to use "uniform" to evoke the sense that outputs would be evenly distributed across inputs (maybe for each bounded size). However, since I am explicitly not requiring it, it does not need to be well defined for the question to be well-formed. I thought that using the word "shuffle" people would think they are required to use a uniform shuffling algorithm. Maybe it is better to leave this part off. \$\endgroup\$ – tehtmi Feb 7 '16 at 22:11
  • 1
    \$\begingroup\$ Why don't you go with the defaults (function/full program, input via stdin/function argument/command line, etc)? They've proven to work for most challenges. \$\endgroup\$ – nimi Feb 7 '16 at 23:03
  • \$\begingroup\$ I don't want to restrict anyone. I thought it was safer to be more specific, but I guess maybe people don't need to be told. I was a little worried about input methods since my idea of accepting arbitrary input may not have a well-established meaning for all input methods. However, I've tried to edit the question to remove all such restrictions. \$\endgroup\$ – tehtmi Feb 8 '16 at 1:07
  • 1
    \$\begingroup\$ @tehtmi: the main problem with very strict rules is that whichever one you choose it will fit some languages and will be awkward in others. Let's take your requirement for nl/space/tab separated numbers as an example: in some languages it's just a "print" of an array variable. Other languages would print brackets around and commas in-between the elements, so they have to loop over the array and print each number individually. People don't like such disadvantages for their favorite language. Please consider allowing "native array format" or "any reasonable format" for the output list. \$\endgroup\$ – nimi Feb 8 '16 at 4:29
  • 2
    \$\begingroup\$ The obvious golfed approach is to say that if the input is a valid output, print the input; otherwise print the identity permutation. In no way does it meet what I would presume to be the intent of the challenge, but it does meet the spec. \$\endgroup\$ – Peter Taylor Feb 8 '16 at 8:17
  • 1
    \$\begingroup\$ ^ yeah. I would recommend narrowing the input specs. "Input can be anything" will usually get you into trouble. \$\endgroup\$ – Liam Feb 8 '16 at 19:45
  • \$\begingroup\$ @Peter Taylor: I actually have no problems with that solution. I'm not convinced, though, that it would obviously be the best solution. Probably it would be best in some languages and not in others. Checking whether an input is a permutation seems to be of similar complexity to many shuffling algorithms, but it may be more likely that some languages would have built-ins to do it. \$\endgroup\$ – tehtmi Feb 8 '16 at 22:19
  • \$\begingroup\$ @Liam: I think the input spec is the only thing that makes this problem interesting (and original -- there have been other shuffling golf challenges). Maybe nobody thinks it is a good question in which case it can die in the sandbox, but at least for myself, having the input as another dimension over which to optimize seemed somewhat interesting. \$\endgroup\$ – tehtmi Feb 8 '16 at 22:22
  • 1
    \$\begingroup\$ Many many languages have built-in sort, and sorting and then checking that a[i] = i+1 for all i is sufficient. \$\endgroup\$ – Peter Taylor Feb 8 '16 at 22:27
  • 1
    \$\begingroup\$ You could possibly around the described solution by limiting input to a set number of characters and then require that each of the 52! outputs have at least a certain number of things that map there, or require that every output has the exact same number of inputs that map there. \$\endgroup\$ – Liam Feb 8 '16 at 22:41
  • \$\begingroup\$ Okay, so you are iterating through a list once and doing some simple logic. In my (ungolfed) example, I iterate through a list once and do some simple logic. My loop can basically be reduced to three logical steps -- input, sanitize input, swap. Your loop only has one logical step -- compare. However, you have three logical steps before your loop -- input, sanitize input, sort. In golf, it generally doesn't matter if steps are in a loop or not. I'm sure we could argue about my exact breakdown of the steps, but it still seems to me that both methods are similar. \$\endgroup\$ – tehtmi Feb 8 '16 at 22:46

Prove that this program terminates or run forever


Halting problem has been shown to have no complete algorithm. Yet it is important to understand what the program does and verifying the program if the program matches with its specification



Your challenge is to write program that takes no input in given language (so no obscure language is used) and a formal proof that the program is halting or run forever. Output will be ignored.


  1. Proof must be written formally.
  2. No computer aided proof. (i.e. running the program, or convert it into Coq, Idris, or another dependent-typed language)
  3. This is not challenge, so do not obscure the program.
  4. If your program is not cracked after 6 days, then you must give the proof whether your program halts or not. It is then verified.
  5. Your program should not depend on unsolved problems.
  6. Cracking your own submission is not allowed.
  7. Score for submission:
    • Cracked : -5
    • Verified : 10
    • Flawed : -15



Your challenge is to proof that the program that is posted in Challenger thread is halting or run forever.


  1. Proof must be written formally.
  2. No computer aided proof. (i.e. running the program, or convert it into Coq, Idris, or another dependent-typed language)
  3. Score for submission:
    • Verified (With no proof from owner) : 8
    • Verified (With flawed proof from owner) : 12
    • Flawed : -8

Sandbox Question

What language should I use? The requirement is:

  1. Turing Complete
  2. Imperative
  3. Easy to understand, even to noncoder
  4. Easy to write

Also, I need help with the leaderboard

| |
  • \$\begingroup\$ Why is the downvote? \$\endgroup\$ – Akangka Feb 8 '16 at 13:41
  • \$\begingroup\$ as i understand it, the robber doesn't actually write any code, huh? \$\endgroup\$ – undergroundmonorail Feb 8 '16 at 15:09
  • \$\begingroup\$ @undergroundmonorail I don't know which from Prover and Challenge is the robber? \$\endgroup\$ – Akangka Feb 9 '16 at 3:55
  • 1
    \$\begingroup\$ This is unfeasible. If I write a program that stops when it disproves the Goldbach conjecture, no one here (including me) is going to know if it stops or loops forever (without becoming instantly world famous). \$\endgroup\$ – Calvin's Hobbies Feb 9 '16 at 13:15
  • \$\begingroup\$ @Calvin'sHobbies You have to provide proof after 6 days. If not, the submission will not be safe and you will not get score at all. \$\endgroup\$ – Akangka Feb 9 '16 at 13:19
  • 1
    \$\begingroup\$ It becomes really a question of who can find the most obscure mathematical result which can be translated into code rather than a programming contest per se. \$\endgroup\$ – Peter Taylor Feb 9 '16 at 14:34

How clean is my snow?

Idea shamelessly take from https://codereview.stackexchange.com/questions/118538/how-clean-is-my-snow#comment221029_118538

The challenge

Your challenge is to tell how clean my snow is. Unclean snow is any snow that is not pure white. This would be super easy except for one hiccup, not all of the image is a picture of the snow, in the case of the image above some of the image is the sky (can't you tell? I'm such a good artist!).

Determining where the background is

[Write-up coming, it has to do with how large the splotch is and finding the biggest white spot, so the clouds don't count]

enter image description here

| |

ToUpperCase... Mathematica style

For this challenge, you must write a program or function that converts every character in a string to upper case. "Wouldn't this be too broad/a duplicate/etc.?" you ask. Nope; you have to exactly implement Mathematica 10.1's ToUpperCase function!


ToUpperCase works quite peculiarly on Unicode. For example, ß converts to SS! The full replacement list (from:to(,to);):



  • You cannot use a built-in that completely solves this challenge.
  • If a function is written, the input is guaranteed to be a single string or equivalent.
  • All characters not specified in the replacement list are to remain unchanged.
  • All codepoints will be less than U+10000.
  • If and only if your language can only take bytes as input, the string will be encoded in UTF-8.
  • Standard loopholes are disallowed.
  • Have fun!

Test cases TBD

Meta Questions

  • What are some good test cases for this challenge?
  • Is there something that I possibly missed while writing this challenge?
| |
  • 1
    \$\begingroup\$ '"Wouldn't this be too broad?" you ask.' No I would ask "Isn't this a duplicate?" ;) \$\endgroup\$ – Martin Ender Feb 11 '16 at 13:16
  • 5
    \$\begingroup\$ "You can't use Mathematica for this challenge." Why not just ban the built-in? \$\endgroup\$ – Martin Ender Feb 11 '16 at 13:16
  • 1
    \$\begingroup\$ Further notes: 1. the list of transformations is short enough to be included in the post to ensure that it's self-contained. 2. You could just call it "Unicode-aware case conversion" or something. I'm pretty sure that the built-ins of languages like C# and Java will also perform the conversion the same way. \$\endgroup\$ – Martin Ender Feb 11 '16 at 13:19
  • \$\begingroup\$ @insertusernamehere Looking at the list that's actually the only special one. \$\endgroup\$ – Martin Ender Feb 11 '16 at 13:21
  • \$\begingroup\$ >>> "ß".upper() 'SS' - Python might not do the whole list the same way, but it does do some. So reiterating Martin's comment, I wouldn't be surprised if there was something out there which did most of the list the same, if not all... \$\endgroup\$ – Sp3000 Feb 11 '16 at 13:23
  • \$\begingroup\$ @MartinBüttner I'm planning on possibly making a series out of this. \$\endgroup\$ – LegionMammal978 Feb 11 '16 at 13:28
  • \$\begingroup\$ How close to solving the challenge does a builtin have to be to be disallowed? e.g. what if a builtin only gets half of them correct, and needs to encode the rest? 75% correct? 90% correct? \$\endgroup\$ – Sp3000 Feb 11 '16 at 13:32
  • \$\begingroup\$ The list needs a bit of cleaning up. In particular, 223:83,83 is clearly erroneous. \$\endgroup\$ – Peter Taylor Feb 11 '16 at 14:38
  • \$\begingroup\$ @PeterTaylor Why? Isn't 223 the character code of ß and 83 the character code of S? \$\endgroup\$ – Martin Ender Feb 11 '16 at 15:38
  • \$\begingroup\$ @MartinBüttner, oh, I see. So what needs fixing is to document the list and describe its format. \$\endgroup\$ – Peter Taylor Feb 11 '16 at 15:57
  • 1
    \$\begingroup\$ 1. I'm fairly certain Mathematica can in fact encode any Unicode character, most likely by using surrogate pairs (two characters from U+D800 to U+DFFF). 2. Uppercasing ß as SS is fairly standard, but why on Earth would Mathematica uppercase ÿ as Y when there's a perfectly good Ÿ available? \$\endgroup\$ – Dennis Feb 11 '16 at 20:17
  • \$\begingroup\$ @insertusernamehere I didn't want to break peoples' browsers with non-rendering characters (Mathematica uses its own custom font). \$\endgroup\$ – LegionMammal978 Feb 11 '16 at 23:11
  • 1
    \$\begingroup\$ @Dennis 1. Its default encoding is UTF-8, trying to paste emoji makes the interpreter explode, FromCharacterCode only accepts up to U+FFFF, and trying to use surrogates renders a two invisible characters, which makes me believe this is the case. 2. One does not question the inner workings of Mathematica. \$\endgroup\$ – LegionMammal978 Feb 11 '16 at 23:14
  • 1
    \$\begingroup\$ OK, my mistake. A bit of googling revealed that Mathematica's Unicode support is incomplete and exceptionally buggy. \$\endgroup\$ – Dennis Feb 11 '16 at 23:36

Use Simpson's Rule

Simpson's rule is a fairly simple method for approximating a definite integral of one variable. The idea is to approximate the function to be integrated by a series of interpolated parabolas, and then find the area under those.

As I learned in first-year calculus, the form of Simpson's Rule we'll be using is:

Simpson's rule from Wikipedia

where the width of each interval is h.

Equivalently, this is the dot product with the vector h/3([1,4,2,4,...,1]) the same length as the input.


  • An array of n>1 real numbers representing the values of f at x-values equally spaced by h. n will be odd.

  • h, a positive real number.


The area approximation that Simpson's Rule gives.

Test cases

[0,0,0], 1 -> 0
[3,1,4,1,5], 1 -> 8

[add more]
| |
  • \$\begingroup\$ Simpson's rule requires an even number of intervals, so there has to be an odd number of endpoints. \$\endgroup\$ – Dennis Feb 12 '16 at 6:22

Implement the Block Sort sorting algorithm

Block sort is an interesting sorting algorithm (comparatively speaking). Here are some of its important properties:

  • O(n log n) time complexity in worst and average case
  • O(n) time complexity in best case
  • O(1) space complexity (not including the space that holds the list itself)
  • Stable

If you check out this table comparing sorting algorithms, you'll see that it's the only one that has the whole row highlighted in green.

Your challenge is to write an implementation of the block sort algorithm in the fewest bytes.

| |
  • \$\begingroup\$ I take it you're actually going to explain block sort in the spec before posting this? \$\endgroup\$ – Martin Ender Feb 14 '16 at 18:32
  • \$\begingroup\$ @MartinBüttner I'd assume so, but I don't know if I'll ever get around to it, mainly because it seems pretty tedious/complicated. \$\endgroup\$ – PhiNotPi Feb 14 '16 at 18:40

Advent of Code, puzzle 1

I don't know if anyone here spent their December working on the problems found on Advent of Code, but I thought some of the simpler problems might make good code golf puzzles.

So, here's the first one. There will be two challenges, and the solution should be a pair of programs, each of which solves one challenge.

Score is based on the combined byte count of the two programs.

(An alternative would be to also allow a single program that produces a tuple of the two solitions- what do you think?)

Input: An unbalanced string of open and close brackets.

Output 1: The count of the number of open brackets take away the number of close brackets.

Output 2: The index of the first close bracket that causes the running sum to reach -1.

| |
  • \$\begingroup\$ This could be a copyright problem. \$\endgroup\$ – Martin Ender Feb 15 '16 at 16:11
  • \$\begingroup\$ I'll contact the creator and ask his permission to reproduce his problems. I would not imagine it to be an issue but you're right that I should verify first. \$\endgroup\$ – A Simmons Feb 15 '16 at 16:18
  • 1
    \$\begingroup\$ I'm generally not a fan of asking for multiple programs in the same challenge and combining their byte count, if the two solutions don't influence each other at all. I'd say either ask for a single solution that computes both numbers at once, or choose one of the problems. (Also, FYI the first challenge is trivial in GolfScript and CJam, because ( and ) are the operators for decrement and increment.) \$\endgroup\$ – Martin Ender Feb 15 '16 at 16:34
  • \$\begingroup\$ Yeah I actually used these as practice problems when my partner and I were learning CJam over the weekend, but I can't see anything better than a 5-byte solution in CJam for the first one: 0q~W*. Perhaps just putting the second challenge is better for this one. \$\endgroup\$ – A Simmons Feb 15 '16 at 16:39
  • \$\begingroup\$ IIRC one or two of these were posted in December and deleted for copyright reasons. \$\endgroup\$ – Peter Taylor Feb 15 '16 at 16:58
  • \$\begingroup\$ The creator has now given the go-ahead for these problems to be replicated twitter.com/ericwastl/status/699455417768923137 \$\endgroup\$ – A Simmons Feb 16 '16 at 11:10
  • \$\begingroup\$ Might be worth including that in the challenge to avoid repeating the same discussion when it goes to main. \$\endgroup\$ – Martin Ender Feb 17 '16 at 8:22

Knights and Knaves posted

Undeleted so that comments are visible

| |
  • \$\begingroup\$ Related. \$\endgroup\$ – PhiNotPi Feb 3 '16 at 2:44
  • 1
    \$\begingroup\$ I find some of the wording rather confusing, in particular the statement that Is is a logical operator (shouldn't that be Iff?) and the references to de Morgan's laws, which are theorems and not operators. But essentially ISTM that this question differs from the other question only in the parser (which makes some simplifications and adds a case to parse =>), and I would vote to close it as a duplicate. \$\endgroup\$ – Peter Taylor Feb 3 '16 at 14:34
  • \$\begingroup\$ @PeterTaylor I'll add some stuff to clear up the IS thing, because you're right, it isn't really a logical operator, I was just trying to keep it simple. I think that the parsing of conditionals and having to actually use De Morgan's makes this challenge significantly more complicated than the other. Especially given that other is literally focused on the English parsing, whereas this is focused only on the logic. Basically you cannot "trivially" change answers from the other question to solve this one. \$\endgroup\$ – Liam Feb 3 '16 at 17:49
  • \$\begingroup\$ I really can't see any fundamental difference between the two questions with respect to de Morgan's laws. The earlier question doesn't have a direct Not operator, so requires abusing Nor, but it allows arbitrary nesting of clauses. \$\endgroup\$ – Peter Taylor Feb 3 '16 at 21:11
  • \$\begingroup\$ @PeterTaylor Could you quote the other challenge? I'm reading it and not seeing anything to do with De Morgan's. I'm specifically looking at the "Parsing" section. \$\endgroup\$ – Liam Feb 3 '16 at 21:15
  • 1
    \$\begingroup\$ both [clause] and [clause] either [clause] or [clause] neither [clause] nor [clause] between them contain everything you need to set up a clause equivalent to ~(A ^ B) or ~(A v B). \$\endgroup\$ – Peter Taylor Feb 3 '16 at 21:28
  • \$\begingroup\$ @PeterTaylor Yes, but you don't have to parse the negations of con/disjungtions and hence do not need to use De Morgan's at all. Sure, they end up equivalent at the end of the day but that's not the point. I'm not allowing people to read inputs and say "Hey, X is equivalent to Y... why don't I just enter Y instead." If it can't parse X, then it fails the spec. \$\endgroup\$ – Liam Feb 3 '16 at 21:33
  • \$\begingroup\$ There's nothing in your question which obliges people to use de Morgan's laws either. They just need to brute-force all possible assignments and evaluate the expressions. \$\endgroup\$ – Peter Taylor Feb 3 '16 at 21:36
  • \$\begingroup\$ @PeterTaylor Yes, and they would be in their rights to do so. However, that is not how people actually solved the other question. And it may or may not be the best way to solve this one. So sure, that is a valid concern, but not evidence that this is a duplicate. \$\endgroup\$ – Liam Feb 3 '16 at 21:39
  • \$\begingroup\$ It is how ugoren solved the previous one; Howard's solution is harder to understand, so I'm not sure exactly how it works. \$\endgroup\$ – Peter Taylor Feb 8 '16 at 22:43
  • \$\begingroup\$ @PeterTaylor Hmm, sorry I must have missed that. That is true. There is still the matter of conditional logic however. \$\endgroup\$ – Liam Feb 8 '16 at 22:58

Diopter lenses

In photography, there are thin lenses that you put in front of a photographic lens to make it behave like a close-up lens. Each of these lenses has an associated diopter value which is a positive integer. If you stack two (or more) of these lenses you get an equivalent of a lens with the diopter value that is the sum of the values of those lenses.

The problem

Your program should take one diopter value n as an input. The input need not be validated.

You should output in any human readable form a list of diopter lenses such that:

  • the maximum diopter value you can form by stacking the lenses is n,
  • every diopter from 1 to n can be formed by stacking a combination of those lenses,
  • there exists no set of fewer lenses that complies to the above rules.

An example

Given the input of:


Print the output of




The rules

This is code golf, so the objective is to write the shortest possible code, but, since there is a trivial solution that might not be obvious to some, I suggest that the answer be encoded by some means so one wouldn't see the solution before attempting to solve the problem.

Any type of output is accepted, as long as the program outputs correct clearly separated positive integers and no other alphanumeric character.

My solution

python 2, 52 bytes, base64 encoded


, ,

| |
  • \$\begingroup\$ I think this is too much of a math problem and not enough of a code-golf problem. \$\endgroup\$ – lirtosiast Feb 15 '16 at 20:58
  • \$\begingroup\$ That's exactly why I posted it here. Not having seen many on this site before, I was curious whether such problems were adequate for code-golf. \$\endgroup\$ – Fran Borcic Feb 15 '16 at 21:02

Plotting Dynamical Systems in ASCII


  • A Function to and from the real plane (henceforth R2) , call it F

  • A point in R2 that is to be the center of a disk, call it c

  • A radius, call it r

  • An integer representing the number of iterations to be performed, call it n.


You are to output n+1 ascii "images". The first depicts the disk D (with center c and radius r) and the ith image depicts F^i(D), aka F(...F( F(D) )...) where we have applied F to D, and then applied F to F(D) and so on until we have applied F i times.

Input Details:

  • F will always be polynomial. See below for acceptable examples.

  • Any c = (c1,c2) given will satisfy |c1|<50 and |c2|<25.

  • Also, r will always be small enough that D the disk around c with radius r will contain no points with an x coordinate greater than 55 or less than -55 and no y coordinate greater than 32 or less than -32.

  • n will be positive and less than 5.

Output Details

  • We will be looking at a rectangular subset of R2 given by { (x,y) : -60 <= x <= -60 and -33 <= y <= 33}. i.e. a rectangle with side lengths 120 and 66 centered at the origin.

  • Each output image will contain 320*320 characters. This represents the above region in R2 with gradations of 0.5 along each axis.

  • Each character will represent a single point in R2. For example if we just look at part of the first quadrant (with the axes labeled which you need not do)

    7 .............................
    6 .............................
    5 .............................
    4 ............................
    3 .............................
    2 .....................b.......     b =(10.5,2)
    1 ..a..........................     a = (1,1)
      .............................     z = (0,0)
    0 z............................  --------> x 
      0 1 2 3 4 5 6 7 8 9 | | | | |  
                        10| 12| 14
                          11  13
  • Points that are empty (i.e. not in F^n(D)) will be represented by the . character, whereas filled spaces will be represented by #.

  • Each image will have the same or fewer # represented points in it because we will not be displaying points that are outside the region.

    How do these maps work?

These are iterative maps we will be dealing with. For each point # in a given image, to get the next image, you will apply the given map F to it. If the point leaves the viewing area, you need not render it. However if in a later iteration it should reenter the viewing area, it should reappear.

For the purposes of this challenge, the image of a point should be rounded to the nearest 0.5.

A map might be F(x,y) = (4x(1-x), x+y)

| |

Hourglass simulator

Write a full program or function to simulate an hourglass.


n, the number of seconds on the hourglass.


At the start, there are n seconds on a timer, and the timer is counting down. When the user presses the spacebar with t seconds left, set the time left to n-t. Terminate the program when time runs out.

This models an hourglass where the top of the hourglass is initially filled with n seconds of sand. When the spacebar is pressed, the hourglass flips by 180°. When either side of the hourglass runs out of sand, the program terminates.

[Is there anything I'm missing? This spec seems really short.]

| |
  • 2
    \$\begingroup\$ I don't understand this spec. Are you displaying an hourglass? Does the program output anything? \$\endgroup\$ – xnor Feb 16 '16 at 0:25
  • 4
    \$\begingroup\$ "when the spacebar is pressed" seems quite limiting, especially for terminal interaction which might not flush STDIN before the end of the line. I'd allow any sort of user action, but if you want to make it specific, then sending a line/hitting enter would probably allow a lot more languages to participate. \$\endgroup\$ – Martin Ender Feb 16 '16 at 8:25
  • \$\begingroup\$ You need to state exactly how the hourglass should be displayed \$\endgroup\$ – ASCII-only Feb 16 '16 at 9:28
  • \$\begingroup\$ @somebody As far as I understand the challenge the program shouldn't display anything. It should just act like an hourglass. \$\endgroup\$ – Martin Ender Feb 16 '16 at 14:00
  • \$\begingroup\$ @xnor cc the above \$\endgroup\$ – Martin Ender Feb 16 '16 at 14:00
  • \$\begingroup\$ Thomas, seems likely this is going to come up again on main if you leave the spec as it is. Maybe don't talk about the "top of the hourglass" and "seconds of sand" and flipping "by 180°" but phrase the challenge in terms of a timer instead, whose current value gets subtracted from n each time there's user input. \$\endgroup\$ – Martin Ender Feb 16 '16 at 14:02
  • \$\begingroup\$ @Martin I agree. \$\endgroup\$ – lirtosiast Feb 16 '16 at 15:58
  • \$\begingroup\$ @lirtosiast shouldn't it replace time with n-timewhen flipped instead? \$\endgroup\$ – ASCII-only Feb 17 '16 at 6:26
  • \$\begingroup\$ @somebody Oh, I guess that's the same behavior. \$\endgroup\$ – lirtosiast Feb 17 '16 at 6:31
  • \$\begingroup\$ Since taking real-time input is limiting for some languages, what if you took in a list of times at which the presses happen? \$\endgroup\$ – xnor Feb 17 '16 at 7:56

Dice sums from side values

I rolled some dice and put them on the table with their sides touching and forming one object with 8 horizontal sides. This means I put the dice in one of these formations (up to rotations):

xx   x
xx   xx  xxx

I read the number pips on the 8 horizontal sides in counter clockwise direction. You should write a program or function that given the list of the 8 horizontal sides in counter clockwise order returns a list of possible sums of the top pips from the dice rolling.

The layout of a die is always the following:

    | 1 |
| 2 | 3 | 5 | 4 |
    | 6 |

For example if the input is 3 2 1 1 2 6 6 5 there are four possible configurations with top views:

623, 633, 643, 653 giving the output list 11, 12, 13, 14

with the sides always being


For the input 1 1 2 2 3 3 2 2 there is only one configuration with the top view:

31 giving the one element output list 14




This is code golf so the shortest entry wins.

Related code golf with a single die: Determine dice value from side view

| |
  • \$\begingroup\$ Is there any input where multiple layouts are valid? (If so you'll need test cases for that.) Also your premise is a bit weird since the number of dice isn't constant. ;) \$\endgroup\$ – Martin Ender Feb 27 '16 at 16:32
  • \$\begingroup\$ @MartinBüttner I think there will be inputs with multiple valid layouts but I don't have code yet to check it. I will change the premise to "the 8 side numbers are all I remember". That might be a bit sensible. \$\endgroup\$ – randomra Feb 27 '16 at 18:40

Length of a month starting from a specific day

Given a date, you are to output the number of days from today, to the last date that has a number less than today next month.

It can be calculated this way:

  • If the current date in the month is not more than the number of days next month, output the number of days in the current month.
  • Otherwise, output the number of days in the next month + number of days starting from the current day in the current month.

This is code-golf. Shortest code wins.


2016-01-21  ->  31
2016-01-30  ->  31
2016-01-31  ->  30
2016-02-29  ->  29

Should leap years be supported?

| |

Repeatedly convert from minimal base to base 36

Your task is to convert an input of a list of strings which represent arbitrarily large numbers from the lowest possible base to base 36, repeatedly, until there is no further change to be made.


  • You may not use base conversion builtins.
  • From 0 to 35 in base 36 is defined as:
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
  • All submissions will be tested on this cloud 9 workspace and should be uploaded for testing (along with any updates) on this GitHub repository.
  • All submissions must be written for compilers/interpreters that:
    • Are free to use.
    • Do not take up excessive space.
    • Can run with simple installations on Ubuntu 14.04.

Test Cases:

Coming soon
| |
  • \$\begingroup\$ Do you expect to get runtimes large enough to be measurable? \$\endgroup\$ – Peter Taylor Mar 1 '16 at 10:32
  • \$\begingroup\$ @PeterTaylor Yes - I expect to convert lists of large (arbitrarily precise) numbers. \$\endgroup\$ – Addison Crump Mar 1 '16 at 13:17
  • 1
    \$\begingroup\$ That doesn't really answer the question. A random 1000-digit base-35 input will become a roughly 990-digit base-36 string after the first step, and the probability of going to a second step is about (1/36)^990, which is pretty negligible. But one base conversion of a number on the order of 1000 digits isn't going to take long enough to time. I would hazard a guess that you need input on the order of hundreds of millions of digits to be timeable, and then the business with the loop is completely pointless because for practical purposes it will always run once. \$\endgroup\$ – Peter Taylor Mar 1 '16 at 15:43

Elementary Cellular Automata, My Dear Watson

A seemingly innocent dinner party composed of elementary cellular automata has just been turned into a murder mystery. One of the cellular automaton guests has killed the host! All that remains as evidence for who committed the crime is the nth generation of the perpetrator. Luckily for them, Sherlock Holmes is on the case.

Show Watson how it's done by taking an integer n, and a string representation of the nth generation of the murderous automaton and printing or returning a list of the possible suspects (the numbers representing the rule of each amphichiral elementary cellular automata, see the bottom of the linked page.)


  • The input string will have length 2n+3 for the nth generation.
  • The first character of the string represents the values on the infinite tape to the left, and the last character of the string represents the same for the right.
  • Assume that the automata start with a single 1 in the center of a string of all 0s.


Generation 0 of every automaton:



  • I don't have a reference implementation yet, nor have I created any examples.
| |
  • \$\begingroup\$ What is this string representation? Will it be padded with zeros? \$\endgroup\$ – LegionMammal978 Sep 26 '15 at 17:24
  • \$\begingroup\$ Then again, you would need a way to show the background (Rule 255, for example, would need infinite bits.) Also, should we assume that it starts with a single one in a background of zeros? \$\endgroup\$ – LegionMammal978 Sep 26 '15 at 19:53
  • \$\begingroup\$ So wait... You aren't given the full generation? Also, do the generations start at 1 or 0? \$\endgroup\$ – LegionMammal978 Sep 26 '15 at 20:40
  • \$\begingroup\$ Looking at your Mathworld link, it seems that you would need 2 background bits. \$\endgroup\$ – LegionMammal978 Sep 26 '15 at 21:21
  • \$\begingroup\$ If I were a Haskell programmer, I would feel rather hard-done-by that the spec seems to require using an IO monad even if I'm writing a function rather than a full program. Is the special-cased output really worth it? \$\endgroup\$ – Peter Taylor Mar 1 '16 at 21:07
  • \$\begingroup\$ @PeterTaylor I suppose you're right. Updated. Also, perhaps someone could help with a reference implementation, or least some examples? The effort it would take me to create a solution is probably more than someone else. I don't really know a lot about cellular automata. \$\endgroup\$ – mbomb007 Mar 1 '16 at 21:26
  • 2
    \$\begingroup\$ Test case generator. Each line of output contains a generation and then the amphichiral rules which give it. Change the 10 which has a comment about generations if you want to run more. \$\endgroup\$ – Peter Taylor Mar 2 '16 at 14:34

Sort My Youtube Playlist

Help! My playlist is all unsorted! I need to sort it, but I can only move a video to the top or the bottom. I'd like to do this quickly so I need a solution with the minimum amount of moves. But I'm lazy and it seemed like a good fit, so I'm posting it here and now you have to do it! Now, since this is code golf, you have to do it in as few bytes as possible.

Input is a permutation of the values from 1 to n (where n is any number from 1 to ∞). Output is a list of moves that sorts the list. For example for input 1 3 2 4 a valid output would be 2D 3D (second element to bottom, third element to bottom)

Test cases:

Input         Possible Output
1 3 2 4       2D 3D
5 4 3 2 1     4D 3D 2D 1D
| |
  • 3
    \$\begingroup\$ I'd flag as unclear. Input and output specifications? Test cases? Just a description is not enough. \$\endgroup\$ – user48538 Feb 29 '16 at 16:43
  • \$\begingroup\$ I'm having trouble understanding the test cases. No matter which side I try as "bottom", neither one of the outputs seem to sort the inputs. \$\endgroup\$ – Geobits Mar 1 '16 at 15:16
  • \$\begingroup\$ For the first input, it is 1 3 2 4 1 2 4 3 1 2 3 4 For the second, 5 4 3 2 1 5 4 3 1 2 4 5 3 1 2 4 5 1 2 3 5 1 2 3 4 1 2 3 4 5 \$\endgroup\$ – CalculatorFeline Mar 1 '16 at 16:10
  • 1
    \$\begingroup\$ 1. "A list of values from 1 to n" without any other mention of n says nothing about whether or not there are duplicates. I think you mean "a permutation of the integers from 1 to n", but that needs to be explicit. 2. The top appears to be index 0 (or 1 in weird languages) and the bottom index n-1, but that needs to be explicit. 3. 2D seems to mean "move the value at index 2 to the bottom": "element 2" is far too easy to interpret as the element with value 2. 4. The first paragraph says "minimum amount of moves", but the second test case doesn't meet that criterion. \$\endgroup\$ – Peter Taylor Mar 1 '16 at 21:12

Binary Arithmetic Using Unary Operators

This is based off a game I was playing with a friend a few years back. How many different mathematical operators can you implement using only unary operators in your source*. We were able to implement most basic arithmetic in C, but for this challenge you can use any language.

* Except under certain conditions, see below.


All binary operators are disallowed, except under the following conditions:

  • Binary comparison operators are allowed as long as one operand is a constant (e.g. you can do if (x == 0) or if (x) but not if (x == y))
  • You may use binary assignment to load user input, only at the start of your code, or if you create a binary = method using these rules.
  • You may assume that all variables are default-initialized to 0; if your language does not default-initialize variables, you are allowed to set them to zero only at the start of your code.

Additionally, please note the following:

  • You do not have to write a complete program if your language supports functions/methods.
  • You can use other operators from your source (e.g. your implementation of * could use your implementation of +)
  • Standard library functions follow these rules too (e.g. you can use sqrt(x) but not mod(x, y))


Your score is determined by the formula [code size in bytes] / [number of operators implemented]. So for example, a 300-byte program that includes the functions +, -, and * would count as 300/3 = 100. Lowest score wins.

| |
  • 3
    \$\begingroup\$ What about n-ary operators? Ternary operators? Currying? I think this has a lot of holes with languages that aren't procedural by nature. \$\endgroup\$ – FryAmTheEggman Mar 4 '16 at 17:43
  • \$\begingroup\$ for (0 .. 10) { stuff with $_ } is a binary operator, since it takes two arguments, 0 and 10. However, $i=0; while(++$i <= 10) { stuff with $i } is unary, since the binariness of it is an initial zeroing and a comparison with a constant. Did I understand that right? \$\endgroup\$ – msh210 Apr 27 '16 at 19:41

[title TBD]


An integer n between 1 and [currently 1652; TBD at the time of posting the comic], inclusive.


The XKCD title for comic number n. (This is the text written above the comic panel, i.e. the text content of the <div id="ctitle"> element, not the title-attribute value of the img element. Here's a handy list, though the actual comic on xkcd.com will govern if it differs from what's on that list. However, the title is displayed in caps and smallcaps due to CSS, and you must output it in caps and lowercase (respectively).)

(If by the time the question is posted there's a comics with an ampersand-escaped character reference — I don't think there are any now — then I'll also add a caveat about how the output of your program should include the actual character, not the ampersand-escaped reference.)


I/O can be by any standard means and in any standard format. And no using the Internet to look up the title.

| |
  • \$\begingroup\$ This might get very few (if any) answer since that is such a massive task. Maybe more appropriate as a test-battery where submissions are scored by how many they get right divided by code size? \$\endgroup\$ – James Mar 8 '16 at 6:37
  • \$\begingroup\$ @MyHamDJ, oh, good idea, thanks. I'll probably edit it to that (not just now). \$\endgroup\$ – msh210 Mar 8 '16 at 6:38
  • 1
    \$\begingroup\$ @MyHamDJ I disagree that the current question is too hard. It's just an exercise in compression. \$\endgroup\$ – lirtosiast Mar 12 '16 at 2:08

The overall task will involve extracting market data for various trading instruments (represented by unique symbols), applying some transformations and statistical functions, and displaying the results in a report.

Obtain the following QUOTES series from Bashoop: TYQUOTES, FVQUOTES

The quotes data is stored as a BBO. BBO stands for best bid/offer, which represents the best bid and ask (ask and offer are interchangable terms) in the market for a given instrument at any given time. At each timestamp it contains, in the following order: bid price, bid quantity, ask price, ask quantity

  1. Calculate a VwMpt at each timestamp t for each instrument's QUOTES series VwMpt_t = bid_price_t + (ask_price_t-bid_price_t) * (bid_qty_t / (bid_qty_t+ask_qty_t))
  2. Calculate a rolling correlation rho of VwMpt returns (first difference, i.e. derivative) sampled at 1 minute intervals with a lookback of 100 samples
  3. On a webpage, display a plot of VwMpt substracted from the first sample (so the time series starts at 0) of both series on the same line chart, and below it plot the rho lined up along the same time axis. You may use a library like Flot or something similar.

To download a series with a series_id of FVQUOTES from a Bashoop instance located at you can: curl -s -d "series_id=FVQUOTES" -d "start_ts=0" -d "end_ts=1451606400000000" -d "compress=0" -X GET where start_ts and end_ts are micros send epoch. In this case we want the full history.

| |
  • \$\begingroup\$ This still suffers from all the same issues as your post on the main site. You haven't specified a winning criterion here, but just saying fastest code wins isn't one, unless you specify how your are going to measure which code is the fastest. \$\endgroup\$ – Dennis Mar 9 '16 at 15:34
  • \$\begingroup\$ What would you suggest would be a direct method to measure performance in this case? @Dennis \$\endgroup\$ – petergt Mar 9 '16 at 20:58

Parse default arguments

Many languages have the concept of default/variable arguments. It basically means you can have a function that when given too few arguments, will fill in the missing arguments with specified values. For example, you can do the following in Python:


def f(x="default string"):
  print x

This means that calling f("foo") will print "foo", but calling f() will print "default string".

Python also has a mechanism for handling too many arguments ("rest"):

def f(*stuff):
  for thing in stuff:
    print thing

You can of course also mix these:

def f(x, y="default string", *z):

Unfortunately, python (pre-3.5), being python, yells at you when you put a default argument before a non-default argument. That's silly. You guys are smart; you should be able to make that work.


Write a program, function, or whatever that when given a string representing the arguments and values passed to them, will print each argument's resulting value.

  • If there are too few arguments, the mandatory arguments should be applied first, then the rest of the values into the default arguments (left-to-right).
  • If there are too many, apply all values to arguments, and the remaining into the "rest" argument.

I'm even confusing myself, just look at the test cases


  • a string, array, or other reasonable format representing the parameter declaration
  • a string, array, or other reasonable format representing the values passed to the arguments


  • the resulting values of all the arguments, in a reasonable format.
    note: "reasonable format" will be defined later

Test Cases

Test cases will be in the following format:

{arg string}
{value string}
=> {output}

So, here they are

x, y, z
10, 2, 4
=> x:10, y:2, z:4

x=2, y
=> x:2, y:5

a, b="a", c, *d
3, 4
=> a:3, b:"a", c:4, d:[]

foo, bar=2, *baz
9, 3, "kqly", 5
=> foo:9, bar:3, baz:["kqly",5]

*x, y
"ha", 2, 3
=> x:["ha",2], y:3
| |
  • \$\begingroup\$ "Unfortunately, python, being python, yells at you when you put a default argument before a non-default argument. That's silly. You guys are smart; you should be able to make that work." Actually, this is false starting Python 3.5, at least with the f(x,y="abc",*z) example. \$\endgroup\$ – Sp3000 Mar 13 '16 at 14:25
  • \$\begingroup\$ @Sp3000 that's good to know! See my edit. Hopefully this still requires some additional processing or I may need to modify the question so Python(/ruby?) users can't just use eval \$\endgroup\$ – Cyoce Mar 14 '16 at 7:04

Is this number random?: Round 2

The same as Is this number random?, but with 256 or 512 numbers in each category instead of 64; thereby making a modulo-chain infeasible to find. I hope this will encourage more interesting strategies.

Is this enough of a difference from the existing question to merit a new one? Are there any other flaws with the distribution? Could I change this to require splitting into 4 or so buckets instead of 2?

| |
  • 1
    \$\begingroup\$ I think you might need to do something like 4 buckets to stop it being a dupe. I don't think increased difficulty on its own is enough to make something not a dupe (I feel like I could then just post one with 1024 numbers each etc) (but idk I wouldn't trust me, wait for more feedback). \$\endgroup\$ – FryAmTheEggman Mar 15 '16 at 20:39
  • 2
    \$\begingroup\$ Also: Is this number random? 2: Electric Boogaloo ;) \$\endgroup\$ – FryAmTheEggman Mar 15 '16 at 20:40

Reverse Engineering


You must write a program or function in as few bytes that takes in an integer or a set of integers, performs a defined task on them (for example, finds the prime factorisation), and gives an integer or a set of integers as output. The number of integers in input and output will be pre-defined, so will be the task. You should provide appropriate limits for the variable sizes to be supported (1 bit, 1 byte, 2 byte etc.) and any additional conditions (0 not supported, N<100, M>N, etc.), and your program should work (atleast in theory, does not need to be time or memory efficient) for all possible inputs allowed by you.

You must also submit a reference code (ungolfed) in any language that performs the exact same process in reverse. Meaning, when given the output of the first program, it should be able to deduce the input given. This should be possible (atleast in theory) for all inputs accepted by you in the first program.

For example, suppose the first program takes in two 1-byte prime numbers m and n, and outputs all prime numbers between the two of them. Since the number of integers in input must be pre-defined (and not dependent on input), we state an additional rule that there will be a total of 60 integers in output, and if there aren't that many prime numbers, then zeros will be outputed.

Input to program 1: 23 41

Output from program 1: 29 31 37 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Now the second program will perform the same process in reverse.

Input to program 2: 29 31 37 39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Output from program 2: 23 41


Robbers will attempt to golf the second program as much as possible. Your score is given by the ratio of bytes in the best golfed code by a robber and the bytes in your code. So if your code is 23 bytes, and a robber writes the code for the reverse process (in any language) in 102 bytes, then your score is 102/23. Your answer is deemed ineligible for scoring if it has negative score. Highest score wins.


You must pick the second program submitted by a cop and attempt to golf it (in any language) as much as possible. You may submit a program or a function. You may use a different algorithm if you choose to, but the results must be exactly the same.



  1. Is it ok to combine code-golf with cops-and-robbers like I have done?

  2. What should the scoring criterion be for the robbers?

  3. Is my challenge too generic (because it accepts way too many kinds of tasks)? If yes, what can I do about it?

  4. Any further questions or suggestions are welcome. If you are sure of a suggestion being mandatory, you may make the edit yourself.

  5. Are the tags ok?

| |
  • \$\begingroup\$ I think your concern in 3 is very significant, I think this is way too broad. Some CNR challenges have had success by limiting the size of the output. I also think there is a significant problem with "standard language". Does APL count? I think it would be hard to argue against it being well known, and then you get stuff like Brainfuck... I think it's better to allow any language with a freely available interpreter. The upvote requirement is also rather bizarre; I don't think it should be there. \$\endgroup\$ – FryAmTheEggman Mar 15 '16 at 13:11
  • \$\begingroup\$ @FryAmTheEggman 1. What limit should I provide? 2. Agreed, I'll make the change. 3. Up-vote requirement is only so that, in case there are low quality answers (basically extremely easy challenges) that no one pays attention to, doesn't mean they deserve to win. \$\endgroup\$ – ghosts_in_the_code Mar 15 '16 at 18:24
  • \$\begingroup\$ I agree with lirtosiast. I'm not sure about what limit to use but perhaps take a bit of freedom away and just require the function work for bytes and always output 10 numbers, or something? This is just meant to be an idea that I think goes in the right direction, I don't think I'm at all qualified to know how to make a CNR :P In addition the tag combination has been done before, but I would add some of number/math/arithmatic depending on where you go with it. \$\endgroup\$ – FryAmTheEggman Mar 15 '16 at 20:36
  • \$\begingroup\$ @lirtosiast Done. \$\endgroup\$ – ghosts_in_the_code Mar 16 '16 at 7:51
  • \$\begingroup\$ @Fry Not a bad idea, but I think I'll wait till someone else (hopefully a mod) gives their input. \$\endgroup\$ – ghosts_in_the_code Mar 16 '16 at 7:52

Calculate the last N digits of Graham's Number

Write a function or program that, given an integer x, outputs the rightmost x digits of Graham's Number.


  • You may not hardcode the answer in
  • You may not fetch the answer from an external file or library


  • Will be tested over 100 iterations on my machine with an average time given for different x values
  • To Be Decided... (Input would be appreciated)
| |
  • 1
    \$\begingroup\$ Graham's number is just 3^[very large number], which always has the same last few digits; Wikipedia says they can be computed efficiently. \$\endgroup\$ – lirtosiast Mar 26 '16 at 2:59
  • \$\begingroup\$ This might be more interesting as a code-golf challenge, because it would likely be too fast to accurately time in fastest code \$\endgroup\$ – Liam Apr 8 '16 at 0:01

Paint the Mona Lisa in 1 KiB of code

** Oops, it seems that something like this has already been posted (and I didn't know about it before), but please read the last section below

This is my attempt to salvage this challange by Nathaniel, which was deleted after getting no less than 19 upvotes.

Here is a picture of da Vinci's Mona Lisa:

Mona Lisa

Your task is to reproduce the Mona Lisa in 1024 bytes or less. You will write a program or function that takes no input and loads no files, and outputs an image file.

The goal of this challenge is to produce an image that is as close as possible to the Mona Lisa above. The image must have the same resolution, and the similarity/difference will be measured by the root-mean-square deviation (at the color component level) between the two images. That will be the only criterion for the score, but people are still free to reward interesting answers by upvoting them (as always).

Your code (program or function) must obey the following restrictions:

  • The code must be no more than 1024 bytes in total (counted in UTF-8 if you use funky characters)
  • It must output the image in a standard uncompressed format such as BMP or PPM; the image can be written to the standard output or directly to a file
  • The image must have the same resolution as the original - 215 by 320 pixels
  • The code must be completely self-contained, taking no input and loading no files (other than importing libraries, which is allowed)
  • You may not use built-in or library code that implements a decompression algorithm (unzip, unlzma, jpeg decompression etc). It is fine to use such algorithms if you implement them yourself within the 1024 byte limit.
  • If your language or library includes a function that outputs the Mona Lisa, you are not allowed to use that either.
  • It should run deterministically, producing the same output every time.
  • Your code must be runnable in Linux using freely available software

It is possible that some submissions will themselves be generated by code. If this is the case, please include in your answer the code that was used to produce your submission, and explain how it works. The above restrictions do not apply to code used to create the code, they only apply to the 1024-byte code that produces the output image.


  • provide code to calculate the score
  • use a better-quality image?


Well, some may argue that this is a duplicate of the Starry Night challenge, but I think it differs in at least 3 ways:

  • uncompressed output
  • no prewritten decompressor allowed
  • UTF-8 byte count

Also, the image is not the same so it may not benefit from all the same techniques (I'm also open to using a different image altogether, such as the one from this other deleted challenge by Nathaniel).

If you have any other ideas how to improve the challenge, let me know.

| |
  • 1
    \$\begingroup\$ 1) It's not clear what counts as a builtin decompression algorithm. Is RLE builtin compression? Golfing languages have it built in. 2) Our standard rules cover encoding; no need to require UTF-8. 3) A list of all the valid uncompressed formats seems appropriate. \$\endgroup\$ – lirtosiast Mar 26 '16 at 2:54

Factorize Gaussian Integer

Given a nonzero gaussian integer your program/function should return the factorization of that integer g into prime factors pi and an unit u:

g = u * p1^e1 * ... * pk^ek

As the factorization is only unique up to units, we make following restrictions

  • All primes should p should be in the first quadrant, that means that Re(p) > 0 and Im(p) ≥ 0.

  • The unit should be represented as power of i. It should have the lowest nonnegative exponent.

  • The primefactors should be sorted by the real part increasingly. If two real parts are the same, they should be sorted by imaginary part (also increasing.)


11-27i = i^2*(1+i)*(2+i)^2*(4+i)
2     = i^3*(1+i)^2

To be added: Examples, input output spec




| |
  • \$\begingroup\$ What about builtins? \$\endgroup\$ – lirtosiast Mar 26 '16 at 2:57
  • \$\begingroup\$ Built-ins are ok. In my experience restricting built ins is quite subjective and frequently results in trouble=) \$\endgroup\$ – flawr Mar 26 '16 at 10:54

Create a race condition

Your objective is to create program where concurrent threads race to produce a result. The program is simple. Print the sum of every element in the cartesian product of two sets.

An example of standard input would be

2 5 8 10 | 9 2 3 7 512 | 3 1 2 | 9 8 6 3

The program would then need to spin up two separate threads to calculate each result, and the first thread (and only the first thread) to complete should print "I WIN!" and the answer without using mutexes or other synchronization methods.


  • You cannot use mutexes or synchronisation
  • The operation must be run concurrently
  • Standard input will contain any multiple of two sets, and the program should use (no of sets / 2) threads, as well as the main thread that spins everything.
  • The order of execution on the slave threads is not important
  • Some failure cases where more than one thread prints "I WIN!" is acceptable, but should be a rare case Sandbox comment: Not sure about verifying this one? or should not bother at all?

Sandbox comments

I saw the TCP Server question and I liked the idea of a challenge that is specifically difficult for golfing languages, and I was thinking about a few ideas for challenges that might work based specifically on parallel programming failures. I'm not sure if this one really fits the bill, hoping for suggestions to improve the challenege itself before refining the criteria.

| |

A Tiny Raytracer

Your task is to make a tiny 2D raytracer to render beautiful ascii images.


Your input will be an arbitrary 2D array delimited by newlines with the following structure

#9     #
#      #
#  ##  #
#  ##  #
#      #
#    ###

The symbols are: 0-9 = Light source = Emptiness # = Wall

Your expected output should look like this:


How Light Propagates

Light will travel in a straight line from lightsources through empty space and will be completely blocked by walls. Light falls off according to this function:

light_intensity = clamp(floor(9 - source_intensity * ||dist_to_lightsource||), 0, 9)

Where || || is the euclidean norm between the cell containing the light source and the cell in question, with 1 cell = 1 unit. All light intensity values are clamped to be between 0-9.

Light falls on an empty cell c whenever a straight line can be drawn from any part of c to the cell containing the light source without passing through a wall. For example, here I have all of the cells affected by a light source marked as *:

########       ########
####   #       ####***#
#9   #     =>  #****#  
###    #       ###****#
### ####       ### ####

Whenever there are multiple light sources, their contributions to the final light intensity are summed (and clamped to be between 0-9).

For example:

#9            6#

Should yield:



Standard code golfing rules. Input can have arbitrary size.

Fun Optional Bonuses

  • Output the result as a graphical image.
  • Support light values of between 0-255 (in this case columns of the input and output will be space delimited)
  • Support colors (in this case light will be denoted by a standard 24-bit hex code 0xFFFFFF, and space delimited).

These don't give you any bonuses in the competition, but would be cool.

| |

Self-decrypting code

The Caesar cipher is perhaps the earliest and most well known form of encryption. Here's a quick overview:

Pick a message, and a numerical encryption key. For this example, I'll pick "HELLO, WORLD" and 3, respectively.

First, convert each letter into its ASCII number:

H -> 72
E -> 69
L -> 76
L -> 76
O -> 79
, -> 44
[space] -> 32
W -> 87
O -> 79
R -> 82
L -> 76
D -> 68

Then, add the key (3) to each and convert back into a letter

75 -> K
72 -> H
79 -> O
79 -> O
82 -> R
47 -> /
35 -> #
90 -> Z
82 -> R
85 -> U
79 -> O
71 -> G

So the encrypted message is "KHOOR/#ZRUOG"

Your task

Write a full program that is a Caesar cipher-encrypted valid English message. The program must take no input and it will output the unencrypted version of itself.

Some rules:

  • The program must be at least length 2.
  • The key may not be 0, 32, or 256
  • All of the code must be executed (no comments to arbitrarily extend code length).
  • The Linux word list will be used to judge if a message is English. Words must be separated by ASCII character 32. Words can mix uppercase and lowercase.
  • Your program does not need to be written in printable ASCII.
  • File I/O is allowed, but only to read the source code file.
  • No other standard loopholes.


The submission with the longest message wins. Anything over 200 characters will be scored as exactly 200 characters. Ties are broken by upvotes.

| |
  • 1
    \$\begingroup\$ I think this has a bunch of problems. The scoring doesn't make much sense why does it switch between code-challenge and pop-con? Additionally, I'm almost certain that 200 won't be that hard to reach, considering it is "valid" English to say "I am very very very ... very very sad". This also doesn't explicitly give much explanation for valid English. Do you just have to have words and spaces? Or does it need to make sense? Also, "all of the code must be executed" rules basically never work: it's too easy to get around them. \$\endgroup\$ – FryAmTheEggman Apr 1 '16 at 14:13
  • \$\begingroup\$ @FryAmTheEggman How should I deal with arbitrary-length submissions (they found a way to make it as long as possible)? As for valid sentences, maybe just words separated by spaces (but no word can be repeated). How should I prevent trivial arbitrary-length programs (because comments can be used for that). \$\endgroup\$ – Daniel M. Apr 1 '16 at 14:20
  • 2
    \$\begingroup\$ The problem is that there are too many things that are basically the same as comments in too many different languages. What's to stop me from just inserting a giant numeric/string literal in my code that don't get printed? What about repeating ; in a C program? What about languages that don't even really read their source code like lenguage? I feel like if your challenge breaks because of comment like things, it's sort of doomed to be broken. \$\endgroup\$ – FryAmTheEggman Apr 1 '16 at 14:25
  • \$\begingroup\$ What constitutes a "valid English message"? What modulus operations are permitted? \$\endgroup\$ – Peter Taylor Apr 5 '16 at 13:35
  • \$\begingroup\$ @PeterTaylor Any modulus operations that don't bring the message back to itself and aren't the exact difference between lowercase and uppercase. \$\endgroup\$ – Daniel M. Apr 5 '16 at 15:42

How many pixels are in each ASCII char?

Write a program or function taking a single printable ASCII character as input that outputs how many pixels it takes to display that character to the screen.

Input can be taken by any reasonable method, including reading from a file, STDIN, or function argument. Input from a variable hardcoded into the program is not reasonable.

Output may by given by any reasonable method, including writing to a file and STDOUT. Extraneous output is permitted as long as the result remains unambiguous.

"Printable ASCII character" is defined as a character within the codepoints 32-126, inclusive.

A pixel counts as part of a character if the pixel is non-white after the character is written to a white screen.

The required font is Times New Roman, 20pt.

Do not hardcode the result.

Reference Solution: (JavaScript)

//create a canvas to display the character
var canvas = document.createElement("canvas")
canvas.width = 100
canvas.height = 100

var context = canvas.getContext("2d")

//make the canvas white
context.fillStyle = "white"
context.fillRect(0, 0, 100, 100)

//make the text black and set the font
context.fillStyle = "black"
context.font = "20pt Times New Roman"

//ask for the char
var char = prompt("Enter your ASCII char")
//draw the char

//get the canvas pixel data
var pixelData = context.getImageData(0, 0, 100, 100).data
var pixelCount = 0
for(var i = 0; i < pixelData.length; i+=4) {

    //if the pixel isn't white, increment the counter
	if(pixelData[i] != 255 || pixelData[i+1] != 255 || pixelData[i+2] != 255) pixelCount++

| |
  • \$\begingroup\$ Is there any specific font that should be used? \$\endgroup\$ – Downgoat Apr 3 '16 at 5:07
  • \$\begingroup\$ you should probably set a specified font (Times New Roman, Arial), to make answers more comparable. If not, you should probably say the font should have been made before this challenge was posted \$\endgroup\$ – Downgoat Apr 3 '16 at 5:13
  • \$\begingroup\$ @Downgoat actually on second thought, languages that can't output Times New Roman probably don't have the features to compete in this challenge anyway. I'll make 20pt Times New Roman the required font. \$\endgroup\$ – jrich Apr 3 '16 at 5:20
  • \$\begingroup\$ I wonder if any other algorithms exist that are more efficient. \$\endgroup\$ – Leaky Nun Apr 3 '16 at 5:48

In this challenge you are supposed to output a grid 10x10 with numbers from 00 to 99 (each number once) following this rules:

  • Number 00 must be on the bottom row
  • Number 99 must be on the upper row
  • In the output each number must be sepparated by spaces and must have two digits (that is including 0's when needed for the first 10 numbers)
  • Output must be random
  • It must be solved within reasonable time

I'm having an issue trying to define random and reasonable time here and would like some help with it. Thanks.

| |
  • \$\begingroup\$ Define random as 'Each of the possible permutations must have an equal probability of being the output'. For reasonable time I don't think you need a definition - especially since your challenge is only 100 numbers, so it should be perfectly doable unless your algorithm works in O(n!). \$\endgroup\$ – Sanchises Apr 7 '16 at 11:11
  • \$\begingroup\$ @sanchises I find that asking for equal probability is too strong, since there's no way to prove that one of those algorythm has equal probability. \$\endgroup\$ – Masclins Apr 7 '16 at 16:34
  • \$\begingroup\$ Of course, a formal proof is not always easy. However, an intuitive result should be enough for most applications, and if people have difficulty with that, you can always use one of the algorithms described at the Wikpedia page, e.g. Knuth shuffling. I was wondering though, is there a motivation behind the challenge, or is just something you cooked up? \$\endgroup\$ – Sanchises Apr 7 '16 at 17:57
55 56
58 59

You must log in to answer this question.

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