578
\$\begingroup\$

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

Sandbox FAQ

Posting

To post to the sandbox, scroll to the bottom of this page and click "Answer This Question". Click "OK" when it asks if you really want to add another answer.

Write your challenge just as you would when actually posting it, though you can optionally add a title at the top. You may also add some notes about specific things you would like to clarify before posting it. Other users will help you improve your challenge by rating and discussing it.

When you think your challenge is ready for the public, go ahead and post it, and replace the post here with a link to the challenge and delete the sandbox post.

Discussion

The purpose of the sandbox is to give and receive feedback on posts. If you want to, feel free to give feedback to any posts you see here. Important things to comment about can include:

  • Parts of the challenge you found unclear
  • Comments addressing specific points mentioned in the proposal
  • Problems that could make the challenge uninteresting or unfit for the site

You don't need any qualifications to review sandbox posts. The target audience of most of these challenges is code golfers like you, so anything you find unclear will probably be unclear to others.

If you think one of your posts requires more feedback, but it's been ignored, you can ask for feedback in The Nineteenth Byte. It's not only allowed, but highly recommended! Be patient and try not to nag people though, you might have to ask multiple times.

It is recommended to leave your posts in the sandbox for at least several days, and until it receives upvotes and any feedback has been addressed.

Other

Search the sandbox / Browse your pending proposals

The sandbox works best if you sort posts by active.

To add an inline tag to a proposal, use shortcut link syntax with a prefix: [tag:king-of-the-hill]. To search for posts with a certain tag, include the name in quotes: "king-of-the-hill".

\$\endgroup\$
3
  • 1
    \$\begingroup\$ What if I posted on the sandbox a long time ago and get no response? \$\endgroup\$ Commented May 15, 2024 at 14:05
  • 2
    \$\begingroup\$ @None1 If you don't get feedback for a while you can ask in the nineteenth byte \$\endgroup\$ Commented May 29, 2024 at 13:27
  • \$\begingroup\$ I have been once submitted a question to sandbox and downvoted to -1, but after submitting it anyway it has 8-9 score right now. \$\endgroup\$ Commented Dec 5, 2025 at 18:13

5006 Answers 5006

1
93 94
95
96 97
167
1
\$\begingroup\$

Intersecting Intersections

Your task

Given an array of (sides, count) where sides is the number of sides of the polygon and count is the number of those polygons, on a 2D Cartesian plane, if you arrange these polygons optimally, what's the maximum number of intersection points?

Clarifications

  • Each polygon can be anywhere in the plane, of any size, and any rotation as long as the result is optimal and all polygons are convex.
  • An Intersection is defined as a distinct point where polygon edges overlap. If multiple pairs of edges meet at the same point, that point is counted once.
  • All side lengths will be at least 3, and all counts will be at least 1.
  • Standard loopholes are disallowed.

Example

Let's say our test case is [(3, 2)]. That means we have two triangles. Each of these has 3 edges. One way we can achieve 6 intersections is with a hexagram.

Test Cases

[(3, 2)] => 6
[(3, 1), (4, 1)] => 6
[(3, 1), (5, 2)] => 22
\$\endgroup\$
1
\$\begingroup\$

Implement an ASCII calendar like cal command

Some environments, provide a cal command which displays an ASCII calendar. Your job is to implement a simplified version of it.

Input

Your input is a variation between 0 and 2 arguments.

  • 0 arguments: Print the current month:

enter image description here

  • 1 argument: Print the calendar for that year. Example for 2026:

enter image description here

  • 2 arguments: Print the calendar for that month/year pair. Example for 5/2026

enter image description here

Rules;

  • Sunday will always be the first day in the week.
  • You don't need the month title to be centered. It it is enough to have it above the specific month, but make sure it does not leak outside it.
  • Single digit days are always right-aligned.
  • The month's title is always spelled in English. As the week days names abbreviations.
  • No built-ins nor calling directly for cal or anything similar is allowed
  • Due to the nature of the output, you actually need to show it on stdout instead of returning it from a function result.
  • The absence of a vertical line of space, like seen above and below August in the image is not mandatory.
