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

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

# Pointfree Generator -- this is a draft.... --

## What is this?

From Wikipedia's page:

Tacit programming, also called point-free style, is a programming paradigm
in which function definitions do not identify the arguments
(or "points") on which they operate


## Challenge

In this challenge, you will have to generate Haskell code in pointfree style. You can provide an answer in any language of your choice as long as it generates Haskell code.

The functions to generate will be polynomial function of multiple variables with integer coefficients like : f : x,y,z -> x^8*y*z + 3*y + 12

for example, the function f : x -> x² + 3x can be written in pointfree Haskell like this (3*)>>=flip((+).(^2)) or (+3)>>=(*)

## Input

The input is a list of list of coefficients and exponants : For example, the f : x,y,z -> x^8*y*z + 3*y + 12 function will be defined as [[1,8,1,1],[3,0,1],[12]]

## Restrictions

Haskell function/operators allowed are the following : (+),(-),(*),(.),(^),flip,(=<<),(>>=)

# Pitchers and Rivers

Credit for the idea for this challenge goes to Dan Garcia of UC Berkeley.

Many of you may have heard of any number of variations on the pitcher problem. For those who haven't, or need a refresher, the generalized form of the pitcher problem is as follows:

Given a list of pitchers of known size and a river filled with infinite water, how can you obtain a specific amount of water?

For a more specific example:

Given a 3-liter pitcher, a 7-liter pitcher, and a river, you can obtain exactly 2 liters as follows:

1. Fill the 3-liter pitcher.

2. Pour the 3-liter pitcher into the 7-liter pitcher.

3. Repeat steps 1 and 2 again twice.

4. If you didn't spill any extra water when filling the 7-liter pitcher the third time, the 3-liter pitcher will now contain 2 liters.

You cannot pour out part of the pitcher unless you can measure how much you poured out by filling something else up, e.g. another pitcher.

Your goal, now, is to determining which amounts of water you can get from your pitchers, given their sizes... but generalized to any number of pitchers.

## Input

You will receive the pitcher sizes in any reasonable format. A (non-exhaustive) list of examples are:

1. A newline-separated list. 5\n13\n532

2. A Pythonic list. [3,7,13,22]

3. Prompt for input, like BF's .[>.]

You do not have to handle invalid input (e.g. negative sizes, empty lists)

## Output

A list of obtainable (measurable) amounts of water, in any reasonable format. You may include 0, but you do not need to. You do not need to list the steps by which you obtain these quantities.

[3,5] -> [1,2,3,4,5,6,7,8]

[3,3] -> [3,6]

[4,6] -> [2,4,6,8,10]

[7, 5, 3, 2] -> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]

