572
\$\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

4668 Answers 4668

1
72 73
74
75 76
156
1
\$\begingroup\$

Quickly calculate \$ n! \bmod p \$

The idea is extremely simple: Given two positive integers \$ n \$ and \$ p \$, calculate the result of \$ n! \bmod p \$, where \$ p \$ is a prime.

Scoring

Your score is the highest \$ p \$ you can achieve within \$ 10 \$ seconds, by running the program \$ 10 \$ separate times. More specifically, each run-through will contain two inputs \$ n \$ and \$ p \$. You are to solve \$ n! \bmod p \$, where \$ n \$ is a random number in the range \$[1, p]\$.

You must use this program to generate the \$ 10 \$ test cases. So for example, if \$ p = 13 \$, the test case would look like this:

n, p
9, 13
3, 13
10, 13
13, 13
7, 13
13, 13
8, 13
9, 13
6, 13
4, 13

Rules

  • Make sure that each test case is run separately, meaning you are not allowed to make use of previous test cases
  • Multi-threading is disallowed
  • Official times will be tested on my machine; make sure to include specifcations on how to run it

This is , so the highest score wins!

Sandbox

  • Any loopholes that need to be addressed?
  • Is there an easy, trivial solution to this?
\$\endgroup\$
4
  • 1
    \$\begingroup\$ To force independent calculation you should invoke the program 10 separate times. Although it remains possible to store data in files or similar, it would be pretty obvious. \$\endgroup\$
    – DELETE_ME
    May 22, 2020 at 8:58
  • 1
    \$\begingroup\$ As far as I know the best-known time complexity is asymptotically \$ \widetilde O (\sqrt p)\$, although the implementation is rather tedious and uninteresting. \$\endgroup\$
    – DELETE_ME
    May 22, 2020 at 9:00
  • 1
    \$\begingroup\$ Your example test case has p=10 which isn't prime \$\endgroup\$
    – xnor
    May 22, 2020 at 10:31
  • \$\begingroup\$ @xnor Fixed, thanks. \$\endgroup\$ May 22, 2020 at 15:53
1
\$\begingroup\$

Cheat activated

Background

The game Grand Theft Auto: San Andreas went down to history also thanks to its wide selection of cheats. They're almost 90 and anyone who has ever touched this game, no doubt he tried them all!
One cheat is activated (on PC) typing in-game a secret keyword, and then boom, a jet pops out of thin air or perhaps all pedestrians look like Elvis Presley or some other rowdy effect...

They always come with this confirmation message:

enter image description here

Rockstar choosed to store them hashed, so due to collision, in addition to the intended ones there are many other strings that trigger every cheat.

Therefore I propose to solve this downside!

Task

Write a full program that prints CHEAT ACTIVATED if and only if the last part of a string is a cheat code.

Cheat codes

THUGSARMOURY
PROFESSIONALSKIT
NUTTERSTOYS
INEEDSOMEHELP
TURNUPTHEHEAT
TURNDOWNTHEHEAT
PLEASANTLYWARM
TOODAMNHOT
DULLDULLDAY
STAYINANDWATCHTV
CANTSEEWHEREIMGOING
TIMEJUSTFLIESBY
SPEEDITUP
SLOWITDOWN
ROUGHNEIGHBOURHOOD
STOPPICKINGONME
SURROUNDEDBYNUTTERS
TIMETOKICKASS
OLDSPEEDDEMON
DOUGHNUTHANDICAP
NOTFORPUBLICROADS
JUSTTRYANDSTOPME
WHERESTHEFUNERAL
CELEBRITYSTATUS
TRUEGRIME
ALLCARSGOBOOM
WHEELSONLYPLEASE
STICKLIKEGLUE
GOODBYECRUELWORLD
DONTTRYANDSTOPME
ALLDRIVERSARECRIMINALS
PINKISTHENEWCOOL
SOLONGASITSBLACK
FLYINGFISH
WHOATEALLTHEPIES
BUFFMEUP
LEANANDMEAN
BLUESUEDESHOES
ATTACKOFTHEVILLAGEPEOPLE
LIFESABEACH
ONLYHOMIESALLOWED
BETTERSTAYINDOORS
NINJATOWN
LOVECONQUERSALL
EVERYONEISPOOR
EVERYONEISRICH
CHITTYCHITTYBANGBANG
CJPHONEHOME
JUMPJET
IWANTTOHOVER
TOUCHMYCARYOUDIE
SPEEDFREAK
BUBBLECARS
NIGHTPROWLER
DONTBRINGONTHENIGHT
SCOTTISHSUMMER
SANDINMYEARS
KANGAROO
NOONECANHURTME
MANFROMATLANTIS
LETSGOBASEJUMPING
ROCKETMAN
IDOASIPLEASE
BRINGITON
STINGLIKEABEE
IAMNEVERHUNGRY
STATEOFEMERGENCY
CRAZYTOWN
TAKEACHILLPILL
FULLCLIP
IWANNADRIVEBY
GHOSTTOWN
HICKSVILLE
WANNABEINMYGANG
NOONECANSTOPUS
ROCKETMAYHEM
WORSHIPME
HELLOLADIES
ICANGOALLNIGHT
PROFESSIONALKILLER
NATURALTALENT
OHDUDE
FOURWHEELFUN
HITTHEROADJACK
ITSALLBULL
FLYINGTOSTUNT
MONSTERMASH

Input

  • A string \$s\$ over the alphabet:
    [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]

Output

  • Print CHEAT ACTIVATED if there exist a cheat code \$c\$ such that \$c\$ is a suffix of \$s\$
  • Nothing otherwise

This is , so the shortest code wins.