\$\endgroup\$
7
  • \$\begingroup\$ dup \$\endgroup\$ Commented Nov 19, 2025 at 15:06
  • \$\begingroup\$ @l4m2 definitely not a dupe. Mine is much more challenging. \$\endgroup\$ Commented Nov 19, 2025 at 15:08
  • \$\begingroup\$ Like what differences? \$\endgroup\$ Commented Nov 19, 2025 at 15:11
  • \$\begingroup\$ see, the support of whole year. Image didn't load well \$\endgroup\$ Commented Nov 19, 2025 at 15:12
  • \$\begingroup\$ Due to the nature of the output, you actually need to show it on stdout instead of returning it from a function result. -> In short, the answer must be a full program? (I don't clearly see why it should, BTW.) \$\endgroup\$ Commented Nov 29, 2025 at 21:23
  • \$\begingroup\$ Is year centering (in the 1-argument version) also optional? \$\endgroup\$ Commented Nov 30, 2025 at 8:36
  • \$\begingroup\$ @Arnauld Yes, optional alignment of the year. \$\endgroup\$ Commented Nov 30, 2025 at 9:49
1
\$\begingroup\$
\$\endgroup\$
1
\$\begingroup\$

Play Beggar My Neighbor

\$\endgroup\$
2
  • \$\begingroup\$ Can the face cards be represented numerically? \$\endgroup\$ Commented Dec 14, 2025 at 20:35
  • 1
    \$\begingroup\$ @UnrelatedString sure, as long as the representation is "within the spirit", that's fine. the challenge isn't about parsing a deck, it's about actually simulating the game (or finding a better way to do it) \$\endgroup\$ Commented Dec 15, 2025 at 20:00
1
\$\begingroup\$

\$b^k\$-repeat Numbers

Repdigits are numbers that are composed of only the same digit, such as \$555\$ or \$888888888\$.

The above Wikipedia link provides a formula: $$\frac{\left(\left(n\cdot\left(10^{\left\lfloor\log_{10}\left(n\right)\right\rfloor+1}+1\right)\right)-n\right)^k-n^k}{\left(\left(n\cdot\left(10^{\left\lfloor\log_{10}\left(n\right)\right\rfloor+1}+1\right)\right)-2\cdot n\right)\cdot n^{\left(k-2\right)}}$$ where \$n\$ is the digit to be repeated and \$k\$ is the number of repetitions. The article notes that this formula does not produce valid repdigits for \$n\ge10\$, and instead provide non-digit numbers concatenated with themselves. These "invalid repdigits", for example \$2323232323\$, we will here call "repeat numbers".
Note: For the purposes of this challenge, repdigits are considered repeat numbers!

A \$b^k\$-repeat number is then a number which is a number concatenated with itself \$k\$ times in the base \$b\$. The number above, \$2323232323\$, is a \$10^5\$-repeat number (the 23rd, in fact), and \$2925\$ is a \$2^4\$-repeat number, as its base-2 representation is \$101101101101_2\$, the string \$101\$ repeated 4 times.

The Challenge:

As this is a challenge, you may do any one of the following:

  • Given three inputs b k and n, output the \$n\$th \$b^k\$-repeat number.
  • Given three inputs b k and n, output the first \$n\$ \$b^k\$-repeat numbers.
  • Given two inputs b and k, output \$b^k\$-repeat numbers indefinitely.

You may assume that b k and n are all integers, that \$b\ge2\$, and that \$n\$ and \$k\ge1\$. You may take inputs in any order and in any convenient format. Output can be in any convenient format, but please specify if it is not simply output as an integer. Standard loopholes forbidden. Standard scoring.

Test Cases:

The following test cases take three inputs in the order b, k, n and output the \$n\$th \$b^k\$-repeat number.

10,  5, 23 -> 2323232323
 2,  4,  5 ->       2925
 4,  6,  3 ->       4095
99,  1,  1 ->          1
10,  1, 50 ->         50
 2, 10,  1 ->       1023

Meta

Open to criticism and suggestions, especially with the test cases.

It's entirely possible that this (or a challenge like it) is already up, but I wasn't able to find it. Also please let me know if these numbers have a more established name, or if you think a better one (or just better notation) is called for.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ my gut tells me this is a tad simple but i think there's just enough meat for it to be a an alright begginer challenge. no notes on the format \$\endgroup\$ Commented Dec 23, 2025 at 9:43
1
\$\begingroup\$

[N]th Quarter Language Jam, [Year]

For this challenge, you'll be designing and implementing a new language! Read the rules below, then view the spoiler for the theme:

[theme here, eg: lost]

Rules:

  • A submission must meaningfully reflect the theme in at least 2 of the following (with explanation as to why and how):
    1. Syntax / surface structure
    2. Execution model / semantics
    3. Memory model
    4. Control flow
    5. Data representation
    6. Error handling / failure modes
  • In addition to this, your language will have to follow a restriction which is updated along with the theme. This is obligatory to be followed among all answers. For this challenge, the restriction is

[restriction here, eg: must be deterministic]

  • There are two deadlines present in this challenge. The first, on [roughly 3 months after posting] is the deadline for answer submissions. Answers are allowed after this, but they will not be contenders for winning this month's challenge. The second deadline, [roughly 4 months after posting], will be the deadline by which answers will (hopefully) have accumulated enough votes to mitigate the FGITW effect and later answers get a fairer chance to win. I will select the highest voted answer on this deadline, complying with these rules.
  • For this challenge, valid contenders will have to be accompanied by a proof of their Turing-completeness. You have time until the second deadline to provide this. If your answer was supposed to be the winner, following all the other rules, but supplied with a proof after the winner was decided, you can ping me in The Nineteenth Byte to update the winner.
  • An implementation in any language (interpreter/compiler) should be provided in your answer.
  • Answers cannot be pre-existing languages. For example, if the theme was lost, you cannot submit Lost as an answer.
  • Please document the implemented features, or at the very least link to an external source providing this. To showcase the utility of your language, write two programs in it that would be valid answers to the Hello World! and Is this number a prime? challenges, following our I/O defaults. If your language doesn't support any of the I/O methods, use whatever it natively has.

Voting:

As mentioned before, answers must contain features themed across any two (or even more) characteristics as mentioned in rule #1. This is a popularity contest, where most net votes wins, and so the onus is on the voter to decide the winner of this challenge. No one can force you to vote any way they want, but here are some guidelines for you to follow when voting:

  • How significant is the connection to the theme, especially while considering the themed features of this language?
  • How usable is this language (especially in the service of code-golf, fastest-code, etc. don't pigeonhole yourself into just golfing)?

and so on. If you're here just to vote, please do so only after the first deadline, so that you can compare all the contenders and give them all an equal chance at receiving your vote and winning. You're still free to post your languages, but do note they will not be contending to win. What's more important is that you vote for the languages you deem most creative, and maybe even post some answers in them to other challenges...

Good luck and have fun!

\$\endgroup\$
3
  • 2
    \$\begingroup\$ I'll summarize here what I said in chat: I love the idea of more language-design questions, but depending on how the theme is handled, this seems likely to fall into the "do something cool" category of pop-con that isn't a good fit for the site. (Compare the responses to Please reopen Tweetable Mathematical Art.) It can work, but it's going to need more requirements than just "some relation to the theme." \$\endgroup\$ Commented Dec 31, 2025 at 7:54
  • \$\begingroup\$ the only note i have is that doing this monthly would most likely be exhausting for both you and entrants. maybe i'm mistaken but personally i'd see this as a quarterly thing at most \$\endgroup\$ Commented Jan 2 at 8:26
  • \$\begingroup\$ hmm you're probably right, I originally thought changing it from 2 weeks to 1 month (26 vs 12/year) would be sufficient, but now that I'm considering my commitments for the new year that number seems a bit too much. 3 months to do this might just be enough \$\endgroup\$ Commented Jan 2 at 9:26
1
\$\begingroup\$

Program for generate all functions from two sets

If A and B are two sets (so two list that have no repetition where order is not important), a set f is a function if and only if

  1. f is a subset of AxB
  2. if x∊A than exist one only element y∊B with (x,y)∊f

Write one program or function that if the input are the sets A and B, return as output all the functions from A to B.

The program or function that wins is the one that has length of less bytes.

Example

if the input is A={1,2,3} and B={1} the output, the set of all functions froma A to B should be

 ( ((1,1),(2,1),(3,1)) )

if the input is A={1,2,3} and B={1,2} the output, the set of all functions froma A to B should be

(    
 ((1,1),(2,1),(3,1)),
 ((1,2),(2,2),(3,2)),   
 ((1,1),(2,1),(3,2)),
 ((1,1),(2,2),(3,1)),
 ((1,2),(2,1),(3,1)),
 ((1,2),(2,2),(3,1)),
 ((1,2),(2,1),(3,2)),
 ((1,1),(2,2),(3,2))
)

if the input is A='ab' and B='cd' the output, the set of all functions froma A to B should be

┌4──────────────────────────────────────────────────────┐
│┌2──────────┐ ┌2──────────┐ ┌2──────────┐ ┌2──────────┐│
││┌2──┐ ┌2──┐│ │┌2──┐ ┌2──┐│ │┌2──┐ ┌2──┐│ │┌2──┐ ┌2──┐││
│││ ac│ │ bc││ ││ ac│ │ bd││ ││ ad│ │ bc││ ││ ad│ │ bd│││
││└───┘ └───┘2 │└───┘ └───┘2 │└───┘ └───┘2 │└───┘ └───┘2│
│└∊──────────┘ └∊──────────┘ └∊──────────┘ └∊──────────┘3
└∊──────────────────────────────────────────────────────┘

it seems that the output has to have as number of elements the number |B|^|A|, where |A| is the number of elements of A and |B| is the number of element of B.

\$\endgroup\$
1
\$\begingroup\$

Title: Finding Chord Segments with Integer Length

A math teacher wants to give his students an interesting geometry problem.

He has the following idea (Fig. 1):

Let \$AB\$ and \$CD\$ be two chords of a circle with center \$M\$, intersecting orthogonally at point \$S\$. Find the lengths of \$CS\$ and \$DS\$ if \$AS\$ is \$n\$ cm, \$BS\$ is \$m\$ cm, and the circle radius is \$r\$ cm.

Figure 1.

Now he needs to choose the appropriate values ​​for \$n,\:m\$ and \$r\$ for the problem. According to established convention, where possible, both the results and the given values ​​are integers. This would allow the students to intuitively understand whether their solution is correct. Unfortunately, the math teacher cannot find a combination of three integer input values ​​that would result in two integers.

The Challenge

Write a program or a function that will find all possible combinations of the three segments [m, n, r] that have integer lengths and integer solutions.

Input and output

A program or a function that inputs a limiting number \$X\$ and outputs all combinations of \$m, n, r ≤ X\$.

The output is arranged such that \$m\$ and \$n\$ precede \$r\$.

Rules

m + n < 2*r

This is code-golf. Standard i/o. Standard loopholes.

Test case:

X = 100:

         m   n    r
 [1,]    4   76   85
 [2,]    9   41   65
 [3,]    4   44   25
 [4,]    8   22   25
 [5,]    6   72   65
 [6,]    8   58   65
 [7,]   17   49   65
 [8,]   11   91   85
 [9,]   23   49   85
[10,]    8   88   50
[11,]   16   44   50
[12,]   14   64   65
[13,]    9   39   25
[14,]   13   27   25
[15,]   15   87   85
[16,]   27   53   85
[17,]   23   55   65
[18,]   24   66   75
[19,]   38   64   85
[20,]   32   88  100
[21,]   17   95   65
[22,]   19   85   65
[23,]   18   78   50
[24,]   26   54   50
[25,]   21   99   65
[26,]   27   77   65
[27,]   36   68   65
[28,]   27   93   65
[29,]   31   81   65
[30,]   39   81   75
[31,]   30   96   65
[32,]   40   72   65
[33,]   55   81   85
[34,]   38   88   65
[35,]   44   76   65
[36,]   62   88   85
[37,]   64   90   85
\$\endgroup\$
5
  • \$\begingroup\$ surely m+n (the length of the chord) is less than (or equal to) 2*r (the diameter)? \$\endgroup\$ Commented Feb 4 at 14:20
  • \$\begingroup\$ @RubenVerg I wanted to rule out the cases when a chord = diameter \$\endgroup\$ Commented Feb 5 at 7:48
  • \$\begingroup\$ then just don't include the "or equal to" bit; m+n is still smaller than 2*r as you can clearly see in all your examples \$\endgroup\$ Commented Feb 5 at 17:59
  • \$\begingroup\$ It would be m+n<2*r, even I not have understood the way to resolve that \$\endgroup\$ Commented Feb 9 at 19:12
  • \$\begingroup\$ @Rosario sorry for the confusion, it was a typo. m + n is < 2*r \$\endgroup\$ Commented Feb 9 at 19:26
1
\$\begingroup\$

(Formal language theory) Regular expression for an even number of 0s and an odd number of 1s

Similar to Make a regex that matches certain binary numbers with the following differences:

  1. Only formal language theory regular expressions are allowed. Most importantly, lookahead/lookbehind is not available, and neither are backreferences like \1. More on this below.
  2. It must be perfectly correct. False positives or false negatives are not allowed. (The linked challenge allowed up to 10% false negative and false positive rates.)

Create a regular expression that matches a string of 1s and 0s with an even number of 0s and an odd number of 1s.

This is a regular language with a simple DFA of only 4 states.

Allowed regular expression features

Solutions must be regular expressions as defined in formal language theory. This means the only operators allowed are *, |, and concatenation.

Effectively (unless I missed something) this means the allowed characters are: 01()|*, and technically also and ε but I highly doubt they would be useful and are not as simple to convert to a programming regex.

Start and end anchors are implied or not needed. That is, if your answer is REG, the programming regex that must match the requirement is ^(REG)$. Your score would be 3 characters.

Testing sample, generated using Python:

Should match:
1
010
001
111
100
1100100
0010110
1011101
0010011
1001010
0101111
0010000
0000010
1101000
1011110
1110011
0001110
0100000
1010001
1110101
100110001111011
011000011010000
001010100011101
001111111101000
100111001000011
010010011010101
101110110001110
110001011100111
100110000000011
001011011110101
001011100011010
000000010101011
001001101011111

Should not match:
0
101
000
011
110
1000
0010
0011
1001
1011
0111
1111
0101
1010
1110
0100
0110
1100
0001
0000
1101
010100
111001
010111
101101
110100
001011
000010
011111
110011
101111
011001
101011
011000
011110
111000
101001
100101
111011
111110
110001
110000
101010
010101
001101
0100001
0111001
0101011
1000010
0101000
1100101
0011000
1001000
1000100
0101110
0011011
1001011
0110110
01111111
01001110
10011111
11110111
10111001
11100111
00011100
00101111
10100010
11100001
11101100
10010111
11111011
00001101
00100011
11110000
11110001
00001111
01000100
10000100
01111010
01111001
00011000
10100011
00010001
10010000
11111110
00100111
1101001110
1100000011
0010110101
0010001011
0001001001
0010100001
0110011101
1110100011
0110111111
1011111001
1011010101
1110000100
0111110000
1110111000
1011111110
1111001101
0100111101
1011011110
1010100010
1001110001
0010100110
0000011011
0011000001
0010001100
0000100011
1110001000
1011011011
0110101110
1001111111
0010001001
101011000100001
101011100101010
111111111000001
000010101000100
110111011001000
011001011010000
010010111001000
001100011101000
100000010000011
011011100101001
011001110111000
100110001010001
101001101000010
101000011100001
010110000000010
111011001010111
011011110001100

The minimal DFA for this language has only 4 states, but in my attempt to create a regular expression for it, I ended up with over 220 characters and I wonder if anyone can do better. I have also used a DFA to regex converter, and it output a slightly smaller expression, but I wonder if other people can do better.

To be honest, I just wanted to put this question out there and see what people can do. I have no interest in being a judge, so if posting a challenge to this exchange requires more than a "fire and forget", I would be more comfortable if anyone so inclined would post it on my behalf.

In my surface-level online searching I didn't find any existing solutions, however I did find these:

This question is close, but not the same: https://stackoverflow.com/questions/20485486/shortest-regex-for-binary-number-with-even-number-of-0s-or-odd-number-of-1s (or instead of and)

The previous challenge which I linked before allowed all regex features (and allowed some amount of incorrect results), and has a very short solution using backtracking by the user Howard: https://codegolf.stackexchange.com/a/16152

\$\endgroup\$
4
  • \$\begingroup\$ I can share my solution(s) as a regex101 link (or I could even describe it here), would that be "spoilers" before the challenge is posted? \$\endgroup\$ Commented Feb 13 at 21:35
  • \$\begingroup\$ I've created this script to test proposed solutions: codeberg.org/NeatNit/regex-challenge-test-script/src/branch/… \$\endgroup\$ Commented Feb 13 at 23:18
  • \$\begingroup\$ Can't say if my solution is perfect, but here you go: ^(00|11|((01|10)(00|11)*(01|10)))*(1|0(11)*10|10(11)*110)(00)*$ (It passed all test case but I didn't proof mathematically it's correct.) \$\endgroup\$ Commented Feb 17 at 9:39
  • \$\begingroup\$ @Explorer09 good try, just tested it, it fails to catch: 0100110, 1000110, 000100110, 001000110, 010000110, 010011000 and more. It missed 10 out of the first 792 test cases, good ratio. \$\endgroup\$ Commented Feb 18 at 16:54
1
\$\begingroup\$

Outgrow all computable functions

New contributor
Patcail is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
\$\endgroup\$
0
\$\begingroup\$

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:

  • Base Program (in the same language as your answer)
  • 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.

\$\endgroup\$
8
  • \$\begingroup\$ Problem: some subsequences of legitimate answers may be pretty dangerous to the environment. You don't want to eval just everything. \$\endgroup\$ Commented Dec 23, 2013 at 16:59
  • \$\begingroup\$ @JanDvorak Yes that actually is a serious problem. To what extent is it possible to fix that? \$\endgroup\$ Commented Dec 23, 2013 at 17:04
  • 1
    \$\begingroup\$ Forbidding any program with dangerous subsequences? :-) \$\endgroup\$ Commented Dec 23, 2013 at 17:05
  • 1
    \$\begingroup\$ A more reasonable (but very difficult) solution would be the requirement to implement a sandbox. \$\endgroup\$ Commented Dec 23, 2013 at 17:07
  • 2
    \$\begingroup\$ 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. \$\endgroup\$ Commented Jan 7, 2014 at 23:49
  • \$\begingroup\$ Are you sure this is possible? The problem of testing if two functions/programs/turing-complete things are equivalent is undecidable - I'm fairly sure it's reasonable easy to constract a brainfuck program that you can't tell if you can remove even a single character. \$\endgroup\$ Commented May 16, 2021 at 4:44
  • \$\begingroup\$ Extending on my previous comment - Let's assume you have a solution to this. Take a brainfuck program you want to test if halts. Let it reduce it, now you have an equivalent irreducible program. Add +. in the end of it, and then try to reduce it again. If the code never halts, that +. is reducible and when you'll run it again it will be removed. Otherwise it's important, so it will be kept. The halting problem is undecidable, therefor this is undecidable. \$\endgroup\$ Commented May 16, 2021 at 4:54
  • \$\begingroup\$ You can also get its undecidablility from that in Unary it will tell you if a given program is minimal, which is known to be undecidable as well \$\endgroup\$ Commented May 16, 2021 at 5:25
0
\$\begingroup\$

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.

\$\endgroup\$
1
  • 2
    \$\begingroup\$ 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. \$\endgroup\$ Commented Jan 8, 2014 at 8:45
0
\$\begingroup\$

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)