[30, 15, 5] -> [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

[5,0] -> [0, 5]

[-1] -> Undefined behavior; sizes are always positive


Reference solution in Pyth, barely golfed (100 bytes)

• I would suggest [4,6] -> [2,4,6,8,10] as another test case. – El'endia Starman Sep 14 '16 at 1:25
• This has been asked before, although it's closed and definitely abandoned. It would be nice to ensure that your spec is compatible with the two existing answers and see whether the mods will merge the old question into the new one. – Peter Taylor Sep 14 '16 at 7:37
• @PeterTaylor The goal of this challenge seems very different from the one linked; that one asks for the list of steps to get a specific target goal and mine asks what target goals are reachable. Also, my question allows for multiple pitchers to be combined in order to get the measurements, while that challenge requires that all the water end up in one pitcher. I believe these are two completely different challenges. – Steven H. Sep 14 '16 at 9:26
• "that one asks for the list of steps to get a specific target goal and mine asks what target goals are reachable" are fundamentally the same thing. The algorithm is identical: the only difference is the output format. "Also, my question allows for multiple pitchers to be combined in order to get the measurements" Does it? I can't see that in the question. – Peter Taylor Sep 14 '16 at 10:06
• The major difference is that mine doesn't require you to compute the steps (as there are characterizations of these lists that do not involve computing individual steps; part of the challenge may be finding these characterizations.) I didn't include anything saying that you may combine the pitchers because, at the time, I hadn't thought that the distinction would need to be made. However, in the sample outputs you can notice that I include values up to the sum of the pitcher sizes, as opposed to up to the maximum pitcher size. – Steven H. Sep 14 '16 at 10:18
• Is the solution just multiples of the gcd up to the sum of the inputs? If not, you need test cases that show this. – xnor Sep 14 '16 at 17:17
• @xnor, to be honest, I don't know for sure. What test cases would you recommend, though? – Steven H. Sep 14 '16 at 17:23
• I'd strongly suggest figuring out a solution or having a reference implementation to generate lots of cases before posting this to avoid disagreements as to whether a submitted solution works. – xnor Sep 14 '16 at 17:33
• @xnor A reference solution has been added. Anything else I should add? – Steven H. Sep 14 '16 at 23:27
• @StevenH. You should add more test cases, especially ones with more inputs, ones that given unexpected results, ones that break the gcd pattern if they exist, etc – xnor Sep 14 '16 at 23:36
• All the examples I tried on the Pyth app follow the gcd pattern. You could try iterating or generate random examples to look for exceptions. I found proofs that it holds for 2 jugs, maybe one can induct the same onto n jugs. (Edit: This paper proves it) If it holds, I think that's unfortunate because it gives a simple direct solution that doesn't require doing anything specific to the bucket problem. Maybe you could require more output. – xnor Sep 14 '16 at 23:45
• @xnor how about mapping all the reachable bucket states to their total amount of water? I'd submit the (slightly modified) Pyth solution as an actual answer in that case. – Steven H. Sep 14 '16 at 23:56
• What mapping do you mean? Could you give an example? – xnor Sep 16 '16 at 3:29
• Unfortunately it seems that someone posted almost the same challenge now (presumably unknowingly). – Martin Ender Sep 22 '16 at 18:14

## Code Golf: Convert to base 6 and back

If given a number, convert it to base 6. You can assume it is positive. You can get the number through any of these methods: STDIN, or ask for user input. If i has a 'o' at the end of it then assume the number is base 6 and convert it to a decimal number. Assume i is a string.

Example: Given i convert it. So if i = 12 then return 20. Given i convert it. so if i = 12o then return 8

• I don't think this really adds anything to the dozens of base-conversion challenges we already have and is likely to be closed as a duplicate of one of the simpler ones. – Martin Ender Sep 17 '16 at 11:49

# Quine and Antiquine

Your task is to make two different program, A and B. Both are nonempty proper quine. However, there is a restriction.

1. AB and BA produce no output.
2. CABD and CBAD will do the same thing as CD, where C and D are any (potentially empty) strings made up of copies of A and B. E.g. ABBABA and ABBBAA should behave identically (here, C = ABB and D = A).

The score is the sum of the length of A and B.

Example:

A program written in DJam:

program A :

abcd


program B :

efgh


Then, these output are sastified

abcdefgh
>> <empty output>
abcdabcdefgh
>> abcd
abcdabcdefghabcdefgh
>> abcd

• Are proper quines required? Do A and B have to be different? – Dennis Sep 16 '16 at 18:40
• "where C and D is any string, if C and D consist entirely of A and B." I don't understand this part, would you mind rephrasing it? – Martin Ender Sep 17 '16 at 11:48
• @MartinEnder Sorry if my English is not good. But I mean string S where S = e | S A | S B where e is empty string. – Xwtek Sep 18 '16 at 7:52

## Periodic Pillbox Problem code-golf

Pill-popping Patty is prescribed to take a particular pharmaceutical every P days. Presently, Phil has punked Patty's pill-box, punching holes in particular weekday's plastic pockets. Patty proceeds to plan pills P days apart whenever possible, but places pills in the preceding day's plastic pocket if the preferred pocket is punctured. Produce a pill planning chart presuming Patty popped her prior pill on the penultimate day of the previous week.

In case it's not clear, this is the kind of pill-box I am referring to.

Input:
The number P, followed by the 1 to 6 weekdays that Phil punctured. Beginning with Sunday(N) the weekdays are N M T W R F S. For instance 5MRF means Patty aims to wait 5 days after each pill, but cannot plan pills on Monday, Thursday, or Friday.

You can have the input with a single space after the number (e.g. 5 MRF) or with spaces after the number and each day (e.g. 5 M R F).

Process:
Given 5MRF Patty's first pill is taken on the first Wednesday (5 days from last Friday). Her second pill should be taken on the second Monday(5 days from the first Wednesday), but is moved up to the second Sunday because Monday is punctured. Her third pill should be taken on the second Friday(5 days from Sunday, not Monday), but is moved up to the second Wednesday because Friday and Thursday are both punctured. She continues in this manner indefinitely.

Note on the first week Patty's pillbox contains one pill on Wednesday, on the second and future weeks it contains pills on Sunday and Wednesday.

Output:
The pill planning chart shall indicate the state of Patty's pill-box each week, one week per line. Days she does not take her pill must have a dot ·. Days she takes her pill must have a capital X. The chart must stop as soon as the cycle occurs (i.e. in the fewest lines possible) with an arrow > pointing the first week in the cycle on the left. All weekdays must align in singly spaced columns with Sunday on the left.

Notes:
You may assume Phil was not malicious enough to puncture P consecutive days of the weeks, and that P is between 2 and 7 inclusive.

If Patty can't take her pill on the first Sunday, she takes it on the previous Saturday. Her pillbox was not damaged last week.

A cycle has occurred when pills are being taken on the same weekdays as in an earlier week.

Patty never waits more than P days to take her pill.

Testcase 1: 5MRF

  · · · X · · ·
> X · · X · · ·


Testcase 2: 5MR

> · · · X · · ·
X · · · · X ·


Testcase 3: 5MF

  · · · X · · ·
> X · · · X · ·
· · X · · · ·


Testcase 4: 6NTFS

  · · · · X · ·
> · · · X · · ·
· X · · X · ·


A reference solution in C++ is provided here.

For The Sandbox...
First Challenge. Hooray! My biggest concern is whether or not there is anything with a similar process, I'm not sure if there is a generalization or a name for this sort of elimination thing. Barring that, is a good golfing question, can it be made a better golfing question, is clear what has to be done, etc. Really any advice is welcome.

• 1. "For instance 5MRF means Patty aims to wait 5 days after each pill, but cannot plan pills on Monday, Thursday, or Friday." So what does that mean in terms of the actual days in which she takes the pill? I think that she ends up taking them too frequently rather than averaging out in the long-term, but I had to try to figure that out by reverse engineering the test cases. 2. "followed by the 1 to 6 weekdays that Phil punctured ... P is between 2 and 7 inclusive" seems contradictory. – Peter Taylor Sep 21 '16 at 10:54
• @PeteTaylor, Okay... I've added a plain English example of the process. Yes, Patty takes her pills too often. To point 2, I don't see the contradiction, P is the days she waits to take a pill, not how many days Phil punchs. Her process would never work with say 1W, or 7NMTWRFS. – Linus Sep 21 '16 at 16:02

# Checkmate (aka the urinal problem) V2

inspired by Checkmate (aka the urinal problem)

given a non-negative integer n, assume there are n urinals.

also assume that you are not allowed to use an urinal when

• it is out of order.
• or a neighboring urinal is occupied.

If no urinal is available, the situation is considered checkmate.

Challenge:

Create a program or function that finds and prints (or returns, or yields) all possible checkmate combinations for n urinals.

Input: STDIN, command line argument or function argument

Output: Any output that makes the combinations clear is accepted.

TODO: add visual and test cases.

a thought:
This cries for string operations; how about a bonus for a calculational solution? Do bonuses suck?

• You say "out of order" but then don't mention it again. How does that change things and how is it given in input (if it is)? – Geobits Sep 21 '16 at 20:12
• @Geobits I hope the edit clarifies. – Titus Sep 21 '16 at 20:20
• Yes, bonuses suck. – m-chrzan Sep 22 '16 at 2:26
• Do you have a reference implementation? Have you checked for the sequence on OEIS? (I ask the second question because once I saw the OEIS page for yesterday's urinal challenge I was tempted to vote to close as a dupe of a Fibonacci question because the sequence was so similar). – Peter Taylor Sep 22 '16 at 17:17
• @PeterTaylor: not yet. and: I don´t even know OEIS. Why should I check it? – Titus Sep 22 '16 at 18:36
• The Online Encyclopaedia of Integer Sequences is the biggest repository of integer sequences that I know of. Whenever an integer sequence question is asked, people will look there for formulae. Now: having re-read this question and on the assumption that any number of urinals can be out of order, this is asking for sequences of length n over the alphabet 01 avoiding the substring 11. They're counted by the Fibonacci numbers, so there's a good chance that there's an earlier question close enough to be a duplicate. – Peter Taylor Sep 22 '16 at 20:38
• I believe f(n) = f(n-1) + 3f(n-2) + 2f(n-3), with some boundary conditions. – m-chrzan Sep 22 '16 at 21:01

Compute The anti-derivative of a non-constant function

Most of us know how anti derivatives work. They are basically the sums of infinite number of very small elements (or units).

The challenge here is to calculate anti derivative of a function (NON CONSTANT). using any programming language except the ones which calculate anti derivatives directly (Mathematica for instance).

Anti derivatives which have been calculated must be done by the usual summation method which is basically the definition of the integral. Summation of y.dx over some interval of x)

You basically have to find the anti derivative WITH limits i.e. definite integral of a non constant function in between two user specified limits

• As it stands this would get closed very quickly as "Unclear what you're asking". Even at the very basic level of whether you want symbolic or numeric integration, there are hints pulling in opposite directions. Either way, you need a specification of the input format; if you want quadrature you need to specify constraints on the rule; and you need to avoid duplicating codegolf.stackexchange.com/q/2072/194 and codegolf.stackexchange.com/q/66714/194 – Peter Taylor Sep 23 '16 at 20:06
• I though the challenge is about finding a sybolic anti-derivative, not a numeric definite integral. – Vi. Sep 24 '16 at 6:33

Your boss wants you to make a comprehensive download utility. She uses Microsoft Bob and thinks shorter code is better code.

The Gist: In as few bytes as possible, given an input URL, output the file to stdout.

### Input

• You will be given a fully qualified (w/ http/https) URL.
• Any non 2xx-3xx status code should be interpreted as an error. Exit with a status code of zero.
• Verify SSL certificates - exit with 0 if invalid

### Misc

• Do not use a preexisting utility already designed for downloading files, such as wget. This is considered cheating.
• I'd consider this a chameleon challenge. Validating an SSL certificate is harder than all other parts combined. It also needs some clarification. Which SSL certificates are considered valid? – Dennis Sep 25 '16 at 17:32
• @Dennis hm, libraries should exist... – noɥʇʎԀʎzɐɹƆ Sep 25 '16 at 18:03
• 1. For those languages which do have SSL libraries (which isn't all of them), there are often options. E.g. there could be an option to accept or reject self-signed certs. There could be an option to accept or reject certs whose chain includes MD5 or key sizes smaller than 256 bits. Those options may vary between libraries or distros. So Dennis is right to ask for a clear definition of "valid". 2. What's the distinction between libraries which do that level of checking and "a preexisting utility"? – Peter Taylor Sep 25 '16 at 21:41
• Someone might download a virus... – Erik the Outgolfer Sep 28 '16 at 12:42

# Handwriting Recognition

The MNIST dataset is a series of handwritten digits used as a standard testbed for machine learning, pattern recognition techniques. Each image is of a single digit, 0-9; as a 28x28 pixel grayscale matrix with values from 0-255.

The challenge is to create a classifier for MNIST that scores an Error Rate of less than [TBD] in the least number of bytes possible.

Your program must take a 28x28 2d array in whatever format is applicable for your language representing a single image. For example, the input for the first digit might be:

[[  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],
[  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],
[  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,  3, 18, 18, 18,126,136,175, 26,166,255,247,127,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0, 30, 36, 94,154,170,253,253,253,253,253,225,172,253,242,195, 64,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0, 49,238,253,253,253,253,253,253,253,253,251, 93, 82, 82, 56, 39,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0, 18,219,253,253,253,253,253,198,182,247,241,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0, 80,156,107,253,253,205, 11,  0, 43,154,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,  1,154,253, 90,  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,139,253,190,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11,190,253, 70,  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, 35,241,225,160,108,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 81,240,253,253,119, 25,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 45,186,253,253,150, 27,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 93,252,253,187,  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,249,253,249, 64,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 46,130,183,253,253,207,  2,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 39,148,229,253,253,253,250,182,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,114,221,253,253,253,253,201, 78,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0,  0,  0, 23, 66,213,253,253,253,253,198, 81,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,  0,  0, 18,171,219,253,253,253,253,195, 80,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0, 55,172,226,253,253,253,253,244,133, 11,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
[  0,  0,  0,  0,136,253,253,253,212,135,132, 16,  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,  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]]


## Conditions:

• This is code golf. The shortest piece of code that meets the criteria wins.
• The code must take a provided 28x28 input and attempt to classify it.
• Testing will take place on my computer at 12pm AEST on Saturday the . I will run each classifier over a set of 1000 images. To be considered, it must correctly classify [TBD] of them. If I can't get your code to run, it wont be counted, so help with loading the images in your language would be appreciated.
• Standard loopholes are not permitted.

# Questions for Sandbox

• Overall thoughts on the challenge?
• Has anything been done like this before? Did it work?
• Any ideas on a good cutoff for the classifier? I was thinking around 60% correct. Though was going to have a go at it myself to see what I could reasonably achieve.
• Does the testing clause make sense? Is it reasonable? Should I put a limit on the languages?
• Since barrier to entry is a bit high (knowing how to get hold of the images, possibly some ML experience), is there anything extra I should do to make it easier to start the challenge.
• This is my first suggestion for a challenge, is there anything I'm missing?
• I actually found a very similar question from back in 2014 (using MNIST). It had a different scoring system and some slightly different criteria and expectations. Is this still worth it? Is it late enough for others to have another go? – SCB Sep 26 '16 at 3:36
• I don't think it's sufficiently different. If you want to provoke others to have another go, you can do so in the chat or by placing a bounty on the existing question. – Peter Taylor Sep 26 '16 at 13:44
• 60% correct is way too leniant; current state-of-the-art techniques on this dataset "easily" reach 99+% of correct classification. – Fatalize Sep 28 '16 at 11:48
• Unrelated, but I would like to congratulate you on submitting the 3000th answer to the Sandbox! (That number includes all deleted submissions.) – PhiNotPi Sep 28 '16 at 15:12
• @Fatalize I was thinking 60% because I wanted the emphasis to be on the code-golfing, not the machine learning. If it's lenient enough I'm hoping someone can figure out some really, really simple way that would just scrape in. All in the spirit of code golf. – SCB Sep 28 '16 at 23:02
• @PeterTaylor I was hoping that the idea of a hard limit would switch the challenge around so it's not focused on building a function that works well, but instead building a very short function that works, barely. In the original a slight improvement in code length that decreased the correct matches would be bad, whereas in this challenge decreasing the code length is always good, as long as you still sit above [TBD] correct images. – SCB Sep 28 '16 at 23:09

# Gif - Jif, Jif - Gif

The point of this challenge is to (not) settle debate on the pronunciation of "gif" http://38.media.tumblr.com/11bc6092d29c8c6840f9e10184ca03fd/tumblr_mlksz8SLjn1qz4h3co1_1280.gif

The pronunciation of gif is debated and while it's supposed to be (and should be) pronounced jif, it's still commonly disputed.

In this challenge you will be given a set of words that have a g or j, representing the sound that the word is pronounced with. You'll also get some text in which you have to fix the incorrect spellings of gif.

Because this is the internet and everyone always wrong. It's (not) common courtesy to correct them.

An example of a wrong pronunciation would be:

There was a gif of a mouse eating a burrito

The wrong spelling of gif? Unacceptable! This must be corrected immediately:

There was a jif (as in jar) of a mouse eating a burrito

Are we done? Nope, you're still wrong.

This must work the other way:

In the jif the cat wore a hat of a cat

This obvious misspelling must be fixed, we shall correct this to:

In the gif (as in graphic) the cat wore a hat of a cat

### Rules

• You may assume all words that contain the letter g have the hard g sound (as in gravy) and all words that contain the letter j have the j sound (as in jam)
• Words will never have both g and j (Will add more specific rules later)
• Words must be picked at random each item with the same chance of being picked
• Words may be supplied through an array or the closest alternative for your language.
• Case must be preserved E.g. GiF -> JiF.
• You may write a program or a function

### Examples

Input and output separated by a single line:

graphic, jar, jam, gram
I saw a jif of how to pronounce gif that showed gif is pronounced jif

I saw a gif (as in graphic) of how to pronounce jif (as in jar) that showed jif (as in jam) is pronounced gif (as in gram)


gravy, jeff
G is for gif, h is for jif, i is for gif, j if for jif

G is for jif (as in jeff), h is for gif (as in gravy), i is for jif (as in jeff), j is for gif (as in gravy)

• Is the assumption that, if there's more gif/jifs than input words, that you cycle through the g and j words independently (i.e. for gravy, jar, jam, gram, you cycle through gravy, gram for jif and jar, jam for gif)? And do we have do anything special for soft g words, e.g. generate? – Sp3000 Oct 23 '15 at 12:28
• @Sp3000 forgot to specify that. I've made it so all words containing "g" are the hard g sound – Downgoat Oct 23 '15 at 22:49
• "Words must be picked at random" from what source? – Peter Taylor Oct 24 '15 at 8:49
• Has this challenge been posted? If not, may I take control of it? – Neil A. Jun 5 '17 at 23:09
• @NeilA. You may but I don't think it'll be well received because it's a simple find/replace – Downgoat Jun 6 '17 at 21:47
• @Downgoat: I will make a new answer with the same core idea but a few changes. Feel free to delete this if you wish. – Neil A. Jun 6 '17 at 21:52

## Largest Number Given Digits and Operators

Challenge

Given a list of digits (0-9) and operators (+, -, /, *), output the largest number that can be formed using those digits and operators, as well as the mathematical formula used to create this number.

Rules

• All digits and operators must be used once and only once
• Parenthesis may be used in the outputted mathematical formula
• The outputted mathematical formula must be valid in an interactive Python shell (Note, this means ["--", "---", etc.], "//", "**", and ["++", "+++", etc.] are all valid operations that can be used in the output)
• Base 10 will be used
• For multiple different formulas that result in the same maximum number, output whichever one
• Input may contain any number of digits and operators
• Answers can be a function or program, and will be scored in bytes
• No loopholes or built-ins

Example I/O

Input: [1, 4, 3, *, +]
Output: +31*4
124

Input: [1, 2, 0, '+']
Output: +210
210

• won't all pluses be at the front of the output? – Destructible Lemon Sep 28 '16 at 2:30
• This is rather similar to a number of existing questions, and may be closed as a duplicate. If you want to try to get it ready to post regardless, the use of the word "operators" in the first sentence is misleading given the later reference to combining those characters to form operators like **; and the question needs a complete list of permitted operators and what they do. People shouldn't have to find a Python language reference to know what // means, for instance. – Peter Taylor Sep 28 '16 at 8:47
• – Simply Beautiful Art Jul 31 '17 at 23:22

# The one-looper ASCII box

### Intro

I saw this one in one of my university programming textbooks as an "advanced" exercise and I thought it would fit very well here.

Your program have to ask for an input number and draw a box with the size of the given number and a cross in it.
Example if the number is 7:

+-------+
|\     /|
| \   / |
|  \ /  |
|   X   |
|  / \  |
| /   \ |
|/     \|
+-------+


Example if the number is 10:

+----------+
|\        /|
| \      / |
|  \    /  |
|   \  /   |
|    \/    |
|    /\    |
|   /  \   |
|  /    \  |
| /      \ |
|/        \|
+----------+


The minimum width is 1 and it looks like this:

+-+
|X|
+-+


Notice that with an odd size, there is an X in the middle.

### The hard part

In your program only one function is allowed (main) and in the main function there can be only one loop and that loop can only have one statement which can't be if. The shortest answer wins!

note: Sorry for the messy description but I had to translate it from my native language.

• I'd recommend removing the "C-only" part. – wizzwizz4 Sep 29 '16 at 18:23
• Language specific challenges are discouraged, as per meta.codegolf.stackexchange.com/a/8058/48538. Good luck. – user48538 Sep 29 '16 at 18:27
• do X without Y is confusing, especially when some internal things in languages use loops to achieve certain functionallity – downrep_nation Sep 29 '16 at 20:42

## Interpret loose ranges code-golf

ListSharp is an interpreted programming language that has many features, one of those features is a 1 index based range creator that works like this:

You define a range as (INT) TO (INT) or just (INT) where both or the single int can go from min to max int32 value

Then you can use those ranges to extract elements of an array without fearing to overstep it's boundaries

therefore:

1 TO 5 generates: {1,2,3,4,5}

3 generates: {3}

Ranges can be added up using the AND operator

1 TO 5 AND 3 TO 6 generates: {1,2,3,4,5,3,4,5,6}

remember this works with negative numbers as well

3 TO -3 generates: {3,2,1,0,-1,-2,-3}

# The challenge is the following:

## Input

A character array and the previously defined range clause as a string

## Output

The elements at the 1 index based locations of the range (non existing/negative indexes translate to an empty character)

# How to win

Create the program with the shortest byte count

## Test cases:

input array is:
{'H','e','l','l','o',' ','W','o','r','l','d'}

range clause:
"1 TO 3" => {'H','e','l'}
"5" => {'o'}
"-10 TO 10" => {'','','','','','','','','','','','H','e','l','l','o',' ','W','o','r','l'}
"0 AND 2 AND 4" => {'','e','l'}
"8 TO 3" => {'o','W','','o','l','l'}
"-300 AND 300" => {'',''}

• What is the winning criterion? – acrolith Sep 29 '16 at 20:49
• correct, i forgot that! its code-golf and i dont know how to add the tag – downrep_nation Sep 29 '16 at 20:50
• You can place [tag:code-golf] near the title. – acrolith Sep 29 '16 at 20:51

## Balanced Columns

I have a number of paragraphs of various heights which I would like to be distributed between some columns as evenly as possible. Here evenly means that you should minimise the total height of the tallest column, and then maximise the height of the shortest column, excluding empty columns.

The input will be an integer, representing the number of columns to be output, and an array of integers, representing the paragraph heights in lines. There is more than one way to represent the output; it could be an array (one for each column) of arrays of paragraphs, or it could be an array (one for each paragraph) of columns. (Please indicate whether your arrays are 0- or 1-based.) You may use any convenient format for (e.g. the number of columns as a command-line parameter and the array on STDIN) for I/O.

Because the paragraphs are double-spaced, there will be at least two lines in each paragraph, but if you prefer, your answer can take the double-spacing into account internally.

Within each column, paragraphs should be listed in ascending order, and the columns should be listed in ascending order of their first paragraph. Examples:

2, [2, 3, 4, 5, 6] -> [2, 3, 5], [4, 6] or [0, 0, 1, 0, 1]
3, [2, 3, 4, 5, 6] -> [2, 5], [3, 4], [6] or [0, 1, 1, 0, 2]
4, [2, 3, 4, 5, 6] -> [2, 3], [4], [5], [6] or [0, 0, 1, 2, 3]
5, [2, 3, 4, 5, 6] -> [2, 3], [4], [5], [6] or [0, 0, 1, 2, 3]


Note that in the last example the height could not be reduced by adding the extra column so in this case only four columns could be utilised.

• If it's not a requirement to use every column (as indicated by your last example), that should be called out explicitly rather than inferred. – AdmBorkBork Sep 30 '16 at 14:02
• @TimmyD "maximise the height of the shortest column, excluding empty columns" not explicit enough for you? – Neil Sep 30 '16 at 17:25
• Yeah, as I didn't understand that to mean that I could optionally choose to have empty columns if it made the output more even. Maybe "explicit" wasn't the right word in my comment, but it could be more clear. – AdmBorkBork Sep 30 '16 at 17:57

No, this challenge is not this

## Where is my error?

My compiler has broken down and now it is only showing the index of the character which the error is on.

In this challenge you will write a program to point to the given character.

## Examples

Input:

if (goat == Downgoat) {
print(Downgoat));
}

43


Output:

1 | if (goat == Downgoat) {
2 |     print(Downgoat));
|                    ^
3 | }


## Spec

TODO

• I was going to suggest giving an {x, y} pair as input, but that would make the challenge substantially easier. – ETHproductions Sep 30 '16 at 22:40
• What if there are more than ten lines? – Conor O'Brien Oct 5 '16 at 1:14

# Is this Rubik's Cube Solvable?

The challenge: find out if a rubik's cube configuration is solvable.

Takes input as a multidimensional array. An example for a solved cube would be

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


starting on the sides, going round, then top, then bottom. This input would give an output of 1, since it is solvable (very, very solvable). A (small) net of this solved cube would therefore be:

     _
_ _|4|_
|0|1|2|3|
¯ ¯|5|¯
¯


The result of the program should be a truthy/falsey value, printed to STDOUT or similar. This is code-golf, so shortest answer in BYTES wins. Standard loopholes apply.

• What is the winning criterion? – acrolith Oct 12 '16 at 17:16
• shortest code. I'll add code-golf as a tag now. – Geno Racklin Asher Oct 12 '16 at 17:20
• I think you've got an extra 2 side in your example. – AdmBorkBork Oct 12 '16 at 17:55
• whoops. Thanks for pointing that out. I will add some test cases soon. – Geno Racklin Asher Oct 12 '16 at 17:57
• Add for people less familiar with the cube group that it has 12 = 2 * 2 * 3 orbits, 2 because you can't only exchange edges, 2 because you can't only flip an edge and 3 because you can't only turn a corner – Ton Hospel Oct 12 '16 at 22:25
• codegolf.stackexchange.com/q/10768/194 . There's no fundamental difference between solving it and testing whether it can be solved. – Peter Taylor Oct 13 '16 at 7:21
• @PeterTaylor I'd say there is a big difference. Trying to solve a cube is pointless if it's impossible to begin with. This is about spotting which cubes have been tampered with. – Geno Racklin Asher Oct 13 '16 at 9:27
• Do you have a reference implementation which uses an approach other than trying to solve it and seeing whether you get stuck? (Also, if it is possible to do it without solving, I strongly recommend trying to find a way to prohibit brute-force solving, because that can be very short). – Peter Taylor Oct 13 '16 at 10:01
• Not yet, but I'm working on it – Geno Racklin Asher Oct 13 '16 at 12:52

Image Smoothing

Input into your program a black and white image. (png, jpg, etc)

Convert the image to a 2-d matrix of pixels. Where each index is the grayscale value of the image.

Take each index of the matrix and average the 8 pixels around it. Then replace that index with the average.

120 80  60
20  10  30
40  100 05


If you were finding the average for 10, the result would be 56.875. Round to up to the nearest integer (57) and replace the index. The result of this iteration would be

120 80  60
20  57  30
40  100 05


If you are finding the average for a pixel on an edge then only take values that are valid. In the example above if you were finding the average for '20' You would only consider 112, 80, 57, 100, and 40, which is 79.4 rounded to 80.

You may start at any index of the graph but it must be in order, for example of you must go right - left, left - right, up - down, or down - up. You may not go something like randomly pick the indices to average.

Once the averaging is complete, convert the matrix back into a new image.

display the new image as the output of the program. (Or save it and add it in your solution). The result of this process should be a normal crisp looking image and the result would be a smoothed out image.

Please provide your code and start and end image (SFW please) and remember this is code-golf so the shortest code wins!

Good Luck and have fun!

# Implement BozoCrack

Designed to show why MD5 is a bad solution to password hashing, BozoCrack, for the uninitiated, is a rather simple and efficient method of cracking MD5 hashes. It doesn't brute force, use rainbow tables or indeed, any sort of math at all.

Instead, it finds the key by searching google for the hash and comparing the hash of each word in the results with the input.

Your task is simple: given at least one valid MD5 hash in a reasonable input format, find their source texts using Google and return or print to stdout the results.

In fact, you could probably arrive at the answer by finding the word in the page with the most occurrences -- you needn't use the results for a dictionary attack, but you must use Google.

The inputs can be given as an array of strings, as program arguments, space or otherwise delimited strings on standard input or in a file, etc -- whatever's easier for you, but make sure you specify in your answer how the input is taken.

Example inputs / outputs:

Input                            : Output
fcf1eed8596699624167416a1e7e122e : octopus
d0763edaa9d9bd2a9516280e9044d885 : monkey
dfd8c10c1b9b58c8bf102225ae3be9eb : 12081977
ede6b50e7b5826fe48fc1f0fe772c48f : 1q2w3e4r5t6y


Of course, you may use your language's library function for computing the md5sum of a string -- but please, don't use any functions or libraries designed to solve exactly this task, e.g. Python's PyBozoCrack and the original BozoCrack.rb are disallowed.

• Nitpicking: 1. There's nothing special about MD5 here. Using any hash function without a salt has the same problem. 2. It sorta does use rainbow tables, just not locally stored ones. – Dennis Oct 18 '16 at 16:46
• @Dennis The github description says Instead of rainbow tables, dictionaries, or brute force,.., which is even more incorrect, so I made it a little less wrong :) It does work for any hash algo but it works best for MD5 – cat Oct 18 '16 at 17:02