\$\endgroup\$
6
  • \$\begingroup\$ Do we have to output the specific Cheat activated string, or just a truthy/falsy value indicating whether or not a valid cheat code exists? (I also don't think \$i\$ is a good name for a string; is that intentional?) \$\endgroup\$ May 21, 2020 at 4:27
  • \$\begingroup\$ @my pronoun is monicareinstate Yes, that specific string, it's a little simulation. And yes, you're right \$s\$ is the canonical name, I choose "i" for input, but never mind \$\endgroup\$
    – Domenico
    May 21, 2020 at 4:39
  • 1
    \$\begingroup\$ I think that restricting the output to Cheat activated is unnecessary since it doesn't really add anything to the challenge. Consider allowing just a truthy or falsey value as output. \$\endgroup\$ May 21, 2020 at 19:01
  • \$\begingroup\$ @math junkie I'm aware that in terms of logic it's useless. But that comes if only the "recognition part" is considered being the intended challenge. From my idea, generating Cheat activated it's also a part of it... I worded it badly in the task part \$\endgroup\$
    – Domenico
    May 21, 2020 at 20:08
  • 1
    \$\begingroup\$ 18HOLES is in the cheat codes list, yet the input states that there will be no number. Is this intended? \$\endgroup\$ May 22, 2020 at 21:20
  • \$\begingroup\$ @dingledooper No, my mistake, I thought I had removed it in the last edit \$\endgroup\$
    – Domenico
    May 22, 2020 at 23:07
1
\$\begingroup\$

Convert an integer to Chinese numerals

Your task is to convert an integer from 1 to \$10^{52}-1\$ (inclusive).

The characters from 1 to 10 with their Unicode code points are:

一 1 U+4E00
二 2 U+4E8C
三 3 U+4E09
四 4 U+56DB
五 5 U+4E94
六 6 U+516D
七 7 U+4E03
八 8 U+516B
九 9 U+4E5D
十 10 U+5341

Number greater that that are composed like this:

十一 11
十二 12
...
二十 20
二十一 21
二十二 22
...
百 100
百一 101
...
百十 110
...
百九十九 199
二百 200
...
九百九十九 999
千 1000
...
九千九百九十九 9999
一万 10,000

This is where it gets interesting, because numbers bigger than 10,000 are groups in groups of four, expressed with 十, 百 and 千. These are the powers we're going to use in this challenge:

十 10 U+5341
百 100 U+767E
千 1000 U+5343
万 10^4 U+4E07
億 10^8 U+5104
兆 10^12 U+5146
京 10^16 U+4EAC
垓 10^20 U+5793
秭 10^24 U+79ED
穣 10^28 U+7A63
溝 10^32 U+6E9D
澗 10^36 U+6F97
正 10^40 U+6B63
載 10^44 U+8F09
極 10^48 U+6975

Let's go through an example with 123456789123456789 as the input (other algorithms are possible)

  • identify groups of four digits, starting from the right: 12,3456,7891,2345,6789
  • convert each group: 十二 三千四百五十六 七千八百九十一 二千三百四十五 六千七百八十九
  • insert the appropriate multipliers: 十二京三千四百五十六兆七千八百九十一億二千三百四十五万六千七百八十九

Notes

  • A leading ー MAY be dropped before 千 and 百 and MUST be dropped before 十.

IO format

The input can be an integer in any reasonable format. You can use a string/sequence of characters or a number type, if your language supports it. 128-bit numbers are not large enough, by the way.

Testcases

input output
1 一
2 二
3 三
4 四
5 五
6 六
7 七
8 八
9 九
10 十
15 十五
20 二十
31 三十一
100 百
123 百二十一
1000 千
8346 八千三百四十六
10000 一万
50010 五万十
100000 十万
123456789123456789 十二京三千四百五十六兆七千八百九十一億二千三百四十五万六千七百八十九
1234567891234567891234567891234567891234567891234567 一千二百三十四極五千六百七十八載九千百二十三正四千五百六十七澗八千九百十二溝三千四百五十六穣七千八百九十一禾予二千三百四十五垓六千七百八十九京一千二百三十四兆五千六百七十八億九千百二十三万四千五百六十七

Standard code-golf rules apply. The shortest code in bytes wins.

References

\$\endgroup\$
8
  • \$\begingroup\$ I assume this is meant to be code-golf? While the tag is technically enough, I think it is better to have a brief inclusion of that in the body of the challenge. \$\endgroup\$ May 29, 2020 at 18:44
  • \$\begingroup\$ @FryAmTheEggman yes it should be codegolf. \$\endgroup\$
    – corvus_192
    May 29, 2020 at 19:41
  • \$\begingroup\$ It'd be helpful if you include the code points for the Unicode characters. \$\endgroup\$ May 29, 2020 at 21:13
  • 1
    \$\begingroup\$ As someone who is actively learning Japanese, they're called Chinese numerals because they were taken from China's numeral system. Japanese numerals are a whole different, extremely complicated thing. \$\endgroup\$ May 29, 2020 at 21:51
  • \$\begingroup\$ "A leading ー MAY be dropped before 千 and 百". They MUST be dropped in Sino-Korean numerals, tho. \$\endgroup\$ Jun 1, 2020 at 4:07
  • \$\begingroup\$ What about 恒河沙, 阿僧祇, 那由他, 不可思議, and 無量大數? \$\endgroup\$ Jun 1, 2020 at 4:12
  • \$\begingroup\$ Mathematica has IntererName[#, "Words", Language -> "Chinese"]&, but, unfortunately, it can't handle numbers this large :(. \$\endgroup\$ Jun 2, 2020 at 11:55
  • \$\begingroup\$ Can we take input in base 10000? (Usually done when doing big integer multiplication with int32 so seems somehow reasonable) \$\endgroup\$
    – l4m2
    Jun 19, 2020 at 4:26
1
\$\begingroup\$

The Double-Castle Numbers™

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

Divide into 2 isosceles triangles

Given the measures of two of the interior angles of a triangle (x and y; the other angle can be easily calculated with 180 - x - y), draw a line segment that cuts this triangle into two isosceles triangles. You need to output the angle measures of both of your triangles.

However, because the base angles are the same, you only need to output the list [apex angle, base angle] of the divided triangles for both of the isosceles triangles. You can output the divided triangles in any order.

An example

Say your input is 100, 60.

Let's take a look at the complete triangle first. The triangle looks approximately like this.

   100

60            20

Now we try to divide one of the angles such that two divided triangles are both isosceles triangles.

       100

(40,20)           20

Now our bottom triangle is an isosceles triangle, since both of the base angles
of the bottom triangle are 20. The angle measures of the bottom triangle
looks approximately like this.

       140
20             20

Now, is the top triangle an isosceles triangle?

    100
          40
40

It is an isosceles triangle, because two of the angle measures are 40.

Therefore, for [100, 60], you need to output [[100, 40], [140, 20]].

Example cases

[20, 40] -> [[140, 20], [120, 40]]
[45, 45] -> [[90, 45], [90, 45]]
[36, 72] -> [[72, 36], [36, 72]]
[108, 36] -> [[108, 36], [36, 72]]
\$\endgroup\$
1
\$\begingroup\$

King+queen vs king checkmate

You are given a chess position, represented either in FEN or as a two-dimensional diagram like this (the example test cases will be using the latter format):

...k....
........
...K....
.....Q..
........
........
........
........

In the examples, K represents the white king, Q represents the white queen, k represents the black king and . represents blank space. You may choose different consistent values instead of these characters. You may also input the diagram as a list of lists or in any other way that is allowed by default for two-dimensional arrays.

It is white's move. The position will always be reachable from the starting position by a sequence of valid moves.

You have to find the minimum number of moves White must do to checkmate Black, assuming perfect play by Black.

Test cases

Incomplete: too many test cases for 1 and no test cases for >1.

...k....
........
...K....
...Q....
........
........
........
........

Output: 1

k.......
........
..K.....
........
........
........
........
.Q......

Output: 1

k.......
..KQ....
........
........
........
........
........
........

Output: 1

\$\endgroup\$
4
  • \$\begingroup\$ I know it would be a lot different, but have you considered the more general question that allows any (valid) disposition of the three pieces? Then the task would be to find the minimum number of moves to checkmate... Isn't it a bit "tautological" to input a position of which I already know it only takes one move to checkmate? -I most probably know also what this move is- \$\endgroup\$
    – Domenico
    Jun 8, 2020 at 16:02
  • \$\begingroup\$ Moreover if it happens to be only 1 move from checkmate (or also, if you want, if the moves can be all determined), with this broader task you could totally ask what this (these) move is (are). \$\endgroup\$
    – Domenico
    Jun 8, 2020 at 16:11
  • 1
    \$\begingroup\$ I think asking for the optimal depth to mate in White moves is a better question (far less simple than this, but still much less complicated than a proper chess engine); I'll change the proposal later; it's late here. \$\endgroup\$ Jun 8, 2020 at 16:30
  • \$\begingroup\$ This is ambitious for code golf! Is the point to build an endgame tablebase? at least as much of it as is needed to solve the given test case positions? Test case: wKa1Qb2 bKf5 WTM wins in 10... \$\endgroup\$
    – Rosie F
    Jul 19, 2020 at 19:28
1
\$\begingroup\$

Underfull \hbox (badness 10000)

Every TeX user has been warned many times that their hboxes are terribly underfull or overfull. So much badness! This challenge is to rate how badly underfull or overfull a line of text is for a simplified line wrapper.

Task

You're given a space-separated string or list of words. Output the minimal badness achievable for the first line.

The text needs to be wrapped on a line that's 10 characters wide, but it can only be split on spaces, no in the middle of words. Any letter that spills beyond the width counts for 1000 overfull badness each, and each leftover empty position at the end of the line counts for 1000 underfull badness.

Example

For input "Overfull hbox", we can keep the word "hbox" in the first line for 3000 overfull badness, or wrap it to the second line for 2000 underfull badness which is smaller, so the output is 2000.

0123456789

Overfull hbox
          ^^^
Overfull
hbox    ^^

Note that we don't care about badness of the second line.

Details

The input is a space-separated string or a list of words made of letters a-zA-Z. It won't have any words more than 10 letters long, or be more than 20 characters in total. It won't be empty or have any zero-length words.

Test cases

TODO


Sandbox: Is it OK to have a multiplier of 1000 for theme? Should the underfull and overfull badness penalties be different, like 1000 vs 2000?

\$\endgroup\$
3
  • \$\begingroup\$ In my opinion, this might be a bit too simple for the big badness theme to be worth it. I feel like most golfing languages might spend nearly half their code multiplying by 1000 (throwing it together in Pyth, I got 1/4 used for multiplying). If it was say, the badness of each of the lines it might feel better. I don't feel terribly strongly about this though. \$\endgroup\$ Jun 9, 2020 at 20:52
  • \$\begingroup\$ @FryAmTheEggman That for the feedback. I'm now thinking the challenge is too simple overall, multiplier or not. What would you think of something like words being able to be broken at certain places in the middle, either explicitly marked or dervied from some property of the letters? \$\endgroup\$
    – xnor
    Jun 9, 2020 at 21:14
  • \$\begingroup\$ I think some level of TeX uses hyphens to indicate possible word breaks, but they don't count for the length of words if unused. Adding that may help, while also being on theme? \$\endgroup\$ Jun 9, 2020 at 21:17
1
\$\begingroup\$

Lucky dice rolls

In pen and paper roleplaying games dice are used for various chance calculations. The usual way to describe a roll is \$n\textbf{d}k\$ where \$n\$ is the number of dice and \$k\$ is the number of faces on a die. For example \$3d6\$ means that you need to roll the classical 6-sided die 3 times (or roll 3 dice at the same time). Both \$n\$ and \$k\$ are positive integers.

Usually the values are then summed and they are used for various game mechanics like chance to hit something or damage calculations.

A lucky roll will mean that you have Fortuna's favor on your side (or against you). Luckiness is an integer number that increases (or decreases) the sum in the following way. The roll is modified to \${(n+|luck|)}\textbf{d}{k}\$ and the sum will be the \$n\$ best (or worst) values. Each die is fair, so they will have the same probability for the outcome of the possible values.

The \$luck\$ can be a negative number, in this case you need to get the \$n\$ worst values for the sum.

Input

The integer values for \$n,k,luck\$ in any way.

Output

The expected value for the sum of the (un)lucky roll. The expected value is \$\sum{x_{i} p_{i}}\$ where \$x_{i}\$ is the possible outcome of the sum and \$p_{i}\$ is the probability for \$x_{i}\$ occuring, and \$i\$ indexes all possible outcomes.

Examples

n,k,luck    expected value
1,6,0       3.5
2,6,0       7
2,6,-1      5.541666666666667
2,6,1       8.458333333333334
2,10,-1     8.525
2,10,1      13.475

Scoring

Shortest code in bytes wins.

Good luck! ;)

\$\endgroup\$
4
  • \$\begingroup\$ Probably worth including a definition of expected value. To what precision should the output be determined? \$\endgroup\$
    – Dingus
    Jun 10, 2020 at 12:50
  • \$\begingroup\$ @Dingus Is it now a bit more understandable? \$\endgroup\$ Jun 10, 2020 at 13:29
  • 1
    \$\begingroup\$ Yes, that's good, though I'd suggest tweaking the wording a bit: 'The expected value is \$\sum x_ip_i\$ where \$x_i\$ is a possible value for the sum, \$p_i\$ is the probability of that sum occurring, and \$i\$ indexes all possible outcomes.' Perhaps I should rephrase my question about precision - what numeric formats are acceptable for output? Floats are obviously allowed, but do you require a certain number of decimal places? Is it acceptable to output rationals (for languages that support this)? What about 2 integers representing numerator and denominator, respectively? \$\endgroup\$
    – Dingus
    Jun 11, 2020 at 12:13
  • \$\begingroup\$ hmm, that's a valid point, but I don't know which one it should be. \$\endgroup\$ Jun 11, 2020 at 12:19
1
\$\begingroup\$

Iterate diagonally over nxn matrix

Given a matrix of size n, output the matrix into another matrix of size n such that:

  • the outputted matrix, when traversed diagonally,will result in the original matrix.

For example, taking this 3x3 matrix, we arrive at our solution: enter image description here

Which is checked by following the line beginning at 1: enter image description here

Specifications:

  • The matrix will always be square
  • You must output a grid with the same size as you were given (e.g. Not as a triangle)
  • Mark the end of each row with a delimiter such as \n or .

Examples:

Example 1

Input:

1 2 3
4 5 6
7 8 9

Output:

1 3 6
2 5 8
4 7 9

We can check the output by iterating over the array diagonally (follow the arrows for steps 1-5), which will give us the original matrix.

  ↗ ↗ ↗
1 ↗ ↗ ↗
2 ↗ ↗ ↗
3  4 5 

Example 2

Input:

a b c d
e f g h
i j k l
m n o p

Output:

a c f j
b e i m  
d h l o
g k n p

We can check this by iterating the array in steps 1-7 which outputs the given array.

  ↗ ↗ ↗ ↗
1 ↗ ↗ ↗ ↗
2 ↗ ↗ ↗ ↗
3 ↗ ↗ ↗ ↗
4  5 6 7

Hint:

Looking at the coordinates, we can see a pattern:

(0,0) -> (0, 1) -> (1, 0) -> (0, 2) -> (1, 1) -> (2, 0) -> (1, 2) -> (2, 1) -> (2,2)
\$\endgroup\$
3
  • \$\begingroup\$ Do the matrices always consist of one character per cell? \$\endgroup\$
    – Trebor
    Jun 19, 2020 at 0:45
  • \$\begingroup\$ they don't have to, but that can be a specification. Thoughts? \$\endgroup\$
    – Peter S
    Jun 19, 2020 at 1:20
  • \$\begingroup\$ Perhaps the title could be a bit more descriptive, like "put the contents of a matrix into its antidiagonals". Then you could add a definition of the antidiagonals, and then a description of how you traverse the matrix to get the ordering for the antidiagonalization. \$\endgroup\$
    – Giuseppe
    Jun 19, 2020 at 17:42
1
\$\begingroup\$

I am surely the fastest!... asymptotically

Posted.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ Slightly related: codegolf.stackexchange.com/questions/182733/… \$\endgroup\$ Jun 18, 2020 at 3:43
  • \$\begingroup\$ @mypronounismonicareinstate The challenge in your link is slightly more difficult than mine, since prime factorization is not NP-complete. (Godel machines are also a completely different solution) \$\endgroup\$
    – Trebor
    Jun 18, 2020 at 3:50
1
\$\begingroup\$

Posted.

\$\endgroup\$
7
  • \$\begingroup\$ It would ease readability if all of the test cases were in a single code block, with empty lines in between. Then you can add the explanations afterward for cases that really need it. \$\endgroup\$ Jun 23, 2020 at 17:43
  • \$\begingroup\$ Is there a limit to the depth of the tree? \$\endgroup\$ Jun 23, 2020 at 17:44
  • \$\begingroup\$ The problem statement involves a bunch of high-level math terms, which can deter some people. If possible, the challenge would be more approachable if you add an alternate definition, e.g. relating isomorphism to permutations (kinda) of the underlying set. For the explanation of the first case, it would be good to rewrite each line using normal infix notation, e.g. (x+y)+z = x+(y+z) and x+(-x) = 0. \$\endgroup\$ Jun 23, 2020 at 17:49
  • \$\begingroup\$ @fireflame241 I hid the technical details. And could you please explain why I should put a limit to the depth? In what ways does that make the challenge better? ;) \$\endgroup\$
    – Trebor
    Jun 24, 2020 at 1:25
  • \$\begingroup\$ I was just wondering. A golfer might be able to optimize for a limit depth of 2, but it's more interesting to have an arbitrary rank \$\endgroup\$ Jun 24, 2020 at 1:29
  • \$\begingroup\$ @fireflame241 After some thoughts, it is clear that every theory can be translated to one that has a limit depth of 2 ;) Also every practically interesting case happens at depth 2. So I think I'll add that. \$\endgroup\$
    – Trebor
    Jun 24, 2020 at 1:53
  • \$\begingroup\$ Now that this has been posted to main, could you delete this proposal to create more space for new answers? \$\endgroup\$ Sep 25, 2020 at 1:05
