# What is the Sandbox?

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

To post to the Sandbox, scroll to the bottom of this page or click on the "Add Proposal" link below, and click "Answer This Question". Click "OK" when it asks if you really want to add another answer. Write your challenge just as you would when actually posting it. You may also add some notes about specific things you would like to clarify before posting it. Other users will help you improve your challenge by rating and discussing it. When you think your challenge is ready for the public, go ahead and post it, replace the post here with a link to the challenge and delete it.

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

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

# Successive operator sequences code-golfmatharithmetic

A successive operator sequence (made up terminology) is a sequence of the form $$\a(n + 1) = a(n) \text{ op } n\$$ where op cycles through a set of operators and $$\a(n)\$$ represents the $$\n\$$th term of the sequence.

For examples, if we set the operators to addition, multiplication and subtraction and $$\a(1) = 1\$$. then we will get the following sequence (which is also A047908):

a(1)                    = 1
a(2) = a(1) + 1 = 1 + 1 = 2
a(3) = a(2) * 2 = 2 * 2 = 4
a(4) = a(3) - 3 = 4 - 3 = 1
a(5) = a(4) + 4 = 1 + 4 = 5
a(6) = a(5) * 5 = 5 * 5 = 25


Write a program/function to output the $$\n\$$th term of a successive operator sequence given its initial term and operators.

• multiplication
• subtraction
• integer division (rounded towards negative infinity)

## Input Format

The operators are inputted as a string or array of character where each character represents an operator, you may choose your own mapping of character to operator.

## Scoring

This is so shortest bytes wins.

## Testcases

# first term, operators, n  ->  nth term
0,   ["+", "-", "*", "/"], 6   ->  4
1,   ["+", "*", "-"],      1   ->  1
1,   ["+", "*", "-"],      3   ->  4
1,   ["+", "*", "-"],      10  ->  199
1,   ["*", "+", "-"],      7   ->  -1
50,  ["*", "+", "-"],      1   ->  50
50,  ["*", "+", "-"],      4   ->  49
-10, ["*", "/", "-"],      5   ->  -32
-10, ["*", "/", "-"],      3   ->  -5
1,   ["+", "+", "*"],      5   ->  16
2,   ["+", "*"],           5   ->  36
0,   ["+"],                3   ->  3


Inspired by the sequence A047908

• Suggested test cases: only one operation; duplicate operations (like ["+","+","-"]); more than 4 operations. Also, should integer division round toward zero, toward negative infinity, or something else? – Zgarb Jul 18 at 19:10
• Does each string have to be one byte? – fireflame241 Jul 19 at 19:26
• @fireflame, they have to be a single character not a single byte. – Mukundan314 Jul 20 at 15:23
• Why rounding division towards negative infinity? A lot of languages round integer division towards zero and this will add complexity just to do that. Notice that A047908 doesn't use division at all so why add it and make it a problem? Maybe even make it optional which way your answer does it as long as it's stated. – Noodle9 Jul 27 at 17:59

# CoGo Rally

There's a game called Robo Rally, in which players "program" their robots five moves ahead, then simultaneously perform the moves, one at a time. The robots move over a "factory floor" grid, with the aim being to reach certain points on the board, in sequence, before the other robots do the same.

# Game Rules

For the purposes of this challenge, the rules will be simplified as follows:

• Each robot starts with 6 lives
• Each robot has a different, randomly assigned starting position (out of a fixed set of starting positions)
• The aim of the game is to reach all three checkpoints in the assigned order, before any other robot does the same.

## Movement Options

Each turn, your robot can make any one of the following movements:

• Rotate Clockwise 90 degrees
• Rotate Counter-clockwise 90 degrees
• Rotate 180 degrees
• Move Forward One
• Move Forward Two
• Move Forward Three [can only be used once until the next checkpoint is met]
• Reverse One (and stay facing the same way)
• Stay Still and gain 1 life, up to the maximum of 6

Your moves are pre-programmed in blocks of five, so choose carefully! The board may well be in a very different state in five moves time to what you think it will be.

Additionally, each movement is assigned a priority from 1-100. When you choose your block of five movements (you may use each movement any number of times, except the "move forward three", to form your five total movements) and the order they will occur in, you are also given five random numbers 1-100 to assign - one to each movement. Higher numbers will take priority where movements would cause two robots to enter the same space, for example.

## Board Items

The board contains the following items:

• Floor - the default tile on the board. No special effect.
• Walls - block a robot's path. If a robot moves forward or backward into a wall, it wastes that move (i.e. stays still, but doesn't gain a life). If the robot used "Move Forward Two", for example, it may be possible that the Robot can only move Forward One, and then stops infront of a wall, wasting the second part of the movement.
• Laser gun - fire in a straight line in a specific direction until they hit a wall or a robot. If a robot is ontop of a laser gun, it will be hit but the laser won't fire further. While moving forward two or three, a robot may pass over the path of a laser gun without being affected by it.
• Conveyor Belts - at the end of a turn (single movement option), a conveyor belt will move the robot one space in the direction the conveyor is pointing. Doesn't block lasers. Conveyor belts NEVER ROTATE ROBOTS, even if they move the robot in a different direction to the one it is facing. While moving forward two or three, a robot may move over a conveyor belt without being affected by it.
• Checkpoints (1,2,3) - act as a save point on the Robot's path and also heals all of a robot's lives and resets their use of the "Move Forward Three" action, the first time the checkpoint is visited. Checkpoints must be visited sequentially to be activated. Acts as a piece of floor in all other respects. Robots must END THEIR TURN ON THE CHECKPOINT, after interaction with other Robots; and not just pass over it.
• Holes - move the robot back to the previously visited checkpoint, or start position. Robot loses half its remaining life, rounded down. Holes act immediately, as soon as the robot enters the space - it doesn't wait for the "board interactions" part of the turn order.

## Interactions

Objects interact as follows:

• If a Robot moves into a space where another robot already exists, the other robot is shoved (moved) in the direction that the first robot was moving, one space; unless there is a wall or laser in the way. This effect may stack if multiple robots are in a line (i.e. all robots are shoved one space). This may cause a robot to fall into a hole or onto a conveyor belt.
• Moving off the edge of the board has the same effect as moving into a hole
• If a Laser fires and hits a robot, the robot stops the laser beam, and takes one damage.
• If a robot is facing another robot in a straight line with nothing blocking in between (i.e. no walls or other robots), the target robot takes 1 damage
• Therefore If two robots are facing towards each other with nothing blocking in between (i.e. no walls or other robots), both robots take one damage.

## Turn Order

1. determine (program) 5 movement options
2. determine Priorities (1-100) for these five turns
3. The programmed actions occur:
a. The first movement occurs for each player, in priority order from highest to lowest. Holes are acted on immediately (a robot cannot pass over a hole).
b. Robot Interactions are resolved (e.g. if one robot shoves another one)
c. Board Items act (lasers, conveyor belts, checkpoints)
i. If a robot loses all of its lives, it returns to the previous checkpoint (or start) with half lives (rounded up) and must sit out the remainder of the round d. Robots fire
i. If a robot loses all of its lives, it returns to the previous checkpoint (or start) with half lives (rounded up) and must sit out the remainder of the round e. Repeat for the remaining 4 movements
4. Repeat until one robot has reached all three checkpoints sequentially, or all robots have lost their lives

# The Challenge

Your robot must take the board (as a 2D array), and a seed for the Random number generator; and play the game on the given board.

The board is guaranteed to be solveable (there will always be a path from the start to each of the checkpoints)

# Sample Board

The above board would be represented in an array as follows:

[0,0,0,0,0,0,0,0,0,0,0,0]
[0,0,0,0,0,0,0,0,0,0,0,0]
[0,0,0,0,0,0,LU,0,0,0,0,0]
[0,0,0,0,0,LL,2,LR,0,0,W,0]
[H,CL,CL,CL,CL,CL,CL,CL,CL,CL,0,0]
[0,0,0,0,0,CR,CR,CR,CR,CR,CR,H]
[0,W,0,0,0,0,0 ,0,0,0,0,0]
[0,W,0,0,0,0,W,0,W,0,0,0]
[1,W,0,0,0,0,CR,CR,CD,0,W,3]
[0,W,CR,CR,CR,0,CU,H,CD,W,0,0]
[0,LL,CR,CR,CR,CR,CU,CU,CL,0,0,0]
[0,0,S,S,S,S,0,0,W,0,0,0]


Where

Cx = Conveyor (x=Up, Down, Left, Right)
Lx = Laser gun (x=Up, Down, Left, Right)
S = Start
1,2,3 = Checkpoints
W = Wall
H = Hole
0 = Floor



# Sandbox Questions

Should this be , where you implement your robot in the least code possible; or , or something else? If KotH, I've never set one before so some advice would be appreciated!

• (if this is code golf) is it guaranteed that there exists a solution on every boards? Or only boards such that a solution exists are valid input? – user202729 Jul 28 at 10:38
• Whether KotH or codegolf, the board will always be solvable (i.e. In all cases all of the checkpoints will be accessible, and there will be at least one path from any starting point to each of the checkpoints) – simonalexander2005 Jul 28 at 10:40

# Posted: Legendre's (Unsolved) Conjecture

• I did post such a challenge once which was well-received, though with language restriction. But posing an unsolved problem as a challenge directly is always risky as you already wrote. Also, a challenge being "simplistic" isn't a problem by itself, but involving prime numbers might be a problem, as it gives very little room for golfing in most languages (either requiring trial division boilerplate or having a built-in). – Bubbler Jul 28 at 4:20
• Regarding the last point -- yes, there was similar challenges before -- and if it stays unsolved for long-enough you can assume that it won't be proven while people are still interested in the challenge. And if someone, while trying to solve the challenge, manages to prove the conjecture then it is good. – user202729 Jul 28 at 10:41
• No, not KC. -- -- – user202729 Jul 28 at 10:42

# Migrate Try it online! to CommonMark

Try it online! generates old-style MarkDown code blocks which indent all lines with 4 spaces and then optionally precedes the block with a language comment.

Furthermore if the code block can't be parsed by old-style MarkDown (e.g. it has a leading newline, common in Retina answers), then it instead uses a <pre><code> block, with HTML escapes for all nonprinting characters.