\$\endgroup\$
2
  • \$\begingroup\$ How does that example rhyme...? \$\endgroup\$ Commented Jan 25, 2014 at 12:54
  • \$\begingroup\$ @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 \$\endgroup\$ Commented Jan 27, 2014 at 15:58
0
\$\begingroup\$

Implement Kalah

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?

\$\endgroup\$
1
  • \$\begingroup\$ 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? \$\endgroup\$ Commented Jan 30, 2014 at 10:06
0
\$\begingroup\$

[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).

spider web

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.

\$\endgroup\$
2
  • \$\begingroup\$ 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? \$\endgroup\$ Commented Feb 3, 2014 at 11:49
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Feb 3, 2014 at 12:02
0
\$\begingroup\$

Write a PHP Code Golfer

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)

\$\endgroup\$
8
  • \$\begingroup\$ It's a specialisation of codegolf.stackexchange.com/q/3652/194 , so would likely be closed as a duplicate. \$\endgroup\$ Commented Feb 4, 2014 at 22:44
  • \$\begingroup\$ @PeterTaylor I saw it. is similar, but I include an objetive goal and score. have any idea on how to make it more unique? \$\endgroup\$ Commented Feb 5, 2014 at 2:43
  • \$\begingroup\$ "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... \$\endgroup\$ Commented Feb 5, 2014 at 9:56
  • \$\begingroup\$ @Fabinout the objective is golfing the code. If you only remove some characters, I doubt you'll get a good score \$\endgroup\$ Commented Feb 5, 2014 at 15:27
  • \$\begingroup\$ Alright, the criterion is the size of the output source code. good clarification. \$\endgroup\$ Commented Feb 5, 2014 at 15:55
  • \$\begingroup\$ 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? \$\endgroup\$ Commented Feb 6, 2014 at 19:11
  • \$\begingroup\$ 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 \$\endgroup\$ Commented Feb 6, 2014 at 19:34
  • \$\begingroup\$ 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? \$\endgroup\$ Commented Feb 13, 2014 at 19:22