1
\$\begingroup\$

Write an expect program

If you're not already familiar, expect is a Tcl extension that makes it easier to script interactions with programs. It allows you to spawn a process, send lines to it, and wait for expected output before continuing.

Challenge

The aim of this challenge is to write a very simple implementation of expect in as few bytes as possible (code golf). It should parse a script, with commands separated by newlines. Then it should use this script to interact with a program.

Here are the commands for this implementation:

  • spawn <cmd>: spawn a process.
  • write <line>: write a line into the process' input.
  • expect <line>: expect a substring from the process' output. No timeout is necessary, if the line never appears it is OK for the program to hang.
  • print <line>: print something to stdout.

You can assume that only one spawn will be found in the script, and that it will appear before any write or expect. If your language of choice doesn't have the ability to spawn processes, you can write a helper program in a different language that can pipe input and output through your main program. How you do this is left up to you.

Example script:

spawn /bin/bash
write whoami
expect root
write uname -a
expect Linux
print i am root on Linux

Output:

this is Linux

or

spawn /bin/bash
write uname -a
expect Windows
print this is Windows

(no output.)

Restrictions

In order to keep things fresh, the use of the standard expect utility or any libraries that emulate expect functionality (such as pexpect on Python or jest on Node) are not allowed. The idea is that the bulk of the functionality should be written in the program and not handled in a library.