Your program or function must take a whole TIO post, and change its code block into CommonMark style.

Examples:

# [Python 2], 16 bytes

<!-- language-all: lang-python -->

print "Python 2"

[Try it online!][TIO-kdaf9y51]

[Python 2]: https://docs.python.org/2/
[TIO-kdaf9y51]: https://tio.run/##K6gsycjPM/r/v6AoM69EQSkAzFcwUvr/HwA "Python 2 – Try It Online"


becomes

# [Python 2], 16 bytes

 python
print "Python 2"


[Try it online!][TIO-kdaf9y51]

[Python 2]: https://docs.python.org/2/
[TIO-kdaf9y51]: https://tio.run/##K6gsycjPM/r/v6AoM69EQSkAzFcwUvr/HwA "Python 2 – Try It Online"


which displays as

# Python 2, 16 bytes

print "Python 2"


Try it online!

while

# [Retina 0.8.2], 13 bytes

<pre><code>
Retina 0.8.2
</code></pre>

[Try it online!][TIO-kdafdbm1]

[TIO-kdafdbm1]: https://tio.run/##K0otycxL/P@fKwjMUDDQs9Az@v8fAA "Retina 0.8.2 – Try It Online"


becomes

# [Retina 0.8.2], 13 bytes



Retina 0.8.2


[Try it online!][TIO-kdafdbm1]

[TIO-kdafdbm1]: https://tio.run/##K0otycxL/P@fKwjMUDDQs9Az@v8fAA "Retina 0.8.2 – Try It Online"


which displays as

# Retina 0.8.2, 13 bytes


Retina 0.8.2


Try it online!

This is , so the shortest program or function that breaks no standard loopholes wins!

# The Dungeon Number Sequence code-golfnumberbase-conversion

### Introduction

The dungeon numbers are introduced by Numberphile, denoting a chain of base conversions. A dungeon number is denoted in the form $$a_{b_{c_{d_\cdots}}}$$ where all numbers involved are integers with at least two digits. When interpreting the values, each base conversion $$\a_b\$$ is treated as from base $$\b\$$ to base-10.

There are two types of dungeons, one starting from $$\10\$$ to $$\n\$$ from top to bottom, i.e. $$10_{11_{12_{\cdots_n}}}$$ increasing $$\1\$$ for each deeper layer, and one starting from $$\n\$$ to $$\10\$$ from top to bottom, i.e. $$n_{(n-1)_{(n-2)_{\cdots_{10}}}}$$ decreasing $$\1\$$ for each deeper layer. Each dungeon has two interpretations, top down, i.e. $$(((10_{11})_{12})_\cdots)_n$$, and bottom up, i.e. $$10_{(11_{(12_{(\cdots_n)})})}$$, producing 4 dungeon number sequences in total.

### Example

Considering $$10_{(11_{(12_{13})})}$$. The conversion is bottom up. First $$\12_{13}\$$ is converted to $$\15_{10}\$$. Then $$\11_{15}\$$ is converted to $$\16_{10}\$$. Finally $$\10_{16}\$$ is converted to $$\16_{10}\$$, and this is the value for $$\n=13\$$.

### Challenge

Write a program or function, given an integer $$\n>=10\$$ as input, output either the value of the dungeon number sequence at $$\n\$$, or the whole sequence from $$\10\$$ up to $$\n\$$ inclusive. You may choose any sequence from the 4 sequences, but you must state which you have chosen. You must not hardcode the values; your code must work theoretically for all integer $$\n>=10\$$.

### Values

n                                  10  11  12  13  14  15  16  17   18   19    20
---------------------------------------------------------------------------------
Type 1 (((10_11)_12)_...)_n        10  11  13  16  20  30  48  76  132  420  1640
Type 2 10_(11_(12_(..._n)))        10  11  13  16  20  25  31  38   46   55    65
Type 3 (((n_(n-1))_(n-2))_...)_10  10  11  13  16  20  28  45  73  133  348  4943
Type 4 n_((n-1)_((n-2)_(..._10)))  10  11  13  16  20  25  31  38   46   55   110


### Sample IO

• Type 1 ($$\(((10_{11})_{12})_\cdots)_n\$$)

15 => 30
20 => 1640
25 => 19563802363305

• Type 2 ($$\10_{(11_{(12_{(\cdots_n)})})}\$$)

15 => 25
20 => 65
25 => 943

• Type 3 ($$\(((n_{(n-1)})_{(n-2)})_\cdots)_{10}\$$)

15 => 28
20 => 4943
25 => 1092759075796059

• Type 4 ($$\n_{((n-1)_{((n-2)_{(\cdots_{10})})})}\$$)

15 => 25
20 => 110
25 => 3577


### Winning Criteria

This is a challenge, so shortest code for each language wins. No default loopholes.

# Poker for Two king-of-the-hillcard-games

This is a challenge to write bots to play the 1st and 2nd players in the following simple poker game.

Rules of the poker game

There are two players, A and B. Each antes $10 into the pot, and is dealt a card, which is a real number in the range [0, 1). A goes first, and may pass or bet. If A passes, then there is a showdown; the cards are revealed, and whichever player had the higher card wins the pot. If A bets, A chooses an amount $$\b\$$ to bet. $$\b\$$ must be an integer multiple of$1, in the range [$1,$100], and no greater than the amount of money A has at the time. A adds $$\b\$$ to the pot.

Then B may fold or call.

If B folds, A wins the pot with no showdown.

If B calls, B adds $$\b\$$ to the pot, and there is a showdown. B may not call if B has less than $$\b\$$ money at this stage.

Rules of the tournament and matches

The entries will compete in an all-play-all tournament consisting of matches.

Each match has two contestants (call them X and Y). At the start of the match, the tournament controller gives each contestant $500. There then follow a series of games, alternating games where X's A-bot plays Y's B-bot, and games where Y's A-bot plays X's B-bot. This will continue until either 50 games in the match have been played, or one contestant no longer has enough money to start (specifically, post their ante in) a further game. Interfaces of procedures in an entry An entry should contain C procedures which have the following prototypes: int a(const float x, const int m); int b(const float x, const int m, const int bet);  In a game where the bot is the A-player, the controller will call the function a(x, m) where x is the number given to the bot, who currently has$m money. $$\0\leqslant x<1\$$. a must return the amount (in $) the bot is to bet. If a returns 0 or a negative value, that means the bot will pass. Otherwise, the bot will bet the value returned by a,$100, or $m, whichever is the smallest. In a game where the bot is the B-player, the controller will call the function b(x, m, bet) where x is the number given to the bot, who currently has$m money, and the A-player has just bet an amount $bet. $$\0\leqslant x<1\$$. The controller calls b only if bet>0 because if A had passed, B does not get to act. It calls b only if $$\a\leqslant m\$$ because, if A had bet but B could not afford to call, B must fold. b must return 0 if the bot is to fold, and any other value if the bot is to call. In each match each contestant has allocated to it a 50-element array of ints. An entry may optionally supply procedures with the following prototypes: void writeState(const int i, const int x); int readState(const int i);  writeState writes the value x into the array's ith element ($$\0\leqslant i<50\$$). readState returns the value of the array's ith element ($$\0\leqslant i<50\$$). The array will be zeroed at the start of each match. X and Y will never be the same entry. So, even if you think each of your bots would be able to tell if its match-opponent is your other bot... it won't be. Each entry's tournament score will be the sum of its match-scores. [Note that each entry is pitted against every other entry, so all entries play equal numbers of matches.] Loopholes are forbidden, as is trying to cheat. No bot may try to read or write or tamper with anything external, including the controller or other bots. Sandbox questions Is the game too simple? I wanted a game where a complete analysis is not trivial, but where entrants might be able to find something out. How many players? I have presented the rules as for a 2-player game. What number of players do you think is best? The game is asymmetric, so anyone who wants to enter must write both an A-bot and a B-bot. I see some disadvantages to increasing the number of players. For one thing, the interface would be even unwieldier, so in that case I'd mandate a single function which takes an extra param, namely the bot's playing-order in the current game. For another, the more players, the more my challenge would (unfortunately) be like POKE. Figures The figures for limits and amounts of money specified above are provisional:$10 ante, $100 max bid,$500 per player at start of match, max 50 games per match. Any thoughts on how these might be improved? I want it to be likely that a match ends naturally by a player (eventually, after many games) no longer being able to afford the ante, but don't want it to be too easy for X to put Y into a position where Y cannot afford to call.

Format for cards

To make it as easy as possible for bots to read and parse what the controller deals them, I propose condensing the deal to just one value (representing one card) per bot. Following the precedent in POKE, I propose making this a float in the range 0.0 to 1.0. Is this best, or is integer in a specified range better?

Reveal the cards?

I propose that my controller will reveal, to both players, both cards dealt in the previous game, no matter how it ended. The idea is so that each bot can learn about the other's propensity to fold (and possibly bluff).

Is this best, or would it be better for my controller to follow poker etiquette by not revealing any card that isn't in a showdown? With the latter behaviour. it won't reveal either player's card to their opponent if B folded so A won the pot without a showdown.

Deal with or without replacement?

