# What is the Sandbox?

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

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

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

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

• How are tags added to questions? – guest271314 Jan 9 '19 at 7:51
• @guest271314 You can use this markup to create a tag in a draft: [tag:code-golf] – James Aug 29 '19 at 15:19
• Why no featured anymore? Can't we have it auto-added or something? – S.S. Anne Sep 26 '19 at 15:57
• @JL2210 We now have a permanent info box that links to the Sandbox, so the featured tag isn't necessary – caird coinheringaahing Sep 29 '19 at 13:43

# Do X with Y code-golfascii-art

Your task is to create a X made of nested 3x3 lowercase Ys, with n levels of nesting. Here is how a X looks like (this is also the output for n = 0):

y y
y
y y


A 0-level nested lowercase Y is just y. To nest a lowercase Y a level further, you arrange 4 copies of it like this:

y y
y
y


Here is the output for n = 1:

y y   y y
y     y
y     y
y y
y
y
y y   y y
y     y
y     y


Here is the output for n = 2 (I typed all of this by hand; excuse any mistakes):

y y   y y         y y   y y
y     y           y     y
y     y           y     y
y y               y y
y                 y
y                 y
y y               y y
y                 y
y                 y
y y   y y
y     y
y     y
y y
y
y
y y
y
y
y y   y y         y y   y y
y     y           y     y
y     y           y     y
y y               y y
y                 y
y                 y
y y               y y
y                 y
y                 y


# Input

A non-negative integer n. You may choose the levels of nesting to be either 0- or 1- indexed.

# Output

A X made of nested 3x3 lowercase Ys, with n levels of nesting, as a string, list of lines as strings, or outputted directly.

## Sandbox stuff

• Is anything missing?
• Is the specification of the X clear enough?
• heavily related question. I'm not 100% convinced this is different enough to not be a dupe, but I'd try to get some more feedback before posting/abandoning this. – Giuseppe Jun 3 '19 at 21:37
• I think this would be a duplicate. My experience with porting an answer from yet another 3*3 fractal challenge was that I only needed to make a small change in the code. – xnor Jun 4 '19 at 4:49
• I have no idea if should I post this or not, as this both is +3 and seems to receive feedback as a possible duplicate. – my pronoun is monicareinstate Jun 13 '19 at 14:53

# Atomic Handshakes

## Introduction

Here you are. At a party, with two drinks in your hands. Your friend just went to the bathroom and you don't really know anyone else here. And so you wait. Or do you?

There is a century old hypothesis known as Six Degrees of Separation. The hypothesis states, that any other person in the world is connected to you as a friend of a friend of a friend etc.. It would essentially only take you six handshakes to connect with any other person on this planet. But is there actually any truth in this hypothesis? That's what we're about to find out in this challenge!

A similar question also finds its way into my own field of expertise: chemistry. Hence the title. Chemistry is the study of molecules, and molecules get very complex very fast. All (for the sake of simplicity) atoms in a molecule are connected. For certain types of analysis, one may need to know how many connections (bonds) it takes to get from one atom to another.

## The Challenge

In a set of N people, each person has a maximum of N-1 direct connections. Based on this information, it is your task to deduce for every person what the lowest number of connections is to get to every other person.

People (and atoms too) can have similar names. Therefore, instead of a name, every person will get a unique identifier. To make things easy, the identifier will be a non-negative integer and the integers are all consecutive. How convenient!

### Input

An array-like object of size N which lists the first-degree connections for each person.

### Output

A two-dimensional, symmetrical array of size NxN which shows for each person the shortest distance to every other person.

## Challenge rules

• All people are connected: there are no loners or isolated groups in the input
• Circular connections are allowed, but
• Only the shortest connection must be output as more ways lead to Rome

## Examples

As the theory may still be somewhat confusing, I will include a network graph for each example. This should make it a lot easier to understand what we're talking about. Here goes!

### Example 1

Consider the connected set

0---1---2---3
|   |
4---5---6


For this network, our input array will be

[[1]          # Since 0 is connected only to 1
[0 2]        # Since 1 is connected to 0 and 2
[1 3 4]      # Since 2 is connected to 1, 3 and 4
[2 5]        # Et cetera
[2 5]
[3 4 6]
[5]]


Which should result in the following output (excluding comments):

# Distance from
# 0 1 2 3 4 5 6
# To
[[0 1 2 3 3 4 5]   # 0
[1 0 1 2 2 3 4]   # 1
[2 1 0 1 1 2 3]   # 2
[3 2 1 0 2 1 2]   # 3
[3 2 1 2 0 1 2]   # 4
[4 3 2 1 1 0 1]   # 5
[5 4 3 2 2 1 0]]  # 6


### Example 2

Consider the connected set

.-------.
|       |
|   0   |
|   |   |
|   1---2---3---.
|   |   |   |   |
'---4---5---6   |
|           |
7---8---9---'


For this network, our input array will be

[[1]          # Since 0 is connected only to 1
[0 2 4]      # Since 1 is connected to 0, 2 and 4
[1 3 4 5]    # Since 2 is connected to 1, 3, 4 and 5
[2 6 9]      # Et cetera
[1 2 5 7]
[2 4 6]
[3 5]
[4 8]
[7 9]
[3 8]]


Which should result in the following output (excluding comments):

# Distance from
# 0 1 2 3 4 5 6 7 8 9
# To
[[0 1 2 3 2 3 4 3 4 4]   # 0
[1 0 1 2 1 2 3 2 3 3]   # 1
[2 1 0 1 1 1 2 3 3 2]   # 2
[3 2 1 0 2 2 1 3 2 1]   # 3
[2 1 1 2 0 1 2 1 2 3]   # 4
[3 2 1 2 1 0 1 2 3 3]   # 5
[4 3 2 1 2 1 0 3 3 2]   # 6
[3 2 3 3 1 2 3 0 1 2]   # 7
[4 3 3 2 2 3 3 1 0 1]   # 8
[4 3 2 1 3 3 2 2 1 0]]  # 9


### Example 3

Consider the connected set

.---0---.
|   |   |
1---2---3
|   |   |
'---4---'


For this network, our input array will be

[[1 2 3]      # Since 0 is connected to 1, 2 and 3
[0 2 4]      # Since 1 is connected to 0, 2 and 4
[0 1 3 4]    # Et cetera
[0 2 4]
[1 2 3]]


Which should result in the following output (excluding comments):

# Distance from
# 0 1 2 3 4
# To
[[0 1 1 1 2]   # 0
[1 0 1 2 1]   # 1
[1 1 0 1 1]   # 2
[1 2 1 0 1]   # 3
[2 1 1 1 0]]  # 4

• In short, all pairs shortest path. Single-route shortest path would definitely be closed as a duplicate; I would say there's a significant chance that the consensus will be that this is also a duplicate of one of the questions in path-finding. – Peter Taylor Jul 5 '19 at 10:59

# Too many spies

You are fighting an extensive network of enemy spies. You know that each spy has at least one (sometimes multiple) fake identities they like to use. You'd really like to know how many spies you're actually dealing with.

Luckily, your counter-intelligence agents are doing their job and can sometimes figure out when two fake identities are actually controlled by the same enemy spy.

That is to say:

• Your agents don't always know when two fake identies have the same spy behind them, however
• If an agent tells you two fake identities are controlled by the same spy, you trust they are right.

# Agent messages

Agents send you cryptic messages telling you which identities have the same spy behind them. An example:

You have 2 agents and 5 fake identities to deal with.

The first agent sends you a message:

Red Red Blue Orange Orange


This means they think there are 3 spies:

• the first one (Red) controlls identities 1 and 2
• the second one (Blue) controlls identity 3
• the third one (Orange) controlls identities 4 and 5

The second agent sends you a message:

cat dog dog bird fly


This means they think there are 4 spies:

• the first one (cat) controlls identitiy 1
• the second one (dog) controlls identities 2 and 3
• the third one (bird) controlls identity 4
• the fourth one (fly) controlls identity 5

Compiling the intel we see:

Identities:   id1    id2    id3    id4    id5
Agent 1:    |--same-spy--|       |--same-spy--|
Agent 2:           |--same-spy--|
Conclusion: |-----same-spy------||--same-spy--|


This means there are at most 2 spies.

# Notes

Identities owned by the same spy do not have to be consecutive, i.e. a message like:

dog cat dog


is valid.

Also, the same word might be used by two different agents - that does not mean anything, it's just a coincidence, e.g.:

Agent 1: Steam Water Ice
Agent 2: Ice Ice Baby


Ice is used by both agents - the Ice used by the first agent is unrelated to the two occurences of Ice used by the second agent.

# Challenge

Compile all your agents' intel and figure out how many enemy spies there really are. (To be more precise, get the lowest upper bound, given the limited information you have.)

The shortest code in bytes wins.

# Input and Output spec