# AlphaGo..olf?

(Slight paraphrased) Extract from Wikipedia:

AlphaGo is a computer program developed by Google DeepMind in London to play the board game Go and is the first computer Go program has beaten a 9-dan professional without handicaps.

In order to appreciate the Go art more, let's try to simulate what happens to the game when a move is made!

## Input

The input will be:

1. a 4x4 board, (Here . denotes empty, o and x denotes different color of stones held by the 2 players respectively for illustration. Any standard input formats (2d array, array as sequence of alternative moves...) are welcomed as we like nice algorithms!)

2. a move to be made (Like A4, B2. You may also like to use 0-indexed and both numeric indices like (0,0)..(3,3)) For simplicity's sake, the move to be made is always with o (i.e. always the same color).

## Output

The board after the move is made. Stones of the opposite color (i.e. x) will be taken away iff there are no more connected x that has at least 1 . in its 4-neighbor (Up, Down, Left, Right).

## Examples

  Input | Move | Output
ABCD  |      |
1 ....  | A1   | o...   (case 1: all stones remains on board)
2 ....  |      | ....
3 ..x.  |      | ..x.
4 ....  |      | ....
--------+------+--------
....  | B1   | .o..
oxo.  |      | o.o.   (case 2: x taken away: the only . is taken)
.ox.  |      | .ox.
....  |      | ....
--------+------+--------
..o.  | B1   | .oo.
oxxo  |      | o..o   (case 3: >1 x taken away: the only . is taken)
.oxo  |      | .o.o
.xo.  |      | .xo.
--------+------+--------
o.xo  | B1   | oo.o
..o.  |      | ..o.   (case 4: Edge case)
....  |      | ....
..o.  |      | ..o.
--------+------+--------
x.o.  | B1   | .oo.
ooxo  |      | ooxo   (case 5: Corner case)
...o  |      | ...o
..o.  |      | ..o.
--------+------+--------
xxxx  | B2   | ....
x.xx  |      | .o..   (case 6: Enclosed by Board case)
xxxx  |      | ....
xxxx  |      | ....
--------+------+--------
.oxx  | C2   | .o..
ox.x  |      | o.o.   (case 7: Enclosed by o case)
oxxx  |      | o...
.ooo  |      | .ooo
--------+------+--------
.xo.  | A1   | o.o.
xo..  |      | .o..   (case 8: taking multiple groups case)
o...  |      | o...
....  |      | ....
--------+------+--------