I was thinking of the cards for both players for all games being independent variables. If the game is felt to be too simple, would it be improved if, instead, cards were dealt without replacement from a pack $$\0,...,c-1\$$ with a shuffle whenever the undealt stock runs out? How many cards should be burnt after each shuffle? (I'd want to burn at least 2. I want it to be unlikely for a bot to know for sure that its card is unbeatable.)

How much memory to give each bot?

Is 50 floats to store state in a match enough? The controller needs to control the allocation of, access to, and freeing of, each bot's state-array, so it gets to say how big it is.

Schedule

If this proposal gets accepted for main, how long after posting it in main should I set the deadline for entries? Or may it be open-ended, so that I might run a tournament, and if I notice that someone's submitted yet another bot, I might run another.

New contributor
Rosie F is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
• or would it be better for my controller to follow poker etiquette by not revealing any card that isn't in a showdown?: When I've played poker (albeit digitally) the winner has the choice whether they show or hide their cards. That way, people can show if they were serious about their hand or hide the fact they bluffed. Allowing this system would also potentially add another interesting aspect to the challenge: do I reveal my "hand" or not. – Lyxal Aug 3 at 7:17
• Also, I recommend you deal with replacement - that's how usual poker works: the deck is shuffled after each round. – Lyxal Aug 3 at 7:19
• This game has no draws, so why shuffle after each round? That practically nullifies the effect of "no replacement" and has the bad effect of quantising the game to c possibilities for each bot's card. If you want each round's cards returned to the pack to be shuffled for the next round, you might as well deal floats in the range 0.0 to 1.0. (Or ints 0...c-1 with a very large c.) – Rosie F Aug 4 at 6:19
• @Lyxal It seems to me that, if a player were allowed to reveal or not reveal their card, "not revealing" dominates "revealing", so nobody would choose to reveal, so I might as well just not reveal, and save everyone the bother of indicating their choice. Any objections? – Rosie F Aug 4 at 6:22

# Where are the traps? code-golfnumbersequence

### Background Partially copied from my related challenge

The trapped knight sequence is a finite integer sequence of length 2016, starting from 1, and has the following construction rules:

1. Write a number spiral in the following manner:
17 16 15 14 13 ...
18  5  4  3 12 ...
19  6  1  2 11 ...
20  7  8  9 10 ...
21 22 23 24 25 ...
1. Place a knight on 1.
2. Move the knight to the grid with the smallest number it can go that has not been visited before, according to the rules of chess (i.e. 2 units vertically and 1 unit horizontally, or vice versa).
3. Repeat until the knight gets stuck.

It is known that the sequence ends at 2084 where the knight is trapped. But here is a twist. Suppose a knight can step back to the previous grid whenever it is stuck, and choose the grid with the next smallest number possible. By doing so, the sequence can be further extended until it is stuck again at 2720. Then, the knight steps back and choose another path, which further extends the sequence until it is stuck again at 3325...

Then, we call these numbers at which the knight is being trapped "traps". So we now know that the first few traps are at 2084, 2720, 3325, ... and it continues to infinity.

### Challenge

Write a shortest program or function, receiving an integer $$\N\$$ as input, output the first $$\N\$$ traps in the extended trapped knight sequence.

### Values

The first 100 terms of the sequence are as follows.

  2084,   2720,   3325,   3753,   7776,   5632,   7411,   8562,  14076,   8469,
9231,  22702,  14661,  21710,  21078,  25809,  27112,  24708,  19844,  26943,
26737,  32449,  31366,  45036,  37853,  37188,  43318,  62095,  67401,  68736,
70848,  62789,  63223,  69245,  85385,  52467,  71072,  68435,  76611,  84206,
81869,  70277,  81475,  83776,  70767,  84763,  99029,  82609, 103815,  86102,
93729, 100614, 108039,  82111,  99935,  85283, 109993, 119856, 119518, 116066,
109686,  92741, 124770,  92378, 104657, 125102, 107267, 107246, 117089, 117766,
99295, 121575,  98930, 117390, 123583, 112565, 122080, 111612, 111597,  97349,
105002, 130602, 133509, 153410, 127138, 143952, 153326, 157774, 122534, 136542,
163038, 134778, 140186, 162865, 171044, 159637, 171041, 174368, 184225, 152988


### Winning Criteria

The shortest code of each language wins. Restrictions on standard loopholes apply.

# Posted: Antisymmetry of a Matrix

• Mathematica: AntisymmetricMatrixQ (of course, a non-built-in solution can be much shorter). – my pronoun is monicareinstate Jul 30 at 13:12

# Is this Chessboard Reachable?

The goal of this challenge is to determine, given the state of a chessboard, whether or not that chessboard can actually be reached in the course of standard play. Of course, doing this in general is a rather hard problem, so we'll be simplifying the problem to a set of a few rules which should approximate the "reachability" constraint.

Your input will be a chessboard, specifying what pieces are at what positions on the 8x8 board. At each position, there can be either nothing or a piece. If there is a piece, it is either a pawn, bishop, knight, rook, queen, or king, and it is either white or black. Input can be taken in any reasonable form. Your output should be truthy or falsy, indicating whether all of the below rules are satisfied.

For the below rules, I'll be using standard chess notation to refer to the squares on the board. That is, I'll be referring to squares on the board by their rank (1-8) and their file (a-h), as such

 8........
7........
6........
5........
4........
3........
2........
1........
abcdefgh


where the white player starts on ranks 1-2 and the black player starts on ranks 7-8. Obviously, you don't have to use the same notation, and if it's easier for you to take the board input flipped or rotated, that's fine too as long as you specify it in your answer.

For one of the rules, you have to distinguish between white and black squares on the board. The board is layered with a checkerboard pattern, so white squares are always immediately surrounded by black on all four sides, and vice versa. In typical chess, the a1 square is black, but that doesn't really matter for the below criteria.

## The Rules

In order for a board to be considered reachable, it must satisfy all of the following rules. This is , so you don't have to tell me which rule an unreachable board violated; all I expect of your output is a "yes" or a "no".

1. White and black each have exactly one king on the board: no more, no less.

2. Pawns cannot appear on rank 1 or rank 8.

3. Each player has a maximum of 16 pieces on the board total. These pieces must be a subset of the following: 2 bishops, 2 rooks, 2 knights, 1 queen, 1 king, and 8 wildcards. The "wildcard" pieces can be any piece they please (since we assume pawns could have been promoted).

4. For either player, if that player has at least two bishops, and those two bishops cannot have been promoted from pawns (i.e. they must be the "bishops" in rule 3, not the "wildcards"), then that player must have at least one bishop on a white square and at least one bishop on a black square.

5. All of a player's pawns must be able to reach the square they're occupying. More formally, for each player, there must be an assignment (an injective function) from the set of that player's surviving pawns to the files (a-h) they started on, such that each pawn can reach its current position from its starting position with only forward and forward-diagonal movements.

## Pawn Movements

Rule 5 may require some elaboration. Suppose a white pawn is on d5. Then it could have come from the following places (indicated by X)

 8........
7........
6........
5...♙....
4..XXX...
3.XXXXX..
2XXXXXXX.
1........
abcdefgh


So it could have started on a2, b2, c2, d2, e2, f2, or g2, but not h2. There must be an assignment of pawns to starting positions such that no two pawns started at the same position and every pawn can reach its current position from where it began. A black pawn follows the same rules but started on rank 7 and moves down rather than up. So a black pawn at the same position could have come from b7, c7, d7, e7, or f7, as follows.

 8........
7.XXXXX..
6..XXX...
5...♟....
4........
3........
2........
1........
abcdefgh


## Notes

• Only the rules above apply. Other complexities of a standard game of chess (in particular, castling or en passant) are not part of this problem and should not be considered.
• This is , so the shortest solution wins.
• Input can be taken in whatever form is most convenient. Output follows the usual rules, so any two distinct outputs for truthy/falsy are acceptable.
• This is an oversimplification of the reachability problem in chess. As such, an answer which provably enumerates every chessboard and tests for membership is not correct.

## Examples

Reachable chessboards (true):

 8♜♞♝♛♚♝♞♜
7♟♟♟♟♟♟♟♟
6........
5........
4........
3........
2♙♙♙♙♙♙♙♙
1♖♘♗♕♔♗♘♖
abcdefgh

8........
7........
6........
5........
4........
3........
2..♚.....
1.....♔..
abcdefgh

8........
7.....♚..
6.♛......
5...♟....
4........
3.....♕..
2........
1...♔....
abcdefgh

8.....♚..
7♟♟♟♟♟♟♟♟
6........
5........
4........
3........
2♙♙♙♙♙♙♙♙
1....♔...
abcdefgh

8.....♚...
7♟♟♟♟♟♟♟♟
6........
5........
4........
3........
2♙♙♙♙♙♙♙♙
1....♔...
abcdefgh

8........
7.♚......
6...♕♕♕♕.
5..♕....♕
4..♕..♔.♕
3.......♕
2........
1........
abcdefgh

8........
7...♚.♟.♙
6.♙.♙..♙.
5.....♘..
4.♕..♕♘♗♖
3.....♘♗♖
2..♕....♖
1......♔.
abcdefgh

8♜..♛♚♜♜♜
7♟♟♟♟♟♟..
6........
5........
4........
3........
2♙♙♙♙♙♙♙♙
1♖♘♗♕♔♗♘♖
abcdefgh

8♜♞♝♛♚♝♞♜
7♟♟♟♟♟♟♟♟
6........
5........
4........
3........
2♙♙♙♙♙♙♙.
1♖♗♘♕♔♗♘♖
abcdefgh

8♛♛♛♛♛♛.♛
7........
6......♚.
5.♝.♝....
4.....♟..
3........
2..♖♖♖.♔.
1........
abcdefgh

8.....♚..
7........
6........
5........
4........
3.♙♙.....
2..♙♙♙♙♙♙
1.....♔..
abcdefgh

8.....♚..
7........
6........
5........
4........
3.....♙..
2...♙♙♙.♙
1.....♔..
abcdefgh

8.....♚..
7........
6.♟♟♟♟...
5.♟♟.....
4........
3........
2........
1.....♔..
abcdefgh


Unreachable chessboards (false):

(Rule 1: Not enough kings)

 8........
7........
6........
5........
4........
3........
2........
1........
abcdefgh


(Rule 1: Too many kings)

 8♚♚♚♚♚♚♚♚
7♚♚♚♚♚♚♚♚
6♚♚♚♚♚♚♚♚
5♚♚♚♚♚♚♚♚
4♚♚♚♚♚♚♚♚
3........
2........
1...♔....
abcdefgh


(Rule 2: Bad white pawn placement)

 8.....♚..
7♟♟♟♟♟♟♟♟
6........
5........
4........
3........
2.♙♙♙♙♙♙♙
1♙...♔...
abcdefgh


(Rule 2: Bad black pawn placement)

 8.♟...♚..
7♟.♟♟♟♟♟♟
6........
5........
4........
3........
2♙♙♙♙♙♙♙♙
1....♔...
abcdefgh


(Rule 3: Too many white queens)

 8........
7.♚......
6...♕♕♕♕.
5..♕....♕
4..♕..♔.♕
3..♕....♕
2........
1........
abcdefgh


(Rule 3: Too many black pieces)

 8♜♞♝♛♚♝♞♜
7♟♟♟♟♟♟♟♟
6......♟.
5........
4........
3........
2♙♙♙♙♙♙♙♙
1♖♘♗♕♔♗♘♖
abcdefgh


(Rule 3: Too many white pieces)

 8........
7...♚.♙.♙
6.♙.♙..♙.
5.....♘..
4.♕..♕♘♗♖
3.....♘♗♖
2..♕....♖
1......♔.
abcdefgh


(Rule 3: Too many black rooks)

 8♜..♛♚♜♜♜
7♟♟♟♟♟♟♟.
6........
5........
4........
3........
2♙♙♙♙♙♙♙♙
1♖♘♗♕♔♗♘♖
abcdefgh


(Rule 4: White bishops are the same color)

 8♜♞♝♛♚♝♞♜
7♟♟♟♟♟♟♟♟
6........
5........
4........
3........
2♙♙♙♙♙♙♙♙
1♖♗♘♕♔♗♘♖
abcdefgh


(Rule 4: Black bishops are the same color)

 8♛♛♛♛♛♛♛♛
7........
6......♚.
5.♝.♝....
4.....♟..
3........
2..♖♖♖.♔.
1........
abcdefgh


(Rule 5: White pawn placement is impossible)

 8.....♚..
7........
6........
5........
4........
3..♙.....
2.♙♙♙♙♙♙♙
1.....♔..
abcdefgh


(Rule 5: White pawn placement is impossible)

 8.....♚..
7........
6........
5........
4........
3.....♙.♙
2...♙♙♙.♙
1.....♔..
abcdefgh


(Rule 5: Black pawn placement is impossible)

 8.....♚..
7.♟♟♟♟...
6........
5.♟♟.....
4.♟♟.....
3........
2........
1.....♔..
abcdefgh


## Example Implementation (Python 3)

# Takes input from stdin in the form shown above (a grid of Unicode
# chess characters and dots). Prints True if reachable. Prints False
# and the first rule number which is violated if unreachable.

import sys
from collections import defaultdict, namedtuple

Piece = namedtuple('Piece', ['color', 'type'])

# Read in the data from stdin.
data = []
for line in sys.stdin:
chars = list(filter(lambda x: x in ".♟♙♝♗♞♘♜♖♛♕♚♔", line))
if chars:
data.append(chars)
if len(data) == 8:
break
assert len(data) == 8
for line in data:
assert len(line) == 8

# Parse it into a more convenient format.
translation = {
".": None,
"♟": Piece('black', 'pawn'),
"♙": Piece('white', 'pawn'),
"♝": Piece('black', 'bishop'),
"♗": Piece('white', 'bishop'),
"♞": Piece('black', 'knight'),
"♘": Piece('white', 'knight'),
"♜": Piece('black', 'rook'),
"♖": Piece('white', 'rook'),
"♛": Piece('black', 'queen'),
"♕": Piece('white', 'queen'),
"♚": Piece('black', 'king'),
"♔": Piece('white', 'king'),
}
for rank in data:
for i in range(8):
rank[i] = translation[rank[i]]

# Count the number of each piece that each player has, slotting
# necessary pawn promotions into their own category.
allowed = { 'bishop': 2, 'rook': 2, 'knight': 2, 'king': 999, 'queen': 1, 'pawn': 0 }
pieces = defaultdict(lambda: 0)
for rank in data:
for piece in rank:
if piece is None:
continue
if pieces[piece] >= allowed[piece.type]:
# Already have too many; it's a promoted pawn
pieces[Piece(piece.color, 'pawn')] += 1
else:
# Count it normally
pieces[piece] += 1

# Rule 1: Each color should have exactly one king.
if pieces[Piece('white', 'king')] != 1 or pieces[Piece('black', 'king')] != 1:
print(False, 1)
exit(0)

# Rule 2: Pawns cannot appear on rank 1 or rank 8.
for piece in data[0] + data[7]:
if piece is not None and piece.type == 'pawn':
print(False, 2)
exit(0)

# Rule 3: Since we already put any "overflow" pieces at the pawn key,
# we just need to make sure we have at most eight pawns.
for color in ['white', 'black']:
if pieces[Piece(color, 'pawn')] > 8:
print(False, 3)
exit(0)

# Rule 4: If we have both bishops and our pawns are all accounted for,
# then we have to have a bishop in each color.
for color in ['white', 'black']:
if pieces[Piece(color, 'bishop')] >= 2 and pieces[Piece(color, 'pawn')] >= 8:
squares = { 'white': False, 'black': False }
for y, rank in enumerate(data):
for x, piece in enumerate(rank):
square_color = 'white' if (x + y) % 2 == 0 else 'black'
if piece == Piece(color, 'bishop'):
squares[square_color] = True
if not (squares['white'] and squares['black']):
print(False, 4)
exit(0)

# Rule 5: All pawns must be able to get to where they are. I solve
# this here by brute force (simply trying every possible permutation),
# which is exponentially inefficient, but it'll do for this example.
def recursive_assign(taken, choices, i):
if i >= len(choices):
return True
current = choices[i]
for x in current:
if x not in taken:
if recursive_assign(taken + [x], choices, i + 1):
return True
return False

for color in ['white', 'black']:
starting_file = 6 if color == 'white' else 1
choices = []
for y, rank in enumerate(data):
for x, piece in enumerate(rank):
if piece == Piece(color, 'pawn'):
possibilities = range(8)
possibilities = filter(lambda i: abs(i - x) <= abs(y - starting_file), possibilities)
choices.append(list(possibilities))
if not recursive_assign([], choices, 0):
print(False, 5)
exit(0)

print(True)


## Sandbox Concerns

• I worry Rules 4 and 5 are still not clear enough. I tried to write them in a way that was as clear as possible while still being mathematically unambiguous.
• too long. try to combine rules or at least don't draw so many of them in a column – Noone AtAll Aug 4 at 9:06
• If you're going to use unicode chess symbols, use a double-wide filler character instead of .. The alignment in your examples is off, making it very distracting. I'd recommend switching them to ASCII letters using the typical KQRBNP convention. – Beefster Aug 4 at 16:40
• To add to Beefster's comment, in some fonts the chess symbols are not even double wide, they're somewhere in between. So double-wide fillers won't work either. +1 for ASCII notation. – Bubbler 2 days ago

# Can I exit the maze with this many bombs? code-golfgridmazedecision-problempath-finding

Inspired by this Puzzling challenge, and easier version of my previous challenge.

## Challenge

A 2D rectangular grid is given, where each cell is either an empty space or a wall. You start at the top left cell, and you need to exit through the bottom right cell. You can move to one of four adjacent cells in one step.

You have some bombs, so that using one bomb will let you break exactly one cell-sized wall and go through it. Can you exit the maze using just what you have?

## Input and output

The input is the maze and the initial number of bombs. The maze can be taken as a matrix (or any equivalent) containing two distinct values to represent empty spaces and walls. The top left and bottom right cells are guaranteed to be empty. The number of bombs n is always a non-negative integer.

The output should be truthy if you can exit the maze using n or fewer bombs, falsy otherwise. You can output truthy/falsy using your language's convention (swapping is allowed), or use two distinct values to represent truthy or falsy.

Standard rules apply. The shortest code in bytes wins.

## Test cases

Uses .# for spaces and walls.

Input maze
..#..#..
Output: false (for 0 or 1 bomb), true (≥2 bombs)

Input maze
.....
####.
.....
.####
.....
Output: true (for any bombs)

Input maze
.
Output: true (for any bombs)

Input maze
.#.#.
##.##
.###.
Output: false (for ≤2 bombs), true (≥3 bombs)

Input maze
.####
#####
##.##
#####
####.
Output: false (for ≤5 bombs), true (≥6 bombs)


# The Ever-Changing Labyrinth (WIP)

This is a 2-player asymmetric KotH challenge.

• One player controls the adventurer and must reach the end
• The other player has the ability to change the maze and tries to keep the adventurer from solving it

## Gameplay

At the beginning of the game, the Maze Master creates a $$\5 \times 5\$$* maze.

Every cell of the maze must always be reachable from every other cell.

The adventurer begins facing east on the northwest corner cell and wins by reaching the southeast corner cell.

The game proceeds in a turn-based fashion, alternating between each player.

• Observes its surroundings:
• The wall directly ahead on the current cell is observed
• If there is no wall directly ahead on the current cell, every wall is observed along each cell ahead in a straight line until a wall obstructs the adventurer's sight
• The walls on the left and right of the current cell are observed
• If there is no wall to the left, the wall ahead on the cell to the left can be observed
• If there is no wall to the right, the wall ahead on the cell to the right can be observed
• Either moves forward, changes orientation, or waits
• The maze master, in order:
• Receives one mana, which can be used to modify the maze
• Observes the entire maze, including the position and orientation of the adventurer
• May remove a wall from anywhere in the maze that is not currently visible to the adventurer
• May add a wall to anywhere in the maze that is not currently visible to the adventurer, provided it does not separate the maze into two unconnected halves.

TODO: Create some visuals to demonstrate how adventurer vision works

The cost to modify the maze increases linearly over time. Each edge segment (i.e. slot where a wall can go) of the grid remembers how many times it was added or removed. The first time you add or remove that edge segment, it costs 1 mana, the second time costs 2 mana, the third time costs 3 mana, and so forth. This should make it impossible to trap even the smartest adventurer forever.

The maze master can stockpile an arbitrarily large amount of mana, but can only change two walls per turn (removing one, then adding one)

*Board size might go up or down a size. A 2x2 maze is trivially solvable and provides no opportunities to edit the maze. A 3x3 maze is manageable for human gameplay and is probably too simple for interesting AIs. I suspect 4x4 is still too small. I'm hoping 5x5 strikes a good balance between being big enough for it to be interesting for AIs, but small enough that games can be run quickly and watched turn by turn. 6x6 may be more appropriate, but some preliminary proofing will be needed to determine if this will still be manageable. My best guess is that game duration is cubic relative to the half-perimeter of the board.

## Coding

Both players may retain as much state as they wish for the entire duration of the game. State will not be remembered between games. Players will not be able to access the state of the other player and must not use global variables. Each player will receive an isolated RNG state at the beginning of the game.

Each turn has a time limit of 15ms.

## Scoring

Adventurers compete only with other adventurers, and the same goes for maze masters.

Both roles are scored by the average number of turns it takes for the adventurer to complete the maze over a series of 5 games between each pair of players. If a game lasts for 10,000 turns without the adventurer completing the maze, the score will be 10,000 for that game. If this number turns out to be too small, I reserve the right as the challenge creator to increase it.

The adventurer with the lowest score wins.

The maze master with the highest score wins.

Scores will be updated when a adventurer or maze master is added or updated.

• Should this be separated into two separate pages when posted?
• I'm not sure what the challenge controller should do for disqualified adventurers and adventurers that are unable to win.
• Assumes that the maze master will only wait if the adventurer waits, would that always make waiting a bad choice for the adventurer? – user202729 17 hours ago
• Does "not visible" mean "not visible at the moment"? – user202729 17 hours ago
• Is the "increase over time" by power of 2 or linear? – user202729 17 hours ago
• @user202729 waiting is probably never a good idea for the adventurer, yes, and linear. – Beefster 13 hours ago
• Would the score of every maze master change whenever an adventurer program is posted, and vice versa? – user202729 13 hours ago
• Perhaps "if the game doesn't terminate after X turns then the score will be X", with X large enough such that the optimal adventurer can always achieve a score smaller than X (but small enough so it's practical to compute) – user202729 13 hours ago
• Regarding language: if the challenger is implemented in some language that can invoke other programs (such as JavaScript (Node.js)), then it's possible to communicate over standard input/output and let people submit in any language. – user202729 13 hours ago
• There should be some time limit for each turn. – user202729 13 hours ago
• @user202729 A couple reasons why I probably won't communicate over stdin/stdout: 1. it can be tricky to avoid deadlock; 2. I want the challenge to be accessible to many users without requiring them to download additional language runtimes. – Beefster 3 hours ago

## Write a compiler/interpreter for ...

Inspired by the lisp challenge here.
It is a series of puzzles.

I don't like to see a simple eval solution, so:

• interpreting the language is fine
• translating the language to a different language is fine.

I think this is specific for each language.

Only the syntax and the basic commands.
Also specific.

Winning criteria should not be code golf.
The goal should be that you can "learn" an other language by looking at the code.

Languages that might be good candidates:

• Lisp
• APL
• J
• Whitespace
• Forth
• This only works for languages which are small and well defined. BF fits those criteria. Whitespace does too. The others may not. Lisp and Forth have so many dialects that you would have to specify exactly which dialect to support; Lisp, Forth, APL and J might have too many built-ins to fit in an answer: there are character limits. – Peter Taylor May 12 '13 at 15:16
• You don't have to provide all the built-ins, but that is why it is here. – Johannes Kuhn May 12 '13 at 15:38
• What defines the "basic commands"? – ASCIIThenANSI Aug 31 '15 at 17:54
• I don't know? Maybe that you can do the basic stuff with it like +,-,print,... – Johannes Kuhn Aug 31 '15 at 18:22
• I suggest a programmer can implement the tiniest subset of those languages in order to be Turing-complete, as these are non-trivial subsets that can theoretically simulate the rest of the language... – user85052 Jun 28 '19 at 4:17
• Which human is learning the programming language by looking at the code? – MilkyWay90 Aug 26 '19 at 3:23

# Find Maximum number of 4+ letter words from Scabble Tiles

The challenge is to find the most words with 4 or more letters you can make with one set of scrabble tiles.

The tile distribution is as follows:

2 Blank Tiles
A 9  N 6    +====+===========+
B 2  O 8    | 01 | K J X Q Z |
C 2  P 2    | 02 | B C M P F |
D 4  Q 1    | 02 | H V W Y * |
E 12 R 6    | 03 | G         |
F 2  S 4    | 04 | L S U D   |
G 3  T 6    | 06 | N R T     |
H 2  U 4    | 08 | O         |
I 9  V 2    | 09 | A I       |
J 1  W 2    | 12 | E         |
K 1  X 1    +====+===========+
L 4  Y 2
M 2  Z 1


Valid words are any words that are 4+ that are available in this file, the official scrabble dictionary.

Tiles cannot be used twice. This means you can only have 1 word with a K, J, X, Q, and/or Z unless you use a blank tile to represent one of these letters.

I'm not sure how I'd do scoring on this. I want shorter code to score better, but I don't want a short piece of code that finds a lot less words to score better than a longer piece that finds many more words.

• Meh. I don't like dependency on external files; are we allowed to load it, or even embed it into the source code? – John Dvorak Dec 17 '13 at 20:00
• as for finding more vs. shorter code, you could demand all words be found – John Dvorak Dec 17 '13 at 20:19
• @JanDvorak Any way to use it. It's a text version of the official scrabble dictionary, it seemed to be the most fitting word list for the task. "All words being found" might be hard, considering there are probably many combinations of words that would deplete all the tiles. It's a maximum of 25 words, (25 words, 4 letters each, 100 tiles), but I don't know if it's possible to use all tiles with just 4 letter words. After so many words, you might not have enough tiles to make an actual word, which means you'd either have to go back or accept that you're not using all the tiles. – Rob Dec 17 '13 at 20:23
• As currently described, this is a no-input task, which means that the answer can be precomputed and then the program only needs to decompress it. Consider rewriting it to take input (either of the word list or of the tiles available). – Peter Taylor Dec 18 '13 at 8:01
• I suggest taking a list of tiles as input, loading the list of words from a predefined file and requiring all combinations / best combination to be found. Of course, if the input is the full list of tiles, the computation is going to take ages. I might allow preprocessing the word list outside the program itself (up to a certain point; a linearithmic growth?) – John Dvorak Dec 18 '13 at 8:32
• I suggest modifying this so that input is a list of tiles, limited to a full rack or less (therefore 4-7 tiles, since our minimum word length is 4). Input should be assumed to be valid based on the standard set of tiles (e.g.: it wont' have something like 3 J's or 4 G's). This would have some practical use for a player in a scrabble game to figure out their next move (though it does not take into account tiles available to them which are already on the board). – Iszi Dec 18 '13 at 21:14
• Alternative mode: Input is a list of tiles, maximum 96 (so that at least 4 are remaining in the set). Output only includes words (minimum 4 letters) which can be created without those tiles. This would be interesting as it provides words that may yet be created (though, again, not taking into account usable tiles on the board) at a given point in the game. – Iszi Dec 18 '13 at 21:15
• Output needs to be decided as either a list of all possible words, or only the highest-scoring word(s). Another enhancement may be to require that the list be sorted descending in order of score (if output is all words), then ascending alphabetically. There's no reason to take each program's output into account for scoring. Since everyone is expected to use the same dictionary, all programs' outputs should be identical (except perhaps in sorting, if that's left out of the spec). So, this should be Code Golf. – Iszi Dec 18 '13 at 21:15
• It's also worth noting that, as currently written, the task could just be to filter the given dictionary down to words which have 4 or more letters. By its very nature, the Scrabble dictionary should already exclude any words that cannot be made with a Scrabble set. – Iszi Dec 18 '13 at 21:18
• @Iszi it's not "what are all the words you can make", it's "what are all the words you can make, where every letter used depletes a tile". There's a max of 25 words if you can use all 100 tiles. – Rob Dec 19 '13 at 16:40
• I think I misunderstood the problem, then. I thought it was "all the words possible using a set of tiles" not "all the words possible, using only one set of tiles". Still, my point about code golf remains. There is an absolute maximum to the number of words (each with 4 or more letters) you can make with a single Scrabble set, and a finite number of permutations which can be used to hit that maximum. Every program written with this goal should end up with the same (or nominally similar) output. – Iszi Dec 19 '13 at 16:56

# Test for Irreducible Complexity (Check for Redundant Characters)

I may need some additional help coming up with the full spec for this competition. As of right now, this is just a concept.

Many interesting questions, such as the "42" question in this sandbox, involve finding the longest program which is not reducible. This means that no set of characters can be removed and still allow the program to function as desired.

The basic idea is that your program will test a Base Program to make sure that it contains no redundant characters. The input will consist of:

• Expected Output

Your program will simply evaluate all possible subsequences of the Base Program and verify that none of them give the Expected Output.

This challenge actually has a utility value to several other challenges. For example, it verifies the results of a "longest non-reducible"-type challenge. In addition, it could make sure that a golfed solution cannot be golfed further.

I assume that the winning criteria will be fastest program, as cycling through all the possibilities takes a long time.

## Problems

A sequence of length N has 2^N subsequences. Even if each evaluation is done very quickly, it might be unfeasible to test any program with more than 20 or so characters in a reasonable amount of time.

• Problem: some subsequences of legitimate answers may be pretty dangerous to the environment. You don't want to eval just everything. – John Dvorak Dec 23 '13 at 16:59
• @JanDvorak Yes that actually is a serious problem. To what extent is it possible to fix that? – PhiNotPi Dec 23 '13 at 17:04
• Forbidding any program with dangerous subsequences? :-) – John Dvorak Dec 23 '13 at 17:05
• A more reasonable (but very difficult) solution would be the requirement to implement a sandbox. – John Dvorak Dec 23 '13 at 17:07
• Even without dangerous behavior, the halting problem will be an issue: it's hard to tell whether a shortened program will terminate at all, especially for every conceivable input. – MvG Jan 7 '14 at 23:49

# Popularity Contest: Implementation of a Hash Table

Create a class in some OOP language for a hash table that supports getting, setting, and removing values. You can't use the built in hash table/dictionary/map implementation. Highest votes in one week wins.

A key is any valid string. A value is any valid string, number, or boolean.

Example functionality:

hash.set("key","value");
hash.get("key"); // returns "value"
hash.set("key", 1234);
hash.get("key"); // returns 1234
hash.set("key2",hash.get("key"));
hash.get("key2"); // returns 1234
hash.delete("key");
hash.get("key"); // returns null/undefined/none/etc. or throws an error
hash.get("key2"); // still returns 1234


Definition of a hash table (from Wikipedia):

In computing, a hash table (also hash map) is a data structure used to implement an associative array, a structure that can map keys to values. A hash table uses a hash function to compute an index into an array of buckets or slots, from which the correct value can be found.

The hash table cannot be simply an array that is searched in linear time. It must be an actual hash table that uses a hash function to map the keys to the value.

• Popularity contest and shortest don't mix. That aside, the spec is too vague. What is a "value"? What assumptions can be made about hashcodes? If the language makes all types nullable, should null be permitted as a key? What should the type be in languages which have co- and contravariance? And for that matter, what qualifies as a "hash table", bearing in mind that people will try to exploit any loophole? – Peter Taylor Jan 2 '14 at 23:16
• @PeterTaylor Thank you for the feedback! Please see my edits, and let me know what you think. Could you meant about co/contravaraince? I looked at the wikipedia article about it but I'm not really sure how that has anything to do with this question. – hkk Jan 2 '14 at 23:37
• I think it's still vulnerable to the loophole of "I have a hashtable with one bucket" (i.e. it's really a list of (key, value) pairs which I traverse in linear time). The thing about variance is to do with static typing of the elements of the map. E.g. in Java Map<String, Integer>'s get method has signature public Integer get(Object); in C#, a Dictionary<string, int>'s Get method has signature public int Get(string). The edited version makes it clear enough that the hashtable isn't expected to be genericised. – Peter Taylor Jan 3 '14 at 0:08