The input is a list of n lines, which represent n messages from agents. Each line consists of k space-separated tokens, same k for all lines. Tokens are alphanumeric, arbitrary length. Case matters.

The output should be a single number, representing the number of distinct spies, based on your agents' intel.

# Examples

### Example 1

Input:

Angel Devil Angel Joker Thief Thief
Ra Ra Ras Pu Ti N
say sea c c see cee


Output:

2


### Example 2

Input:

Blossom Bubbles Buttercup
Ed Edd Eddy


Output:

3


### Example 3

Input:

Botswana Botswana Botswana
Left Middle Right


Output:

1


### Example 4

Input:

Black White
White Black


Output:

2

• The core problem of union set is nicely presented, but the input requirements are rather too restrictive. The question will be better received if the input is permitted to be received as an array of arrays or any other reasonable list format. See codegolf.meta.stackexchange.com/q/7853/194 – Peter Taylor Jul 16 '19 at 8:22

Originally posted on main site, moved here for more suggestions. Better scoring mechanics required.

# Introduction

I've been browsing all those challenges and was thinking "yeah, they're good, but what if we make GoL one?", so here it goes.

# Challenge

Build starting setting for either Conway's Game of Life or other similar cellular automaton (restricted to ones with binary cell state) which after known amount of generation will include square area containing representation of QR code decodable to string "Hello, world!".

• Cell (non-empty state) is interpreted as black pixel, no cell as white.
• Your automation should take at least one generation until result (no hardcoded results allowed).
• Your automation operates on infinite board.
• Not sure if this option will be useful, but you can specify scaling ratio: single integer, setting side of square encoding single pixel. Pixel's color is color of cell dominating by count in it (you can specify 50/50 edge case resolution in your answer). Obviously, in this case side of output area should be proportional to scaling ratio. This option doesn't affect scoring.
• It's not necessary, but nice to provide either link to online demo or .rle file.

# Example result

Decodes to "Hello, world!"

# Scoring

score = (initial amount of cells)^2*(number of generations until result) + (number of cells out of output area)*5


Lower score is better.

Happy GoLfing!