# Rules

1. This is thus the shortest code wins.
2. Please kindly provide explanations and ways to test the solutions!
3. The Input board can be assumed to be correct: there will be neither x that without a connected x with ., nor a group of o surrounded by x without .
4. The Input move can be assumed to be legitimate: either it won't be a position surrounded by x, or it must take away some x to free . for the o to live. (ref. case 6, 7, 8)
5. The output must be the board, it may or may not be in the same format as the input (if you take input as 2 arrays of o and x positions, say). Output that only shows the stones that are taken away after the move is made will not be accepted.
6. Again, feel free to play with the standard input formats. Hope to see interesting 1 and 0 playing Go instead of o and x :P

# Meta Questions

1. I don't know if this may be too hard. Would it be better if I allow golfers to fail some test cases and get penalty instead?
2. Should I stick with a 4x4 board or I can award minus scores if the solution can work with a 19x19 board?
3. If it is a yes to any of the above questions, which should be the number for the penalty / award?

Thanks!

• If it can work with a 4x4 board it's probably scalable. I don't see any reason to have both; 4x4 seems less daunting, but 19x19 would be more satisfying to program for, even if it is pretty much the same thing. – wizzwizz4 Oct 18 '16 at 17:42
• The explanation of what exactly the program should do is rather poor. I think I can work it out, but only because I've played Go in the past. IMO the question would be greatly improved by removing the current introduction and replacing it with an explanation of liberties (which in essence is half of the rules of Go, isn't it? That plus ko). As far as size, don't do bonuses; just require answers to handle a board of any rectangular size, with a guarantee that each line is the same length. Or maybe make each dimension at least two. Then add test cases to cover the minima. – Peter Taylor Oct 19 '16 at 11:52