# Wordlist detector

You are to write a program which, given a list of words, constructs a regular expression to match all these words but nothing else. Both your program and the constructed regular expressions are to be as short as possible.

## Input and Output

Input comes on standard input and consists of one line giving n, the total number of words, followed by n lines with one word each. The number of words will be less than 1000, the length of each word less than 30. Words will consist only of lower case ASCII letters, i.e. a-z. You may choose to ignore the first line and use EOF instead to end the list.

Output shall be written to standard output. It consists of a single line, giving a POSIX extended regular expression to match these words and no others. Since input for this regex is not restricted to letters only, elements like . or [^…] won't make too much sense, which limits the language in a natural way. You may choose whether you want to terminate the line with a newline or not. Programs may choose to print multiple lines of output, in which case only the last one will be used for scoring. So you might print intermediate results and continue searching for improvements.

## Test cases

Each submission may be accompanied by one regular expression. When scoring the submissions, I'll use this regular expression to reconstruct a word list from it. The code to do this reconstruction can be found at the end of this post. The reconstructed word list must fit the input specification above in terms of word count and length. It would be nice if your own program would be able to regenerate that regular expression from the word list, but that is not a strict requirement. But please don't paste bogus programs just to submit a challenging regular expression, though.

These test cases will be collected and fed to all programs for scoring.