• I think this challenge is interesting, although I suggest that the scoring criterion be a combination of the number of initially on cells and the number of generations necessary to get to the final output, without counting the number of on cells in the output (otherwise there's an aspect of QR code golf in the challenge as well, which complicates matters more). Also, I don't really understand the 4th bullet point. Finally, you seem to want to allow different binary cellular automata to compete, just like different languages. Is this true? – Erik the Outgolfer Jul 14 '19 at 22:48
• @EriktheOutgolfer Why would including amount of cells out of output area be bad? It only counts cells which aren't part of QR code, so it seems acceptable. 4th point may probably need some illustrations to make it easier to get (or just remove that). You got the last part right. – val says Reinstate Monica Jul 14 '19 at 23:34
• Oh, I misread the "out of output" part. So you allow extraneous on cells outside of the QR code with a penalty? – Erik the Outgolfer Jul 14 '19 at 23:36
• @EriktheOutgolfer I think that is more or less fine to have some cells on field as long as output in specified area is correct by itself. – val says Reinstate Monica Jul 14 '19 at 23:37
• Could you clarify what classes of automata are eligible? You've specified only binary (two possible cell states). What neighbourhoods are valid? Only the standard 3 by 3 Moore neighbourhood, or also other size and shape neighbourhoods like Von Neumann neighbourhoods? Must all cells in the neighbourhood contribute equally to the outcome (a totalistic automaton) or can different patterns of the same number of "on" cells give different results? – trichoplax Jul 16 '19 at 21:06
• Where you choose to draw the line is entirely up to you, but it could have a large effect on the nature of the challenge. For example, if arbitrary size and shape neighbourhoods are allowed, with rulesets based on the arrangement of "on" cells rather than just how many are "on", it may be possible to choose a ruleset that gives the output in a single step (maybe - I haven't thought it through). Whether you see that as a bad thing or an interesting way of solving the challenge will determine how restrictive you choose to be. Personally I'd stop short of allowing quite that much flexibility... – trichoplax Jul 16 '19 at 21:09
• Is there a standard for QR that avoids all disagreement as to what's a valid code? On further thought, it might be better just to requre a fixed output pattern, like some pixel version of Heelo World, and not have the whole QR layer. – xnor Jul 16 '19 at 21:35
• In particular, following @xnor's comment, does "decodable to" mean that errors are allowed as long as they're below the threshold for correction? – Peter Taylor Jul 17 '19 at 10:55

# How long's left? code-golfwordtext-processingdate

Posted here.

• Shouldn't the third test case be FifTy Nine MiNutes And ForTy Six SeConds? – Erik the Outgolfer Jul 9 '19 at 19:26
• @EriktheOutgolfer Thanks, fixed – Geza Kerecsenyi Jul 9 '19 at 19:27
• @Shaggy the challenge here isn't to calculate the number of syllables: it's to find the first number that has the same number of syllables as the distance from the current time. – Geza Kerecsenyi Jul 11 '19 at 21:14
• Ah, OK, I get it now. Yeah, I think that's sufficiently different, so; ignore my previous comment! – Shaggy Jul 11 '19 at 21:17
• Could you please clarify how many syllable each number has? (A list should help.) – tsh Jul 12 '19 at 7:38
• @tsh done, see now. – Geza Kerecsenyi Jul 12 '19 at 15:05

# Character Frequency in a String

Posted here.

• i dislike the special case of space – Jo King Jul 21 '19 at 1:25
• @JoKing If there was no special case for space, a string like 1 a would look something like 1 1; 1;a 1. Also, it's for the challenge. – bigyihsuan Jul 21 '19 at 3:19
• I'm with @JoKing on this; nothing is added to the challenge by special-casing spaces. – Shaggy Jul 21 '19 at 21:08
• I'd like to further say that restricting the output this much doesn't seem to add much to this challenge. Why isn't, for example, a list of pairs acceptable? I can't find any justification for your output rules. That's not to say you can't do it, but I have a hard time imagining it will be popular. – FryAmTheEggman Jul 22 '19 at 18:58
• – AdmBorkBork Jul 23 '19 at 20:15
• @AdmBorkBork, having since given it a try in JS, I'm pretty sure there's a closer (potential) dupe target than that. – Shaggy Jul 23 '19 at 22:12
• Having posted this, you should delete the sandbox post. – Adám Jul 24 '19 at 6:29

# Golf range minimum queries of a list

Looks like this post hasn't gotten any problems called out, but also not that much support. If you could leave even a brief comment if you don't like it, that would be much appreciated.

(Inspired by the first problem solved in Stanford’s advanced data structures course.)

Despite the academicese-heavy name, the problem we're going to solve is almost unbearably simple.

We have a list of numbers.

[31, 41, 59, 26, 53, 58, 97]


We're going to cut some contiguous snippet out of that list of numbers.

[31, 41, 59, 26, 53, 58, 97]
|41, 59, 26, 53|


And then we're going to find the minimum of that snippet. In this case, that's quite obviously 26. That's all.

And the obvious solution is pretty fast, too, with O(n) time and O(1) space in the size of the list:

minval = arbitrarily large value
for (i=first snippet index, i<last snippet index, i++)
if (list[i]<minval) minval = list[i]


### So what's with the fastest-algorithm?

Where it gets interesting is when you try to see how efficient you can make it when you have a fixed list but a large number of range minimum queries -- snippets to find the minimum of. This version of the problem is useful, for example, if you have a huge time series you want to load only once, but you want to find the minimum of many different subintervals of that time series.

In such a scenario, it would actually be faster in practice to literally precompute all n**2/2 queries, store it in a table, and then just retrieve data from that table for an O(1) time and O(n**2) space solution. ^dynamic programming solution taken from the Stanford slides

And then if you're clever enough, you realize that you only have to store each query with size that's a power of two -- you can just combine those power-of-two minima to sum to an arbitrarily sized query, and achieve the same results with constant time and linearithmic rather than quadratic space.

Interestingly, if you keep optimizing, you can get to an O(1) time and O(n) space solution using a sort of augmented list known as a Fischer-Heun structure. I'd love to go into the details of the structure here, but explaining how it weaves into Cartesian tree building on fixed-size snippets would make this question about 50 pages long. It's explained in the Wikipedia page linked in the title (which I've copied here), however, along with several faster-than-linear intermediate structures.

(If you can get past a research paywall, here's the original Fischer & Heun 2011 paper. And if you’d prefer the much more verbose but much more hand-holdy Stanford lecture style, here are the follow-up slides that goes into this solution, including lots of intermediates.)

## The challenge

You can either write a full program or a function that calculates the result of a series of range minimum queries given a fixed list. Scoring is set up such that in general, the shortest and most-efficient-over-lots-of-queries code wins.

Input:

A list of integers xs, followed by a series of i, j pairs denoting the start and end of the snippet, inclusive (so the 26 example above uses indices i=1 and j=4). The list of integers is guaranteed to have at least one integer, and 0 <= i <= j < len(xs). This can be taken in any format that works best for your language — for example, one list for xs and one list of tuples for the i, j pairs; or maybe all the different pairs as a variable number of arguments. For a full program that takes in input from stdin, I’ll fix a format for the input:

xs[0] xs[1] xs[2] xs[3] ...
i1 j1
i2 j2
i3 j3
...


Output:

An ordered collection of the range minima for each i, j query, in the same order that they were given. In case an unordered map (such as a Python dictionary) from each i, j query to its range minimum works better for your language, that will also be allowed as an output; as long as it's obvious which minimum is related to which query.

Once again, for a full program that prints to stdout or a file, I’ll fix the format to have each range minimum on each newline (trailing newlines permitted).

## Scoring:

Lower score is better; score is determined by

at(b)^2+as(b)


Where b is the byte count of your code, at is the asymptotic runtime Ө(n) of the algorithm in the size of xs interpreted as a function of n, and as is the asymptotic space usage Ө(n) in the size of xs interpreted as a function of n.( All constant coefficients in such Ө(n) expressions must be 1, and only the fastest growing term may be kept in expressions, as is standard.)

Therefore, the above pseudocode solution, which uses Ө(n) time and Ө(1) space, and is 126 characters, would have a score of (b => b**2 + 1)(126)=15876+1=15877. (Of course, the pseudocode isn't really valid since it's missing a construct to deal with multiple queries, and also because it's uncompilable pseudocode...)

## Test cases:

Input:

31 41 59 26 53 58 97
1 4
0 2
5 6


Output:

26
31
58


Input:

1
0 0
0 0


Output:

1
1


Input:

-4 28 31 -54
0 0
0 1
0 2
0 3
1 1
1 2
1 3
2 2
2 3
3 3


Output:

-4
-4
-4
-4
28
28
-54
31
-54
-54


# Sandbox Questions:

• Would the asymptotic runtime count as a non-observable requirement?

• is this too long and/or abstruse lol

• I’m not sure how to word the scoring section to narrow down the most obvious, basic O(n) expression — an algorithm that’s Ө(n) is also Ө(n/16384-50000) by definition. Is what I have clear enough? Have I left any loopholes?

• I kind of wanted to encourage people to try to implement Fischer-Heun or one of the more time-efficient intermediates in the slides, without restricting them to one particular algorithm (e.g. challenge: you have to make a Fischer-Heun structure). Does the scoring system make sense for this? Is it fair to have, for example, a Jelly answer using the naive algorithm in 3 bytes (score 10) compete with a Jelly answer using the Fischer-Heun structure in 30 bytes (score 31); but a naive Python answer with score 3000+ compete against with a Python Fischer-Heun with score 300?

• [tag:tag-name] – Adám Jul 30 '19 at 19:06

# Introduction

Recently, me and a couple of my friends decided to play some cards, and one of them suggested the game 'Irish Snap', which was the inspiration for this challenge. However, I later learnt that the game has a lot of different rules that work ,some of which are listed here. The rules that are in this challenge aren't currently listed on that page, hence the name, 'Variant Rules'

# The Challenge

Given an array of 3 cards, output a truthy or falsey value depending on if they make a valid snap in a game of Irish snap.

# Input

The input will be an array of 3 numbers, ranging from 1-13 inclusive, with 11 being jack, 12 being queen and 13 being king. The last number in the array will be the number at the top of the stack of cards.

# Rules

The 4 different criteria for if cards make an Irish snap are a snap:

• The top and middle cards are the same
• The top and middle cards have a difference of one
• The top and bottom cards are the same
• The top and bottom cards have a difference of one

If any of these criteria are met, you must output a truthy value. As well as this, for the two criteria that require the cards to have a difference of one, it 'wraps around', meaning that an ace and a king are considered to have a difference of one, and vice versa.

# Test Cases

Input -> Output
1 13 7 -> False
1 4 13 -> True
9 3 6 -> False
8 9 7 -> True
2 6 5 -> True
12 5 11 -> True
10 4 8 -> False
12 13 7 -> False
9 7 10 -> True
7 3 1 -> False

• Wikipedia describes a substantially different game under the same name. Is there any less ambiguous name for this? – Peter Taylor Aug 6 '19 at 8:27
• Although I don't think there is a less ambiguous name for it that I can find, the version I described is a combination of the alternate rules listed below the section you linked: 'conventional snap', 'runs', 'sandwiches' and the last rule I listed is basically a combination of 'runs' and 'sandwiches'. How could I change the name to reflect this? – EdgyNerd Aug 6 '19 at 8:38
• Should I change the name to "Ultimate Snap", as that's what Wikipedia says those rules are commonly referred to as? – EdgyNerd Aug 6 '19 at 8:42
• I think runs as described requires all three cards and in the right order. Maybe "Irish snap: variant rules" would be a suitable title, and the introduction can reference Wikipedia and say that the exact rules we'll be using aren't listed (at time of writing the question). – Peter Taylor Aug 6 '19 at 8:49
• Ok, I've added in all of those suggestions – EdgyNerd Aug 6 '19 at 11:23
• As our token Irishman, I endorse the keeping of "Irish Snap" in the challenge name! – Shaggy Aug 7 '19 at 21:22
• Do you think I'll be able to post this now? – EdgyNerd Aug 20 '19 at 9:44

# Truth Table Composition

Given 2 or more truth tables, output the "shortest" way to compose the first N-1 tables to form the last (Nth) table.

## Rules

• Standard loopholes/io rules apply.
• Input is a "list" of truth tables
• A truth table is a "list" of rows that contain the inputs and the corresponding output
• The input will always be the same length for a given table
• There must be $$\ 2^N \$$ rows in a given table, where N is the number of inputs in the table
• Each row must have distinct input
• Inputs and outputs must both be "booleany" e.g.:
• true/false
• 1/0
• truthy/falsey
• "Bob"/"Sally"
• The input can be in any reasonable format.
• Any of the formats shown here are reasonable.
• Taking the output first (ie for &: 1,1,1;0,0,1;0,1,0;0,0,0) is reasonable.
• Input that requires non-trivial logic to convert is not reasonable.
• Output is a "nested structure"
• Each level of the nest contains information of the:
• Truth table that was used
• The ordered inputs (of this structure)
• If a node is a leaf (one of the inputs to the final truth table) it must:
• Be distinguishable from the other nodes
• Contain the index of the input to the final table
• Output format must be reasonable (see details under input)
• "Shortest" is measured by the number of nodes in the output structure.
• It will always be possible to construct the last table with the first N-1.
• You do not need to handle invalid input.
• This is , so the answer with the smallest asymptotic time complexity wins! Answers that do not aim to be efficient are also welcomed.

Yes, I'm done with rules now. Sorry.

## Test Cases

For these test cases, the output is explained below. Note that this is not the output format you have to use! - $N is the Nnt input to the final table (0-indexed) - N(...) is the Nnt input table applied to ... (also 0-indexed) - Arguments are comma separated and are in this format. - Note that N() is different from $N; the former is the Nnt truth table applied to nothing (only valid in the case of truth tables 1 and 0), and the latter is the Nnt input to the final table.

Input:
(anything)

1 0 0
0 1 1
0 0 0
1 1 1

Output:
$1 (length 1; leaf; gives the second input)  Input: 1 0 0 1 1 1 1 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 0 1 0 1 0 Output: 0($1) (length 2; the first table (not) applied to the second input)

Input:
1 0
0 1

1

0

Output:
0(1()) (length 2; the first table (not) applied to the second table (true))

Input:
0 1
1 0

1

1 0
0 1

Output:
0($0) (length 2; the first table (not) applied to the first input to the final table)  Input: 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 0 0 Output: 1(2($0,$1),0(1($0,$1))) (length 8; "(A | B) & !(A & B)")  # Meta I think more test cases are needed, but am unsure what to add. This is my firstsecond challenge, so all feedback is welcome! • The idea is good, I think. I had trouble understanding at first read though, and didn't understand at all your $ things. I suppose $1 is the same as 1() but I'm not sure. Suggested test case: Input : (1,0;0,1) ; (1) ; (1,0;0,1) with Output : 0() and not 0(1()) or 1(0()). – V. Courtois Aug 13 '19 at 14:40 • @V.Courtois $0 is the first input to the final table, $1, the second etc. 0(...) is the first input table, 1(...) is the second, etc. Any recommendations on a better format? – tjjfvi Aug 13 '19 at 14:43 • @V.Courtois Added your test case, though 0() is not a valid output as (1,0;0,1) takes in 1 input, not zero, it should be 0($0) – tjjfvi Aug 13 '19 at 14:46
• Do you mean \$0 is the input on the first row of the output table? It got even more foggy... Plus, isn't a truth table's order meaningless? I mean, you even swapped the order of the rows in the last test case. And I just noticed now the # notation... Would you mind clarifying it all? Those signs are nowhere defined in the challenge ^^' – V. Courtois Aug 13 '19 at 14:52
• OH ; and by re-reading all the text I saw that your & is strange: why does 0&0 get 1?? – V. Courtois Aug 13 '19 at 14:53
• @V.Courtois The "&" is not an &, it is an iff/not xor – tjjfvi Aug 13 '19 at 14:54
• Oh my bad then, I didn't know for this one. – V. Courtois Aug 13 '19 at 14:56
• @V.Courtois Tomorrow I’ll revise the test case format – tjjfvi Aug 14 '19 at 0:38
• @V.Courtois I explained & slightly revised the notation; is it clearer now? If you have any suggestions, they would be very welcome. – tjjfvi Aug 14 '19 at 12:30
• Ah yeah, it looks clearer now. The test case of length 8 is really helpful in the process, too, for guys like me that in general read the test cases before reading what is the actual challenge about :) Let's hear other points of view about this challenge, for my part I don't see any problem now. – V. Courtois Aug 14 '19 at 12:38
• You can remove the "Exception: if there are 0 inputs, there must be 1 row." line, $2^0=1$. – Erik the Outgolfer Aug 15 '19 at 22:16
• For languages that support ND array, a ND array (each dimension has size 2) would be a natural representation of a N-ary truth table. – user202729 Aug 16 '19 at 4:44
• In your example is "1 1 1" = "(1, 1) -> 1" or "1 <- (1, 1)"? – user202729 Aug 16 '19 at 4:46
• Also: do you know any polynomial time solution to this problem? – user202729 Aug 16 '19 at 4:48
• @EriktheOutgolfer shame. I'll fix that. – tjjfvi Aug 16 '19 at 13:16

# Planting Steiner Trees

In the following we are talking about Steiner trees, which are similar to minimal spanning trees: The goal is connecting all nodes via some paths such that the resulting graph that is as short as possible. In contrast to minimal spanning trees when constructing steiner trees you can add additional nodes.

In the following we are talking about points in the real 2d plane and when we are talking about distances and lengths, we are talking about the euclidean distance.

Also, a graph will comprise a set of points where the edges are straight lines between pairs of those points. The length of a graph will be the sum of the length of all edges.

So a steiner tree is a shortest graph connecting all given points possibly with inserting additional points. The following image shows the difference between a minimall spanning tree (blue) and a steiner tree (red).

It is known that it is very difficult to find steiner trees.

Write a program that accepts a list of 2d points and tries to find/approximate a steiner tree of minimal length connecting those points by possibly introducing more points. (It does not have to find the an actual steiner tree.)

The program should output a list of all the points (including coordinates) of the constructed graphs, a list of all edges (including their lengths), the total length of the graph and a graphical representation of the grap.

The program should have a running time of no more than about half a minute for each of the examples on a reasonable computer.

You should also explain how your algorithm works.

# Scoring

The program must be evaluated on all the [NOT YET] given test cases. The score is the sum of the total length of all test cases. The lowest score wins.

# Test cases

Square:
(0,0),(0,1),(1,1),(1,0)

Nonagon:
(cos(2*pi*a/9),sin(2*pi*a/9)) for a = 0,1,...,8

(0,0),(0,1),(1,0),(1,1),(2,0),(2,1),(3,0),(3,1),(4,0),(4,1),(5,0),(5,1)


# Meta: I need to find a good set of test cases. Suggestions are appreciated.

If you have any suggestions, feel free to edit/add. Any improvements of the text are appreciated too.

@El'endia Starman Pointed out some interesting n-gon configurations

• It is known that Steiner trees for regular n-gons where 7 <= n <= 12 are simply the n-gon with one side removed. 4,5,6 all have interesting configurations though. – El'endia Starman Oct 31 '15 at 0:03

# Shortest Persistent Object in 5-Char JS

The []+= subset of JavaScript is known to be Turing-complete. A key part of the construction is obtaining persistent objects whose properties can be set and retrieved in a loop.

Most expressions won't evaluate to constant values. For example, [] != [] when compared by reference. However, some expressions, such as [].name, return the same object every time they are evaluated.

The following should hold when e is substituted with your submission:

• (e) instanceof Object (this includes functions and arrays)
• (e) == (e)

This is , so the shortest valid submission (measured in bytes) wins.

## Cleaning the dishes

In this task, you will be given a bar of soap with a width of 1 or more units, which will be inputted as an integer. You will also be given a plate, which you will have to clean, using the soap as few times as you can. The plate will be inputted as a an array of 2 different characters, one of which is the 'dirty' character, and one of which is the 'clean' character. The plate will be at least 1 character. You will have to output an array with the 'clean' character representing the plate, and a third unique character to represent in what positions the bar of soap was placed. None of these 3 unique characters may be whitespace.

How much the soap cleans:

n//2-1 on each side for odd n
n//2-1 on the left side of the soap bar for even n
n//2   on the right side of the soap bar for even n


## Input

An integer greater than or equal to 1. A series of 2 unique characters to represent clean portions and dirty portions. Here, '=' represents a dirty portion, and '-' represents a clean portion. '+' represents where the soap was placed.

IN : OUT

3 ===- : -+--
32 ================================ : ---------------+----------------
1 ==== : ++++
5 ----- : -----
4 -====- : --+---
3 -====- : --+-+-
7 === : +--
6 - : -
6 -==-===- : ---+----
5 -==--==- : ---+--+-
3 -==--==- : --+--+--


## Rules

• There are multiple solutions. Any one of them are acceptable, as long as they use the soap the minimum amount of times possible.
• This is a contest, so the shortest answer in bytes wins!
• The plate may only be non-whitespace characters, and have 2 unique characters.
• The soap may only be one non-whitespace character, unique from the other 2 used in the plate.
• Standard loopholes are not allowed.

Posted: Cleaning the dishes

• If "soap input may only contain the characters '0' through '9', and may be multiple characters", then can it not be passed as an integer argument to a function? – Unrelated String Sep 4 '19 at 4:15
• i already specified rules about soap input in the first paragraph, so i will erase that rule. – girobuz Sep 4 '19 at 20:34
• There seem to be multiple possible outputs, e.,g.: 3 =-=-= could be either +--+- or -+--+, yes? If that is true, can we output any of them? – Chas Brown Sep 7 '19 at 23:34
• Yes, any output is acceptable, as long as it works, and is the minimum. – girobuz Sep 7 '19 at 23:53

## Battleship KotH

This is a pretty rough idea to start but I figured I would drop it in the sandbox so that people can start to think about it and I will remember to do it.

The idea here is a that combines the game, battleship with .

The rough idea is that two enemies would face off, each turn irradiating a location in their opponents source code. Then the opponents source code would be recompiled and then try and attack back.

• We will likely want to limit the size of the board to a specific rectangular size

• I would like there to be a feedback from shooting your opponent (in the game battleship this is hit/miss) so that you are doing more than just firing randomly. Perhaps programs might irradiate a single bit (flipping its value) and get back its value before it was irradiated.

Language choice is a bit tough since I would like something multipurpose and flexible but I don't want to have to deal with the security issues that are involved in compiling and running a fully featured programming language.

• radiation-hardening tends to work best with deletion. This is going to need a maximum byte count to be fair, otherwise the best strategy is excessive amounts of whitespace and comments. Love the idea though. – Beefster Sep 17 '19 at 14:22
• You don't actually have to limit yourself to a specific language on this one. It wouldn't be that hard to use a shell script to run whatever languages are available. One question though: is each program able to read the source code of the other or is each attack supposed to be blind? If you're worried about security, you could run the controller in a docker container or VM. – Beefster Sep 17 '19 at 14:26

# Injection from two strings to one string

• Do you think that a reasonably number of languages won't implement the following: convert the strings into numbers (e.g. treat each character as a base 128 digit) then give a resulting string of those two numbers joined by some other character? I haven't spent too long thinking about it but that seems very short in most languages. I suppose there are other variants though where you map characters to some subset and then join them. – FryAmTheEggman Sep 24 '19 at 20:42
• @FryAmTheEggman I imagine the solution used is going to depend on the language: what builtins it has, if it's more high-level or low-level, etc. But there may well end up being a prevalent algorithm. – negative seven Sep 24 '19 at 20:57
• Why strings? Lists of integers, (even restricted to a range) work as well but don't have the complexities that strings do when it comes to printables etc. I feel like the simpler challenge is going to be the better one. – Ad Hoc Garf Hunter Sep 26 '19 at 3:30
• @FryAmTheEggman Don't worry, I've thought of a totally different approach that I think would be shorter for many languages. – xnor Sep 26 '19 at 4:46
• @SriotchilismO'Zaic Restricting the character set seems to me like a reasonably simple detail, while making it about strings encourages creativity with string operations, converting to string representations, etc. Also, I personally think string input/output is much more appealing to look at and easier to consume than a list of numbers. – negative seven Sep 26 '19 at 14:38

# Code Golf Measurer © 2019

Hexdumps used with xxd look something like this:

00000000: 666f 6f20 6261 7220 7370 616d 2065 6767  foo bar spam egg
00000010: 730a                                     s.


Your task is to convert a hexdump in this form in to the number of bytes used.

## Rules:

• Usual loopholes forbidden.
• This is , so shortest valid answer in bytes wins.
• You may or may not include the newline at the end of text (0a). This means that if the hexdump ends in a newline (0a), that input may have it's output reduced by one.
• An empty input must output 0.

## Test cases:

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 2120 4865  Hello, world! He
00000010: 6c6c 6f2c 2077 6f72 6c64 210a            llo, world!.


returns 27 or 26

00000000: 0a                                       .


returns 1 or 0

00000000: 6368 616c 6c65 6e67 650a                 challenge.


returns 10 or 9

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 21         Hello, world!


returns 13




returns 0

## Sandbox:

• Is this clear?
• Is this a duplicate?
• Other tags?
• Does the extra rule mean that the input can have an optional trailing newline, or that the results in all of your test cases could be reduced by 1? If you mean the former I recommend adding a test case that doesn't end with a newline. If you mean the latter then I recommend explicitly saying the file will end with a newline character. Also I suppose this is a string challenge. Thanks again for using the sandbox :) – FryAmTheEggman Oct 3 '19 at 20:55
• @FryAmTheEggman It means that all test cases could be reduced by one. This was intended as a code golf byte counter, and the newline most certainly isn't usually included. I'll clarify this and add another test case to highlight it. – gadzooks02 Oct 4 '19 at 15:17
• So: discard all the input except the last line, and parse hex? Or just output the last line and claim that your output is in hex? IMO it would be a more interesting problem with xxd input, where the last line is not present. – Peter Taylor Oct 5 '19 at 9:00
• @PeterTaylor If I were to switch to xxd, would that be a valid edit, or would that be too big a change such that I would have to post another challenge? – gadzooks02 Oct 5 '19 at 9:45
• I'm sure far more significant edits have been made to sandboxed challenges in the past. – Peter Taylor Oct 5 '19 at 13:10
• @PeterTaylor In that case, edited. – gadzooks02 Oct 5 '19 at 14:52

# Java vs C++

Now posted at Time to settle this: Java vs C++

• How vital is the validation to the challenge? – Unrelated String Aug 27 '19 at 21:01
• @UnrelatedString I think it's fairly integral if the story is considered. Gotta inform the user that they're feeding you crap. Also it should add an extra element of challenge. – Mr Redstoner Aug 27 '19 at 21:07
• @MrRedstoner Validation is generally considered tedious by the users of this site, rather than challenging. I'd recommend reconsidering - clearly the validation code could make use of the submissions as a subroutine. There are also a couple near dupes 1 2 but I haven't found a precise dupe. That said, thanks for using the sandbox! – FryAmTheEggman Aug 28 '19 at 0:36
• getHTTP would result in... get_h_t_t_p? get_http? Error? Some other thing? – Chas Brown Aug 28 '19 at 1:42
• @ChasBrown should be get_h_t_t_p, I shall add that. @FryAmTheEggman While I considered it part of the story, if those are the standards I figure I'll remove it and say the validation was done by a previous part of code. – Mr Redstoner Aug 28 '19 at 5:24
• "If it is neither, output/return a falsey value." I would change this to something like "If it is neither, any unspecified behavior is fine (return a falsey value; give an error; try to convert it somehow anyway; etc.)." As mentioned by @FryAmTheEggman, validation is usually considered a distraction of the actual challenge (and can sometimes even double the code of the program/function for those answering), so most challenges assume the given input will always be valid. Apart from that the entire challenge looks fine, so +1 from me. Thanks for using the Sandbox! :) – Kevin Cruijssen Aug 28 '19 at 9:32
• @KevinCruijssen Dang it missed that during the edit. Thanks for telling me! – Mr Redstoner Aug 28 '19 at 10:42
• What should be returned from an input of a__b (two underscores)? – Value Ink Aug 29 '19 at 1:03
• @ValueInk That would be invalid input. 'You may assume all input to be valid'. Therefore I refer you to the ANSI C standard for undefined behaviour. – Mr Redstoner Aug 29 '19 at 6:00

# Can Jimmy escape the ghosts?

Posted: Can Jimmy escape the ghosts?

• S'all good, no problem – Veskah Oct 17 '19 at 14:05

# Universal Self-correcting Program

The idea here is to make a program that can tolerate errors in its own code, while still functioning correctly.

Since "error" is too broad, we will define it by a single bit flip. Of course, more tolerant versions, that could accept swapping any character with any other character would still be valid.

This program is universal in the sense that you can write any other self-correcting program (with the same tolerance) -- more on that later.

Importantly:

1) This program takes as input a triple-redundancy string of characters, and outputs a corrected string.

2) This program executes correctly with any bit flip in its own code.

# (1) Triple redundancy codes

A triple redundancy code consists of simply repeating each bit, character or byte 3 times. In this case we use characters.

Correction is done by taking the majority of the characters, so (A,A,B) is corrected to A, (A,B,B) is corrected to B and so on.

AAA => A
AAB => A
HHHEEELLXLLLXOO => HELLO


This is a very crude an inefficient code for correcting single bit errors, but it is the least complex, which is why I think may be the best choice here. Hamming codes are better but a little more complex.

# (2) Error tolerance

Our program will be defined as error tolerant if it performs the desired decoding function for any single bit flip in its own code. It may take longer for some inputs or when some flips occur, but it should always terminate.

# Putting it together

The error-tolerant program can receive as input a (possibly faulty) program, and outputs a error-free program. Therefore, if a single-bit error occurs anywhere in the system comprised of (decoder,input program), a corrected program will still be output.

# Observation

I don't actually know if this is possible, quite possibly it won't be achievable in every language. If it is too hard, we may relax the tolerable errors.

# Scoring

The score will reflect the reliability of your program to errors. Tolerance is simply the number of bit flips you code accepts anywhere. It must be at least 1 (accept 1 bit flip anywhere). Size is the length of your program in bytes.

The score is Score = Size / 2^Tolerance

Lowest score wins.

Note: Several other challenges are possibly solved by solving this one (which would make sense given its universality!) by hardcoding the input.

Detect if your program has been mutated

Write a program that always outputs “2012” - even if it's modified!

This solves the "Who Watches the Watchmen?" problem involved in error correcting programs, like in this challenge:

since the decoding program itself tolerates errors (what good would be an error correcting program that is itself in error? :p).

• Check the radiation-hardening tag for duplicates and rules clarifications, too. – AdmBorkBork Mar 7 '18 at 19:17
• @AdmBorkBork Thanks, I wasn't aware of that. It appears no one has proposed a Universal radiation hardener yet (this is universal only in the sense of bit flip errors; those are actually a good model for radiation though!). – Real Mar 7 '18 at 19:30
• Again Lenguage win lol – l4m2 Jan 8 '19 at 14:53
• Even though your scoring involves code length you should use code-challenge instead of code-golf for challenges that are not solely scored by code length. – Laikoni Jan 10 '19 at 20:14

# Golfing with 2s

It is well-known that all positive integers can be represented via a sum of powers of 2. For example, 13=2^3+2^2+2^0. We can rewrite the 3 and 0, to get 13=2^(2+2/2)+2^2+2^(2-2). A shorter representation might be 13=2^2^2-2-2/2, or a more repetitive one 13=2+2+2+2+2+2+2/2

### Challenge

Your task is, given a nonnegative integer as input, output/return a string containing only 2s and elementary operations, which when evaluated will yield that integer. These operations are +, -, *, /, ^, and appropriate parentheses. Use of multiple consecutive 2s (22, 222, etc) is not allowed.

However, the string should tend to be one of the shorter representations of the integer in question. So for the above example with 13, 2^2^2-2-2/2 and 2^2^2-2/2-2 are the shortest representations.

The input can be in any convenient format, but the output must be in the above format, either to a file or STDIO.

### Scoring

Short code and efficient representation are both prioritized, so the score is the length in bytes plus the average length of the returned string for 9, 57, 554, 1894, 25993, 113193, 2998225, and 52748566.

### Rules

Standard loopholes not allowed

Some degree of brute forcing is allowed, but the program must be able to handle each of the test cases in under a minute each.

### Example outputs

0            2-2
1            2/2
2            2
3            2+2/2
4            2^2
5            2^2+2/2
6            2^2+2
7            2^2+2+2/2
8            2*2*2
9            2*2*2+2/2
10           2*2*2+2
57           2^(2^2+2)-2^2-2-2/2
554          2*2^(2*2*2)+2*2^2^2+2*2*2+2
1894         2*2^(2*2*2+2)-(2^2^2-2)*(2*2*2+2+2/2)
25993        (2*2^(2*2*2+2)-2*2^(2*2*2)-2^2-2-2/2)*(2^2^2+2/2)
113193       2*2^2^2^2-(2^(2*2*2+2)-2^(2^2+2)-2^2^2-2-2/2)*(2^2^2+2+2/2)
2998225      (2*2^2^2^2-(2^(2*2*2+2)-2*2*2-2-2/2)*(2*2*2+2+2/2))*(2^2^2+2*2*2+2/2)
52748566     (2*2^(2^2^2+2^2)-2^2^2^2-2*2^(2*2*2+2)-2*2^(2*2*2)-2^(2*2*2)-2*2*2-2/2)*(2^2^2-2-2/2)*2

• It doesn't have to be optimal. It should tend to be optimal but you can trade it out for a much shorter program if it helps. – Exalted Toast Dec 8 '19 at 8:10
• It might be a good idea to clarify length - do you mean the actual string length or the number of operations and 2s used? – FryAmTheEggman Dec 8 '19 at 20:19
• Added clarification for both. To Fry, I mean the string length, but I'm not entirely sure what the difference is. – Exalted Toast Dec 9 '19 at 0:39
• Can we use the numbers 22, 222, etc. in the output? – 79037662 Dec 10 '19 at 16:33
• No. Will add clarification for that as well. – Exalted Toast Dec 12 '19 at 0:33
• Can we submit a function that takes a value and returns a string? Typically you should try and avoid restricting input and output, and just rely on the community standards – Jo King Dec 13 '19 at 3:26
• in reasonable time I know this is hard to specify, but as it stands it is too broad: what is meant by "reasonable time"? Some previous challenges say things like "it should run within a minute on a modern computer for inputs less than..." – Luis Mendo Dec 16 '19 at 9:47
• Yeah, I'm not really sure how to specify it further. I only really added it because when I showed this challenge to my friend, they wrote a brute-force that goes through every string with those 8 characters and finds the shortest one, and it would take a few minutes for inputs > 30. Does being able to run each of the test cases in under a minute sound good? – Exalted Toast Dec 16 '19 at 19:15
• That's the usual tactic, though you should probably specify what computer it is run on, since some will be faster than others. A possible idea could be the answerer has to run the biggest test case to completion, which should eliminate the worst of the brute force scripts – Jo King Dec 18 '19 at 7:33
• Giving the integers you'll be testing with might allow people to optimise those specific inputs sneakily - maybe ask for a TryItOnline link and then give every answer a score yourself? Just a suggestion. – FlipTack Dec 27 '19 at 19:10

## Eats, shoots and leaves

As you know, a panda eats shoots and leaves. Your task today is to write a panda in as few bytes as possible.

       1
/ \
7   5
/ \   \
2   6   9
/ \   \
3   8   4


Here this tree has two branches, 1-7-6 and 1-5-9. The branch 1-7-6 has a shoot 2 and leaves 3 and 8, while the branch 1-5-9 has a leaf 4. After eating the shoots and leaves, your panda should output the following tree:

       1
/ \
7   5
\   \
6   9


If your panda is a program or function, it must output the tree in the same format that you input it. Alternatively it can be a subroutine that modifies the tree in-place.

If it helps, you can assume that the tree has at least two nodes, and/or that each node has at most two child nodes.

No standard loopholes.

• What is a shoot, and what is a leaf? Is this question asked to remove all leaf nodes (nodes without children) in a tree? – tsh Jan 13 at 1:30
• @tsh For the purposes of the story, a shoot is a node which has no child nodes but whose parent has at least one grandchild node. Otherwise as you notice it has no effect on the outcome. – Neil Jan 13 at 10:58

# Bucket and Minimize

Post here

• @FryAmTheEggman thanks for the info. updated – scrawl Jan 21 at 9:40
• "floor(12%5)+1 into 12 mod 5 buckets, and floor(12%5) in the rest". Shouldn't those floor(12%5) be floor(12/5) based on your $\left\lfloor\frac{|L|}{N}\right\rfloor+1$ formula? – Kevin Cruijssen Jan 22 at 10:40
• @KevinCruijssen er, yes. keeping things conventional. in my preferred language (k4) % is float division. i'll update it to avoid confusion. thanks! – scrawl Jan 22 at 12:27
• Ah ok. In most languages I know % is modulo and / is division. :) I thought maybe % was integer-division in your language of choice, making the floor obsolete. But your edit is indeed clearer. – Kevin Cruijssen Jan 22 at 12:47
• I would recommend cleaning the body of this answer and linking to the actual challenge: codegolf.stackexchange.com/q/198406/75323 – RGS Feb 2 at 21:07
• @RGS cleaned up – scrawl Feb 2 at 23:55