\$\endgroup\$
7
  • \$\begingroup\$ Will the script always have 4 commands, namely those 4 in that order? \$\endgroup\$
    – Adám
    Jun 30, 2020 at 3:52
  • 1
    \$\begingroup\$ While prohibiting the standard expect utility is probably unambiguous, prohibiting expect-like libraries could potentially be problematic because there's no objective way to judge if any given feature is expect-like. I could claim that addition is expect-like, and you'd be hard pressed to counter that. \$\endgroup\$
    – Adám
    Jun 30, 2020 at 3:55
  • \$\begingroup\$ The script could have more commands. I will update the examples to reflect that change. As far as the library restrictions, I could remove them - I do see where it could lead to being a problem. Perhaps I could make it more unambiguous by mentioning specific libraries (one that comes to mind is python-pexpect.) \$\endgroup\$
    – nununoisy
    Jun 30, 2020 at 16:10
  • \$\begingroup\$ Can we make any assumptions about the order of the commands? \$\endgroup\$
    – Adám
    Jun 30, 2020 at 18:06
  • \$\begingroup\$ Yes, I forgot to mention that spawn will come before any command that needs the process. It should be updated now. \$\endgroup\$
    – nununoisy
    Jun 30, 2020 at 20:23
  • \$\begingroup\$ What should be done if the expect string is not found? \$\endgroup\$
    – DELETE_ME
    Jul 10, 2020 at 3:26
  • \$\begingroup\$ It was mentioned above but for clarity: 'No timeout is necessary, if the line never appears it is OK for the program to hang.' \$\endgroup\$
    – nununoisy
    Jul 10, 2020 at 19:58
