# 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 at 7:51
• @guest271314 You can use this markup to create a tag in a draft: [tag:code-golf] – DJMcMayhem Aug 29 at 15:19
• Why no featured anymore? Can't we have it auto-added or something? – JL2210 Sep 26 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 at 13:43

# Digit Sum of Sum of Digit Sums

Input: An integer from 1 to 1000 (known as N) Expected behavior: The code will go through the first N integers, and work out the digit sum for each integer, the code will then take these digit sums and add these together. The code will then take this total and work out the digit sum for that number. The final number is the expected output.

Example 1:

Input: 12

Output: 6

Behavior:

1) Numbers
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
2) Digit Sums
1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3
3) Sum of Digit Sums
51
4) Digit Sum of Sum of Digit Sums
6

Example 2:

Input: 20

Output: 3

Behavior:

1) Numbers
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
2) Digit Sums
1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2
3) Sum of Digit Sums
102
4) Digit Sum of Sum of Digit Sums
3

There are no restrictions on language type as long as the standard loopholes are avoided. Please demonstrate your code using the last three digits of your current reputation score.

This is code-golf, the shortest number of characters in code will be deemed the winner. In the event of a tie, the one with highest popular answer will be crowned the winner. If both answers are tied in terms of popularity and size, a fight to the death will be used to declare the winner (just kidding...)

• Why would anyone want to do this? Motivation is part of a good question. – Peter Taylor Jun 20 at 8:01

# Gitify a graph

Given a undirected connected graph, create a git repository with a commit graph that is isomorphic to the input graph.

### META:

• This is just a rough idea: I first should think about what kind of graphs can actually be represented in a git repository. (the input format could be flexible: take an adjacency matrix or e.g. a list of edges or maybe some native graph structure)
• another idea would be following: given some $$\n =1,2,3,\ldots\$$ create complete graph of $$\n\$$ nodes
• @JonathanFrech yes, thanks a lot! – flawr Jun 20 at 12:33

# Introduction

When dealing with data in two dimensions, data scientists looove to see straight lines emerge, as they can use a simple linear regression to model it - meaning we assume it is in the form of y=mx+b, and all that's left is to find the best m and b to describe the data.

There are several ways to fit a line to any data (I saw there was a challenge with Ordinary Least Squares once), however one of the most flexible one is gradient descent.

When given vectors X and Y, we start with an initial guess of m and b, then iteratively update them, and hopefully we get a better fit when we're done.

We give a "grade" to our current fitted line with mse (the lower the grade - the better the fit):

loss = mean((y - (m * x + b)) ** 2 for x, y in zip(X, Y))

And in each iteration we change m and b using the gradient of that same grade:

b -= 2 * alpha * mean((m * x + b) - y for x, y in zip(X, Y))
m -= 2 * alpha * mean(((m * x + b) - y) * x for x, y in zip(X, Y))

Here alpha is the learning rate (usually smaller than 1), used to keep the steps small enough to advance towards the minimum grade, rather than overstepping it.

The last question asked is when should we stop these iterations. We (a bit arbitrarily) impose two conditions:

1. The absolute relative change in the grade between two iterations abs(grade1 - grade2)/grade1 is changed by less than some given epsilon, and/or
2. A given number of iterations N has been performed already.

p.s. I started by assuming the data is just y(x), however this method may be easily extended to an arbitrary number of free variables and one dependent variable.

# Challenge

Write a program that accepts inputs: X, Y, m, b, epsilon, N and returns the updated m and updated b after performing gradient descent as described.

## corner cases:

• X and Y may be empty, in which case m and b are returned unchanged.

This is code golf, so shortest code in bytes wins.

• This is in need of a woked example and a fee test cases. – Shaggy Jun 22 at 22:17
• What does mean mean? What does zip mean? Those should be made clear, just like you made alpha clear. – AdmBorkBork Jun 25 at 12:44

Phases of the Clock Moon Numbers

We can imagine all the factors of a number. For example 7 has factors 1 and 7. 12 has factors 1, 2, 3, 4, 6, and 12. 9 has factors 1, 3, and 9.

We can also imagine that a number has a position on the edge of a wheel or circular face. Let us divide our circle into 12 pieces around the edge evenly. In fact, we can call this a clock face. Human culture has settled on most clock faces having 12 numbers.

Therefore, we can imagine creating hands on a clock face for an integer that we have been given, like 7. Each hand can be imagined as a nice, easily visible line drawn from the center of the circle to the position of the number on the edge of the circle. We can also imagine creating hands on the face for all of that integer's factors, like 1 and 7. Now, we can imagine the clock face with hands at each factor. 1 and 7 for 7. This clock face now has 2 hands.

The number 9 will have 3 hands, at 1, 3, and 9.

The number 10 will have 4 hands, at 1, 2, 5, and 10.

The number 12 will have 5 hands, at 1,2,3,6, and 12.

The number 13... er... well, in that case, we use modular arithmetic. The number 12 becomes 1. In mathematical language, we might say the number 13 modulo 12 is 1. Another way to say this is that the remainder of 13 divided by 12 is 1. We could also say that 13 is congruent to 1, modulo 12.

At any rate, our imaginary clock face for the number 13 will have hands at 1 and.... 1. Now, we will say that the two hands are redundant, so it actually only has one hand, pointing to the position 1.

The number 14 will have 4 hands, at 1, 2, 7, and... 2. So actually just three hands.

Now, you may notice a pattern here. Some numbers generate a clock face with hands clustered together around the right hand side of the face, like 6 with 1, 2, 3. Other numbers seem to have hands all over the face, spread more evenly, like 20 with 1, 2, 4, 5, 10, 8. And we can go further - some numbers like 77 will only have their hands on the left-ish side of the face, at 7 and 11.

To make it even easier, let's rotate the clock anti-clockwise by one hour, so the number 1 is straight up and the number 7 is straight down.

Let us give these patterns names.

Numbers like 1, and 13, with only one clock hand: Full

Numbers with clock hands only on the left, like 77: First South Quarter

Numbers with clock hands only on the right, like 6: Last South Quarter

Numbers with clock hands on all sides, like 20 (10,5,2,1,8): New

Write a program that given some number n, returns it's phase, and how many other numbers have that same phase, but are smaller than n.

For example 13 has the phase Full, and there is 1 other number below it, so the result should be "Full 1"

2, 3, 4, 5, and 6 are all phase Last South Quarter, so they would be "LSQ 0" "LSQ 1", "LSQ 2", "LSQ 3", "LSQ 4"

7 has phase First South Quarter, and in fact is the first such number, so it will be "FSQ 0".

8 has factors 4, 2, and 1, which are on both the left and right side, so it's phase is New. It's the first full number, so "New 0"

• Hm, as it is right now, it looks like the "how many other numbers have that same phase, but are smaller than n" is an overcomplication. Also, is the 1 hand to the left, right or neither? Similarly for the 7 hand. I also suggest allowing any 4 unique identifiers for the phases. – Erik the Outgolfer Jun 30 at 16:50

# Switch the colour of the largest non-unique connected shape