Posted to main; thanks for input provided!

• this looks perfect for fastest-code. with fastest-algorithm it's difficult to do complexity analysis on the solutions. – ngn Jan 4 at 23:53
• @ngn thanks, I’ve amended the alternative suggestion – Nick Kennedy Jan 5 at 0:23
• it may be good to mention explicitly that all blocks must form a single connected component, otherwise 2 separate 1x1x2 pieces would technically satisfy rules 1-4 – ngn Jan 5 at 1:47
• Is this basically $a_n = \sum_{i=1}^n polyminoNumber(i)\cdot i^{n-i}$? – my pronoun is monicareinstate Feb 3 at 14:56
• @mypronounismonicareinstate no it's not, though it is related to the polyomino numbers. I've posted to main (sorry for not updating Sandbox post), so please see there for two implementations of code. – Nick Kennedy Feb 3 at 17:35

# Parse Iota

Iota is a simple programming language, considered the "sister" of the language Jot. More info can be found here Every Iota program consists of either an i, or a * followed by two Iota programs. In BNF, this is:

iota ::= i | *<iota><iota>


# Challenge

Your task is to, given any input, output a truthy or falsy value based on whether or not it is a valid Iota program.

• Your program may take input in any form agreed upon by the community here. It just has to be able to take input from the user in some form.
• The same rule goes for output. See the post above for valid output methods. Output may be any truthy or falsy value in your language, including integers, strings, arrays, or objects. If it can be converted to a Boolean, it is OK.