## Scoring

The final score of each program will be the program size plus the size of all its generated regular expressions for the inputs collected from submitted answers, including the example from this question. So short code which produces too long results might get beaten by longer code which generates shorter expressions.

Does this still qualify as ?

Submissions which generate an incorrect regular expression for one of the test cases will be disqualified, as will those which don't terminate in the allotted time. You can use the input reconstruction program below to check whether a produced regular expression does encode the correct word list.

## Requirements

All submissions are welcome, but in order to include your submission in the tournament, it must be executable with reasonable effort on my Linux machine. It shouldn't depend on any exotic libraries, or any specialized ones which take too much work away from your own program. It must operate in reasonable time, say no more than five minutes per input. Your output must be reproducible, so if you use randomization at some point, please seed the randomizer, and please don't terminate an improove loop by a timer measuring execution time or some such.

## Tournament times

I'll run the first major tournament two weeks after posting this question. I'll include a table of the results in this question. I'll try to run tournaments repeatedly as late submissions arrive, but I'll not promise any regular schedule.

## Example

An very simple example application would be in Python 3 (53 chars):

print('|'.join(input() for i in range(int(input()))))


And here is a test case which could be posted along with the program, although this program obviously doesn't generate exactly this concise output:

bann?ana|ap(fel|ple)|s[ou]n|[hs](a|ou)nd


