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".


4466 Answers 4466

84 85
87 88

I have not put substantial effort into this sandbox post. Since I am unsure(and it's probably not) whether this kind of question is a good fit for this site or not. If somebody reputable mentions that the idea has merit, I'll tune this sandbox up, and try to get it in shape for posting.

Obviously the biggest problem is how do you test the code? And that's the part I'm stuck on. If anyone can think of a way to overcome this please let me know! Anyway, here it is:

Write a program that posts itself as an answer

Your program must establish an http connection to codegolf.stackexchange.com, login, and post an answer to this question.

The answer must be in the form of:





Rules: Cannot read source file, or any resource which is identical to your source file in any way.

Tags: popularity contest, quine

  • 5
    \$\begingroup\$ Imagine what would happen if people try to test each answer! \$\endgroup\$ May 6, 2014 at 22:04
  • \$\begingroup\$ How about posting the source code to the About Me section of your PP&CG profile page instead? If email addresses and passwords etc. are provided as external input, then it would be easier to test other people's code and we wouldn't have to worry about giving away our login details. However, there could be problems with people using different login methods. For example, I sign in with my Google account. That may not be the most efficient method for a golfed solution. \$\endgroup\$
    – r3mainer
    May 9, 2014 at 8:25

Create an Andy Warhol portrait

Andy Warhol was one of the main figures of the Pop Art. One of his most famous works was a Marylin Monroe picture in nine frames changing the colors, saturation and others aspects of a original pic.

Warhol work

The challenge here is to create a program that takes any photo and emulates the Warhol painting with some caveats:

  1. Final image should be compossed of 9 different frames.
  2. Final image will be compossed from 3 rows and 3 columns.
  3. Final image should be sized 3 times width and 3 times height of the original image.
  4. The program should output just one image.
  5. The image that the program outputs must be an emulation of Warhol works.
  6. You cannot use any built in function that doest by itself the Warholization of the picture neither load or use any external image other than the original. You can use your language methods for changing color, hue, saturation..
  7. Program should be deterministic: Any given photo should output the same image every time.

The program should read the image in JPG, BPM or PNG (at your convenience) and output the image in the same format.

The program will be tested with these images:

Marilyn Original Campbell soup original

This is a so the most upvoted answers will win. Nobody restrains you from adding more warholized pictures for winning more votes from the judges.

  • \$\begingroup\$ Where do you draw the line for a "built-in function that does the Warholization"? Are functions allowed that can adjust the hue of a pixel/an image? Or the saturation? Or the contrast? Neither of those is a function "to do Warholization", but of course they would probably take care of a large chunk of the work. \$\endgroup\$ May 9, 2014 at 8:04
  • \$\begingroup\$ @m.buettner I would say you can use a set of functions that perform the task. If your language have functions to change hue, color, saturation you use them. You cannot use any function that does by itself the warholization (eg some external library or graphic editing program script calling a program built in action...) \$\endgroup\$
    – Averroes
    May 9, 2014 at 8:16
  • \$\begingroup\$ Alright, thanks for clarifying (maybe add that to the question, that you really mean only functions that literally do the Warholization themselves). \$\endgroup\$ May 9, 2014 at 8:18
  • \$\begingroup\$ @m.buettner Nice. I will add it to the specs. Thanks. \$\endgroup\$
    – Averroes
    May 9, 2014 at 8:20
  • 1
    \$\begingroup\$ This seems to be close to a duplicate of Minature faking. It replaces the blur with repetition, but that aside they both seem to just be about simple transformations in HSV space. \$\endgroup\$ May 9, 2014 at 11:48

Brute Force Decryption

The Task

Write an function B() in any language of your choice that takes an encrypted string as input and brute forces though solutions then infers the key used. Your program should then output the decrypted string and the key.

The encrypted string is one that is in English, is a valid sentence and has been encrypted by shifting the ASCII number by the key.

The Rules 

  • This is code golf, smallest program wins.
  • You can’t use any external dictionaries.


To help you along I’ve written this program, which shows you how the string is encrypted:

def encrypt(string, key):
    encrypted = str()
    for Char in string:
        encrypted += (chr(ord(Char) + key))
    return encrypted

def decrypt(string, key):
    decrypted = str()
    for Char in string:
        decrypted += (chr(ord(Char) - key))
    return decrypted

Use Like:

>>> encrypt("secret", 5)
>>> decrypt("xjhwjy", 5)

I've put potential issues in bold.

We need some XHTML pages to test this on. I suggest http://www.w3.org/People/mimasa/test/schemas/xhtml1-sample.xml#headings.heading

XHTML Compression Challenge (revision 5)

Design an algorithm to compress XHTML code as efficiently as possible. You must provide programs that do compression and decompression, and a detailed explanation. Input before compression and decompressed output should be identical and both valid XHTML.

The exact specification of XHTML we will be using is XHTML 1.0 Transitional as defined by W3C. This is to make the code easier to deal with - parameter values are always in quotes, there is a distinction between single and container tags, and all tags are properly nested.

This would be a , so the winner is whoever gets the best compression ratio on <some test code>. Obviously the algorithm should work on any HTML!

The sort of thing that I mean is

  • not including the html tag in the compressed format (as you always know where it is)
  • compressing h1, h2 and so on to 1, 2, etc.
  • compress title to t

The test code (could be an actual webpage) (where do we get the test code) would contain a variety of HTML tags, in "natural abundances" (you won't suddenly have millions of kbd tags, say, but you would have lots of p or br).

The decompressed code and the original MUST be identical!

Or should we allow minute differences like interchanging <acronym> with <abbr>, or <strike> with <s>?

  • \$\begingroup\$ Transforming <s>test</s> to <del>test</del> is not compression, so I think that the title is misleading. Your example is not good because we can see it as only replacing tags by other tags. \$\endgroup\$
    – A.L
    Apr 15, 2014 at 17:41
  • \$\begingroup\$ @n.1 That's not what I mean, I mean that if we compress strikethrough as s, then <s>, <strike> and <del> can all compress to s. So the compression algorithm can make no distinction between the three, and then it can decompress s as any one of the three. \$\endgroup\$
    – user16402
    Apr 15, 2014 at 17:51
  • \$\begingroup\$ I'm sorry but I still don't see what are you waiting for. Please add an example of compressed text to see how to calculate the score. And what tags can be translated, what about <i> to <em>, etc.? The rules have to be strict so the users will know what tags can be translated to other tags. And this question lacks a input that will be processed by the users to compare the compression ratio. \$\endgroup\$
    – A.L
    Apr 15, 2014 at 17:58
  • \$\begingroup\$ @n.1 maybe we can scrap the tag translation thing entirely? It does lack a standard test text to find compression ratio, I was hoping someone would find one. \$\endgroup\$
    – user16402
    Apr 15, 2014 at 17:59
  • \$\begingroup\$ @n.1 So, we scrap turning tags into other tags. But we should allow translating between <br /> and <br>, because they are EXACTLY the same. Or should we? (It would be annoying if we didn't.) \$\endgroup\$
    – user16402
    Apr 15, 2014 at 18:01
  • \$\begingroup\$ Do you want to judge purely on the compression ratio, regardless of the size of the submitted program? Would you be interested in having a bonus for a shorter program? For example, lowest total score wins, with score made up of compressed size/original size + log2(number of characters in program). I don't think this is needed - just wondering. \$\endgroup\$ Apr 16, 2014 at 0:14
  • 1
    \$\begingroup\$ @githubphagocyte I was thinking about that... but probably not. Maybe this time we judge purely on compression ratio, then we do a code-golf for the shortest implementation of the winning algorithm. \$\endgroup\$
    – user16402
    Apr 16, 2014 at 7:03
  • \$\begingroup\$ Yes separating the two does sound better. Good thinking. \$\endgroup\$ Apr 16, 2014 at 9:47
  • \$\begingroup\$ This looks to me suspiciously like "Write a wrapper about bzip2". Given that you're asking us to compress a format which has many equivalent ways of writing the same thing (lots of optional whitespace, optional ordering of attributes, flexibility in the quoting characters used, etc.) it would make a more interesting question to require that the decompressed file be semantically equivalent to the input. It makes testing it harder, but it allows for a lot more ingenuity. \$\endgroup\$ Apr 16, 2014 at 10:09
  • \$\begingroup\$ As a separate matter, if you're asking us to compress XHTML by using our knowledge of its structure, you should be more specific about which structure we can assume. XHTML has at least 6 versions, and arguably more: which of them must be supported? \$\endgroup\$ Apr 16, 2014 at 10:12
  • \$\begingroup\$ @PeterTaylor That might be a problem, I tried the validator.w3.org, even the Google homepage (supposedly respectable) gets 23 errors... \$\endgroup\$
    – user16402
    Apr 16, 2014 at 12:29
  • \$\begingroup\$ @PeterTaylor XHTML 1.0 Transitional? I personally find XHTML 1.0 Strict a bit annoying... \$\endgroup\$
    – user16402
    Apr 18, 2014 at 13:09
  • \$\begingroup\$ I don't really care which you pick: just that you make it clear in the question. \$\endgroup\$ Apr 18, 2014 at 15:23
  • \$\begingroup\$ can anyone suggest a test text? \$\endgroup\$
    – user16402
    May 14, 2014 at 18:40


Kyle is in kindergarten. He can tie his shoes and count by twos and write in almost every programming language existent! But he can't seem to remember the days of the week. They always get mixed up in his mind.

So, his problem is that needs to know what day of the week it is tomorrow. He decides to write a program for himself.

But, his source code is stored in a very stingy cloud service. They charge $1.99 per character! So, he decided to it all...


So, Kyle has hired you for a whopping 15 reputation! Your challenge is, given the name of a day of the week (thursday, for example), you output the name of the next day (friday). The code with the least characters wins.

  • The input and output can be in any reasonable method you like (STDIN/STDOUT, command-line, read from a file, anything).

  • You are free to use any built-in function you like. As long as they don't do all the work for you (that's no fun).

  • The input and output should be in lowercase. Kyle hasn't learned about capital letters yet.

  • In case you don't know, the weekdays are: monday, tuesday, wednesday, thursday, friday, saturday, sunday. And they loop around. :-)

Good luck, and may the best code win!



I have seen a lot of weekday-related posts here on codegolf.SE, but I am pretty sure that this one will present a unique challenge.

I don't know if the "Preface" is too goofy. Please comment with your input and I will act accordingly with popular opinion.

Any input or suggestions or comments or upvotes are appreciated!

  • \$\begingroup\$ does "give me the string representation of n.1.2000 in the format 'full week name'" count as "all the work"? Because the rest is easy. \$\endgroup\$ May 12, 2014 at 15:29
  • 1
    \$\begingroup\$ Also you forgot Sunday. \$\endgroup\$ May 12, 2014 at 15:32
  • \$\begingroup\$ I'm not sure about presenting a unique challenge. This can be done in GolfScript with literally 5 chars plus a lookup table. The only interesting part is compressing the lookup table. \$\endgroup\$ May 15, 2014 at 12:01
  • \$\begingroup\$ It could be done in bash using time and adding a day, then specifying output format. \$\endgroup\$
    – Shade
    May 16, 2014 at 17:18
  • \$\begingroup\$ @m.buettner : Duh on me. I guess maybe the problem isn't complex/long enough. Probably won't go live. \$\endgroup\$ May 16, 2014 at 23:09

GCD Game for better algorithm

Given A,B print the number of pairs (a,b) such that GCD(a,b)=1 and 1<=a<=A and 1<=b<=B.


First line contains T, the number of testcases. Each testcase consists of two space separated integers denoting A and B.


The Number of pairs which have GCD=1


  • 1 <= T <= 10
  • 1 <= A <= 105
  • 1 <= B <= 105

Sample Input

3 2

Sample Output



There are five pairs of relatively prime numbers (where the first <= 3 and the second <= 2):


Time Limit 5 sec(s)

Memory Limit 256 MB

Source Limit 1024 KB

Use smart ways Bruteforce won't work.

  • 1
    \$\begingroup\$ Okay, this is a start! So what's the objective winning criterion? Execution time of the program? In that case,on which benchmark and on which machine? Or code size? \$\endgroup\$ May 27, 2014 at 18:46
  • \$\begingroup\$ If there are multiple testcases (T>1), should there be multiple numbers outputted? \$\endgroup\$
    – Ypnypn
    May 27, 2014 at 18:51
  • 3
    \$\begingroup\$ Out of curiosity, are you just looking for an answer, or are you trying to make a competition out of it? I ask because the general feel of the spec makes me feel this was copied/pasted here from an exercise/task/homework, not intended as a competition. I ask because if you're just trying to figure out how to do it, another SE site might be a better choice for this. If it is a competetion, you should add winning criteria as m.buettner noted. \$\endgroup\$
    – Geobits
    May 27, 2014 at 18:52
  • \$\begingroup\$ @Ypnypn if there is multiple test cases multiple outputs will be there \$\endgroup\$ May 27, 2014 at 18:57
  • \$\begingroup\$ @m.buettner Wining criteria is the most optimised code(optimised algorithm) which executes fastest \$\endgroup\$ May 27, 2014 at 19:06
  • 2
    \$\begingroup\$ @user3680169 as it stand that is not objective. do you want to judge that by actual execution time or by asymptotic complexity of the algorithm? in the former case, how is execution time measured, in the latter case, what about ties? \$\endgroup\$ May 27, 2014 at 19:16
  • \$\begingroup\$ @m.buettner asymptotic complexity of the algorithm \$\endgroup\$ May 27, 2014 at 19:18
  • 3
    \$\begingroup\$ @user3680169 how are ties broken? It's not unlikely that two or more answers will have the same complexity. \$\endgroup\$ May 27, 2014 at 19:45
  • 1
    \$\begingroup\$ The question should reference OEIS A135646. It should also clarify the output format in the case that there's more than one test case. Also beware that questions involving primality tend to get tricky enough to analyse for asymptotic performance that some people will either not answer because they can't analyse their own program, will answer without the analysis and expect you to do it for them, or will give an unnecessarily loose complexity bound. \$\endgroup\$ May 28, 2014 at 17:07

Factorize any number using a set of predetermined random numbers

For instance:

With the randomly generated set [1,2,3,5,8], factorizing 10 would give the result [2,5] as in 2*5=10.

  • If a number can not be factorized using the provided set, indicate so. Using the same set, factorizing 13 would show an error or an empty list.

  • Generated sets should contain less than 64 numbers.


The score is given by floor (code length * (1 - 0,1 * # of bonuses))

  • If a number can not be factorized, try to fix it using addition. In the previous example, factorizing 13 could give [2,5] and [3] as in 2*5+3=13.

  • If a number can not be factorized, try to fix it using subtraction. In the previous example, factorizing 14 could give [3,5] and [1] as in 3*5-1=14.

  • When generating a set, filter out primes and powers of 2.

  • 2
    \$\begingroup\$ If posted like this, I would vote to close as not clear what you're asking. At the very least you need to specify what the input and output are. Then either ditch the bonuses or make them clearer: what exactly does "fix it using addition" mean? E.g. with [2,3] 17 do we get 2*2*3+2+3? \$\endgroup\$ Jun 10, 2014 at 15:48
  • \$\begingroup\$ Test comment, ignore. math \$\endgroup\$
    – gxtaillon
    Jul 22, 2014 at 0:05

Find the a Strong Prime

What's a String Prime? Wikipedia:

In cryptography, a prime number p is strong if the following conditions are satisfied.[1]

  • p is sufficiently large to be useful in cryptography; typically this requires p to be too large for plausible computational resources to enable a cryptanalyst to factorise products of p multiplied by other strong primes.
  • p-1 has large prime factors. That is, p = a_1 q_1 + 1 for some integer a_1 and large prime q_1.
  • q_1-1 has large prime factors. That is, q_1 = a_2 q_2 + 1 for some integer a_2 and large prime q_2.
  • p+1 has large prime factors. That is, p = a_3 q_3 - 1 for some integer a_3 and large prime q_3.


Your program must receive a number of bits 16 <= x <= 60. This can be a method definition, command line argument, or stdin.


Print and/or return a strong prime of exactly the given bit length.

Other rules:

  • All variables in the below conditions refer to the wikipedia variables.
  • Do not worry about condition 1 from wikipedia.
  • For the rest of these rules, the notation |x| means the number of bits in x.
  • |q_2| >= 0.4 |p|.
  • You may not use any external tools. Other input data or precalculation counts against the length of your program even if it's in a different file or command line.
  • You are allowed (and even encouraged) to use the algorithms in this paper (thanks @PeterTaylor!) but it is not a requirement.

  • \$\begingroup\$ Three things. 1. 10 minutes is probably not enough for even good implementations of basic sieves. Are you expecting people to implement sophisticated sieves, or did you intend to allow probabilistic primality testing? 2. Why the "no more than 3 bits" constraints? There are plenty of definitions going around, but from cursory reading it seems that most of them would consider |q_2| >= 0.4 |p| to be sufficient. 3. Have you done a reference implementation to test that strong primes by your definition are sufficiently frequent for the time constraint to be feasible? \$\endgroup\$ Jun 17, 2014 at 16:15
  • \$\begingroup\$ In my above comment, || should be taken to mean length in bits rather than absolute value. \$\endgroup\$ Jun 17, 2014 at 19:29
  • \$\begingroup\$ @PeterTaylor how's that? \$\endgroup\$
    – durron597
    Jun 17, 2014 at 20:13
  • \$\begingroup\$ Is "other external tools" meant to include IsPrime functions? \$\endgroup\$ Jun 17, 2014 at 20:38
  • \$\begingroup\$ @PeterTaylor yes. but maybe that's not a good rule in this case? \$\endgroup\$
    – durron597
    Jun 17, 2014 at 20:46
  • \$\begingroup\$ Probably needs some input from Mathematica users, or you risk creating a restriction which they can waltz straight past. \$\endgroup\$ Jun 17, 2014 at 21:10
  • \$\begingroup\$ According to the OEIS, Miller-Rabin can be relied on to give accurate results for numbers up to at least 2^61 when tested with the first 9 prime numbers (i.e., a(9)>2^61). If the limit for p is extended to 2^64, then the first 12 primes will have to be tested. This shouldn't take long. \$\endgroup\$
    – r3mainer
    Jun 18, 2014 at 14:40

Code Looking For 0x6C, 0x6F, 0x76, and 0x65 In All the Wrong Places

Write the shortest code that finds all instances of love" on the system. For this challenge love shall be defined as the bytes 0x6C, 0x6F, 0x76, and 0x65 in sequential order. It should look for love within files, in memory, and in file names. The code should run on Ubuntu to be tested. Assume you have whatever access you need to perform these operations.

Winning Criteria

The code will be run under a Ubuntu 12.04 instance that is hosted on a dual boot Windows 8.1 machine. There will be 1 file on each of the hard drives named love. The grub loader has a configuration called love. A program will be running in the background. If you find all the instances and have the shortest code. You will win. The contest will close XX/XX/YYYY.

  • 2
    \$\begingroup\$ What's the winning criterion? How do you even test that submissions actually do find every single occurrence of his byte sequence? \$\endgroup\$ Jun 2, 2014 at 9:01
  • \$\begingroup\$ Will this question be open in a browser, and hence held in memory, when you run the programs? Will the rival programs all be present on your machine while they are being run? I guess at least some of them will contain love... \$\endgroup\$ Jun 4, 2014 at 21:02
  • 1
    \$\begingroup\$ What does it mean to "find" it? Does a memory/file/offset location need to be output for each one? \$\endgroup\$
    – Geobits
    Jun 4, 2014 at 21:45
  • \$\begingroup\$ That's a really good call out. I will have to think a little. \$\endgroup\$
    – ojblass
    Jun 4, 2014 at 21:52

Saving Eve


In the year 1946 the organisation Illuminati launched their first intelligence collecting satellite - called Eve - into orbit around the earth. Onboard it contains a highly sophisticated set of sensors capable of eavesdropping on every telephone call in the world. All suspicious calls are recorded along with all ascertainable information about the caller and receiver. Eve then relays everything to Illuminati's office in Venice.

However, recently the growing amount of radio communication in space and on earth has started to interfere with Eve's downlink and uplink to and from the Venice office, which has resulted in spurious intermixing of the recordings of suspicious calls with the local weather report.

...we are to drop the bomb ... ...sunny and 28 degrees! In fair Verona... ...shoot them down...

Seeing as this interferes with Illuminati's ability to control all governments of the world, the error correction encoding firmware of Eve must be upgraded.


You have been hired to write the new firmware for Eve. You have realised that the only sufficiently robust and efficient encoding is to use the extended binary Golay code, which encodes 12-bits into 24-bits of data. Luckily Eve was built in the 40's, before the 8-bit byte convention, so all the data that Eve processes is already in 12-bit chunks.

So you have to write a function or a program that takes one 12-bit chunk (as an integer) and outputs or returns a 24-bit chunk (again as an integer) according to the extended binary Golay code.

And you have to write a decoding function or program that takes one 24-bit chunk (again as a an integer) and outputs the decoded 12-bits, with a 16th bit set (2^15) if any correctable errors were detected, and a 20th bit set (2^19) if any uncorrectable errors were detected.

But since the uplink to Eve is unstable you must write the functions or programs in the least amount of characters possible, so that it takes a minimal amount of time to upload.

Winning criteria

The least amount of characters in the source code of the encoding and decoding functions or programs.


The exact details of the output of the encoding is not that important, as long as the solution can correct any error up to 3 bits and detect any error up to 7 bits.

  • 3
    \$\begingroup\$ Could do with a link to a good description of the code. \$\endgroup\$ Jul 3, 2014 at 21:07

Meta Code-golf

Golfing code can be slightly annoying[citation needed]. There are some things that can be automatically be applied to every golfing problem (e. g. remove all newlines). So what do you do? Automate it!

Your task is to write a program that will golf another program. Naturally, your program must be also be golfed, otherwise this wouldn't be a question, would it?

The following rules apply to your program:

  • All the code must be in one file, except for that of the program your program is golfing.
  • You may assume that the code of the program to be golfed is contained in a string. That string will not be counted towards your score.
  • The output of the golfed program must be identical to that of the original program.
  • Your program need only golf programs in it's own language. For example, a Python code-golfer-bot-thing need only successfully golf Python code, it can break all the Java code it wants.

Sandbox note: I'm not sure how to score this. The length of the golfer should be factored in, as should the difference between an ungolfed and golfed program. I'm thinking something like (ungolfed - golfed) / chars in answer, but this would require a way of finding the average number of characters removed. This suggests something of a , with random programs being chosen and passed to the bots to be golfed, but I would probably have to limit that to Python because that's to only language for which I have a bunch of random programs lying around on my box. However, I have no idea how to implement this and I don't want to spend a while looking through 100+ programs looking for sensitive information (passwords, email addresses, names). Anyway, in this case, score would probably be (average ungolfed - golfed) / chars in answer. Any thoughts? Side note to the sandbox note: sorry for the convoluted state of the note. I was basically just vomiting all my thoughts onto the page as they came to me.

  • \$\begingroup\$ There's an entire tag for that. Are you sure your challenge adds anything new to this? \$\endgroup\$ Jul 8, 2014 at 7:42
  • \$\begingroup\$ Essentially this idea has been proposed twice on the sandbox, and neither time has it prospered. It's very hard to write a good spec for it. I suggest that you look through the old sandboxes for the previous versions and read their comment threads. \$\endgroup\$ Jul 8, 2014 at 8:20

Reve's puzzle

From The Canterbury Puzzles:

When the pilgrims were stopping at a wayside tavern, a number of cheeses of varying sizes caught his alert eye; and calling for four stools, he told the company that he would show them a puzzle of his own that would keep them amused during their rest. He then placed n cheeses of graduating sizes on one of the end stools, the smallest cheese being at the top (and no cheese resting on a smaller one.) 'This is the riddle', quoth he, 'that I did once set before my fellow townsmen at Baldeswell, that is in Norfolk, and, by Saint Joce, there was no man among them that could rede it aright. And yet it is withal fully easy, for all that I do desire is that, by the moving of one cheese at a time from one stool unto another, ye shall remove all the cheeses to the stool at the other end without ever putting any cheese on one that is smaller than itself. To him that will perform this feat in the least moves that be possible will I give a draught of the best that our good host can provide.'

Write a function called reve that takes five arguments — the number of cheeses n >= 0 and labels for four stools (the source, two intermediaries, and the destination) — and outputs the minimum set of moves necessary to solve Reve's puzzle.

For example, the original puzzle is posed with n = 8, 10, and 21 cheeses, so running reve 8 "A" "B" "C" "D" should return the following 33 moves:


reve 10 "A" "B" "C" "D" (49 moves)


reve 21 "A" "B" "C" "D" (321 moves)


An up vote for all successful attempts. Shortest solution by character count wins. Sorry, no beer. Although if you're ever in the Boston area, it's on me.


  • Is this a suitable question for code golf?
  • Is it clear what I'm asking? Do I need to be more specific about input/output, etc.?
  • Any other suggestions?
  • \$\begingroup\$ Is this a duplicate of Tower of Hanoi Solver? \$\endgroup\$
    – Rainbolt
    Jul 9, 2014 at 0:56
  • \$\begingroup\$ @Rusher The only difference between this and the Tower of Hanoi is that this uses 4 stacks instead of 3. I'm not sure that's enough different, though it would defeat most Tower of Hanoi solutions, which are typically recursive, while this seems more brute-force. \$\endgroup\$
    – isaacg
    Jul 9, 2014 at 4:54
  • \$\begingroup\$ The input/output spec is certainly unclear. You ask for a function, and then give examples of program invocation. The other thing which isn't clear is whether you want "pure" code golf (ignoring realistic feasibility assumptions) or whether you want a program which can actually execute for 21 discs with only e.g. 2GB of RAM, explicitly using disk as a backing store. \$\endgroup\$ Jul 9, 2014 at 10:02
  • \$\begingroup\$ I think the T(4,n) case of Tower of Hanoi is sufficiently different from T(3,n) and is the subject of many interesting papers. This does not require brute force. Frame-Stewart will solve this recursively, though it is still an open question whether the algorithm is optimal for all values of n and k in T(n,k). There are several papers that have popped on arXiv in the last few years that argue Frame-Stewart is optimal for T(4,k). \$\endgroup\$
    – O-I
    Jul 9, 2014 at 13:57
  • \$\begingroup\$ @PeterTaylor I agree the input/output is unclear. Any suggestions on improving this? I wrote my solver in Haskell, hence the term 'function' and the lack of commas/parentheses for invocation. I'm fairly certain this is feasible — my function works and it will spit out reve 100 "A" "B" "C" "D" with little fuss (172033 moves). Perhaps I have made some mistake in my implementation? I can post the code if you would like to test. Regardless, I think this is a really interesting problem. Yes, it is 'just' Tower of Hanoi with 4 pegs, but a solution — let alone an optimal one — isn't obvious. \$\endgroup\$
    – O-I
    Jul 9, 2014 at 14:08
  • \$\begingroup\$ It's an interesting problem, yes, but mainly because it's not clear that Frame-Stewart is optimal. The well-known 3-tower implementation is a special case of Frame-Stewart, and a fully general implementation isn't much more interesting. If we can assume optimality of Frame-Stewart, then I would vote to close as duplicate of the 3-tower question. If we can't, issues of performance (or of its irrelevance) need addressing. \$\endgroup\$ Jul 9, 2014 at 14:25
  • \$\begingroup\$ Understood. I guess it should be closed then. \$\endgroup\$
    – O-I
    Jul 9, 2014 at 15:00

Type me out.

Your task (related to this question) is to translate any text (in a file, or simply input) into the input of a telephone keypad.

enter image description here

and provide a keypress score.

As the keypad has a limited set of keys you have to 'encode' your non-alphanumerics with their ASCii hexadecimal encoding; e.g. to type ~ (which is hexidecimal ASCII land is 7e) you press the hash key once, the 7 key (once to get a seven) and then 3 three times to cycle through the digits 3, 'd', and finally 'e'. This gives the code #7e which corresponds to ~ (for a total number of key presses of 5). Spaces and capitals have to be accessed via hex code (so MY_CONST (#4d #59 #53def #43 #4f #4e #53 #54 - 27 presses) costs you less than my_const (6m 9wxy #53def 2bc 6mno 6mn 7pqrs 8t - 29), but more than myconst (6m 9wxy 2bc 6mno 6mn 7pqrs 8t - 23)).

For instance If your code had print() that would cost 15 for the print (7p 7pqr 4ghi 6mn 8t) plus 6 for the () (#28 #29)

To be clear with just the input print() the output is:

7p 7pqr 4ghi 6mn 8t #28 #29

(Note however the hex codes for c f i r s v y z are shorter (correspondingly #63 #66 #69 #72 #73 #76 #79 #7a) than long hand key presses. It's perfectly allowed to score print() as 19:

7p #72 #69 6mn 8t #28 #29


This is Code Golf, so feed your code into the finished program - shortest answer (in keypresses) wins.

  • \$\begingroup\$ Migrated from previous sandbox \$\endgroup\$ Jul 16, 2014 at 7:33
  • \$\begingroup\$ So we enter 'print()' as our input and the output is the second code block? and our answer needs to be processed by the program we wrote, and the shorted processed answer wins? 2 questions: 1) is ~ 3 or 5 characters? because we need to press 3 three times. 2) is our score the bytelength or the keypress score? \$\endgroup\$
    – Nzall
    Jul 17, 2014 at 11:09
  • \$\begingroup\$ @NateKerkhofs 1) it's 5 2) it's key presses. \$\endgroup\$ Jul 17, 2014 at 11:11

I'm posting here first so I don't clutter up the site in case people are tired of pi questions. Thoughts?

Yet Another Pi Question

Today (actually tomorrow as I post this) is Pi Approximation Day (22/7), so here is a variant of the "compute pi" golf that I don't think has been seen before.

Write a program that accepts a number, either on standard input or as a command line argument, and prints that many digits of pi to standard output.

Details, for the nitpicky:

  • You may write the program to accept its input as the ASCII characters representing the number of digits, in either decimal or hexadecimal (preceded by 0x), or as a sequence of bytes representing that value. For example, if I want to tell your program to compute 65535 digits of pi, I would invoke it in your choice of one of the following six ways (using bash syntax):

    program 65535
    program 0xffff
    program $'\xff\xff'
    echo 65535 | program
    echo 0xffff | program
    echo $'\xff\xff' | program
  • The program must produce no output on standard output other than the required decimal digits of pi, and the decimal point. There are no constraints on what it may write to standard error or to any files.

  • The leading 3 may count toward your number of digits, or not; your call. (It has to be printed either way.)
  • Standard loopholes apply, including using a builtin constant to supply the value of pi. (I'm looking at you Mathematica)
  • You may assume that the value passed in will be small enough not to exceed resource limits in your program (recursion depth, memory allotment, integer overflow, etc.). Your program should be written in such a way that increasing these resource limits will allow it to compute more digits.
  • \$\begingroup\$ You might want to do something about a Mathematica answer along the lines of π~N~n, where n is the input number. ;) That is, you should probably restrict access to built-in π, trigonometric functions, etc. \$\endgroup\$ Jul 21, 2014 at 15:44
  • 2
    \$\begingroup\$ Seems similar to codegolf.stackexchange.com/questions/506/… \$\endgroup\$
    – Kyle Kanos
    Jul 21, 2014 at 15:46
  • \$\begingroup\$ @KyleKanos that one has some fairly arbitrary restrictions on it, and besides it's about printing a fixed number of digits rather than an arbitrary number. Similar, yes, in the sense that many questions asking some variant of "print pi" are similar, but not the same IMO. \$\endgroup\$
    – David Z
    Jul 21, 2014 at 16:18
  • \$\begingroup\$ @MartinBüttner that's one of the standard loopholes but I could make it explicit. \$\endgroup\$
    – David Z
    Jul 21, 2014 at 16:18
  • 1
    \$\begingroup\$ @DavidZ: I think the general consensus is that if answers can be taken from one question and modified slightly for another, it's a duplicate. I do see the difference between this Q and the one I linked to, I'm just kinda giving heads-up to a good friend that some on this site might not see enough of a difference. \$\endgroup\$
    – Kyle Kanos
    Jul 21, 2014 at 16:25
  • \$\begingroup\$ Yeah, of course I do see your point. I figured I'd put up the suggestion anyway, just in case. \$\endgroup\$
    – David Z
    Jul 21, 2014 at 16:27
  • \$\begingroup\$ @DavidZ That is one of the most disputed loopholes though, so it might be worth mentioning it explicitly. \$\endgroup\$ Jul 21, 2014 at 16:31
  • \$\begingroup\$ Calculating pi in decimal has been thoroughly mined, hexadecimal has been done, rational approximation has been done, trig function evaluation has been done. If you're looking for a question which won't be closed as a duplicate then you need to be much more inventive. Perhaps use Euler's evaluation of the Riemann zeta function at positive integers in terms of pi as an excuse to ask a question about numerical evaluation of the non-trivial zeroes of zeta. \$\endgroup\$ Jul 21, 2014 at 16:45
  • \$\begingroup\$ @PeterTaylor of course the specific numerical constant is irrelevant; I could just as well ask the same question for e, or the golden ratio, or a zero of the zeta function, but that wouldn't change whether it's a duplicate or not. I'm getting the sense this whole area of computing numerical constants is overdone. \$\endgroup\$
    – David Z
    Jul 21, 2014 at 16:50
  • 1
    \$\begingroup\$ Different constants have different formulae available for calculation; the golden ratio admits an extremely short program by virtue of its continued fraction representation (which is probably equivalent to finding it by Newton-Raphson) whereas short formulae for pi use other types of infinite series or product. The interesting thing about pi is how many formulae for it are known, and that might partly be why it has been done to death already. \$\endgroup\$ Jul 21, 2014 at 16:54

Note: This challenge might not work out on this site, please down vote this answer if you feel like it won't work and up vote if you think it could. If you down vote, a comment would be appreciated. I don't see the point in limiting the freedom of the participants since I think it will make things less fun/interesting.

Your love you want to show 'em, generate them a poem.

Poetry is not easy;
Rhyming is too hard.
Generate me a poem that's not too cheesy.
If it's good enough we'll call it art.

In all honesty, poetry really is tough beans. So for this challenge I ask you to write some code in the language of your choice that will generate poetry.


Your program has to be able to output a large amount of generated poetry of reasonable quality. This means that you can't write code that tries to 'generate' a poem that already exists. You also can't sample parts of existing poetry (this includes poetry invented by you). It is okay if some (or even most) of your code's poems make no sense and there are only a small percentage of good poems. I'm sure that code that consistently generates good poetry will be more popular though. Other than that there are no restrictions, you can use dictionaries, you can use the internet, you can strive for a certain rhyming scheme or several. It's poetry, get creative.

Your answer

Your answer should include:

  • Your full code or a link to it.
  • An explanation of your strategy.
  • Some of your favorite poems generated by your code.

The winner

This is a , so the answer with the most votes wins.

But what's a poem?

I see where you're going with this. You could output a list of words and claim it's poetry. I fear the other users won't be too impressed with that though and you won't get many votes (if you can avoid down votes). However, that doesn't mean it absolutely has to rhyme, there are plenty of ways of making poetry interesting and if you can have your code generate non-rhyming poetry that other people like, you deserve those votes. Explaining your strategy will also help people see why what you did is interesting.

  • 1
    \$\begingroup\$ This seems to be a bit too broad. What classifies as "poetry" for this challenge? Poetry doesn't necessarily need to rhyme, or follow any form or rhythm. I could claim for almost any text that it's poetry of some weird abstract form. You might want to place some restrictions on that. Also, if you're disallowing sampling parts of existing poetry, does that mean I can't submit a solution which just fills in blanks in a fixed structure or randomly combines a predetermined set of lines? Where do you draw the line between sampling a dictionary and sampling existing poetry? \$\endgroup\$ Jul 27, 2014 at 15:38
  • \$\begingroup\$ @Martin I would say that taking combinations of words from existing poetry is sampling, filling in a structure wouldn't be. As for it being too broad, I feel like making it less broad would make the challenge less fun. Since the quality of the output is subjective, should we really be putting strict restrictions on what we want as an output? Or is this explicitly against the rules of SE? Maybe the poems should have a minimum length though. \$\endgroup\$
    – overactor
    Jul 27, 2014 at 15:48
  • \$\begingroup\$ It's not necessarily against the rules, but there's a close-vote reason for questions being "too broad", and I could see this being closed as it stands. You'll just get people producing completely random chains of words and claiming that they are poetry. \$\endgroup\$ Jul 27, 2014 at 15:51
  • \$\begingroup\$ @Martin Those should get downvoted though. Poetry is hard to define and I don't want to restrict people's creativity by failing to define it. If people like the output of a program, who's to say it's not poetry? \$\endgroup\$
    – overactor
    Jul 27, 2014 at 15:54
  • 3
    \$\begingroup\$ I get your point, I'm just saying people are still very likely to close your challenge. The question isn't whether there are too many possible answers which would be upvoted but too many possible valid answers. And in fact I even think there might be too many possible answers that could be upvoted. There are just so many different kinds of (more or less weird) poetry. \$\endgroup\$ Jul 27, 2014 at 15:58
  • \$\begingroup\$ Do you think that means the challenge isn't a good challenge or not a good fit for SE? \$\endgroup\$
    – overactor
    Jul 27, 2014 at 16:03
  • \$\begingroup\$ It's certainly a very interesting challenge, but as it stands too broad for SE, I think. \$\endgroup\$ Jul 27, 2014 at 16:05
  • 3
    \$\begingroup\$ There are many subclasses of poetry already well defined. Often a restricted format leads to more creativity, not less (both in writing poetry and in writing code). \$\endgroup\$ Aug 10, 2014 at 2:07
  • \$\begingroup\$ I, for one, find this a perfectly fine challenge. \$\endgroup\$ Mar 15, 2015 at 22:19

Program calculating its own length


Your task is simple: write a program that produces its own length, without using any literals or built-in constants other than 0 (or its equivalents in your language).


  1. Your code must print its own length in bytes when run, followed by a single newline.
  2. Your code cannot use any literals other than 0 (or whatever equivalents your language might have). This includes string and character literals.
  3. Your code cannot use any built-in constants of your language, unless these are guaranteed to always have the value 0.
  4. Any functions and operators provided by your language can be used.
  5. You're not allowed to use any external libraries or external resources in your program.


The score of a valid program is its length in bytes. The score of an invalid program is ∞.
As this is code golf, lowest score wins.

  • \$\begingroup\$ Does "any literals" include the more involved ones like function, array and object literals? Apart from this restriction, I'm pretty sure this has been asked before. \$\endgroup\$ Aug 3, 2014 at 17:54
  • 3
    \$\begingroup\$ @MartinBüttner Probably a dupe: codegolf.stackexchange.com/q/27079/16402 \$\endgroup\$
    – user16402
    Aug 3, 2014 at 17:58
  • 1
    \$\begingroup\$ Would this Python entry be valid (not golfed)? It uses only globals. text = open(__file__, 'rb').read(); length = len(text); print(length) \$\endgroup\$
    – Claudia
    Aug 12, 2014 at 5:41
  • \$\begingroup\$ May we use built-in lists that are guaranteed to be []? \$\endgroup\$
    – Adám
    Feb 8, 2019 at 8:28
  • \$\begingroup\$ In Jelly (and likely much more esolangs), a empty program outputs 0, producing an answer that is very hard to beat; Try it online! \$\endgroup\$ May 24, 2019 at 8:44

Find a multiple of 42 that is spelled with all of the characters that make up the word "forty-two".


  1. All of the characters in "forty-two" must be included at least once. Dashes count as characters, and each character must be used cumulatively (dog doesn't contain all of the characters that make up the word dogg, for example).
  2. The result can be any multiple of 42 that meets the defined criteria, presented in numerical form.
  3. Result must be multiple of greater than 1 (or less than -1). In other words, 42 and -42 are not allowed.
  4. Additional characters not in the word "forty-two" are O.K.
  5. The program must calculate its result without utilizing prior knowledge of a multiple known to include the right letters. Clarification:

    • This means that self trivial solutions such as hard-coding the program to print 42,000 are not allowed.
    • As an exception to this rule, prior knowledge of the maximum result possibility (42,000, for example) may be used to define the program's ability to name numbers up to the necessary size.

The shortest code (counting in bytes) to do so in any language wins.

  • \$\begingroup\$ This was down-voted in the original post, so I've improved it and posted here to see if it might be further improved to the point of liking. It seems to me like a nice challenge. \$\endgroup\$
    – J.Todd
    Aug 4, 2014 at 20:30
  • 1
    \$\begingroup\$ I think that the specification are good now and the challenge would be fun, but this seems to be pretty much a duplicate of Converting integers to English words just with an added loop and comparison. There are some more questions like that here already, which can be found searching for site:codegolf.stackexchange.com english number \$\endgroup\$
    – tim
    Aug 4, 2014 at 22:45
  • \$\begingroup\$ @tim perhaps a small creative twist, then? \$\endgroup\$
    – J.Todd
    Aug 5, 2014 at 1:32

Dining Philosophers (Incomplete)

Please do not vote or comment yet.


Cooperate with other Philosophers in order to eat your dinner as quickly as possible.


You will be randomly paired with two other philosophers. Each philosopher begins with one fork. A philosopher needs two forks to eat his dinner. Each round you may take one of six actions:

  • Take the fork on your left
  • Take the fork on your right
  • Place a fork to your left
  • Place a fork to your right
  • Eat
  • Wait

The following behaviors will cause you to wait by default.

  • Attempting to take a fork that is not there
  • Attempting to place a fork you do not have
  • Attempting to eat with less than two forks
  • Attempting to take a fork when you are already holding two

Once every philosopher has successfully eaten, the trial is completed. Each participant is scored according to how long it took all three participants to eat.


Input description here.

For Java submissions, input will be passed via parameter. For non-Java submissions, input will be provided via a command argument.


Output description here.


Java Submissions

You must submit a unique title and a Java class that extends the abstract Philosopher class written below.

public abstract class Human {
    public abstract String takeAction(String arg);

Non-Java Submissions

You must submit a unique title, a program, and a Windows command line string that will run your program. Remember that an argument may be appended to that string. For example:

  • python Aristotle.py
    • Note that this one has no args. This is round one! Be prepared for this.
  • python Aristotle.py args


Your final score will be the median of your scores across ____ trials.


Tennis Tournament (Incomplete)

Please do not vote or comment yet.


Insert tennis themed introduction here.


Insert description of the tournament hierarchy, player seeding, and program flow.


You will be passed the current set of matches. Matches will be comma (,) delimited. Players within a match will be dash (-) delimited. Players will be represented by ID and strength in the format <ID>$<Strength>. Byes will be represented by 0$0.

Java submissions will be supplied input via argument to the takeAction() function. Non-Java submissions will be supplied input via command line argument.


The following input represents a three player tournament. The players' IDs are 2, 1, and 3. Their strengths are 1, 2, and 2, respectively. Player 3 has a bye.



Return the string "play" if you want to play. Return the string "concede" if you want to concede.


Java Submissions

You must submit a unique title and a Java class that extends the abstract Athlete class written below.

public abstract class Athlete {
    public abstract String takeAction(String arg);

Non-Java Submissions

You must submit a unique title, a program, and a Windows command line string that will run your program. Remember that an argument will be appended to that string. For example:

  • python RafaelNadal.py args


Your final score will be the median of your scores across ____ trials.


Teach me to play clarinet

(might be an optimization problem for )

This is mostly a work in progress until I figure out the best input and output notation/formatting.

The clarinet is a very complicated instrument, as there are more keys than I have fingers. Additionally, there may be multiple ways to play the same note. I dream of becoming a professional clarinetist one day, but I am very lazy at everything I do. When playing music, I try to move my fingers as little as possible.*

The input will be a series of musical notes, which each note consisting of a note name (like E or G#) and a number which represents which octave of the clarinet is being discussed.


E1 - low E, the bottom note
C1 - C below the staff
E2 - E at the bottom of the staff
F#3 - F# at the top line of the staff
G4 - G that is 4 ledger lines above the staff, the highest note needed

An example input might be

Eb2 D2 F#3 F3 F#3 G3 F#3

From this list of notes, your program should determine which fingerings I should use to play these notes in the easiest way possible. "Easiest" means that the total number of finger movements should be minimized (how to explain?).

The output should describe my finger position for each note in terms of the location of each of my fingers.

One problem I see is that there is no standardized fingering chart for clarinet. Furthermore, no fingering charts actually specify which fingers are used to play which keys. One thing I would have to do is create a list of all possible positions for each finger. Then, a single fingering "diagram" would consist of the list of keys, telling which are open/closed/either. There would be multiple fingering diagrams for each note.

The next problem is that the number of distinct fingerings can grow to be quite large when certain tricks are taken into account such as "leaving the right hand down while playing throat tones." This would be the reason for adding the "either" option to the fingering charts.

I must figure out how to notate the fingering charts and format the output.

*this is actually a good thing and not lazy

  • \$\begingroup\$ As for the fingering charts, my clarinet book has a chart labeling each key with a character, A-Q, I think. The holes could be 1-6. Would this be helpful? \$\endgroup\$
    – user10766
    Sep 18, 2014 at 2:19

Chess: End Game KOTH


You design a bot that plays the final moves of a chess game against other bots. The chess board will be in the end game stage (relatively few pieces) with either a winning position for white, or a force draw. Points will be scored on the outcome of the game in each board situation. Bots will play both the black and white sides for each position (10 unique positions, 20 games in total).


  1. Basic chess rules apply

  2. No outside help whatsoever (chess engines, endgame tablebases, stored patterns)

  3. Notation will be in the ICCF numeric notation format
  4. Round-robin tournament setup (see scoring below)
  5. 20 games per match (1 match is one bot-to-bot pairing)

    • Each bot plays 10 games as white and 10 games as black
    • 8 of these games will be force wins for white, the remaining 2 are force draws (but winnable by either player)
    • The same 10 games will be repeated, so each bot will play the same position as both colors.
  6. Time limit of 1 minute per match? (very flexibly here)

    • Maximum time per move is X seconds (possible Fischer Delay bonus?)
    • Failure to move in the time limit per move will result in a loss for the current game


These values will surely change

| Board Situation     | White Wins | Black Wins | Black Draws | White Draws |
| Force Win for White | 100        | 500        | 250         | -50         |
| Force Draw          | 250        | 350        | 50          | 50          |
  1. Need to figure in number of moves into points
  2. Overall winner is the bot with the most points at the end of the round-robin

How To Play

  1. Controller will be written in python and will communicate to bots via STDIN/STDOUT

    • Bots can be programmed in any language that support persistent polling of STDIN and STDOUT
  2. A board will be generated by the controller and sent to both players at the same time (will include information for castling in a TBD format). Each bot will be given ~50 ms to process the board information, but they don't know what side they are playing.

  3. Following the short pause, each of the bots will be sent either B or W character to indicate which side they will play for the next game. At this time, the white bot timer is activated and it can return his move any time afterwards.

  4. The bot will response via its STDOUT the move in ICCF numeric notation


  1. After the move has been validated by the controller, the time remaining for both opponents and the move history will be sent to the each bot, and then the other bot begins their turn. Time will be outputted in ms in the following format WXXXXX BXXXXX. The following is the output given to each bot after each ply.
W54000 B60000 1) 5453
W54000 B48000 1) 5453 7872
W52000 B48000 1) 5453 7872 2) 6512
  1. This will repeat (steps 4&5) until the game is won, drawn, or time runs out, after which the bots will be sent the final score of the game and time remaining for the next game of the match
W35000 B47000 W+300 B+50

Things that might be a problem

  1. The efficiency of the language (i.e., C++ vs perl) might bias towards language used instead of algorithm developed
  2. Generating board situations (could grab them through an online DB automatically)
  3. Too hard/easy to program?
  • \$\begingroup\$ Do you want to accept or exclude the approach of exhaustively evaluating all future moves? I guess this will affect how long you give per move, and per match (as future moves calculated in the previous turn can be stored and added to on each new turn). For example, if you're near enough to the end of the game that it takes 30 seconds to evaluate all possibilities, then a few moves in a bot could have full knowledge, as some futures will be trimmed by the moves taken so far. \$\endgroup\$ Aug 11, 2014 at 21:45
  • \$\begingroup\$ This won't apply if you choose end games that still have a lot of options open - I don't know if you mean 2 pieces left each or several. \$\endgroup\$ Aug 11, 2014 at 21:48

Tetromino Game

(name suggestions?)

This game is based off of L game, an abstract puzzle game by Edward de Bono.


Every player is assigned a random position in the list of players. Every round, each player gets a turn, in the order defined by the list of players. The game is over once only 1 player remains.

The board is a 2-dimensional grid containing the tetrominoes, as well as 1x1 neutral pieces. It does not wrap. It is generated randomly and all of the pieces are placed on it, with a good amount of neutral pieces (should equal roughly half the amount of empty blocks, and just over 2/3 the total amount of players).

On each turn, the player must move their piece to another position on the board, and optionally a single neutral piece. This can be anywhere, however, no pieces can intersect.

The player loses if they cannot move their tetromino anywhere; they are no longer given any turns, but their tetromino stays.

After 20 rounds, on every round, a neutral piece will be placed randomly on the board.

A player's score is equal to the amount of turns that they have played.


Communication with the controller is done through STDIN and STDOUT. Your submission will run for the entire length of the game. If your program is expected to produce output and doesn't within 4 seconds, you will lose.

At the start of the game, your submission will be launched and you are expected to produce a tetromino to play with. You should output a number from 0 to 4, corresponding to these tetrominoes:


(modified version of this)

They are in order of strategical complexity; 4 is the most complex.

Then, the initial game data will be passed to your game.

The first line contains 3 space-separated integers: your position in the list (starting with 0), board width, and board height.

The rest is a rendering of the board: A player's tetromino is made of the last digit of the base-93 number (ascii 33 to 125) of their position in the list. A space is an empty space, and ~ is a neutral piece.

On every turn except your own, your bot will receive information about the turn. The first line can be one of either M 0 0 0 or L; the first is for motion (see next paragraph), and L is for that player being unable to make any moves and losing.

The motion line is in the format M x y r f, where x and y is the new position of the upper-left block in the bounding box of that player's tetromino, and r is the amount of rotation (0 for 0 degrees, 1 for 90, 2 for 180, 3 for 270, clockwise).

f is either 0 or 1; 1 if the player flipped their piece along the x axis (this happens before rotation). Optionally x y x y could also be on the end of the line, the first pair of coords being that of a neutral piece, and the next being its target location. It is followed by the new board.

On your turn, GO will be given to you on STDIN and you will be expected to produce a string x y r f and optionally x y x y, similar to the one in the paragraphs just above this. The controller will evaluate whether or not there are possible moves for you just before your turn, and will eliminate you automatically if necessary.

If your output is invalid, you will receive ERROR on STDIN and you will be expected to produce a new output. If this happens 5 times in a row, you lose.

Submissions are allowed to store data in files, and initial data for the file can be included with the submission.


Each player's score is equal to the amount of turns they play; however the submission's final score is the sum of all their scores in multiple trials. Trials will be run until the leading submission is 5 points away from the runner-up.


Ideas: "Tetromeano" (suggested as a joke on chat), "Space Tetris".

Discuss the game here.


This is a rough idea for a challenge, if possible I would like someone else to help me with it and possibly host the challenge (and consequently getting all of the up votes :] ).

Pecking Birds - input wanted

You're a bird and birds need to eat. There's not all that much food, so you might need to fight for it.

Haven't you heard about the bird?

Birds live on a continuous torus where food drops at random places at an increasingly slow rate. They can only see food from a certain distance, they can see all other birds on the torus though. Birds can only move over a limited distance at a time and can peck at either birds, food or nothing within a certain radius. Birds can see a bird's last action, but they can't distinguish between pecks at food and pecks at nothing if they're too far away. Birds that are pecked to death, turn into food. Food disappears after a fixed amount of birds have taken a peck at it. Birds' health goes down every turn, but get refilled a bit if they peck at food.

Input and Output

If I end up hosting this challenge myself, the controller will be in Java and submissions will be either a java class or a program in another language. Both types of answers will be allowed to persist between turns. Java submissions will have the state of the game copied into global variables and be called to act through a method and send their output as a return value. There will also likely be helper functions available for java submissions. Other submissions will get their info through STDIN and asked to send their output to STDOUT. There will be two actions every turn, a pecking action and a moving action. before being asked what to do, you will get the position of each bird, their last pecking action and the position and plentitude of all food withing your sight. On your pecking turn you will be asked to either peck at food, peck at a bird, peck at nothing or not peck at all. On the movement turn you will asked to return a position within your movement radius to move to. All birds peck at the same time and then move at the same time alternately. the winner is the last bird standing.

The competition

Each player will start with 10(?) birds on a sqrt(n)*50(?) sized torus, where n is the amount of entries. Your score will be determined by the amount of rounds your last bird died before the last bird standing. Obviously a lower score is better. The simulation will be run several times and some sort of average will be taken to determine the overall winner.


Jenga code

I think everyone knows what Jenga is.

As per Wikipedia:

Jenga is a game of physical and mental skill [...] During the game, players take turns removing one block at a time from a tower constructed of 54 blocks. Each block removed is then balanced on top of the tower, creating a progressively taller but less stable structure.

enter image description here


Write a program that behaves as a Jenga tower. Every time a randomly chosen piece of code is removed and placed at the bottom of your program, the code should re-run. Goal is to achieve the tallest running code tower.


  • The starting tower (or source code) must be of exactly 15 lines of code. Such lines must be divisible by 3 forming a 15x3n grid composed by 15 lines of 1xn bricks.
  • A brick is removed randomly from the code and placed at the bottom from left to right until the 3n block line is complete. The process goes on at the bottom of the new formed line.
  • If a brick has strictly more consecutive whitespaces than any consecutive characters in it its considered broken and fails to sustain the tower.
  • A brick must always be present for each row (2 holes and 1 brick), but its position in the row is not important.
  • A tower is tall 20 lines if the 20th line tower runs with no errors.
  • A brick cannot start nor end with comment start or end tags of your chosen language (e.g /* or //)


Each tower must output its own height.

Scoring system

Your score is simply the avarage tower height for your program:


Where MIN TOWER refers to the minimun non-running tower while MAX TOWER refers to the maximum running tower.

(It would be nice if in the answer both towers are shown)

Proposed tag:

  • \$\begingroup\$ I think the basic idea is good, but it lacks some definition; you should probably specify that a line has to be more than just a comment and does something related to the rest of the program. What prevents me from declaring a new variable on every line and then printing a hardcoded string on one line? I'm not sure if thsi idea could work, but it certainly doesn't work like this. \$\endgroup\$
    – overactor
    Aug 18, 2014 at 12:25
  • \$\begingroup\$ Maybe the randomly picked rule is also not beneficial. I believe that if people can specify the order in which the lines are picked, they can get more creative. \$\endgroup\$
    – overactor
    Aug 18, 2014 at 12:26
  • \$\begingroup\$ Can't understand your point on the comment line. If the middle brick is taken from that line and placed at the bottom, the code shoulnd't work, right? Or you mean that every single brick has/is a comment? \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 12:28
  • \$\begingroup\$ For the line picking I can add the rule to choose a integer sequence of choice and use the sequence to choose the line (starting again from top when end is reached while counting). \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 12:35
  • \$\begingroup\$ @Narmer What overactor is referring to is that any brick could be /* my comment */ which could be removed and moved anywhere without breaking the program. But there are other ways. It is trivial to get the maximum score of 50 in many languages by writing 44 bricks of the form someVariableName = 0; and one brick of the form print "I win!". (That was overactor's other point in his first comment.) I agree that the idea is interesting but it needs some work. \$\endgroup\$ Aug 18, 2014 at 12:38
  • \$\begingroup\$ @MartinBüttner I see your point now. First is easily avoidable removing comments, but the second one is tough. I'll think for a solution. \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 12:41
  • \$\begingroup\$ The only thing I can think of is using the output. Something like "every compiled tower must output its height". \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 12:45
  • \$\begingroup\$ In no particular order, I see the following problems. 1. Is "compiled" intended to exclude interpreted languages (in as much as that distinction makes sense nowadays)? 2. The stuff about holes makes no sense to me. In particular, a) there's nothing stopping a brick from containing a hole; b) the number 4 appears from nowhere and doesn't fit with n-char bricks. 3. What are MIN TOWER and MAX TOWER in the scoring? 4. I can easily write code which does absolutely nothing but compiles. E.g. make each brick for(;;)break;. \$\endgroup\$ Aug 18, 2014 at 12:55
  • \$\begingroup\$ Edited to match the comments. Ugh, just seen @PeterTaylor comment. \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 12:55
  • \$\begingroup\$ Making each tower output its height is easy: just make each brick end in a // / # as appropriate to comment out the remaining bricks on the line. E.g. in GolfScript making each brick 0or)# would achieve that. \$\endgroup\$ Aug 18, 2014 at 12:56
  • \$\begingroup\$ @PeterTaylor for your last comment, see my edit. Min tower refers to the minimum non compiling tower, while max tower is for the maximum compiling tower. I'll clear that out. \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 12:57
  • \$\begingroup\$ For the hole part I was trying to avoid trivial solution where a brick is composed by only < 4 chars (and the line by more than 12), making the tower almost "brickless". I'm still trying to figure out how to make that clear, maybe I should change it in a more clear "if a brick has more whitespaces than characters in it its considered broken and fails to sustain the tower" \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 13:05
  • \$\begingroup\$ And last but not least for compiling I mean "working with no errors, regardless they are compile or runtime". Don't know why I used such a silly word. \$\endgroup\$
    – Narmer
    Aug 18, 2014 at 13:18
  • \$\begingroup\$ Pretty much any language which can do a cheat quine by reading its own source can do that and print the newline count in one block, and then do nothing useful in all the other blocks, achieving a perfect score. (I can also see how to get a perfect score in GolfScript by counting newlines without reading the source, but that's actually an interesting answer. OTOH it does mean that the question would be pretty much killed once someone posts it). \$\endgroup\$ Aug 19, 2014 at 9:21
  • \$\begingroup\$ I think that's unavoidable. A single block has to have the possibilty to live on its own, otherwise a single brick line in not possible. I think I have to exploit again the output to alter the program code. Maybe instead of simply the height the program should output an ascii representation of the tower, with XXX for brick and void for hole. Let me know what you think. \$\endgroup\$
    – Narmer
    Aug 19, 2014 at 10:16

Analyze Tonguetwisters

Your task is to write a program which will accept an English tonguetwister, search for commonly used sounds and decide why it is difficult to pronounce.

  1. Calculate the frequency of every sound used in the input sentence.
  2. Count identical sounds (for example, ea and ee) as the same thing.
  3. Ignore those sound groups (see below) which occur less than 0.1 times per character of the input.
  4. From the sounds that remain, group members of the same group together and separate by a forward slash (/).
  5. Arrange the groups by decreasing number of occurences.
  6. Separate groups by commas.
  7. Output.

Identical Sounds [under construction]

ee = ea (in step 2, replace ea by ee)

Sound Groups [under construction]



Input: She sells sea-shells on the sea-shore.

Output: s/sh,e/ee

Input: The seething sea ceaseth and thus the seething sea sufficeth us.

Output: s/c,e/ee


  • Receive input on STDIN, as command-line arguments or otherwise. You may not expect it to be stored in a variable.
  • Output to STDOUT or equivalent.
  • Standard loopholes are banned.
  • 2
    \$\begingroup\$ Are you going to provide a data file which maps words to the pronunciations in a standardised format? \$\endgroup\$ Aug 21, 2014 at 13:37
  • \$\begingroup\$ @PeterTaylor It wasn't in my original plan (which was just to assume that c,sh,s, and ch are always similar, which is not the case as c can be pronounced s or k), but if there is such a file somewhere I can alter the challenge for it to be used \$\endgroup\$
    – user16402
    Aug 21, 2014 at 14:08
  • 1
    \$\begingroup\$ An earlier question uses the CMU Sphinx pronunciation dictionary. \$\endgroup\$ Aug 21, 2014 at 14:13

Gun Fight at High Noon


This will be a 5 or 4 stage (the decision will be explained later) tournament where programs are pitched against each other to solve an integration problem faster than the other. The fastest will then go on to the next round.

Number of rounds: Due to tournament bracketing, the number of rounds will be decided by the reception of the challenge. For four rounds, sixteen entrants are needed. For five rounds, thirty two entrants are needed.

The controller

The controller will be written in Python, using time.time() as the timer. When run, it will time one entrant, print the output and time the other entrant and print the output. I will then put the results into a text file and post the results on the question.

The problem

The problem will be a simple elementary function integration problem with long numbers included. These will be generated randomly when the controller is initiated and both entrants will be given the same problem.


  1. No inbuilt functions can be used to solve the problems
  2. If you fail to calculate the problem correctly, you will lose immediately
  3. In event of a tie, the match will be replayed with a different problem

Inbuilt Functions

Inbuilt functions include functions that solve integration problems themselves you must have a hand written integral solving algorithm in your code.

Example and Arguments

All information will be transferred via stdout and stdin. The integral will be in the following format:

Integral http://upload.wikimedia.org/math/0/3/4/034cf496a9d3026984fcae6cfa58608a.png

And f(x) being like where a and n will be replaced for integers when passed to your program:

f of x

With arguments being passed like so:

programname a b f(x)

The reply will be stdout as a floating point integer to a precision of 5 decimal points. An example from one of my tests:

~$ python3 showdowncontroller.py Test1 'python3 int1.py' Test2 'python3 int2.py'
A,B:        3,36
Function:   10*x**3
Result:     4199187.88575

Test1: 0.04052305221557617 True 4199187.88575 <- name time correct? output

Test2: 0.04041910171508789 True 4199187.88575

Win: Test2

The command run for each program was:

python3 [program name].py 3 36 10*x**36

And the response was:



In your answer you will need the following:

  • Name of your program
  • Command to compile your program (if necessary)
  • Command to run your program
  • Your code
  • A short description of your integration method

Your program can be in any language as long as I can compile and run it on Ubuntu 12.04 Precise.

There will be a 0.00005 error tolerance: any more or any less and your program will lose the match. The controller uses Simpson's Rule.

# Generate numbers
a=random.randint(1, 50)
n=random.randint(1, 10)
b=random.randint(1, 50)
c=random.randint(1, 50)

# Integration using the Simpson method
def integrate(f, a, b):
   h = (b-a)/100
   meth = lambda f,x,h: (f(x) + f(x+h))/2.0
   ival = Decimal(h * sum(meth(f, a+i*h, h) for i in range(100)))
   return ival 

# Call function
func = lambda x: eval(str(a)+'*x**'+str(n))
result = round(integrate(func, c, b), 5)

Test programs will be posted with their running times so people can tell how fast my computer is. I will post no hardware specifications (processor type, speed) though - that will remain a mystery.

Controller code

# Gun Fight at High Noon
import subprocess, random, time, sys
from decimal import Decimal

# Get program names
prog1 = sys.argv[1]
prog1command = sys.argv[2]
prog2 = sys.argv[3]
prog2command = sys.argv[4]

# Generate numbers
a=random.randint(1, 50)
n=random.randint(1, 10)
b=random.randint(1, 50)
c=random.randint(1, 50)

# Integration using the Simpson method
def integrate(f, a, b):
   h = (b-a)/100
   meth = lambda f,x,h: (f(x) + f(x+h))/2.0
   ival = Decimal(h * sum(meth(f, a+i*h, h) for i in range(100)))
   return ival 

# Call function
func = lambda x: eval(str(a)+'*x**'+str(n))
result = round(integrate(func, c, b), 5)

print('A,B:     '+str(c)+','+str(b))
print('Function:    '+function)
print('Result:      '+str(result))

# Run program and evaluate output
def runprog(command, result, f, a, b):
    start = time.time()
    answer = subprocess.Popen(command+' '+str(a)+' '+str(b)+' '+f, stdout=subprocess.PIPE, shell=True).communicate()[0].decode('utf-8')
    end = time.time()
    elapsed = end-start

    if Decimal(answer) > result-Decimal(0.00005) and Decimal(answer) < result+Decimal(0.00005):
        correct = True
        correct = False

    return elapsed, correct, answer

p1time, p1correct, p1answer = runprog(prog1command, result, function, c, b)
p2time, p2correct, p2answer = runprog(prog2command, result, function, c, b)

print('\n'+prog1+': '+str(p1time)+' '+str(p1correct)+' '+p1answer)
print(prog2+': '+str(p2time)+' '+str(p2correct)+' '+p2answer)

if p1correct:
    if p2correct:
        if p1time < p2time:
            print('\nWin: '+prog1)
        elif p1time == p2time:
            print('\nWin: '+prog2)
        print('\nWin: '+prog1)
    if p2correct:
        print('\nWin: '+prog2)
  • \$\begingroup\$ To be properly specified you need to define a) the class of functions which should be integrated; b) the I/O format; c) the error tolerance (and the method of computing the reference value against which you'll check). As a separate issue, what do you mean by "credentials" in the last sentence? \$\endgroup\$ Aug 22, 2014 at 10:27
  • \$\begingroup\$ @PeterTaylor My answer has been edited to incorporate all of your suggestions \$\endgroup\$
    – Beta Decay
    Aug 22, 2014 at 14:48
  • \$\begingroup\$ I don't see point a) addressed anywhere, and the part of point b) which relates to how the formula is serialised is also unaddressed. And on the basis of the example, no-one should waste their time answering. The spec allows "a 0.005 error tolerance" but the error in the controller's calculation is apparently 350.38575. I think the standard English term for processor type, speed, etc. would be "hardware specifications". "Credentials" in the context of computing generally means either username+password or a cryptographic token serving a similar purpose. \$\endgroup\$ Aug 22, 2014 at 15:10
  • \$\begingroup\$ @PeterTaylor What do you mean by class of functions then? \$\endgroup\$
    – Beta Decay
    Aug 22, 2014 at 15:16
  • \$\begingroup\$ Are answers supposed to integrate polynomials, rational polynomials, hypergeometrics, the closure under field operations of elementary functions, ...? \$\endgroup\$ Aug 22, 2014 at 15:51
  • \$\begingroup\$ @PeterTaylor Elementary functions \$\endgroup\$
    – Beta Decay
    Aug 22, 2014 at 15:57
  • \$\begingroup\$ How is this significantly different than if it was simply a [fastest-code] problem instead of having a tournament set up? You could just give a large set of test cases, and the fastest code would still win, right? \$\endgroup\$
    – Geobits
    Aug 22, 2014 at 17:56

Rubik's Cube Simulator

I had posted a rubik's cube question a few days back which turned out to be quite close to an existing one although I made a few amendments. This is a different question altogether.

The idea is to simulate operation of a rubik's cube.

INPUT: Take a preset sticker configuration for each face as input

Your program must interpret the configuration and suggest a list of moves to generate the said configuration from a perfect Rubik's cube.

Your program must also check if the sticker combination is an invalid one, and print an error message saying that it is not possible to generate such a configuration.

Question should probably be used as a popularity contest given the length and complexity of code, but based on response, a code golf follow-up is on the cards.

Suggestions are most welcome.

  • 3
    \$\begingroup\$ I don't know a whole lot about Rubik's cube, but going from state Finish to In-between any different than In-between to Finish? \$\endgroup\$ Aug 25, 2014 at 12:42
  • \$\begingroup\$ I don't think using [popularity-contest] is a good idea if there are better alternatives. That should be reserved for cases, when it's hard to make the validation criteria objective. In your case [code-golf] seems fine. Alternatively, you could think about a [code-challenge] for returning the smallest number of moves. \$\endgroup\$ Aug 25, 2014 at 12:43
  • \$\begingroup\$ Okay, will do. Code-challenge seems more accurate. \$\endgroup\$
    – CrazyMod
    Aug 25, 2014 at 12:45
  • \$\begingroup\$ ...awaiting response... \$\endgroup\$
    – CrazyMod
    Aug 26, 2014 at 14:18

American Roulette

Roulette is one of the simplest casino games to understand, so I invite you all to see who gets the most money.


You will be supplied with a singe argument via the command line. This argument will be the amount of money you have.

[command to run your code] [arg1]

Your output must be in the following format:

[bet]|[amount of money you bet]

The following is a list of valid bets:


Name                   | Example
Any number of numbers  | 12|100 or 36,19,18|100
00                     | 00|1000
0                      | 0|126
1st 12 (see image)     | 1st12|100
2nd 12 (see image)     | 2nd12|439
3rd 12 (see image)     | 3rd12|679
1 to 18                | 1-18|8
19-36                  | 19-36|10000
Red numbers            | red|1722
Black numbers          | black|1384
Odd numbers            | odd|100
Even numbers           | even|21900

Payout will be calculated using the following equation where n is the number of squares your bet will win on:


In your answer, I need the name of your program, your code and a command to run it.


When enough people enter, I will run the controller twice a week. After four weeks, I will announce the winner (the person with the most money).

I realise that is may be ambiguous and/or poorly worded so any feedback on how to pad this question out would be helpful.

  • \$\begingroup\$ 1. This is not a king-of-the-hill challenge, due to the lack of interaction. This is basically just a code-challenge. 2. "n is the number of squares" should probable be "...the number of squares your bet will win on". 3. In roulette, can you actually bet on "any number of numbers"? I thought only the groups indicated on the mat are possible. 4. You might want to specify "American Roulette" because of the 00. 5. 5. How much money do we start with? 6. I guess you won't be just doing a single test for each bot, so how many trials will there be and how is the overall score determined? \$\endgroup\$ Sep 1, 2014 at 15:55
  • \$\begingroup\$ How can the bots interact? It looks to random and too "player versus environment"-y. \$\endgroup\$
    – Vi.
    Sep 1, 2014 at 15:55
  • \$\begingroup\$ Casino? The best strategy is not to play at all... \$\endgroup\$
    – Vi.
    Sep 1, 2014 at 15:57
  • \$\begingroup\$ @MartinBüttner I know that any number of numbers violates the conventional rules, but I'll keep it just so I don't need to code the layout of a roulette table. \$\endgroup\$
    – Beta Decay
    Sep 1, 2014 at 16:07
  • 1
    \$\begingroup\$ @Vi. Depends on the game, but in the case of Roulette you can't win in the long run. So I guess a reasonable winning criterion would be "most rounds until bankrupt". Still, I'm not sure Roulette provides enough strategical depth to be interesting. \$\endgroup\$ Sep 1, 2014 at 16:10
  • \$\begingroup\$ @MartinBüttner, but this isn't normal roulette. If you bet 0,00,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36|all-your-money you make a guaranteed profit of (38/36 - 1)*all-your-money. \$\endgroup\$ Sep 1, 2014 at 17:13
  • \$\begingroup\$ @PeterTaylor lol, good point, although I don't see how that provides "enough strategical depth to be interesting" :P \$\endgroup\$ Sep 1, 2014 at 17:16
  • \$\begingroup\$ @PeterTaylor You would make a guaranteed loss with that. yourmoney -= bet; yourmoney += (38/36)-1 \$\endgroup\$
    – Beta Decay
    Sep 1, 2014 at 17:20
  • \$\begingroup\$ @BetaDecay wait what, your payout is not multiplied by your bet? o.O \$\endgroup\$ Sep 1, 2014 at 18:11
  • \$\begingroup\$ @MartinBüttner Oh yeah... I should add that... \$\endgroup\$
    – Beta Decay
    Sep 1, 2014 at 18:28

Print the Constitutional Amendment

Given a number from 1 to 27, print the appropriate amendment to the US Constitution, using this text.

Your score is the byte count of your source code, divided by the byte count of the best answer to this question in the same language. Therefore, you must use a language which had an answer to that question before September 1, 2014.


Is this too similar to existing Kolmogorov-complexity challenges?

  • 1
    \$\begingroup\$ Hm, I think there's little regularity to the output which could be exploited, so this seems to boil down to just using any plain compression. \$\endgroup\$ Sep 5, 2014 at 8:19

Capture the flag

Basic rules

There is a rectangular map of cells, each bot has current cell. Bots compete 1 vs 1 at a time, let's call them red and blue. There are N instances of red bot and N instances of the blue bot on the map. Additionally, there is unmovable red base and blue base, both having initially the red flag and blue flag respectively. Bot instances can move around, supress enemy bot instances, capture the enemy's flag. The goal is to bring enemy's flag to the base (which should have the flag). The flag can be returned back to the base. Bots can pass the flag around.

Selectable rules (to be decided)

Map style

  • 2D, 3D or 2.5D;
  • Wrapped-around or not;
  • With walls (destructible, indestructible, buildable by bots) or without;
  • Bases positions and bots initial positions: random, selectable by player, hardcoded in a map?
  • Random-generated, pre-programmed, partially selectable by the player?

Bot capabilities

  • Moving diagonally? Dodging?
  • Seeing the entire map or only surroundings?

Intra-team bot communication

  • Uninhibited
  • Only using messages that takes a move to create or read and that travel not too fast;
  • Inhibited (only indirect by observing positions);

Prior knowledge

  • Should bots know the walls of the map from the beginning?
  • Should bots know the bases posisions from the beginning?
  • Should bots know enemy bots positions from the beginning?
  • If communication between bots is not free, should bots know initial frindly bots position from the beginning?


  • Only nearby bots or also "shooting"?
  • Multiple weapons or not?
  • Dodge/protect move?
  • One-hit or health points?

Abandoned flag

  • Is reset to the appropriate base after timeout;
  • Is reset to the appropriate base instantly;
  • Needs to be carried by the bot manually;


  • Reset the game after each flag score or continue the game for N moves or N scores?
  • What to do in case of stalemate?


  1. Is this challenge a good idea?
  2. Which set of proposed rule variants to choose?

My current choice is:

  • Rectangular 2D map without wraparound, with big walls pre-programmed, random single wall-lets placed randomly;
  • Bases positions are pre-defined and known in advance to all bots;
  • Bots having 10 health points, carrying chainsaw (5 damage, 1 distance) and a gun (2 damage, 10 distance);
  • Bots can stay&defend (half of received damage), move 1 cell to 8 directions, attack (without moving); build up to 8 pieces of wall in neighbouring cell, destroy 1 piece of neighbouring wall, capture the flag, score the goal, send a message.
  • Bots can cee a 11x11 rectangle, centered around them, including through walls;
  • Bots are stateful, but can't communicate with other instances directly. They can observe movements of other bots in the vision field or receive messages (if any). The message is a 4 bytes of data (i.e. a number from 0 to 2^32-1) + 1 byte of signal strength, it travels 5 cells per move, decreasing signal strength by one. Message gets received (including the current "signal strength" parameter) by all bots (including enemy ones). Bots reads the message (if any) before making a move. If there are multiple messages, only one with larger signal strength gets received. Hovewer if signal strengths differ only by 1, contect gets XORed.
  • Player choses initial positions (relative to own base) of all his bots;
  • All bots know the initial walls in the map;
  • While the bots stays close to own base, it's health gets recovered by 1 point per move, up to 10, if the flag is present.
  • Each round gets until one of the team scores 5 goals. This team wins (5-x) points, where x is number of opposin team's goals.
  • Abandoned flag can be picked up by either team. All bots know relative position of the own flag at any moment.
84 85
87 88

You must log in to answer this question.

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