# Example I/O

Input: i
Output: 1

Input: hello
Output: 0

Input: *i*i*ii
Output: 1

Input: i*i
Output: 0

Input: ***
Output: 0

Input: *
Output: 0

Input: iiiiiiiii
Output: 0;

Input: i
Output: 1

Input: *ii
Output: 1

• Suggested test cases: *, ***, iiiiiiiiiii – 79037662 Feb 12 at 23:27
• Ok, I added those @79037662 – sugarfi Feb 13 at 0:37
• I don't get how i*i*i*ii is produced. If I understand the grammar right, this is equivalent to checking if parens are matched after removing the final i that must come at the end, using *i as (). – xnor Feb 13 at 7:12
• @xnor - sorry, my bad. i fixed that. – sugarfi Feb 13 at 12:02
• I think that despite the different presentation, this would be similar enough to checking paren matching to be a duplicate. – xnor Feb 14 at 11:22

# The uniquely solvable sudoku code-golfdecision-problem

Given a standard 9x9 sudoku board, output a Truthy value if that sudoku admits one and only one solution. Output a Falsy value if the sudoku has a number of solutions other than one. This means 0 solutions and two or more solutions.

# The input

The board can be given in any sensible format. Some come to mind, and I'll exemplify for a 4x4 sudoku.