The expansion of that expression could be turned into the following example input, which need not be posted as part of an answer since it can be deduced from the regular expression:

10
banana
bannana
apfel
apple
son
sun
hand
hound
sand
sound


## Regex expander program

And here is a program to turn regular expressions into word lists, again written in Python 3.

#!/bin/env python3
concat = set(('',))
altin = set(('',))
altout = set()
prev = None
stack = []
regex = iter(input())
for ch in regex:
if ch == '(':
stack.append((concat, altin, altout))
altin = concat
altout = set()
prev = None
elif ch == ')':
concat.update(altout)
prev, altin, altout = stack.pop()
elif ch == '|':
altout.update(concat)
concat = altin
elif ch == '[':
ch = regex.__next__()
cls = []
while ch != ']':
if ch == '-':
crange = range(ord(cls[-1]), ord(regex.__next__()) + 1)
cls.extend(map(chr, crange))
else:
cls.append(ch)
ch = regex.__next__()
prev = concat
concat = set(w + c for w in prev for c in cls)
elif ch == '?':
concat.update(prev)
prev = None
elif ch >= 'a' and ch <= 'z':
prev = concat
concat = set(w + ch for w in prev)
else:
raise Exception("Illegal input")
if stack:
raise Exception("Unclosed group")
concat.update(altout)
words = sorted(concat)
print(len(words))
print('\n'.join(words))


This is restricted to the part of regular expression syntax which I expect for this answer. If you have good reason to use something I did not consider, feel free to do so although I will likely have to update this code to cope with it. If you find a bug, please let me know.

• This is just Meta regex golf under the constraint that the two lists between them cover all possible words. Given that some people are tackling that existing question on that basis, this would qualify for closing as a duplicate. – Peter Taylor Jan 8 '14 at 8:45

## Code-Golf: Write a number as an expression that's as short as possible

The goal of this code-golf is to create a program that takes a number as input (using STDIN, command line arguments, or prompting for input), and outputs that number, but written as an expression that's as short as possible. So, 10000 should become 10^4. If there is no way to write an expression that's shorter than the number, then output just the number.

### Other rules