0
\$\begingroup\$

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.

\$\endgroup\$
5
  • \$\begingroup\$ 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+). \$\endgroup\$ Commented Feb 26, 2014 at 9:26
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Feb 26, 2014 at 9:37
  • \$\begingroup\$ 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? \$\endgroup\$ Commented Feb 26, 2014 at 9:41
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Feb 26, 2014 at 9:49
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Feb 26, 2014 at 11:04
0
\$\begingroup\$

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.

enter image description here

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

\$\endgroup\$
8
  • \$\begingroup\$ I think the grouping is not unique and therefore I might choose the most basic grouping (i.e. none). \$\endgroup\$ Commented Feb 26, 2014 at 9:02
  • 1
    \$\begingroup\$ 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. \$\endgroup\$ Commented Feb 26, 2014 at 9:29
  • \$\begingroup\$ @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. \$\endgroup\$ Commented Feb 26, 2014 at 9:33
  • \$\begingroup\$ 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). \$\endgroup\$ Commented Feb 26, 2014 at 9:38
  • \$\begingroup\$ @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. \$\endgroup\$ Commented Feb 26, 2014 at 16:44
  • \$\begingroup\$ @Howard Good point. I'll restrict it to 4 or less variables. \$\endgroup\$ Commented Feb 26, 2014 at 16:47
  • \$\begingroup\$ For the expression: rather than using A and V, why not * and +? That's fairly conventional use of field notation to represent GF(2). \$\endgroup\$ Commented Feb 26, 2014 at 17:11
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Feb 28, 2014 at 15:31
0
\$\begingroup\$

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!");}
\$\endgroup\$
3
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Mar 3, 2014 at 21:13
  • \$\begingroup\$ Just saying, I have a C answer for the 47-version: qp.mniip.com/p/tz pick either of the lines \$\endgroup\$ Commented Mar 3, 2014 at 21:29
  • \$\begingroup\$ @mniip Okay I undeleted it :) \$\endgroup\$ Commented Mar 3, 2014 at 21:48
