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

# Comment or not comment?

Write a function which given an all lowercase string, return the same string but with characters that are comments turned uppercase.

# Input

Input is a null terminated ASCII string which may contain any of these characters abcdefghijklmnopqrstuvwxyz /*\ space newline
Last and only last character is null
You will not need to test for invalid input, such as "stringliterals" etc

# Rules for what is comment

/* causes everything until */ (or end of string) to be comment
// causes everything until newline (or end of string) to be comment
'\' at end of line in a comment causes next line to be a comment aswell

# Output

A copy of the input but with letters which are comments according to the rules above in uppercase, other characters shall remain unchanged

# Examples

/comment -> /comment
//comment -> //COMMENT
/*comment -> /*COMMENT
no /*yes*/ no // yes -> no /*YES*/ no // YES

/*          ->              /*
comment                     COMMENT
*/                          */

//\          ->             //\
/*                          /*
not comment                 not comment
//\                         //\
*/                          */


ungolfed

• Which characters can be in the input? Printable ASCII? – user202729 Mar 4 '18 at 5:48
• printable ascii yes and you can also assume input will not contain uppercase letters, function shall change a-z -> A-Z if they would be comment according to C-syntax – PrincePolka Mar 4 '18 at 16:52
• I edited the proposal, clarified and simplified a little bit – PrincePolka Mar 4 '18 at 20:59
• Potential dupe. This challenge is about removing comments instead of changing their capitalization, but the main part is the same. – Laikoni Mar 6 '18 at 21:00
• @Laikoni, thanks I had not seen that one, looks almost the same – PrincePolka Mar 6 '18 at 21:21

# There, I fixed it (with recycled parts)

### Challenge

Given a string containing only letters a-z (either upper- or lowercase), fix it by adding characters to it so that the difference between two adjacent characters is no more than one, or if you can't, remove offending characters (in order) until the string satisfies the requirement.

For example, abcdfge must be fixed either by adding an e, resulting in abcdefge, or by removing f and g, resulting in abcde. Removing must be done only if adding can't be done.

You can add characters only from a recycle bin, which your program or function must store between calls. Characters removed from the string are placed in the recycle bin, and added characters are removed from the bin. The bin can store multiple instances of the same character. In the beginning, the bin is empty.

If you can't fix the whole string by adding characters, don't add any characters. That is, only ever either add or cut a string, not a bit of both.

### Example

First call:
Recycle bin: "" (empty)
Input:       "abcdfge"
Output:      "abcde"          // 'f' and 'g' are removed and placed in the recycle bin

Second call:
Recycle bin: "fg"
Input:       "defhiabcdeg"
Output:      "defghiabcdefg"  // 'f' and 'g' are taken from the recycle bin and placed
// where they are needed.

Third call:
Recycle bin: ""
Input:       "codegolf"
Output:      "cdef"           // The two 'o's and the 'g' and the 'l' are removed and
// placed in the recycle bin.

Fourth call:
Recycle bin: "oogl"
Input:       "mnpqrt"
Output:      "mn"             // 'o' could be added, but it isn't, because an 's' is
// also missing and we don't have one. "pqrt" are added
// to the recycle bin.

Fifth call:
Recycle bin: "ooglpqrt"
Input:       "kmnrsu"
Output:      "klmnopqrstu"    // Characters "lopqt" are added from the bin to fill all
// the gaps. Unused characters are left in the bin.

Sixth call:
Recycle bin: "ogr"
Input:       "qwerty"
Output:      "qe"             // The gap between 'q' and 'w' can't be fixed so 'q' is
// removed. 'e'-'q' < 0 and therefore not more than 1,
// so 'e' stays. The rest of the characters are removed.
// The recycly bin will contain "ogrwrty".


This is , so the goal is to make your code as short as possible in whatever language you choose to participate with.

• "You can add characters only from a recycle bin, which your program or function must store between calls." Many languages don't have the capability to store information between program runs or function calls, or at least not easily. Perhaps having two inputs (recycle bin, 'input'), and two outputs (recycle bin, 'output') would be more inclusive? – Οurous Mar 9 '18 at 9:32

I wrote the following question then found this question. Is it similar enough to mine that mine would be considered a duplicate?

# Recursive Prime Multiplicative Base

I've been thinking about this idea for months now, and, as far as I have been able to find, nobody else has thought of it. Please let me know if I wasn't the first!

Most number systems are additive positional. These take the form of ∑bi*di, where di is the sequence of digits and bi is the base sequence. For example, for the number 1234 in base ten, di={4,3,2,1,0,0,0...} and bi=10i.

I propose the idea of a multiplicative positional system.1 This instead takes a general form of ∏bidi. The most obvious useful multiplicative base is that of bi=Pi, where Pi is the i-th prime number. For example, one could write 3960 as 3,2,1,0,12, as 23*32*51*70*111=3960. This is mathematically interesting (e.g. multiplication gets reduced to addition, but addition is way harder) but we're still using an additive system underneath. This obviously cannot do. Thankfully, we can use recursion! This is probably best illustrated with an example:

3960=
3    2   1  0 1
(0 1) (1)  () 0 ()
(0()) (()) () 0 ()
=(0())(())()0()


As you can see, each nonzero digit gets replaced with that digit's representation. 1 gets replaced with (), as a blank sequence is equivalent to an infinite series of zeros, and anything to the power of zero is one. If one were to include a symbol representing negation, one could write any rational number and even any expression obtainable from the integers using a finite number of multiplications and exponentiations in a finite sequence of four characters.

To give this number system a name, I term it the recursive prime multiplicative base or RPMB (unless you have any better ideas for it).

1Extending this, one can conceive of an infinite number of hyperoperational positional systems, but that's for another code challenge. ;)

# The Challenge

You are to write a program that, when given an integer as input outputs the RPMB form of that integer. The output may be either as a string or a list. If the output is a string, you may substitute any characters for ()0. If the output is a list, the output should be a list of 0's and other lists matching this description. For example, for 3960, the program might output [[0,[]],[[]],[],0,[]].

(todo)

## Scoring

This is , so the smallest program in bytes wins.

• – user202729 Mar 11 '18 at 10:07
• But 9 isn't a prime... – user202729 Mar 11 '18 at 10:08
• @user202729 whoops, typo! Thanks for catching that – DanTheMan Mar 11 '18 at 17:30

• Output the largest prime number possible in as few bytes as possible using no number but pi.
• This code will be the sole judge of whether your output is actually a prime number.
• Your score will be the prime number produced divided by the number of bytes used for your code.
• If your language has a built-in variable for pi, use that. Otherwise, let pi equal 3.1415926535898. Any occurrance of pi itself or something referring directly to pi counts as one byte.
• Your number must be generated solely by applying various operations and functions to pi. Those functions cannot offset pi by anything other than another number derived from pi. The sole exceptions to this rule are floor and ceiling functions. For example, if you want to find the square root of something, you must do something to the effect of raising it to the (pi/pi/(pi/pi+pi/pi))th power.
• You may not modify pi in any way that uses a reference to or directly uses non-pi number.
• The entirety of the number must be outputted in base 10 and without scientific notation. All digits of the number must be included in the output.
• You must provide a
• The largest score wins.

Here's an example in Lua:

print(math.floor(math.pi))


That's 14 bytes (counting math.pi as one byte) for the prime number 3, so my score is 3/14 or ~0.21428571428. Here's another example:

m=math print(m.floor(m.pi^m.pi)+m.pi/m.pi)


That's 31 bytes (each m.pi is one byte) for the prime number 37, so my score is 37/31 or ~1.1935483871.

# Sandbox

Are there any other ways to clear up ambiguities I may be missing?

