457
\$\begingroup\$

What is the Sandbox?

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

To post to the Sandbox, scroll to the bottom of this page or click on the "Add Proposal" link below, 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. 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, replace the post here with a link to the challenge and delete it.

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

The Sandbox works best if you sort posts by "active".

Add Proposal

Search the Sandbox

Browse your pending proposals

Get the Sandbox Viewer to view the sandbox more easily

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

\$\endgroup\$
  • \$\begingroup\$ How are tags added to questions? \$\endgroup\$ – guest271314 Jan 9 at 7:51
  • \$\begingroup\$ @guest271314 You can use this markup to create a tag in a draft: [tag:code-golf] \$\endgroup\$ – DJMcMayhem Aug 29 at 15:19

2518 Answers 2518

2
\$\begingroup\$

Irregular English Verbs

Given the infinitive of an irregular English verb, output its simple past and its past participle.

Rules

  • The input and output can be given in any convenient format.
  • No need to handle verbs not in the given list.
  • Either a full program or a function are acceptable. If a function, you can return the output rather than printing it.
  • If possible, please include a link to an online testing environment so other people can try out your code!
  • Standard loopholes are forbidden.
  • This is so all usual golfing rules apply, and the shortest code (in bytes) wins.

Example

fall    --> fell; fallen
beat    --> beat; beaten or beat
bereave --> bereaved or bereft; bereaved or bereft
shall   --> should;(no participle)

List of Irregular Verbs

Infinitive;Simple Past;Past Participle
alight;alighted or alit;alighted or alit
arise;arose;arisen
awake;awoke or awaked;awoken or awaked
be;was or were;been
bear;bore;borne or born
beat;beat;beaten or beat
become;became;become
beget;begot;begotten
begin;began;begun
bend;bent;bent
bereave;bereaved or bereft;bereaved or bereft
beseech;besought or beseeched;besought or beseeched
bet;bet or betted;bet or betted
bid;bade or bid;bidden or bid or bade
bide;bade or bided;bided
bind;bound;bound
bite;bit;bitten
bleed;bled;bled
bless;blessed or blest;blessed or blest
blow;blew;blown
break;broke;broken
breed;bred;bred
bring;brought;brought
broadcast;broadcast or broadcasted;broadcast or broadcasted
build;built;built
burn;burnt or burned;burnt or burned
burst;burst;burst
bust;bust or busted;bust or busted
buy;bought;bought
can;could;(no participle)
cast;cast;cast
catch;caught;caught
choose;chose;chosen
cleave;cleft or cleaved or clove;cleft or cleaved or cloven
cling;clung;clung
clothe;clothed or clad;clothed or clad
come;came;come
cost;cost;cost
creep;crept;crept
crow;crowed;crew or crowed
cut;cut;cut
deal;dealt;dealt
dig;dug;dug
do;did;done
draw;drew;drawn
dream;dreamt or dreamed;dreamt or dreamed
drink;drank;drunk
drive;drove;driven
dwell;dwelt or dwelled;dwelt or dwelled
eat;ate;eaten
fall;fell;fallen
feed;fed;fed
feel;felt;felt
fight;fought;fought
find;found;found
flee;fled;fled
fling;flung;flung
fly;flew;flown
forbid;forbad or forbade;forbid or forbidden
forecast;forecast or forecasted;forecast or forecasted
forget;forgot;forgotten
forsake;forsook;forsaken
freeze;froze;frozen
geld;gelded or gelt;gelded or gelt
get;got;got or gotten
gild;gilded or gilt;gilded or gilt
give;gave;given
gnaw;gnawed;gnawed or gnawn
go;went;gone
grind;ground;ground
grip;gripped or gript;gripped or gript
grow;grew;grown
hang;hung;hung
have;had;had
hear;heard;heard
heave;heaved or hove;heaved or hove
hew;hewed;hewed or hewn
hide;hid;hidden or hid
hit;hit;hit
hold;held;held
hurt;hurt;hurt
keep;kept;kept
kneel;knelt or kneeled;knelt or kneeled
knit;knitted or knit;knitted or knit
know;knew;known
lay;laid;laid
lead;led;led
lean;leant or leaned;leant or leaned
leap;leapt or leaped;leapt or leaped
learn;learnt or learned;learnt or learned
leave;left;left
lend;lent;lent
let;let;let
lie;lay;lain
light;lit or lighted;lit or lighted
lose;lost;lost
make;made;made
may;might;(no participle)
mean;meant;meant
meet;met;met
melt;melted;molten or melted
mow;mowed;mown or mowed
pay;paid;paid
pen;pent or penned;pent or penned
plead;pled or pleaded;pled or pleaded
prove;proved;proven or proved
put;put;put
quit;quit or quitted;quit or quitted
read;read;read
rid;rid or ridded;rid or ridded
ride;rode;ridden
ring;rang;rung
rise;rose;risen
run;ran;run
saw;sawed;sawn or sawed
say;said;said
see;saw;seen
seek;sought;sought
sell;sold;sold
send;sent;sent
set;set;set
sew;sewed;sewn or sewed
shake;shook;shaken
shall;should;(no participle)
shear;sheared;shorn or sheared
shed;shed;shed
shine;shone;shone
shit;shit or shitted or shat;shit or shitted or shat
shoe;shod or shoed;shod or shoed
shoot;shot;shot
show;showed;shown or showed
shred;shred or shredded;shred or shredded
shrink;shrank or shrunk;shrunk
shut;shut;shut
sing;sang;sung
sink;sank;sunk
sit;sat;sat
slay;slew;slain
sleep;slept;slept
slide;slid;slid
sling;slung;slung
slink;slunk;slunk
slit;slit;slit
smell;smelt or smelled;smelt or smelled
smite;smote;smitten
sow;sowed;sown or sowed
speak;spoke;spoken
speed;sped or speeded;sped or speeded
spell;spelt or spelled;spelt or spelled
spend;spent;spent
spill;spilt or spilled;spilt or spilled
spin;spun;spun
spit;spat;spat
split;split;split
spoil;spoilt or spoiled;spoilt or spoiled
spread;spread;spread
spring;sprang or sprung;sprung
stand;stood;stood
steal;stole;stolen
stick;stuck;stuck
sting;stung;stung
stink;stank or stunk;stunk
stride;strode;stridden
strike;struck;struck
string;strung;strung
strive;strove;striven
swear;swore;sworn
sweat;sweat or sweated;sweat or sweated
sweep;swept;swept
swell;swelled;swollen or swelled
swim;swam;swum
swing;swung;swung
take;took;taken
teach;taught;taught
tear;tore;torn
telecast;telecast or telecasted;telecast or telecasted
tell;told;told
think;thought;thought
throw;threw;thrown
thrust;thrust;thrust
tread;trod;trodden
understand;understood;understood
wake;woke or waked;woken or waked
wear;wore;worn
weave;wove;woven
wed;wed or wedded;wed or wedded
weep;wept;wept
wet;wet or wetted;wet or wetted
win;won;won
wind;wound;wound
wring;wrung;wrung
write;wrote;written
\$\endgroup\$
  • 2
    \$\begingroup\$ So this is a simple lookup, meaning that the bulk of the challenge is compressing the data? \$\endgroup\$ – Adám Jan 24 at 12:48
  • 1
    \$\begingroup\$ Shouldn't the correct output from can be could;was able to rather than could;(kein Participle)? \$\endgroup\$ – Adám Jan 24 at 12:49
  • \$\begingroup\$ @Adám what about simply can -->could; ? \$\endgroup\$ – mdahmoune Jan 24 at 12:54
  • \$\begingroup\$ Up to you. Using (kein Participle) makes the challenge more interesting, as it has the only uppercase character, and the only parentheses. \$\endgroup\$ – Adám Jan 24 at 14:02
  • 3
    \$\begingroup\$ @Adám, no. It should be could or was able to or were able to;been able to. It certainly shouldn't be (kein Participle): the spec asks for output in English, not German. \$\endgroup\$ – Peter Taylor Jan 24 at 15:04
  • \$\begingroup\$ @PeterTaylor OP hasn't answered, but to me it looks like lookup KC, so the actual content doesn't actually matter. \$\endgroup\$ – Adám Jan 24 at 16:59
  • \$\begingroup\$ @Adám Yes, I think it's a simple lookup, it can be other than that? \$\endgroup\$ – mdahmoune Jan 28 at 10:39
  • \$\begingroup\$ Imho, it would be much more interesting to take a regular verb as input, and output the past tense: Add "ed" or "d" if verb ends with "e", but change final consonant-"y" to "consonant-"i" and insert "k" if verb ends in "c" and double final consonant if verb ends with a single vowel followed by a single consonant. \$\endgroup\$ – Adám Jan 28 at 13:04
  • \$\begingroup\$ Suggested tag: kolmogorov-complexity \$\endgroup\$ – ბიმო Jan 28 at 13:19
  • \$\begingroup\$ @Adám Do u mean adding the rules, or extending the current list with some regular verbs? \$\endgroup\$ – mdahmoune Jan 28 at 14:00
  • \$\begingroup\$ I meant replacing the list, so the challenge will only concern completely regular verbs. It is of course your choice. I can also post this related (but not really related, just inspired by) challenge myself. Let me know. \$\endgroup\$ – Adám Jan 28 at 14:39
  • \$\begingroup\$ @Adám Using only regular verbs would make it a very different challenge. I think this one is interesting as-is. Even if these verbs are irregular, they do follow some rules of their own (such as i becomes u). You may want to identify and store the transformation rules that are common to several verbs rather than just do string compression. \$\endgroup\$ – Arnauld Feb 5 at 23:21
  • \$\begingroup\$ @Arnauld can I use your comment to improve the text of the challenge? \$\endgroup\$ – mdahmoune Feb 6 at 12:00
  • \$\begingroup\$ Sure. (But maybe you should use a better example than just 'i becomes u' and make it clear that this is not a general rule but just a rule that applies to several verbs.) \$\endgroup\$ – Arnauld Feb 6 at 13:53
2
\$\begingroup\$

Generate a 3D spiral

Inspired by this chat message

The spiral used in The Path Of The Wildebeest is a contiguous mapping of the positive integers to lattice points in 2D. Your task is to generalize this to 3D.

Specifically, create a function \$f\$ from \$\mathbb Z^+\$ to \$ \mathbb Z^3\$ with the following properties:

  • \$f\$ is a bijection (All points are eventually reached).
  • \$f(1) = (0,0,0)\$ (The spiral starts at the origin).
  • \$ |f(n+1) - f(n)| = 1\$ (The spiral is contiguous).
  • The Chebyshev distance from the origin \$ |f(n)|_\infty \$ is a nondecreasing function (\$f\$ fills all points in each concentric cubical shell \$k\$ before moving to shell \$k+1\$).

One possible \$f\$ is given by this Python implementation, but any \$f\$ that satisfies the above properties is allowed. Please describe the function your answer generates.

Because all your computer's memory is taken up by the wildebeest simulation you're running, typing is very slow, so your code must be as short as possible.

I/O

As is standard with questions, either 1-indexing or 0-indexing is allowed. Any of these I/O formats are acceptable:

  • Receive \$n\$ as input and output the \$n\$th point in the sequence
  • Receive \$n\$ as input and output the first \$n\$ points
  • Take no input and output the sequence infinitely.
\$\endgroup\$
  • \$\begingroup\$ Editing this from "is an increasing function" to "is a nondecreasing function" doesn't fix the problem... the function will sometimes have to decrease, because it has to hop over its own path and come back down. If you're already taking this into account, could you please be clearer about what you mean? \$\endgroup\$ – Deadcode Jan 30 at 1:40
  • \$\begingroup\$ @Deadcode I'm not sure what you mean by hopping over its own path. This challenge is just to generate the spiral, not the path of any chess piece. \$\endgroup\$ – lirtosiast Jan 30 at 1:45
  • \$\begingroup\$ Okay, imagine an actual ball of yarn. But to simplify things, let's imagine you start with a sphere. Start wrapping a string around it. After you make 1 revolution, you must adjust the angle of the string so that it crosses over its previous path. This will make a small bump in the path the string takes on its 2nd revolution. And on its 3rd revolution, there will be more bumps. Now imagine the analogy with a cube, quantizing the path to a cubical grid. The 2nd revolution will have to cross over the path the 1st revolution took, making a bump, 1 up, 1 down. \$\endgroup\$ – Deadcode Jan 30 at 1:56
  • \$\begingroup\$ I think in the cubical case, the path of the yarn can be arranged such that it never goes over bumps. \$\endgroup\$ – lirtosiast Jan 30 at 1:58
  • \$\begingroup\$ Okay, but then it will bear much less resemblance to a ball of yarn. \$\endgroup\$ – Deadcode Jan 30 at 2:04
  • \$\begingroup\$ @Deadcode the key point here is that it's the Chebyshev distance that's non-decreasing. So the 3d lattice is divided into cubic shells centered on the 0 point, and the function has to map to all of the points in shell n before moving on to shell n+1 \$\endgroup\$ – trichoplax Jan 30 at 21:37
  • \$\begingroup\$ (in that sense it's analogous to the 2d case) \$\endgroup\$ – trichoplax Jan 30 at 21:41
2
\$\begingroup\$

Countries by Area

\$\endgroup\$
  • \$\begingroup\$ You can remove the backticks before and after the list then select it and press Ctrl + K, it will show as a single block of code then \$\endgroup\$ – RedClover Apr 19 '18 at 13:59
  • \$\begingroup\$ @user202729 This isn't a KC because an answer to the challenge should accept inputs. \$\endgroup\$ – Shieru Asakoto Nov 19 '18 at 8:05
2
\$\begingroup\$

Least efficient field order

Background:

In C and other languages, a struct is a data type composed of fields of other data types. These fields may be different sizes (in bytes) and may have different alignment requirements (e.g. an int field may need to be on a 4-byte boundary).

Padding is added to a struct to keep all of its fields aligned, and to keep its size a multiple of each field's alignment.

For example:

struct test {
    char  a; // 1-byte, 1-byte aligned
    short b; // 2-byte, 2-byte aligned
    int   c; // 4-byte, 4-byte aligned
}

In this struct, there will be 1 byte of padding after a (to keep b on a 2-byte boundary), no padding after b (as c is already on a 4-byte boundary) and no padding after c (as the size is already a multiple of 2 and 4 bytes), so the total size of the struct is 8 bytes (1 + 2 + 4 + 2). However, if we rearrange the order of the fields, the struct size can be bigger.

struct test_2 {
    char  d; // 1-byte, 1-byte aligned
    int   e; // 4-byte, 4-byte aligned
    short f; // 2-byte, 2-byte aligned
}

In this struct, there will be 3 bytes of padding after d (to keep e on a 4-byte boundary) and there will be 2 bytes of padding after f (to keep the size a multiple of 2 and 4 bytes), so the total size of this struct is 12 bytes (1 + 4 + 2 + 3 + 2).

Challenge:

Given a list of pairs of positive integers (each pair representing the size and alignment of a field), return the same pairs in an order such that a struct with fields in that order would require the most padding, i.e. be the least space-efficient.

Givens:

  • A field's size will always be greater than or equal to its alignment. (e.g. (4, 8) is not a valid input pair)

  • A field's size will always be a multiple of its alignment. (i.e. (12, 5) is not a valid input pair)

Test cases: (other outputs that give the same total size are valid as well)

[(1, 1), (1, 1), (4, 4)] -> [(1, 1), (4, 4), (1, 1)] # size 12
[(12, 4), (1, 1), (2, 2), (8, 8)] -> [(12, 4), (8, 8), (1, 1), (2, 2)] # size 32
[(7, 7), (5, 1), (2, 2)] -> [(7, 7), (2, 2), (5, 1)] # size 28
[(6, 6), (6, 3), (4, 2), (2, 2)] -> [(6, 3), (4, 2), (6, 6), (2, 2)] # size 24
[(1, 1)] -> [(1, 1)] # size 1

Test case checker online!

\$\endgroup\$
  • 1
    \$\begingroup\$ I think in your explanation (1 + 2 + 4 + 2) should be (1 + 2 + 4 + 1). The only thing I see about this challenge that is questionable is whether having separate alignments is interesting or tedious. Would this lose much by assuming each field's alignment is equal to its size? \$\endgroup\$ – FryAmTheEggman Feb 25 at 21:25
2
\$\begingroup\$

The Minigame Challenge

The idea of this CnR is fairly simple: The Cops must create a simple minigame (explained in more detail below), with a definite goal. That goal may or may not be achievable. The Robbers must then either complete the minigame, or prove its goal is not achievable.

Rules

The Minigame

The Cops will create a suitably simple minigame with a definite goal.

Acceptable minigame examples are functions that take some input and return some output, with the goal being to either achieve a specific output, or make the program terminate or error.

Minigames considered complex (and thus unnacceptable) would be programs/functions that will never terminate in up to 60s (using TIO as a benchmark here), or that simulate complex games (such as blackjack, chess, etc).

Note: I'll try to expand further on what kinds of minigames are acceptable or not. Suggestions are appreciated.

Cops:

The Cops must provide one of the following:

  • A solution for your minigame that achieves the goal, or
  • A proof that the goal for your minigame is not achievable.

at least 7 days (168h) after the answer was posted for their answer to be considered safe.

If your minigame's goal is achievable, it must always be achievable, and it must not contain "insider information", such as a fixed seed for a pRNG, or pregenerated primes as factors of a number to be factored.

Robbers:

To crack an (unsafe) answer, the robber must provide either a solution to the minigame that achieves the stated goal, or a proof that the goal is not achievable.

Scoring:

Cops will be scored based on standard rules, with the fewest number of bytes in an answer being better. Cracked answers will always have a score of \$\infty\$.

Robbers are scored according to the number of answers they've cracked.

Standard loopholes are, as usual, forbidden.

Challenge is still under construction

This is the first CnR I've ever come up with. Suggestions and observations are always appreciated.

\$\endgroup\$
  • 5
    \$\begingroup\$ This seems a lot like PCG inside PCG. \$\endgroup\$ – Beefster Mar 15 at 19:16
2
\$\begingroup\$

Challenge

Create a function takes in two 2-dimensional arrays of Characters (or Strings if the programming language does not have characters as a datatype) as inputs: a and b.

Your task is to determine if b contains a. If this is so, return true. Otherwise, return false.

Sample Test Cases

a:

123
456
789

b:

123
456
789

should return true.

a:

code
golf

b:

thisis
code!!
golf!!
ohyeah

should return true.

a:

abcd
efgh
ijkl

b:

abcdef
ghijkl
mnopqr

should return false.

Least bytes wins.

\$\endgroup\$
  • \$\begingroup\$ does the block need to be as-is? No lines inbetween? No characters? i.e. does code\golf appear in `code!!\trucking!!\golf!!`? \$\endgroup\$ – Ven Mar 25 at 11:04
2
\$\begingroup\$

(No title yet)

I'm traveling away from home, and while visiting a fair a dart-throwing game catches my eye.

To play, I can buy \$d\$ darts at a time. There are no other options for purchase.

There are \$t\$ identical targets, but since I'm not a great shot, I can't consistently aim at just one. Instead, I can hit one (at random) with nonzero probability \$p\$.

Of course, just to make it harder for me management also decided it would be too easy if players won a prize immediately upon hitting a target. Rather, I need to hit the same target \$n\$ times in order to get the prize. As long as I keep playing, darts that have already landed on targets will remain there, but if I leave, they will be reset.

I'd rather not be scammed though, so I would like to know how many times I should expect to purchase darts in order to win at least one prize.

Task

Given \$d\$, \$t\$, \$p\$, and \$n\$, find the expected cost for me to get at least one prize.

Test cases

(just some basic ones, for now)

  d,  t,  p,  n  -> E

 __, __, __,  1  -> 1/(1-(1-p)^d)
 __, __,  1, __  -> t*n

Comments

Any suggestions to improve wording or formatting? Is anything unclear or confusing?

Would it be more interesting to ask for the expected cost to get at least \$x\$ prizes, instead? In that case, a target would award a prize for every \$n\$ darts landed, i.e. at \$n,2n,3n,\ldots\$ darts.

What level of accuracy should be required?

Ideas for test cases?

Not entirely sure what other tag(s) I'd like to work with here. Golf should be interesting... I'd also like to see faster solutions though, and I would expect golfy solutions to be very inefficient.

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

Finding Points in Convex Hulls

Convex hulls are notoriously hard to deal with, so today's challenge will deal with a relatively simple premise: given a convex hull defined by a set of points, and an additional point, find whether the additional point lies in the hull.

Now, for some definitions

  1. The convex hull of a finite set X, a subset of R^n, is the set of convex combinations of points of $X$.
  2. A convex combination of points x1,x2,...,xn is a point of the form a1x1+a2x2+...+anxn such that all ai>=0 and the sum of all of the ai is 1.

Input/Output

The input is rather flexible, as long as it contains the appropriate information to express the convex hull and additional point.

An example of a valid input format to express the convex hull represented by (0,1,2),(4,3,2),(8,8,8) and the point (5,5,5) is

([(0,1,2),(4,3,2),(8,8,8)],(5,5,5))

The output is a truthy/falsy value, depending on whether the point is contained in the hull.

Remarks

There are a lot of packages and libraries that deal with convex hulls, such as scipy.spatial. Such libraries/packages are explicitly banned. Libraries that facilitate matrix computations, such as numpy, are permitted.

The winning criterion is .

There is no limit on the number of dimensions the points can lie in, as long as they all lie in the same number of dimensions.

Test Cases

I will be using the following tio link for testing the validity of solutions.

Some smaller test cases:

([(1,1)],(1,1)) - True
([(1,1)],(1,2)) - False
([(1,1,1),(3,3,1)],(2,3,1)) - False
([(1,1,1),(3,3,1)],(2,2,1)) - True
([(0,0),(3,3),(0,6)],(2,4)) - True
([(0,0),(3,3),(0,6)],(1,1)) - True
([(0,0),(3,3),(0,5)],(2,4)) - False

Questions for Sandbox

Is code golf the best criteria for this? That might encourage brute force searches on every combination of points... any suggestions?

\$\endgroup\$
  • \$\begingroup\$ You mention R^n but all the examples use Z^n (which is much easier to work with computationally). Please clarify the expected input. Also, what about libraries for linear programming? \$\endgroup\$ – Peter Taylor Apr 1 at 10:03
  • \$\begingroup\$ @PeterTaylor I was thinking of making it R^n only, since one can bash out the answer if it is in Z^n. And, linear programming libraries probably also should be banned. \$\endgroup\$ – Don Thousand Apr 1 at 13:08
  • \$\begingroup\$ I'm not sure how easy it is to bash out the answer. The weights could be rational, and it's not obvious to me that the denominators can be bounded because the entire system can be translated. \$\endgroup\$ – Peter Taylor Apr 1 at 20:35
  • \$\begingroup\$ @PeterTaylor Hmm, I'll think about how to revise this. \$\endgroup\$ – Don Thousand Apr 1 at 22:05
2
\$\begingroup\$

This is a post to pre-test for a duplicate question before I spend the time to finish the full post and add test cases.

So, have we ever had a question for a "snake rotation" of a matrix:

    +--------------+
      1  2  3  4  5|
    +------------  |
    |10  9  8  7  6|
    |  +-----------+
    |11 12 13 14 15
    +--------------+


    +--------------+
-->  13 14 15  1  2|
    +------------  |
    | 7  6  5  4  3|
    |  +-----------+
    | 8  9 10 11 12  -->
    +--------------+

The ascii walls are there only for clarity. Actual input/output would be normal matrices

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

Reverse RegEx

Take a regex a as input, output a regex b such that, for each string x, x matches a iff x.reverse matches b

Sample Input    Sample Output
/abcd/          /dcba/
/[^abc]/        /(?!a)[^bc]/
/[^abc]/        /[^abc]/
/(.)abc\1$/     /^(.)cba\1/
/$1/            /10% of $10/
/\123/          /S/

Shortest code win

TODO: List of allowed RegEx features, mainly if (?<=xxx) is allowed

\$\endgroup\$
  • 2
    \$\begingroup\$ What's the regex flavor/set of allowed features/inputs? Is it for a full or partial match? \$\endgroup\$ – feersum May 10 at 9:07
  • \$\begingroup\$ @feersum Allowed features need discuss. To be a full match ^ and $ can be added \$\endgroup\$ – l4m2 May 10 at 9:21
  • \$\begingroup\$ Why is test case /[^abc]/ there twice? Or is it to give two different example outputs? Since just outputting /[^abc]/ for input /[^abc]/ would be fine. Also, I'm not too familiar with this Regex syntax, but how does /$1/ work, since $ is the end of the match? And why is it /10% of $10/ reversed? \$\endgroup\$ – Kevin Cruijssen May 10 at 9:27
  • \$\begingroup\$ @KevinCruijssen twice to show that same input may lead to different output. /$1/ and /10% of $10/ both match nothing \$\endgroup\$ – l4m2 May 10 at 9:32
  • \$\begingroup\$ "both match nothing" Ah ok.. I falsely assumed the regex would match something. So incorrect (but still valid) regexes are also allowed as input. Maybe it's a good idea to add some comments to the sample outputs, like /10% of $10/ can be anything as long as it doesn't match anything (and maybe put the /(?!a)[^bc]/ or /[^abc]/ for the same input on one line. \$\endgroup\$ – Kevin Cruijssen May 10 at 9:37
  • 2
    \$\begingroup\$ You should more rigorously explain what x.reverse means, from the examples it looks like you mean the order of letters is reversed, but some people might be confused. \$\endgroup\$ – FryAmTheEggman May 11 at 21:28
2
\$\begingroup\$

WordArt reader

I've decided to leave this very open ended, so that I can write it based on community input. There are a lot of questions in the bottom. All feedback is appreciated, even minor suggestions/comments. :)

,,.


Did you know WordArt is still a thing in MS Word? Let's parse it!

1]

(I'll remove the Swag format)

The challenge will contain a test battery with X jpg.files each with a word or sentence shown in WordArt. Your task is to parse as many as you can. The winner will be the submission that correctly parses the most images, with date stamp being the tie breaker.


Sandboxing:

  • Good idea or not?
  • Should there be many different styles, or should I stick to one? Colors? Shade/mirroring?
  • How many test cases?
  • Is jpg the best format (it was used in the Upgoat/Downgoat challenge)
  • Should I have a more refined scoring mechanism? It's hard to mix two quantities into one score.
  • Should I stick to just letters / alphanumeric / all printable ASCII / multiple lines? Long sentences or single words?
  • Orientation? Waves? Circular?
  • Resolution?
  • Builtin functions?
  • Should I require a complete match of images, or character by character?
\$\endgroup\$
  • \$\begingroup\$ Nice challenge! 1 WordArt is a completely objective (good) definition. 2 Some of the questions was mainly for the problem of the challenge being "too hard", so if you want any answer at all you should simplify those. (somehow most PPCG users are lazy). 3 Format is not a very important problem (conversion is easy), but just to be sure, use a lossless format. \$\endgroup\$ – user202729 Nov 7 '17 at 16:48
  • \$\begingroup\$ There is another problem of the font used. \$\endgroup\$ – user202729 Nov 7 '17 at 16:49
  • \$\begingroup\$ The challenge is supposed to be hard. Scoring based on the success rate would be useless if not. But it's of course possible to change the scoring, and make the test cases easier. \$\endgroup\$ – Stewie Griffin Nov 7 '17 at 17:00
  • 4
    \$\begingroup\$ 1. optical-char-recognition. 2. Upgoat/Downgoat used JPG because it used photos. IMO it's preferable in general to allow any raster image format, because otherwise you pretty much force people to use languages with library support for image decoding. 3. The "Swag" example is ambiguous: is it "Swag Swag"? 4. If you want to refine the scoring mechanism, I would do it as the sum of Levenshtein distances from the correct results. But the big problem with scoring test-battery is the tension between keeping the tests secret (to prevent overfitting) and public (for objective scoring). \$\endgroup\$ – Peter Taylor Nov 8 '17 at 7:25
  • 1
    \$\begingroup\$ 3. I can avoid the Swag-type format. Are the other formats unambiguous? 4. I can either show all the possible formats, and say that I will use words that are say 4-15 characters, or maximum 15 characters per example. I can then pre-select the input list, and provide a hash that ensures I won't change the input list after answers are posted. People can then try their code on some random strings of their own choosing on various formats and approximate their results, while the final score is made public later...? \$\endgroup\$ – Stewie Griffin May 22 at 6:43
  • \$\begingroup\$ Thanks for the link to the other challenges, they are useful as references when writing this challenge. Do you think this is different enough by the way? \$\endgroup\$ – Stewie Griffin May 22 at 6:58
2
\$\begingroup\$

How many right triangles can you find?


Challenge

You will be given an input represented by x, which is a string containing at least 3 characters. It will consist only of the standard numeric characters, 0 through 9. Your job is to find and output how many right triangles can be formed with the given numbers.

Rules

  • Numbers must be kept in the order they were given in. No mixing them up!

  • The numbers for each right triangle must be consecutive.

  • The order of numbers has to be a first, b second, and c third, and must satisfy the formula a² + b² = c². a can be greater than or less than b, as long as it satisfies the formula.

  • Decimal points may be added between any numbers.

  • Decimals require one or more numbers to be placed before them, e.g. .5 cannot be used as a number but 0.5 and 12.5 can.

  • Decimals with at least 4 digits after the decimal point truncated to the third digit, e.g. 1.2345 would truncated to 1.234 and 1.9999 would be truncated to 1.999.

  • Numbers can be used more than once in 2 or more different triangles, but cannot be used multiple times in the same triangle.

  • Multiple representations of the same value can count multiple times.

  • Repeating zeros are allowed, e.g. 000.5 counts as a number.

  • All possible combinations must be taken into account for your program to be valid.

Example Inputs and Outputs

Input: 345
Output: 1
This can be split into 3, 4, and 5, which, of course, form a right triangle.

Input: 534
Output: 0
While this does include the necessary numbers to form a right triangle, they are not in the correct order. It has to follow the formula a² + b² = c², but in this case it follows c² = a² + b². The order of numbers cannot be changed from the original input, so in this case no right triangles can be formed.

Input: 3415
Output: 0
This does contain a 3, 4, and a 5, which can form a right triangle, but they are not consecutive; there is a 1 splitting the 5 from the 3 and 4.

Input: 5567507
Output: 1
Because decimals can be added anywhere, it can be changed to 55.67.507, which allows splitting it into 5, 5.6, and 7.507 to form a right triangle. Remember that decimals are truncated to the third digit after the decimal point, which is how we get 7.507.

Input: 345567507
Output: 2
The first right triangle is formed by 3, 4, and 5. The second one is formed by 5567507 (read the previous example for explanation). Numbers can be used more than once, so the first 5 was used in the first and second triangles.

Input: 51125
Output: 0
Because of rule 5, you cannot use .5, 1, and 1.25. An integer is required before .5 for it to work.

Input: 051125
Output: 0
Unlike the previous example, there is a number before the first 5, so it is now legal to use 0.5, 1, and 1.25.

Input: 121418439
Output: 2
The numbers 12 and 14 would form a right triangle where side c has a length of approximately 18.43908891458577462000. Because long decimals are truncated to the third digit after the decimal point, we would be left with 18.439. This fits in with the original input, 121418439. Additionally, 1.2, 1.4, and 1.843 counts as a separate combination, thus giving us our second right triangle.

Input: 10011005
Output: 8
Numbers count separately if they're represented in different ways, so this allows for (1, 00, 1), (1.0, 0, 1), (1, 0, 01), (1, 0.01, 1), (1, 0.01, 1.0), (1, 0.01, 1.00), (1.0, 0.1, 1.005), and (1, 00.1, 1.005).


This is code golf, so shortest answer in bytes wins. Good luck!

\$\endgroup\$
  • \$\begingroup\$ So if I understand correctly we do the following things: get all substrings of the input; get all 3-part partitions of each substring; insert a comma at each possible position in each possible partition; check any combination of three in order is approximately truthy for \$a^2+b^2=c^2\$ (approximately, because the decimals have been truncated, so aren't exactly a right triangle in some cases). Do I understand this correctly? \$\endgroup\$ – Kevin Cruijssen May 8 at 7:07
  • \$\begingroup\$ @KevinCruijssen almost correct, except you must find all combinations both with and without decimals at any given location. So it's not necessarily just adding a decimal point at every possible place; it's checking the results that would occur both by adding and not adding a decimal. \$\endgroup\$ – Pika the Wizard of the Whales May 8 at 14:19
  • \$\begingroup\$ "Numbers can be used more than once." - Could you provide some examples of this or otherwise clarify what you mean? \$\endgroup\$ – Beefster May 10 at 19:52
  • \$\begingroup\$ @Beefster see the fifth example: one of the 5's is used to form two different right triangles. \$\endgroup\$ – Pika the Wizard of the Whales May 10 at 19:57
  • \$\begingroup\$ Perhaps a better way to explain it would be something like "Right triangles that only use a subsequence of the digits can overlap with other triangles made from the same sequence of digits" or "You do not need to use all the digits for a single triangle and you may re-use digits that were used in previous triangles". What confused me about the way it's currently written is that it could be taken to mean that you can re-use a digit for the same triangle, so 125059 could be split into 12, 22, 25.059. \$\endgroup\$ – Beefster May 13 at 22:45
2
\$\begingroup\$

\$n\$-Chess KotH

Introduction

Inspired by the challenge N-movers: How much of the infinite board can I reach?, I came up with an idea of applying the \$n\$-mover rules in chess.

\$n\$-Chess™ is a board game played on a 8x8 grid like the original chess. However, the pieces are very different from chess - they are named \$n\$-movers (\$n\$ can be any natural number) and can only move by the rules set on them (see Rules: Pieces).

Rules

Pieces

In \$n\$-chess, a piece is called an \$n\$-mover, where \$n\$ denotes its possible movements. Specifically:

  1. The \$n\$-mover can only move one step of Euclidean distance \$\sqrt n\$ each time, i.e. for a move with \$x\$ units horizontal and \$y\$ units vertical, \$x\$ and \$y\$ must fulfill the equation \$x^2+y^2=n\$ in order to be valid.
    • For example, a 5-mover can only move 1 unit in one direction and 2 units in the another at the same time; while a 25-mover can move 5 units in either direction, or 3 units in one direction and 4 units in the another at the same time.
  2. A piece can have at most 2 rules set at the same time. For a piece that can act as either an \$m\$-mover or an \$n\$-mover, we can call it an \$(m,n)\$-mover. An \$(m,n)\$-mover is allowed to move one step of Euclidean distance of either \$\sqrt m\$ or \$\sqrt n\$ or \$\sqrt{m+n}\$.
    • It is allowed to have \$m=n\$.
    • Only pieces that has captured other pieces can have multiple rules (See Rules: Capture).
  3. If more than 2 rules are set on a piece, only 2 rules can be reserved. You can choose which 2 rules to reserve.

Board

The chess is played on a 8x8 board. The initial setup is as follows: Initial board setup

Capture

  1. If a piece lands on a grid that an opponent piece has occupied (capture), that opponent piece shall be moved away from the board.
  2. After that, the piece will be granted rules from the captured opponent piece. As stated in Piece, if there are more than 2 rules in total, only 2 shall be reserved.

Playing

  1. In a turn, White and Black play a move in turn. White always moves first.
  2. Only one piece can be move per turn.
  3. You cannot move a piece in the way that is not allowed by the rules set on it, beyond the boundaries of the board, or onto a grid already occupied by your other pieces.
  4. You cannot move your last piece in the way that after moving it it can be captured instantly.

Victory Condition

The game ends with either player winning if:

  1. The last piece of the opponent is being checkmated, i.e. no possible moves that can save this last piece from being captured; or
  2. The opponent resigns and loses. (In this challenge, no resignation will be allowed)

The game ends with a draw if :

  1. No checkmate is possible for both sides;
  2. Either player has no more possible moves, but is not in checkmate;
  3. There is no capture in 50 moves; or
  4. The identical board arrangement has appeared 3 times with the same player to move.

Implementation

A player bot is a class that implements a function nextMove(). This function receives 3 arguments and output an array of 6 integers:

function nextMove(
    color: int,                    // Your color: 0 = white, 1 = black
    board: int[8][8][3],           // Current board:
                                   //  First index: x-coordinate
                                   //  Second index: y-coordinate
                                   //  The third layer will be as follows - 
                                   //   [0]: the color of the grid
                                   //       (-1: Not occupied; 0: white; 1: black)
                                   //   [1]: rule 1 (0 if not exists)
                                   //   [2]: rule 2 (0 if not exists)
    moves: int[][10]               // Previous moves:
                                   //  First index: move number (0-indexed)
                                   //  The second layer will be as follows - 
                                   //   [0]: the color of the player
                                   //   [1]: is this a capture (0: no, 1: yes)
                                   //   [2]: source x-coordinate
                                   //   [3]: source y-coordinate
                                   //   [4]: source rule 1
                                   //   [5]: source rule 2 (0 if not exists)
                                   //   [6]: target x-coordinate
                                   //   [7]: target y-coordinate
                                   //   [8]: target rule 1
                                   //   [9]: target rule 2 (0 if not exists)
): int[6]                          // Return value: as follows:
                                   //  [0]: source x-coordinate
                                   //  [1]: source y-coordinate
                                   //  [2]: target x-coordinate
                                   //  [3]: target y-coordinate
                                   //  [4]: target rule 1
                                   //  [5]: target rule 2 (0 if not exists)
  • Rule 1 and Rule 2 denotes the 2 rules a piece has.
  • Source rule entries are used to denote which rules a piece has, while target rule entries are used to denote which rules are decide to keep.

You may use JavaScript, pseudo-codes, or any languages similar to JavaScript, but using JavaScript is strongly encouraged, because all submissions will be translated to JavaScript before using for competition, and the test drive only supports JavaScript.

Restriction

  1. Standard loopholes are forbidden by default.
  2. You cannot by any means read or modify other bots. You can only use data within the class and inputs passed to nextMove() function.
  3. You may define other variables inside your class if needed.
  4. You may use a random number generator.
  5. Your bot, specifically the nextMove() function, must return value in 10 second per move. Timeout leads to disqualification.

Procedure

Round-robin will be used to determine the opponents, i.e. all bots will face each of the other bots twice, one as black and one as white. For each game, a win gets 2 points, a lose gets 0 points, and a draw gets 1 points.

The bot will the highest points wins, and if there are any ties, they will be broken by:

  1. Number of victories;
  2. Average time to checkmate opponent (shorter is better); and
  3. Drawing lots. (Hopefully this step is not necessary)

TODO

  • Add a sample implementation.
\$\endgroup\$
  • 2
    \$\begingroup\$ KISS: since I assume that this is actually a game you've made up for the question, why not ditch checkmate and make the win condition that you capture all of the opposing pieces? I'm not sure about n-Chess™ for a name, either: it feels more like checkers than chess to me. \$\endgroup\$ – Peter Taylor May 29 at 16:34
  • \$\begingroup\$ @PeterTaylor I'd say the question I had my inspiration from had its inspiration from chess, so I chose chess, and tbh I don't even know what checkers is until I've googled it right now. Well, it does look like checkers in the way capturing occurs, but I think I need to borrow some rules from chess, especially the ending rules, because I need to draw a line if the game never ends. Anyway thanks for your useful feedback! \$\endgroup\$ – Shieru Asakoto May 30 at 2:41
2
\$\begingroup\$

Proposed alternative to this

Golf an H interpreter

H is a text-based, weakly-typed string concatenation language. You task is to run an H script. You may do so by creating an interpreter, a compiler, a transpiler, or by any other reasonable means.

Definitions

Anything not defined herein is undefined behaviour and your implementation does neither have to support it nor does it need to throw an error. This includes unmatched quotes, invalid escapes, usage of variables before definition, etc. All given H scripts will abide by all the rules as stated.

General H syntax

Scripts: One or more lines, each containing zero or more statements, optionally followed by a comment.

White-space: you only have to support spaces in strings (tabs are escaped), plus tabs and/or spaces leading up to a comment.

Operators: There's only one, +, which is string concatenation.

Comments begin with # and continue until the end of the line. # may be prefixed by one or more spaces and/or tabs.

name: a sequence of exactly 4 single-case ASCII letters [A-Z] or [a-z] (you decide the scheme)

value: a +-delimited sequence of one or more strings (see below) and/or previously defined names. The combined value will never exceed 1000 characters.

Strings

Opened and closed by " and support ASCII 32–126 but with the following escape sequences:

\\: the literal backslash character; \

\n: a line break; CR, LF, CRLF, or LFCR (you decide)

\": a quotes symbol; "

\t: a tab character; (HT) or 2, 4, or 8 spaces (you decide)

A string matching the regex 0|-?[1-9]\d?\d? (i.e. look like an integer) may be left unquoted.

Statements

Terminated by ; but may not span multiple lines. There are only three types of H statements:

def name=value; sets the variable name to the given value.

print(value); prints value without trailing line break.

input(value;name); prints value without trailing line break, allows the user to enter a sequence of characters that extend that line, and assigns the characters to name. Any subsequent output begins on the next line.

Test script

The following assumes you have decided on the uppercase variable name scheme:

def HELO="Hello, ";
def HSMO=HELO+"strange"+-1;print("");
input(HSMO+"what is your name?";NAME);         #enter "User A" via stdin
#print(-123)   # nope
print(HELO+"\""+NAME+"\"\n\tthis isn't APL\\"+360+"!");

#done
print(-12+34)	# note the tab before #

Here is the equivalent using a lowercase variable name scheme:

def helo="Hello, ";
def hsmo=helo+"strange"+-1;print("");
input(hsmo+"what is your name?";name);         #enter "User A" via stdin
#print(-123)   # nope
print(helo+"\""+name+"\"\n\tthis isn't APL\\"+360+"!");

#done
print(-12+34)	# note the tab before #

Running the appropriate script, and entering User A should, according to the scheme where \t means ASCII 9 (HT), leave the console/screen/window showing:

Hello, strange-1what is your name?User A
Hello, "User A"
	this isn't APL\360!-1234

If instead you decided that \t means four spaces, it should show:

Hello, strange-1what is your name?User A
Hello, "User A"
    this isn't APL\360!-1234

\$\endgroup\$
  • 1
    \$\begingroup\$ You may want to explicitly state that User A is the STDIN-input in the Test script. I must admit I just can't read and read past the explanation of input(value;name); when going through the test script and was thinking: where is def name="User A";. And based on "Anything not defined herein is undefined behaviour and your implementation does neither have to support it nor does it need to throw an error." we can assume all scripts are valid, so no " that are unmatched, and no variable used before it is defined, and stuff like that? \$\endgroup\$ – Kevin Cruijssen Jun 28 at 13:45
  • 1
    \$\begingroup\$ @KevinCruijssen How is it now? \$\endgroup\$ – Adám Jun 28 at 15:50
  • 1
    \$\begingroup\$ Perfect. :) I had already upvoted I see. Everything is clear to me now. \$\endgroup\$ – Kevin Cruijssen Jun 28 at 16:40
  • 1
    \$\begingroup\$ @UserA No. There is an overwhelming consensus that one should avoid bonuses in code golf. \$\endgroup\$ – Adám Jul 3 at 13:23
  • 1
    \$\begingroup\$ @UserA It is very probably that many of the solutions will allow all of those any way. \$\endgroup\$ – Adám Jul 3 at 13:24
2
\$\begingroup\$

Multi-Digit × Single-Digit Checker

Introduction

The story below is fictional, don't worry.

Times table hard. More curriculum. Class advance. Son behind. Horror. Help.

ahem Pardon me.

So... I've got a big problem. The times table is huge, and all the mnemonic rules we've taught our son haven't make him fully memorize it yet. However, his class must advance to the next chapter, long multiplication. As a result, he is prone to making many mistakes while multiplying numbers.

See, they're already making the students multiply a multi-digit number by a single-digit number. My son often forgets to carry digits over and, of course, his times table. The good thing is that he never misses digits!

The situation is awful. Help me before they start with two multi-digit numbers!


Challenge

Your challenge is to write a program that takes a multiplier, a multiplicand and a product, and analyzes the product for any of the following mistakes. Here's how:

  • If a digit is the correct ones digit of the product of the multiplicand times the digit of the multiplier he's currently multiplying, but a non-zero carryover was supposed to be added to it, then this digit has a carryover error.
  • If a digit is otherwise wrong, there's a times table error around it (we can't be sure if the ones digit was wrong or a carryover digit was wrong), so it has a times table error.
  • There will never be another kind of mistake in the product, my son doesn't skip digits.

For each wrong digit, return an array of two or three elements:

  • Position of the digit from the left or right, 0- or 1-indexed (your choice must be consistent). Keep in mind that, if the leftmost digit is absent due to a carryover error, then it's still the leftmost digit and the place has the relevant index.
  • Correct carryover, if the mistake was a carryover error, or omitted otherwise. You may also put a 0 instead of omitting the element (you can't blame my son for forgetting to add a zero carryover!), but be consistent.
  • Correct digit.

Rules

  • The numbers will all be positive integers.
  • The multiplicand will be an integer from 1 to 9, inclusive.
  • You can get the three numbers via any reasonable way you want.
  • The output can be in any order, as can the elements of each array, as long as the latter is consistent.
  • You may not make use of any standard loophole.
  • This is a challenge, so the shortest answer, measured in bytes, wins.

Test cases

Multiplier, Multiplicand, Product -> Mistakes (0-indexed from the left, possibly absent carryover)

5, 3, 15 -> [] (15)
3, 5, 5 -> [[0, 1, 1]] (05 -> 15)
7, 3, 31 -> [[0, 2]] (31 -> 21)
1551, 9, 4959 -> [[0, 1, 1], [1, 4, 3]] (04959 -> 14959 -> 13959)
2121, 7, 14847 -> [] (14847)
2121, 7, 4727 -> [[0, 1, 1], [2, 1, 8], [3, 4]] (04727 -> 14727 -> 14827 -> 14847)
33333, 9, 11111 -> [[0, 2, 2], [1, 9], [2, 9], [3, 9], [4, 9], [5, 7]] (011111 -> 211111 -> 291111 -> 299111 -> 299911 -> 299991 -> 299997)

Sandbox

  • Is the challenge unclear?
  • Is the output format weird or too strict?
\$\endgroup\$
  • \$\begingroup\$ I think it's a pretty interesting challenge! My only nitpick is in the introduction, when you're bringing up 'My son makes these mistakes:': make this section a bit more formal/a bit less story-level detail. The rest of the introduction is funny and gives some good context, but while reading the challenge I was kind of thrown off by the unnecessary detail in that section, e.g 'Ah, the crux of my worries.' \$\endgroup\$ – Geza Kerecsenyi Jul 9 at 21:25
  • \$\begingroup\$ @GezaKerecsenyi That might be because those were part of the challenge text before I decided to move it all to the Challenge section. I'll shorten them to one sentence. EDIT: I've removed that part. \$\endgroup\$ – Erik the Outgolfer Jul 9 at 22:01
  • \$\begingroup\$ Also, I think that making the carryover optional is quite confusing, and it also means that you have to check if it was a carryover error just to know whether to output it or not. I would suggest to make them always give the correct carryover or 0, even if it wasn't a carryover error. \$\endgroup\$ – Geza Kerecsenyi Jul 10 at 7:46
  • \$\begingroup\$ @GezaKerecsenyi I'm giving two options for times table errors, either exclude the carryover or make it 0. The answerer can choose one of the two consistently. Do you think there's an issue with the first one? \$\endgroup\$ – Erik the Outgolfer Jul 10 at 17:48
2
\$\begingroup\$

Sandbox Notes

  • Any other/better tags?
  • Is my math right?

Knot Function

TL;DR: Define a closed curve in 3D space that forms a knot.

A function \$f : [0,1] \to \mathbb R^3\$ is considered a loop function if the following conditions hold:

  • It is continuous.
  • \$f(0) = f(1)\$.
  • It is injective everywhere else.

Intuitively, this means that the function traces out a curve in 3D space that does not intersect itself.

Let the set of loop functions be denoted \$\text{Loop}\$. One such function is \$\text{circle}(t) = (0, \sin 2\pi t, \cos 2\pi t)\$, which traces out a circle in 3D space.

A function \$f : \text{Loop}\$ is considered a knot function if there exists no continuous function \$d : [0,1] \to \text {Loop}\$ such that \$d(0) = f\$ and \$d(1) = \text{circle}\$. Intuitively, this means that the loop that the function traces out cannot be continuously deformed into a circle without intersecting itself.

The Task

Write a program or function that implements a knot function, where real numbers are replaced with (to best approximation) floating point numbers.

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

\$\endgroup\$
  • \$\begingroup\$ This is going to need a formal definition of continuity, in particular of \$d\$. E.g. if using epsilon-delta, what's the distance metric between loops? \$\endgroup\$ – Peter Taylor Jul 5 at 11:06
  • \$\begingroup\$ @PeterTaylor I think it's pointwise fixing each input value of t that's given to d. \$\endgroup\$ – xnor Jul 6 at 1:54
  • 2
    \$\begingroup\$ You need to be careful about input because it is not possible for a computable function to take an arbitrary real number between \$[0,1]\$ as input, so for this challenge \$[0,1]\$ is going to have to mean something else likely \$\mathbb{Q}\cap[0,1]\$. You might also want to replace \$\mathbb{R}^3\$ with \$\mathbb{Q}^3\$, but I don't think this is technically necessary. \$\endgroup\$ – Sriotchilism O'Zaic Jul 6 at 2:59
  • \$\begingroup\$ Also I am going to recommend the topological definition of continuity over \$\varepsilon-\delta\$ for this purpose because it meshes neatly with topology. (and IMO is easier to understand anyway) \$\endgroup\$ – Sriotchilism O'Zaic Jul 6 at 3:02
  • 2
    \$\begingroup\$ I think it would help to give a short informal statement of the challenge before going into the definition, so as not to needlessly scare away anyone intimidated by the math terms. \$\endgroup\$ – xnor Jul 10 at 4:23
  • \$\begingroup\$ The TL;DR needs "closed", because open polynomial curves which are knots are not valid answers. \$\endgroup\$ – Peter Taylor Jul 11 at 22:12
  • \$\begingroup\$ @PeterTaylor Fixed. \$\endgroup\$ – Esolanging Fruit Jul 11 at 22:13
2
\$\begingroup\$

Print the sum of the previous answer's ASCII values

Challenge

Output the sum of the previous answer's characters. For example, if the previous answer was print(25), the next answer would have to output the next answer would have to output 741.

Initial Answer

The initial answer has to output the number 1000

Rules

  • Your code can only use ascii characters (sorry Jelly), no extended-ASCII or Unicode characters.
  • Your output can be in Decimal, Unary or Base 256 (represented by ASCII characters)
  • You cannot use a language that has been used before. (Note: Different versions of the same language are allowed, like Python 2 and Python 3)
  • To prevent overly long languages (such as Unary) ruining the chain, your answer cannot be longer then 1000000 bytes.
  • The same person cannot post twice in a row
  • If two users post "at the same time", the earlier one will stand
  • If a solution breaks one of these rules, it and all answers that chain off of it will be deleted
  • Don't edit your code after you've posted it, otherwise it could invalidate code that chains off of it

Winning

The winner of the challenge is whoever has posted the most recent answer, since it will get harder and harder the more languages that are used.

\$\endgroup\$
  • 2
    \$\begingroup\$ Can you clarify base 256? If extended ASCII is excluded, is there a specific way to represent 256 distinct digits using 127 codepoints? \$\endgroup\$ – trichoplax Jul 13 at 20:12
  • 7
    \$\begingroup\$ IMO this is too trivial to make a good answer chaining question. Finding an unused language in which you can figure out how to write (essentially) Hello, World is not going to get difficult until a couple of thousand answers in. \$\endgroup\$ – Peter Taylor Jul 14 at 8:24
  • 1
    \$\begingroup\$ Wouldn't every answer just be variants of print(n) where \$n\$ is the integer literal of the sum of the last answer? \$\endgroup\$ – Jo King Jul 15 at 22:52
  • \$\begingroup\$ Yeah, I’m gonna scrap this challenge because I didn’t think it through properly \$\endgroup\$ – EdgyNerd Jul 16 at 6:22
2
\$\begingroup\$

I'm sorry, Code Golf

This challenge is inspired by a series of Garfield-inspired artwork in which Garfield is depicted as a horror creature, stalking his owner, Jon. Commonly referred to as "Creepy Garfield", the line "I'm sorry, Jon" can be found in one of the earliest Creepy Garfield images, created by DubbleBaby.

William Burke's Depiction enter image description here

After being used over and over again by the Code Golf community, our beloved Jimmy has transformed - no longer bound to his weak, mortal body. He has become the embodiment of spaghetti code, the ascii manifestation of hours-long debugging sessions.


Your Task:

Take 3 ordered numerical inputs and output Jimmy's body

Inputs

Input is received in the form x y z where:

x is the number of left limbs (integer between 1 & 10)
y is the number of right limbs (integer between 1 & 10)
z is the number of heads (integer between 1 & 10)

----Sample Input----
2 8 1

Meta Note: I don't think increasing the possible amount of body parts will influence the solutions but please let me know if you think they should be higher.

Body Parts

Head =          <o>
Left Limb =     /
Right Limb =    \
Filler Limb =   |
Body Piece =    0

Body Generation Rules

   1. Left limbs must be attached to the left side of a body piece
    (excl rule 3)
    - Correct:  /0
    - Incorrect: /<o>
    - Incorrect: 0/
    - Incorrect: /0\0\

2. Right limbs must be attached to the right side of a body piece
    (excl rule 3)
    - Correct: 0\
    - Incorrect: <o>\
    - Incorrect: \0

3. Limbs must not touch
    - Correct: /00\
    - Incorrect: /0\/0\

4. An external body piece without a limb must have a | in its place
    - Correct: /0|
    - Correct: |0|
    - Correct: /00\
    - Incorrect: /0
    - Incorrect: 0\

5. Heads must be between body pieces (horizontally not vertically)
    - Correct: 0<o>0
    - Incorrect: 0<o><o>0
    - Incorrect: 0<o>

6. All lines must be aligned centre
    - Correct:      /0\
                  /0<o>0|
                    /0\

    - Incorrect:    /0\
                    /0<o>0|
                    /0\

7. The bottom line of Jimmy's body must always contain a left and right limb
    - Correct:      /0\
                  /0<o>0|
                    /0\

    - Incorrect:    /0\
                  /0<o>0\
                    /0|

8. Jimmy's body must be whole and cannot be separated into sections
    - Correct:    /0\
                /0<o>0|

    - Incorrect:    /0\   /0\   |0<o>0|

    - Incorrect:      /0\

                    /0<o>0|

Examples

Input:
2 8 2

Sample Output:

/0<o>0<o>0\
    |0\
    |0\
    |0\
    |0\
    |0\
    |0\
    /0\

    OR

  /0\
  |0\
|0<o>0\
  |0\
  |0\
|0<o>0\
  |0\
  /0\

Rules & Win Conditions

  1. You may receive the stated input via any method into a program or function.
  2. You may display the output in any clear and discernible way.
  3. Your output must obey all Body Generation Rules.
  4. The previous 3 rules must be followed for all 1000 combinations of inputs.
  5. Standard loophole rules apply.

As this is , least amount of code in bytes wins.

\$\endgroup\$
  • 1
    \$\begingroup\$ I don't like bonuses in code golf in general, and this one doesn't even affect the score so it's just an invitation to distract from the challenge \$\endgroup\$ – trichoplax Jul 16 at 20:36
  • 3
    \$\begingroup\$ (1) Whenever you see a bandwagon, run the other way. It's better to ask an interesting question than the nth variant on a theme. (2) That aside, there's no clear explanation of what the input is. Where are the values of that enum? \$\endgroup\$ – Peter Taylor Jul 17 at 10:53
  • 1
    \$\begingroup\$ @PeterTaylor (1) This challenge doesn't exist to hop on the bandwagon. I thought that generating an eldritch-like stick figure would be neat. If you don't think this is an interesting question, I'd love to hear your feedback on that. (2) I've amended the input section to be a bit clearer but I'm not sure what I was missing in the first place. \$\endgroup\$ – BDM Jul 17 at 21:13
  • 1
    \$\begingroup\$ What's missing is an explanation of the interpretation of the numbers. The input section defines the range of legal inputs but not the meaning of the inputs. \$\endgroup\$ – Peter Taylor Jul 17 at 21:33
  • 1
    \$\begingroup\$ @PeterTaylor Ah I understand now. Hopefully my recent edit solves this. \$\endgroup\$ – BDM Jul 17 at 21:44
  • \$\begingroup\$ Somewhat related ... I think?! \$\endgroup\$ – Shaggy Jul 21 at 21:23
2
\$\begingroup\$

Minimum string attractors


String attractors

Let \$S\$ be a string of length \$n\$. An attractor of \$S\$ is a subset of indices \$A \subset \{0, \ldots, n-1\}\$ such that every nonempty contiguous substring \$S[i \ldots j]\$ of \$S\$ has an occurrence \$S[i' \ldots j']\$ whose index set \$[i' \ldots j']\$ intersects \$A\$. A minimum attractor is one with minimal size. Minimum attractors can be used to implement very efficient string compression algorithms. In this challenge, your task is to find a minimum attractor for a given string.

Example

Consider the string acabaccabc. Using 0-based indexing, one of its attractors is \$A = \{2,3,5,8\}\$. This graphic shows the positions of \$A\$:

acabaccabc
  ^^ ^  ^

For example, the occurrence of the substring ac in the beginning doesn't intersect \$A\$, but there is another occurrence after the first b that does. It turns out that no attractor of size 3 exists for this string, so \$A\$ is a minimum attractor.

Specifications

Your input is a nonempty string of lowercase ASCII characters. Your output is a minimum attractor for this string, in any reasonable format. You can use either 0-based or 1-based indexing.

There may be several choices for the minimum attractor. In that case you may return any one of them, but only one.

The lowest byte count wins.

Test cases

These are 0-indexed and show one possible output.

a -> [0]
aaa -> [0]
ababab -> [0,1]
qgqqgq -> [1,2]
abcbacaa -> [1,3,5,6]
abcdefgh -> [0,1,2,3,4,5,6,7]
jejjeeje -> [2,3,5]
sttststt -> [1,5]
ykkkkvyk -> [0,2,5]
assassins -> [0,2,6,7]
acabaccabc -> [2,4,6,8]
ssssssjjjsjj -> [5,8]
hrhrhhrhhhrr -> [3,7,10]
fubuaabubuau -> [0,1,4,6,10]
jjaahajjhahaaahjjh -> [2,6,8,11,14]
\$\endgroup\$
  • \$\begingroup\$ It took me a few tries to understand the first paragraph. I think it is explained well, but I may just have been unfamiliar with the language. Adding an explanation of "occurrence" may help? \$\endgroup\$ – FryAmTheEggman Jul 18 at 20:34
  • 1
    \$\begingroup\$ The formal definition in the first paragraph is clear if you are used to such an academic style, though it might unnecessarily hard to grasp for users with no such background. It might be worthwhile to start with an informal explanation before giving the concise formal specification. E.g. something like this: Consider the following game: You are given a string like acabaccabc and need to defend it against attacks by marking some of its characters. An attack is a continuous substring of the given string, e.g. ca, and it is defended if one of the occurrences of the substring has (1/2) \$\endgroup\$ – Laikoni Jul 28 at 18:43
  • 1
    \$\begingroup\$ a character that was marked by you. In the given example, ca occurs two times and covers the characters at positions 1,2 and 6,7 (with positions starting with 0). Thus, at least one of the positions 1,2,6 or 7 would need to be marked to defend the attack. Your goal is to find a marking such that the string is defended against any attack. Furthermore, you want to mark as few characters as possible. (2/2) \$\endgroup\$ – Laikoni Jul 28 at 18:43
2
\$\begingroup\$

Posted here

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

Check If A Binary Search Tree Is Balanced

Now posted on CodeGolf.StackExchange.com:

Write The Shortest Program To Check If A Binary Tree Is Balanced

\$\endgroup\$
  • 1
    \$\begingroup\$ Looks like a nice challenge! I think you should specify what representations of a binary tree are accepted. There is certainly the representation as a list (where the children of the entry at index r are at 2*r and 2*r+1), but there might also be other native representations. \$\endgroup\$ – flawr Aug 5 at 6:44
  • \$\begingroup\$ Now that you've posted this, please edit it to be only a link to the main challenge and then delete your post to help keep the Sandbox tidy. Thanks! \$\endgroup\$ – AdmBorkBork Aug 7 at 14:28
2
\$\begingroup\$

Posted to PPCG. Thx for the votes!

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

Nearest Primes Converted String

Inspired by this SO question.

Challenge:

Given a string input, convert each of its characters to its integer code-point, and then get the nearest prime \$p\leq c\leq P\$ (where \$c\$ is the code-point of the given characters, \$p\$ is the nearest prime below it, and \$P\$ the nearest prime above it), after which we convert that prime back to a character.

For example:

Input: test
It's code-points: [115, 101, 115, 116]
The primes \$[p, P]\$: [[113,127],[101,101],[113,127],[113,127]]
The nearest prime of the two: [113,101,113,113]
Output: qeqq

But wait

What happens when the nearest prime is an unprintable character, like 127 for character y? In that case we'll.. I have multiple things in mind. Will decide later how to deal with them. I might restrict it to printable ASCII only or printable unicode values only. Will edit this information later in after making some example implementations myself.

Challenge rules:

  • I/O can be in any reasonable format. Can be a string, list/array/stream of characters, input one by one through STDIN, etc. Taking the characters already as code-points is not allowed, unless your language has no other choice!
  • If the distance between the current code-point and its two nearest primes below and above are equal, we'll use the lowest prime of the two (i.e. f with a code-point of 102 and the prime above/below it being 101 and 103, both with a distance of 1, will become 101 (e).

General rules:

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

Test cases:

Input:          Output:

test            qeqq

TODO: More to come.

\$\endgroup\$
  • 1
    \$\begingroup\$ looks good. This challenge is closely related to this one, but I'm curious as to where else this will go; I've enjoyed many of your challenges. \$\endgroup\$ – Giuseppe Aug 7 at 19:34
  • 3
    \$\begingroup\$ As it stands, I would VTC this as a dupe of the challenge @Giuseppe linked as it just requires wrapping those solutions in converting to codepoints, mapping and converting back to codepoints. That that would be trivial in some languages but less so in others is what might stay my dupe-hammer. If and how you decide to handle unprintables, though, could well change my opinion. \$\endgroup\$ – Shaggy Aug 7 at 21:18
  • 1
    \$\begingroup\$ And, without having tried to come up with to restrict the characters in the output, I think the only feasible way to do so would be to restrict it to printable ASCII as, off the top of my head, the only way I can think of to restrict it to printable UTF would be through the use of some sort of lookup table, which, in my book, would make this a chameleon challenge. \$\endgroup\$ – Shaggy Aug 7 at 21:21
  • \$\begingroup\$ @Shaggy Yeah, I indeed thought the same thing as your second comment, which is why I hadn't decided anything yet. And I agree with your VTC comment. I've looked at some of the implementations of that challenge, and putting a convert from/to string around it works as is. If you have any suggestions on how to change this challenge, feel free to let me know. I will see if I can come up with something myself as well to change it. If not, I'll just delete it. \$\endgroup\$ – Kevin Cruijssen Aug 8 at 7:15
2
\$\begingroup\$

A Picture is Worth a Thousand Words

The average word is four characters/bytes long. So a picture, according to the old saying, is worth 4 kilobytes. But how complicated can that picture get?

Using any language or length of code you want, generate an image exactly 4,000 bytes in size with the highest possible entropy. You may use any standard image format. Your score will be the compression ratio when your image is compressed as a .zip file. For example, an image that compresses to 2,000 bytes will score 2, but if it expands to 4,100 bytes it will score 0.9756. Lowest score wins.

\$\endgroup\$
  • \$\begingroup\$ What image formats are allowed? \$\endgroup\$ – wastl Aug 13 at 2:41
  • \$\begingroup\$ @wastl All of them. \$\endgroup\$ – Purple P Aug 13 at 3:19
  • \$\begingroup\$ should the program output to a file or can it print a list of bytes? \$\endgroup\$ – SuperStormer Aug 13 at 12:20
  • 3
    \$\begingroup\$ Interesting challenge. .zip is a file format, not a compression method, though. You'll need to specify what compression method is used -- DEFLATE, LZMA, etc. -- because that could drastically affect the scoring. \$\endgroup\$ – AdmBorkBork Aug 13 at 12:51
  • \$\begingroup\$ @SuperStormer It shouldn't matter as long as you upload the image file. \$\endgroup\$ – Purple P Aug 13 at 15:03
  • \$\begingroup\$ @AdmBorkBork How about gzip? I would specify version 1.6 because that's what I have. \$\endgroup\$ – Purple P Aug 13 at 15:04
  • \$\begingroup\$ If you say something like gzip 1.6 using DEFLATE with default settings that should probably suffice. \$\endgroup\$ – AdmBorkBork Aug 13 at 15:58
  • \$\begingroup\$ I didn't test this but I feel that any uncommon image format of raw data will have the optimal score (assume the compressor is smart enough to store without compression) \$\endgroup\$ – user202729 Aug 16 at 4:42
2
\$\begingroup\$

tags: "code-golf", "ellipse", "geometry"

Sandbox Questions

Is this a proper code-golf question?

A major challenge is: How to verify the computed shape? Numerical verification is impossible, since there are infinitely many possible solutions. Is there an easy way to plot xy-data online, or should I provide a script myself? Your suggestions are greatly appreciated.

edit:

after 3 days of being posted here in the sandbox, I still have no clear answer to the above question. I therefore propose to ask participants to include their own plot in the answer, which they can make with whatever plotting tool they wish. If people feel inclined to cheating, they only fool themselves, don't they?

Introduction

To create a circle you can stick a nail in a piece of board, put a loop of string around it and hold it taut with a pencil at the other end. Move the pencil and you get a circle. If you put the loop of string around two nails and move your pencil, you create an ellipse. But what happens if you use three nails, or four, or ten perhaps? It's gonna get ugly soon if you try this in real life, and that's where computers come in handy.

Challenge

Your task is to write a program or function that accepts two inputs:

  • A list of (x,y) coordinates (viz. the nails), of arbitrary length>2.
  • The length of the rope.

And produces the following output:

  • A list of coordinates of the poly-oval, which could be fed to a plotting-tool. Plotting the output does not need to be part of your program!

References

Details:

  • You may assume that the input coordinates form a convex shape (no inner points on which your program could crash).

  • As coordinates, you can use tuples, pairs, complex numbers or even two separate scalars if you like.

  • The output resolution (ie. the length of the list) is not so important, but is should give a fair representation of the real curve. In my experience, you'll need between 100 and 1000 points. For smaller rope lengths, you need an even higher resolution.

Rules and scoring:

  • This is code-golf, so shortest answer in bytes for each language wins.
  • Standard rules and default I/O rules apply.
  • Loopholes forbidden (of course).

Example Input and Output

Provide at least one example input and output. Make sure they match your own description of what the input should look like.

Input can be any of the following:

P = [2+0j, -2+1j, -2-1j]

P = [(2,0),(-2,1),(-2,-1)]

X = [2,-2,-2] and Y = [0,1,-1]

Output should be in one of the following forms:

[0.862+1.591j, 0.703+1.668j, 0.527+1.729j, ...]

[(0.862,1.591), (0.703,1.668), (0.527,1.729), ...]

X = [0.862, 0.703, 0.527, ...], Y = [1.591, 1.668, 1.729, ...]

\$\endgroup\$
  • \$\begingroup\$ "You may assume that the input coordinates form a concave shape" I think you mean convex. This is a very helpful assumption though, as you would otherwise need to calculate the convex hull before doing anything interesting. \$\endgroup\$ – Beefster Aug 13 at 22:05
  • 2
    \$\begingroup\$ "How to verify the computed shape?" - Two possibilities: 1. don't worry about it and make this a graphical output challenge ; 2. specify a starting angle and angle step and require accuracy to within 2 decimal points. ... I personally would go with #1 \$\endgroup\$ – Beefster Aug 13 at 22:11
  • \$\begingroup\$ @Beefster Thank you, I did indeed mean convex. As per your second comment, frankly I am not interested in how to write short plotting code, I am interested in the calculation itself. But thanks a lot for your help, I think I will post in a couple of days:) \$\endgroup\$ – Hermen Aug 14 at 16:28
  • \$\begingroup\$ One solution would be to specify a pixel resolution and require that the density of output points should be sufficient that the maximum separation between the curve and the piecewise linear output should be half a pixel. Then you can compare the output with the output of a reference implementation by looking for separations of more than one pixel. \$\endgroup\$ – Peter Taylor Aug 20 at 15:55
2
\$\begingroup\$

Black Hole Evaporation

Background: In empty space, occurring all the time, there are pairs of particles that appear and then, usually soon after, cancel each other out. At a certain distance from a Black Hole, it's possible that a pair of particles might spontaneously appear and, if the distance is just right, one of the particles will fall into the Event Horizon while the other escapes off into space, never getting a chance to cancel each other out. The exit of those particles is Hawking Radiation. Eventually, this process causes the entire Black Hole to evaporate away.

Challenge

Given a string of numbers, emit the negative of the single digit number closest to, in front of, the infinity symbol ∞ (the event horizon), and continue emiting it until there are no digits left in front of the infinity symbol. Then print the rest of the string masking each character uniquely and different from the masked character (burst of energy that might take place at the final instant), excluding any infinity symbols.

Test cases

Input:                      Output:
111∞4567                    -1 -1 -1 jkl;
3∞                          -3
3-145∞962                   -5 -4 1 -3 ™©®
4-567-9∞1-23                 9 -7 -6 5 -4 😐😈😎😻
2-1∞                        1 -2
34∞67∞89                    -4 -3 9876
-123∞456                    -3 -2 1 ♫♪#
6-6∞6                       6 -6 ä
48120∞                      0 (or -0) -2 -1 -8 -4
---5∞555                    5 オゼヰ

Challenge rules

  • Anything after the first infinity symbol can be ignored as it has fallen into the Black Hole and we know nothing more about it anyway until after evaporation, where the information is a bit scrambled.
  • The code should only expect numbers, negations, and infinity symbols. No decimal points or other symbols. The input can be an array, list, etc..., but each character must be separate, including the negation and infinity characters.
  • A negation only applies to the single digit immediately after it. See the test cases above.
  • You may mask the remaining characters after evaporation with any character set of your choice, as long as the resulting character is different from the masked character, and each character in the resulting output is unique. For languages limited to smaller character sets (or type constraints), characters may repeat after each possible unique character has already been utilized in the output.
  • You may use the '_' symbol instead of the '∞' symbol.

General rules

  • This is , so shortest code in bytes in its respective language wins.

  • Standard rules apply for your answer with default I/O rules, so you are allowed to use STDIN (with the specification above)/STDOUT, functions/method with the proper parameters and return-type, full programs.

  • Default Loopholes are forbidden.
  • If possible, please add a link with a test for your code (TIO).
\$\endgroup\$
  • \$\begingroup\$ I'm thinking of expanding this to all alpha numeric characters. \$\endgroup\$ – ouflak Aug 7 at 19:04
  • \$\begingroup\$ What does it do if there is a single number after the infinity symbol? \$\endgroup\$ – TheOnlyMrCat Aug 8 at 6:53
  • \$\begingroup\$ I'll update the rules and the test cases. Curiously, I already sort of demonstrated that case by having nothing after the infinity symbol. Nice catch. \$\endgroup\$ – ouflak Aug 8 at 6:55
  • \$\begingroup\$ If 121 remains after evaporation, is reversing that string an acceptable scrambling? \$\endgroup\$ – Adám Aug 8 at 7:21
  • 2
    \$\begingroup\$ Any particular reason to use ? Adding Unicode into the mix is an unnecessary complication for many languages. Maybe allow substituting _? \$\endgroup\$ – Adám Aug 8 at 7:22
  • \$\begingroup\$ @Adam, "If 121 remains after evaporation, is reversing that string an acceptable scrambling" Absolutey! Our understanding of what happens to the information after Black Hole evaporation is still under much debate. It is entirely possible that the result of scrambling might result in the same information. We just don't know. \$\endgroup\$ – ouflak Aug 8 at 7:46
  • \$\begingroup\$ @Adam, "Any particular reason to use ∞? Adding Unicode into the mix is an unnecessary complication for many languages." Yeah I thought about that. It can even be excluding factor, which I don't like. I really want that infinity symbol though.... I'll have a think about it, but any suggestions like yours are welcome. \$\endgroup\$ – ouflak Aug 8 at 7:49
  • \$\begingroup\$ @Adam, "If 121 remains after evaporation, is reversing that string an acceptable scrambling?". After re-reading through the Information Paradox, I think the answer is 'no'. '121' should definitely end up different. I'll have to find some way to re-word the challenge, and I can be talked out of this. This requirement seemed rather innocent, but as I'm trying to code this up in my head, it can get complicated. \$\endgroup\$ – ouflak Aug 8 at 8:01
  • 2
    \$\begingroup\$ The connection between the background and the task is not very clear. The comment about information suggests that you have a much clearer idea which you haven't included in the question. There's no need to overload the question with back story, but a link to a more detailed explanation might make it feel less arbitrary. \$\endgroup\$ – Peter Taylor Aug 8 at 8:23
  • \$\begingroup\$ @PeterTaylor, I've been mulling over your comment and I'm not sure what to include. Links to the Information Paradox or Hawking Radiation, or both? \$\endgroup\$ – ouflak Aug 8 at 8:41
  • \$\begingroup\$ Probably both. AIUI, the infinity symbol represents the event horizon, the symbols to the left represent virtual pairs which become Hawking radiation, the symbols to the right represent the captured information, the emission of the inverted symbols to the left corresponds to the emission of Hawking radiation, and the shuffling of the symbols to the right corresponds to the information paradox. (I'm not sure without checking some reference why there's anything left to the right after evaporation). It would be good to sketch the correspondences and have some "Further reading". \$\endgroup\$ – Peter Taylor Aug 8 at 8:46
  • \$\begingroup\$ @PeterTaylor, Ok thanks. The final stage of evaporation might release a detectable packet of energy (which has yet to be seen or is even theoretically certain), so that's kind of what that represents. There might be something left over afterwords, or maybe not. When I get the chance, I'll edit some links in and parenthesize some metaphors in there as well. \$\endgroup\$ – ouflak Aug 8 at 8:55
  • 1
    \$\begingroup\$ @ouflak Regarding you can use it but allow substitution. Btw, _ is the infinity symbol in the J language. \$\endgroup\$ – Adám Aug 8 at 9:27
  • \$\begingroup\$ @Adám, What about, "If your language has a built-in substitute for ∞, you may use that. If your language can't use Unicode, or use it efficiently, you may use the '_' symbol instead." Does that sound fair and inclusive enough? \$\endgroup\$ – ouflak Aug 8 at 10:03
  • 1
    \$\begingroup\$ @ouflak What if your language's infinity is inf? That's three symbols, so it complicates matters a lot. "use it efficiently" is unclear? Does that include causing higher byte count? How about just: You may use the _ symbol instead of . \$\endgroup\$ – Adám Aug 8 at 10:06
2
\$\begingroup\$

Determine the minimal indices needed to cover all queries

This challenge is based on Mongo's handling of compound indices and index intersection, inspired by a problem that came up at work, but I'll restate the relevant details here.

Background

In any database, relational or not, the primary purpose of indices is to optimize data lookup.

For example, if the task of finding all questions on this site had to be accomplished by looping through all posts and looking for the code-golf tag, it would be unusably slow. An index, however, organizes this data in a way that enables fast and efficient lookup of the data we want, which drastically reduces the resource cost of queries in exchange for some more work and space in maintaining the index.

However, the cost of maintaining indices is not negligible, so it quickly becomes untenable to create 2^N indices for N fields. (Databases designed for this purpose do exist and are the better choice when this functionality is actually needed. I'm ignoring this fact because it's a more interesting challenge this way.) Thus, careful index construction and selection is important to get the most bang for your buck.

Details

A simple index only organizes data based on one field but Mongo provides two ways to efficiently query on more than one field: compound indices and index intersection.

Compound Indices

Compound indices organize data based on a sequence of fields, e.g. [A, B, C]. Here, order matters. If data is sorted by A then B then C, then doing a lookup based on C first cannot be done efficiently since there are no guarantees on where the desired data might be located within the index (whereas one could do e.g. a binary search based on A).

Note: compound indices enable efficient queries on prefixes of that index as well. That is, a compound index on [A, B, C] enables efficient queries that have [A], [A, B], or [A, B, C]. However, as previously mentioned, it does not support queries that have [B], [C], [A, C], or [B, C].

Index Intersection

Exactly two indices can be used to optimize a query if there does not already exist a compound index for the desired fields. That is, if there is an index on [A] and an index on [B], then a query on [A, B] can be executed fairly efficiently (though not as efficiently as if there was a compound index, but let's ignore that). This also applies to prefixes of indices, so an index on [A, B, C] and an index on [C] can be intersected to support a query with [A, C].

Problem

Given N fields, determine the minimal indices needed to make all possible queries on those fields efficient. That is, minimize the total number of fields indexed. There may be more than one minimal set.

Note: the order of fields in the query doesn't matter since the query analyzer can reorder these fields to be as optimal as possible before running the query.

Input/Output

Input is a single positive integer and the output should consist of clearly-delimited sequences.

Examples

A variety of output formats are shown here to demonstrate what I mean by "clearly-delimited sequences".

N: 1

[0]

N: 2

AB
B

N: 3

[['A', 'B', 'C'], ['B', 'C'], ['C']]

['AB', 'BC', 'CA']

To elaborate on the first example in this N=3 case, the first index covers a query with all three fields, index intersections cover all choices of two fields, and index prefixes cover all queries with one field.

Note: for N=5, the obvious pattern does not hold; the indices ABCDE BCDE CDE DE E do not enable an efficient query on A, C, E.


Meta

I am really hoping this doesn't boil down to [A, B, ..., X], [B, ..., X], [C, ..., X], ... [X]. I haven't taken a look at the N=4 case yet though so I don't know if this pattern holds.

Thankfully, the pattern breaks down for N=5.

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

Up side down keyboard

Jono 2906 wants you to create a translator from plain Australian to up-side-down text after inventing a keyboard dedicated to typing up-side-down text, since they still want to demonstrate that their keyboard is powerful after failing to program in their keyboard.

However, they want your implementation to be typed with their own keyboard, since they also want to get used to programming using their keyboard.

Input/Output

The whole ASCII character set mapped to their up-side down variation (the up-side down " is a double ,):

 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~

 ¡,,#$%⅋,)(*+'-˙/
0ƖᄅƐㄣϛ9ㄥ86:;>=<¿
@∀qƆpƎℲפHIſʞ˥WNO
ԀQɹS┴∩ΛMX⅄Z]\[^‾
,ɐqɔpǝɟƃɥᴉɾʞlɯuo
dbɹsʇnʌʍxʎz}|{~

The rest of the characters are kept as-is(yes, the unprintable characters are in the ASCII character set). The characters that are larger than 0x7f will be mapped back by subtracting the character code by 128.

If you are using a character that is larger than 256, modulo the character's character code by 128 before checking the availability.

Rules

  • No standard loopholes, please.
  • Input and output will be taken with our standard input methods.
  • If you force Jono 2906 to change a key on their keyboard (allowing typing your specified character), you will get a penalty of +2 bytes for every key you add.

\$\endgroup\$
  • 2
    \$\begingroup\$ I don't think I quite follow. Are we given a character as input and need to output the upside-down version? \$\endgroup\$ – AdmBorkBork Aug 27 at 14:06
  • 1
    \$\begingroup\$ (1) I still find the question confusing even as to the basic functionality required. The "Input/Output" section seems to me to say that it's a Kolmogorov problem, but the "Rules" section talks about input. (2) If a character remapping is involved, the question should list Unicode codepoints for the characters in question, and should list test cases with Unicode codepoints. (3) Is the last rule saying that the program must work as is and after mangling? Or is it just a gimmick ("Post your code upside down, but it only has to work the right way up")? \$\endgroup\$ – Peter Taylor Aug 28 at 8:39
  • 1
    \$\begingroup\$ "The rest of the characters are not kept as-is(yes, the unprintable characters in the ASCII character set)." should this not be there? As for that entire paragraph, if I understand correctly: unprintable characters < 33 (as well as 127) will be kept as is; printable ASCII characters displayed will be converted to upside down; other printable ASCII characters and any character above 127 will be modulo-128 before doing the same check. \$\endgroup\$ – Kevin Cruijssen Aug 28 at 9:24
  • 1
    \$\begingroup\$ As for the last rule: we can only use those upside down characters in our source code, and when converting it to regular it should also work? So both programs ABC and ∀qƆ should work exactly the same? \$\endgroup\$ – Kevin Cruijssen Aug 28 at 9:25
2
\$\begingroup\$

Heavy Box Stacking

Posted

\$\endgroup\$
  • 1
    \$\begingroup\$ For your second case, for clarity i think the output should be [[9999, 3030, 1234, 432, 87]], i.e., it should also be a list of lists (albeit, a list of just 1 list). \$\endgroup\$ – Chas Brown Aug 15 at 23:08
  • 2
    \$\begingroup\$ I'm going to vote for the optimal solution instead of the greedy - I think there's an interesting brute force approach that doesn't take forever for any of your test cases (although obviously 9999 boxes will take an eternity no matter what). \$\endgroup\$ – Chas Brown Aug 16 at 0:40
2
\$\begingroup\$

Wrong position

I typr re;atively accuratrly, but so,etimes I made a whole nlock of text illegible by shifting a key right. So I need a program that corrects my text back to its original meaning.

Rules

  • You have to left shift on a standard English QWERTY keyboard.
  • Whitespace do not count for the procedure before left-shifting and are kept as-is in a standard left-shifting procedure. If the key is the leftmost letter/symbol on a keyboard(i.e. The ~key, Q key, A key, Z key.), the key is kept as-is. If you reach a control character while left-shifting (Caps lock and Shift), their effects will not be triggered and the character before left-shifting is kept.
  • This is a contest; the shortest answer wins.
  • Both the input and the output shall be given via our default methods.

Representation of a subset of the QWERTY keyboard that you will need

The two lines connected are possible values of the key: shifted/unshifted.

~!@#$%^&*()_+
`1234567890-=

QWERTYUIOP{}|
qwertyuiop[]\

ASDFGHJKL:"
asdfghjkl;'

ZXCVBNM<>?
zxcvbnm,./

(Space)
(Space)

Input

The input will always be a non-empty string conforming the rules above.

Output

The output will be the input string corrected to the originally intended meaning.

Examples:

Yjod ,sfr yjr, imjsppu/ -> This made them unhappy.
vpfr hp;g -> code golf

Feedback

I think this is not a duplicate; however, is any part of this challenge unclear or needs improvements?


\$\endgroup\$
  • 1
    \$\begingroup\$ I think you are mixing up left and right. Clearly, ~, Q, A and Z are leftmost keys, NOT rightmost. And your examples appear to be left-shifting, not right-shifting. \$\endgroup\$ – wastl Sep 7 at 11:27
  • \$\begingroup\$ "I think this is a duplicate" - so why sandbox it? Or did a not go missing in editing? \$\endgroup\$ – Peter Taylor Sep 9 at 8:36
  • \$\begingroup\$ Thank you. Predominantly my mouse was not working again, I didn't get around to fix this. \$\endgroup\$ – A _ Sep 9 at 8:56
  • \$\begingroup\$ "sonetimes" and "vlock" are shifted the wrong way. \$\endgroup\$ – Hiatsu Sep 9 at 16:20

You must log in to answer this question.

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