# What is the Sandbox?

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

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

## Get the Sandbox Viewer to view the sandbox more easily

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

# 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. – Mego 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? – Mego 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. – Mego 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

# 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

### Pay Best Card in Euchre

Input:

Firstly
An array of three cards representing the cards played by each player formatted like

[JD][10H][9S]

Representing

Jack of Diamonds, 10 of Hearts, and Nine of Spades.

As you always sit across from your team-mate in Euchre, the second element represents your team mate's play. Here, the 10H.

Secondly
A Single Char, String, etc representing the trump suit formatted like

S, D, C, H

representing

Thirdly an array of four cards representing your hand formatted like

[KD][JC][QH][AS]

representing

King of Diamonds, Jack of Clubs, Queen of Hearts, Ace of Spades

### Objective:

Given the three inputs, output the best possible card to add to the cards that have been played such that it meets the following criteria:

1. It takes the hand if it can, if not output the least valuable card
2. It takes the hand if it can, however it will not trump your team mate unless it is unavoidable
3. If it can take the hand, it does so by using the least valuable card. (If you have an ace and a queen that can win the hand, you play the queen).

Output format like [JD]

### Formatting

A - Ace
K - King
Q - Queen
J - Jack
10 - Ten
9 - Nine

H - Hearts
D - Diamonds
C - Clubs

10H, 9D, JD, QH, AD, 9C, 10C

### Examples

In: [QD][KD][9C], "C", [AH][JH][QH][9H]

Out: 9H

Reason: As clubs are trump, the 9C is winning the hand, we are unable to take the hand so we should discard our lowest card, here the 9H

Out: 9H

Reason: As Hearts are trump, the Ace of Diamonds is currently winning the hand, we are able to trump the hand so we should use our lowest card, here the 9H

Out: 9D

Reason: As diamonds are trump and we are currently winning the hand, we should play the 9D because our partner currently is winning the hand, so we want to play the 9D over the AD

Out: QH

Reason: As Diamonds are trump our opponents are winning with the left Bower JH We have the right bower but cannot trump him because QH was led and we must follow suit, the QH

Out: JD

Reason: As Diamonds are trump our opponents are winning with the left Bower JH We have the right bower and since we have no Diamonds we can trump over him with the JD

### Euchre Card Strengths

If Hearts is trump:

JH
JD
AH
KH
QH
10H
9H

See the Euchre Rules if you are unfamiliar with the strength of different cards in Euchre

Since this is Code-Golf the shortest code wins!

Good Luck and have fun!

# Python Kolmogorov Complexity Golfer

Python is actually pretty good at some Kolmogorov Complexity challenges (compared to other non-golfing languages), from string multiplication being extremely short, to defining variables requiring no types.

Your challenge is to make a program that shortens Python code for Kolmogorov Complexity challenges. You can use anything, not just the usual functions that people typically use.

Your score is the sum of all the bytes for each of the ten test cases, and the winner is the submission with the lowest score.

## Test Cases

I don't know about the rules for each challenge, but for this one, you may print extra spaces after each line and extra newlines at the end of the text.

## Note

I don't know how to tag this.

# Enumerate all the binary matrices

Your task is to write a pair of programs or functions. The first should take a single nonnegative integer, and return some matrix where all elements are 0 or 1 (or true/false). The second should take a matrix of the same form, and return a nonnegative integer.

The two programs should form a bijection, so that every possible matrix is mapped to exactly one nonnegative integer, and every integer to the corresponding matrix. The matrix with no elements must be included, but we consider all matrices with no elements as identical (i.e, there is no 0x3 matrix.)

To clarify, the dimensions of the matrix is not a separate input. You must work out a way to represent all possible dimensions. For instance, you could start off enumerating them like this:

0 <-> []
1 <-> [0]
2 <-> [1]
3 <-> [0;0]
4 <-> [0;1]
5 <-> [1;0]
6 <-> [1;1]
7 <-> [0,0]
8 <-> [0,1]
9 <-> [1,0]
10 <-> [1,1]