# Categorize the asymptotic behavior of a consumer/producer system

Given two functions P(t) and C(t), output the correct category for the behavior of P(t)-C(t) as t goes to positive infinity:

1. Ideal: P(t)-C(t) goes to 0.
2. Stable: P(t)-C(t) oscillates, with the time spent as a positive value equal to the time spent as a negative value within a single oscillation period.
3. Hungry: P(t)-C(t) either converges to a negative value, or oscillates, with more negative values than positive values in one oscillation period.
4. Starved: P(t)-C(t) diverges, approaching negative infinity.
5. Saturated: P(t)-C(t) either converges to a positive value, or oscillates, with more positive values than negative values in one oscillation period.
6. Oversaturated: P(t)-C(t) diverges, approaching positive infinity.

## Rules

• The expected output will always be one of the above cases - you don't have to worry about other cases
• P(t) and C(t) will always be real-valued continuous functions that only consist of the following operations: addition, subtraction, multiplication, division, exponentiation (for constants a and b and parameter t, a^b, t^a, and a^t are all allowed), principal roots (real roots, only when they exist, and only the positive root when there are 2 real roots), logarithms, and basic trigonometric functions (sine and cosine of arbitrary values, and tangent for values that are not odd multiples of pi/2)
• Input may be in any reasonably format (string, function object/pointer, mathematical function object, etc.)
• You may use any unambiguous set of 6 values for output (like [1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 4, 5], [Ideal, Stable, Hungry, Starved, Saturated, Oversaturated], or [0, ~, -, -∞, +, +∞])

TBD

## Sandbox Notes

• Are the definitions and rules clear?
• Are there any I/O methods that should be explicitly allowed or forbidden that aren't covered by the current rules?
• I suspect that this is extraordinarily difficult and possibly formally undecidable. See Richardson's Theorem. – xnor Oct 20 '16 at 4:22
• @xnor Richardson's Theorem only applies to finding zeroes of functions and deciding if two functions are equal everywhere. It doesn't have anything to do with asymptotic behavior. As for the challenge being extraordinarily difficult - it's not meant to be an easy challenge. – user45941 Oct 20 '16 at 4:55
• Actually, I can prove it's undecidable. Let A be an elementary function for which you want to decide whether it is everywhere 0, in contradiction of Richardson's theorem. Then, A(e^t * sin(t)) goes to 0 as t->∞ if and only A is identically 0. This is because any x for which A(x) is nonzero would correspond to an infinite number of t with x=e^t*sin(t), causing the limit to be nonzero. So, by running an algorithm for your problem and checking whether it outputs (1) or not, we'd be able to solve an undecidable problem. – xnor Oct 20 '16 at 5:18
• @xnor Good catch, I didn't consider that. Would it be possible to limit the types of functions such that it would be deciable, and all of the cases would be possible? – user45941 Oct 20 '16 at 5:44
• I don't think so. Without sin or cos, you can't get oscillation, but that's basically enough for the undecidability to apply. – xnor Oct 20 '16 at 5:46
• @xnor Shame. I think I'll rewrite this using discrete functions, in a manner so it is decidable. – user45941 Oct 20 '16 at 5:48

(Need a title.)

Your task is to write 3 programs (or functions) that check if the input is a string of balanced brackets satisfying all the following criteria:

• The number of []s is always less than or equal to the number of ()s surrounding each position.
• The number of {}s is always less than or equal to the sum of the numbers of ()s and []s surrounding each position.
• The number of <>s is always less than or equal to the product of the number of () [] and {}s surrounding each position.

You can assume that:

• There are only the characters ()[] in the input of your program 1.
• There are only the characters ()[]{} in the input of your program 2.
• There are only the characters ()[]{}<> in the input of your program 3.

Your score is the product of (the length of each program + 1). Lowest score wins.

## Examples

(To do.)