• some loopholes are forbidden by default and are sometimes referred to as "standard loopholes". – Giuseppe Mar 12 '18 at 21:31
• You should include a winning criterion, i.e., "largest score wins" if I'm reading this correctly. – Giuseppe Mar 12 '18 at 21:31
• @Giuseppe Thanks. I've edited the post – Zenon Mar 12 '18 at 21:33
• At some point (and judging by the kind of stuff that happens here) the values being produced will be beyond guaranteed bounds of even strong tests like Baillie-PSW (2^64=18446744073709551616). Are such values banned or is it up to others to show that the number produced is composite? For example I might post Ç*ÇµḞ+Ḟ×Ḟ+Ċ*$ in Jelly since it produces 10555134955777783414078330085995832946127396083370199445109 which Baillie-PSW says is a probable prime. – Jonathan Allan Mar 12 '18 at 21:55 • Welcome to PPCG! Nice challenge! – Weijun Zhou Mar 12 '18 at 22:19 • Oh, by the way, that is floor(π^π)×(floor(π^π)+floor(π^π))+ceil(π^π)^ceil(π^π) and WolframAlpha also says it is prime – Jonathan Allan Mar 12 '18 at 22:24 • ...Mathematica to the rescue, it has a "PrimalityProving" package which we can plug numbers into to check Try It Online! Might be worth including this link. – Jonathan Allan Mar 12 '18 at 23:36 • Note that requiring unobservable behavior is discouraged. I suggest making the challenge a mathematical challenge and the score is calculated based on (the size of the formula) and (the output). (yes, non-code challenges are allowed) – user202729 Mar 13 '18 at 1:43 • Quoting from that answer: "Non-observable requirements tend to be vague, subjective, or based on false assumptions about the properties of programming languages." -- Yes, you're assuming that every language have floating point support, or that every language have the functions you mentioned. – user202729 Mar 13 '18 at 1:48 • (1) It's very hard to write prohibitions unambiguously, and I don't think you've succeeded. I don't know what exactly "Your number must be generated solely by applying various operations and functions to pi. Those functions cannot offset pi by anything other than another number derived from pi." allows and forbids. Can I convert pi to a string and take its length? Convert pi to a string, remove the decimal point, and convert back to an integer? Note: answering those two examples would not address the real problem. (2) "You must provide a" what? – Peter Taylor Mar 13 '18 at 8:55 • I fell it's a busy-beaver – l4m2 Mar 15 '18 at 15:14 # Relay Adder Make a 32-bit full adder with relays. A relay is here a gate with four inputs A, B, C and D, and output if A==B then C else D. You'll be given two 32-bit numbers (totally 64 inputs), a carry flag, constant 0 and 1, sum up to 67 inputs; output 33 bits as the result Smallest Gate count * gate depth win TODO: add tags • Do you foresee any possible gains by making this a 32-bit adder? It feels to me like an 8-bit adder would be sufficiently complicated to allow golfing, without becoming as tedious. What do you mean by: "sup up to 67 inputs?" You also don't define what gate depth is. You also probably want to come up with a way for answers to post readable solutions. – FryAmTheEggman Mar 16 '18 at 20:20 # Split the wagons! code-golfparsing In some variants of APL, a tacit function, or a train, consists of several functions next to each other. Your task is, given a train, to separate the different functions it consists of. The symbols you will be given and their meanings are: • F: Function • O: Dyadic operator Here is how functions are separated in extended Backus-Naur form: function ::= {F O} F  Namely, a dyadic operator O accepts one function to its left and one F to its right, and the result is one function, for example F O F, F O F O F O F and F O F O F O F O F O F are all considered single functions for the purposes of this challenge. F F F O F O F F F O F, however, isn't a single function, and is split as (F, F, F O F O F, F, F O F). You can get the symbols in any reasonable form, including a string, an array of integers, and any other kind of ordered collection able to hold at least 2 different elements. You can assume the input doesn't start or end with O, or contain two Os in a row. However, you must always use the same symbols, and you must only use two unique symbols. The output can be one of: • List of indices (0- or 1-based) which are the locations of the first symbol of each function. The index representing the first symbol of the input can be optionally omitted, as it's implied. The list doesn't have to be ordered. • List of indices (0- or 1-based) which are the locations of the last symbol of each function. The index representing the last symbol of the input can be optionally omitted, as it's implied. The list doesn't have to be ordered. • List of the individual functions. Every element of this list is a list subject to the same restrictions as the input, but not necessarily in the same format as the input. However, all elements must have the same format. The list has to be ordered. Do not include empty partitions or duplicate, out-of-bounds or negative indices in the output. Below are some test cases. F and O are used for F and O respectively, and the output is a list of the separated parts. (empty) -> (empty) F -> F FOF -> FOF FOFOFOF -> FOFOFOF FOFOFOFOFOF -> FOFOFOFOFOF FFFOFOFFFOF -> F F FOFOF F FOF FFOFOFFOF -> F FOFOF FOF FFFFF -> F F F F F FOFF -> FOF F FFFF -> F F F F  # Ungolf my tinylisp code I like golfing in tinylisp: (d M(q((x)(i x(i(disp x)0(M x))0  But I also like posting explanations with nicely formatted code: (d M (q ((x) (i x (i (disp x) 0 (M x)) 0))))  Can you help me generate the ungolfed code for my explanations? ## The task Given a line of tinylisp code, return or output the same code, formatted to the following specifications: ### Input syntax Tokens in tinylisp are (, ), or any string of one or more printable ASCII characters excluding parentheses or space. (I.e. the following regex: [()]|[^() ]+.) A non-parenthesis token is called an atom. Spaces are ignored, except insofar as they separate tokens. For this challenge, the input code will consist of a single parenthesized list containing 0 or more items. The items in the list may be either (arbitrarily deeply nested) lists or single-token atoms (or a mixture). There may be spaces between items; spaces may also be omitted if they are not necessary to separate two adjacent atoms. Closing parentheses at the end of the expression may be omitted. Some examples: () (1 2 3) (1 2 3 (1 (2) (1(2 (1((2))3 (((((xyz))))) (((((  Bare atoms, like xyz, do not have to be handled for this challenge. ### Nesting levels We define a nesting level for a tinylisp expression as follows: • Atoms and the empty list () have a nesting level of 0. • A nonempty list has nesting level N+1, where N is the maximum nesting level of its items. Some examples: Expression Nesting level () 0 (1 2 3) 1 (1 2 ()) 1 (1 (2)) 2 (1 ((2)) 3) 3 ((((())))) 4  ### How to ungolf To ungolf a tinylisp expression, first supply any missing closing parentheses. Then, add newlines and whitespace according to the following rules: • For an expression of nesting level 0, do not add any whitespace. • For a list of nesting level 1 or 2, make sure the elements of the list are separated by a single space. • Lists of nesting level 3 or higher must be broken across multiple lines: • The first element of the list should be on the same line as the opening parenthesis, with no whitespace in between. • More specifically, the first element should begin on the same line. If the first item itself has nesting level 3 or higher, it will of course be spread over multiple lines itself. • IF the second element of the list has nesting level 0 or 1, place it on the same line as the first, with a space in between; otherwise, if its nesting level is 2 or higher, place it on its own line. • The third and subsequent elements of the list must each be on their own line. • Elements on their own line must be indented by a number of spaces equal to how deeply they are nested in the expression. The top-level list should be indented 0 spaces, its elements 1 space, their elements 2 spaces, etc. • Closing parentheses always go with the preceding list. ### A worked example Suppose this is our input: (d E(q((n)(i(l n 2)(s 1 n)(E(s n 2  First, supply missing close-parens: (d E(q((n)(i(l n 2)(s 1 n)(E(s n 2))))))  The outermost list has nesting level 6, so it must be split over multiple lines. Its second element is E (nesting level 0), so we keep that on the same line. We place the third element on its own line, indented by one space. (d E (q((n)(i(l n 2)(s 1 n)(E(s n 2))))))  The next list has nesting level 5. Its second element has nesting level 4, so it goes on its own line, indented by two spaces. (d E (q ((n)(i(l n 2)(s 1 n)(E(s n 2))))))  The next list has nesting level 4. Its second element has nesting level 3, so it goes on its own line, indented by three spaces. (d E (q ((n) (i(l n 2)(s 1 n)(E(s n 2))))))  The next list has nesting level 3. Its second element has nesting level 1, so it goes on the same line as the first element, separated by a space. We place the third and fourth elements on their own lines, indented by four spaces. (d E (q ((n) (i (l n 2) (s 1 n) (E(s n 2))))))  The list (s 1 n) has nesting level 1 and thus goes on one line. It has spaces between its elements, so it is already ungolfed. The list (E(s n 2)) has nesting level 2 and thus goes on one line. It needs spaces between its elements. Final result: (d E (q ((n) (i (l n 2) (s 1 n) (E (s n 2))))))  ## Submission requirements The input will always be a single (possibly nested) list. Thus, it will always start with (, never an atom. The number of opening parentheses will be greater than or equal to the number of closing parentheses. The input will not have any leading or trailing whitespace. The input will consist only of printable ASCII characters; in particular, it will not contain newlines or tabs. Your solution may be a program or function. You may use any of the default I/O methods. Input must be a string, a list of characters, or the nearest equivalent in your language. Output may be a multiline string or a list of strings. It may optionally contain trailing spaces and/or a single trailing newline. ## Examples () => () (load library => (load library) (q(1 2 => (q (1 2)) (q((1)(2 => (q ((1) (2))) ((((( => ((((())))) (d C(q((Q V)(i Q(i(l Q 0)0(i V(a(C(s Q(h V))V)(C Q(t V)))0))1 => (d C (q ((Q V) (i Q (i (l Q 0) 0 (i V (a (C (s Q (h V)) V) (C Q (t V))) 0)) 1)))) ((q (g (c (c (q q) g) (c (c (q q) g) ())))) (q (g (c (c (q q) g) (c (c (q q) g) ()))))) => ((q (g (c (c (q q) g) (c (c (q q) g) ())))) (q (g (c (c (q q) g) (c (c (q q) g) ()))))) (d f(q((x y z p)(i p(i(l p 0)(f(s x p)y(a z p)0)(i x(f(s x 1)(a y 1)z(s p 1))(i y(f x(s y 1)(a z 1)(s p 1))(f x y z 0))))(c x(c y(c z( => (d f (q ((x y z p) (i p (i (l p 0) (f (s x p) y (a z p) 0) (i x (f (s x 1) (a y 1) z (s p 1)) (i y (f x (s y 1) (a z 1) (s p 1)) (f x y z 0)))) (c x (c y (c z ()))))))) (def even? (lambda (num) (divides? 2 num))) => (def even? (lambda (num) (divides? 2 num))) (def odd? (lambda (num) (not (divides? 2 num)))) => (def odd? (lambda (num) (not (divides? 2 num)))) (def divides? (lambda (divisor multiple) (if (negative? divisor) (divides? (neg divisor) multiple) (if (negative? multiple) (divides? divisor (neg multiple)) (if (less? multiple divisor) (zero? multiple) (divides? divisor (sub2 multiple divisor))))))) => (def divides? (lambda (divisor multiple) (if (negative? divisor) (divides? (neg divisor) multiple) (if (negative? multiple) (divides? divisor (neg multiple)) (if (less? multiple divisor) (zero? multiple) (divides? divisor (sub2 multiple divisor)))))))  ## Reference solution Here's a reference solution in Python 3: Try it online! ## Similar questions I haven't found an exact duplicate yet. The closest is: but there are many significant differences between that question and this: input on multiple lines vs. one line; different criteria for when to insert newlines; having to add missing close-parens; having to handle (), etc. Other related questions: ## Sandbox questions • Is the TIO link enough for the reference solution, or should I put the code in the actual post? • Is there any existing question that's close enough to be a duplicate? • Which makes a better challenge: 1) input is a single expression on a single line, or 2) input is one or more expressions, each on its own line? #1 is the way it's currently written, and makes the challenge simpler; #2 would be more generally useful. ## The Challenge The goal is to write a complete program that prints out every possible tetris block made up of #. The blocks must have an equal chance of printing in any order and must appear exactly once each. The blocks may have any rotation, rotation may be consistent between executions. No two blocks can be touching. All blocks must have settled on the "floor". ValidExample.exe # # ## ### ## ## # # ## # #### ## ## ## ## TouchingExample.exe # # # ## ## #### # # ## ## ## # # ## # ## ## FloatingExample.exe # # ## ### ## ## # # #### ## # # # ### ###  Use the language of your choice, lowest number of bytes wins ## Questions • Is the wording clear enough? • Does the challenge meet the expectations for a challenge here? • What can I do to remove any ambiguity if there is any? • Is the formatting for the question / examples ok? • Would the challenge be "better" if the blocks had to be made up of their corresponding letter (IOJLZST) • This could be a dupe of codegolf.stackexchange.com/questions/2223/polyomino-generator – Sok Mar 21 '18 at 9:22 • @someone is the new wording better? Replaced random order with a requirement that each order have equal odds. – Southpaw Mar 21 '18 at 10:02 • I think it is. I don't think the blocks-made-of-letters is a good idea. – my pronoun is monicareinstate Mar 21 '18 at 10:04 • @Sok No input, random order, only tetrominos, no floating restriction. Those seem to be the main differences. Are they enough to distinguish it? – Southpaw Mar 21 '18 at 10:05 # Euler's Formula for the Quaternions Euler's famous formula, e^iθ = cosθ + isinθ, can be used to calculate the exponential of arbitrary complex numbers: e^(a+ib) = e^a(cosb + isinb). That's cool and all, but what if we want to go even further? The quaternions are an expansion of the complex numbers, where instead of just having i*i = -1, you have i*i = j*j = k*k = i*j*k = -1. Quaternions can be represented as a + bi + cj + dk or (s, v) where s is a scalar and v is a 3-Dimensional vector. Euler's formula can be extended to the quaternions; for an arbitrary quaternion q = (s, v), e^q = e^s (cos|v|, (v/|v|)sin|v|), or, if q = a + bi + cj + dk and r = sqrt(b^2 + c^2 + d^2), e^q = e^a (cosr + (bi + cj + dk)(sinr)/r). ### The task: Write a program or function to exponentiate arbitrary quaternions. Built-ins are allowed. You may represent a quaternion in any sane manner. ### Examples Here, quaternions are represented as a four element array. Input Output (approximately) 0 3.14159 0 0 -1 0 1 1 1 -0.160557 0.56986 0.56986 0.56986 1 2 3 4 1.69392 -0.78956 -1.18434 -1.57912 0.095767 0.601479 0.285658 0.926716 0.458433 0.527339 0.250447 0.812487 -0.654682 -0.925557 -0.409382 0.619391 0.194782 -0.37576 -0.166202 0.251462  • There's a missing ) in e^q = e^a (cosr + (bi + cj + dk)(sinr)/r – Peter Taylor Mar 23 '18 at 21:53 # Brainfuck Compiler! Your goal is simple: Compile brainfuck to x86 assembly (NASM style), and do it with as small of a program as possible. You will be able to choose your compiler's input and output model, as long as the input is brainfuck code and the output is NASM style x86 assembly. The brainfuck code should read from STDIN and output to STDOUT Your compiler must be fully compliant with no extensions, and must support a infinite (to the max the computer's memory can sustain, running out of space on either end can be treated as a crash.) number of unsigned 8 bit cells both forward and back, with the tape Your output assembly should provide the exact same outputs for the corresponding inputs as the brainfuck code. Your program's output must be compilable to a ELF binary that runs on Linux using the NASM compiler. Your program will be linked with libc, so you can use any function in the C library. ### What is Brainfuck? Brainfuck is a language with 8 instructions, and a tape memory model composed of an infinite amount of unsigned 8 bit (1 byte) cells. The pointer always points to one of those cells, executing its operations on the current cell. Each instruction is executed one at a time, and are as follows: • + Increment the current value under the pointer • - Decrement the current value under the pointer • . Output the value under the pointer as an ASCII character • , Get a character from input, and wait until one is received. • > Move the pointer to the right • < Move the pointer to the left • [ Jump to the matching ] if the value under the pointer is 0 • ] Jump to the matching [ if the value under the pointer is not 0 If a [ doesn't have a matching ] (or vice versa), you can consider that undefined behavior. Anything not listed here should be considered a NOP, or in the case of a empty program (EOF), simply a blank, noncrashing program. ### Test cases. To allow competition, and varying compilation results, my test cases will show what each test program should output. Program: "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."  Outputs (no input): "Hello, World!"  Program: +[,.]  Outputs: "I am a test string" -> "I am a test string" "Golfing is fun!" -> "Golfing is fun!"  Program: +[]  Outputs: Nothing. This program loops forever. Program: +[<+]  Outputs: This program can be considered undefined behavior, because it will eventually run out of memory. ### TODO More test cases? • is the tape left bounded? also you should specify input behaviour on EOF – Destructible Lemon Mar 26 '18 at 22:05 • "to the max the computer's memory can sustain" -- I feel that requirement quite problematic. For example, a submission using 16-bit cell (and only use the lower 8-bit, for whatever reason) will only be able to handle half as many cells as one using 8-bit cell. – user202729 Mar 27 '18 at 0:55 • @user202729 I'd say a submission like that would be rare enough it's a non issue. – moonheart08 Mar 27 '18 at 1:40 • @DestructibleLemon The tape is unbounded, both left and right. – moonheart08 Mar 27 '18 at 1:40 • For a doubly infinite tape, to the max the computer's memory can sustain definitely needs more clarification. For example, if I "run out of space" on the right end, but still have space on the left one, do I need to shift things around? – Dennis Mar 27 '18 at 1:42 • Alright. I'll fix that now. – moonheart08 Mar 27 '18 at 1:43 • I think it's better to use 1 side unbounded, as that's usually the convention i think – Destructible Lemon Mar 27 '18 at 2:02 # Interpret pseudocode Wikipedia says pseudocode is intended for human reading rather than machine reading. and A program in pseudocode is not an executable program. I don't care. Make a pseudocode interpreter that can run pseudocode that fits the rules described below*. This is based on the IB pseudocode guide, but it is simplified quite a bit to make it fit for the challenge. # Pseudocode specifications This is a simplified pseudocode to make the challenge less tedious. The pseudocode language has no strings, no arrays, no classes, no methods, and no variables other than integers. ## Basic syntax Comments that start at // and end at a newline (like java one-line comments). // is not necessarily followed by a space, and the comment may be empty. Example: A = 2 + 3 // I can't write five because my keyboard is broken  Statements are separated by newlines. Lines may be empty (without statements). The exact number of spaces doesn't matter, and spaces are not required. The language is case sensitive. ## Variables All variables are global, and can be accessed anywhere. They do not need to be declared. To keep things simple, all variables can be assumed to be integers. All variable names are UPPERCASE, and consist only of letters. Your program should at least handle integers from -256 to 256. A wider range is not a requirement. Variables are assigned values using this syntax: VARIABLE = Expression  Where VARIABLE can be any uppercase name and expression can be any integer expression, as discussed below. Examples: A = 5 B = A + 3 NUMBER = A * B  ## Expressions An expression can be: • An integer, like 42 • A variable, like NUMBER • A binary operation on two other expressions, like NUMBER + 5. There are only four operations: +, -, *, /. Division rounds integers down. Expressions can be surrounded by parentheses to indicate that they need to be evaluated first. To keep things simple, all expressions are evaluated from left to right no matter what the operations are (unless there are parentheses that specify otherwise), so A = 2 - RM * 9 + 3 / NUMBER B = 1 + 2 * (3 - 4) / 6  is equivalent to A = (((2 - RM) * 9) + 3) / NUMBER B = ((1 + 2) * (3 - 4)) / 6  ## Boolean expressions Boolean expressions can compare two expressions using == (equality), != (not equal to), < (less than), and > (greater than). They are only used for control flow, as discussed below (there are no boolean variables). ## Control flow There are four types of control flow. They can be infinitely nested in all combinations. ### If if (booleanExpression) then // statements (discussed below) endif  ### If-else if (booleanExpression) then // statements (discussed below) else // other statements endif  ### Loop while loop while (booleanExpression) // do stuff endloop  Where booleanExpressions are boolean expressions. The ifs work the same as in normal programming languages. The while loop is a simple while loop. The booleanExpressions will always be surrounded by (). The pseudocode is very flexible with spaces, and any number of spaces is valid. ### Loop for loop VARIABLE from Expression1 to Expression2 // things to do over and over again end loop  Where Expression1 and Expression2 are expressions that are evaluated before the loop begins and their values are stored until the loop finishes. The content of the loop is executed for every integer from the result of Expression1 to that of Expression1, inclusive. At every iteration, the index variable (VARIABLE in this case) is updated. Example: loop I from 3 to 5 output(I) endloop  Outputs: 3 4 5  ## Statements ### Output output(Expression) outputs the evaluated expression. It's like println in programming languages. So: output(1+1)  prints 2, followed by a newline. output() with no arguments should print a newline. ### Other statements If the interpreter encounters any other statement that looks like a method call with no arguments, it should pretend it's executing it. For example, lightsoff() gohome()  should print (together with a newline): executing lightsoff executing gohome  In other words, executing [Method name] should be printed. All statements will be lowercase and will consist entirely of letters. Keywords cannot be statements. You do not have to deal with the following (it will not appear in the pseudocode): - if() - endif() - loop() - while() - etc. However, statements that start with keywords are valid. For example, loophole() should print executing loophole, even though loop() itself is not valid. # Challenge rules • Your program should take a string as input. It can also take something equivalent, like an array of characters. But you can't take an array of strings; your program must itself separate the lines and tokens. You can also take a file as input. • Your program should print the output of the pseudocode in any reasonable form. • No standard loopholes. • There are no restrictions on what your program should do when given invalid pseudocode. • This is code golf. The shortest code in bytes wins. # Example output # 1 A = 3 output(A) // prints 3 B = 4 + A * 2 output(B) helloworld() output(A + B + 1 * 3)  Should give: 3 14 executing helloworld 54  # 2 loop NUM from 2 to 20 // cycle through possible prime numbers COUNT = 0 loop DIV from 2 to NUM // cycle through possible divisors if(NUM/DIV*DIV == NUM) then // if the number is exactly divisible COUNT = COUNT + 1 endif endloop if (COUNT == 2) then // if number is prime output(NUM) endif endloop  Should give: 2 3 5 7 11 13 17 19  # 3 Tricky cases that your interpreter should handle: // empty comment: // // empty line: // more comment testing // /// //// if (3<4) then endoftheworld() // a statement ifff() endifnot() // endif in a comment doesn't count endif // loops can be empty: loop I from 0 to 10 endloop output(I) // variables are global if(1<2) if(3<4) // nesting is ok ok() endif endif // spacing doesn't matter: output (2+ 8 - 1 ) loop while(2<1) neverhappened() endloop  Should output: executing endoftheworld executing ifff executing endifnot 10 excecuting ok 9  *Technically, once pseudocode follows rules as strict as those described here, it is arguably not pseudocode anymore. Wikipedia says it's called skeleton code. Any suggestions? I double-checked all the specifications, but if anything seems reasonably unclear, please let me know. • Actually that's because the challenge is uninteresting. – Akangka May 3 '18 at 2:11 • @Akangka thanks for the feedback. How do you think it could be made more interesting? – Reinis Mazeiks May 3 '18 at 16:47 • Unfortunately, there is nothing to improve. You have to find other challenge. Also, it is not pseudo-code. – Akangka May 4 '18 at 3:03 • @Ok, thanks. I'll try to think of something. Also, read the *note. :) – Reinis Mazeiks May 5 '18 at 19:39 # Fill a virtual World Cup Sticker Album As the World Cup is due to kick off (pun intended), the inevitable sticker book comes along as well. According to this BBC article , at a cost of £0.80 for a pack of 5 and with a total of 682 stickers needed to complete the book it could cost up to £700 or more to fill, taking duplicates into account. Write the shortest program possible to • Buy a virtual pack of stickers (at 0.80 per pack), which will be 5 random numbers between 1 and 682 (or 0 and 681) • Repeat until all numbers have been picked at least once • Output how many packs were bought and a final cost. Output should be in the format "Bought number packets at cost of number" Sample un-golfed Python 2 code import random total = 682 remain = total cost = 0.8 spend = 0.0 packs = 0 got = [0 for i in range(total)] while remain > 0: # buy a packet of stickers for i in range(5): got[random.randint(0,total-1)] += 1 spend += cost remain = got.count(0) packs += 1 print 'Bought %d packs at cost of %.2f' % (packs,spend)  Sample output Bought 865 packs at cost of 692.00  ## QUESTION • Writing the Python script for myself is what made me think of this question - does it help to include it, or clutter the page? (This is my first attempt at a question here) • You need to flesh out what we're doing? Your code isn't super greatly commented and I'm not sure how much a pack costs, how many packs are needed. etc. should it always output the same amount? – Rɪᴋᴇʀ Mar 29 '18 at 20:57 • What does "simulate" mean here? Beware the curse of the non-observable requirement. – Peter Taylor Mar 29 '18 at 22:28 # Navigate my Taxi ## Introduction Taxi is an esoteric programming language simulating a taxi. You can pick up passengers (values) and drop them at special places to modify them. For example, this program squares the input. The places are all in Townsburg: To travel from one place to another, you have to tell your taxi where to go: Go to the Post Office: west 1st left, 1st right, 1st left.  And you need gas to drive, your car gets 18 miles per gallon. So it's best to find the shortest possible way between two places. That leads me to ... ## The Challenge ### Input You get an incomplete Taxi program, consisting of the following statements: • Pickup a[nother] passenger going to [the] <place>.: Pickup a passenger, you may ignore it for this challenge • "<string>" is waiting at [the] Writer's Depot. / <number> is waiting at [the] Starchild Numerology.: Create passengers, you may ignore this, too • Go to [the] <place>.: Go to a place, you have to add directions (see below) • [<label>]: A label for jumping, you have to parse those to know where the taxi is. They don't do anything if passed. You can assume that you are in the same location, regardless of where you reach the label from. • Switch to plan "<label>".: Unconditional jump, follow these to know where the taxi is • Switch to plan "<label>" if no one is waiting.: Conditional jump, you have to support both ways If the input program contains anything else, you may do anything you want (undefined behaviour). ### Conversion Following all jumping instructions, you have to add directions to the Go to commands. It has to be the shortest possible way (I want to save gas!) Directions consist of a cardinal direction (north, east, south, west or NESW) and a comma-separated list of turns, consisting of a number (1st 2nd 3rd or 1 2 3) and left/L or right/R. Examples: Go to the Post Office: west 1st left, 1st right, 1st left. Go to Post Office: W 1 L, 1 R, 1 L. Go to Tom's Trims: N.  The cardinal directions do have the following meanings (xstart means x pos of the starting point, yend means y pos of the next corner/intersection/place): • north: ystart > yend • south: ystart < yend • west: xstart > xend • east: xstart < xend (Coordinates from the top left corner) Here is a list of all intersections/corners/places/streets, extracted from the interpreter. Some additional info: • The taxi starts at the Taxi Garage. • If the taxi reaches the Taxi Garage, the program ends. • If the program reaches its end and the taxi is not in the Taxi Garage, that's an error, so you'll have to add 'Go to the Taxi Garage: ...' at the end if it's missing. ### Output • Your program or function has to output a valid Taxi program (online interpreter) or a list of instructions (which, when concatenated, form a valid Taxi program) • You may use the long (north 1st left) or short (N 1 L) syntax. • The ways chosen have to be the shortest possible (droven distance, i.e. sum of Euclidian distances between any two consecutive points on your way) • If there are multiple equally long ways, you can use any of them ### Additional Rules • Standard loopholes are forbidden • Your score is the number of bytes in your program • Lowest score wins ### Test Cases TODO • Is any part of the specs confusing? • Should I not input a full program, but just start and destination? • Should I add the map in some format as an additional input? • Thanks for using the sandbox, but I'm sorry that it's not very active. We decided that "typical desktop computer" is not clear enough, so you should change it. – user202729 Feb 24 '18 at 14:54 • What is "shortest" measured in? Euclidean distance? What if there are multiple equally long paths? – user202729 Feb 24 '18 at 15:09 • @user202729 Edit: time is now on TIO, distance is sum of Euclidian distances between any two consecutive points on the way. I'm thinking about writing a program that calculates the distance – wastl Feb 24 '18 at 16:37 • TIO is still not usable for time-related things. See codegolf.meta.stackexchange.com/questions/12707/… . – user202729 Feb 24 '18 at 16:39 • Is it guaranteed that the taxi will be in the same location regardless of how we reach a label? – Nitrodon Feb 24 '18 at 17:08 • @user202729 Ok, removed time limit – wastl Feb 24 '18 at 17:09 • @Nitrodon finally, I got what you meant. Sure. Although theoretically, if both points lie on one street, one could do that ... (I would not recommend it) – wastl Mar 16 '18 at 23:02 # Left Turn at Euqreuqebla Write a quine, according to the standard definition of a quine, that outputs itself when executed. However, when your code is reversed it should output each character of your source code separated by a newline instead. # Example If your program was: ABCDEFGH IJKLMNOP  The unedited program should output: ABCDEFGH IJKLMNOP  However the reverse of the program should output: A B C D E F G H I J K L M N O P  # Rules: • Outputting a single trailing or preceding newline is acceptable. • If your code contains newlines, they do not require rotation, treat them regularly. • Standard loopholes are disallowed. • Ensure that your "quine" is actually a quine. • This is , ; lowest byte-count wins. • an example with code with newlines would be useful (as those I'd naturally rotate 90 degrees :p) – dzaima Mar 29 '18 at 21:04 • @dzaima which way do you think is better, not requiring "natural rotation" to support Java and the like better? Or supporting natural rotation for the esolangs? – Magic Octopus Urn Mar 29 '18 at 21:07 • a thing to consider is that if natural rotation would be required, everyone would just try to keep everything in a single line to make the challenge way easier – dzaima Mar 29 '18 at 21:10 • @dzaima I could make it optional? I don't see that hurting the challenge too much either way to be honest, it just lets languages to what they do best. – Magic Octopus Urn Mar 29 '18 at 21:11 • that'd be a good compromise if there's no better solution – dzaima Mar 29 '18 at 21:12 • @dzaima ehhh? decent? – Magic Octopus Urn Mar 29 '18 at 21:17 • usually it's bad to have multiple ways to solve the challenge, though here it's pretty easy to tell which method's gonna be the easiest – dzaima Mar 29 '18 at 21:18 • @dzaima exactly, that's why I want to allow it to see if SOGL or some other language with crazy flipping commands can do this the "harder" way. – Magic Octopus Urn Mar 29 '18 at 21:19 • If you're going for Albuquerque spelled backwards, that's not how it's spelled. – AdmBorkBork Mar 30 '18 at 13:25 • Shouldn't the example have a gap of three newlines between the H and the I, not two? – Aidan F. Pierce Apr 1 '18 at 0:00 • @AidanF.Pierce great catch. – Magic Octopus Urn Apr 2 '18 at 11:50 # Common Logic Gates Given positive integer n, make a common n-to-1 gate with fewest input, i.e. make a function f: {0,1}k ↦ {0,1} with smallest k that, for each function g: {0,1}n ↦ {0,1}, there exists {ak}, such that each element ai in the sequence map to one of 0, 1, x1, x2, x3, ..., xn, satisfying that, for each {xn}, g(x1, x2, x3, ..., xn) = f(a1, a2, a3, ..., an). Samples: To make a common 1-to-1 gate, your circuit must take at least 2 input: f(A,B) = A XOR B  For a buffer gate (g = x1 ↦ x1), let A=0 and B=Input (a1 = 0, a2 = x1); for a not gate (g = x1 ↦ ¬x1) , let A=1 and B=Input (a1 = 1, a2 = x1). Alternatively, you can use f(A,B) = A AND NOT B. For a buffer gate, let B=0 and A=Input; for a not gate, let A=1 and B=Input. To make a common 2-to-1 gate, the circuit must take at least 4 input bits: (The two inputs are represented as a and b) f(A,B,C,D) = ((A AND B) OR (C AND NOT B)) XOR D (ab) 00 01 10 11 A B C D 0 0 0 1 a b 0 0 0 0 1 0 0 b a 0 0 1 1 0 a a a b 0 1 1 1 1 b a 0 1 0 0 0 1 b a 1 1 0 0 1 0 a 1 b 1 1 0 1 0 b a 1 1 1 1 0 a b 0 1  Output can be an boolean expression with reasonable logic gates, or just the output corresponding to all possible input of the n-to-1 function f (the truth table of f). If there are more than one possible functions, you can output any of them. Shortest code in bytes win. Code that matches the requirement: function solve(n) { // n positive int var res = [], tmp=[], inmap=[], need=[]; for (var i=1; ; i++) { for (var _res=0; _res<2**(2**i); _res++) { var valid = 1; for (var j=0; j<2**i; j++) tmp[j] = Math.floor(_res/2**j)%2; for (var _need=0; _need<2**(2**n); _need++) { for (var j=0; j<2**n; j++) need[j] = Math.floor(_need/2**j)%2; var valid2 = 0; for (var _inmap=0; _inmap<(n+2)**i; _inmap++) { var valid3 = 1; for (var j=0; j<i; j++) inmap[j] = Math.floor(_inmap/(n+2)**j)%(n+2) - 1; for (var j=0; j<2**n; j++) { var bits = 0; for (var k=0; k<i; k++) { if (inmap[k]==-1 || (inmap[k] && (j>>(inmap[k]-1))%2)) bits |= 1 << k; } if (tmp[bits] != need[j]) valid3 = 0; } valid2 |= valid3; } if (!valid2) valid = 0; } if (valid) res.push (tmp.slice()); } if (res.length) return res[AnyNonNegativeIntegerLessThan(res.length)]; // binary index input } } function AnyNonNegativeIntegerLessThan(x) { if(R>=x) throw ("end"); return R;} for (R=0; ; R++) { console.log (solve(1)); } • You don't define what an n-to-1 gate is anywhere in your question. – Post Rock Garf Hunter Mar 27 '18 at 1:00 • @user202729 @user56656 n-to-1 gate means a gate with n input and 1 output. common n-to-1 logic gate mean a logic gate that can be used to replace any n-to-1 gate with some proper wiring. You can treat a logic gate as a ROM(so you can decide for each input what the output is) – l4m2 Mar 27 '18 at 1:15 • Output gates or ROM – l4m2 Mar 27 '18 at 1:25 • You should put the definitions in the challenge. "that can be used to replace any n-to-1 gate with some proper wiring" is still not very clear, you should define more carefully what you mean by proper wiring. – Post Rock Garf Hunter Mar 27 '18 at 3:22 • I assume you mean functions g: {0,1}^n -> {0,1}, right? Why do you specify x_0 and x_-1? Shouldn't x just be a vector with indices 1,2,3,...,n? – flawr Mar 27 '18 at 14:07 • Is {a_k} just a subset of {1,2,3,...,n}? Or can we have a_1=a_2=a_3=1 for example? – flawr Mar 27 '18 at 14:09 • {a_k} seems not a multiset. It should be an array or say a sequence of numbers – l4m2 Mar 27 '18 at 14:43 • So you're asking for something which outputs answers to codegolf.stackexchange.com/q/24983/194 ? – Peter Taylor Mar 28 '18 at 11:33 • @PeterTaylor No. it requires to use NAND gate to make up one circult that do the thing. Also 24983 is a 1-of-4 (74LS153), not a 4-to-1 gate common 2-to-1 – l4m2 Mar 28 '18 at 12:41 • (+) Any reason for downvoting? Downvoting in the sandbox indicates that the challenge is incomplete, if you don't leave a comment the OP can't know what is wrong. – user202729 Mar 29 '18 at 4:48 • @user202729, there are already comments indicating that this question is going to attract close votes as unclear if it's posted to main in the current state. – Peter Taylor Mar 29 '18 at 10:59 • @user56656 Are the issues fixed now? – user202729 Mar 31 '18 at 15:16 • @flawr Are the issues fixed now? – user202729 Mar 31 '18 at 15:16 • No I still think the explanation is quite bad and the notation is not very clear – flawr Mar 31 '18 at 16:15 • A reference implementation is no substitute for a clear specification. The first paragraph is where you need to focus your efforts. – Peter Taylor Mar 31 '18 at 19:32 # Radioactive Quine Sums Related: Radioactive Quines ## Challenge Write a program that takes an integer as input and.... 1. When the program is run it outputs the input. 2. When you split the program in half, each sub-program should take as input the output of the original program, and output a number. The sum of the two numbers should equal the output of the original program. 3. Repeat the procedure with each valid sub-program. Your score is byte count/[valid programs]2 (lowest score wins). ## Specs 1. When you split an odd-length program in half, the program on the left gets the extra character. 2. For a sub-program to be valid, the sum of its output and its pair's output must be the input, for every possible input n, -100≤n≤100. 3. A sub-program that doesn't compile/doesn't output a number is invalid (along with its pair). 4. If a program is invalid, it can't be split further. 5. A program that outputs "0" for more than one input can't be split further. ## Testcases Pseudo-langauge: A adds a 0 to the stack, Q adds the input to the stack. - negates the element to the right of it.The output is the sum of the stack elements. 1. Q Score: 1/1 = 1 2. AQ Score: 2/3² = .222 (AQ -> input, A + Q -> 0 + input) 3. AAQ Score: 3/3² = .333 (AAQ -> input, AA + Q -> 0 + input) [Since the output of AA is 0, you can't split it any further] 4. QAA Score: 3/5² = .12 (QAA-> input, QA + A -> input + 0, Q+A -> input +0) [Since QA -> input, Q and A are valid sub-programs, since the sum of their outputs equals the output of QA.] 5. QAQ Score: Infinity [Since QAQ outputs 2*input, it is invalid and can't be split further.] 6. QQ-Q Score: 4/5² = .16 (QQ-Q -> input+input-input,QQ+-Q -> (input+input)+(-input), Q+Q->input+input, -+Q->error) [Q and Q are valid subprograms of QQ because the sum of their outputs is 2*input, which is the output of QQ.] Feedback Appreciated • 0=0+0=(-1)+1, why can't it be splitted further? – user202729 Apr 2 '18 at 6:38 • @user202729 because someone would just leave it always zero – l4m2 Apr 2 '18 at 15:30 • However I still think score->0 solution exist, so – l4m2 Apr 2 '18 at 15:31 • For 0=(-1)+1: Language W=output the input 0=output zero Q=quit WQ0Q0Q0Q0Q0Q0Q0Q has low score – l4m2 Apr 2 '18 at 15:33 • @l4m2 and user202729 look at rule 5 in Specs. – geokavel Apr 2 '18 at 17:01 • @geokavel we know the rule, just analysing whether they are good here – l4m2 Apr 2 '18 at 17:03 • @l4m2 yeah, i see your point about WQ0Q0.... scaling infinitely. – geokavel Apr 2 '18 at 17:04 # Heroes of Might and Magic 0: A Numerical Boxing Match It's time to program a game! Well not a game, precisely. More of a stripped-down version of a game, without graphics or real-time input... or really much of anything. But it'll modify numbers on screen, and isn't that why we play games in the first place? ## To elaborate: If you're unfamiliar with the Heroes of Might and Magic franchise, here's the very most basic workings of the combat system: A stack of creatures of a single type (say, 2 green dragons or 1000 marksmen) will simultaneously attack another stack of creatures of a single type. Each creature does a specific amount of damage, and that's reflected in how many troops in the opposing stack die. For example, let's have 5 angels vs. 100 skeletons, and let's have the angels go first. If they hit 50 damage each, then 5*50 = 250 damage will be done to the skeletons. If the skeletons each have 10 health, then 250/10 = 25 skeletons will perish, leaving 75. Next, the skeletons attack. If the skeletons deal 2 damage each and angels have 100 health each, the skeletons will do 2*75 = 150 damage to the angels. But how can we kill 150/100 = 1.5 angels? What happens is that one angel will die, and then the remaining 150-100 = 50 damage is dealt to the top angel in the stack. This angel will be the first to receive damage on the next round and will only require 100-50 = 50 damage to die, but can still deal damage like normal in the meanwhile. Then angels attack skeletons, skeletons attack angels, angels attack skeletons... repeat until only one stack of creatures remains! There are loads of other mechanics involved in actual combat, but the fundamental one is attacking, and that's what you'll be programming today. ## Technical Specification Two stacks of monsters will be attacking each other. Each of these stacks has three properties: 1. Size, positive integer. This is how many total monsters are in the stack. 2. Health, positive integer. This is how much damage is needed to kill ONE. 3. Damage, positive integer. This is how much damage EACH monster in the stack will deal. When a stack of monsters A attacks a stack of monsters B, all of the monsters attack, dealing A_size * A_damage  total damage. This kills a total of floor(A_size * A_damage / B_health)  monsters in B. If the damage dealt isn't an even multiple of B_health, then the remaining (A_size * A_damage) - (B_health * floor(A_size * A_damage / B_health)) = (A_size * A_damage) % B_health  damage is dealt to the top monster in B, which will persist into the next round. ## Input You'll receive two groups of three numbers, each of which contains information about one stack of monsters: The total number, the health of each individual, and the damage dealt by each individual. [(A_size, A_health, A_damage), (B_size, B_health, B_damage)]  You can receive this as two lists/tuples/arrays of three, six separated values in a single line, or six newline-separated values. The first group of numbers represents the monster that attacks first. ## Output After the fight is finished, you must output the number of remaining troops in the winning stack. ## Examples Input: [(1000, 10, 2), (500, 15, 3)] Output: 763 Input [(1, 2, 3), (4, 5, 6)] Output: 4 Input [(100, 100, 1), (100, 100, 1)] Output: 10  Lowest byte count wins! # Feedback • Is the challenge clear? I feel like it's simple and maybe I'm being too verbose in explaining it, but maybe it isn't. • Are there any other good ways to accept input? • Does it seem like it'd make a fun challenge? If not, are there any changes I could make to make the challenge more interesting? • Anything else? Thanks everyone!! See all the blocks In a 3D coordinates, a block (a,b,c) takes the place of x<a<x+1, b<y<b+1, c<z<c+1. 1. Is there a point that can see every block? (Exist point P, For each block K exist point Q, segment PQ don't go across any block but K) 2. Is there a way that can see every block? (Exist non-zero vector w, For each block K exist point Q, for each positive number t, Q+wt is not in other blocks than K) Output four values to represent the four possibles. Shortest code in bytes win. • Although the challenge idea is good, we generally expect people to make the challenge reasonably-complete in the sandbox ("write your challenge just as you would when actually posting it"), and not just the ideas. (for example: what is the winning criteria?) – user202729 Apr 4 '18 at 6:55 • Also, it appears that there are 2 different challenges here that needs to be solved in very different ways. Consider having 2 different posts. – user202729 Apr 4 '18 at 6:56 Write a program that, in different languages, output a different permutation(the exact source is counted as one permutation) of the code. Proper quine rule apply. Largest (Language count)^6/(Code length) win. Sample: If your code is AAB and running in several languages return ABA, AAB, AAB, then its score is 2^6/3. • "Shuffle" implies randomness. I'm assuming that this isn't what you want: "Ordering" is a better term: You want a set of programs that output the same bytes, but in different orders. – Nathan Merrill Apr 7 '18 at 5:31 • Or "permutation". – user202729 Apr 7 '18 at 6:08 • Do the output need to be valid (executable) source code or it may be mess of reordered characters? – tsh Apr 8 '18 at 6:46 # The 3n+1 problem The legendary problem in UVa Online Judge, with over 775k submissions and over 85k people who solved it. I, personally, have solved it in many ways, even reaching the best time below 0.01 sec. Even though the problem is interesting from the algorithmic point of view, insofar as reasonable time constraints would be easily able to force people to think about some sane approach to caching and use data structures like the segment tree, it is actually not the case here: the time constraints, on UVa, are so lax that even a purely naive algorithm is accepted by the judge. Since we are on CodeGolf and not on a programming contest, we aim here to write shortest code, and not necessarily fastest one, so for most part you don't need to care about performance - that is, as long as it is not horrible even beyond the lax allowances of the online judge; more on that below. # The input The input will consist of several lines, each containing a pair of integers i and j, such that 0<i,j<1,000,000. # The output For each line of input, you are to print one line of output that will consist of integers i and j, in that order, followed by one number that will denote the maximum length of the Collatz sequence (also known as the 3n+1 sequence), over all numbers between and including i and j. Note that while in mathematics the terminal number 1 usually doesn't count to the length of the sequence, in this problem it does. The Collatz sequence is defined as follows: If an is odd, then an+1:=3*an+1; or, if an is even, then an+1:=an/2. The sequence ends when it reaches number 1. # Sample input (taken from UVa): 1 10 100 200 201 210 900 1000  # Sample output (taken from UVa): 1 10 20 100 200 125 201 210 89 900 1000 174  # Additional notes: • There is no guarantee that i<=j. The input may contain lines with i>j. However, even in these cases, you are supposed to print out i and j in the output in the correct order (that is, i comes before j, not min(i, j) before max(i, j). • There is a guarantee that, while computing the Collatz sequence terms, no term will overflow a 32bit integer. • As of now, the problem specification gives incorrect input boundaries, claiming that all numbers will be less than 10,000. The correct bound seems to be 1,000,000 instead, which is present in the archived version of the problem specification. Since last time I checked the judge required accepted programs to be able to process numbers up to 1,000,000, we retain that requirement in our problem. • Your program must perform actual computations. Hardcoding all sequence lengths for numbers between 1 and 1,000,000 is unacceptable. So is fetching them from external sources. • Your program must read from standard input and write to standard output. Your program must format its output as required by UVa Online Judge for this program. • Of course, we do not retain the original harsh requirements on acceptable programming languages. Any programming language is OK as long as it doesn't violate the standard loopholes. • Your program must correctly process all lines until EOF and then exit gracefully. Your program must not wait endlessly on EOF, enter an infinite loop on EOF, crash on EOF, exit with an error, etc. • Performance restrictions: • Basically, the intention is to allow everything but most horribly underperforming programs. • To be more specific, the naive algorithm that, for each line of input, computes once the whole sequence for each number in the required range is allowed (example of an allowed program). It is also allowed to keep an array caching lengths of all sequences starting with numbers from 1 to 1,000,000 (example of an allowed program), or to keep a dictionary caching lengths of all sequences starting with any encoutered numbers so far (example of an allowed program); however, it is not allowed to keep an array caching all encountered lengths, since that array would be unreasonably sparce and thus unreasonably large (example of a disallowed program); it is also not allowed to precompute a 1,000,000x1,000,000 array that would keep all maximums of lengths in all valid ranges (example of a disallowed program). Your program may precompute lengths even for numbers that would otherwise be disallowed by the guarantee of not overflowing a 32bit integer (example of an allowed program), if you wish. Shortest code wins. • From a golfing perspective, this looks like basically the usual Collatz challenge, taking the max over an interval but with Cumbersome I/O and non-observable performance requirements. – xnor Apr 8 '18 at 7:03 • @xnor , I don't think these requirements are non-observable, my intention was to disallow everything the judge disallows without imposing the programming language restrictions; anyway; a 1,000,000x1,000,000 array of integers is around 3.5TB!! - I think disallowing this makes sense? Basically my intention was to prevent saying that "In a computer with unlimited resources this program would complete and is therefore valid". If I want to disallow this, am I supposed to rather prepare my own test case and run the program on my computer to see if it fits in reasonable time/space requirements? – gaazkam Apr 8 '18 at 12:56 • I think I'm not understanding the restrictions then -- is what you intend is just a hard bound on run-time and memory, and the types of programs that work are just examples? Regardless though, I expect it not to matter as golfed programs will just compute the whole sequence for each number in the range, which you allow. All the optimizations seem like they'd take more characters. – xnor Apr 8 '18 at 23:45 • ... yes, to have such requirements you have to run it yourself (or ask someone to do this for you) Although, if as you said (almost every algorithm) are allowed, what's the point in having another challenge? I would call this a dupe. – user202729 Apr 9 '18 at 15:13 • One more point: If there exists a programming language where hardcoding 10⁶ terms is shorter than computing them, you should reconsider the challenge. – user202729 Apr 9 '18 at 15:14 # Is the program 32 or 64 bits? Assignment is simple to explain: write the shortest code you need to determine whether an executable binary program supplied as parameter is 32 or 64 bits. If there is a different kind of bitness, you can also do for it, but is not mandatory. What I really don't want is telling me you support other bitnesses and after I get 32 or 64 as a result. Valid outputs for 32: 32 32bit 32bits 32 bit 32 bits  The same pattern for 64. No accepted answer. • I think you're missing a word somewhere in the region of "determine supplied" – Kamil Drakari Apr 4 '18 at 19:43 • @KamilDrakari thanks. – sergiol Apr 4 '18 at 19:53 • Executable on Windows or Linux machine? What if (... maybe ...) the program is a valid executable for both "bitness" but do different things? – user202729 Apr 5 '18 at 1:30 • Of the output formats you allow, I think the first one will result in the shortest code in every single language. Because of this, you might as well just specify that the output should be the number 32 or the number 64. – Nathaniel Apr 5 '18 at 8:03 • This made me wonder what to do about shell scripts, which are executable programs, but require another file to interpret them and as such aren't 32-bit or 64-bit per se. Maybe it would be best to specify "executable binary file" to not have to deal with that mess. – Angs Apr 5 '18 at 11:22 • @Angs: Thanks. Changed. – sergiol Apr 5 '18 at 11:27 • @user202729: I don't care. Windows, Linux, Mac, whatever, ... – sergiol Apr 5 '18 at 11:28 • @Nathaniel: It is intentional. If you have a language feature called bitness(program) returning 32bits you do not need to waste more bytes removing the bits part! – sergiol Apr 5 '18 at 11:30 • The word "challenge" is not really true, at least for ELF. It's absolutely trivial. – Peter Taylor Apr 6 '18 at 20:20 • @PeterTaylor : Changed, thanks. – sergiol Apr 6 '18 at 21:20 • The real "challenge" is to know the executable file format, so this becomes more of a puzzle than a challenge. And for puzzles, people can just copy others' solution and port to other languages. // Consider having some popular file format in the challenge itself so people don't have to look up them? – user202729 Apr 7 '18 at 11:19 • @user202729: My initial idea was to ask only for Windows .exe files but I changed my mind because it was too limiting. Without such restrictions the question becomes multi-platform. – sergiol Apr 7 '18 at 11:38 # ___ encrypting Given two text a and b, both contain only lowercase letters 1. Write each charactor in a into 5 digits of binary (a => 00001, z => 11010) 2. Write each charactor in b where such place of the binary list is 1 is written into a different style (uppercase, bold, etc., but should be consistant) 3. If some char remain in b, either keep them all in the 0 style or remove them. You can assume b has enough chars. Sample: a = cat, b = programmingpuzzlescodegolf 1. Write a into binary 000110000110100 2. So the output can be proGRammiNGpUzz, proGRammiNGpUzzlescodegolf, programmingpuzzlescodegolf, etc. • You should probably mention a specific win condition. – Nissa Apr 10 '18 at 13:07 # A Magic Ritual Given an input string N perform a sequence of steps. 1. Delete all spaces from the string. 2. Delete all other occurrences that come after the first one of the same letter from the string. 3. If the string contains the letters needed for zero, delete these letters and add the corresponding digit 0 to the end of the string. Repeat this for 0 to 9. 4. Order the characters left in the string by the alphabet, then by their numeric values. ## Input May be received as a string, an array of characters or any other reasonable input for text. You may assume that the input will only consist of characters including a-z (lowercase) and spaces. ## Output Same as input, or may be directly written to stdout. ## Rules • This is , the shortest code in terms of bytecount wins. • Standard loopholes are forbidden. ## Test Cases a magic ritual -> acgilmrtu sixone -> 16 codegolf -> cdefglo the quick brown fox jumps over the lazy dog -> abcdfghjklmnpqtuvwy06 qwertyuiopasdfghjklzxcvbnm -> abcdfghjklmnpqtuvwy06  • Do second occurrences include 3rd 4th etc? – l4m2 Apr 10 '18 at 8:14 • @l4m2 Yes, I'll clarify. – Ian H. Apr 10 '18 at 8:15 # Count the Matches Given a stripped-down regular expression, estimate (rules below) the number of lower-ASCII-only strings that it matches fully (meaning it matches the whole string). You should handle the following: • Literals/sequencing • Vertical bars ...|... • Groups (...) or (?:...) • Special characters escaped with a preceding \ • Character classes [...] • Complemented classes [^...] • The standard classes ., \d, \w, \s, \D, \W, and \S • The escape sequences \f, \n, \r, \t, and \xhh • The quantifiers ?, {x}, and {a,b} # Estimation Rules ## Literals Literals, obviously, match only one string. aaaaa --> 1  ## Classes The estimate for a class is the number of characters that it can match. If multiple are seen, then their individual counts can be multiplied. There are also the standard classes: \d is [0-9], \w is [_A-Za-z\d], and \s is [ \n\t\r]. \D, \W, and \S are the complements of their lowercase versions. a.b --> 127 \D --> 118 [a-gd-k] --> 11 [^\w$A] --> 64
[abc][xyz] --> 9
\d\d\d --> 1000