But you can also enumerate them in some different order, as long as all matrices of all dimensions can be reached eventually.

You may output and input the integer as a bigint if your language supports that, or as an unbounded string or array if it doesn't. It should however not be limited to a machine word size.

You may output the matrix in any format you choose, as long as the elements of the matrix, and the rows/columns of the matrix are clearly distinguishable.

Whatever output formats you choose, the other program must accept input in the same format. Your functions or programs may opt to print the result rather than return it.

Standard loopholes are forbidden. This is code golf, so the shortest answer wins.

• 1. It would be helpful for the title to be more explicit that the size of the matrix isn't an input: my initial reaction was that this was yet another "Count from 1 to 2^x" question, and I had to read it carefully to overcome that reaction. 2. Please clarify the situation with empty matrices. Should the matrices include 0 x 1, 2 x 0, etc. dimensions? And if so, how can that be represented unambiguously in input? – Peter Taylor Nov 16 '16 at 14:34

# Challenge

You are the owner of a local supermarket, and your cashier doesn't seem to do the work you told him/her to do. He/She is never on time, returns too much change and doesn't really show optimism at the workplace. So you, as the space saving, but ruthless owner opt to replace him/her.

# Rules

The programm should initially take 2 numbers as input, the first beeing the price, and the second the amount you are paying. If you are paying enough it should output the change in 100,50,20,10,5,2,1 notes, always maximizing the amount of high notes. If you aren't, you may output anything indicating a wrong input.

cashier 100 500
4 100
0  50
0  20
0  10
0   5
0   2
0   1

cashier 600 500
0

# Scoring

This is code-golf, so the shortest byte amount wins :) Good luck!

• Does the output format matter, or are we also allowed to have a different output format as long as we know how much 100 bills, 50 bills, etc. are used (like "4x100,0x50,0x20,0x10,0x5,0x2,0x1") ? Also, what if the price and amount paid is exactly the same? – Kevin Cruijssen Nov 16 '16 at 15:29
• related (if not duplicated) – Rod Nov 16 '16 at 15:30
• @KevinCruijssen the output format is fine. inputting the same amount paid as price results in "no chage" but the output shoudl still be 0x100... – PlatinTato Nov 16 '16 at 15:31
• @Rod ah ok :/ didnt find anything in the direcition mine was going. i guess the title made it less findable :/ – PlatinTato Nov 16 '16 at 15:33

# Fold the number!

Given a number n, fold the number as follows: (ex. 30)

First, convert it to binary.

11110

Add one 0 to the start if it has an odd number of digits.

011110

Now, take the second half of the number, reverse it, and put it under. For example, abcd would turn into ab dc (where is a newline):

011
011

Add one 0 to each line if it has an odd number of digits.

0011
0011

Now take the back of the whole thing and put it on the bottom, reversed:

00
00
11
11

Keep doing this until there is only one column, and read this from top to bottom.

00110011

Convert to decimal.

51

Remember, this is , so the code with the smallest number of bytes wins.

## Postman's Sorting

You are a postman, and you have to walk down a street, delivering letters. Odd-numbered houses are on the left, and even-numbered houses are on the right.

If you had to end up back at the beginning of the street, it would be easy: simply deliver the odd letters in ascending order and the even letters in descending order.

Instead, you need to finish at the end of the street. But you can't simply deliver the letters in ascending house number order, because you would have to cross the street so often. You need to optimise the order to minimise the number of street crossings.

Given a set of positive integers as input, your program or function should output an ordered array giving the optimal delivery sequence. You need to consider the houses in pairs: 1,2; 3,4; 5,6 etc. There are a number of cases:

• If you have no letters for a pair of houses, you simply ignore them.
• If you have letters for only one of a pair of houses, you have no choice, you must visit that house.
• If you have letters for both houses in a pair, then you want to visit the house on the same side as the house you just visited first, then cross and visit the other house.

Example: If you have letters for houses 6, 2 and 5, then you want to deliver them in the order 2, 6, 5, so as to avoid crossing the street a second time.

[Further test cases as needed to clarify comments arising while the question is in the Sandbox.]