1
\$\begingroup\$

Count faces in ASCII art

Here's a 2x2 ASCII art face:

oo
__

Here's a 3x3 ASCII art face:

o o
   
___

Here's a 4x4 ASCII art face:

o  o
    
    
____

Your task is to count faces in an ASCII art.

Here's something closer to an actual specification.

The bottom of any face must be a contiguous horizontal row of underscores, such that cells to the right and to the left of it do not contain underscores. If the row is considered as the bottom row of an ASCII square, then that square forms a face if and only if its bottom row is all underscores, its upper left and upper right corners are os, and the rest is whitespace.

You may assume all lines in the input to be padded on the right with whitespace to an equal length. Faces cannot be smaller than 2x2.

[todo: more test cases]

o o
   oo
_____

Output: 0

Sandbox stuff

Is it clear what is considered a face and what is not?

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

The almost impossible chessboard puzzle

Background

Prisoner 1 walks in, sees a chessboard (8x8) where each square has a coin on top, flipped either to heads or tails. The warden places the key under one of the squares, which prisoner 1 sees. Before prisoner 1 leaves, he must turn over one and only one coin. Prisoner 2 then walks in and is supposed to be able to figure out which squares the key is in just by looking at the arrangement of coins.

The prisoners are granted a reward if prisoner 2 correctly tells the location of the key.

Task

Write two program/functions:

  • One for prisoner 1, which outputs the location of the coin to flip given the current board state and the location of the key
  • One for prisoner 2, which outputs the location of the key given the board state after prisoner 1 doing the flip.

If both the solutions are function they may share code with an auxiliary function, though the solutions may not share any information.

Scoring

This is so shortest bytes wins


Heavily inspired by The almost impossible chessboard puzzle and The impossible chessboard puzzle

Sandbox

  • Should I include the tag
  • Any more tags I should add
  • Is something not clear

Also pretty sure this will require a lot of rewording before it can be asked

\$\endgroup\$
3
  • \$\begingroup\$ Can the two solutions share code, for example by having two functions that both call a third auxiliary function? \$\endgroup\$
    – Zgarb
    Jul 7, 2020 at 9:20
  • \$\begingroup\$ Yes, the two solutions can share code but they cannot share information. Updated the question to reflect that \$\endgroup\$ Jul 7, 2020 at 9:30
  • \$\begingroup\$ Can the auxiliary function be one of the programs? Can both of the programs be the same (and only counted once for bytes, having different behavior based on whether a second argument is passed)? \$\endgroup\$ Jul 9, 2020 at 0:25
1
\$\begingroup\$

Infinite Mirrors Quine

This challenge is to create a program that prints out code that prints the original. Basically, this program should take an input, check if it's A, and if so, run section A. Otherwise, if it's B, run section B. Finally, if it's neither, print nothing. Section A should print the code in section B, and section B should print the code in section A. Section A's code and section b's code should not be identical. Shortest code wins!

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

Continuous Everywhere, Differentiable Nowhere

Objective

Build the Weierstrass function \$f(x) = \sum_{n=0}^\infty a^n \cos(b^n n x)\$, where \$a \in (0,1)\$, \$b\$ is an odd positive integer, and \$ab > 1 + 1.5\pi\$.

What's the fuss?

The Weierstrass function is an example of a function that is continuous everywhere, but differentiable nowhere.

Format

Using floating-point number is permitted. Though it will be preferred to use a datatype that is able to represent arbitrary real numbers.

Rules

\$a\$ and \$b\$ are up to your choice, as long as they satisfy the conditions.

For every \$x \in \mathbb{R}\$, evaluation of \$f(x)\$ must halt.

Note

The fact that the function above is defined as an infinite series might seem to contradict the rule, but it actually doesn't. The Weierstrass function is computable, implying that it is possible to halt for every input. In particular, if it were to be implemented over floating-point numbers, it suffices to stop summing when the summand becomes denormal.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ I really doubt that the Weierstrass function is computable since its domain is real numbers and computer programs can only compute a select few functions on arbitrary real input. The Weierstrass function is very likely computable on some restricted domains like the rational numbers. Really this question has a some issues with the fact that continuity and differentiabilty are usually discussed in the context of real numbers, but does not require that it work on actual real numbers. \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 1:36
  • 1
    \$\begingroup\$ For example as it currently stands I could do something like just output the floating point zero regardless of input. This is approximates some cewdnw function, in fact it comes arbitrarily close to approximating an infinite number of cewdnw functions. For example just the Weierstrass function multiplied by a really small positive number. \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 1:38
  • 1
    \$\begingroup\$ However if you do restrict it to real numbers you run into the problem that very few functions are computable on real numbers. (The issue here is that a program on real numbers must be ready to accept an infinite string of input). I suggest restricting your domain to something like rational numbers, but note that this alters continuity and differntiability in subtle ways so it is not a simple patch. \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 1:41