0
\$\begingroup\$

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.

\$\endgroup\$
8
  • \$\begingroup\$ 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) \$\endgroup\$ Commented Mar 6, 2014 at 20:16
  • \$\begingroup\$ @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. \$\endgroup\$ Commented Mar 6, 2014 at 20:34
  • \$\begingroup\$ 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? \$\endgroup\$ Commented Mar 6, 2014 at 20:43
  • \$\begingroup\$ @JanDvorak Ack! had to many tabs open and forgot to save my edit. I think number 4 for output should cover that. \$\endgroup\$ Commented Mar 6, 2014 at 20:47
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Mar 6, 2014 at 20:51
  • 2
    \$\begingroup\$ Very similar to this question. The ascii art is more complex here so perhaps it's not close enough to be called a duplicate... \$\endgroup\$ Commented Mar 6, 2014 at 22:20
  • 2
    \$\begingroup\$ 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. \$\endgroup\$ Commented Mar 6, 2014 at 23:59
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Mar 7, 2014 at 0:14
0
\$\begingroup\$

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 .

\$\endgroup\$
0
\$\begingroup\$

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)]
\$\endgroup\$
4
  • \$\begingroup\$ Is there supposed to be a specification hidden in here somewhere? \$\endgroup\$ Commented Mar 14, 2014 at 16:30
  • \$\begingroup\$ @Peter Taylor Just not done yet. \$\endgroup\$ Commented Mar 14, 2014 at 16:44
  • \$\begingroup\$ You won't get lots of answers if it's limited to Haskell. \$\endgroup\$ Commented Mar 14, 2014 at 17:57
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Mar 14, 2014 at 21:17
0
\$\begingroup\$

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.