Given a rectangular grid of square cells, find the non-unique connected shapes with the largest area, and switch their colour

# Input

• A rectangular grid of cells, each of which has 1 of 2 distinct values ("colours")
• You can choose to accept any of
• an image with only 2 distinct pixel colours
• text with only 2 distinct characters (also allowing newlines for forming a rectangle)
• a 2d array, with each element having 1 of 2 distinct values
• a 1d array, plus a width and/or height

The 2 distinct values will be referred to as "colours", but the rules apply similarly for all of the permitted formats

# Output

• A rectangular grid of cells in the same format as the input, using the same 2 colours
• For each shape required to be changed, all of its cells have been switched to the other colour

# Rules

• Each cell is part of a connected shape, which contains all cells of the same colour that can be reached by a path made up only of vertical or horizontal steps to adjacent cells of the same colour (no diagonal steps)
• The grid does not wrap: a shape cannot be connected across the outer boundary
• A shape is identical to another if it can be made to coincide exactly with it by any combination of
• translation
• rotation by an integer multiple of 90 degrees
• reflection in any vertical or horizontal line
• switching its colour
• A shape is unique if no other shape is identical to it
• The area of a shape is the number of cells it contains
• The shapes to be changed are those with the largest area, of those that are non-unique
• If 2 or more distinct shapes are non-unique and have the largest area, all instances of each distinct shape must be changed
• If there are no non-unique shapes, the output is the same as the input
• A grid (input or output) may sometimes contain only 1 of the 2 colours

# Test cases

Each test case is an input followed by its unique correct output

.  .

..  ..

.#  #.

.#  .#
..  ..

.#  #.
#.  .#

..#  ...
...  ...
.#.  ...

.......  .......
##.....  .......
#.....#  .......
.....##  .......

....##.  ....##.
##..##.  ....##.
#.....#  .......
.....##  .......

#.....###.  ..........
#.......#.  ..........
##...##...  ..........
.....##...  ..........
##........  ..........
##..####..  ....####..

.......###  .......###
..##..####  ......####
..#..###.#  .....#####
....###..#  ....######
...#######  ...#######

.......###  #######...
.##...####  ######....
.#...###.#  #####.....
....###..#  ####......
...#######  ###.......

........####  ########....
.###...#...#  ########....
.#..#.#.##.#  ##..##..##..
.###.###...#  ####........
....########  ####........

........####  ########....
.###...#...#  ########....
.#..#.#....#  ##..##......
.###.###...#  ####........
....########  ####........

The same test cases with colour coding for human reading (click image for larger version):

# Scoring

This is . Your score is the number of bytes in your source code. For each language, the code with the lowest score wins

# Sandbox thoughts

• Any important/useful test cases welcome
• Is there a more useful format for 2d test cases?
• Are there 2 distinct characters that would make human reading easier?
• Is this a duplicate?
• Can anything be made clearer or more succinct?
• I'm also trying to think of a better name
• I think using "remove" and "change" to mean the same thing is confusing. If I understand correctly, "removing" means to change the colour of, right? That wasn't very intuitive to me on my first reading. – FryAmTheEggman Jun 29 at 16:52
• Ah good point. Thank you. I will try and make that consistent throughout – trichoplax Jun 29 at 19:16

# Some enchanted avening

(you may see a stranger across a crowded room).

This is one part of a multi-part series inspired by various built-ins in R. Credit goes to digEmAll for suggesting this one.

ave calculates particular grouped values of a list.

For example, we would group x in the following way based on the criteria given in f:

x = [2, 1, 3, 5, 4, 1, 5, 5]
f = [[1, 2, 2, 2, 1, 2, 1, 1], [1, 1, 2, 2, 2, 1, 1, 2]]

x f1 f2
[1,] 2  1  1    -> group [1,1]
[2,] 1  2  1    -> group [2,1]
[3,] 3  2  2    -> group [2,2]
[4,] 5  2  2    -> group [2,2]
[5,] 4  1  2    -> group [1,2]
[6,] 1  2  1    -> group [2,1]
[7,] 5  1  1    -> group [1,1]
[8,] 5  1  2    -> group [1,2]

Then for each group, we apply a given function (in R, the default is mean), let's say sum:

group [1,1]: 2, 5 -> sum = 7
group [2,1]: 1, 1 -> sum = 2
group [2,2]: 3, 5 -> sum = 8
group [1,2]: 4, 5 -> sum = 9

Then we replace each value in the group by the group sum, resulting in an output of:

[7, 2, 8, 8, 9, 2, 7, 9]

## Inputs:

• a list x of integers
• a list of lists f or an arbitrary number of lists, each of length equal to x; these are the factors to group on
• a black-box function FUN that takes a list of integers and returns a single integer value

## Output

• a list o of length equal to x where each element o[i] is equal to FUN(group(x[i])), or as the documentation says:

A numeric vector, say y of length length(x). If f is g1, g2, e.g., y[i] is equal to FUN(x[j], for all j with g1[j] == g1[i] and g2[j] == g2[i]).

## Rules

• Input can be in any order and in many flexible output formats.
• You may assume that the outputs will always result in integers.
• If your language has a builtin for this for some reason, please also implement your own solution.

# Sandbox questions/notes:

• I've done two of these so far and found a reference to a musical that is somewhat appropriate, any suggestion is appreciated there.
• Need to add test cases
• Need to work a bit harder on the explanation of how ave works.
• You could call this something along the lines of "Ave Maria von Trapp"? Aside from that I understood your description well enough to write a (poor) answer. – FryAmTheEggman Jun 26 at 19:45

# Introduction

A list is a common, well-understood data structure. Neo4j's property graph model can represent any data structure. Using the Cypher query language, write a collection of statements for managing a todolist

# Challenge

Manage a todo list using parameterized Cypher.

Todo list items are composed of two pieces of information:

• todo:string - the textual content describing the thing to do
• completed:boolean - whether this todo has been done

Todo list operations:

• add new, view, edit, remove, complete, un-complete individual todo list item
• re-order todo list item
• view all items
• view all completed items
• view all "active" items (items not yet completed)
• complete all todo list items

Considerations:

• empty todo list

Out of scope:

• multiple lists

For each operation, provide a code block of Cypher. Identify the operation with its description. Separate each operation with a --- line. Like this...

1. Create an empty node:
CREATE ()

1. Create a generic relationship:
CREATE ()-[:RELATES_TO]->()

## Proposed tags

[cypher] [graph-theory]

• (1) This is a long way from being self-contained. What's Neo4j? (Sounds like a Java library). What's Cypher? (2) The operations need more explanation, particularly those which rely on properties which haven't been mentioned. (Reorder? But there's no position-in-order property. Operations on individual item: what's its identity?). (3) This site discourages questions which restrict answers to a single language unless there's a good reason for the restriction. I don't see a good reason here. – Peter Taylor Jul 6 at 7:54

## Can the cursor reach the bottom?

A cursor position is valid if either of its two sides touches whitespace (i.e. a space or a newline(CR+LF or LF, depending on your OS)). The input will always consist of valid cursor positions.