1
\$\begingroup\$
\$\endgroup\$
15
  • \$\begingroup\$ Comment: while this problem is solvable in polynomial time, I guess the code-golf submissions are going to take exponential time. \$\endgroup\$
    – DELETE_ME
    Jul 16, 2020 at 6:40
  • \$\begingroup\$ @user202729 Do you actually have a polynomial tome algorithm? \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 12:23
  • \$\begingroup\$ Yes. -- -- -- -- -- -- \$\endgroup\$
    – DELETE_ME
    Jul 16, 2020 at 13:29
  • \$\begingroup\$ @user202729 What is it? \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 13:34
  • \$\begingroup\$ Iterate over substrings of the string, then check if it satisfies with f(left, right, prefix) = (can eraser[:prefix] be formed from string[left:right] by repeated erase operations?) At most this is O(n^6). \$\endgroup\$
    – DELETE_ME
    Jul 16, 2020 at 13:38
  • \$\begingroup\$ I cannot understand your notation so I do not understand your algorithm, but I will say it seems to me that checking whether an eraser erases a string should naïvely take O(2^n) since in strings like "ototoo" it matters which "oto" you erase first thus you have to branch between the possible choices. \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 14:22
  • \$\begingroup\$ The notation is like Python, string[left:right] is character from left..right (inclusive), eraser[:prefix] is eraser[0:prefix]`, characters are 0-indexed. \$\endgroup\$
    – DELETE_ME
    Jul 16, 2020 at 14:32
  • \$\begingroup\$ It's possible to compute each f(left, right, prefix) value from O(n) other values (dynamic programming) and there's only O(n^3) possible parameters. \$\endgroup\$
    – DELETE_ME
    Jul 16, 2020 at 14:33
  • \$\begingroup\$ @user202729 Ok, It looked like python but it didn't make any sense as python code, might you actually write this in python? It still doesn't make a whole lot of sense and even then feels like it should be O(2^n) because of "can [...] be formed from [...] by repeated erase operations?" seems to be an O(2^n) check to me. \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 14:37
  • \$\begingroup\$ f=lambda left, right, prefix: string[left:right]==eraser[:prefix] or (left!=right and (string[right-1]==eraser[prefix-1] and f(left, right-1, prefix-1) or f(left, right, len(eraser) or any(f(left, middle, prefix) and f(middle, right, 0) for middle in range(left+1, right)))), something like that, with caching. \$\endgroup\$
    – DELETE_ME
    Jul 16, 2020 at 14:42
  • \$\begingroup\$ Looks like this problem (or a similar one) has already appeared somewhere else. See codeforces.com/blog/entry/14090 \$\endgroup\$
    – DELETE_ME
    Jul 16, 2020 at 14:46
  • \$\begingroup\$ @user202729 Ok so I've spent a little while unpacking that algoirthm in the blog post and it seems to be O(2^n) unless there is some invariant I am missing. I will say I still do not have the slightest understanding of your algorithm. \$\endgroup\$
    – Wheat Wizard Mod
    Jul 16, 2020 at 15:22
  • \$\begingroup\$ About the blog: if you understood it then there is no way it can be 2^n because there are only n^2 different states (possible parameter values) of the dp function . \$\endgroup\$
    – DELETE_ME
    Jul 17, 2020 at 2:44
  • \$\begingroup\$ @user202729 The issue is that calculating a cell is not contsant time sometimes we are required to solve the entire problem again on a smaller string to fill in a cell. You can make schemes where the number of these cells is linear witht he size of the program, hence exponential time overall. however at this point I have found a dynamic programming algo that does this in O(n^4), so it doesn't matter much to me any more. \$\endgroup\$
    – Wheat Wizard Mod
    Jul 17, 2020 at 3:23
  • \$\begingroup\$ Now that this has been posted to main, could you delete this proposal to create more space for new answers? \$\endgroup\$ Sep 25, 2020 at 1:03
1
\$\begingroup\$

Ant Storage Labyrinth

Description

Using a simplified model, the place where ants store their food can be thought of as an \$n\times n\$ matrix. Each entry of the matrix is an integer that encodes how full that specific spot is, according to the following correspondence:

  • 0 denotes an empty spot (the ants can add two more units of food),
  • 1 denotes a half-filled spot (the ants can add one more unit of food),
  • 2 denotes a filled spot (no more food can be stored in there).

Imagine an ant carrying \$f\$ units of food, that enters the "storage room" at a specific position (row \$i\$, column \$j\$ of the matrix). The ant can move one unit left, right, up or down with each step, and it can drop \$2-q\$ units of food at each spot it walks over (where \$q\$ is the initial capacity of that spot – either 0, 1 or 2 as described above). Your task is to find the length of the shortest path the ant can choose in order to store all \$f\$ units of food.

Example

Let's say that the ant carries \$4\$ units and enters the following storage room (\$6\times 6\$ matrix) at position \$(3,3)\$ (1-indexed):

$$\left[\begin{matrix}0&2&2&2&2&2\\2&1&2&2&2&1\\1&2&\color{red}{1}&2&1&1\\2&1&2&2&2&2\\2&2&2&2&2&2\\1&2&2&1&2&2\\\end{matrix}\right]$$

It drops \$1\$ unit right where it starts (\$3\$ left), then it has four optimal choices:

  • 3 moves to the right, and 1 up,

    $$\longrightarrow\left[\begin{matrix}0&2&2&2&2&2\\2&1&2&2&2&1\\1&2&\color{green}{2}&\color{red}{2}&1&1\\2&1&2&2&2&2\\2&2&2&2&2&2\\1&2&2&1&2&2\\\end{matrix}\right]\longrightarrow\left[\begin{matrix}0&2&2&2&2&2\\2&1&2&2&2&1\\1&2&\color{green}{2}&\color{green}{2}&\color{red}{1}&1\\2&1&2&2&2&2\\2&2&2&2&2&2\\1&2&2&1&2&2\\\end{matrix}\right]\longrightarrow\left[\begin{matrix}0&2&2&2&2&2\\2&1&2&2&2&1\\1&2&\color{green}{2}&\color{green}{2}&\color{green}{2}&\color{red}{1}\\2&1&2&2&2&2\\2&2&2&2&2&2\\1&2&2&1&2&2\\\end{matrix}\right]\\\longrightarrow\left[\begin{matrix}0&2&2&2&2&2\\2&1&2&2&2&\color{red}{1}\\1&2&\color{green}{2}&\color{green}{2}&\color{green}{2}&\color{green}{2}\\2&1&2&2&2&2\\2&2&2&2&2&2\\1&2&2&1&2&2\\\end{matrix}\right]\longrightarrow\left[\begin{matrix}0&2&2&2&2&2\\2&1&2&2&2&\color{green}{2}\\1&2&\color{green}{2}&\color{green}{2}&\color{green}{2}&\color{green}{2}\\2&1&2&2&2&2\\2&2&2&2&2&2\\1&2&2&1&2&2\\\end{matrix}\right]$$

  • 2 moves to the left, and 2 up,

  • 1 move up, 2 left, and one up,

  • 1 move up, 1 left, 1 up, 1 left.

All of these require \$4\$ steps, so the final answer is \$\boxed{4}\$.

Test cases

In progress. I need help coming up with interesting test cases / maybe a verification program.

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

Error Once, Hello World Twice

Your task here is to write a Hello World program that, (no, this is not Do X Without Y!) contains two exact copies of the same string. to avoid trivial solutions like print "Hello World!"# your program must error out with only one copy.

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

Sandbox

  • Wording?
  • Tags?
  • Length?
  • Interesting enough to be posted?
\$\endgroup\$
5
  • \$\begingroup\$ I double the source code, you print hello world? (I'm not saying this is a dupe, I'm asking if that accurately summaries the challenge.) \$\endgroup\$
    – lyxal
    Jul 25, 2020 at 11:28
  • \$\begingroup\$ @Lyxal Yep. (15chars) \$\endgroup\$ Jul 25, 2020 at 12:04
  • \$\begingroup\$ What if, rather than erroring out with one copy, make it so that it's valid if it prints out anything other than "Hello world"? \$\endgroup\$
    – Beefster
    Jul 30, 2020 at 16:40
  • \$\begingroup\$ @Beefster Maybe... But that's probably not what I'm intending. I might consider later. \$\endgroup\$ Jul 31, 2020 at 10:25
  • \$\begingroup\$ @HighlyRadioactive this also reminds me of my 2 cats in a quine challenge from a while ago. My main concern here is that "erroring out" is nebulous and different for every language. You could also make it so that the program must print nothing unless it's duplicated. \$\endgroup\$
    – Beefster
    Jul 31, 2020 at 16:13
1
\$\begingroup\$

Successive operator sequences

A successive operator sequence (made up terminology) is a sequence of the form \$a(n + 1) = a(n) \text{ op } n\$ where op cycles through a set of operators and \$a(n)\$ represents the \$n\$th term of the sequence.

For examples, if we set the operators to addition, multiplication and subtraction and \$a(1) = 1\$. then we will get the following sequence (which is also A047908):

a(1)                    = 1
a(2) = a(1) + 1 = 1 + 1 = 2
a(3) = a(2) * 2 = 2 * 2 = 4
a(4) = a(3) - 3 = 4 - 3 = 1
a(5) = a(4) + 4 = 1 + 4 = 5
a(6) = a(5) * 5 = 5 * 5 = 25

Task

Write a program/function to output the \$n\$th term of a successive operator sequence given its initial term and operators.

Operators your program/function must support:

  • multiplication
  • addition
  • subtraction
  • integer division (rounded towards negative infinity)

Input Format

The operators are inputted as a string or array of character where each character represents an operator, you may choose your own mapping of character to operator.

Scoring

This is so shortest bytes wins.

Testcases

# first term, operators, n  ->  nth term
0,   ["+", "-", "*", "/"], 6   ->  4
1,   ["+", "*", "-"],      1   ->  1
1,   ["+", "*", "-"],      3   ->  4
1,   ["+", "*", "-"],      10  ->  199
1,   ["*", "+", "-"],      7   ->  -1
50,  ["*", "+", "-"],      1   ->  50
50,  ["*", "+", "-"],      4   ->  49
-10, ["*", "/", "-"],      5   ->  -32
-10, ["*", "/", "-"],      3   ->  -5
1,   ["+", "+", "*"],      5   ->  16
2,   ["+", "*"],           5   ->  36
0,   ["+"],                3   ->  3

Inspired by the sequence A047908

\$\endgroup\$
4
  • 1
    \$\begingroup\$ Suggested test cases: only one operation; duplicate operations (like ["+","+","-"]); more than 4 operations. Also, should integer division round toward zero, toward negative infinity, or something else? \$\endgroup\$
    – Zgarb
    Jul 18, 2020 at 19:10
  • \$\begingroup\$ Does each string have to be one byte? \$\endgroup\$ Jul 19, 2020 at 19:26
  • \$\begingroup\$ @fireflame, they have to be a single character not a single byte. \$\endgroup\$ Jul 20, 2020 at 15:23
  • \$\begingroup\$ Why rounding division towards negative infinity? A lot of languages round integer division towards zero and this will add complexity just to do that. Notice that A047908 doesn't use division at all so why add it and make it a problem? Maybe even make it optional which way your answer does it as long as it's stated. \$\endgroup\$
    – Noodle9
    Jul 27, 2020 at 17:59
1
\$\begingroup\$

CoGo Rally

There's a game called Robo Rally, in which players "program" their robots five moves ahead, then simultaneously perform the moves, one at a time. The robots move over a "factory floor" grid, with the aim being to reach certain points on the board, in sequence, before the other robots do the same.

Game Rules

For the purposes of this challenge, the rules will be simplified as follows:

  • Each robot starts with 6 lives
  • Each robot has a different, randomly assigned starting position (out of a fixed set of starting positions)
  • The aim of the game is to reach all three checkpoints in the assigned order, before any other robot does the same.

Movement Options

Each turn, your robot can make any one of the following movements:

  • Rotate Clockwise 90 degrees
  • Rotate Counter-clockwise 90 degrees
  • Rotate 180 degrees
  • Move Forward One
  • Move Forward Two
  • Move Forward Three [can only be used once until the next checkpoint is met]
  • Reverse One (and stay facing the same way)
  • Stay Still and gain 1 life, up to the maximum of 6

Your moves are pre-programmed in blocks of five, so choose carefully! The board may well be in a very different state in five moves time to what you think it will be.

Additionally, each movement is assigned a priority from 1-100. When you choose your block of five movements (you may use each movement any number of times, except the "move forward three", to form your five total movements) and the order they will occur in, you are also given five random numbers 1-100 to assign - one to each movement. Higher numbers will take priority where movements would cause two robots to enter the same space, for example.

Board Items

The board contains the following items:

  • Floor - the default tile on the board. No special effect.
  • Walls - block a robot's path. If a robot moves forward or backward into a wall, it wastes that move (i.e. stays still, but doesn't gain a life). If the robot used "Move Forward Two", for example, it may be possible that the Robot can only move Forward One, and then stops infront of a wall, wasting the second part of the movement.
  • Laser gun - fire in a straight line in a specific direction until they hit a wall or a robot. If a robot is ontop of a laser gun, it will be hit but the laser won't fire further. While moving forward two or three, a robot may pass over the path of a laser gun without being affected by it.
  • Conveyor Belts - at the end of a turn (single movement option), a conveyor belt will move the robot one space in the direction the conveyor is pointing. Doesn't block lasers. Conveyor belts NEVER ROTATE ROBOTS, even if they move the robot in a different direction to the one it is facing. While moving forward two or three, a robot may move over a conveyor belt without being affected by it.
  • Checkpoints (1,2,3) - act as a save point on the Robot's path and also heals all of a robot's lives and resets their use of the "Move Forward Three" action, the first time the checkpoint is visited. Checkpoints must be visited sequentially to be activated. Acts as a piece of floor in all other respects. Robots must END THEIR TURN ON THE CHECKPOINT, after interaction with other Robots; and not just pass over it.
  • Holes - move the robot back to the previously visited checkpoint, or start position. Robot loses half its remaining life, rounded down. Holes act immediately, as soon as the robot enters the space - it doesn't wait for the "board interactions" part of the turn order.

Interactions

Objects interact as follows:

  • If a Robot moves into a space where another robot already exists, the other robot is shoved (moved) in the direction that the first robot was moving, one space; unless there is a wall or laser in the way. This effect may stack if multiple robots are in a line (i.e. all robots are shoved one space). This may cause a robot to fall into a hole or onto a conveyor belt.
  • Moving off the edge of the board has the same effect as moving into a hole
  • If a Laser fires and hits a robot, the robot stops the laser beam, and takes one damage.
  • If a robot is facing another robot in a straight line with nothing blocking in between (i.e. no walls or other robots), the target robot takes 1 damage
    • Therefore If two robots are facing towards each other with nothing blocking in between (i.e. no walls or other robots), both robots take one damage.

Turn Order

  1. determine (program) 5 movement options
  2. determine Priorities (1-100) for these five turns
  3. The programmed actions occur:
    a. The first movement occurs for each player, in priority order from highest to lowest. Holes are acted on immediately (a robot cannot pass over a hole).
    b. Robot Interactions are resolved (e.g. if one robot shoves another one)
    c. Board Items act (lasers, conveyor belts, checkpoints)
    i. If a robot loses all of its lives, it returns to the previous checkpoint (or start) with half lives (rounded up) and must sit out the remainder of the round d. Robots fire
    i. If a robot loses all of its lives, it returns to the previous checkpoint (or start) with half lives (rounded up) and must sit out the remainder of the round e. Repeat for the remaining 4 movements
  4. Repeat until one robot has reached all three checkpoints sequentially, or all robots have lost their lives

The Challenge

Your robot must take the board (as a 2D array), and a seed for the Random number generator; and play the game on the given board.

The board is guaranteed to be solveable (there will always be a path from the start to each of the checkpoints)

Sample Board

enter image description here

enter image description here

The above board would be represented in an array as follows:

[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,0,0,0,0,0,LU,0,0,0,0,0]
[0,0,0,0,0,LL,2,LR,0,0,W,0]
[H,CL,CL,CL,CL,CL,CL,CL,CL,CL,0,0]
[0,0,0,0,0,CR,CR,CR,CR,CR,CR,H]
[0,W,0,0,0,0,0 ,0,0,0,0,0]
[0,W,0,0,0,0,W,0,W,0,0,0]
[1,W,0,0,0,0,CR,CR,CD,0,W,3]
[0,W,CR,CR,CR,0,CU,H,CD,W,0,0]
[0,LL,CR,CR,CR,CR,CU,CU,CL,0,0,0]
[0,0,S,S,S,S,0,0,W,0,0,0]

Where

Cx = Conveyor (x=Up, Down, Left, Right)
Lx = Laser gun (x=Up, Down, Left, Right)
S = Start
1,2,3 = Checkpoints
W = Wall
H = Hole
0 = Floor

Sandbox Questions

Should this be , where you implement your robot in the least code possible; or , or something else? If KotH, I've never set one before so some advice would be appreciated!

\$\endgroup\$
2
  • \$\begingroup\$ (if this is code golf) is it guaranteed that there exists a solution on every boards? Or only boards such that a solution exists are valid input? \$\endgroup\$
    – DELETE_ME
    Jul 28, 2020 at 10:38
  • \$\begingroup\$ Whether KotH or codegolf, the board will always be solvable (i.e. In all cases all of the checkpoints will be accessible, and there will be at least one path from any starting point to each of the checkpoints) \$\endgroup\$ Jul 28, 2020 at 10:40
1
\$\begingroup\$

Paper folding. Posted HERE

\$\endgroup\$
1
  • \$\begingroup\$ Now that this has been posted to main, could you delete this proposal to create more space for new answers? \$\endgroup\$ Sep 25, 2020 at 0:48
1
\$\begingroup\$

The Dungeon Number Sequence

Introduction

The dungeon numbers are introduced by Numberphile, denoting a chain of base conversions. A dungeon number is denoted in the form $$a_{b_{c_{d_\cdots}}}$$ where all numbers involved are integers with at least two digits. When interpreting the values, each base conversion \$a_b\$ is treated as from base \$b\$ to base-10.

There are two types of dungeons, one starting from \$10\$ to \$n\$ from top to bottom, i.e. $$10_{11_{12_{\cdots_n}}}$$ increasing \$1\$ for each deeper layer, and one starting from \$n\$ to \$10\$ from top to bottom, i.e. $$n_{(n-1)_{(n-2)_{\cdots_{10}}}}$$ decreasing \$1\$ for each deeper layer. Each dungeon has two interpretations, top down, i.e. $$(((10_{11})_{12})_\cdots)_n$$, and bottom up, i.e. $$10_{(11_{(12_{(\cdots_n)})})}$$, producing 4 dungeon number sequences in total.

Example

Considering $$10_{(11_{(12_{13})})}$$. The conversion is bottom up. First \$12_{13}\$ is converted to \$15_{10}\$. Then \$11_{15}\$ is converted to \$16_{10}\$. Finally \$10_{16}\$ is converted to \$16_{10}\$, and this is the value for \$n=13\$.

Challenge

Write a program or function, given an integer \$n>=10\$ as input, output either the value of the dungeon number sequence at \$n\$, or the whole sequence from \$10\$ up to \$n\$ inclusive. You may choose any sequence from the 4 sequences, but you must state which you have chosen. You must not hardcode the values; your code must work theoretically for all integer \$n>=10\$.

Values

n                                  10  11  12  13  14  15  16  17   18   19    20
---------------------------------------------------------------------------------
Type 1 (((10_11)_12)_...)_n        10  11  13  16  20  30  48  76  132  420  1640
Type 2 10_(11_(12_(..._n)))        10  11  13  16  20  25  31  38   46   55    65
Type 3 (((n_(n-1))_(n-2))_...)_10  10  11  13  16  20  28  45  73  133  348  4943
Type 4 n_((n-1)_((n-2)_(..._10)))  10  11  13  16  20  25  31  38   46   55   110

Sample IO

  • Type 1 (\$(((10_{11})_{12})_\cdots)_n\$)

    15 => 30
    20 => 1640
    25 => 19563802363305
    
  • Type 2 (\$10_{(11_{(12_{(\cdots_n)})})}\$)

    15 => 25
    20 => 65
    25 => 943
    
  • Type 3 (\$(((n_{(n-1)})_{(n-2)})_\cdots)_{10}\$)

    15 => 28
    20 => 4943
    25 => 1092759075796059
    
  • Type 4 (\$n_{((n-1)_{((n-2)_{(\cdots_{10})})})}\$)

    15 => 25
    20 => 110
    25 => 3577
    

Winning Criteria

This is a challenge, so shortest code for each language wins. No default loopholes.

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

Posted: Antisymmetry of a Matrix

\$\endgroup\$
1
  • \$\begingroup\$ Mathematica: AntisymmetricMatrixQ (of course, a non-built-in solution can be much shorter). \$\endgroup\$ Jul 30, 2020 at 13:12
1
\$\begingroup\$

LaTeX Fractions

Inspired by a TeX SE question.

LaTeX uses \frac{a}{b} to represent a/b, which is very unintuitive. Now you have a piece of paper (as in "research paper") which happens to use the a/b format, and your task is to convert it to the LaTeX format.

[to be continued]

\$\endgroup\$
1
  • 2
    \$\begingroup\$ @RahulVerma Nested fractions? \$\endgroup\$ Aug 10, 2020 at 13:17
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
72 73
74
75 76
156

You must log in to answer this question.

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