568
\$\begingroup\$

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

Sandbox FAQ

Posting

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

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

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

Discussion

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

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

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

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

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

Other

Search the sandbox / Browse your pending proposals

The sandbox works best if you sort posts by active.

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

\$\endgroup\$
0

4487 Answers 4487

1
71 72
73
74 75
150
1
\$\begingroup\$

How Many Notches Are On Texas Red's Pistol?

The song, Big Iron, by Marty Robbins, is about an Arizona Ranger who rode into the town of Agua Fria to take the outlaw Texas Red alive (or maybe dead), armed with only the Big Iron (a .45 revolver) on his hip. Texas Red, despite being only 24 years old, is extremely dangerous, having already taken out 20 men who have tried to go after him. As a point of pride, he's carved out a notch on his pistol for each one. The song counts the notches on Texas Red's pistol as "one and nineteen more". After listening to the song a couple times, two questions crossed my mind:

  1. What about the other numbers that add up to twenty?
  2. What if the Ranger wasn't the 21st person to try?

The Challenge

Given a positive integer, N, the total notches on Texas Red's pistol, and another number A (also an positive integer), output a number B such that B + A = N. In the context of the song, it should read "A and B more".

The Catch

The song still has to be intact without sub-dividing any beats. That is, the number of syllables in the phrase "A and B more" must add up to 5. If it doesn't, output the string "oops". You may assume

  • 0 < A < N < 20
  • 1 < N

Examples

N   A   B (output)

20  1   19   ("One and nineteen more.")
19  2   oops ("Two and seventeen more" has 6 syllables)
11  7   4    ("Seven and four more.")

Syllable Counts

The numbers, from one to nineteen, have syllable counts as follows: one (1), two (1), three (1), four (1), five (1), six (1), seven (2), eight (1), nine (1), ten (1), eleven (3), twelve (1), thirteen (2), fourteen (2), fifteen (2), sixteen (2), seventeen (3), eighteen (2), and nineteen (2). No synonyms are accepted, such as "aught more" for "zero more".

Scoring

: Shortest code in bytes wins. Standard loopholes apply.


Meta Stuff:

I hope this is interesting enough. I thought just a normal subtraction problem would be too boring.

Is "oops" a good distinguishing output?

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

Show an integer, in digits of your choice

Input

A string representing digit characters, and a nonnegative integer.

How?

We shall show the integer in positional notation, where the string has the digit characters. Assuming the string is zero-indexed, the \$n\$th character shall represent \$n\$. The length of the string is the base.

For example, "0123456789" will show the integer in the standard decimal representation.

Rules

  • The string is assumed to have at least 2 characters.

  • Invalid inputs fall in don't care situation.

Examples

Beware of the zero!

Binary representation

Given "01" as the string:

$$ \begin{array}{c|c} 0 & “0” \\ 4 & “100” \\ 8 & “1000” \\ 15 & “1111” \\ 16 & “10000” \\ 23 & “10111” \\ 42 & “101010” \end{array} $$

Devanagari representation

Given "०१२३४५६७८९" (U+0966 – U+096F) as the string:

$$ \begin{array}{c|c} 0 & “०” \\ 4 & “४” \\ 8 & “८” \\ 15 & “१५” \\ 16 & “१६” \\ 23 & “२३” \\ 42 & “४२” \end{array} $$

Duodecimal representation

Given "0123456789↊↋" (The last two characters are U+218A and U+218B) as the string:

$$ \begin{array}{c|c} 0 & “0” \\ 4 & “4” \\ 8 & “8” \\ 15 & “13” \\ 16 & “14” \\ 23 & “1↋” \\ 42 & “36” \end{array} $$

Ungolfed solution

Haskell

showIntArb :: String -> Int -> ShowS
showIntArb "" _ = error "showIntArb: No given digit"
showIntArb (d:_) 0 = showChar d
showIntArb ds n = let
    appendDigit ints = if length ints <= n
        then appendDigit $ do
            d <- ds
            int <- ints
            return (d : int)
        else ints
    in showString (appendDigit (fmap return ds) !! n)
\$\endgroup\$
2
  • \$\begingroup\$ so this is a base encoding question, with symbol replacement, right? \$\endgroup\$
    – Razetime
    Sep 14, 2020 at 17:43
  • \$\begingroup\$ @Razetime Yes, exactly. \$\endgroup\$ Sep 14, 2020 at 22:51
1
\$\begingroup\$

Haiku Quine

A haiku is a type of poetry originating from Japan following a simple pattern: 5 syllables on the first line, 7 syllables on the second, and 5 syllables on the third. Traditionally, haikus also include some reference to nature or seasons, but we'll ignore tradition for the sake of this challenge.

Your task is to create a quine which has some reasonable pronunciation in the form of a haiku.

For example, consider this loophole-abusing (and thus non-competing) Python quine:

0+0
with open(__file__) as fp:
    print(fp.read())

To be read as:

ze-ro plus ze-ro
with o-pen file as F P
print F P dot read

Rules and Scoring

This is , so the shortest code wins.

  • Standard rules and banned loopholes apply
  • Include a reasonable haiku pronunciation alongside your code (yes, this is inherently subjective and open-ended)

NOTE: may be better as a

\$\endgroup\$
1
  • \$\begingroup\$ what's the standard for xxd output here? \$\endgroup\$
    – Razetime
    Sep 15, 2020 at 3:34
1
\$\begingroup\$

Convert A String To Shorthand

Shorthand has been used for hundreds of years to compress and speed up the speed at which someone can write down what is said.
It does this using several abbreviating methods; three of which will be used here to compress a sentence.

Challenge

When given a sentence, alongside a set of 'briefs', 'prefixes' and 'suffixes' (defined below), print or return the sentence in its compressed form.

Definitions

  • Brief: A word that can be entirely substituted by another string of characters.
    I.E. Would: D, Be: B, Able: Ab. "I would be able...": "I D B Ab
  • Prefix: The beginning of a word that can be substituted by another string of characters; the prefix will either be joined or dis-joined.
    After(Joined): Af. Afternoon = Afnoon.
    Enter/Inter/Intra(Dis-joined): N. Internet = N-net
  • Suffix: The ending of a word that can be substituted by another string of characters; the suffix will either be joined or dis-joined.
    ful/ify(Joined): F. Clarify = Clarf
    ification(Dis-joined): F. Clarification = Clar-f

Input Structure

  1. The first input will be the sentence to be converted
  2. The second input is a collection of the briefs. Each brief is a collection itself, in which the first element represents the shortened form of that brief, while the rest of the elements are all strings that map to the brief. Example: [ [d, would], [m, much, more], [a, at, an] ]
  3. The third and fourth inputs are collections of prefixes and suffixes. The first element of each prefix/suffix is the shortened form, the second element is a flag (of your choosing) that represents whether it is joined or dis-joined. Everything else are the strings that match the prefix/suffix.
    Prefix: [ [af, true, after], [n, false, enter, inter, intra] ]
    Suffix: [ [f, true, ful, ify], [f, false, ification] ]

Sample Input:

"a shipment of letters was delivered to the postshop", [["of", "o"], ["t", "to"], ["was", "os"], ["the", "th"]], [["sh", false, "ship"], ["d", true, "de"], ["po", false, "post"]], [["rs", true, "ers"], ["m", true, "ment"], ["d", true, "ed"]]

Rules, Assumptions and Freedoms

  • You may assume all input is lowercase letters.
  • A brief will always take priority over prefixes and suffixes.
  • you can indicate a dis-joined suffix/prefix however you wish, as long as you mention how you are indicating it.
  • The input may be rearranged however you like, as long as you specify how your input is structured
  • Output may be returned, printed or the nearest equivalent.

Test Cases

"a shipment of letters was delivered to the postshop", [["of", "o"], ["t", "to"], ["was", "os"], ["the", "th"]], [["sh", false, "ship"], ["d", true, "de"], ["po", false, "post"]], [["rs", true, "ers"], ["m", true, "ment"], ["d", true, "ed"]]

a sh-m o lettrs os dliverd t th po-shop

"shorthand was once a common skill among woman", [["was", "os"]], [["sh", false, "ship", "short"], ["cm", true, "com"]], [["mn", true, "mon", "man"]]

sh-hand os once a cmmn skill among womn"

"the electrician will be able to fix it", [["th", "the"], ["l", "will"], ["b", "be"], ["ab", "able"], "t", "to", "it"]], [["el", false, "electr"]], [["sh", true, "cian", "sion"]]

th el-ish l b ab t fix t

\$\endgroup\$
1
  • \$\begingroup\$ Looks like a nice challenge, I don't think there's much that needs to B clar-f-ed \$\endgroup\$ Sep 7, 2020 at 14:12