This takes one input(a character matrix), and for a cursor on the up right corner of the input, can the cursor reach the bottom of the input?

Example input:

..... Same, delete text like this in order
......
. . . .
.      Same to get normal input
...... Same

The cursor can reach the bottom in this case. This process of moving the cursor will work: down, right(touches spaces on the left), down(touches spaces on the right), down, right(touches spaces on both sides) 6 times, and down(touching spaces and a linefeed).

Notably, this will also work:

Code Golf deletes trailing whitespace by default
..
. trailing

The cursor starts at the up-right corner. After moving right two times, it can move down (due to touching a newline character). Then, it can move down, which touches the bottom of the line.

This example will not work:

...
... Same reason as above

The cursor cannot move down, as there is no sufficient whitespace to be touched.

Posted here

• Interesting challenge, but I'm afraid a lot of trivial solutions exist. E.g. 123 which prints 123 in many languages. More interesting would be to require all three/four characters to be unique, and that they be printed in reverse. – Adám Jul 8 at 20:04
• now that this has been posted, you can edit it to only include a link to your post and delete it :-) – Giuseppe Jul 9 at 18:50

# There's an echo in my array... echo in my array... my array...

Posted. Thanks for all of the suggestions and happy golfing!

• "0≤n<1000" The input has 0–1000 elements or the elements are in the range 0–1000, or both? – Adám Jul 8 at 21:24
• Can there not be multiple correct solutions? – Adám Jul 8 at 21:26
• Will the echo ever begin at the first element? – Adám Jul 8 at 21:26
• I'm not sure I fully understand how the echo works. Why can [2,4,6] not be [1,2,3] with an echo overlapping at the first element? – Adám Jul 8 at 21:31
• In fact, would there be one solution for each step, so dividing the input by 2 is always a valid solution? – Adám Jul 8 at 21:32
• @Adám ah yes, that's why echo cannot begin at the first element. The echo'd version will always be longer than the original un-echoed version. I'll clarify that. – 640KB Jul 8 at 21:33
• @Adám have updated rules and test cases from your comments. Thanks! – 640KB Jul 9 at 18:32
• As suggestion: if there is no echo, don't output nothing or false - the challenge is to correct the echo. If there is none, the echo is corrected to be... no different from the input. In a bid for consistency, I would therefore suggest that if there is no echo, they should output the original input, since that is the 'normal' version of the array. – Geza Kerecsenyi Jul 10 at 8:09
• Also, I'd suggest to make the program return the shortest possible array in the case of multiple solutions, to remove the most possible reverb - i.e choose the one that removes the most values from the input. – Geza Kerecsenyi Jul 10 at 13:42
• @GezaKerecsenyi I've been trying to come up with a case where there are multiple solutions, and cannot. You can easily have many echo'd versions for a given un-echo'd version, but there seems to only be one or zero un-echo'd versions for an echo'd version. I'm not a mathematician, so I cannot conclusively prove this, and I'm happy to be proven wrong, but I don't see a way that a correctly-constructed echo'd version could produce more than one answer. – 640KB Jul 10 at 14:52
• @gwaugh after further consideration, I have come to the conclusion that you're correct. It's like a Fourier transform: every wave function always have a unique value, either in terms of phase or magnitude. Here, the phase is always different, and since the phase is shifted, the 'transform' of these numbers (imagining they are Y values at the X point of their index) must also be unique. So feel free to remove that rule - there can never be two answers. – Geza Kerecsenyi Jul 10 at 17:12

## Story

I began studying the Collatz Conjecture

And noticed this pattern in the numbers that go to 1 in one odd step, like 5,10,20,21,40,42... and looke in up on OEIS and found this formula.

$$\floor(sqrt(4*n + 1)) - 1\$$

Which can plot these numbers in their natural order like so;

$$\\frac{\left(8\cdot2^{\operatorname{floor}\left(\sqrt{4\operatorname{floor}\left(x\right)+1}\right)}-2^{\left(\operatorname{floor}\left(\sqrt{4\operatorname{floor}\left(x\right)+1}\right)-1-\operatorname{floor}\left(\frac{\left(4\operatorname{floor}\left(x\right)+1-\operatorname{floor}\left(\sqrt{4\operatorname{floor}\left(x\right)+1}\right)^2\right)}{2}\right)\right)}\right)}{3}\$$

Then I looked at numbers going to 1 in two steps, like 3,6,12,13,24,26...
Where I found another pattern that I could not find a formula for on OEIS

long nth(int n){if(n>241)return -1;return (((1<<Y[n]+5)-(1<<1+Y[n]-((Z[n]&1)+Z[n]*3)))/3-(1<<Y[n]-2*X[n]-(2*(Z[n]&1)+Z[n]*3)))/3;}

With X[],Y[] and Z[] being these lookup-tables