\$\endgroup\$
4
  • \$\begingroup\$ 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). \$\endgroup\$ Commented Mar 14, 2014 at 8:39
  • \$\begingroup\$ On second thoughts, that would probably work better as a Code Review Code Challenge \$\endgroup\$ Commented Mar 14, 2014 at 9:23
  • \$\begingroup\$ @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. \$\endgroup\$ Commented Mar 14, 2014 at 12:44
  • \$\begingroup\$ Actually, I'm going to re-write this challenge...I don't know yet whether it'll be here of on CR \$\endgroup\$ Commented Mar 14, 2014 at 13:07
0
\$\begingroup\$

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.

\$\endgroup\$
5
  • \$\begingroup\$ I couldn't find an exact duplicate of this, but I'd like to know if this overlaps too strongly with an existing question. \$\endgroup\$ Commented Mar 14, 2014 at 18:51
  • \$\begingroup\$ If you rule out convergent series, what's left? \$\endgroup\$ Commented Mar 14, 2014 at 20:02
  • \$\begingroup\$ @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. \$\endgroup\$ Commented Mar 14, 2014 at 20:08
  • \$\begingroup\$ 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. \$\endgroup\$ Commented Mar 14, 2014 at 20:11
  • \$\begingroup\$ @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. \$\endgroup\$ Commented Mar 14, 2014 at 20:22
0
\$\begingroup\$

I like trees

...so this is a challenge to make me a tree.

Produce a program called tree which takes a single integer argument, N and draws a randomly-generated tree N levels deep, where level 0 is just the trunk.

  • Your program must produce visibly different results for at least N=0..5
  • The tree ought to not be symmetrical in any axis.
  • The tree should be an image
  • Tree(5) should mostly fill dimensions of at least 200w*250h
  • I should be able to run your tree from a bash prompt, eg. '$ python tree.py 3'

I also accept ferns.

Optionally your tree may be 3d, iterate forever, be colourful, have leaves at level 5, or be lit according to the time of day. However, this is code-golf, so the smallest file wins.

Tags: code-golf

\$\endgroup\$
0
\$\begingroup\$

Implement multi-line lambdas in Python.

Guido van Rossum said it couldn't be done, prove him wrong. Your solution should allow multi-line anonymous functions, like:

>>> f = multilinelamba("hour", """
...     if hour > 20 or hour < 6:
...         print "Good night"
...     else:
...         print "Hello world"
...     """)
>>> f(10)
... 'Hello world'

Your solution should be as close as possible to the behavior of real def or lambda. The actual syntax doesn't matter. E.g. you may choose to pass the code as a string as above, or you may find a way to avoid it. The implementation is also open, you may for example define a function, write a preprocessor, or edit the python source, but keep in mind that the solution should fit in the answer, so the last option probably won't work.

Your solution must allow arbitrary python code inside, except the following which is optional:

  • recursive use of the multilinelambda "statement" inside of the multilinelambda
  • calling the function recursively, i.e. using f inside the multilinelambda in the above function
  • defining classes and
  • importing modules (these two might be too hard)

You must also be able to use a multilinelambda as a parameter when calling a function.

You get bonus points:

  • If your solution captures outside variables in a closure, like real def does
  • For correct handling of exceptions in the multilinelambda. They should display similarly to when using def, and include line number relative to the file.
  • For allowing default parameters
  • For allowing *args and **kwargs
  • If the solution admits any kind of consistent indentation. Two options must be considered:

    • All lines have a common indentation (like in the example above) that can be stipped away.
    • The first line of the body is given on the same line as the multilinelambda statement. In this case, all the remaining lines must be checked for consistency. It makes a difference whether the first line starts a block or not. Example:

      multilinelambda("x", """print "Hello"
                              print "World" """)
      
      multilinelambda("x, y", """if x > y:
                                     print "case 1" 
                                 else:
                                     print "case 2"
                              """)
      

    In both cases, I may add or remove the same number of spaces to/from each of the lines following multilinelambda.


Any ideas for additional criteria? I personally don't really care much about picking a winner, this is more about tinkering and proving that it can be done. But in any way, more "unit tests" will only benefit the question.

Btw., I asked about this kind of question here on meta.

\$\endgroup\$
0
\$\begingroup\$

Foreword: This might have been done before, but I couldn't find any such cases. I think the scoring is quite fair now, and the challenge quite clear, but any criticism is welcome. Only thing I am not sure of (besides maybe a similar question existing) is whether it is rewarding enough to add a single language or whether a 2 byte solution which just runs in two languages is going to win (is that possible?).

The challenge

Write a single piece of code that will only output different deterministic integers depending on the language it has been interpreted as.

Scoring

Length of the code divided by the multiplication of the score of every used language. Esoteric languages have score 2 and production languages have score 3. For example, if you have a code of length 120 which runs in whitespace and javascript this will give a score of 120/(2*3)=20.

Rules

  • Versions and forks: Different versions and forks may count as different languages, provided that the output is not determined by the version or similar constants in any way. In other words: <?=intval(phpversion())?> or 1<!--[if IE 8]>1<![endif]--> is not allowed.
  • The outputted integer should be the constant and only dependent on the language it is run in.
  • Only the most common compiler for a language should be used.
  • The code should output nothing besides the integer.
  • No two interpretations (languages) of the code may yield the same integer.
  • In cases where there is any serious discussions of a language being esoteric, it will be counted as esoteric if no commercial company with at least 50 employees can be pointed to developing it's main product in the discussed language.

    ^ Blame the sandbox for that last crazy over specific rule