1. No network access.
2. You're not allowed to execute an external program.
3. Only use the operators +, -, *, / and ^ (that's raising power, not XOR).
4. Order of operations must be taken in account. Use parentheses if necessary.
5. This is a code golf, so the code with the smallest amount of characters wins.
6. The input will always be smaller than 2^32.

### Test cases

500000000   -->    5*10^8     or    10^9/2
999999      -->    10^6-1
10          -->    10
4294967295  -->    2^32-1
16384       -->    2^14


## Rhymalator

(at the point, it's just something that came to me before i wake up, so it may need some adjusting, and i'd like some feedback as to if this could be fun)

The code challenge is to write a program that takes as input a calculation in Reverse Polish Notation and outputs the result. It must at least implement + - * /. It So far so easy, but to make it fun and "artistic", the following restriction applies:

• The source code must rhyme when read. Example in PHP

$iterator = str_split($a);
foreach ($iterator as$key=>$value){ if ($key > 3){
++$virtue; } }  (the rhyme is on value-virtue) • Lines whitout readable characters count as whitespace (the two lines with } in the example) • How does that example rhyme...? – Doorknob Jan 25 '14 at 12:54 • @DoorknobofSnow well, i'm not really a poet, that's why i propose it as a challenge for others :p. if you have a better example i'll replace it – Einacio Jan 27 '14 at 15:58 # Implement Kalah code-golf The game of Kalah is a two-player board game in the Mancala family. Your implementation must: • Identify the active player ("Player 1" or "Player 2") • Display board state (in format specified below) • Accept input to allow that player to move (using index system below) • Announce a winner ("Player N wins") # Overview Each player has a line of six spaces, called houses, and one additional space called a store. Each space holds seeds, which move from house to house in a counter-clockwise direction. The objective is to fill your store with seeds. You must represent the board in the following two-row format with stores offset, where HH is a house and SS is a store: SS HH HH HH HH HH HH HH HH HH HH HH HH SS  The top row represents the number of seeds in player #1's spaces, and the bottom row represents the seeds in player #2's spaces. The S in each row is the respective player's store (player #1's is top-left, #2's is bottom right). Single-digit values should include a leading space. In this challenge, user-input will identify each house numerically. Use a left-to-right, indexed-from-one scheme for both sides: S 1 2 3 4 5 6 1 2 3 4 5 6 S  Note that the players' stores are not numbered, because seeds placed in the store never move out. ## Rules Wikipedia has a good summary of the game and its rules: 1. At the beginning of the game, three seeds are placed in each house. 2. Each player controls the six houses and their seeds on his/her side of the board. His/her score is the number of seeds in the store to his/her right. [Clarification: from our perspective, player 1's store is to the left, player 2's store is to the right.] 3. Players take turns sowing their seeds. On a turn, the player removes all seeds from one of the houses under his/her control. Moving counter-clockwise, the player drops one seed in each house in turn, including the player's own store but not his/her opponent's. 4. If the last sown seed lands in the player's store, the player gets an additional move. There is no limit on the number of moves a player can make in his/her turn. 5. If the last sown seed lands in an empty house owned by the player, and the opposite house contains seeds, both the last seed and the opposite seeds are captured and placed into the player's store. [Clarification: moves that end on an opponent's empty house end normally without a capture.] 6. When one player no longer has any seeds in any of his/her houses, the game ends. The other player moves all remaining seeds to his/her store, and the player with the most seeds in his/her store wins. # Example (Parenthetical text should not appear in actual output.) Player 1 0 3 3 3 3 3 3 3 3 3 3 3 3 0 > 2 (prompt arrow and line break are purely optional) Player 2 1 1 0 3 3 3 3 4 3 3 3 3 3 0 > 4 Player 2 (P2 gets a bonus turn from rule #4) 1 0 3 3 3 3 3 4 3 3 0 4 4 1 > 5 Player 1 1 0 3 3 3 4 4 4 3 3 0 0 5 2 > 4 Player 1 (P1 captures P2's seeds in space 1) 6 0 4 4 0 4 4 0 3 3 0 0 5 2 ... Player 2 12 0 0 10 0 1 0 0 0 0 0 0 1 13 > 6 Player 1 wins (because the non-finishing players gets all remaining seeds on their side, it's 23-14)  Meta question: Would this be improved by removing some of the rules? • Do the players run the game once and then take it in turns to take moves, with the process ending only when the game ends? Or do they run the program once per move? – Peter Taylor Jan 30 '14 at 10:06 [This is the first time I'm using the sandbox. I want to get feedback/suggestions before posting the question.] Make a spider web (standard, orb type) that fills frame in the ratio of n:m, where n, m are input integers. You may use the example below as a model (but you don't need to use labels). Your web should have multiple radii, at least 4 of which attach directly to the frame. The remaining radii should attach to the outer outline (perimeter) of the web. The web should have at least 15 radii. The mesh spacing should be more or less uniform spacing (although occasional weaving mistakes" or crossings are encouraged and will receive a bonus). This is code-golf, so the shortest code (minus bonuses) wins. Bonuses (to be removed from the number of characters in your code). Bonuses are awarded for the following features that reflect the architecture of an actual web (as opposed to a perfectly symmetric rendering). They are somewhat greater than usual as an incentive for attention to detail and realism. -mesh spiral instead of concentric circles: 40 pts -assymmetric web: 31 pts. (e.g. height of capture area greater than width) -irregularly spaced radii: 42 pts -distinct segments between radii (straight or crooked, but not the arc of a circle): 32 pts -outer and inner outline clearly distinct from the spiral: 41 pts -irregular outer outline: 20 pts -2 or more easily observable reverses in spiral: 40 The accept will be awarded on Feb. 20, 2014. • If there are bonuses then it isn't code-golf, by definition. It's not clear what output formats are acceptable. I'm not sure what you mean by "distinct segments between radii". "2 or more easily observable reverses" seems problematic: the ease of observing reverses is subjective, and might in addition depend on input and/or on the random numbers obtained. The weighting for the bonuses seems very arbitrary: is there any justification for it? – Peter Taylor Feb 3 '14 at 11:49 • Re: bonuses, I should probably decide on the features I want included in the web, thereby eliminating bonuses altogether. Distinct segments means that there should be 2 straight mesh segments between radius n and radius n+2 (not sure whether this should be required in instructions to be updated.) Will give reverses more thought. – DavidC Feb 3 '14 at 12:02 ## Write a PHP Code Golfer code-challenge Since my currently daily programming is in PHP, I tend to try the challenges on the site using that language, but frequently I large program because of the verbosity of the language. And then I have to strip it for presentation... But this is not a tips question, it's an eviscerating challenge. The objective is to write a program in the language of your choice that takes a PHP file and outputs a golfed valid PHP file with the same functionality. The scoring will be the average reduction in percent of the result of running the program with 3 selected files (not yet selected, I was thinking of some open source library) The output file should run on at least 5.4 (so shorthand arrays, function dereference, traits are available) Since the score is the difference between the ungolfed and golfed files, techniques beyond minifying are encouraged, such as using code subtitution, eval, compression,$$(variable variables), dereferencing... Scoring example: The 3 sources have 450, 1200 and 3500 chars respectively Answer 1 results lenghts: 250, 1000, 3300 reduction: 200, 200, 200 (44%, 17%, 6%) average: 22% Answer 2 results lenghts: 350, 1050, 3150 reduction: 100, 150, 350 (22%, 13%, 10%) average: 15% In this case Answer 1 would win, even tough both answers got the same total reduction (-600 chars) • It's a specialisation of codegolf.stackexchange.com/q/3652/194 , so would likely be closed as a duplicate. – Peter Taylor Feb 4 '14 at 22:44 • @PeterTaylor I saw it. is similar, but I include an objetive goal and score. have any idea on how to make it more unique? – Einacio Feb 5 '14 at 2:43 • "Making it shorter" is too broad, can I just delete some comments? If not, can I only shorten one variable and it's ok. It's not very interesting like this... – Fabinout Feb 5 '14 at 9:56 • @Fabinout the objective is golfing the code. If you only remove some characters, I doubt you'll get a good score – Einacio Feb 5 '14 at 15:27 • Alright, the criterion is the size of the output source code. good clarification. – Fabinout Feb 5 '14 at 15:55 • Sum the bytes with the percents or separately? Also, no matter what sources you choose, make sure to paste the code into your questions; who knows when the code in the library will change? – Justin Feb 6 '14 at 19:11 • i'll edit the bit about scoring (with examples) tomorrow (when i come back to work). I'll post the test sources as a pastebin, but I'll wait to choose them until the question is polished enough and someone consider it interesting enough – Einacio Feb 6 '14 at 19:34 • Is there anyone more with questions? is still possible that it will be marked as a duplicate? or can i choose the sources and publish it? – Einacio Feb 13 '14 at 19:22 # Create diagonal code Your task is to create a program that outputs d=s*sqrt(2). Specs: • Your program must be at least 4 lines long; • d=s*sqrt(2) cannot be hardcoded as is (so using ascii, compression, encoding, etc. is allowed and encouraged); • For each line of code n, pick up the nth character. The string obtained this way must be a valid program in a programming language of your choice, that must be different from the one you used for the main program. The obtained program must compile successfully, but it can throw errors, exceptions, etc.; • If at the nth line there is no nth character, you can consider that character as a whitespace or a newline. This cannot be done for the first 4 lines, which must be long at least n non-whitespace characters. • Your main program must end successfully (no errors, exceptions, etc.); • Internet access is forbidden; • Most upvoted answer in 2 weeks wins. Happy coding! I was unsure about making this a with several bonuses (polyglot answer, secondary program still valid, etc...). ### Some bonuses for the code-challenge version: Your valid answer starts with 0 points. You gain: +10 if the secondary answer hides a third answer in it; +15 for any other hidden answer; +5 for every hidden answer that runs and ends successfully, without any problem; +10 if your main answer is a polyglot; +15 for every hidden answer that is a polyglot; Which version would you prefer? Is there something you would change/improve in this question? I personally like the one, but the KISS principle (Keep it simple, stupid!) reminds me that I may be wrong. • It's trivial to make the diagonal program be just whitespace (many scripting languages will accept this as a program) or H  (valid program in H9Q+). – Peter Taylor Feb 26 '14 at 9:26 • Nowhere does it say that the diagonal program must output your magic string: it doesn't even have to execute correctly. Your amendment doesn't really fix things: I can now have the second line be #H, the third be #HH, etc. – Peter Taylor Feb 26 '14 at 9:37 • You're right; Don't know why, on a second read I messed up the meaning of your comment. Anyway, I suppose this excludes code-challenge unless I/we don't find a way to avoid such trivial solutions. I guess popularity-contest would still be ok, since more interesting solutions could be found, right? – Vereos Feb 26 '14 at 9:41 • I think my views on popularity-contest in general are well known. On further reflection, there are enough languages in which any string of bytes is a valid program that I don't think this question can work as is. If you want to save it, I think you need to look at doing something like a very difficult double-quine. – Peter Taylor Feb 26 '14 at 9:49 • Thinking about quines and diagonals (which was the "spirit" of the question), what about a sort of mini-quine? The main program would have to display d=s*sqrt(2) only, and its diagonal must reproduce the code used to display the magic string (no comments allowed). It could be tagged code-golf or code-challenge. – Vereos Feb 26 '14 at 11:04 # Create a Karnaugh-map calculator Given an input of a truth table, generate a corresponding K-map. Input: Input will be of the form 10110001 where each bit is a row of a truth table. Count from the left to the right; so that input would be a table of: i2i1i0 f 0 0 0|1 0 0 1|0 0 1 0|1 0 1 1|1 1 0 0|0 1 0 1|0 1 1 0|0 1 1 1|1 Max 4 variables will be inputted K-maps (a small explanation): K-maps are a way of simplifying boolean-algebra expressions. Let's say we have 4 variables: a, b, c, d. Let the truth-table be 1110101001111111 (and the columns on the truth table be labeled, from left to right: a, b, c, d). Arrange the variables like so:  cd ab\ 00 01 11 10 00 01 11 10  Note the grey-code counting scheme. Fill in the table with the corresponding values from the truth table:  cd ab\ 00 01 11 10 00 1 1 0 1 01 1 0 0 1 11 0 1 1 1 10 1 1 1 1  Group the values in rectangles whose dimensions are the largest possible powers of two. Note that this table signifies a torus, so wrap over the left and right edges. The expression for the truth table is the ors of the and of the unchanging elements. For this, that would be: Purple group: ¬b ∧ ¬c (for 0's, make them 1 by notting the value) Green group: ¬a ∧ ¬d Black group: a ∧ d Blue group: b ∧ ¬d Expression: (¬b ∧ ¬c) ∨ (¬a ∧ ¬d) ∨ (a ∧ d) ∨ (b ∧ ¬d) Output: • Generate a 2D K-map (for more variables, add on either side) and show the grouping. K-map must be of the form I used. For less variables, remove rows or columns and change the list on the top left corner. • assume alphabetical ordering on the variables, that is, the first variable is a, second: b, third: c, and so on. • Also show the expression. Rather than use the unicode characters, the following is permissible: ~ instead of ¬ * instead of ∧ + instead of ∨  Edit: Possible duplicate: More fun with gates: Karnaugh simplification • I think the grouping is not unique and therefore I might choose the most basic grouping (i.e. none). – Howard Feb 26 '14 at 9:02 • Although @Howard's concern is partially answered by "rectangles whose dimensions are the largest possible powers of two", it's not obvious to me why you haven't also circled the entire row 10 and the bottom-right quadrant. – Peter Taylor Feb 26 '14 at 9:29 • @PeterTaylor You're right - didn't read that line. But still my main concern is correct: it is not unique. Or as your remark shows it is not optimal if you choose all rectangles. – Howard Feb 26 '14 at 9:33 • Also for higher number of variables you have to either go to n dimensional K-maps or you won't find all possible rectangles (they are no longer adjacent in the matrix). – Howard Feb 26 '14 at 9:38 • @PeterTaylor In priority: Biggest rectangles, then least number. That is a big rectangle, but it is redundant with the others because every 1 in it is already circled. – Justin Feb 26 '14 at 16:44 • @Howard Good point. I'll restrict it to 4 or less variables. – Justin Feb 26 '14 at 16:47 • For the expression: rather than using A and V, why not * and +? That's fairly conventional use of field notation to represent GF(2). – Peter Taylor Feb 26 '14 at 17:11 • Ahem. OR is, of course, not the same as + in GF(2). But * and + is still the conventional notation for operations over the Boolean semiring. – Peter Taylor Feb 28 '14 at 15:31 Title: Implement ROT-13... in ROT-13 Content: Challenge: Implement ROT-13 in code that works as both itself and as the ROT-13 version of itself. ### Scoring: Your score is calculated as a percentage of used, ROT-13 eligible bytes in total of both versions of the program divided by total bytes (all characters) of both versions. A used, ROT-13 eligible byte is any character that is not part of a comment or ignored by the compiler/interpreter. For example, any character in a brainfuck program that is not +-<>[],.  is not considered a used byte, and any character in a C program including and after // or inside /* */ is not considered a used byte. All special symbols in APL are not considered used, as are all characters in a Whitespace program (sorry). Example scoring: ### C: 21/32 = 65.625% main(){printf("Hello World!");}  • Originally this question was ROT-47, not ROT-13. The rules are chosen so that choice of language doesn't easily determine the winner; otherwise, whitespace would easily win. When I changed it to ROT-13 I made only [A-Za-z] count so that a language like golfscript or brainfuck would not automatically score 100%. Looking for thoughts on how to capture the idea without making it too "choice of language" dependent. – durron597 Mar 3 '14 at 21:13 • Just saying, I have a C answer for the 47-version: qp.mniip.com/p/tz pick either of the lines – mniip Mar 3 '14 at 21:29 • @mniip Okay I undeleted it :) – durron597 Mar 3 '14 at 21:48 # Convert input to ASCII Semaphore With monitor resolutions getting higher and font sizes getting lower, a good programmer has to make efforts to ensure that output is accessible to the visually impaired. This can be problematic when the only display is in text. Toward this end, your assignment (if you choose to accept it) is to write a program that converts text input into ASCII art flag semaphore. ## Input 1. Your program must accept any letter in the ASCII character set from A to Z (case insensitive) and spaces. 2. The program can accept input in any way that is convenient for the language it is written in (stdin, command line, file, etc.). ## Output 1. The program should output an ASCII art representation of the input string in flag semaphore. Follow this link to see the expected encoding. 2. Line feeds and carriage returns should be interpreted as spaces. 3. Numbers and other non-letters in the input may be ignored. 4. You may use whatever ASCII art representation of the semaphore sender you like, but it must contain a person holding two flags and have distinct arms, legs, head, and flags. It must be at least 10x10 characters. 5. Output may be either horizontal or vertical. ## Example Input: Hello Output:  ### ### # _____######## | | ### |__| #### # ### # ### / # # /\ # # / \ # # \ / # # \/ ## ## /\ / \ /\ / # \/ ### # ### # # # #### # ### # ### # ### # ### | # # |__ # | |# |__|# ## ## /\ / \ /\ / # \/ ### # ### # # # ### #### # ### # ### # ### / # # /\ # # / \ # # \ / # # \/ ## ## /\ / \ /\ / # \/ ### # ### # # # ### #### # ### # ### # ### / # # /\ # # / \ # # \ / # # \/ ## ## /\ / \ \ /\ \/ # # ### # ### # # _____######## | | ### |__| ### ### ### # # # # # # # # ## ##  ## Scoring This is code golf. Shortest code wins. • define "easily recognisable". Would a simple 3x3 compass (say, with a head if not covered) do? say:.o. -|. /|. ; or even: ... xx. x.. (read by lines, dots represent spaces) – John Dvorak Mar 6 '14 at 20:16 • @JanDvorak Good catch. Edited to include distinct items that must be present and a minimum size. I'm not exactly sure how to make that rule more clear. – Comintern Mar 6 '14 at 20:34 • Define "person holding two flags". Is what I drew a person? Is this a (lying, due to formatting issues) person: o--? Are three x's on a vertical line a person? – John Dvorak Mar 6 '14 at 20:43 • @JanDvorak Ack! had to many tabs open and forgot to save my edit. I think number 4 for output should cover that. – Comintern Mar 6 '14 at 20:47 • Define "distinct arms, legs, head, and flags." But I suggest allowing very small figures as well, otherwise this will turn into a kolmogorov-complexity-like question with very little of the code actually involving generating a pair of directions. – John Dvorak Mar 6 '14 at 20:51 • Very similar to this question. The ascii art is more complex here so perhaps it's not close enough to be called a duplicate... – Gareth Mar 6 '14 at 22:20 • I disagree with @JanDvorak: I think this would be better with a fixed output spec which must be followed exactly. That way people can golf their code rather than the output. – Peter Taylor Mar 6 '14 at 23:59 • Standard figures seem best to me as well. If you demonstrate a full "clock" of hand positions for the standard figure, then you can require those as output. That's easier to assess than free reign for variations. – Jonathan Van Matre Mar 7 '14 at 0:14 With its strange choice of 9 different characters (plus space and newline), the ASCII art version of the FreeBSD logo has always looked to me as if it might be nicely formatted, obfuscated code is some programming language. (Is it?)    s .....---.......--. -/ +o .-- /y: +. yo:. :o +- y/ -/ -o/ .- ::/sy+:. / -- / : : : : / / .- -. -- -. : : .-- --. .---.....----.  Therefore I would like to challenge you to make it one: Either specify minimal changes to an existing programming language or minimal changes to this piece of ASCII art (making the artwork look different or significantly changing the character set used are definitely major changes), so that the logo, as source code generates meaningful output. This should be a challenge, although I wouldn't mind some way of introducing hard scoring and run this as . ## King of the Hill Fighting In this game, a player controls 5 bots that attack the other players 5 bots. Each bot has life points, and has to reduce the other playres lifepoints to zero. This post is program that tests the controllers. It is in literate haskell. > import Data.Set as S > import Data.Map as M  Here is the arena:  D---G /| |\ B | | J /|\| |/|\ A | E---H | L \|/| |\|/ C | | K \| |/ F---I 20 12 4 16 8 0  Positions are denoted by letters > data Positions = A | B | C | D | E | F | G | H | I | J | K | L deriving (Show, Read, Eq, Ord)  Each player is presented a map in which their side is the one with A. Here is code that will reflect it so each player sees their own view. > pairFlip = (\(x, y)->[(x,y), (y,x)]) > reflect = M.fromList$ [(A,L), (B,J), (D,G), (C, K), (E, H), (F, I)] >>= pairFlip