## Switches

Switches (vertical bars) should be estimated as the sum of the component expressions.

a|a --> 2
a|b --> 2
(0|1)[01] --> 4
0|1[01] --> 3
optional| --> 2


## Quantifiers

With a static quantifier, you can treat it as a power function. With a variable quantifier, you can use the geometric sequence formula to get the estimate:

a1 is the first term, in this case the estimate at the lower bound. r is the common ratio, for which you should use the estimate for the group quantified. n is the number of terms, which is the upper bound minus lower bound plus one for the quantifier.

[01]{10} --> 1024
.? --> 128
[01]{3,10} --> 2040
0|[12]{3} --> 9
(0|[12]){3} --> 27
\d{30,40} --> 99999999999000000000000000000000000000000
(?:a{2,3}){2,3} --> 12


Shortest code in bytes wins.

• The examples require support for sequencing, which is not listed as something which must be supported. The standard classes with upper case are not explained. (?:...) is mis-labelled: it's a non-capturing group. – Peter Taylor Apr 12 '18 at 10:49
• Also what's the charset? 0-127? – l4m2 Apr 12 '18 at 14:49
• @l4m2 it's lower ASCII, so yes. – Nissa Apr 12 '18 at 15:54
• ASCII sometimes onlt mean 32-126 though – l4m2 Apr 12 '18 at 17:19
• @l4m2 that's printable ascii. – Nissa Apr 12 '18 at 17:27