• I don't understand the first tie-breaker. What is a "program number"? – Peter Taylor Oct 19 '16 at 14:13
• @PeterTaylor: You can choose to make up to 3 programs. Program 1 handles 2 bracket-types, Program 2 handles 3 bracket-types and Program 3 handles 4 bracket-types. If person A has made programs 1 and 2 and person B has made programs 2 and 3. Person B wins the tie-breaker as his program numbers (3,2) are higher (and thus more advanced). – Emigna Oct 20 '16 at 9:46
• If Emigna is correct that this is a task where you can choose to not do the hardest two thirds of it, then that's stupid. I had assumed that the "up to three programs" was to allow people to write a single program to maximise code reuse between the three subtasks, not to allow skipping the subtasks entirely. – Peter Taylor Oct 20 '16 at 10:21
• In any case, the first 2 tie-breakers is unlikely to see use as I'm sure someone will do all 3 and then only the program lengths will determine the score. – Emigna Oct 20 '16 at 10:47
• Yes, removed that part. – jimmy23013 Oct 21 '16 at 7:24

# Quine tree

Inspired by that really weird quine challenge

For this challenge, you must construct a quine tree, which is a thing I made up, specifically an infinite binary tree.

How a quine tree works:

A quine tree has infinite nodes.

• Each node is associated with a program

• Let X, Y, Z, be the programming languages. This program is a polyglot in X and Y. In all but the root node, it is also a polyglot in Z. Note the

• see below for more details

• Each node has exactly two children

• Every node but the root has a parent. Their parent has the node as a child (obviously).

Programs:

• When a node's program is run in X, it produces the program of the first child of that node.
• When run in Y, it produces the program of the second child of that node.
• The programs produced must be different (node foo's program, cannot have the same output in X and Y. This output must also be different than the nodes program).
• If not the root node, when run in Z, it produces the parent of the node.

## Example

Imagine that we have the (fake) programming languages Hello, World, and Foobaz. Say the root node is $QQ$QQ$;: • when run in Hello, perhaps it produces $QQ$QQ$;;
• When this is run with Hello again, perhaps produces $QQ$QQ$;;; • When this is run with World, perhaps produces $QQ$QQ$;;Q
• Both these programs must produce, run in Foobaz, $QQ$QQ$;; (Output of root node run in Hello) • when run in World, perhaps it produces $QQ$QQ$;Q
• When this is run with Hello, perhaps produces $QQ$QQ$;Q; • When this is run with World again, perhaps produces $QQ$QQ$;QQ
• Both these programs must produce, run in Foobaz, $QQ$QQ$;Q (Output of root node run in World) • Both these programs, run in Foobaz, must produce $QQ$QQ$; (root program).
• This seems like a really interesting challenge. I'm not sure how possible it is, though! Substitution languages like /// might be easiest to solve this in. – wizzwizz4 May 27 '17 at 8:20

# Fastest Cashier in the West

You're trying to design an automatic cashier that is able to dispense the correct amount of change in any denominations as quickly as possible. Your goal is to implement a program that accepts a target integer T ≥ 0 which is the amount you're trying to make change for, and a set of positive integers {c1, c2, ..., cn} which are the values of each coin where you have an infinite number of each, and output all possible solutions for making change with those types of coins.

For example, if you're trying to make change for 123 and the coins available are {12, 16, 20, 27}, then there are 8 possible solutions

12 16 20 27  (123)
0  1  4  1  means zero 12's, one 16, four 20's, one 27
also 0*12 + 1*16 + 4*20 + 1*27 = 123
0  6  0  1
1  4  1  1
2  2  2  1
3  0  3  1
4  3  0  1
5  1  1  1
8  0  0  1


## Format

The input will be formatted as

T
N
c1
c2
...
cN


where T is the target value, N is the number of coins, and each cK is the value of coin k. Also, the coins will be listed in ascending order.

For example,

123
4
12
16
20
27


The output will be format as

x11 x12 ... x1N
x21 x22 ... x2N
...
xM1 xM2 ... xMN


where M is the number of solutions and N is the number of coins. Each line will contain the number of each coin needed to reach the target value separated by spaces. You may have trailing whitespace on each line.

For example, the output to the input above would be

0 1 4 1
0 6 0 1
1 4 1 1
2 2 2 1
3 0 3 1
4 3 0 1
5 1 1 1
8 0 0 1


You may output the solutions on each line in any order, but each solution must be unique.

## Rules

• This is so your only goal is to make your program as fast as possible.
• Builtins or libraries that solve this problem directly are not allowed.
• In the interests of having fine submissions, the deadline will be by December 12, 2016, which is almost two months.
• Your program must be single-threaded. However, you are allowed to use SIMD instructions and any other features of the CPU.
• The code will be ran on my machine which uses Fedora 24 x64 and has an i7-920 with 18 GB of memory.
• Please provide compilation instructions and version information if your program requires it.
• Please do not obfuscate your code unnecessarily. If I am suspicious of certain code and/or libraries, I reserve the right to ignore your submission.
• This is optional but if you are using advanced mathematical strategies, commenting and explaining your program would be very much appreciated.

## Thoughts

The test cases will be created and provided as a download if there is interest.

For scoring, there will be a hidden dataset that is ran when the deadline is reached for final scoring purposes. After this is complete, the hidden dataset will be released along with the winner.

For extra incentive, should I increase the best answer reward by including a bounty. Or maybe for the three fastest?

Is it okay to ban commercial products as I may not have access to some of them. It wouldn't be fair to allow Mathematica and not Matlab/Maple/etc.

@PeterTaylor: I have an implementation in Python that uses a memoized recursive function and I would say its performance is decent at best. I do agree that I/O could be a bottleneck but I could choose test cases that have few or no solutions. Using methods to calculate the Frobenius number would help find those, but I would still like to see a few cases with a large number of solutions. I see two options. First, I could require the output to be ordered so that results could be piped into another program and avoid hitting the disk while being verified. The second is to test each program twice, first with the output enabled to check the accuracy, and if accurate, the second run would be with the output disabled to measure the execution time.

• Have you written and profiled a reference implementation? I would guess that for many inputs the bottleneck is going to be I/O rather than calculation, and that should be taken into account when timing. – Peter Taylor Oct 22 '16 at 18:34
• @PeterTaylor My response was a bit long so I added it to the question. – miles Oct 22 '16 at 18:55
• Also, here is a reference implementation. – miles Oct 22 '16 at 19:16
• Please state the upper bounds for number of coins, cost, coin value, number of solutions... – feersum Oct 23 '16 at 5:45

# It's time to parse (everything)!

## Introduction

The real world is hard. Internet standards suck. However they're used everywhere anyways. One standard in particular has been the source of a lot of trouble and frustration.
ASN.1
Abstract Syntax Notation 1
is used in many many places (including when parsing website certificates) and now it's up to you to implement a simple ASN.1 parser in your favourite programming language!

## Specification

### Input

Your input will be an ASN.1 encoded object. The encoding that is used will be PEM (thus it's all ASCII). You may take this input as a file, as STDIN, as a function argument as a string, as a byte sequence, whatever you like. The way your program takes the input should be documented however.

If you take file input, you may have the file name as an additional argument.
If you produce file output, you may have the file name as an additional argument.

### Output

The output will be formatted ASCII text, this may be STDOUT, a returned string, a file, whatever, but document it.

### What to do

You need to parse an ASN.1 object and return a nice textual representation of the content structure.
This means that there should be some sort of intendention whenever a nested structure is opened (by putting spaces or other signs in front of the identifier).
It also means that you should print the keyword whenever one is hit (also see the example).
You may but do not have to also output actual (decoded) contents or looked-up identifiers.

### Warning

While I've always talked about an ASN.1 object, I actually had X.509 certificates in mind. So the parser should understand everything that occurs inside an

List of mandatory keywords:

SEQUENCE
OBJECT
UTCTIME
PRINTABLESTRING
SET
UTCTIME
NULL
OCTET STRING
BOOLEAN
UTF8STRING
BIT STRING
OBJECT IDENTIFIER
IA5STRING


### Who wins?

This is , so the shortest answer in bytes wins!
Standard rules apply of course, built-ins are allowed.

## Example Input and Output

Input: The Amazon.com X.509 certificate:

-----BEGIN CERTIFICATE-----
BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj
IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE2MDUxODAwMDAwMFoX
b24xEDAOBgNVBAcMB1NlYXR0bGUxGTAXBgNVBAoMEEFtYXpvbi5jb20sIEluYy4x
FzAVBgNVBAMMDnd3dy5hbWF6b24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAuwQMfKRRZpql3WBS0uo4DfMrrkAEX9+6UD2fVSmV21i9iqCecmHa
4z9LNzeKqpGNkpTbXMaJfLxy0ehoQp7vyVIit6l+VZ9L+VTiL0+v8MjG+Kl6Sg4J
6ozV+EHck91Id8zCUyLHLcmJ5f60kazJJC1zGKlTkZR6Of0SzcLrje0T3Pqmdybj
AjFoBMdk0G1rKctxds1UnywI4pIONzsmozzPjk8Up5NA1s3bo9ubCQUcPSEm1TDJ
4TDdQVL8WsDNjY0SwTiVmJ+vo4TVIhRlfGv+xzHe8JXFYxsVJZ/FP70uFRH5+Uku
4yaGYFZYt71V3kOTzM3FvRlHb93jANoAHwIDAQABo4ICCDCCAgQwgb0GA1UdEQSB
tTCBsoIKYW1hem9uLmNvbYIIYW16bi5jb22CEXVlZGF0YS5hbWF6b24uY29tgg11
cy5hbWF6b24uY29tgg53d3cuYW1hem9uLmNvbYIMd3d3LmFtem4uY29tghRjb3Jw
b3JhdGUuYW1hem9uLmNvbYIRYnV5Ym94LmFtYXpvbi5jb22CEWlwaG9uZS5hbWF6
b24uY29tgg15cC5hbWF6b24uY29tgg9ob21lLmFtYXpvbi5jb20wCQYDVR0TBAIw
MGEGA1UdIARaMFgwVgYGZ4EMAQICMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5z
eW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20v
cnBhMB8GA1UdIwQYMBaAFF9gz2GQVd+EQxSKYCqy9Xr0QxjvMCsGA1UdHwQkMCIw
IKAeoByGGmh0dHA6Ly9zcy5zeW1jYi5jb20vc3MuY3JsMFcGCCsGAQUFBwEBBEsw
STAfBggrBgEFBQcwAYYTaHR0cDovL3NzLnN5bWNkLmNvbTAmBggrBgEFBQcwAoYa
/SiREeFlL0ce/UDYoPDU/91x8XsbJuLRqxm1zEBzq/07/Fnd4nL/rayEEFIEubRS
IL9Ewi+htMz2nLrR0BMu3ilqWGhpOEvkcgT9uh/CjhPhVMse0lpHYSn62ZvUWTwn
pp3GojEbWRbGxtLC7SO3vY4a0N2bb5b9J7y5OtSKjInRJaMs19pFwlHMOMZR0y70
rHaz9eRB++LuEI2B90Mqr33NMysb1enMo61Dt16Ki3yT1zVBHp1vbqM6gX2UeEMA
A+HEDpMefyQVspV7twA=
-----END CERTIFICATE-----


Example output:

SEQUENCE
SEQUENCE
[0]
INTEGER
INTEGER
SEQUENCE
OBJECT IDENTIFIER
NULL
SEQUENCE
SET
SEQUENCE
OBJECT IDENTIFIER
PRINTABLESTRING
SET
SEQUENCE
OBJECT IDENTIFIER
PRINTABLESTRING
SET
SEQUENCE
OBJECT IDENTIFIER
PRINTABLESTRING
SET
SEQUENCE
OBJECT IDENTIFIER
PRINTABLESTRING
SEQUENCE
UTCTIME
UTCTIME
SEQUENCE
SET
SEQUENCE
OBJECT IDENTIFIER
PRINTABLESTRING
SET
SEQUENCE
OBJECT IDENTIFIER
UTF8STRING
SET
SEQUENCE
OBJECT IDENTIFIER
UTF8STRING
SET
SEQUENCE
OBJECT IDENTIFIER
UTF8STRING
SET
SEQUENCE
OBJECT IDENTIFIER
UTF8STRING
SEQUENCE
SEQUENCE
OBJECT IDENTIFIER
NULL
BIT STRING
SEQUENCE
INTEGER
INTEGER
[3]
SEQUENCE
SEQUENCE
OBJECT IDENTIFIER
OCTET STRING
SEQUENCE
[2]
[2]
[2]
[2]
[2]
[2]
[2]
[2]
[2]
[2]
[2]
SEQUENCE
OBJECT IDENTIFIER
OCTET STRING
SEQUENCE
SEQUENCE
OBJECT IDENTIFIER
BOOLEAN
OCTET STRING
BIT STRING
SEQUENCE
OBJECT IDENTIFIER
OCTET STRING
SEQUENCE
OBJECT IDENTIFIER
OBJECT IDENTIFIER
SEQUENCE
OBJECT IDENTIFIER
OCTET STRING
SEQUENCE
SEQUENCE
OBJECT IDENTIFIER
SEQUENCE
SEQUENCE
OBJECT IDENTIFIER
IA5String
SEQUENCE
OBJECT IDENTIFIER
SEQUENCE
UTF8String
SEQUENCE
OBJECT IDENTIFIER
OCTET STRING
SEQUENCE
[0]
SEQUENCE
OBJECT IDENTIFIER
OCTET STRING
SEQUENCE
SEQUENCE
[0]
[0]
[6]
SEQUENCE
OBJECT IDENTIFIER
OCTET STRING
SEQUENCE
SEQUENCE
OBJECT IDENTIFIER
[6]
SEQUENCE
OBJECT IDENTIFIER
[6]
SEQUENCE
OBJECT IDENTIFIER
NULL
BIT STRING


• Reference parser
• What about built-ins? – corvus_192 Oct 20 '16 at 19:23
• @corvus_192 if your language has a built-in ASN.1 parser (!) I don't have any problems with built-ins and traditionally I always allowed them. – SEJPM Oct 20 '16 at 19:26

# Simple Substitution Cipher Programming

A simple substitution cipher maps each unique character to another character. If my substitution cipher is [H->6, e->U, l->V, o->)], then Hello becomes 6UVV).