1
\$\begingroup\$

Keep the symmetry

SANDBOX: I am aware that the language in this challenge, as it stands, is quite... fluffy. If anyone could help me firm it up, I would be grateful. Also, would this be better as a cops-and-robbers style challenge, where the cops are trying to make the output more symmetrical, and the robbers make it less symmetrical?

Given a 2D array of 1s and 0s, flip a 1 to a 0 and output the resulting array.

The output array must be "closer to being symmetrical" than the input.

In the case where the array is already symmetrical, it must still flip a 1 to a 0, breaking as little symmetry as possible - e.g for

1,0,1
1,0,1
1,0,1

In the above case, changing the top-left 1 to a 0 will break symmetry in both directions, whereas changing the middle-left 1 will only break symmetry one way.

The output must be in the same form as the input (so that your program or function could take it in again).

What is symmetry?

I am talking about reflectional symmetry along both the horizontal and vertical axes.

Where the array has an even number of entries in a row/column, the axis is between the two central rows/columns:

1,0,|,0,1
1,0,|,0,1
-,-,-,-,-
1,0,|,0,1
1,0,|,0,1

otherwise it's down the middle of the middle row/column (and the numbers in that row/column count on both sides).

   |  
 1,0,1
-1,0,1-
 1,0,1
   |

Some Examples

Each pair of grids below is input .. output, which then becomes the next input, etc. iteratively:

1,0,0,1      1,0,0,1      1,0,0,1      1,0,0,1      1,0,0,0      0,0,0,0      0,0,0,0
0,0,1,0  ..  0,0,0,0  ..  0,0,0,0  ..  0,0,0,0  ..  0,0,0,0  ..  0,0,0,0  ..  0,0,0,0
1,0,0,1      1,0,0,1      0,0,0,1      0,0,0,0      0,0,0,0      0,0,0,0      0,0,0,0
1,1,1      1,0,1      1,0,1      1,0,1      1,0,1
1,1,1  ..  1,1,1  ..  1,0,1  ..  0,0,1  ..  0,0,0
1,0,1      1,0,1      1,0,1      1,0,1      1,0,1

\$\endgroup\$
3
  • \$\begingroup\$ Is the program supposed to find the shortest path, or any path? Are we supposed to display each step? Should the choice of flipping a 1 to a 0 be random, or can it be calculated? A reference implementation would be very useful in this question. \$\endgroup\$
    – Razetime
    Aug 26, 2020 at 13:03
  • \$\begingroup\$ The program is only supposed to flip one, calculated, bit from 1 to 0 and return the new grid. so iterative calls to the program would ultimately lead to all 0s. I guess I'm unclear exactly how I want the concept to be translated into a challenge, which is why I put the sandbox text at the top \$\endgroup\$ Aug 26, 2020 at 13:38
  • \$\begingroup\$ The program must be trying to make the array symmetrical This needs to be defined precisely. What does it mean that the program "tries" to make it symmetrical? That repeated application of the program eventaully gives a symmetrical array? That it does it in a "small" (to be defined) number of steps? Same with as easy as possible: this needs to be defined precisely. I'm afraid I don't get the main idea of the challenge, actually \$\endgroup\$
    – Luis Mendo
    Aug 26, 2020 at 17:21
1
\$\begingroup\$

Balanced Beams

Here are some examples of beams that balance:

X Y A   | X Y B Y
--+-----+---+---+
  |         |   |
X X   Y Y   Y X X
--+---- ----+-- +

A X X Y | A B Y Y
+---+---+-+-----+
|   |     |     |
B A | A AAB B   A
+ --+-- --+--   +

X Y X X | Y B   X
+-+-+---+---+----
| | |       |
Y A X Y Y X X X X
+ + + ------+----

The diagram will always be 17 characters wide and the top beam always balances in its centre. The other +s on the top beam indicate the point from which a lower beam hangs and the + on the lower beam indicates the point at which it balances. Your input does not need to include the |s if you don't need them. Lower beams with a width of 1 balance by default of course. The balancing of the top beam has to take the total weight of each lower beam into account.

As you can see, for each example, there are two positions marked A and B where I have forgotten whether they should be an X or a Y.

Please write a program a function which will accept the above diagram as input and output which of X and Y belong in each of the two positions A and B.

Your output should be something along the lines of A=X, B=X although any unambiguous output suffices e.g. you could output the diagram with the A and B substituted accordingly or you could modify the input in-place. You do not have to output values for X or Y, although for each diagram they always have a fixed ratio which will allow all beams to balance.

Other input formats could be acceptable but they need to get suggested as comments to the sandbox post.

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

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

Posted: Prime Power Switch

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

Sandbox Question

Do people think this is worth posting, given it only really requires a prime check along with getting digit prefixes? There are multiple implementations (possibly including hard-coding in some languages) to consider which might be enough. Please vote!