This is , so the shortest program wins!

## Procedurally Generate a Dungeon

It's time to make the new Rogue!

Given no input, output a (randomly) procedurally generated dungeon with a start and an end. It must be possible to get from the start of the dungeon to the end.

Elements may include: (but are not limited to)

• Key
• Lock (requires key to pass)
• Boss
• Miniboss
• Test
• Reward
• Multi-key
• Multi-lock (requires n multi-keys to pass)
• Nothing
• Boolean switch - switch can toggle when inside this room
• Boolean gate A - only opens when switch is off
• Boolean gate B - only opens when switch is on

The output format does not matter as long as:

• The types of room is present
• The 2D spacial connection is present

## Sandbox Notes:

• Is this idea somewhat supported?
• At the moment this is very unclear (at least to me). What should I add to make it more obvious what it is programs should do?
• Creativity - the bane of the objective winning criteria. I hope to at least make it obvious whether an answer is valid.
• Too broad? I hope not because I tried to make all dungeons solvable.
• Simple answers shouldn't be upvoted and answers that output nice dungeons should be.
• Should answers have to include the critical path? That might ramp up the complexity and isn't really required apart from making sure it's valid.

# Generate fake PGP keys code-golf

## Input

• public or private; indicates if the header and footer should say PUBLIC or PRIVATE
• ; - a delimiter
• Version string
• ; - a delimiter
• Comment string

An example input would be: public;Keybase OpenPGP v1.0.0;https://keybase.io/crypto

## Output format

-----BEGIN PGP {PUBLIC|PRIVATE} KEY BLOCK-----
Version: {VERSION_STRING}
Comment: {COMMENT_STRING}
// newline
{24 lines of alphanumeric + /+, 64 chars each}
{one 36 char line of alphanumeric + /+}
={four chars of alphanumeric + /+}
-----END PGP {PUBLIC|PRIVATE} KEY BLOCK-----

## Rules

• Your program must generate a new fake key every time it is run; and be randomly distributed
• The input shouldn't be too rigid. I would recommend having 3 separate inputs (i.e. putting all into a single string is an option rather than an requirement). Public/private should be a truthy/falsy value. Also what would the version and comment strings be? I think zero or more printable ASCII should be appropriate. – Link Ng Nov 26 '16 at 11:39

# Give those numbers some space! code-golf

The numbers have had it. They're through being put in order all the time. They're all sick of their neighbors, and want to be moved as far away as possible. Your goal is to help them be happy!

The 'happiness' of a number is represented by the difference between it and it's next neighbor. For example, an ordered sequence of 0 through 9 looks like this:

0 1 2 3 4 5 6 7 8 9
v v v v v v v v v
1 1 1 1 1 1 1 1 1 = 9

A pretty unhappy sequence. But with a little work, we can fix that!

0 2 4 6 8 1 3 5 7 9
v v v v v v v v v
2 2 2 2 7 2 2 2 2 = 23

In this example, we've shuffled the numbers around a little, for a total happiness of 23. Better, but I'm sure we can make them even happier!

0 9 1 8 2 7 3 6 4 5
v v v v v v v v v
9 8 7 6 5 4 3 2 1 = 45

This is the maximum happiness for this sequence. Perfect!

Our only problem is that there is a lengthy review before they can be moved around. Due to this, your code has to be as short as possible to speed up the process.

## Input

Your program or function will take a list of positive integers in any reasonable format (list, array, string, etc). The list is in ascending order.

## Output

Output is going to be a list of integers in any reasonable format, representing the sequence of numbers arranged for maximum happiness.

"1 2 3 4 5 6 7 8 9 0"   -- A string is acceptable, as long as the numbers are separated by a character.
"6@5@4@3@2@1@7@8@9@0"   -- Any non-numeric character is acceptable as a separator, including newlines.
[0,1,2,3,4,5,6,7,8,9] -- The list represented as an array
"0123456789"             -- Not acceptable, no way to tell which numbers are which.