• a 2D array with the state of the board, with any placeholder value for non-filled cells (including the digit 0, or no value at all if your language supports it): [[1,2,#,4],[#,4,1,2],[2,1,4,#],[4,#,2,1]]
• a string of the digits row by row or column by column, so "12#4#412214#4#21" or "1#24241##14242#1"

# The output

A Truthy value if the sudoku puzzle has a unique solution, Falsy otherwise.

# Test cases

### Falsy

• Hmm, I'm surprised this isn't a duplicate with the amount of Sudoku-related challenges we have. Closest related challenge I could find is perhaps this one. – Kevin Cruijssen Feb 18 at 16:21
• @KevinCruijssen Thanks for your search! I can link this one, but this is still a new challenge, right? :) – RGS Feb 18 at 17:44

## Square Deltas code-golfsequence

Given an strictly positive integer n, output all numbers in the sequence up to the index n. For the current test cases of the current challenge numbers are one-indexed. However, other formats are allowed as default.

## Base sequence

We start from this sequence:

1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, ...


The sequence is described as follows: 1, 2 (xN), 1 repeated arbitary times. There are 2 more 2's than the previous 2-set, and the 2-sequence starts at 1. i.e.:

1,       2,       1,
1,    2, 2, 2,    1,
1, 2, 2, 2, 2, 2, 1,
and so on ...


However, our point is not to output this sequence. For every item in this sequence, add the item by that item of that sequence.

Here's an example of adding the sequence. Here, our sequence starts with 0:

  The sequence
|
v
0 + 1 = 1
1 + 2 = 3
3 + 1 = 4
4 + 1 = 5
...

Our generated sequence is therefore

0, 1, 3, 4, ...



## Example test cases

Here is a sample program outputting the sequence up to the input.

3 -> [0, 1, 3]
10 -> [0, 1, 3, 4, 5, 7, 9, 11, 12, 13]


## Sandbox

• Can the challenge be clarified?
• Why is the task asking for infinite output after index n, rather than a standard sequence challenge? A "standard sequence challenge" usually allows several I/O formats in a single challenge, including "input n -> the number at index n", "input n -> first n numbers", "no input -> infinite output of the sequence". – Bubbler Mar 6 at 4:49
• No, you don't need to make it harder. And even if it is too easy, please don't try to fake up the difficulty by enforcing unnatural I/O requirements. – Bubbler Mar 6 at 4:56
• Are you sure that you want to override the default sequence IO? Do you actually have a good reason for doing so? – Jo King Mar 12 at 4:36

## Pendulum Encoding code-golfarray-manipulationsorting

Given an array as an input (which can be any acceptable/convenient format in your language), implement pendulum encoding.

## How do I do that?

The current iteration index starts at 0.

• If the iteration index is even, append the current item onto the output list.
• If the iteration index is odd, prepend the current item onto the output list.

## An example

The input is [a b c d e f g].
Note that the letters a-g are atoms, to prevent confusion from the iteration index.
N: the iteration index

N:0 Out:      [a]
N:1 Out:    [b a]
N:2 Out:    [b a c]
N:3 Out:  [d b a c]
N:4 Out:  [d b a c e]
N:5 Out:[f d b a c e]
N:6 Out:[f d b a c e g]


The output should be [f d b a c e g].

# Another example

The input is [u d l n u e m p].

N:0 Out:        [u]
N:1 Out:      [d u]
N:2 Out:      [d u l]
N:3 Out:    [n d u l]
N:4 Out:    [n d u l u]
N:5 Out:  [e n d u l u]
N:6 Out:  [e n d u l u m]
N:7 Out:[p e n d u l u m]


## Test cases

Here's a sample program doing this encoding.

Take note that the atoms in the list aren't always unique.

[a,b,c,d,e,f,g]   -> [f,d,b,a,c,e,g]
[]                -> []
[a]               -> [a]
[a,b,c,d]         -> [d,b,a,c]
[a,b]             -> [b,a]
[a,b,d]           -> [b,a,d]
[a,b,a,c,b,c]     -> [c,c,b,a,a,b]
[a,a,b,b,c,c]     -> [c,b,a,a,b,c]
[u,d,l,n,u,e,m,p] -> [p,e,n,d,u,l,u,m]

• I can't see any issues with this challenge apart from the usual "make sure that you specify that output and input can be taken in any reasonable and convenient format". – Lyxal Mar 18 at 0:00
• The "example" in the first paragraph is confusing. It seems to be example input, but it deson't have clear context. If feels very out of place. – Ad Hoc Garf Hunter Mar 20 at 15:16
• Are the "atoms" unique? If not, you should at least include a test case where they aren't. – FryAmTheEggman Mar 20 at 20:20
• Naming a generic array a, then redefining a as a generic atom and never referring to the original array is not very helpful in an explanation. – Jonathan Frech Mar 21 at 0:09

## Join by intersection code-golfstring

Given a list of strings, output these strings joined by their largest intersecting parts. Your output has to be optimal. Strings have to be joined in the order given.

## What is an intersection anyway?

Suppose you have two strings:

"abcbc" "bcbcd"


You extract all suffixes of the first string, as well as all prefixes of the second string:

["abcbc", "bcbc", "cbc", "bc", "c"]
["bcbcd", "bcbc", "bcb", "bc", "b"]


We trunctuate both of these lists to the length of the list of the smaller length (it's an identity in this current case).

Then, we find all items at the same index which are equal to the other item at the same index:

["bcbc", "bc"]
["bcbc", "bc"]


We return the longest string of the output. Therefore, the intersection is:

"bcbc"


## How to join two strings by the intersection

To join by the intersection you simply

1. Append the first string without the intersection to the output string
2. Append the intersection to the output string
3. Append the second string without the intersection to the output string

For example, in our example case:

"abcbc" "bcbcd"
(The intersection is "bcbc")

Step 1. Out:"a"
Step 2. Out:"abcbc"
Step 3. Out:"abcbcd"


## Reducing a join over a list

If you want to reduce a join over a list

["abc","bcd","rfh","hal"]


You connect them by their longest common substring:

abc
bcd
rfh
hal
=========
abcdrfhal


Therefore the expected output is abcdrfhal.

## Further walkdown

You cannot join two strings if their substring can be found in the middle. For example:

["aXc","bXd"]


If you try to match them by the middle substring:

aXc
bXd


You would realize that the other overlapping characters are not equal to each other. That is, a is not equal to b, and c is not equal to d. In that case you simply append the string in the join:

aXc
bXd
======
aXcbXd


Likewise, if either of these strings contain each other, but isn't equal to the other string, you should simply append the string. E.g.

["abcd","bc"]


would give

abcd
bc
======
abcdbc


Substrings can overlap past each other. E.g.

["abc","bcd","cde"]


would result in the following join:

abc
bcd
cde
=====
abcde


which would evidently make the output abcde.

Strings have to overlap as much as possible. That means, in this example:

["abcbc","bcbcd"]


This is not okay (even if they do overlap):

abcbc
bcbcd
========
abcbcbcd


abcbc
bcbcd
======
abcbcd


The join is consecutive based on the consecutive inputs. For example:

abcde
cde
abcde
==========
abcdeabcde


## Test cases

A program is worth a thousand words. Here 's a reference implementation that I use to check the test cases.

["abc","bcd","rfh","hal"] -> "abcdrfhal"
["mmm","qqq","rrr"] -> "mmmqqqrrr"
["abcbc","bcbcd"] -> "abcbcd"
["aXc","bXd"]    -> "aXcbXd"
["abc","bcd","cde"] -> "abcde"
["abcd","bc"] -> "abcdbc"
["abcde", "cde", "abcde"] -> "abcdeabcde"

• How would you join aXc and bXd? They have the common substring X in the middle. – Bubbler Mar 25 at 2:24
• Can strings overlap past each other like abc,bcd,cde->abcde? – xnor Mar 25 at 2:25
• Do strings have to overlap as much as possible, or just overlap any amount? For example, for abcbc and bcbcd, is either of abcbcd or abcbcbcd OK? – xnor Mar 25 at 4:43
• Do strings have to be joined in the order given? I feel like the answer is surely "yes", but the text doesn't say outright. Really, I think all these Sandbox questions come from the fact that the task is never actually stated precisely, and doing that would probably head off any further question. – xnor Mar 25 at 4:49
• Along these lines, what happens if one string contains another? Do we do abcd,bc->abcd? – xnor Mar 25 at 4:51
• Suggested test case: abcde, cde, abcde. – Jonathan Frech Mar 25 at 4:52
• @JonathanFrech Well, what's the expected output? I thought it was abcde in this case. – petStorm Mar 25 at 6:00
• I was not completely sure what the output would be. abcdeabcde does seem reasonable. – Jonathan Frech Mar 25 at 7:40
• I still don't actually understand how the task works precisely. A reference implementation isn't a replacement for a specification. – xnor Mar 25 at 23:09
• @xnor I've added back the spec, can you understand it now? – petStorm Mar 26 at 6:24
• Not really, sorry. I still wouldn't know what abcd,bc would give. – xnor Mar 26 at 6:29
• @xnor Are there any more test cases you don't understand? – petStorm Mar 26 at 6:35
• This seems to be related to the shortest superstring problem for two strings, but you don't have to handle the case where one of the strings is a substring of another, and the joining order is fixed. Is that correct? Just informing that the specification spans four pages on my laptop, with default browser font size. – my pronoun is monicareinstate Mar 26 at 6:55
• – my pronoun is monicareinstate Mar 26 at 6:58
• @mypronounismonicareinstate Ah, it's a duplicate. Thank you for the mention. – petStorm Mar 26 at 6:58

# Count Syllables

The goal of this challenge is to write a program that can count the syllables in a word as accurately as possible.

## Input

On STDIN, your program will receive a number X followed by X lines, each containing a single word. Simple enough. (Should there be a limit on the size of X?) The words will come from this list.

4
challenge
to
count
syllables


## Output

Your output should be to STDOUT and have X lines. On each line should be the number of syllables counted in that word.

2
1
1
3


# Scoring

To score you program, it will receive a long secret list of words to test. All programs will receive the same list of words. For each word, the number of syllables that your program got wrong will be added to the score of the program. If it output a 4 or a 2 when the word had 3 syllables, then one point will be added. If it said a 15 instead of a 3, then 12 points will be added to the score. The lower the score, the better.

For example, if for the above input your program output 3 2 2 2 (which would be produced by a program that counts strings of vowels), then the program would receive a score of 2.

# Rules

Your program should not access any external files (such as the word list). Also, your program should be no more than 5,000 bytes long (is this a reasonable limit?).

The winner will be the person whose program has the lowest score, therefor the most accurate syllable counter. The deadline for submissions is [some time at least a month away].

# Suggestions

I am open to all constructive criticism. Is 5,000 bytes a reasonable limit for the program size? How long should the official scoring test be? How long should the deadline be?

• This has one major flaw: the output is subjective. How many syllables do these words have? Every; victory; hierarchy; desire; oil; hour; poem. The only real way I see to work around this is for you to produce a marked-up version of the word list. – Peter Taylor May 29 '12 at 20:40
• I was really worried about that, and I don't see a way around it. – PhiNotPi May 29 '12 at 20:42
• I personally would love to see more language processing challenges. I agree with @PeterTaylor on the difficulty of some words. Perhaps taking a specific text(s) and identifying explicitly in the challenge which words will have how many syllables? – Gaffi Jun 8 '12 at 3:34
• @PeterTaylor ...Or maybe you could filter ambiguous words out of the reference list? – user16991 Feb 8 '15 at 1:19
• What's the point of the first line of input? – msh210 Apr 27 '16 at 20:05
• If you provide a reference list, A hyphenated reference list, and hide a secret list which may or may not include members of the reference list, this would be a reasonable challenge – Rohan Jhunjhunwala Sep 17 '16 at 0:05
• Do you plan to post this? If not, I'd be happy to adopt it. (If you don't respond within two weeks, by community standards, I'm allowed to do so.) – MD XF Aug 18 '17 at 3:20
• The example of inaccurate program that would score 2 - did you mean to output 3 1 1 2 rather than 3 2 2 2? – Heimdall Nov 9 '17 at 18:31
• A reference list could be dynamic: potential contestants can ask for words of their choice to be added to the list. They won't know what's on the secret list but will try to make their programs as accurate as possible (according to your syllable count) so they should always be able to ask for specific words they are not sure about. Of course, you could make it in different language. In my language, Slovene, it's much clearer how many syllables words have. How about Solresol, haha! – Heimdall Nov 9 '17 at 18:38
• I am going to adopt this if you don''t respond – Christopher Dec 20 '17 at 16:48

## Play Simple 2-Dimensional Minecraft

Recently I found this video of "HansLemurson" showing a computer that was built in minecraft, which runs minecraft. He is playing minecraft on a computer that was built in minecraft that is running on his computer. To be specific, it is a two dimensional version with an 8x8 grid of cells. There is gravity, block placement, and even jumping. It is worth noting that the computer is single purpose. The same person has built programmable computers, but making them single purpose allows the computer to be much smaller.

## Details

The minecraft world is an 8x8 grid (one horizontal and one vertical dimension). The grid is comprised of either Xs (representing blocks) or empty spaces. The player is an X that is blinking on and off about once every second.

There are two modes in the game, controlled by a toggle switch. The first mode is movement. This is controlled by a WASD-like button arrangement. If the player chooses to move left/right/down, the computer checks to see if the space immediately in that direction is empty. If so, then the player moves into that space.

If the player chooses to move up, then the computer checks that the block underneath the player is solid. If so, then the player moves upward two units. Notice that this can propel the player into a solid block. If this happens, the player is obscured by the solid block, but can still move to an empty block next to him. When the player is inside on a solid block, the game continues as if the block isn't there, although the block is still there once the player leaves it.

After each move, the player falls down one unit if there is empty space there. This simulates gravity. This is also why moving up moves up two units, so that the gravity makes a net movement of up one unit. Gravity does not cause the player to fall all of the way to the ground, just one unit.

The second mode is block placement. In this mode, the same exact WASD buttons are used. Instead of moving the player, they toggle the state of the block in that direction. If the player presses "left" and there is a block there, then the block is destroyed. If there is not a block there, then a block is placed. Again after this move, the player is again subject to gravity. The blocks are not subject to falling.

Toggling the toggle switch does not count as a move, and does not invoke gravity.

The game board is a torus, so all actions (movement, block creation) can wrap around the board. The board does not scroll with the player. The player moves, and the blocks stay in the same place.

## The challenge

You challenge is to write the shortest program that simulates this game. Your program should display and update the map correctly (with Xs as blocks, and with the blinking player). It should accept input from a button that toggles the state and four buttons for movement and actions. This is code golf.

There are imaginary bonus points for adding more features (block types, game size, etc) to your game.

## Suggestions?

• With more complicated challenges I find that it helps to do a reference implementation so that you have a very concrete idea of how much work is involved. Aside from that, I like it. – dmckee --- ex-moderator kitten Jun 3 '12 at 20:11
• Is the blink rate selected to fit with the ANSI escape sequence? Either way I would explicitly allow that, because it's the obvious way to do it on compatible terminals. – Peter Taylor Jun 5 '12 at 7:14
• The blink rate wasn't selected to be anything specific. I think that I will broaden the restriction. Maybe any blink rate between 3 blinks per second to 1 blink every 2 seconds. – PhiNotPi Jun 5 '12 at 20:21
• @programmer5000 No, for two main reasons: First, challenges can go extended periods of time in the sandbox before they are posted and/or adopted. In the past I've posted challenges after not touching them for 4 years. Second, deleting this answer will not reduce lag, as deleted answers are still present, simply not visible. Users with sufficient rep will see all 4040 answers in the sandbox, and you will too once you earn the "view deleted answers" privilege. – PhiNotPi Apr 13 '17 at 18:15

Overview:

Let's say you've decided to operate your computer using voice recognition software, but unfortunately you did a horrible job researching the various products out there and chose a package that does not recognize numbers as numerals, only words. (i.e. "one" (spoken) == "one" (typed), not "1".) Rather than spend more money to get another option, you decide to make do. Now you want to use the computer's calculator, but this poses a problem, since your machine doesn't know how to add "one plus one".

Objective:

Implement a basic calculator that will read in a string of the written-out equation, perform the correct calculations, then return the result in its text form. Your code should be as short as possible; this is code golf.

Rules/Constraints:

• Input/output will be using your preferred method (STDIN, ARGV, etc.).
• Your calculator must be able to handle input and output within the billions (non-inclusive) -1,000,000,000 < i < 1,000,000,000, but you may expand to more if you wish.
• Decimal values and/or parts must be accepted (0 < i < 1) up to 3 places/digits.
• When calculating answers, proper rounding must be used, so "three point one four one five nine two six" must be returned as "three point one four two".
• Basic calculator functions required:
• "Add"/"Plus"/"Sum"/"And" (+)
• "Subtract"/"Minus"/"Remove" (-)
• "Multiply"/"Times" (*)
• "Divide"/"Divided"/"Divide by"/"Divided by" (/)
• "Raise"/"Exponent"/"Power"/"To the power of" (^)
• "<Base>Root"/"<Base>Radical" (√)
• "Point"/"Decimal" (.)
• "Pi" (π)
• All strings in the list above must be accounted for in your code, capitalization does not matter.
• Numbers may be presented as their full value ("one thousand") or by digit (one zero zero zero).
• Negative numbers may be assigned using "Minus" or "Negative".
• The string "Minus" bust be accounted for as an operator and identifier. (see example)
• "And" is only acceptable as an operator, not as part of a named number.
• "one hundred and one"
• "one hundred one"
• "a" or the absence of a number does not equate to any number; all numbers will be explicitly accounted for in the program input.
• "a hundred" does not equate to "one hundred" and is not a valid input.
• No more than 2 terms will be used.
• "one plus one minus one" will not be implemented.
• If an invalid input is supplied, your function/program should handle the error and exit gracefully with an error description.

Example I/O:

• "one add one" --> "two"
• "five thousand thirty four subtract ten thousand six hundred" --> "negative five thousand five hundred sixty six"
• Alternatively: "five zero three four subtract one zero six zero zero"
• "three root twenty seven" --> "three"
• "ten minus minus ten" --> "twenty"
• Alternatively: "ten subtract negative ten"

## Sandbox Questions:

1. Is this too basic/complicated? (I'm assuming some languages will handle this much more simply than the method I have in my head...)
2. Does the title fit?
3. Are there any constraints that should be added/lifted?
4. Are any more examples needed for clarification?

• @PeterTaylor I had had a similar thought re: operators. ("plus" versus "add"`, etc.) I think it would be more interesting to account for all, but given the wide variety of possible inputs, it may generally be better to limit the options to a specifically defined set (which I have yet to define). – Gaffi Jun 15 '12 at 15:18