Produce all 83 base-ten right-truncatable primes in as few bytes as possible in the language of your choice.

  • Order is irrelevant, but the production must terminate.
  • You may produce a list, a set, or an equivalent object.
  • You may print them (e.g. space-separated, each on a line, or formatted as a list or set (e.g. {2; 3; 293; 5; ...})
  • You may give the numbers themselves as strings.
  • You may produce an iterator (but evaluating it must terminate).

Right truncatable primes

A right truncatable prime is a prime for which removing any number of trailing decimal digits is also prime.
For example, \$7193\$ is a right truncatable prime since \$719\$, \$71\$, and \$7\$ are all prime.

There are only 83 such numbers in base-ten, when sorted they are:

[2, 3, 5, 7, 23, 29, 31, 37, 53, 59, 71, 73, 79, 233, 239, 293, 311, 313, 317, 373, 379, 593, 599, 719, 733, 739, 797, 2333, 2339, 2393, 2399, 2939, 3119, 3137, 3733, 3739, 3793, 3797, 5939, 7193, 7331, 7333, 7393, 23333, 23339, 23399, 23993, 29399, 31193, 31379, 37337, 37339, 37397, 59393, 59399, 71933, 73331, 73939, 233993, 239933, 293999, 373379, 373393, 593933, 593993, 719333, 739391, 739393, 739397, 739399, 2339933, 2399333, 2939999, 3733799, 5939333, 7393913, 7393931, 7393933, 23399339, 29399999, 37337999, 59393339, 73939133]

This is A024770 in the Online Encyclopedia of Integer Sequences.


For some mathematician-written* Python see https://youtu.be/f2lEB4nMmyI.
* Fair warning, it might well make you cringe.

\$\endgroup\$
4
  • \$\begingroup\$ I don't really mind prime challenges, just that most people who have been here a while have a stigma against it. Related. \$\endgroup\$
    – Razetime
    Sep 5, 2020 at 14:26
  • \$\begingroup\$ The code in the link contains what appears to be a partially censored racial slur, so I think you should probably drop the youtube reference. \$\endgroup\$ Sep 9, 2020 at 21:32
  • \$\begingroup\$ Otherwise I think this is probably interesting enough, as these primes have several other non-prime features. It might be problematic if too many answers are just primality checks wrapped in terminating loops, though? \$\endgroup\$ Sep 9, 2020 at 21:35
  • \$\begingroup\$ @FryAmTheEggman Oh wow, I didn't notice; that's pretty sad. \$\endgroup\$ Sep 9, 2020 at 22:15
1
\$\begingroup\$

Move the Knight!

Your knight is on (0, 0) on an infinite (to all of the four edges, not just two) chessboard, and you need to move it to (a, b). You can use arbitrary (but finite) number of moves to do that. Since the chessboard is infinite, you can use squares with negative coordinates.

Since you only have 2 knights (if no promotion occured) to type the program, your program needs to be as short as possible.

Input

The input is two integers, a and b.

Output

You output a sequence of characters, each represents a move. There are eight directions to move, so your output should contain eight distinct characters, each represents one direction. They can be any eight characters, as long as they are all unique.

Test Cases

The characters used here is:

 A B
C   D
  N
E   F
 G H
0 0 -> ""
1 1 -> "GD" or "DEGD" or "DG" etc.
3 3 -> "DDDGGG" (one possible version)
2 3 -> "FGD"

Rules

  • Standard Loopholes are forbidden.
  • This is , so shortest code wins.
\$\endgroup\$
3
  • \$\begingroup\$ @Razetime I did... "They can be any eight characters, as long as they are all unique." \$\endgroup\$ Sep 15, 2020 at 12:30
  • \$\begingroup\$ oh, sorry about that. \$\endgroup\$
    – Razetime
    Sep 15, 2020 at 12:31
  • \$\begingroup\$ @Razetime I intend to make this challenge have many different, unique, interesting approach, and which one is shorter highly depends on the language. \$\endgroup\$ Sep 15, 2020 at 12:33
1
\$\begingroup\$

Do my data follow Benford's law or a uniform distibution?

Background

Benford's law, also known as the law of anomalous numbers, describes the distribution of the leading digit in many numerical data sets. Let \$X\$ be the leading digit of an observation (in base 10). According to Benford's law, \$P[X=i]=\log_{10}(1+\frac1i)\$ for \$i=1\ldots 9\$.

For instance take the yearly reputation change of the top 1000 users on CGCC. For a user with reputation change 3522, keep only the leading digit, 3. Repeat this for all users, and you get this distribution, which is far from uniform:

enter image description here

This has been shown to apply to vary different data sets, from town populations to stock prices, and is used to detect tax and election fraud.

On the other hand, for some other data sets, the distribution of the leading digit is a uniform distribution: \$P[X=i] = \frac19\$ for \$i=1\ldots 9\$.

Given some observed frequencies \$(f_i)_{i=1\ldots 9}\$, we shall measure the distance to these two distributions using the sum of the errors in absolute value: \$\sum_i \left|f_i-\log_{10}(1+\frac1i)\right|\$ and \$\sum_i\left|f_i-\frac19\right|\$, respectively.

Task

Take as input a list of non-zero numbers. For each number, keep only the leading digit, which is defined as the first non-zero digit. Compute the observed frequencies of leading digits, and output one of two values, depending on whether the observed frequencies are closer to Benford's law or to a uniform distribution.

Input

Input format is flexible. Note that input may include negative values, as well as non-integers.

Output

Either two consistent values, one for Benford's law and one for the uniform, or a truthy/falsey value.

Test cases

To be added

This is , so shortest answer in bytes wins.

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

Finding the densest crossword puzzles

I love crosswords, and nothing beats a super densely packed puzzle. But how dense can the puzzles get?

Here's a sample puzzle I made a few years ago:

enter image description here

Certainly not great, but can we do better?

Given any list of characters, a crosswordification of that list is a crossword puzzle consisting of characters from that list. For example, given the list ['b','a','d','a','d'], the following is a valid crosswordification:

enter image description here

but this isn't

enter image description here

Clearly, the order of the list is irrelevant.

Given a valid crossword, the area of the crossword is the area of the smallest rectangle containing the crossword. In the above examples, the smallest rectangle containing the crosswords are 3x3 squares, which have area 9.

Challenge

In this challenge, you must write a function which takes two arguments

  • A list-like structure containing english characters

  • A list-like of valid words consisting of english characters

and outputs an integer, representing the minimal area of a crosswordification of the list of english characters, where the second input defines the set of valid words.

I will be using this english dictionary for my test cases. Any code that is used to import/parse the dictionary into a list-like structure won't be counted in the byte-count, just the function.

Test Cases

More to be added:

['d','a','a','a','t','n','m'] -> 7 (adamant is a word)

['k','a','s','a'] -> 6
\$\endgroup\$
4
  • \$\begingroup\$ Here's what I understand: Our programs need to calculate the smallest possible corssword from the given characters, display the size alone. correct? \$\endgroup\$
    – Razetime
    Sep 17, 2020 at 5:04
  • \$\begingroup\$ @Razetime correct \$\endgroup\$ Sep 17, 2020 at 13:51
  • \$\begingroup\$ Do you suspect there is any other way to do this apart from brute forcing all possible arrangements and picking the minimal area one that meets the requirements? \$\endgroup\$
    – Sisyphus
    Sep 18, 2020 at 4:40
  • \$\begingroup\$ @Sisyphus yes, but not revealing, as thats part of the challenge \$\endgroup\$ Sep 18, 2020 at 11:17
1
\$\begingroup\$

Posted.

\$\endgroup\$
3
  • \$\begingroup\$ "one or more of the options for the longest palindromic run of digits in its binary representation can be removed" Does this mean I can remove several runs? For example, 945770 = 11100110111001101010_2 has 110011 as the longest palindromic run, it occurs twice and if I remove both occurrences, the result is 10101010. On the other hand, 944522 = 11100110100110001010_2 has 110011 and 001100 as longest palindromic runs, and removing both gives 10101010. \$\endgroup\$
    – Zgarb
    Sep 12, 2020 at 10:25
  • \$\begingroup\$ Don't forget Dennis, Dennis 2.0 or Calvin numbers :P \$\endgroup\$ Sep 12, 2020 at 15:37
  • \$\begingroup\$ @Zgarb No; you should only remove a single run before splitting the remaining digits. I've clarified this in the challenge text. \$\endgroup\$
    – sporeball
    Sep 13, 2020 at 0:50
1
\$\begingroup\$

The ASCII character countdown!

Your task is simple: Choose any printable ASCII character that's not chosen in the previous answers. And then, you need to print your chosen character in your program to standard output. (You can ONLY print your chosen character, without printing other garbage to STDOUT)

The catch

Let's say you picked x as your chosen character, and your answer is the answer numbered y. You have to insert y x's into the previous source code, at any position you like. For the first answer, the previous answer is the empty program.

An example

Answers have to start with the number 1. So for example, I chose the character #, and I posted a 1 byte answer in /// that prints the # mark.

#

And then, the second answer (numbered 2) has to insert 2 of their picked x character into the previous source code, such that the modified code will print their x character. So assume this is written in Keg:

x#x

And then, the third answer has to do the same, and so on, until 95 is reached.

The winning criterion & other rules

  • The first user whose answer stays without a succeeding answer for a month wins the challenge. If that's not satisfied, the first person who reaches the number 95 wins the challenge.
  • You are not allowed to put any other character in your code other than printable ASCII characters.
  • You need to wait for an hour before posting a chaining answer.
  • You need to wait 2 answers before you post a new answer after your submission.
  • Please make sure your answer is valid. If yours is not valid, chaining answers aren't allowed to be posted.
  • The answers are allowed to be in different languages.
  • Each submission doesn't have to be in a unique language.
  • You could only insert y x's into the source code.
\$\endgroup\$
9
  • \$\begingroup\$ Can the answers be in different langauges? \$\endgroup\$ Jul 20, 2020 at 4:03
  • 1
    \$\begingroup\$ What is the motivation for the number 95? \$\endgroup\$ Jul 20, 2020 at 4:03
  • \$\begingroup\$ This isn't a radiation hardening challenge, as those require programs to still work / do something different if any single character is removed. \$\endgroup\$
    – lyxal
    Jul 21, 2020 at 9:15
  • 1
    \$\begingroup\$ @fireflame241 Because there are 95 ASCII characters of course... \$\endgroup\$
    – DELETE_ME
    Jul 21, 2020 at 12:50
  • \$\begingroup\$ Must we only insert y xs, or may we also insert other (printable ASCII) characters apart from our chosen character? If the latter, are the additional characters limited to those not already used in previous answers? \$\endgroup\$
    – Dingus
    Jul 21, 2020 at 15:02
  • \$\begingroup\$ "I chose the character ?" -> "I chose the character #"? \$\endgroup\$
    – DELETE_ME
    Jul 22, 2020 at 6:10
  • \$\begingroup\$ "has to insert their picked x character into the previous source code," -> edit this part too. \$\endgroup\$
    – DELETE_ME
    Jul 22, 2020 at 6:11
  • \$\begingroup\$ @Dingus Now you may only insert y xs. \$\endgroup\$
    – user92069
    Jul 23, 2020 at 0:56
  • 1
    \$\begingroup\$ "I chose the character ?" has crept back in. Other than that it's clear now. (Seems difficult too, but maybe not in the golfing langs - I don't know.) \$\endgroup\$
    – Dingus
    Jul 23, 2020 at 2:18
1
\$\begingroup\$

Bit delivery in Bin City

posted

\$\endgroup\$
3
  • \$\begingroup\$ It could help a lot to add an illustration for small test cases (how to move each bit in the input to the output), and some test cases with more bytes (both even and odd). Other than that, looks good to me. \$\endgroup\$
    – Bubbler
    Mar 31, 2020 at 1:57
  • \$\begingroup\$ @Bubbler Thanks for the feedback. How's it now? \$\endgroup\$
    – Noodle9
    Mar 31, 2020 at 14:32
  • \$\begingroup\$ Perfect, and +1 for reference implementation. \$\endgroup\$
    – Bubbler
    Mar 31, 2020 at 23:00
1
\$\begingroup\$

Find a 3-Language Polyglot