\$\endgroup\$
10
  • \$\begingroup\$ Define "esoteric." Also, the last time is fairly opinion-based. And what about different versions of the same language? Or similar languages (i.e. C and C++)? \$\endgroup\$ Commented Mar 22, 2014 at 21:40
  • \$\begingroup\$ Yes, a two-byte solution which runs in two languages is arguably possible. The arguments will come around things like what precisely you mean by "output ... [an] integer". Is additional non-numeric output (punctuation, ans - , or the like) permitted? If so, can the integer be part of an error message from the interpreter? Also expect arguments about whether languages are esoteric or production: it's clear-cut for C and Piet, but there are plenty of languages in much greyer territory. \$\endgroup\$ Commented Mar 22, 2014 at 23:30
  • \$\begingroup\$ @Doorknob: Added a link and a rule regarding esoteric. Addressed the issue regarding forks and versions. \$\endgroup\$ Commented Mar 23, 2014 at 0:27
  • \$\begingroup\$ @PeterTaylor: Great point regarding additional output! Would you have an example of a language you would consider to be gray? I added an additional note regarding the esoterism, but would like to have a 'gray' language to see whether the added rule would make a clear cut or still keep it gray. \$\endgroup\$ Commented Mar 23, 2014 at 0:29
  • \$\begingroup\$ "Major/generally known" is highly opinion-based... \$\endgroup\$ Commented Mar 23, 2014 at 0:31
  • \$\begingroup\$ @Doorknob: Although programmers do tend to think that anything a computer can not parse is opinion based, it is not hard to draw a line there knowing any of the social sciences, but fair enough, let me change that to a something even a programmer is able to comprehend. \$\endgroup\$ Commented Mar 23, 2014 at 0:38
  • 2
    \$\begingroup\$ Okay, seriously, now you're just being ridiculous. The reason an objective specification is needed is because two people might disagree with the interpretation of the rule. \$\endgroup\$ Commented Mar 23, 2014 at 0:45
  • \$\begingroup\$ The grey area I was thinking about is mainly functional languages. Common LISP, Haskell, OCAML, and F# all see some serious use; I'm not sure whether any of them meet your updated criterion. I can also report that a two-byte solution which runs in two languages is possible, but wouldn't win: I've found a three-byte solution which runs in three languages. \$\endgroup\$ Commented Mar 23, 2014 at 18:10
  • \$\begingroup\$ J and K were designed as production languages, but I haven't seen anyone use them as such. What do they count in this chalenge? \$\endgroup\$ Commented Mar 24, 2014 at 16:16
  • \$\begingroup\$ "it will be counted as esoteric if no commercial company with at least 50 employees can be pointed to developing it's main product in the discussed language." - first off, I don't think this kind of data is readily available. Second, I doubt you'll find a company that still codes in Algol, Perl or Fortran. \$\endgroup\$ Commented Apr 4, 2014 at 7:46
0
\$\begingroup\$

Split string of powers of 2

I had this idea while playing 2048; Every single power of 2 is unique, even if it contains another power of 2 as a substring because there are none that consist entirely of powers of 2.

For example, the string "2048409632864" can be split into 2048, 4096, 32, 8, 64 easily enough, but it can also be split into 2, 0, 4, 8, 4, 0963, 2, 8, 6, 4 with a simple left-to-right algorithm, which is incorrect.

So, the challenge is to correctly split these numbers in the shortest byte count possible. Is this a good idea?

\$\endgroup\$
4
  • 6
    \$\begingroup\$ But 128 can be split into 1 (20), 2 (21) and 8 (2**3) ... \$\endgroup\$ Commented Mar 24, 2014 at 15:13
  • \$\begingroup\$ Related - and read the comments, because I think a lot of that discussion is relevant to this question. \$\endgroup\$ Commented Mar 24, 2014 at 15:53
  • \$\begingroup\$ Does the program need to split the string into the smallest range possible? So if you get 2048, do you need go back and convert it into 2, 0, 4, 8? \$\endgroup\$ Commented Mar 24, 2014 at 15:53
  • \$\begingroup\$ also, that no word in a language can be decomposed does not imply that concatenations of words in that language are always unique. \$\endgroup\$ Commented Mar 24, 2014 at 16:13
0
\$\begingroup\$

A "counting" quine

and maybe . Hopefully codegolf.SE isn't tired of quines and quine-derivatives.

The aim of this golf is simple. Write a family of programs A and a single program B in your language, such that:

  • Program A(N) produces the source code of A(N+1) when run, independent of file name, current date, contents of STDIN, or similar external variables.

  • Program B, when given the source of A(N) as input, returns N. Input can be via STDIN, function argument, preinitialized single-character string variable, or language's equivalent.

Your score is the sum of the lengths of A(0) and B in bytes. Lowest score wins.

I called it a counting quine, because it is easiest to implement like a quine, except it also counts. The purpose of program B is to potentially allow for non-numeric changes between the programs in A, such as an increasing line of asterisks or something.

Things to consider

Is this too similar to "Program that creates larger versions of itself (quine-variant)?"

Golfscript has a particularly powerful answer to the above question, that could be adapted to this challenge. It seems like it would beat even my best J, which itself is a curt 29 + 10 = 39 bytes. If this question is dissimilar enough to post, are we just going to bite the pillow and let these two duke it out? Is there some kind of restriction that might make this a little harder or more unique?