{I'm trying to open up the challenge to many different ways of solving, feel free to offer suggestions}

• The maximum happiness for this sequence is 45, and the challenge, as stated, will be to print "0918273645 45" in as few bytes as possible. You might want to change the challenge to accept an arbitrary list as input, though I suspect the maximum happiness will likely be found by sorting the list, then alternating the lowest and highest remaining items in the list. – Gabriel Benamy Nov 23 '16 at 17:47
• @GabrielBenamy I thought about that, which is why I disallowed hard-coding. Maybe I should put that somewhere clearer. – Xanderhall Nov 23 '16 at 17:49
• You should probably just say "input and output can be in any reasonable format", rather than trying to list the formats that would be useful. (For example, many esoteric languages that don't have built-in lists, integers, etc. need lists to be represented as small pieces of code within the language.) – user62131 Nov 23 '16 at 18:13
• @ais523 I wanted to be more specific with the output than the input, because I didn't want '091827364545' to be valid. I didn't think that would be too restricting. – Xanderhall Nov 23 '16 at 18:19
• I'd suggest requiring the output to be the arranged numbers, or requiring the output to be the happiness level, or letting answerers choose which they would like to output. For me, requiring both takes away some of the fun, because outputting multiple values is clumsy in many languages. – ETHproductions Nov 23 '16 at 18:23

# Calculate the chi-squared test statistic

## Introduction

A chi-squared test is a statistical test used to determine the extent of any association between two categorical varaiables. In this challenge, you will calculate the value of the chi-squared test statistic given a contingency table.

## Method

Say that we have two variables A and B, which are from a single population. A can take values from the categories p, q, and r, while b can take values from the categories x, y, and z. A sample is now taken from the population, and the frequencies of the elements of this sample that fall into each category are observed. This can be used to construct a contingency table:

A
x   y   z
p [10, 12,  3]
B q [45,  0,  9]
r [65, 32, 34]

For example, the table shows that 10 elements fall into p and x, and that no elements fall into q and y.

Next, we calculate the expected frequencies, assuming that A and B have no association. This is performed by applying the following to each entry in the contingency table, where f_e is the expected frequency:

In this case, this yields:

[14.285714285714286, 5.238095238095238,  5.476190476190476 ]
[30.857142857142858, 11.314285714285715, 11.82857142857143 ]
[74.85714285714286,  27.447619047619046, 28.695238095238096]

Next, we calculate the contributions to the test statistic by applying the following to each entry, where f_0 is the orignal observed frequency:

In this case, this yields:

[1.285714285714286,  8.72900432900433,   1.1196687370600416]
[6.482142857142857,  11.314285714285715, 0.6763975155279506]
[1.2979825517993466, 0.7550444466475007, 0.9806678994199733]

Finally the value of the test statistic is found by summing all the elements of the contributions table, which gives:

32.640908336601996

# Sandbox

## To do

• Input/output, specification etc
• Test cases (Pyth program for test cases)

# A Numpad's Knight Numbers Extended Edition

This challenge is an extension of the one linked above by Calvin, and inspired by a comment by Darrel Hoffman.

My computer has a numpad which is significantly more expansive than Calvin's. For reference, it looks like this:

🔒/ * -
7 8 9 +
4 5 6 +
1 2 3 ↵
0 0 . ↵

🔒 denotes numlock, ↵ denotes enter.

Once again, we have a chess knight hopping around on a numpad. The objective of your program will be to determine which numbers can be generated by placing a knight on any* of these keys and letting him move around. Note that although there is only one 0 key, it's two wide so 5->0->3 is possible but 4->0->3 is not, and the numlock will toggle the numpad on or off, in practice this only allows a jump from 5 to 9.

'*' and '+' are unused and should never be pressed, other than that you can start your knight on any key. The knight may not press ↵ during number entry, but most end there.

Your program will for input receive a number (possibly negative, possibly containing a single decimal point . OR single fraction sign /).

Test cases:

Truthy:
0, 2, 5, 6, 9
-6049
3059 (note the use of numlock)
5.16
-61.5
4/6
-6/40
55 (you can jump on 5 or 9 more than once in a row with 🔒...)
Falsy:
66 (... But other numbers can't reach 🔒)
8 (Not within range of ↵ key)
96 (The knight can't move like that)
405 (It's probably easier to think of the 0s as being separate keys)

Input will always be a valid integer, decimal float, or fraction.

## Linify

If you perform this algorithm but leave out some of the lines, you can produce recognizable pictures.

An example via Linify.me - as they explain,

Linify uses a greedy randomized algorithm. First, the darkest pixel is found. Then a number of random lines are drawn through that point, and the pixel values along each line are added together. The line with the darkest average is chosen, and the value of that line is subtracted from the image. Then the whole process is started over again for however many lines we are drawing. By the nature of the algorithm, the optimal line drawing configuration is probably not achieved, but performance is far superior to the naive method of checking every line.

The concept for this site came from a Reddit thread.

## Challenge

Reduce (this input photo) to a linification using N pins on the outside circle. Each line of the file should be a comma separated list of the pin number and the other pins to draw lines to.

## Scoring

(formula using code length and output quality using some sort of comparison software...)

(maybe that comparison algorithm is itself a challenge)

(maybe this linify challenge should be in black and white?)

The Mathematica Clause: You may import graphics and math libraries for your platform older than this post, and the code required to import them does not apply toward your byte count.

• The algorithm needs some clarification. 1. What line-drawing algorithm to use? Anti-aliasing? Bresenham? 2. What is the "value of that line"? The average? Or does it mean that all pixels in the line are set to black? 3. If not in black and white, what formula should be used for the brightness? 4. Since it selects a line through the darkest point and then subtracts along that line, it seems that the darkest point should get darker still and all of the lines should pass through the same point, but that's not true of the demo images. Why not? – Peter Taylor Dec 2 '16 at 23:10
• 1. Agreed that will need to be pinned down. 2. All pixels in the line are set to one color. 3. I don't know, so b&w is becoming more probable. 4. If you create your own via linify's front page there are both additive and subtractive methods. The example I provided probably did not use default settings. – wyldstallyns Dec 2 '16 at 23:43
• – wyldstallyns Dec 25 '16 at 22:58

## Quine Creator

Consider a program (or function or code snippet) that accepts a single string argument and returns a string result. Here's an example, which I will call Program 1, of a program that duplicates its input:

@echo %* %*

We could write a Program 2 that would take the source code of the original program and substitute a hard-coded string, so that the resulting source code would take no input and produce a fixed result. If we passed it Program 1 and "Hello, world!", it would produce a program that always outputs "Hello, world!" in duplicate:

@echo Hello, world! Hello, world!

Moving on, consider Program 3 which has the effect of Program 2 with the same string for both the source code and the hard-coded string, so for input of Program 1 this would result in something like this:

@echo @echo %* @echo %*

All that remains is to invoke Program 3 with its own source code as its input. Program 3 will then create a program that invokes Program 3 with the source code of Program 3 as its input. In other words, a quine!

Please provide the source to Program 3.

This is , so the shortest resulting wins.

• What are the requirements for an answer to be valid? In the "loose" end, you could require only that the answer produces a quine when given its own source as input. In the "strict" end, you could require that the answer can be given an arbitrary program P as input, and it should return a new program that has the same effect as running P on its own source code. The former may be more loose that you'd like, and the latter is very difficult unless one can restrict the set of input programs in some way. – Zgarb Dec 5 '16 at 12:26
• Also, somewhat related. – Zgarb Dec 5 '16 at 12:29
• @Zgarb What sort of restrictions? At the very least I suppose I could make it clear that the answer only needs to accept a program P that accepts input in the same way as the answer does. – Neil Dec 5 '16 at 13:37
• On a second thought, the strict version is probably not that hard in most languages, since you can restrict the input and output methods. – Zgarb Dec 5 '16 at 13:50
• I don't think the example you give in the question actually works to generate a quine because it doesn't escape properly. (This technique certainly can produce a quine, but the escaping needs careful thought.) Also, I think the correct middleground to find is "write a program which takes a string as argument, and returns a program that executes the program represented by that string by giving it that string as input". The escaping is explicit here, and it's a task that should be possible in most languages. – user62131 Dec 6 '16 at 10:54
• @ais523 Ah, you're expecting @echo @echo %%* @echo %%*? – Neil Dec 6 '16 at 16:09
• Not quite. The two echos have to be different; the first has to produce the argument itself, the second has to produce an escaped version of the argument. It's hard to do in bash, so here's a version in Python: lambda i: print(i + "(" + repr(i) + ")"). Giving this function its own string representation as an argument does indeed result in a quine (I just checked that); note that i and repr(i) are different, because the first needs to become code in the output program, the second needs to become a string literal. – user62131 Dec 6 '16 at 17:13
• @ais523 Sure, applying Program 3 to itself should do that, but I'm not providing an example of Program 3 applied to itself, only an example of Program 3 applied to Program 1. – Neil Dec 6 '16 at 19:29

I tried searching for this, thinking it was a duplicate. I was unable to find anything (hard to know what to search for), so let me know if it is.

# The Challenge

We all know how to apply bitwise not to a binary number. It simply flips all the bits, so 10010 becomes 01101. For this challenge, we will be creating a definition for a digitwise not, applying the same concept to base 10.

# Digitwise Not

For this challenge, digitwise not is defined as follows. Line up the digits 0-9. Because 0 and 9 are endpoints of this list, they are considered "opposite", so digitwiseNot(0) == 9, and digitwiseNot(9) == 0. The same concept applies when you go one element into the list from both ends, meaning 1 and 8 are opposite, as are 2 and 7, etc. Full list:

0 <=> 9
1 <=> 8
2 <=> 7
3 <=> 6
4 <=> 5
5 <=> 4
6 <=> 3
7 <=> 2
8 <=> 1
9 <=> 0

For multi-digit numbers, you apply the operation separately for each digit. For example, digitwiseNot(1234) is 8765 because 1 -> 8, 2 -> 7, 3 -> 6, and 4 -> 5.

# Rules

• Take only a single input, representing an integer greater than or equal to 0 in whatever format is best for your language (stdin or function parameter, integer or string, etc)
• Produces a single output, which is the digitwise not of the input (can be returned from function or printed to stdout)
• Can be either a full program or just a function.
• Looks nice, but I don't think there will be many interesting answers, because you just have to calculate 9...9 (with the same number of 9 as there are digits in the input number) minus the input number. E.g. digitwiseNot(1234) = 9999 - 1234 = 8765. But of course it's a valid and well specified challenge. Maybe you should give an example for an input number with a leading 0(or exclude such cases): Is 012 = 12 -> 87 or 012 -> 987? – nimi Dec 7 '16 at 19:59
• The normal name for this operation is "complement"; that might help your search (and should definitely be mentioned in the title or body of the question, so that it comes up on other people's searches). The question doesn't seem to be a duplicate. It's pretty easy, but I don't see a reason to disallow it (the main issue is that it's likely to get disproportionately many answers and upvotes, which is always annoying because it gives a bad impression of what the site's about on HNQ, but that's not really a fault of the question). – user62131 Jan 7 '17 at 9:26

# Christmas Present Viewing code-golfascii-art

You're stacking Christmas presents, and you'd like to make sure that the pile will be aesthetically pleasing from whichever side you view it, without having to actually go through all the hard work of stacking them.

Write a program that takes the size of the present stacks in the pile, and outputs what the pile will look like from all four corners.

Each present is an opaque cube that looks like this:

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

If you have two presents next to each other, for example, it would look like this, because the nearer present occludes part of the further one:

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

Two presents with a single space gap between them would look like this:

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

## Input

A two-dimensional rectangular set of integers greater than or equal to 0, representing the heights of stacks of presents in the pile, and an integer determining which corner to view it from.

For example:

01  1
10

would indicate two stacks 1 present high, that are diagonally adjacent, viewed from the corner you have assigned index 1.

You may have the corners be 0-indexed or 1-indexed and you may have them occur in any order, as long as a different corner is used for each of {0,1,2,3} or {1,2,3,4}.

## Output

An ASCII image, showing the stack from the selected corner. Parts of the presents that would be occluded by part of a present in front of them should not be shown.

• You may optionally begin and end lines with up to ten trailing spaces.
• You may optionally begin and end your output with up to seven additional newlines.

[Sandbox note: This is so that there can be up to one present width and depth around the drawn area. This question is supposed to be about drawing the boxes with occlusion, not working out how wide the drawing should be.]

For example, for the input given earlier, the output should look like (all four corners are given; your code need only return one at a time):

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

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

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

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

## Scoring

This is , so the shortest code wins. Standard loopholes are forbidden.

## Tests

1
+----+
/    /|
+----+ |
|    | +
|    |/
+----+
+----+
/    /|
+----+ |
|    | +
|    |/
+----+
+----+
/    /|
+----+ |
|    | +
|    |/
+----+
+----+
/    /|
+----+ |
|    | +
|    |/
+----+

010
101
010
+----+
/    /|
+----+----+----+
/    /|   /    /|
+----+----+----+ |
|   /    /|    | +
|  +----+ |    |/
+--|    | +----+
|    |/
+----+
+----+
/    /|
+----+----+----+
/    /|   /    /|
+----+----+----+ |
|   /    /|    | +
|  +----+ |    |/
+--|    | +----+
|    |/
+----+
+----+
/    /|
+----+----+----+
/    /|   /    /|
+----+----+----+ |
|   /    /|    | +
|  +----+ |    |/
+--|    | +----+
|    |/
+----+
+----+
/    /|
+----+----+----+
/    /|   /    /|
+----+----+----+ |
|   /    /|    | +
|  +----+ |    |/
+--|    | +----+
|    |/
+----+

11
+----+----+
/    /    /|
+----+----+ |
|    |    | +
|    |    |/
+----+----+
+----+
/    /|
+----+ |
/    /| +
+----+ |/
|    | +
|    |/
+----+
+----+----+
/    /    /|
+----+----+ |
|    |    | +
|    |    |/
+----+----+
+----+
/    /|
+----+ |
/    /| +
+----+ |/
|    | +
|    |/
+----+

01
10
+----+
/    /|
+----+----+ |
/    /|    | +
+----+ |    |/
|    | +----+
|    |/
+----+
+----+
/    /|
+----+----+
|   /    /|
|  +----+ |
+--|    | +
|    |/
+----+
+----+
/    /|
+----+----+ |
/    /|    | +
+----+ |    |/
|    | +----+
|    |/
+----+
+----+
/    /|
+----+----+
|   /    /|
|  +----+ |
+--|    | +
|    |/
+----+

2
+----+
/    /|
+----+ |
|    | +
|    |/|
+----+ |
|    | +
|    |/
+----+
+----+
/    /|
+----+ |
|    | +
|    |/|
+----+ |
|    | +
|    |/
+----+
+----+
/    /|
+----+ |
|    | +
|    |/|
+----+ |
|    | +
|    |/
+----+
+----+
/    /|
+----+ |
|    | +
|    |/|
+----+ |
|    | +
|    |/
+----+

101
121
010

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

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

# Ordinal Representation

A trick in code golfing, especially when digit usage in a source is restricted, is to use the ordinal values of characters to reach numbers. Instead of finding a representation for a single number, you will be finding an algorithm to represent any number in terms of ordinal values.

# Challenge

Given an integer N from stdin, print its representation as a sum, diference, and/or product of the fewest terms taken from the range [32, 47] + [58, 126] (symbolic non-numeric characters). Parentheses are not allowed, and standard order of operations is used. There are often multiple minimal representations possible, but any one of them is acceptable.

0 < N < 231

Score ranking in order of importance:

1. Shortest representation by number of terms
2. Shortest code by bytes

# Examples

47
/

14
=-/

2016
*?     //Spaces may be represented as is.

1999
\$*/-E

8675
U*d+K

10001
d*e-d