Lines denote connections.

> connections=S.fromList $> [(A,B), (A,C), (B,D), (C, F), (E, D), (E, F), (D, G), (E, H), (F, I)] > >>= pairFlip > >>= (\(x,y)->[(x,y), (reflect ! x, reflect ! y)]) > > connected x y=(x, y) S.member connections  The numbers below are the number of life points of generation that each bot. > regen = M.fromList$
>   [ (A, 20), (B, 16), (C, 16), (D, 12), (E, 12), (F, 12)
>   , (G, 8), (H, 8), (I, 8), (J, 4), (K, 4), (L, 0)]

• Is there supposed to be a specification hidden in here somewhere? – Peter Taylor Mar 14 '14 at 16:30
• @Peter Taylor Just not done yet. – PyRulez Mar 14 '14 at 16:44
• You won't get lots of answers if it's limited to Haskell. – ugoren Mar 14 '14 at 17:57
• No no no, the above post is also a program for testing it. I will add in code that can take arbitrary programs and use them. – PyRulez Mar 14 '14 at 21:17

# music theory challenge

Create a program that takes some input in the form of frequency, waveform, and duration that generates an audio stream based on the input.

You can take input parameters however you choose, but if I input (translated to your method) 440Hz, sin(x), 3 seconds, your program should play or create a file for a sound 3 seconds long at 440 hertz on a sine wave.

Also, any output should be musically correct as far as frequency is concerned. See http://www.phy.mtu.edu/~suits/notefreqs.html for example frequencies

Since this is a popularity contest, the rest is up to you. I bid you Good programming!

Oh, and any use of external functions or APIs is ok, as long as they weren't developed specifically for this contest.

• If the program takes "input in the form of frequency, waveform and duration" then where do linear functions fit? What do you mean "output should be musically correct as far as frequency is concerned" given that the input is frequency? Is it supposed to correct the input: "You said 494Hz but you must mean 493.88Hz"? And simple synth has been done before in various guises: see music. To differentiate this and make it non-trivial you could perhaps specify a set of basic synth operations which need to be configurable (e.g. input specifies generators, envelopes, filters, mixers). – Peter Taylor Mar 14 '14 at 8:39
• On second thoughts, that would probably work better as a Code Review Code Challenge – Peter Taylor Mar 14 '14 at 9:23
• @PeterTaylor I didn't even know about Code Review Code Challenges <intrigued>. Linear isn't the right word...and I think that statement is redundant anyway, so I'll nix it. – David Wilkins Mar 14 '14 at 12:44
• Actually, I'm going to re-write this challenge...I don't know yet whether it'll be here of on CR – David Wilkins Mar 14 '14 at 13:07

## Calculate pi using a unique method

Your task is to calculate or approximate pi using the most interesting method you know. Well-known things such as using inverse trig functions (asin, acos, atan) or commonly used convergent series are considered uninteresting.

You may calculate pi to any precision desired, but the more precision you can achieve, the better.

• I couldn't find an exact duplicate of this, but I'd like to know if this overlaps too strongly with an existing question. – Kendall Frey Mar 14 '14 at 18:51
• If you rule out convergent series, what's left? – Peter Taylor Mar 14 '14 at 20:02
• @PeterTaylor If someone knows of a convergent series that isn't on Wikipedia, that would make a good answer. I know of an answer that does not use trigonometry or an approximation, but calculates the digits directly. – Kendall Frey Mar 14 '14 at 20:08
• Is it in mathworld.wolfram.com/PiFormulas.html ? I've got some ancient code which uses a spigot hypergeometric evaluator to compute pi as 3*F(1/2, 1, 1, 8/5 ; 3/5, 4/3, 5/3 | 2/27), but I would expect that to count as well-known. – Peter Taylor Mar 14 '14 at 20:11
• @PeterTaylor I'm familiar with it in layman's terms only, but I don't see it there. It could be related to some of them, but I don't see more than a small resemblance. It isn't original with me, BTW. – Kendall Frey Mar 14 '14 at 20:22