# Tell SMILES from FROWNS

The Simplified Molecular-Input Line-Entry System file format is used to store structures of organic molecules. For information on why there is an actual file format called "smiles", consult this comic from PhD Comics. As a summary of the format:

• Start the file with a root chain of atoms.
• Put each branch group in parentheses after the atom it connects to.
• Use = for a double bond and # for a triple bond.
• Break aromatic rings and number the bonds broken; add those numbers after the atoms bordering them.
• Put metal atoms and any ions in square brackets.
• Omit hydrogens attached to carbons. Their presence is assumed.

For example, 1-chloro-3-ethylbenzene could be C=1(CC)C=CC(Cl)=CC=1.

# Challenge

Let's make a new acronym, FROWNS: Fraudulent, Ridiculous, Overbonded, Wacked, or Nonexistent SMILES. Basically, a SMILES string is a FROWNS string if any of the following apply:

• A loop is unclosed or closed twice.
• An atom from period 2 (Li, Be, B, C, N, O, F, Ne) has more than 4 total bonds.
• A neutral nitrogen atom has 4 total bonds.
• An oxygen atom has more than 2 difference of bonds - charge.
• A fluorine atom has anything other than exactly 1 bond.
• Noble gasses other than xenon are bonded.

Your program should determine whether a given SMILES string is a FROWNS string.

Here are some examples of FROWNS:

C1=CC=CC=C
CC(C)(C)(C)C
C1=CC=CC=C1C=CN1
C#C#C
C=N=C
CC#O
OFO
FKr(F)(F)(F)(F)F
FXeF(F)(F)


These, however, are not FROWNS:

C1=CC=CC=C1
CC(C)(C)C
C12=CC=CC=C1C=CN2
C#C
C[N-]C
CC=O
OClO
FXe(F)(F)(F)(F)F
Xe(F)(F)(F)(F)


May the shortest code win.

• SMILES is a relatively complicated format, so it might be a good idea to define your own subset of it and set it out in the question, so that people don't have to worry about whether they have to implement aromatic bonds or stereochemistry or what have you – Nathaniel Apr 13 '18 at 15:53
• @Nathaniel my subset called FROWNS is somewhat strictly defined, so that shouldn't be a problem. – Nissa Apr 13 '18 at 17:50
• I don't think it's well defined enough. Is F/N=N/F a FROWNS string, for example? Technically yes, because it is a SMILES string containing an N with 4 bonds. But do you really need people to support stereochemistry for this challenge? I don't think you do, which is why I suggest you define your own subset of SMILES instead of relying on the relatively complex standard. This will also have the advantage that people won't need to understand organic chemistry to compete in the challenge. – Nathaniel Apr 15 '18 at 4:29

## Rock, Paper, Scissors, Load, Shoot, Block, Mirror, Plasma-shot, Ammo-block, Punch, Bazooka, Super load, and so on and so forth

This is an abomination of a challenge. Two bots are fighting to the death, but the rules keep changing.

Each turn both bots have the same set of 3 random actions from this list as their input:

L - Load. Gives you 1 ammo.

S - Shoot. Costs 1 ammo, you win.

B - Block. Prevents the opponent from winning this turn

P - Paper. If your opponent chooses the first option in the list, you win.

C - Scissors. If your opponent chooses the second option in the list, you win.

R - Rock. If your opponent chooses the third option in the list, you win.

H - Punch. You win.

A - Plasma. Costs 2 ammo, you win

O - Ammo Block. Costs 1 ammo, prevent the opponent from winning this turn

Z - Bazooka. Costs 3 ammo, you win. This cannot be blocked.

E - Ammo Paper. Costs 1 ammo, if your opponent chooses the first option in the list, you win.

X - Ammo Scissors. Costs 1 ammo, if your opponent chooses the second option in the list, you win.

K - Ammo Rock. Costs 1 ammo, if your opponent chooses the third option in the list, you win.

U - Super Load. Gives you 2 ammo.

D - Defeat. Instantly Lose.

I - Strike. Prevent your opponent from winning. If your opponent wasn't trying to win, you win.

N - Nothing. Does nothing.

W - Wild. Allows you to do anything.

T - Take. Take 1 ammo from your opponent.

G - Gloat. Win if you have more ammo than your opponent

J - Joker. Does a random action.

Q - Quintuple Load. Gives you 5 ammo.

Y - Lucky. 50/50 chance of winning or losing.

V - Victory. Win the game, unblockable.

Each bot must choose 1 action to do. Actions happen simultaneously, and if two players win at the same time, then the player who spent more ammo to win is the winner (So a Punch would lose to a Plasma).

### NOTES

Each bot is played 1000 times against every other bot. The winner is the bot with the most total wins.

The 3 actions are selected before each turn. Actions can appear multiple times ("PPB" is possible).

Your bot can see what the opponent did, the set of actions available, ammo counts, and move histories.

If you don't have enough ammo, then your action is treated as an N.

If you choose an invalid action, then you lose.

• Some things to consider: Do bots start with no ammo? This could be a problem if the first round picks only ammo moves. Why is nothing an option? Maybe nothing can be a "no move" pick to avoid forced suicide when no ammo is left. How do RPS work if the there are multiple options? Can bot 1 pick P1 and bot 2 pick P2, giving 2 the win? What is the difference between Joker and Wild? What is the point of an ammo-costing block? Currently doesn't seem to do anything. Mirror is likely to cause only draws since there's (hardly) any reason to pick anything else. Strike is similar. cont. – aoemica Apr 18 '18 at 6:30
• Do Lucky/Coin Flip (duplicate effect by the way) cause your opponent to win, or just you to not win? Load, super load, and take don't seem to be often worth a turn. Is there ever a reason to play defeat? I think you should focus a bit more on the core ammo preservation/more ammo beats less ammo theme. Personally I feel that right now there are too many unrelated/underpowered moves that water down the best aspects of this challenge. Going with an unweighted random pick, ammo consumption in moves seems way higher than ammo resupply allows. – aoemica Apr 18 '18 at 6:41
• And along with that pile of questions, welcome to the site! – aoemica Apr 18 '18 at 6:51
• If the only inputs are 3 of the differents actions, how are we able to know opponent informations ? – The random guy Apr 18 '18 at 7:32
• "if two players win at the same time, then the player who spent more ammo to win is the winner (So a Punch would lose to a Plasma)" but what if they both play the same 'winning' move? – Nathaniel Apr 18 '18 at 8:29
• @aoemica Yeah I kind of wrote them all down at 10 o clock trying to get one for every letter in the alphabet, so there were bound to be some mistakes. First of all, Joker does something random, while Wild means any action can be chosen (With "PBW" you can choose "M" because of the wild). Lucky can cause you to lose. I'm probably going to replace Coin Flip with Four Load, so you can get more ammo. Rock Paper and Scissors are based on the order. For example, "RNH" means that Rock would beat Punch. It's based on the order "RPS". I'm also going to remove the negative ammo thing. – JacksonMerg Apr 18 '18 at 13:00
• @aoemica About the Ammo block, it is pointless if you can do Block, but because the actions you can do are random, you might get Ammo block without Block. – JacksonMerg Apr 18 '18 at 13:04
• -1 This challenge has too much randomness, and requires the bot to understand all of those rules to be competitive. – Nathan Merrill Apr 18 '18 at 15:08
• What does "unblockable" mean? Is Mirror blocking? Strike? – Nathan Merrill Apr 18 '18 at 21:13
• This is too complicated. I suggest reducing it to the first 6 items on the list, which should all be available at all times. Or better yet, have the Rock/Paper/Scissors + load variants, shoot, and block – Beefster Apr 19 '18 at 18:53

Do other programming languages allow post-assignment, like R? Can you force it?

In many programming languages assignment works like this, where a value such as 5 is assigned to x.

int x = 5; // C++

x = 5 # etc ... // Python


But in R, you can do this (and this is the first I've ever heard of this):

5 -> x # where 5 is assigned to x in reverse order.


This has some advantages. You can do several operations and then save the results to a variable at the end, stopping the operations. As an example,

library(dplyr) # allows then (%>%) statements

(1:10) %>% square() %>% sum() -> y


where I define an array of numbers 1 to 10: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},

square each of those: {1^2, 2^2, 3^2, 4^2, 5^2, 6^2, 7^2, 8^2, 9^2 , 10^2},

sum up the sequence 1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 + 7^2, 8^2 + 9^2 + 10^2

and assign that sum of squares to variable y.

y holds a value of 385, matter of fact.

To do something like that, though I would have to define a square function:

square <- function(x){return(x * x)}


You assignment is to create a post-assignment overloaded operator like "->" which allows assignment like 5 -> x.

Bonus points if the overloaded assignment operator is variable type insensitive, working on numbers, characters, strings, etc ...

• This will need an objective winning criterion. – Nathaniel Apr 25 '18 at 9:32
• It'll need to be more tightly specified as well? E.g. what precisely counts as 'a post-assignment overloaded operator like "->"' and what doesn't? Bear in mind that the concept of "overloaded operator" doesn't exist in a lot of languages. – Nathaniel Apr 25 '18 at 9:33
• I don't see the advantage in your example. C# can do var y = Enumerable.Range(1,10).Select(x => x*x).Sum() which seems to accomplish the same thing without needing post-assignment. – Kamil Drakari Apr 25 '18 at 16:12

# Go Fish!

"Go Fish" is a childhood card game where you try to obtain pairs by either drawing from the deck or taking them from the other players.

The rules can vary by who you ask, but the rules that this challenge will use are these:

• Everyone starts with a hand of five cards.
• Play goes in a circle.
• On your turn, you can call a card and another player.
• If that player has that card in their hand, then you get it from them.
• Otherwise, you draw a new card from the deck. If the deck is empty, you don't get anything.
• If you have two of the same card, then both are removed from your hand and set aside.
• The game lasts until the deck and all players' hands are empty, or until the deck is empty and there are no pairs made for 2 full circles.
• The winner is the player that ends with the most pairs.

There will be 20 rounds with every bot in them in random order. The winner will be the bot that gets the most cumulative matches across all rounds.

# The Deck

There will be 40 unique cards in the deck, each identified by a string. Each one will appear twice in the deck for each bot in play.

# Implementation

To do as soon as I finish the runner.

For the unique cards, I was thinking of doing a fish theme. Examples include:

• Water-type pokémon
• State fish for various states
• Commands, functions, or programs in ><> and *><>

Any other ideas?

• 1. "There will be 40 unique cards ... Each one will appear twice". If they appear twice, they're not unique. 2. This is missing important details about the tournament structure. How many bots per game? How many games will each bot participate in? What will determine the opponents? What are bots allowed to remember between games? Are there points for finishing second, third, etc? – Peter Taylor Apr 26 '18 at 13:47
• @PeterTaylor unique meaning different. – Nissa Apr 26 '18 at 14:01
• I'd recommend just using numbers to identify the cards, just to prevent bloating the challenge too much – Jo King Apr 27 '18 at 0:13

# PPCG Generalist Countdown

Write a function or program that takes no input and returns or outputs the current minimum number of new questions required for PPCG to hand out Generalist badges. Internet access is only allowed to the Stack Exchange API.

The badges are handed out when the top 40 tags (measured by question count) each have at least 200 questions.

Standard loopholes are disallowed. This is code-golf, so the shortest entry wins!

• You need to explicitly say what internet access is allowed, as accessing the internet is disallowed by default – Nathan Merrill Apr 30 '18 at 11:55
• I'm not sure this adds much beyond the 30+ stack-exchange-api questions we already have ... – AdmBorkBork Apr 30 '18 at 15:33
• @AdmBorkBork Perhaps try to solve it and see how hard it is to port? – user202729 May 2 '18 at 8:50

Building a Structured Outline

In a fictional document management system, input documents are structured with weighted headings. Lowest weighted headings are the most important.

This is a sample document:

H2 Kinds of Birds

H3 The Finch

H3 The Swan

H2 Habitats

H3 Wetlands

From this document we would like to produce an outline using nested ordered lists in HTML, which would look like this when rendered:

Kinds of Birds

The Finch

The Swan


Habitats

Wetlands


Your code only needs to take the input list and transform it into the expected data structure, which will be printed and checked against the expected output.

• What's the winning criteria? (did you know what does "winning criteria" mean? Read the on topic page of the help center) – user202729 May 1 '18 at 15:41
• 1. Are the blank lines in the sample document going to be in actual input, or are they just there to avoid the lines merging? (If the latter, ending a line with two spaces inserts a line break; and formatting as code using four spaces at the start of each line is a better option for sample input anyway). 2. Will all lines begin with H`, a number, and a space? 3. What is the range of possible numbers? 4. Does whitespace matter in the output? 5. When you say "expected data structure", does that mean that the output is something other than a string? – Peter Taylor May 1 '18 at 16:21
• 1. The child items are indented (as as result of parsing them as HTML later) 2. yes, exactly as in the sample input. 3. <h1> to <h6> 4. no, it will be parsed as HTML 5. yes, List – Tlink May 1 '18 at 16:44
• Unrelated to this challenge, but I've just created this Sandbox post based on your deleted Time challenge. Let me know if you want to post it yourself in 72 hours, since it was originally your challenge. If you don't want to post it anymore I'll post it myself (with your permission). Either is fine by me. :) – Kevin Cruijssen May 2 '18 at 9:50