Alternatively, should this be a ? Maybe it would be more fun or interesting not to constrain cleverness by size requirements.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ Seems potentially even more suited for functional tarpits. I suspect zot might be a contender. But it's certainly the case that the better answers to the other question are trivially adapted, so it would seem to be a duplicate as written. One way of adapting it which might solve that problem is to require B = A(0), or even to generalise that a bit so that A(N) with no input / empty input outputs A(N+1) and with input of A(M) outputs M+N in decimal. \$\endgroup\$ Commented Mar 28, 2014 at 15:11
  • 1
    \$\begingroup\$ You should give more importance to max(N) rather than code size. \$\endgroup\$ Commented Apr 3, 2014 at 4:58
  • 1
    \$\begingroup\$ @user80551 What for? That's not really an issue, even for the Golfscript solution, if you assume that time and space are not issues: theoretically N can reach to infinity. The same can be said of my J solution. However, it raises an interesting question: maybe this could be a [code-challenge], affected by the rate at which the program grows? Or maybe we take the max N, if all the programs in A have to be less than a certain filesize? Hmm... \$\endgroup\$ Commented Apr 3, 2014 at 5:17
0
\$\begingroup\$

(this isn't quite a duplicate of Water-Bucket problem because that question was ill-posed and apparently abandoned; it's also not a duplicate of 3 and 5 Litre Jug Puzzle because that one was just a single instance, and an instance of a different problem to boot)

die-harder

THE PROBLEM

In commemoration of Leslie Lamport's Turing Award, let's borrow a problem from his TLA+ online hyperbook. There are two versions: "Die Hard" and "Die Harder." "Die Hard" is an instance of the general, "Die Harder" problem. "Die Hard" is the following:

Given an empty jug, jug[0], with capacity 3 gallons; and an empty jug, jug[1], with capacity 5 gallons, deliver exactly 4 gallons of water under the following rules; you may:

  1. fill a jug completely, making its current amount equal to its capacity
  2. spill a jug completely, making its current amount equal to zero
  3. pour into a jug from another, either filling the destination, emptying the source, or both

One solution is to

  1. fill jug 1 (amounts are 0, 5)
  2. pour jug 1 into jug 0 (amounts are 3, 2)
  3. spill jug 0 (amounts are 0, 2)
  4. pour jug 1 into jug 0 (amounts are 2, 0)
  5. fill jug 1 (amounts are 3, 4)
  6. spill jug 0 (amounts are 0, 4)

I believe there are 3 more.

"Die Harder" is the following:

Given an ordered collection of n empty jugs with non-zero, not-necessarily unique capacities c[0], c[1], ..., c[n-1], deliver exactly k gallons of water, which may be spread out over multiple jugs, under the same rules as above.

THE CHALLENGE

Beat my reference Clojure code code for

A: performance, by choice of algorithm or by optimization or both (my algorithm becomes intolerably slow when the number of jugs > 3)

B: clarity (no obfuscators; we want to see your algorithm)

C: elegance

D: brevity

The above expresses the priority of the judging criteria: perf is more important that clarity, which is more important than elegance, which is more important than brevity.

Your code should behave as follows:

Given n, capacities in the form of a bracketed list like [3 5 7] and a target amount k, print t solutions in a form like the following in Clojure syntax, which is a solution for n = 2, capacities = [3 5], k = 4, and t = 2:

({:states
  [{:amount 0, :capacity 3, :id 0} {:amount 4, :capacity 5, :id 1}],
  :trace
  [(fill-jug 0)        (fill-jug 1)       (spill-jug 0)
   (pour-from 0 1)     (spill-jug 0)      (pour-from 0 1)
   (fill-jug 1)        (pour-from 0 1)    (spill-jug 0) ] }
 {:states
  [{:amount 3, :capacity 3, :id 0} {:amount 1, :capacity 5, :id 1}],
  :trace
  [(fill-jug 0)       (pour-from 1 0)     (fill-jug 0)
   (pour-from 1 0)    (spill-jug 1)       (pour-from 1 0)
   (fill-jug 0) ] } )

Each of your t solutions must present the final states of the jugs and a sequence of moves, in order, that achieve the solution. Minor variations to the above format are ok.

Extra credit if your code produces optimal (shortest number of moves, fewest pours, etc.) solutions and you can prove so. You may present proofs in commentary with your code; acceptance of a proof is at our sole discretion, as is judgment of clarity and elegance.

Include instructions for running your code if it's non-obvious (as in, "how exactly do I run this bit of INTERCAL?").

OBSERVATIONS

If the gcd of the capacities does not divide the target amount, the problem has no solution. In your golf, you might check this (my reference code assumes it, instead).

Certain moves, while legal, are trivial, namely:

  1. filling a full jug
  2. spilling an empty jug
  3. pouring from an empty jug
  4. pouring into a full jug
  5. repeating the last move, whatever it was

In your golf, you may either check for these trivial moves or not.

You might unit-test your code on inputs like the following:

capacities = [3 5 7],    k = any integer from 0 through 15
capacities = [3 5 7 11], k = any integer from 0 through 26

A REFERENCE SOLUTION

You can find a reference solution in Clojure here. It includes unit tests that demonstrate the program at work.

License

Copyright © 2014 die-harder

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

\$\endgroup\$
4
  • \$\begingroup\$ What's the scoring system? What's the licence supposed to cover? How much flexibility is supposed to be implied by "in a form like the following in Clojure syntax"? \$\endgroup\$ Commented Apr 30, 2014 at 8:40
  • \$\begingroup\$ Great questions. Will revise. \$\endgroup\$ Commented Apr 30, 2014 at 12:47
  • \$\begingroup\$ In your example Die Hard solution, I'm thinking you made a mistake in step 5 - wouldn't the amounts become 2, 5? \$\endgroup\$ Commented May 17, 2014 at 12:06
  • \$\begingroup\$ I've got two solutions for Die Hard showing -- in the first one, after the fifth step, namely (spill-jug 0), the 3-jug (jug 0) has 0 and the 5-jug (jug 1) has 2. In the second solution, after the fifth step, namely (spill-jug 1), the 3-jug (jug 0) has 1 and the 5-jug (jug 1) has 0. Not sure where you're seeing my error :) \$\endgroup\$ Commented May 18, 2014 at 13:25
1
93 94
95
96 97
167

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.