You must write a program A which inputs a string of text, and outputs the text after passing it through a substitution cipher.

You must also be able to handle your program, A, as input, printing out B. If possible, B then applies a different cipher, and prints out C, and so on, until you cannot repeat the process anymore, or until a duplicate program as been generated.

1. Contain at least 2 substitutions, and every character in your program.
2. Change every character (i.e., no A->A)
3. Be unique on every substitution (i.e., if program A uses x->y, then program B must convert x into something other than y)
4. All be written in the same language (same version)

Your score is ByteCount(A)/NumIterations. You can assume that your input only consists of substitute-able characters.

For example, if A was Programming, and it generated p80G8AMM1NG, which generated u79)7%vvQ-), which finally generated Programming, then there were 3 ciphers applied, and a byte count of 11, so my score would be 11/3, or approximately 3.666667. If the final output was an invalid program, my score would still be the same.

• Technically, this is the simple substitution cipher. – Oliver Ni Nov 2 '16 at 23:41
• That's literally my title. Regardless, after the cipher, the goal is to produce another program that also does a cipher – Nathan Merrill Nov 2 '16 at 23:47
• "If possible" seems to imply that B doesn't need to be a valid program, so I think this spec allows any program A which outputs a string of the same length as itself with a consistent mapping between the characters - i.e. it doesn't need to apply that mapping to its input. On my pedantic reading of the spec, X would be a valid CJam answer, scoring 1/1. In fact, on a pedantic reading of the spec the empty string would be a valid answer in various languages, looping immediately but scoring 0/1 and hence unbeatable. – Peter Taylor Nov 3 '16 at 14:32
• True, I should enforce a language length of 1. I'm ok with X being a valid submission, as I think there may be another CJam submission that can get a lower score. On the other hand, I'd be for requiring a minimum of 2 distinct characters, if that would make it more interesting – Nathan Merrill Nov 3 '16 at 14:35

# Peano's quine

Your task is to write two programs in the same programming language.

The first program is simply a quine, in the following called "zero quine".

The second program, called succesdor program, is a program that gets a program text as input, and outputs another program text, according to the following rules:

• The input text is either the zero quine, or code that is (or could be) the output of another run of the successor program.

• The output is again a quine in the same language.

• The zero quine, generated quines and successor program fulfil Peano's axioms. In particular:

1. The successor function does never output the zero quine, no matter what the input is.

2. The successor function produces different output when acting on different valid input.

In other words, the zero quine and the successor function together allow to generate an unbounded number of quines, one for each natural number.

The score is the total number of bytes of the zero quine and the successor program together.

Note that while there are several challenges that have programs returning longer versions of itself when run, I didn't find any that has a program transforming a proper quine into another proper quine.

Tags:

• This is extremely similar to quine loops. It just needs a quine which has a literal (int or string) it ignores and a program which respectively increments it / appends a character to it. – Peter Taylor Nov 4 '16 at 8:26