What I had in mind was that cops would create a polyglot with in 3 languages (languages A, B, and C). When run in A, the program would print the name of language B; when run in language B, the program would print the name of language C; and when run in C, it would print the name of language A.

Cops have to provide the names of these 3 languages, as well as their original polyglot's characters scrambled in no particular order. as well as a valid program in A that has the same behavior as the polyglot (prints the name of B). This program must be able to be created by deleting characters from the original polyglot, i.e., all the letters in it are included in the hidden polyglot.

Given the languages and the scrambled programand the sample program, robbers have to find the polyglot (or a polyglot that has the same behavior as the one the cop wrote).

Rules

  • Any language chosen must be able to be run on TIO, repl.it, ideone, or someplace else online. If the language is obscure, please provide a link to some such website.
  • Any language used must have documentation on Esolangs, Wikipedia, GitHub, or someplace else. Unless the language is very commonly used and has tons of tutorials everywhere, such as Java, Haskell, or C, please provide a link to documentation. Any feature used in the program must be included in that documentation - it shouldn't be something people have to dig through layers of source code to find.

Questions for meta:

  • Is this too easy/hard? Should I not include the extra A program? Should I only make it for 2 languages?
  • Is there anything unclear about the instructions? How can I improve the phrasing?
  • Should cops also give the length of their programs as an extra hint?
\$\endgroup\$
3
  • 1
    \$\begingroup\$ one thing to consider: you would need some way of restricting languages that are allowed. Otherwise people could just make up their own languages or use really, really obscure languages. \$\endgroup\$
    – thesilican
    Aug 18, 2020 at 23:04
  • 2
    \$\begingroup\$ IIRC, the usual way to limit the language list is to specify "the language should be on at least one of Wikipedia, TIO, or esolangs.org", though esolangs is already crazy these days. \$\endgroup\$
    – Bubbler
    Aug 19, 2020 at 5:05
  • \$\begingroup\$ @Bubbler Yup, I've edited my question with some restrictions now \$\endgroup\$
    – user
    Aug 20, 2020 at 15:01
1
\$\begingroup\$

TPK Algorithm

The TPK Algorithm was designed in 1977 Donald Knuth and Luis Trabb Pardo to show off the various functionality of languages at the time. Your task is to implement the most common version of the TPK algorithm. The pseudocode goes as follows (adapted from Wikipedia):

ask for 11 numbers to be read into a sequence S
reverse sequence S
for each item N in sequence S
    call function F on N
    if the result is greater than 400
        print "TOO LARGE"
    else
        print result

F(N) results in sqrt(abs(N)) + 5 * pow(N,3)

F should be implemented as a function in your code, that is, there should be some subsection of you code which consists of a function that takes an input and outputs the result of F for that input. It is acceptable to round the square root operation down to the nearest integer.

Notes: if using decimal square roots, the first value greater than 400 is ~4.301. For integer square roots, the first value is ~4.302. Your program does not need to support non-integer inputs.

This is , so fewest bytes wins!

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

Three points on Poincaré disk

What is Poincaré disk?

Poincaré disk is a projection of 2-dimensional hyperbolic geometry to the 2-dimensional Euclidean plane, or more precisely, onto the open disk \$\{(x,y): x^2 + y^2 < 1^2\}\$.

Objective

It is well-known that three distinct points on the Euclidean plane are either on a unique line or on a unique circle. Let \$S\$ be that line/circle.

The inverse image of \$S\$ is one of line, circle, horocycle, or hypercycle. Determine which.

Classification

The points are assumed to be on the disk.

  • If \$S\$ is a circle that lies on the disk, the inverse image is a circle.

  • Otherwise, if \$S\$ is a circle that shares a tangent with the boundary of the disk, the inverse image is a horocycle.

  • Otherwise, if \$S\$ crosses the boundary of the disk orthogonally, the inverse image is a line.

  • Otherwise, the inverse image is a hypercycle.

Input

The cartesian 2-dimensional coordinates of the points. A coordinate can be given as either two real numbers or one complex number. Other than that, the input type and format doesn't matter. This includes:

  • A tuple of size 3

  • A list of size 3

  • A set of size 3

Invalid inputs fall in don't care situation. This includes:

  • Not exactly 3 points

  • Non-distinct points

  • A point not on the disk

Output

Output type and format doesn't matter either. This includes:

  • Enumeration type of 4 possible values

  • Bit field of size 2

Example

Assuming there were no floating-point errors:

  • \$\{(-½,0),(0,½),(½,0)\}\$ must give a circle.

  • \$\{(-½,½),(0,0),(½,½)\}\$ must give a horocycle.

  • \$\{(-½,0),(0,0),(½,0)\}\$ must give a line.

  • \$\{(1-\sqrt{¾},½),(1-\sqrt{½},1-\sqrt{½}),(½,1-\sqrt{¾})\}\$ must also give a line.

  • \$\{(0,½),(¼,¼),(½,0)\}\$ must give a hypercycle.

  • \$\{(0,0),(¾,0),(0,¾)\}\$ must also give a hypercycle.

\$\endgroup\$
4
  • \$\begingroup\$ Can the coordinates \$(x,y)\$ be represented as a complex number \$x+yi\$? \$\endgroup\$ Oct 11, 2020 at 16:43
  • \$\begingroup\$ @cairdcoinheringaahing Yes. \$\endgroup\$ Oct 11, 2020 at 21:02
  • \$\begingroup\$ It looks like solutions might have trouble with the line and horocycle cases due to float precision, if either they take values like sqrt(2) to finite precision or introduce imprecisions in the calculations. Can some allowance be made for this? I'm not sure how though. \$\endgroup\$
    – xnor
    Oct 12, 2020 at 2:09
  • \$\begingroup\$ @xnor If the input is IEEE floating-point numbers, they are in \$\mathbb{Z}[½]\$ anyway and must be regarded as such. If your language is able to do symbolic computation, you may go ahead. \$\endgroup\$ Oct 12, 2020 at 3:15
1
\$\begingroup\$

Compactify the real numbers to a group (WIP)

Objective

Let \$X = \mathbb{R} \cup \{\infty\}\$. The \$\infty\$ is the point at infinity and doesn't have a signature.

Let \$Y = \{\exp(i\theta) : \theta \in [0,2\pi)\}\$, which is the unit circle on the complex plane.

Make \$X\$ a group by giving \$X\$ a binary operation, so there will exist a function \$f : X → Y\$ that is both an isomorphism and a homeomorphism.

Your code shall implement the binary operation. \$f\$ doesn't need to be implemented to a code.

Group

A set \$G\$ endowed with a binary operation \$*\$ is a group iff:

  • For every \$a,b,c \in G\$, \$(a * b) * c = a * (b * c)\$

  • There exists the identity element \$e \in G\$ such that for every \$a \in G\$, \$e * a = a * e = a\$

  • For every \$a \in G\$, there exists \$b \in G\$ such that \$b * a = a * b = e\$

\$Y\$ is a group, where the binary operation is the multiplication.

Isomorphism

Let \$*\$ denote the binary operation given to \$X\$.

A function \$f : X → Y\$ is an isomorphism iff:

  • \$f\$ is bijective

  • For every \$x,y \in X\$, \$f(x*y) = f(x) × f(y)\$

Note that once appropriate \$f\$ is identified, \$*\$ can be automatically defined as \$x * y = f^{-1}(f(x) × f(y))\$.

Topology

A subset \$A \subset X\$ is open iff, for every \$x \in A\$:

  • If \$x \in \mathbb{R}\$, there exists \$P \subset A\$ such that \$x \in P\$ and \$P\$ is an open interval

  • If \$x = \infty\$, there exists a subset \$P \subset A\$ such that \$x \in P\$ and \$P\$ is the union of two open rays to the opposite directions

A subset \$B \subset Y\$ is open iff, for every \$y \in B\$, there exists a subset \$Q \subset B\$ such that \$y \in Q\$ and \$Q\$ is an open arc.

Homeomorphism

A function \$f : X → Y\$ is a homeomorphism iff:

  • \$f\$ is bijective

  • For every open subset \$A \subset X\$, its image \$f[A]\$ is open in \$Y\$.

  • For every open subset \$B \subset Y\$, its inverse image \$f^{-1}[B]\$ is open in \$X\$.

Rule

You may represent \$\mathbb{R}\$ as a floating-point number. Every floating-point error will be tolerated in this regard.

Example

An example of \$f\$ is:

$$ f(x) = \exp(i × 2 \arctan \frac{x}{2}) $$

where \$\arctan \infty = \frac{\pi}{2}\$, and we identify \$*\$ as:

$$ x * y = 2 × \tan (\arctan \frac{x}{2} + \arctan \frac{y}{2}) $$