int[]X=new int[]{
0,
0,
0,  1,
0,  1,
0,  1,  2,
0,  1,  2,                              0,
0,  1,  2,  3,                          0,                          0,
0,  1,  2,  3,                          0,  1,                      0,
0,  1,  2,  3,  4,                      0,  1,                      0,  1,
0,  1,  2,  3,  4,                      0,  1,  2,                  0,  1,
0,  1,  2,  3,  4,  5,                  0,  1,  2,                  0,  1,  2,
0,  1,  2,  3,  4,  5,                  0,  1,  2,  3,              0,  1,  2,                  0,
0,  1,  2,  3,  4,  5,  6,              0,  1,  2,  3,              0,  1,  2,  3,              0,              0,
0,  1,  2,  3,  4,  5,  6,              0,  1,  2,  3,  4,          0,  1,  2,  3,              0,  1,          0,
0,  1,  2,  3,  4,  5,  6,  7,          0,  1,  2,  3,  4,          0,  1,  2,  3,  4,          0,  1,          0,  1,
0,  1,  2,  3,  4,  5,  6,  7,          0,  1,  2,  3,  4,  5,      0,  1,  2,  3,  4,          0,  1,  2,      0,  1,
0,  1,  2,  3,  4,  5,  6,  7,  8,      0,  1,  2,  3,  4,  5,      0,  1,  2,  3,  4,  5,      0,  1,  2,      0,  1,  2,
0,  1,  2,  3,  4,  5,  6,  7,  8,      0,  1,  2,  3,  4,  5,  6,  0,  1,  2,  3,  4,  5,      0,  1,  2,  3,  0,  1,  2,      0,
0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  0,  1,  2,  3,  4,  5,  6,  0,  1,  2,  3,  4,  5,  6,  0,  1,  2,  3,  0,  1,  2,  3,  1, 2
};
int[]Y=new int[]{
0,
1,
2,  2,
3,  3,
4,  4,  4,
5,  5,  5,                              5,
6,  6,  6,  6,                          6,                          6,
7,  7,  7,  7,                          7,  7,                      7,
8,  8,  8,  8,  8,                      8,  8,                      8,  8,
9,  9,  9,  9,  9,                      9,  9,  9,                  9,  9,
10, 10, 10, 10, 10, 10,                 10, 10, 10,                 10, 10, 10,
11, 11, 11, 11, 11, 11,                 11, 11, 11, 11,             11, 11, 11,                 11,
12, 12, 12, 12, 12, 12, 12,             12, 12, 12, 12,             12, 12, 12, 12,             12,             12,
13, 13, 13, 13, 13, 13, 13,             13, 13, 13, 13, 13,         13, 13, 13, 13,             13, 13,         13,
14, 14, 14, 14, 14, 14, 14, 14,         14, 14, 14, 14, 14,         14, 14, 14, 14, 14,         14, 14,         14, 14,
15, 15, 15, 15, 15, 15, 15, 15,         15, 15, 15, 15, 15, 15,     15, 15, 15, 15, 15,         15, 15, 15,     15, 15,
16, 16, 16, 16, 16, 16, 16, 16, 16,     16, 16, 16, 16, 16, 16,     16, 16, 16, 16, 16, 16,     16, 16, 16,     16, 16, 16,
17, 17, 17, 17, 17, 17, 17, 17, 17,     17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,     17, 17, 17, 17, 17, 17, 17,     17,
18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18
};
int[]Z=new int[]{
0,
0,
0,  0,
0,  0,
0,  0,  0,
0,  0,  0,                              1,
0,  0,  0,  0,                          1,                          2,
0,  0,  0,  0,                          1,  1,                      2,
0,  0,  0,  0,  0,                      1,  1,                      2,  2,
0,  0,  0,  0,  0,                      1,  1,  1,                  2,  2,
0,  0,  0,  0,  0,  0,                  1,  1,  1,                  2,  2,  2,
0,  0,  0,  0,  0,  0,                  1,  1,  1,  1,              2,  2,  2,                  3,
0,  0,  0,  0,  0,  0,  0,              1,  1,  1,  1,              2,  2,  2,  2,              3,              4,
0,  0,  0,  0,  0,  0,  0,              1,  1,  1,  1,  1,          2,  2,  2,  2,              3,  3,          4,
0,  0,  0,  0,  0,  0,  0,  0,          1,  1,  1,  1,  1,          2,  2,  2,  2,  2,          3,  3,          4,  4,
0,  0,  0,  0,  0,  0,  0,  0,          1,  1,  1,  1,  1,  1,      2,  2,  2,  2,  2,          3,  3,  3,      4,  4,
0,  0,  0,  0,  0,  0,  0,  0,  0,      1,  1,  1,  1,  1,  1,      2,  2,  2,  2,  2,  2,      3,  3,  3,      4,  4,  4,
0,  0,  0,  0,  0,  0,  0,  0,  0,      1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,      3,  3,  3,  3,  4,  4,  4,      5,
0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  4,  4,  4,  4,  5, 5
};

## Challenge

The challenge is to write a "reasonably fast" function or expression that replaces and extends these lookup tables.
Think of the lookup tables as a 3D structure. Pictured is the top 720 boxes of this structure.

## Input

An integer which is the index of a cube in the structure. You can assume the input will be in the range 0 to 719 inclusive.

## Output

The x,y,z coordinates for the given index. Assuming the input is between 0 and 719 the output ranges are x, 0 to 13 y, 0 to 27 z, 0 to 8

It's fine to accept and return larger indexes correctly just not required.

## Examples

i  ->   x   y   z
0  ->   0,  0,  0
12  ->   0,  5,  1
30  ->   4,  8,  0
65  ->   2, 11,  1
100  ->   0, 13,  2
270  ->   1, 19,  3
321  ->   1, 20,  6
719  ->   1, 27,  8

If you collapse the z-coordinate, then the structure is indexed top-down left right like shown below; Examples are marked in square brackets []

Y,Z 0,
0   | [0]
1   |  1
2   |  2   3
3   |  4   5
4   |  6   7   8                                1,
5   |  9  10  11                                 |[12]                           2,
6   | 13  14  15  16                             | 17                             | 18
7   | 19  20  21  22                             | 23  24                         | 25
8   | 26  27  28  29 [30]                        | 31  32                         | 33  34
9   | 35  36  37  38  39                         | 40  41  42                     | 43  44
10   | 45  46  47  48  49  50                     | 51  52  53                     | 54  55  56                    3,
11   | 57  58  59  60  61  62                     | 63  64 [65] 66                 | 67  68  69                     | 70                4,
12   | 71  72  73  74  75  76  77                 | 78  79  80  81                 | 82  83  84  85                 | 86                 | 87
13   | 88  89  90  91  92  93  94                 | 95  96  97  98  99             [100] 101 102 103                |104 105             |106
14   |107 108 109 110 111 112 113 114             |115 116 117 118 119             |120 121 122 123 124             |125 126             |127 128
15   |129 130 131 132 133 134 135 136             |137 138 139 140 141 142         |143 144 145 146 147             |148 149 150         |151 152
16   |153 154 155 156 157 158 159 160 161         |162 163 164 165 166 167         |168 169 170 171 172 173         |174 175 176         |177 178 179        5,
17   |180 181 182 183 184 185 186 187 188         |189 190 191 192 193 194 195     |196 197 198 199 200 201         |202 203 204 205     |206 207 208         |209    6,
18   |210 211 212 213 214 215 216 217 218 219     |220 221 222 223 224 225 226     |227 228 229 230 231 232 233     |234 235 236 237     |238 239 240 241     |242     |243
19   |244 245 246 247 248 249 250 251 252 253     |254 255 256 257 258 259 260 261 |262 263 264 265 266 267 268     |269[270]271 272 273 |274 275 276 277     |278 279 |280
20   |281 282 283 284 285 286 287 288 289 290 291 |292 293 294 295 296 297 298 299 |300 301 302 303 304 305 306 307 |308 309 310 311 312 |313 314 315 316 317 |318 319 |320[321]
X->|  0   1   2   3   4   5   6   7   8   9  10 |  0   1   2   3   4   5   6   7 |  0   1   2   3   4   5   6   7 |  0   1   2   3   4 |  0   1   2   3   4 |  0   1 |  0   1

Note that at even y-coordinates the structure expands in the x-direction, and at 0 and 5 mod 6 in the z-direction. Expect for the very top block.

# Rules

This is code-golf, the shortest code in bytes wins.

Reasonably fast As an additional requirement although not a competition of fastest code,
the code must still be shown to compute coordinates in a reasonable amount of time. You may for example use try it online and run a loop through all coordinates under 720 without exceeding the time limit of a minute, printing is optional.

"storing information as you go" is forbidden. For example executing f(100) should not depend on having computed f(99) previously.

Lookup tables are allowed but included in bytecount so aim to make them sparse if you choose to use them.

# Example code

non-competing

coord coords(int index){
int a=0,b=0,c=0;
int x=0,y=0,z=0;
long n,k,one;
n = k = 3;
int t=0;
while(t<index){
int s=0;k++;n=k;
while(n>1 && s<4){ n/=n&-n;n=n*3+1; n/=n&-n;s++;}
if(s==2)t++;
}
n=k;
one=n&-n;k = one;while(k>1){k>>=1;c++;} n=3*n+one;
one=n&-n;k = one;while(k>1){k>>=1;b++;} n=3*n+one;
one=n&-n;k = one;while(k>1){k>>=1;a++;}
coord r;
r.x = (b-c-1)>>1;
r.y = a-5;
r.z = (a-b-2)/6 +(a-b-4)/6;
return r;
}

Try it online!

• Will the input always be between 0 and 321 (inclusive)? – streetster Jul 10 at 6:27
• Good question, let's go with 797 @streetster – PrincePolka Jul 10 at 10:59
• @streetster 719.. i counted the boxes wrong, good thing I began in the sandbox – PrincePolka Jul 11 at 17:58

# Decode a RISC-V J-type immediate

RISC-V is an open processor instruction set, which defines a somewhat typical RISC instruction set. However, in order to make decoding simpler in hardware, the encoding for immediate values tends to be quite complex, with the bits essentially shuffled around. And the worst offender for that is without a doubt the type J (jump) instruction type.

So, the challenge is, given a (non-compressed) RISC-V instruction word, decode and output its type J immediate part.

A type J instruction has the following format:

31      30-21     20       19-12   11-7  6-0
|imm[20]|imm[10:1]|imm[11]|imm[19:12]| rd |opcode|

The only fields we are interested in are the imm fields. The immediate is sign extended, and its least significant bit is always 0, so the immediate (in term of instruction bits) is:

31-20       19-12       11        10-1     0
|...inst[31]|inst[19:12]|inst[20]|inst[30:21]| 0 |

Sample pseudocode: 0xFFF00000 * ((instr >> 31) & 1) | (instr & 0x000FF000) | ((instr & 0x100000) >> 9) | ((instr & 0x7FE00000) >> 20).

## Test cases

I: 0x4DFAB06F (j 0xABCDE)
O: 0x000ABCDE

I: 0xFD9FF0EF (jal ra, -0x28)
O: 0xFFFFFFD8

I: 0x8000006F (j -0x100000)
O: 0xFFF00000

The answer with the smallest byte count wins, standard loopholes apply, etc... Your program may take input and write output in any format it requires.

• It took a bit of puzzling to figure out the second code block. The ... notation is liable to misunderstanding (I'm not sure whether JS developers would find it more or less confusing), and there's no clear reason for 10-5 and 4-1 to be split up. This is one case where a reference implementation in generic C-like pseudocode could help: I think 0xfff00000 * ((imm >> 31 & 1)) | (imm & 0x000ff000) | ((imm & 0x00100000) >> 9) | ((imm & 0x7fe00000) >> 20) is correct and fairly generic. (In particular, I've deliberately avoided making assumptions about how the sign bit is treated under >>). – Peter Taylor Jul 16 at 8:10
• @PeterTaylor I copied the instruction format diagram from the RISC-V specification and I didn't realize the 10-5 and 4-1 parts could be merged. Oops. And I added a pseudocode for the decoding. – TuxCrafting Jul 16 at 11:38

Posted here.

# Brute-force the switchboard

Posted here!

• It looks good to me! I'll remove my old comments now. Also, thanks for using the sandbox! :) – FryAmTheEggman Jul 18 at 20:55
• @FryAmTheEggman Thank you so much for the suggestions! I'll keep it up a bit longer in case anyone else remembers or finds a dupe. – Rin's Fourier transform Jul 18 at 20:56
• Poor guy indeed having to do binary counting instead of using a Gray code... – Neil Jul 18 at 20:56

## Bits and Bytes constant generation

In this challenge, you have to generate the shortest Bits and Bytes program that outputs an integer input. For the simplicity of the challenge, you only have to search with ! and <.

## Bits and Bytes quick reference

Bits and Bytes operates on a one-byte accumulator. There are 4 operations (only 2 are neccecary for this challenge):

• ! : Invert all of the bits in the accumulator
• < : Shifts all bits in the accumulator one bit to the right. The leftmost bit becomes a 0 and the rightmost bit is discarded.
• > : Shift right
• @ : Swap nybbles

## Input / Output

Input will be two integers. The first integer sets the accumulator to the value of that integer. The second integer indicates the resulting value. Your program should output the shortest program in Bits and Bytes that sets the accumulator to that value.

0
255
!
0
4
!<!<!<

## This is a code-golf contest; the shortest program wins.

• I'd recommend having the question be self contained and explaining what the instructions actually do – Jo King Jul 21 at 11:34
• This is similar enough to some previous challenges that I wouldn't be surprised if someone finds a dupe. Also, should there be a second input for the starting value of the accumulator? – Peter Taylor Jul 21 at 23:04

# WANTEDM?VEMENTANDACALMCOURSE?FE???UENCE

## Challenge

Inspired by puzzles appearing on my website's chat, your job (should you choose to accept it) is to accept a string (say (?@Nbgkx¨¾ÃÐÕã÷øĆĊċĎďěĨīĺŏšŴŹǣǩǮ˘͵ΖΫΰξρφ) and:

• Find the Unicode points for the string: [40, 63, 64, 78, 98, 103, 107, 120, 168, 190, 195, 208, 213, 227, 247, 248, 262, 266, 267, 270, 271, 283, 296, 299, 314, 335, 353, 372, 377, 483, 489, 494, 728, 885, 918, 939, 944, 958, 961, 966]
• Find the differences between elements: [23, 1, 14, 20, 5, 4, 13, 48, 22, 5, 13, 5, 14, 20, 1, 14, 4, 1, 3, 1, 12, 13, 3, 15, 21, 18, 19, 5, 106, 6, 5, 234, 157, 33, 21, 5, 14, 3, 5]
• For every element in the differences between elements:
• If the element is less than 27, add it by 64 and output it converted to a Unicode character (e.g. 1 -> "A", 2 -> "B", $$\\ldots\$$ ).
• If the element is greater than or equal to 27, output a non-alphabet character ([^A-Za-z])

## Test Cases

The test cases output in uppercase and use the question mark for the non-alphabet character.

(?@Nbgkx¨¾ÃÐÕã÷øĆĊċĎďěĨīĺŏšŴŹǣǩǮ˘͵ΖΫΰξρφ --> WANTEDM?VEMENTANDACALMCOURSE?FE???UENCE
!1CRYkly¤´ÉãýĉĎġĢİĴķņŊŏŖťűŷ --> PROGRAM?PUZZLESANDCODEGOLF

## How to convert

This is a placeholder for the convertion process.

def normal_to_malbolge(prog):
pos = 0
malbolge = ""
for i in prog:
char = ord("' ( > D Q b c u".split()["*jpovi</".find(i)]) - pos
while char < 33:
char += ord("~")-32
malbolge += chr(char)
pos += 1
return malbolge

### Explanation

Iterate over the normalized Malbolge program, and then convert all "*jpovi</"'s to a character in "'", '(', '>', 'D', 'Q', 'b', 'c', 'u'. Then, minus the position.

While the temporary Malbolge representations' ASCII code is less than 33, increment the char by the ASCII code of "~" minus 32.

Append the resulting character to the output.

## Rules

• This is a contest; the shortest answer wins.
• The default I/O methods are allowed.

## Sandbox

• Is it a duplicate? This probably is.

• Is the challenge well-written?
• You need to include the instructions for converting normalized malbolge to malbolge (will give later) – MilkyWay90 Aug 21 at 1:18
• ^ Check my code to convert and make an explanation out of that. Some people don't know python, and my code is very ugly – MilkyWay90 Aug 21 at 4:18
• You could include a link to the standard loopholes, and put in that default I/O methods are allowed. Other than that I /support – MilkyWay90 Aug 21 at 15:33

# BotNets KotH

Controller, Example and Submission Template now added

flavor text not yet written

This is a web-based JS KotH where submissions have 2 parts, a Worker Bot and a Controller Bot. The goal is to have the most gold at the end of the game, by killing other bots and collecting gold found on the grid, while navigating the grid and surviving.

# Worker Bots

A Worker Bot is a class(ES6 or ES5) based on this format:

class YourWorkerBot extends WorkerBot {
performAction(message) {}
sendMessage(x, y, surroundings) {}
}

Each botnet has 20 Worker Bots. For every botnet, its worker bots are

### Method Descriptions:

• constructor(index): sets the color that the controller displays the bot as
• performAction(message): returns an action(described below).
• sendMessage(x,y,surroundings): x and y are zero-indexed coordinates. surroundings is a flat array of the 5x5 area around the bot. returns message(string) to send to controller bot

### Actions

Each move is formatted as a 2 element list([action, param]) where action is a string

• Movement: formatted as ["move", square] where square is an integer that represents the square you want to move to, using the same index as the surroundings object. You can only move one square orthogonally or diagonally. Moving onto a square with a coin will collect the coin.
• Kill: formatted as ["kill", square] where square is an integer that represents the square you want to attack, using the same index as the surroundings object. You can only kill a bot one square orthogonally or diagonally. If you kill a square with no bot, you do nothing. You get half the coins(rounded down) of the bot you attacked.
• EMP: formatted as ["emp",undefined]. It causes all bots including itself in the 7x7 surrounding area can't move next turn. This costs 3 coins.
• Any invalid action is treated as you doing nothing.

### Surroundings

The surroundings object will be a flat array of the 5x5 area around you, starting from the top left corner and going left to right and top to bottom. The grid below shows how the indexes of the array map to the actual grid area. Each square will be either a string, where "B" is a bot, "C" is a coin, "E" is an edge(not a valid move target) and "" is empty.

0  1  2  3  4
5  6  7  8  9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

# Controller Bot

A Controller Bot is a class(ES6 or ES5) that extends the following class:

class YourControllerBot extends ControllerBot{
constructor(locations){
super(locations)
this.storage=""
}
sendMessage(messages,index){
return ""
}
}

Each botnet has only 1 Controller Bot.

### Method Descriptions

• constructor(locations): locations is an array of the initial locations([x,y]) of the worker bots.sets initial storage value
• sendMessage(messages,index): messages is a list of lists of the messages sent by all the worker bots(not just your own), always in the same order and grouped by botnet. returns message to its worker bots whose index is index.

# The Game

The arena will be a 100x100 grid with 100 random coins scattered around it. Each game will have 1000 rounds and will have up to 15 randomly selected botnets. Every round, 10 coins will spawn at a random unoccupied spot. Every worker bot will get 1 turn per round. Each botnet's worker bots will perform an action in the same order for the entire game, but the order in which botnets take turns is randomized every round. Every turn, all the worker bots' sendMessage methods will be called(not just the worker bot taking the turn). After that, the controller bot's sendMessage method will be called. Finally, the worker bot's performAction method will be called and the action will be executed. This will repeat for every worker bot in a round.

# Scoring

Each botnet's score is the sum of the coins collected by each of the worker bots. Botnets are ranked by most score.

# Controller(WIP)

https://botnets-koth.firebaseapp.com

# Example

function sampleBotnet() {
class SampleControllerBot extends ControllerBot {
constructor(locations) {
super(locations);
this.storage = "";
}
sendMessage(messages, index) {
let surrondings = messages.find(message => message[0] === index)[1];
let otherBot = surrondings.findIndex(
(square, i) =>
square === "B" && [6, 7, 8, 11, 13, 16, 17, 18].includes(i)
);
if (otherBot !== -1) {
return ["kill", otherBot];
}
let coin = surrondings.findIndex(
(square, i) =>
square === "C" && [6, 7, 8, 11, 13, 16, 17, 18].includes(i)
);
if (coin !== -1) {
return ["move", coin];
}
let validMoves = [6, 7, 8, 11, 13, 16, 17, 18].filter(
x => surrondings[x] === ""
);
return [
"move",
validMoves[Math.floor(Math.random() * validMoves.length)]
];
}
}
class SampleWorkerBot extends WorkerBot {
performAction(message) {
return message;
}
sendMessage(x, y, surroundings) {
return [this.index, surroundings];
}
}
return {
name: "SampleBotnet",
color: "red",
controllerBot: SampleControllerBot,
workerBot: SampleWorkerBot
};
}

#Submission Template
javascript
/* eslint constructor-super:0,no-this-before-super:0,no-unused-vars:0*/
import ControllerBot from "./src/scripts/ControllerBot.js";
import WorkerBot from "./src/scripts/WorkerBot.js";

//copy the part below
function yourBotnet() {
class YourControllerBot extends ControllerBot {
constructor(locations) {
super(locations);
this.storage = "";
}
sendMessage(messages, index) {
return [];
}
}
class YourWorkerBot extends WorkerBot {
performAction(message) {}
sendMessage(x, y, surroundings) {}
}
return {
name: "YourBotnet",
color: "",
controllerBot: YourControllerBot,
workerBot: YourWorkerBot
};
}

# Rules

• Standard Loopholes apply
• Bots cannot modify or add global variables
• Bots cannot call controller functions or other bots' methods
• Bots cannot read or modify other bots storage
• Bots may not access the internet
• I may disqualify any bot which does anything I deem to be cheating.

# Sandbox

• Is the bar to entry too high?
• Can the current turn/round system be improved?
• Any better names for the 2 bots/title?
• Is there enough room for creativity?
• Would it be better if I merged the 2 classes into one class?
• Is there anything broken with the spec?
• How many workers per controller, and how many controllers per game? Also, are controllers supposed to be able to message to all workers, or just their own? – Unrelated String Aug 12 at 4:05
• @UnrelatedString should be fixed – SuperStormer Aug 12 at 13:25
• performAction(surroundings, message) { return eval(message); } sendMessage(surroundings) { return JSON.stringify(surroundings); } There are, of course, countless other ways to circumvent the size restrictions. I also find said restrictions quite brutal. Additionally, I don't see the point of worker-side storage. Finally, the whole document is difficult to read - giving a short summary of the goal at the beginning would go a long way. Nitpick: it's "surroundings", not "surrondings". – Alion Aug 16 at 10:46
• Since your latest revision is "fixed spec": a) The WorkerBot class is invalid - calling super there is a syntax error. Do you want to show the base class that should be extended, or a template of how to extend said class? The second option makes more sense in my opinion, although the text right above seems to indicate otherwise. b.1) Under "Controller Bot", what is index? How is it chosen? b.2) What do bots that don't have the specified index receive as the message? b.3) Are there duplicate worker bot indexes possible? If not, please fix sendMessages descripiton. – Alion Aug 18 at 8:21
• c) Under 'The Game', sendMessages instead of sendMessage for controller bot. d) I'm worried about the split between worker bot and controller bot. I don't see how it would be anything but a minor nuisance under the current rules. Previously it was code-golf, but that's gone now. I'm also aware that it is supposed to be the essence of this challenge, so I'm hoping there's just a big misunderstanding somewhere. Perhaps it'll become clear once (b) is addressed. – Alion Aug 18 at 8:24

# I need help rewording the prompt.

I learned from last time about having convoluted scoring and having too broad of a focus from my last question. I hope this one is more clear.

# Church Subtraction

Lambda calculus has always been a fascination of mine and the emergent behaviors of passing functions into each other is delightfully complex. Church numerals are representations of natural numbers contructed from the repeated application of a function (normally the unary addition of a constant). For example, the number zero returns and "ignores" the input function, one is f(x), two is f(f(x)) and so on:

ident = lambda x: x
zero = lambda f: ident
succ = lambda n: lambda f: lambda x: f(n(f)(x))
one = succ(zero)
add1 = lambda x: x + 1
print(to_int(one))
>>> 1

From this we can easily see that addition is accomplished by applying the first function to x then applying the second function to x:

add = lambda m: lambda n: lambda f: lambda x: n(f)(m(f)(x))
>>> 3

Addition is relatively easy to understand. However, to a newcomer it might be inconceivable to think of what subtraction looks like in a Church encoded number system. What could it possibly mean to un-apply a function?

# Challenge

Implement the subtraction function in a Church encoded numeral system. Where subtraction performs the monus operation and unapplies a function n times if the result will be greater than zero or zero otherwise. This is code-golf so shortest code wins.

# Input

Two Church numerals that have been encoded in your choice of language. The input can be positional or curried. To prove these are true Church numerals they will have to take in any function and apply them repeatedly (add1 is given in the examples but it could be add25, mult7, or any other unary function.)

# Output

A Church numeral. It should be noted that if m < n then m - n is always the same as the identity function.

Examples:

minus(two)(one) = one
minus(one)(two) = zero
...

also acceptable:

minus(two, one) = one
minus(one, two) = zero

Credit:

This github gist for giving me a python implementation of Church Numerals.

• 1. I'm not sure how to parse "the number zero is a cat function Church encoding". Perhaps it would be better expressed as "the Church encoding of the number zero is the identity function"? 2. Explaining multiplication is an unnecessary distraction (unlike addition, which is relevant context). You've got a link to Wikipedia for people who want to learn more. 3. There is a technical term, monus, which describes the truncated subtraction. The truncation at zero should be described in the Challenge section, not the Output, and you might want to introduce this term there. – Peter Taylor Aug 23 at 7:31
• 1. I missed an "in" and a cat function is pretty known in esolangs (esolangs.org/wiki/Cat_program), thank you for catching this. 2. I could explain exponentiation as well and maybe that might make a more compelling story. Or should I just stick with addition? 3. Thanks for the suggestion. – Ryan Schaefer Aug 23 at 12:04
• 1. cat is well known in POSIX too, and in both cases it does I/O. I think it's misleading and confusing to call ident a cat function. And the word order of the edited version is ambiguous, and IMO tends to the parse "(the number zero) (is) (a cat function in Church encoding)". – Peter Taylor Aug 23 at 12:29
• @PeterTaylor that work better? – Ryan Schaefer Aug 23 at 13:22

# N-bonacci from a Seed

An N-bonacci sequence is a Fibonacci-like sequence where the N previous terms are added to get the next term. The Fibonacci series is a 2-bonacci sequence.

Given a list of integers L of length l and an integer n, output the first n digits of the l-bonacci sequence starting with the sequence L.

# Input

Input is a list, array, delimited string, stream, etc of integers, and an integer. Input is flexible, provided L and n are separable. It is guaranteed that n >= 0, and l >= 1.

# Output

Output the first n digits of the l-bonacci sequence starting with L. Output is flexible here also: a list, array, string, stream, etc.

Samples:

[1,1], 5       --> 1, 1, 2, 3, 5
[0,1,2], 1     --> 0
[10,1,-1], 10  --> 10, 1, -1, 10, 10, 19, 39, 68, 126, 233
[-1,0,1], 0    --> //no output, or empty output
[-1], 3        --> -1, -1, -1
[-1,-2,1,0], 9 --> -1, -2, 1, 0, -2, -3, -4, -9, -15

This is , so smallest in bytes wins.

Related

• You'd probably need to explain what an l-bonacci sequence is. That said I'm not sure this isn't a dupe of the related challenge you posted since at least some answers (including mine) would be able to be reposted with [1]*n replaced with L and n replaced with len(L). – FryAmTheEggman Aug 27 at 14:42
• Closely related: codegolf.stackexchange.com/q/70476/31716 – DJMcMayhem Aug 27 at 14:58
• n <= l seems like an odd restriction, which your test cases don't always follow. If that is an actual requirement, this would be L[:n] in Python, which I don't think you want. – Hiatsu Aug 28 at 13:56
• Hmm. I'll axe n <= l then and change it to n >= 0. – bigyihsuan Aug 28 at 17:37

# Is there enough room to stack the statues?

Inspired by this stack of little statues that are currently on my desk at work, given to me by my colleagues from Sri Lanka when they visited The Netherlands:

## Challenge:

Input:

You are given two inputs:

1. $$\statues\$$: a multi-line string (or character matrix), containing only the characters \n|-# (where the # can be another character of your own choice)
2. $$\height\$$: an integer

Output:

Two distinct values of your own choice indicating truthy/falsey; so yes, 1/0 is allowed as output in languages like Java/C# .NET and such (relevant forbidden loophole).
The output will be truthy iff both of these are truthy:

1. The statues can be stacked
2. The total height of all stacked statues is $$\\leq height\$$

Statues input example:

##|
####    |
# ##
#  #  |##
----  |######
|   ###
|##   |##   #
|## - |######
# |####

The | and - represent the bases of the statues. So with the input above, we'll have the following statues:

####
## #
## ##
####   #  ##
# ##  ## ###  ##      #
#  #  ## ###  ##  #   #
----  ------  --  -  --

How can the statues be stacked?

When stacking statues, we can only stack statues with a width of the base that is $$\\leq\$$ the width of the top of the statue beneath it. So with the statues above, these are all possible pairs of how we could stack two statues on top of each other:

####
# ##    ##
#  #    ##      #        #
----    --      -       --
####    ####    ####    ####    ##
## #    ## #    ## #    ## #    ##    #      #
## ##   ## ##   ## ##   ## ##   --    -     --    #    #
#  ##   #  ##   #  ##   #  ##   ####  ####  ####  -   --   #
## ###  ## ###  ## ###  ## ###  # ##  # ##  # ##  ##  ##   -
## ###  ## ###  ## ###  ## ###  #  #  #  #  #  #  ##  ##   #
------  ------  ------  ------  ----  ----  ----  --  --  --

One possible complete stack keeping that in mind could therefore be:

#
-
#
--
##
##
--
####
# ##
#  #
----
####
## #
## ##
#  ##
## ###
## ###
------

Which has a total height of 18. So, if these statues would be the input, as well as a given target-$$\height\$$ of $$\\geq18\$$, the output would be truthy.

## Challenge rules:

• You can use a different consistent character other than # for the statue border if you want (other than |- \n). Please state which one you've used in your answer if it's different than #.
• You are allowed to take the $$\statues\$$ input in any reasonable format. Can be a multi-line string, a list/array/stream of strings, a character matrix, etc.
• You can assume statues are always separated by at least one space/newline from one-another, so something like #|#| isn't possible.
• It is possible that a smaller statue is within the rectangular boundaries of another oddly shaped statue. For example, this is possible:
# ##
- ##
##
####
# #
----
• You are allowed to pad the statues input with trailing spaces.
• You can assume all statues will only be placed on top of each other, and never next to each other if the top of a statue is large enough to hold two adjacent statues with small bases, or if it could fit on a smaller ledge. For example, these towers of statues aren't possible:
#
#                     # #
#--                     - -
####                    ###
----                    ---
Statue on lower ledge   Two statues next to each other on top of single statue
• You can assume the top and base part of a statue is always a single piece, without any gaps. So a statue like this wouldn't be possible:
#  #
----

But a statue like this is possible:

#
#  #
----
• You can assume the base determines the width of a statue. So it's not possible to have a statue like these:
#######
#####
####     ###
---     --

## General rules:

• This is , so shortest answer in bytes wins.
Don't let code-golf languages discourage you from posting answers with non-codegolfing languages. Try to come up with an as short as possible answer for 'any' programming language.
• Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN/STDOUT, functions/method with the proper parameters and return-type, full programs. Your call.
• Default Loopholes are forbidden.

## Test cases:

Truthy test cases:

20
##|
####    |
# ##
#  #  |##
----  |######
|   ###
|##   |##   #
|## - |######
# |####

Falsey test cases:

10
##|
####    |
# ##
#  #  |##
----  |######
|   ###
|##   |##   #
|## - |######
# |####

# Sandbox questions:

• Should I make the statues always solid without inner spaces, so it's slightly easier to parse?
• Any edge cases I should think about in the rules/test cases?
• Any suggested test cases?
• If the top of a statue is wide enough, can you put two statues on top of it? – Hiatsu Aug 30 at 23:52
• @Hiatsu Oh, that's a pretty good question. I think I will add a rule that will disallow it, to not complicate it too much. Thanks for asking though, hadn't considered that! :) – Kevin Cruijssen Aug 31 at 9:20
• Related – Shaggy Sep 1 at 16:02
• Another thing that should probably be cleared up: Can the base and top row/column consist of multiple parts? (e.g. is a 5x5 square with the top, bottom, left and right middle square respectively missing a valid statue?) – ar4093 Sep 4 at 11:09
• Hm, is there a possibility that a statue can "fall into" a bigger statue if the latter's top has a wide enough hole on it and there's no other place to put the smaller one on? – Erik the Outgolfer Sep 4 at 12:36
• @ar4093 & ErikTheOutgolfer Added some rules to prevent this. I have the feeling the rules are becoming a bit large with all this blacklisting of statues which aren't possible, though. – Kevin Cruijssen Sep 4 at 12:49
• This seems like two challenges now: sum of statue heights <= maximum height (trivial), and all statues can be stacked somehow (the fun part). Given the effort you've gone through to keep the first part trivial, you might just want to remove it. – Hiatsu Sep 4 at 15:38
• @Hiatsu You might be right. Will probably change it later on to actually stack the statues. Will the input format and irregular shapes be different enough from this challenge in that case? I personally think it will, but I'd like some other opinions before I change it. – Kevin Cruijssen Sep 4 at 16:58

# Solve a cubic equation code-golf

(Is this really not a duplicate?)

• Apparently not. I can find multiple quadratic equation challenges: 1; 2; 3, but there doesn't seem to be any cubic equation challenges yet. – Kevin Cruijssen Sep 13 at 9:35
• Sounds like it might be a dupe of either codegolf.stackexchange.com/q/154001/194 or codegolf.stackexchange.com/q/11694/194 – Peter Taylor Sep 13 at 10:58
• @PeterTaylor The first challenge only asks for integer solutions, while yours has some constraints that this challenge might not have. – Erik the Outgolfer Sep 13 at 13:48
• @EriktheOutgolfer, I said "might" because "solve" is so vague that there's no way of knowing what the challenge is. And I don't think my challenge has constraints so much as licence to not have to be accurate to 1ulp. It's true that cubics can't be as ill-conditioned as higher-order polynomials, but there are still some nasty cases. – Peter Taylor Sep 14 at 8:48
• @PeterTaylor I think there's a lot of subtleties in specifying challenges like this. I'd really like to push solvers to do something like the cubic formula rather than some generic method to solve or brute-force a polynomial equation. It's also fair that it's hard to judge anything from just a title. I'll try writing something up later and would be happy to hear your thoughts. – xnor Sep 14 at 8:53
• Regarding Peter's comment about the ambiguity of not including the description, one important thing to include is whether we must at least find one solution, the real solutions, or all solutions (I'm in favor of the last option). Also, "pushing solvers to do work" can be as simple as encouraging them to implement an algorithm that's more than just a built-in solving function (including the built-in solution for reference doesn't hurt, if it exists). – Erik the Outgolfer Sep 14 at 15:38
• @EriktheOutgolfer Can you explain why you like the last option of requiring all solutions? I had thought a bit about this and was leaning pretty heavily to only asking for one solution because it gives less advantage to generic solvers (even non built-ins) over writing a formula, and it means one never has to output a complex solution for languages that don't support them natively. – xnor Sep 14 at 19:47
• The "less advantage" restricting the output to one solution gives is simply a need for the answer to just pick one of the solutions it has found, in the worst case. Also, there are some cases where there are only complex solutions. If you want to account for such languages, you will need to add a guarantee that the equation will have at least one real solution, and none of the aforementioned cases will ever be input (there's some ambiguity about this currently). – Erik the Outgolfer Sep 14 at 19:53
• @EriktheOutgolfer Doesn't every cubic equation have a real solution? I'm not intending to include ones where the leading coeff is zero so it's really quadratic. – xnor Sep 14 at 19:55
• Hm, must've been thinking of something else (I'm currently doing other stuff). And yeah, a cubic equation $ax^3+bx^2+cx+d=0$ is cubic precisely because $a\ne0$. – Erik the Outgolfer Sep 14 at 19:58