# Match the BF output code-golfregexbrainfuck

Your task is, when given a BF program as input and 256 1's on the line after the BF program, match the amount of 1's equal to the value of the pointer when the program halts.

For a BF tutorial, see here.

## Example programs:

+++
(255 1's)

(The above program should match 3 1's.)

++[>+++>+++<<-]>
(255 1's)

(The above program should match 6 1's.)


## Specs:

• The tape in question is 10 long, with wrapping.
• There is wrapping for the individual values: if it goes over 256, it goes back to 0.
• There is no , or . in the BF code.
• You are guaranteed that the code will terminate.
• You may use any flavour you want.
• You may match 1's in any position, as long as you match the correct amount of 1's.

This is , so shortest code in bytes wins!

## Meta stuff:

• How hard would this be to pull off? Is it even possible?
• Anything I could improve with explanations?
• 1. I think it should be "the value of the memory cell under the pointer" rather than "the value of the pointer". 2. This is clearly impossible using regular expressions, but it is possible using Perl 5's regexes, which are Turing-complete. However, at that point you're really just using Perl wrapped in regex notation, so it's arguably a dupe of codegolf.stackexchange.com/q/84/194 – Peter Taylor Nov 8 '16 at 7:30
• @PeterTaylor Your second claim is false. With a wrap around BF becomes a finite state machine. Thus even it's halting problem is solvable by a push down automaton (regex). It may be extremely hard but this problem is most certainly solvable. – Wheat Wizard Nov 8 '16 at 17:04
• @WheatWizard, although my initial reaction was to agree with you, on further reflection I'm not entirely convinced. The halting problem for a finite state machine is trivial: they always halt. Since a BF program can enter an infinite loop, it's therefore not an FSM. It's true that any given program has a finite number of states, but the state includes the program counter and so the ecosystem as a whole can have an unbounded number of states. Consider that in execution we can jump back along the program string an arbitrary distance: how can a pushdown automaton remember the contents of a loop? – Peter Taylor Nov 8 '16 at 20:48
• @PeterTaylor iirc finite state machines can loop infinitely however any loop must be periodic. I don't know why you claim finite state machines cannot loop. Toroidal Brainfuck fits every definition of a FSM I can find at the moment. It has a finite number of states and a well defined mapping of each state to another. I also don't understand what you mean when you say "Program counter" if you are referring to the instruction pointer it is certainly finite. Could you clarify this? I don't mean to be argumentative, but I do disagree with you. If I am incorrect I am sorry for wasting your time. – Wheat Wizard Nov 8 '16 at 23:36
• @PeterTaylor If it helps, the input program is guaranteed to halt. Would it be easier to decide if there are a limited number of "moves" (i.e. 30,000 moves, 1 move = any +-><)? – clismique Nov 9 '16 at 5:03
• @WheatWizard, the point with FSMs and the halting problem is that each state transition occurs with one character of the input, each character of the input is processed only once, so therefore the execution time is bounded by the length of the input. On the main point, I'm not saying that you're wrong: just that I'm not convinced. Perhaps the thing to do is to edit the question to rule out "cheating" by calling out to a general-purpose programming language and then see whether anyone finds a solution. – Peter Taylor Nov 9 '16 at 7:36
• Limiting the runtime would certainly make it doable, because then the values which the program counter (or instruction pointer, they're synonymous) can reach are bounded, and so the total number of states is bounded by the number of memory states times the number of moves. It's not a practical bound, but in theoretical terms it's certainly good enough. – Peter Taylor Nov 9 '16 at 7:37
• @PeterTaylor So I'm getting the "this is impossibly hard" gist - but is it on the same level as "Tetris in GoL"? I want to make a challenge that's difficult, but not THAT difficult. – clismique Nov 9 '16 at 9:59
• I just realized that vanilla regex (without lookarounds) is a finite state machine and not a push down automaton. I think PeterTaylor is correct in assessing this as impossible. – Wheat Wizard Nov 9 '16 at 14:15

## Find the highest product in a grid

The following problem was inspired by Problem 8 at Project Euler.

Write a program that takes a 2-dimensional block of digits and a number on a newline ("n") as it's input. Output value of the product of the n adjacent (read "in a straight line") digits in the that have the greatest product. Error cases don't need to be covered (eg. the grid is not rectangular, n is missing, n is bigger then the width/height as the block, etc.). Diagonal numbers are also adjacent.

Examples:

1932
4836
8490  -->  288
3

53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881  -->  5832
16427171479924442928230863465674813919123162824586
4

43289
90283
03248  -->  error (print whatever)
34290
22

397432008949201741720 --> 72
2


Note: possible inputs below are equivalent:

2830
0309
8011
4

2 8 3 0
0 3 0 9
8 0 1 1
4

{{2, 8, 3, 0},
{0, 3, 0, 9},
{8, 0, 1, 1}}
4


And so on, it's not strict.

It's , so the shortest answer in bytes wins!

• @TimmyD 2-8-3-9 :P Thanks for the notice, fixed now! – RudolfJelin Nov 9 '16 at 19:23
• PPCG as a whole isn't a fan of strict input formats. In particular, function (which are allowed by default) should probably be able to take a matrix and a separate integer as arguments. – Dennis Nov 10 '16 at 1:20
• @Dennis Thanks for notifying me, I didn't see that issue since I'm new to this site. I edited my proposal a bit also. – RudolfJelin Nov 10 '16 at 14:31

# Absolutely correct !

I have been given some homework, in which my Math teacher wants me to figure out what expression is represented in the graphs she gave me. Because it is long and painful to do every single one of them by hand, I want to automate it a bit.

## The challenge

Given a graph as an input, output the equation represented, in human-readable format. That is, something like that:

y=-|x-3|+5


More generaly, the expression will always be of the form

y=±|x+a|+b


Where you have to replace a and b by their value. The function has to be simplified to its maximum (i.e. can not contain +0, -0, or +|x|);

## The input

The input is given in ASCII.

             \       |       /
\      |      /
\     |     /
\    |    /
\   |   /
\  |  /
\ | /
\|/
---------------------V---------------------
|
|
|
|
|
|
|
|


This represents the equation y=|x|. The graph is not always centered, and can be of any width and height.

/, \ are straight lines. A and V are verteces. - and | are the axes, and + is their intersection (if not covered by an other character).

### Unit

A unit is two characters. for example, -- is one unit on the horizontal axis.

|
|


Is one unit on the vertical axis.

### Tests

A test suite is available here. A line of #s is used to separate input from output. Output goes first, for clarity.

# How Big is the Hyperbolic Round Table of Camelot?

There is a hyperbolic rogue-like game called HyperRogue, based on the truncated order-7 triangular tiling. (Each vertex is surrounded by two hexagons and one heptagon.) There is a place in this game called Camelot, where the Round Table sits. In the middle of the table is the Holy Grail. The table starts with a radius of 28, but each Holy Grail you collect increases the radius by 2. So my question is: given the number of Holy Grails collected, what is the area of the Round Table?

## Assumptions:

• The Holy Grail starts on a heptagon.
• The heptagon the Holy Grail is on is the circle of radius 0.
• A circle with radius n+1 comprises the circle of radius n and all the cells touching the circle of radius n.

## Test Cases:

0 Holy Grails = 31659398 Tiles
1 Holy Grail = 93888285 Tiles
2 Holy Grails = 278432568 Tiles


## Winning Criterion:

Shortest code wins!

• This challenge is very unclear as it is right now. The end of the first part sounds like you are asking for A = (28 + n*2)^2 + pi, but instead of an area a number of tiles is given. To make it clear what exactly you are asking, you should add some graphical representation of the tiling, the circles ect. – Laikoni Nov 12 '16 at 23:15
• @Laikoni I don't know how to add pictures, or format anything, actually. I'm trying to ask for calculating the area of a hyperbolic circle. Here's the image I want to add illustrating the geometry: en.wikipedia.org/wiki/File:H2_tiling_237-6.png – Oliver Daugherty-Long Nov 13 '16 at 3:30
• I added some formatting. If you edit your question (and are not on mobile) in the top bar some formatting buttons appear. At the right of this bar is a ?-icon which provides further formatting help. – Laikoni Nov 13 '16 at 9:27
• @Laikoni Thanks! I am on mobile, unfortunately. – Oliver Daugherty-Long Nov 14 '16 at 0:13