where the identity element is \$0\$, and the inverse element of \$x\$ is \$-x\$ when \$x \in \mathbb{R}\$, or \$\infty\$ if \$x = \infty\$.

Ungolfed solution

Haskell

This implementation abuses the fact that IEEE floating-point numbers can encode infinities. Both positive infinity and negative infinity will be treated the same in this regard.

import Data.Semigroup
import Data.Monoid
import Data.Group

newtype CompactR = CompactR Double deriving (Eq, Show, Read)

instance Semigroup CompactR where
    CompactR x <> CompactR y = CompactR $ 2 * tan (atan (x/2) + atan (y/2))

instance Monoid CompactR where
    mempty = CompactR 0

instance Group CompactR where
    invert (CompactR x) = CompactR (negate x)

You implement only <>. The others are just details.

Sandbox questions

This challange turned out to be too easy.

What if I asked about one-point compactification of \$\mathbb{C}\$ instead of \$\mathbb{R}\$?

\$\endgroup\$
1
  • \$\begingroup\$ I think even just f(x,y)=(x+y)/(1+xy) works for the real case \$\endgroup\$
    – xnor
    Oct 14, 2020 at 8:01
1
\$\begingroup\$

Convert hexadecimal to decimal

We have a lot of base conversion challenges. Surprisingly, aside from one closed challenge, there aren't any where the goal is purely to convert hexadecimal to decimal. This is different from challenges like converting hexadecimal to binary, because many languages have features like hexadecimal literals (0x, $, etc.) which can do this in a much shorter or more interesting way.

I/O:

You should create either a program or function, which takes input and output through one of the allowed methods. The input will be a hexadecimal number, consisting of the characters /[0-9a-f]/ (you may choose the capitalization rules).

Scoring:

This is code golf, shortest answer per language wins.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ Feedback is of course useful. If the downvote is because this is a dupe or is unnecessary, that would be useful to comment on. Otherwise, I can't fix any issues without knowing what they are. \$\endgroup\$ Oct 17, 2020 at 21:11
1
\$\begingroup\$

Recolour my Table (Abandoned)

\$\endgroup\$
1
  • \$\begingroup\$ Maybe try limiting the table format. Is it top down or sideways? Also can we assume that the original table color (or slight variation to a certain HSL difference, maybe) is the majority of the image? \$\endgroup\$ Feb 6, 2020 at 19:50
1
\$\begingroup\$

Is a coincident point in a pair of rotated hexagonal lattices closest to the origin?

I've deleted from here because I agree it is takes too much time to understand at the moment.

Preface

This is a question where the technique must search or exclude from search all possibilities. As soon as I figure out how to pose it, there will be a separate question for mathematical techniques other than a simple search, so please don't use them here.

Below is quoted from Math SE determining if a coincident point in a pair of rotated hexagonal lattices is closest to the origin?:

A pair of hexagonal lattices with one scaled by the square root of a rational number \$r = \sqrt{\frac{m}{n}}\$ and then rotated will produce a variety of different hexagonal lattices of coincident points.

For the first lattice let

$$x, y = i+\frac{1}{2}j, \ \frac{\sqrt{3}}{2}j$$

and for the second

$$x, y = r\left(k+\frac{1}{2}l\right), \ r\left(\frac{\sqrt{3}}{2}l\right).$$

Per this and this helpful answer the squares of the distances to unit lattice points are given by Loeschian numbers (A003136) equal to \$i^2+ij+j^2\$ so in this case a point \$i, j\$ on the first lattice will coincide with a point \$k, l\$ on the second lattice once rotated by some amount if

$$n(i^2+ij+j^2) = m(k^2+kl+l^2).$$

For example if \$m, n = 13, 7\$ then both \$(i, j) = (5, 6)\$ and \$(6, 5)\$ will coincide with \$(k, l) = (5, 3)\$ at rotation angles of about 5.2 and 11.2 degrees as given by.

$$\theta = \arctan\left( \frac{\frac{\sqrt{3}}{2}l}{k+\frac{1}{2}l} \right) - \arctan\left( \frac{\frac{\sqrt{3}}{2}j}{i+\frac{1}{2}j} \right)$$

However, while the first solution is part of the hexagonal superlattice built on the much closer point \$(i, j), (k, l) = (1, 3), (1, 2)\$ the second point represents the shortest possible coincident distance and therefore a far lower density coincident lattice.

coincident hexagonal lattices

plotting script: https://pastebin.com/pZFCGXbE

Task

Given the rational number (m, n) e.g. (13, 7) and pairs of known coincident lattice points, e.g. (5, 6), (3, 5) or (6, 5), (3, 5) (besides the origin) we want to find out if this is one of the six closest coincident lattice points, or if it is a member of a coincident lattice with points closer.

  • If it's one of the six closest: return some flag letting us know there wasn't anything closer. You may also return either the same point, or one of the other five of identical distance.

  • If it isn't: return one of the six points that was closest along with (but not only) a flag letting us know that a closer point was found and the original point wasn't one of the closest. Reminder that this will be a closer point in a coincident lattice that also contains the original input.

Do this by some combination of searching/testing all possible pairs of lattice points (one from each lattice) to see if they are coincident and closer and potentially excluding blocks of combinations that don't need searching. The problem is finite because one only searches points that aren't obviously farther from the origin.

Feel free to use tricks to exclude large fractions from search as long as they rely on simple rules, for example a point near the origin in one lattice will never be coincident with a point near a distant point in the other.

But if you find yourself considering computations like matrix division or using Eisenstein integers or Euclid's algorithm in the complex plane please save that for the follow-up question.

This is so shortest code wins.

Input

  • Input will have six integers \$(m, n), (i, j), (k, l)\$ as described above, but can have any order or hierarchy, or additional (but uninformative) place holders (e.g. zero padding, blanks...)
  • \$(m, n)\$ will be positive, but the other four can be positive, negative or zero, excluding a \$(0, 0)\$ pair (the origin).

Recipe for making test cases

In addition to the two mentioned above (13, 7), (5, 6), (5, 3) and (13, 7), (6, 5), (5, 3) you can roll your own:

  1. Pick two Loeschian numbers \$L_1\$ and \$L_2\$ and find some integer pairs (i, j), (k, l) that can make them. (Find all integer pairs that produce a given Loeschian number)
  2. Make new pairs by choosing two nonzero integers \$a, b\$, then:

\begin{align} i' & = ai - bj\\ j' & = aj + b(i+j)\\ k' & = ak - bl\\ l' & = al + b(k+l). \end{align}

If \$i, j\$ and \$k, l\$ were coincident, then \$i', j'\$ and \$k', l'\$ will be as well.

(This just says that the coincidence lattice between two hexagonal lattices is also a hexagonal lattice.)

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

As a Web Frontend developer, I feel out of place most of the time coming here. And that is despite the existence of established challenges like One Div in the field of web development. But they aren't here, because objective criteria are hard to do. (Sparing more unkind reasons.)

Maybe the following would be a way to draw others. It's not a One Div challenge, but a way to set different web technologies against one another in a sort of code golf.

To give you an idea, compare these two Codepens:

(To be fair, thebabydino doesn't know at the time of writing there is a challenge, it was a spontaneous idea after seeing her code.)

It was rightly pointed out to me that capturing the idea of good coding practice will probably fail. But let me give you a vision: What if the challenges were not only about learning new coding tricks, but also about identifying the "cheats"?

There is a whole industry out there that tries to make objective rules to ultimately measure code quality. Their work is mostly to tilt against windmills. Maybe there is a way to make a playfull challenge a tool to identify new features for linters.

If good coding wins, so much better for it. If everyone thinks the winner was going squarely against the spirit of good coding practice, professionalism gains a discussion.

(Somehow this reminds me of the discussion about doping in sports.)

I hope to make the playing field understandable also to non-web people, so please bear with me if I add comments that would be obvious to everyone in the profession.

One goal here is performance. There are a lot of champions for the approach to minimize external dependencies loaded into the browser. I am trying to capture this with a "no external request" rule. This is not only about the size of files loaded but also the debt of interpreting extensive JS frameworks. Look at current discussions about web site performance, and you will understand what I am talking about.

Challenge: Recreate the image with web technologies

A real question would contain a raster image in any format. Most likely, they will be PNG or GIF (to show animations).

The code must be runnable on Codepen

You must create a pen and post its URL here. Your own authorship should be on a honors base. Anonymous pens are acceptable, but if your nick is the same here as there, you must use your account.

There are a good number of web development environments around, but they all offer different features. The criterium for selection was the ease to enforce the "no external resources" rule - and popularity, of course.

In addition, the code must be posted in its entirety here.

No external code

The pen must not include any external sources.

  • No import statements in any language
  • no statements that trigger any external requests
  • no external stylesheets or scripts imported via the pen settings

An important case here is the use of JS frameworks that offer server-side rendering, or template languages like JSX. Should their source code be made legal? This sort of code is mostly undistinguishable from code used client-side, with the difference that it must be compiled before it is delivered to the client.

No base64-encoding

No part of the code should be unreadable at first glance. So neither HTML, nor CSS, nor JS are allowed to contain any base64-encoded strings

  • No data: URI that contains the base64 option
  • The use of atob() and btoa() in JS is ok, provided there is no string literal containing a base64-encoded string
  • The use of <canvas> and/or URL.createObjectURL() is certainly ok, provided there is no string literal containing a base64-encoded string
  • The use of Blob or ArrayBuffer to construct images is certainly ok.

The use of preprocessors is allowed

Any preprocessor that is offered by CodePen can be used. What counts for the solution is the source code in that language.

Using Babel as a preprocessor inside CodePen is ok, but the "no imports" rule applies just the same.

Currently the Babel preprocessor offered by CodePen has a fixed configuration. If that changes in the future, it might be valid or not to use an URI to an external config file or npm module or not. That is in the future. The basic idea here is "if it is executed on the server side, or by native browser code, go for it"

Linting must pass

To give languages a fair chance that rely on fixed indents, and to maintain readability, the Javascript part must pass ESLint without any warning or error.

  1. Which preset does the best to enforce good code quality? It was pointed out that there will probably remain a number of loopholes, but I would like to try to get them as few and obscure as possible.
  2. I am not so fluent with linters for other languages. Proposals?

No minification

All code should be pretty.

  • Running prettier must not change the code formatting

    This might not cover all languages. Please review and propose other/additional formatters.

  • No code line can be longer than 80 columns

Matching the source image

I have still to research that. My first instinct is to use ImageMagicks magick compare and set a cutoff value to account for antialiasing and rounding differences, but that does not solve how to capture animations. Maybe capture all frames with Lighthouse?

Wining criterium: aggregated Number of lines of code

The number of lines of source code in markup, stylesheet and script are added. The least number of lines wins.

  • Numbers are counted using sloc. Only the Source output value is relevant. For example on the command line

      sloc pen.css | grep Source
    

    is there a sensible way to scrape the code lines directly from Codepen? Or is this available on the site and I am simply not aware of it?

Please give your answer a header that qoutes the number of lines in each language separately.

\$\endgroup\$
9
  • \$\begingroup\$ While giving 'languages a fair chance' by enforcing no base64 and counting lines of code only is admirable, I think you will find that there are too many ways to cheese it. For example, I could write every line as eval('...' + '...' + '...') to escape minification. It might be better just to use a more conventional scoring criteria (bytes) and drop the base64/formatting requirements. \$\endgroup\$
    – Sisyphus
    Oct 22, 2020 at 2:56
  • \$\begingroup\$ I am not giving up on this so easily. If there is to be a challenge, it should be on the basis that is done with good coding practice. Otherwise, it just makes no sense. Linters should be able to catch a lot of the loopholes, and if not, at least this would be a way for others to learn about them. Isn't this also the goal of this community? My vision would be that if this gains popularity, Linter manufactureres look at "cheating" solutions for improvements to their product. \$\endgroup\$
    – ccprog
    Oct 22, 2020 at 12:06
  • \$\begingroup\$ @ccprog Unfortunately, "good coding practice" is a subjective thing, and we strive for objective scoring criteria. Most answers on the site will happily sacrifice things such as readability and good practice in order to reduce their score. \$\endgroup\$ Oct 22, 2020 at 13:00
  • \$\begingroup\$ @cairdcoinheringaahing Did you see my latest edit? Maybe this can be a productive goal in itself. \$\endgroup\$
    – ccprog
    Oct 22, 2020 at 13:01
  • \$\begingroup\$ @ccprog I was mainly responding to your comment, I was still reading through the full spec as I wrote that. I do very much like the idea of this challenge, and I think it should be fully able to do while still fitting within our site rules (objective scoring criteria etc.). I'm not too familiar with the topic of web technologies, so forgive any mistakes I may make, but one thing sticks out to me as needing improvement when reading this challenge: the attempts to cover things in all languages. Usually, we tend to avoid language-specific challenges on the site, but I think this would be a (cont) \$\endgroup\$ Oct 22, 2020 at 13:05
  • \$\begingroup\$ (cont) good example of where limiting the language would help rather than harm the challenge. From my understanding, it looks as though restricting answers to Javascript would allow you to make the challenge much more objective with the rules about minification and base64, as you won't have to worry about edge cases in esoteric languages such as Jelly or ><> that are commonly used on the site. \$\endgroup\$ Oct 22, 2020 at 13:07
  • \$\begingroup\$ That, on the other hand is unrealistic. Most Javascript code nowadays is somehow cross-compiled, either from other languages (for example the Typescript superset) or through the use of frameworks (Angular, React). I'll have to think more about th "no imports" rule here, as one of the banes of current web development is that a lot of devs loose the sight of whether their code is executed server or client side. \$\endgroup\$
    – ccprog
    Oct 22, 2020 at 13:15
  • \$\begingroup\$ As far as esoteric languages are concerned, there is an implicit stop gag: Forcing Codepen as execution environment. If the language isn't supported there,, the answer fails. And believe me, Codepen is an industry tool, not just any website. Every post there is considered to be a showcase for the developer and counts for his/her professional reputation. \$\endgroup\$
    – ccprog
    Oct 22, 2020 at 13:21
  • \$\begingroup\$ @ccprog I actually have no problem with the challenge as specified. I just think that the winning solutions will cheat the tool(s) you use to score. But if that's ok with you, I don't mind this challenge at all, and will look forward to see the answers. \$\endgroup\$
    – Sisyphus
    Oct 23, 2020 at 1:07
1
\$\begingroup\$

Get the Systematic Chemical Symbol

posted

\$\endgroup\$
2
  • \$\begingroup\$ "prints the corresponding chemical symbol." → "prints the corresponding systematic chemical symbol." \$\endgroup\$
    – Adám
    Oct 21, 2020 at 17:18
  • \$\begingroup\$ You should state clearly that taking a list of digits is also acceptable. \$\endgroup\$
    – Adám
    Oct 21, 2020 at 17:19
1
\$\begingroup\$

C Code Compressor (WIP)

Your task is to create a lossless compression scheme that is optimized for ASCII-only C code. Whitespace and indentation should be preserved.

Your score is the total compressed size of various samples from well known open source C projects. A sample of the largest few files will be taken from one specific commit. Both header files and source files will be included from the following projects:

  • The CPython Interpreter
  • The Linux Kernel
  • Git

Comments will be stripped from the source files for the set of scoring, therefore you do not need to optimize for comments, however you still need to handle them.

Three additional files will also be included in the corpus, which must be handled correctly, but do not contribute to your score:

  • A C source file with comments
  • A Python source file
  • A non-programming plain text file (probably a short story or poem from the public domain. Jabberwocky?)

Scoring

$$ Score = {C + D + L^2 \over O} $$

Where:

  • \$C\$ is the total size, in bytes, of the compressed text
  • \$O\$ is the total size, in bytes, of the original text
  • \$D\$ is the total length, in bytes, of all strings in any predefined dictionary
  • \$L\$ is the length, in bytes, of the longest string in any predefined dictionary

Lowest score wins

Predefined Dictionaries

(Needs refinement)

A predefined dictionary, for the purposes of this challenge, is a collection of predefined output strings of length 2 or greater which are baked into your encoding format.

  • An entry in a predefined dictionary must have at least two different characters to be counted in scoring, so repeating a single character \$n\$ times does not count as a dictionary entry.
  • Leading and trailing whitespace on a predefined string does not count as a distinct entry from one without matching leading or trailing whitespace

A predefined dictionary may, for instance, be helpful for keywords and common identifiers, but it is ultimately up to you what approach you take.

For instance, if you map \x80 to int and \x81 to float, your dictionary score would be \$8\$ for the total length, plus \$25\$ for the longest string (float), for a total of \$33\$. However, mapping runs of tabs and spaces to \xC0-\xFF would not count toward dictionary size in this case.

Rules

  • Standard rules and loopholes apply.
  • Although scoring only depends on how well you can compress C, your algorithm needs to work even when the input text is not valid C; it must work for all ASCII input text.
  • Your algorithm must be deterministic, meaning it should always produce the same compressed text every time for any given input, regardless of external factors such as time.
\$\endgroup\$
4
  • \$\begingroup\$ Once you reveal the test cases, couldn’t I just create an “encoding” where 1 represents the Linux kernel, 2 represents the Git source, etc? And if the test cases aren’t fixed but can change if an answer overfits some, then is there really an objective winning criterion? \$\endgroup\$ Oct 10, 2020 at 7:26
  • \$\begingroup\$ @water_ghosts Optimizing exclusively for the test cases given is one of the standard loopholes \$\endgroup\$
    – Sara J
    Oct 10, 2020 at 13:02
  • \$\begingroup\$ Are you planning on scoring based entirely on compression amount, or also on code size? Seems like it will be a fun challenge, especially is code size is part of it. \$\endgroup\$ Oct 10, 2020 at 22:05
  • \$\begingroup\$ @RedwolfPrograms I've done a compression challenge before and I found that making code size a part of the score got in the way of making things interesting since it typically encouraged calling out to gzip since that takes way fewer bytes than making an actual algorithm. I might consider a code size limitation or work in dictionary size into score though. \$\endgroup\$
    – Beefster
    Oct 28, 2020 at 15:56
1
\$\begingroup\$

Is It A Rainbow Color

Posted in main

\$\endgroup\$
11
  • \$\begingroup\$ "obviously not an index" isn't so clear. Is 7 "obviously not an index" if we use 0-based indexing? \$\endgroup\$
    – Adám
    Oct 27, 2020 at 23:09
  • \$\begingroup\$ Adding to that: In some languages, -1 and false are valid indices. \$\endgroup\$
    – Adám
    Oct 27, 2020 at 23:10
  • \$\begingroup\$ Ok updated it to make it a bit more definitive. \$\endgroup\$
    – Scott
    Oct 27, 2020 at 23:35
  • \$\begingroup\$ Doesn't this give an unfair advantage to languages that use -1 for "not found" when asking for an index? Other languages give the next index after the last valid index. \$\endgroup\$
    – Adám
    Oct 27, 2020 at 23:37
  • \$\begingroup\$ What would you suggest then? I feel no matter what, there's always going to be some languages that are better suited to a particular challenge. I tried to offer as many ways as possible for handling invalid input to be more language-inclusive. \$\endgroup\$
    – Scott
    Oct 28, 2020 at 0:40
  • 1
    \$\begingroup\$ Well, let's take a step back and look at the essence of the challenge. There are two things: a look-up, and the compression of the words. I'd focus on one, i.e. either let "not found" have undefined behavior, or simply be a cover for look-up (given a list and a value, find the index, or … if not found). Since the latter is probably too boring, go with the simple lookup. \$\endgroup\$
    – Adám
    Oct 28, 2020 at 0:44
  • \$\begingroup\$ I strongly recommend removing the invalid-input case and just guaranteeing that the input is valid. It means answers don't have to store all valid inputs in some form to check against them, which gives rooms for more interesting methods of fingerprinting. \$\endgroup\$
    – xnor
    Oct 29, 2020 at 1:35
  • \$\begingroup\$ I feel like we've already have some challenge(s) about mapping a set of n strings to the numbers 1 through n, though I don't quite remember what they were or how to find them. The concept is a good one, but it may have been done already. \$\endgroup\$
    – xnor
    Oct 29, 2020 at 1:38
  • \$\begingroup\$ This is some valuable feedback. I agree that we've had some very similar challenges, how would it work if I rework the challenge to be something along the lines of this: output whether a given color is in the rainbow. The possible inputs would be pre-defined and output can be truthy/falsy \$\endgroup\$
    – Scott
    Oct 29, 2020 at 2:12
  • \$\begingroup\$ I can't help thinking this will boil down to a "let xnor find some magic trick that simplifies it significantly and then adapt it to every other programming language" challenge \$\endgroup\$
    – pxeger
    Oct 30, 2020 at 8:13
  • \$\begingroup\$ I think this actually should have good variety across languages. It's string-based, and different languages have various abilities to use regexes, hashes, conversion to code points, etc, that differ in relative length. This is in contrast to purely arithmetic ones where a single formula can be ported easily. \$\endgroup\$
    – xnor
    Nov 3, 2020 at 4:44
1
\$\begingroup\$

Fix the message on my calculator

My calculator has lots of mathematical buttons, but they're boring; it's much more fun to write messages using letters. You can access the letters of the alphabet with the ALPHA button which turns each button press into a corresponding letter which is noted above each key (or space, in the case of .).

My calculator looks like this*:

 A    B    C    D    E    F
log   ln   ^2  sin  cos  tan
-----------------------------
 G    H    I    J    K    L
 /    ->   (    )    ,   Esc
-----------------------------
 M     N     O
 7     8     9 
-----------------------------
 P     Q     R     S     T
 4     5     6     *     %
-----------------------------
 U     V     W     X     Y
 1     2     3     +     -
-----------------------------
 Z    (Space)
 0       .  

For example, to type HELLO I would press Esc cos -> -> 9 ..

However, recently my ALPHA button was broken, so I can't get to the letters any more. When I try to write a message, only the mathematical symbols get input.

Without ALPHA, the keys do the following:

  • The Esc key does nothing
  • The digit keys, ., (, ), ,, ->, +, -, *, and % enter those strings verbatim
  • The log, ln, sin, cos, and tan keys enter function_name() and place the cursor before the closing bracket
  • The / and ^2 keys enter a / or ^2 respectively, and then move the cursor to before the new symbol, iff the symbol preceding it is one of + - * % ( , ->

For the example above, instead of getting the message HELLO, I would get ->cos(9). Note that since the key for L (Esc) does nothing, it is unfortunately impossible to know that the letter L was pressed, and this information is lost.

Your task is to convert a string of maths operations into the correct text.

Rules

  • Some combinations are ambiguous; for example CGI, CIG, ICG all could have come from (/^2. In this case you can output any or all of them.
  • You should assume the input will always be a valid combination that could have been produced using the rules above.
  • You should never output Ls
  • You may output the string in any case, with an optional trailing newline, but no other extra whitespace.
  • This is . The shortest code in bytes wins.
  • Standard rules and loopholes apply.

Test-cases

More coming soon.

      Input                 Output
----------------------------------------
789                    MNO
log(ln(^2))            ABC
cos((cos((9)           EIEIO
-->-                   YHY
3.14159                W UPUQO
(/^2                   CGI or CIG or ICG
<empty string>         <empty string>

* The % and / keys are both for division on the original calculator, but labelled something like ÷ and ☐/☐. Here I've just replaced them with simple ASCII equivalents. (did you know that both % and ÷ represent a fraction?) Also, there are other keys not shown (including the mentioned ALPHA), but they don't matter for this challenge.


Meta

  • Any feedback or suggestions?
  • Is this clear enough?
  • I considered adding some regular expressions to show more clearly what the rules mean, but decided not to because I though that should be part of the challenge. Was this the right decision?
  • I will probably make another challenge that is the reverse of this - given a list of buttons that were pressed, produce the correct mathematical symbols. It might have made sense to post that challenge first as context for this one, but I thought this one is more interesting
  • Regarding ambiguity: I could change some of the syntax rules to reduce the ambiguity but it would make things a lot more complicated and it couldn't be removed completely without straying significantly from the behaviour of the original calculator
\$\endgroup\$
1
\$\begingroup\$

Set of subsets without subsubsets

You are given two integers \$n\$ and \$k\$, and are to output a random collection of \$k\$ sets \$\mathcal A_1,\ldots,\mathcal A_k\$ such that:

  • each \$\mathcal A_i\$ is a subset of \$\{1, 2, \ldots, n\}\$;
  • no \$\mathcal A_i\$ is a subset of another \$\mathcal A_j\$.

Any collection which satisfies these constraints should have positive probability of being output.

Input/output is flexible.

You may assume that there exists at least one collection which satisfies the constraint; by Sperner's theorem, this is equivalent to the condition \$k\leq \tbinom{n}{\lfloor n/2\rfloor}\$.

Example outputs

The output is random, so these example collections should merely have positive probability of being output.

| n | k | possible output
| 2 | 2 | { {1}, {2} }
| 4 | 3 | { {1}, {2,3}, {3,4} }
| 4 | 6 | { {1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4} }
| 5 | 3 | { {1,2,3,4}, {2,5}, {3,5} }

This is , so shortest code in each language wins.

\$\endgroup\$
3
  • \$\begingroup\$ What does random output do to benefit this challenge? Randomness just adds boilerplate and prevents some languages from competing. That doesn't make randomness bad universally, but it does suggest that there should be a reason you involve randomness. \$\endgroup\$
    – Wheat Wizard Mod
    Nov 28, 2020 at 21:07
  • \$\begingroup\$ @WheatWizard One alternative would be "output any collection of subsets which satisfies the constraints". But that challenge is trivial: it suffices to output k different subsets, all of size \$n\choose {n/2}\$; many challenges have a built-in for this. I included the randomness to sidestep this. \$\endgroup\$ Nov 28, 2020 at 22:35
  • 1
    \$\begingroup\$ @WheatWizard Thinking about it, I now realize there is another alternative: list all acceptable collections of subsets, rather than a random collection. That seemed more tedious to me when I wrote the proposal, but it might actually be better; I'll think about it. Thanks for the comment! \$\endgroup\$ Nov 28, 2020 at 22:37
1
\$\begingroup\$

(Pan)consummate Vs

An integer \$v\$ is said to be consummate if there is an integer \$n\$ and a base \$b\$ such that \$n\$ divided by the sum of its base \$b\$ digits is equal to \$v\$.

An integer \$v\$ is said to be panconsummate if it is consummate in all bases \$b\geq 2\$. Panconsummate numbers are A058226 in the OEIS.

Your task:

Write a full program or function that takes a positive integer \$v\$ and returns two distinct, consistent values, one if \$v\$ is panconsummate, and the other if \$v\$ is not. However, the sum of your code's bytes must be panconsummate as well. Your code must work theoretically for any integer.

Truthy values:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 18, 20, 21, 23, 24, 31, 34, 36, 37, 39, 40, 43, 45, 53, 54, 57, 59, 61, 69, 72, 73, 77, 78, 81, 85, 89, 91, 121, 127, 144, 166, 169, 211, 219, 231, 239, 257, 267, 271, 331, 337, 353, 361, 413, 481, 523, 571, 661, 721, 1093, 1291, 3097

Falsey values:

13, 16, 17, 19, 22, 25, 26, 27, 28, 29, 30, 32, 33, 35, 38, 41, 42, 44, 46, 47, 48, 49, 50, 51, 52, 55, 56, 58, 60, 62, 63, 64, 65, 66, 67, 68, 70, 71, 74, 75, 76, 79, 80, 82, 83, 84, 86, 87, 88, 90, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 122, 123, 124, 125, 126, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 167, 168, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200

Note that panconsummate numbers \$v>3097\$ must be at least \$10^6\$, and the OEIS speculates that the truthy values above are all panconsummate numbers.

.

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

The Slices Puzzle Puzzle

Background

Slices is a puzzle game. Placed on a 2d map is a set of islands; possibly just a single island. Placed on each island is a set of points. The task is to draw a number of straight lines across the islands such that no point can be reached from another without crossing one of the drawn lines, or leaving an island. In other words, you partition the points with lines such that each partition contains at most one point on each island. For each level, you are given a maximum number of lines that can be drawn.

In the game illustrated below, drawing a straight line between the first and second row of points, and then a line between the second and third row of points, would create a valid partition of points.

Game illustration

Task

Your task is to write a solver for this game. The solver takes as input a set of islands, the set of points for each island plus the maximum number of lines which can be drawn. The input and output may be represented in any way, and the input may be hard-coded. Hard-coded input must show that your solution is sufficiently general. Any format will be accepted. For instance, you might implement this as a linear programme in the CPLEX format -- I haven't verified that this is possible -- or you might write some sort of brute force solution in in an imperative language. Maybe some other declarative solution works even more nicely.

Grading

Solutions will be judged by popularity. Things such as number of bytes in the solution, computational complexity (justify this if you want) and elegance could be considered.

\$\endgroup\$
10
  • \$\begingroup\$ 1) Should the lines (separating the points) be straight lines? 2) Allowing hardcoded input is different from our I/O defaults, and may interfere with code golf scoring. 3) Complexity is often hard to measure, and elegance is not an objective winning criterion. My suggestion is pure code-golf, pure fastest-code, or maybe popularity-contest. (For fastest code, you'll need to prepare some test cases, and get ready to run all submissions on your own machine. This is how we achieve objective scoring for speed.) \$\endgroup\$
    – Bubbler
    Dec 10, 2020 at 8:13
  • \$\begingroup\$ @Bubbler The lines should be straight. I would like to allow hard-coded inputs, as this makes it possible to submit a nice linear programme if that is possible. I think I will go for popularity given that there are so many interesting dimensions. I will update the question with this in mind. \$\endgroup\$
    – justinpc
    Dec 10, 2020 at 11:01
  • \$\begingroup\$ @Bubbler What do you think about the task now? \$\endgroup\$
    – justinpc
    Dec 10, 2020 at 11:06
  • 1
    \$\begingroup\$ Regardless of the challenge type, you need to provide some test cases for verifying submissions - at least a couple of easy levels and a couple of harder ones, maybe some that requires drawing lines at unexpected angles. \$\endgroup\$
    – Bubbler
    Dec 11, 2020 at 2:44
  • \$\begingroup\$ @Bubbler Will do. \$\endgroup\$
    – justinpc
    Dec 11, 2020 at 6:51
  • \$\begingroup\$ Computational geometry problems have a lot of nuance. e.g are the points in general position, or can they be collinear? Can a cut just touch a vertex, or must it actually cross an edge? Is an island just the convex hull of its points, or is it given as a polygon? Are the convex hulls (resp. polygons) of the islands guaranteed to be mutually disjoint? \$\endgroup\$ Dec 11, 2020 at 22:49
  • \$\begingroup\$ @user1502040 I will clarify these questions. I would like to make the representation of the solution as general as possible. Can you clarify what you mean by "Can a cut just touch a vertex, or must it actually cross an edge". By edge, do you mean edge of an island? Lines should not intersect with vertices. I should clarify that lines are not line segments, and that they should extend to infinity. \$\endgroup\$
    – justinpc
    Dec 12, 2020 at 5:59
  • \$\begingroup\$ @justinpc Sorry, I can see how that was confusing. I meant the conceptual edge joining two points in the same island. \$\endgroup\$ Dec 13, 2020 at 0:56
  • \$\begingroup\$ @justinpc I know most of your feedback has been discouraging, but I think this would be a fun challenge. Don't be nervous about posting it! \$\endgroup\$ Jan 3, 2021 at 22:25
  • \$\begingroup\$ @user1502040 You're right. It would be a fun challenge. I have been busy recently, and would like to put time into this when I have a spare minute. \$\endgroup\$
    – justinpc
    Jan 4, 2021 at 11:27
1
\$\begingroup\$

Given a list of strings like this (input):

["some test", "{", "some", "_subst", "ring}", "some", "other text"]

Need to combine all the elements in to one for the given substring (input).

For example:

substring = "{some_substring}"

The output list of strings will be

["some text", "{some_substring}", "some other text" ]

Here are few more possible lists of strings:

input_list = ['some test', '{', 'sub', 'string}', 'som other text']
input_list2 = ['some test', '{sub', 'string}', 'som other text']
input_list3 = ['some test', '{', 'sub', 'string}', 'som other text']
input_list4 = ['some test', '{', 'sub', 'string', '}', 'som other text']
input_list5 = ['some test {', 'sub', 'string', '}', 'som other text']
input_list6 = ['some test {', 'sub', 'string', '} som other text']

substring can be any text and it does not need to be wrapped in to round braces. If substring appears multiple times in the input string than it should be replaced as well.

Note: Elements of the string that do not contain part of the input string should be the same instances. So creating a new list from joned string will not work for this problem.

Let say these strings carry additional information like style. So removing or replacing them will remove style as well

Signature of expected function to better understand problem.

def join_variable(input_list, substring):
    # implementation
    return output_list
\$\endgroup\$
5
  • \$\begingroup\$ You need to specify a winning criterion (usually code-golf) \$\endgroup\$ Dec 22, 2020 at 17:00
  • \$\begingroup\$ Not exactly sure what do you mean. What kind of criterion? Can share some examples? \$\endgroup\$
    – Pol
    Dec 22, 2020 at 18:57
  • 3
    \$\begingroup\$ We don't host challenges where the goal is solve the problem. Rather, there must be a way to "score" solutions so they compete with each other. See why. \$\endgroup\$
    – Adám
    Dec 23, 2020 at 0:27
  • \$\begingroup\$ Got it. Alright then. Should I remove it? \$\endgroup\$
    – Pol
    Dec 23, 2020 at 13:34
  • 1
    \$\begingroup\$ You can use code-golf as a scoring criterion, I think - shortest code wins. It's the most commonly used tag here. \$\endgroup\$
    – user
    Dec 23, 2020 at 18:05
1
71 72
73
74 75
150

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .