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

4648 Answers 4648

1
92 93
94
95 96
155
0
\$\begingroup\$

(Possible deadlines?)

The robber and the bank (Bank managers)

(Based off 'Two makes all the difference')

A group of robbers has decided to break into a bank, but one of the members leaked the information to the bank. To stop the robbers from getting any money, they have decided to change the combination on each vault to something more complicated.

Your task

As you are a bank manager, you must figure out a new combination of rotations for the wheel lock system of the vaults. The vaults take 7 turns each, represented in degrees. You must write a program that takes 10 integers (separated in any way you like) and outputs the processed integers which have been made from the originals. This is important, as you cannot use a randomizing function to make the new combination.

Sample input:

(Note: The numbers will all be multiples of 5. The output should also be this way.)

10, 50, -230, 110, 20, -5, 50, 80, 30, -50

Sample output:

30, 110, -110, 230, 50, 115, 110, 170, 70, 70

This result is obtained by the simple (Python 3) algorithm (deliberately non-golfed)

inputlist = input('list')
for i in len(inputlist):
    if inputlist(i) > 0:
        inputlist(i) *= 2
        inputlist(i) += 10
    else:
        inputlist(i) += 120

(Note the abscence of a condition for 0 degrees, as a wheel lock would not take such a value. Also note the fact that the algorithm is a full program, not just a function that would do the same.)

Winning conditions

The shortest uncracked algorithm wins. In case there are two algorithms that have the same length and are uncracked, the one with more votes will win.

The robber and the bank (Robbers)

Your group of robbers are breaking into a bank! However, one of your members seems to have leaked the information to the bank managers. Your team manages to hack the bank's system to retrieve the original password and part of the algorithm, but your connection was cut.

Your task

You will receive 10 integers and a snippet of code (need help deciding how much) from the algorithm used to change the lock's combination. You will need to deduce what the algorithm is and finally the new combination.

Sample information:

10, 50, -230, 110, 20, -5, 50, 80, 30, -50
Part of code

Sample answer:

30, 110, -110, 230, 50, 115, 110, 170, 70, 70
Code (optional)

Winning conditions

The robber with the most vaults (algorithms/combinations) cracked wins. In the case that there are two robbers with the same number of cracked vaults, the robber with more votes will win.

(Any way to separate who wants to be a robber and who wants to be a manager? Perhaps a separate system for answering?)

\$\endgroup\$
1
  • \$\begingroup\$ 1. It's quite confusing the way you keep talking about algorithms when you mean programs. 2. It's not at all clear what exactly the bank managers post. 3. It's not at all clear that the robbers can do anything except guess. \$\endgroup\$ Aug 24, 2015 at 17:04
0
\$\begingroup\$

Buffalo buffalo buffallo buffalo buffallo buffallo buffallo parse buffalo buffalo buffallo buffalo buffallo buffallo buffallo

Write a program that can take a integer input N > 0 and then describes the syntax of a phrase in the style of "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo" with N repetitions.

The wikipedia page has the parse tree and accepted syntax for phrases up to N = 8.

The sentence is unpunctuated and uses three different readings of the word "buffalo". In order of their first use, these are:

  • a. the city of Buffalo, New York, United States, which is used as a noun adjunct in the sentence and is followed by the animal;
  • n. the noun buffalo, an animal, in the plural (equivalent to "buffaloes" or "buffalos"), in order to avoid articles;
  • v. the verb "buffalo" meaning to outwit, confuse, deceive, or intimidate.

So for the first eight the output should be:

  1. Bully (meaning the imperative "[you] Buffalo!" - command someone to bully).
  2. NY bison (meaning a bison that hails from the town of Buffalo).
  3. NY bison bully (a bison from NY bullies).
  4. NY bison bully bison (NY Bison bully a bison)
  5. NY bison bully NY bison (NY bison bully NY bison)
  6. Buffalo buffalo buffallo buffalo buffallo buffallo (NY bison bully (TBC)
  7. Buffalo buffalo buffallo buffalo buffallo buffallo
  8. Buffalo buffalo buffallo buffalo buffallo buffallo buffallo

In the comments section, wikipedian Robin Johnson has it for 9 through 12 (NY stands for Buffalo, NY):

  1. (NY bison [which] bison bully) bully (bison [which] NY bison bully)
  2. (Bison) bully (NY bison [which] NY bison (NY bison bully) bully)
  3. (NY Bison) bully (NY bison [which] NY bison ([which] NY bison bully) bully)
  4. (bison [which] bison ([which] NY bison bully) bully) bully (NY bison [which] NY bison bully)

He added parenthesis for more phrase visibility, but that is not needed.

Your program should take the input and explain the gramatically correct phrase doing the following substitutions:

  • NY for the Buffalo, NY city.
  • Bison for the animal Buffalo.
  • Bully for the verb.

[code-golf] [kolmogorov-complexity]

\$\endgroup\$
3
  • \$\begingroup\$ Are we allowed to use NLTK? \$\endgroup\$
    – Beta Decay
    Aug 27, 2015 at 10:55
  • \$\begingroup\$ The name is a little obnoxious to be honest. I would recommend removing at least a few "buffalos" from either side of "parse." \$\endgroup\$
    – Alex A.
    Sep 4, 2015 at 17:42
  • \$\begingroup\$ @AlexA. that is a good suggestion, and I think the title as is is gramatically wrong too. \$\endgroup\$ Sep 4, 2015 at 23:48
0
\$\begingroup\$

Get home by ONLY turning right

You're finally trying to get a drivers license. About halfway during the lesson, the instructor decides that you've sufficiently mastered telling the gas- and brake pedal apart. It's time to practice the next thing: turning right.

The challenge

Your program is provided an ASCII roadmap, with your starting position, direction and home marked. You should drive home in the minimum distance required.

Your program must output route instructions for reaching your destination. The following instructions must be printed by your program whenever appropriate.

Input

Items on the map will look like this. There are only horizontal and vertical roads. (I'm open for suggestions on this one.)

  • = – A horizontal road
  • | – A vertical road
  • # – A crossroad
  • > / < / ^ / v – A one-way street
  • H – Your home
  • N / E / S / W – Your starting point and direction (North, East etc. The map is oriented north-up.)

A road segment (a signle character) is connected to another segment when:

  1. It ends at an adjacent segment that has the same alignment. E.g.: == or
    |
    |
  2. It ends at a segment with a different alignment (horizontal vs vertical). E.g.: =|, |=,
    =
    |
    or
    |
    =
  3. It ends at a crossroad. E.g.:
     |
    =#=
     |
  4. It ends at a roundabout. E.g.:
 |
=O
 |

It is not connected in (for example) these instances:

  • |
     |
  • ||
  • | =

Moving one position up, down, left and right all count as traveling the same distance.

Output

  • Turn right
  • Go straight on
  • Take the {1st/2nd/3rd} exit (at a roundabout)

You take roundabouts clockwise. Because of this, taking any exit amounts to turning right.

Rules

  • Each instruction must be on its own line.
  • No other output is permitted.
  • Your program may take no longer than a minute to run on an average home user’s computer.

Standard loopholes are forbidden, unless specified otherwise.

This is code golf. The shortest answer wins.


This is an early draft. Input is welcome, especially on the feasibility of requiring the shortest possible route, if this should be code golf, how input should be generated (randomly but the same for all programs? A few predefined maps?) and any improvements for the challenge. Any constructive feedback is welcome, even if it's just about spelling and grammar errors.

\$\endgroup\$
4
  • \$\begingroup\$ Very related challenge \$\endgroup\$
    – Sp3000
    Aug 27, 2015 at 11:50
  • \$\begingroup\$ @Sp3000 Not a duplicate though. \$\endgroup\$ Aug 27, 2015 at 15:24
  • \$\begingroup\$ How are the roundabout exits numbered? \$\endgroup\$ Aug 27, 2015 at 17:51
  • \$\begingroup\$ @ASCIIThenANSI I've updated the text to say you take roundabouts clockwise. I hope it's sufficiently clear now. \$\endgroup\$ Aug 27, 2015 at 18:33
0
\$\begingroup\$

Arranging Matrices

(doesn't actually require any matrix math)

While doing homework on matrix multiplication, I realized that I could avoid rewriting all of the matrices by arranging them intelligently on the page. If the problems were:

A * B = C
A * D = E
F * D = G

I could arrange the matrices like so:

 BD
ACE
 FG

This arrangement satisfies the requirement that each product (C E G) have the correct factors in the correct directions. For example, the A * D = E so E is to the right of A and below D.

The challenge is, given a list of multiplication problems (in the same format as above), output an arrangement of them that involves the fewest letters (the above solution has 7, the minimum).

\$\endgroup\$
2
  • \$\begingroup\$ Needs a test case for an input which has conflicts. The easiest one would probably be A * B = C B * A = D. \$\endgroup\$ Sep 1, 2015 at 10:31
  • 1
    \$\begingroup\$ You might want to first explain how for a single matrix multiplication you usually arrange the matrices to do the computation. I don't think everyone is familiar with the technique this challenge is based on. \$\endgroup\$ Sep 1, 2015 at 11:09
0
\$\begingroup\$

Hello everyone! I've been lurking around for a couple of weeks now and I think this site is super interesting!

I've decided that I definitely want to contribute to this site as well and have composed a new challenge over the last few days, that I hope you'll find interesting too!
I've tried to do all the reading beforehand and hope that I've got everything right and that this kind of thing hasn't been done before.
Please let me know if you think something needs to be changed!

Anyways, here is my proposed challenge:


Programs With Taste

[probably will add some "flavor text" here]

The Task:

Write a program that takes an arbitrary group of pictures and ranks them after this program's "preference."

What that means is, you should come up with an algorithm that favors some attributes in pictures over others by comparing them in a specific way.

This is a popularity-contest, so what I want to see is interesting and creative methods of "pseudo-subjectively" ranking images.

As an example, one program could favor an overall more colorful image over a mostly gray one, or another could have a "favorite" color and ranks pictures which have it more, higher than others. You could even come up with an elaborate scoring system that combines a couple of criteria.

Details:

As input your program should accept any amount of images, which can be of any size.
It doesn't matter if your program requires them to be in a specific file format.

The output should be a ranked list from "favorite" image to "least favorite", with items that unmistakably represent each of the pictures (e.g. a list of file names or a list of the images itself).
If you want, you can also include the actual numbers (or score) that are compared in the output.

The program should definitely be deterministic, so that the same group of pictures will always result in the same order.

If you're entering, please also provide a short description of what your algorithm prefers in a picture and how it's calculated.

As a bonus task I think it would also be really interesting to see what "the perfect picture" for your algorithm would be, meaning that this image would theoretically always be ranked the highest by your program.

Example images:

Here are some groups of images you can use as examples:

[I'll create and/or find some images to put here]

You can download them all in a .zip here.

Good luck!

\$\endgroup\$
5
  • \$\begingroup\$ Whats stopping me from writing my program so that it prefers pictures with a filename closer to 0 in the ascii table (sorting)? \$\endgroup\$
    – Blue
    Sep 3, 2015 at 16:46
  • 1
    \$\begingroup\$ @muddyfish Nothing, really. I wouldn't expect it to do well in a popularity contest, though. It's not a golf, so the length of the program isn't really a concern. \$\endgroup\$
    – Geobits
    Sep 3, 2015 at 16:50
  • 1
    \$\begingroup\$ This is definitely "Too Broad". \$\endgroup\$ Sep 4, 2015 at 13:54
  • \$\begingroup\$ @PeterTaylor Could you please elaborate? I don't really know much what you classify as broad on this site, but personally, I don't think it is, or at least not "definitely." I gave a specific and clear goal - to sort a set of images - while leaving enough freedom in the actual implementation to allow some creative submissions for an interesting popularity-contest. What do you think needs to be narrowed down? \$\endgroup\$
    – Xrott
    Sep 4, 2015 at 23:21
  • \$\begingroup\$ In essence your challenge is "Write any function you want from int[] to double". That isn't specific. I'm not sure that it can be narrowed down sufficiently without becoming a completely different question (e.g. a classifier which distinguishes representational vs abstract art with a reasonable degree of accuracy - and classification questions have their own problems). \$\endgroup\$ Sep 5, 2015 at 8:12
0
\$\begingroup\$

Alternating Hamiltonian Chess Boards


Overview

Find a Hamiltonian cycle on a chess board that alternates between black and white squares. The catch is that the board does not have the colours arranged in the conventional way.


Detail

Consider a chess board, with each square having 4 neighbours (up, down, left, right), apart from the edge and corner squares which only have 3 or 2 neighbours respectively. A Hamiltonian cycle is a closed path (loop) that visits every square exactly once, moving from neighbour to neighbour (never diagonally).

On a chess board, it is easy to find a Hamiltonian cycle that alternates between black and white squares (in fact, any cycle will alternate between black and white squares). What if the black and white squares were not arranged so conveniently? Clearly there are arrangements for which there is no possible alternating Hamiltonian cycle, for example putting all the white squares in one half of the board.

The task of your code is to find any valid cycle, or indicate if there are none.

Input & output

Input

An 8 by 8 board of black and white squares.

This is in the form of a string of 64 characters each of which is either "0" or "1", terminated by a newline. This indicates the colours of the squares in English reading order.

Output

Any valid cycle if one exists, or a zero as an indication that no valid cycle exists.

A cycle is represented by a comma separated list of integers from 0 to 63 inclusive, indicating the order in which the squares are visited. Again the labelling is in English reading order.

Whether a list of a zero, the output is terminated with a newline.

Square numbering

The squares are labelled in English reading order (left to right then top to bottom). So for example, a 3 by 3 board would be labelled as follows:

0 1 2
3 4 5
6 7 8

Sandbox questions

  • Is this equivalent to another question already asked?
  • My first thought was , but I'm now preferring . There are a number of quick checks that can eliminate the possibility of there being a valid cycle, which will be competitive in fastest code. I'd rather see these than golfed brute force approaches.
  • I've chosen 8 by 8 simply because it's a familiar size due to chess. Would this be better with a different size board? For fastest code I'd want the time taken to be over a minute for at least some inputs, so that there is enough time to judge the difference between answers. Ideally for fastest code I'd choose inputs that take quite a bit longer than that to allow for solutions which are far more efficient than I expect.
  • How restrictive should I be with the input and output formats? For fastest code if the body of the problem takes a reasonably long time then input and output conversion should be negligible so I could insist on a single format for ease of measuring answers.
  • Is there any advantage to having a fixed board size, or would it be more interesting with the board size as an initial input N, followed by the board?
\$\endgroup\$
15
  • 1
    \$\begingroup\$ i think "fastest code" is most interesting b/c with code golf its just going to boil down to who can write the shortest exhaustive guess & check program. for fastest code I guess probably that there is some efficient algorithm for hamilton cycles on bipartite graphs? but i'm not actually sure, probably there would be alot of tricks to solve this quickly, and maybe exploit planarity somehow. \$\endgroup\$
    – Chris Beck
    Aug 22, 2015 at 17:55
  • \$\begingroup\$ @ChrisBeck the more I think about it the more I'm leaning towards fastest code too. In which case I'll include unsolvable boards in the input cases too. That will really separate the brute force solutions from those that have clever ways to fail fast. \$\endgroup\$ Aug 22, 2015 at 18:05
  • \$\begingroup\$ @ChrisBeck and trichoplax - I'm intrigued but skeptical. Checking for Hamiltonian cycles is NP-Complete. If we think of the input as a graph with vertices representing the white squares and edges representing the black squares, this easily translates into many algorithms that ask about Hamiltonian paths. Presuming an even split between white and black squares, this results in a maximum of 32! different possible paths to brute force check, or, in the best Monte Carlo simulations, O(1.657^32). That's still 17+ minutes if your algorithm can check 10,000 possible paths per second. \$\endgroup\$ Aug 27, 2015 at 15:39
  • \$\begingroup\$ It might not be NP-complete when restricted to graphs like this though. I'm not sure, my hunch is no, maybe you see a reduction though? Regardless I'm quite sure that it will be at most like, exponential in the number of rows here, not like exponential in the number of grid squares. (Because, it can be translated to a SAT instance of bounded tree-width and there are known algorithms for those.) Making the graph bipartite is often a pretty severe restriction that dramatically reduces the complexity as well. \$\endgroup\$
    – Chris Beck
    Aug 27, 2015 at 15:47
  • \$\begingroup\$ @ChrisBeck Hence why I said I'm intrigued but skeptical. I haven't gone through anything rigorous - the "white squares as nodes and black squares as edges" was just something immediate that sprang to mind. It's certainly possible that there are enough restrictions on the input that can dramatically reduce complexity -- at the least, think of my ruminations as quantifying a maxima. \$\endgroup\$ Aug 27, 2015 at 15:55
  • \$\begingroup\$ @TimmyD If 17 minutes is the worst case brute force then I'll probably increase the size of the board. There are several methods of spotting certain classes of unsolvable boards almost instantly so I'm hoping for solutions that exit very early where possible, and are also optimised with a good heuristic for spotting the solutions that do exist. \$\endgroup\$ Aug 27, 2015 at 18:46
  • \$\begingroup\$ I definitely want to give this plenty of thought before settling on a board size (or maximum test size if I settle on having board size as an input). \$\endgroup\$ Aug 27, 2015 at 18:54
  • \$\begingroup\$ @TimmyD I'm interested in your O(1.657^32). Does that assume anything about the number of neighbours per square? \$\endgroup\$ Aug 27, 2015 at 18:55
  • \$\begingroup\$ @TimmyD I'm fairly sure this case is simpler than the 32! you describe, as each black square has a maximum of 4 white squares to choose from, and some have less otherwise finding a cycle becomes trivial. \$\endgroup\$ Aug 27, 2015 at 19:01
  • \$\begingroup\$ Brute-force checking an n-node graph for a Hamiltonian cycle is O(n!) - that's just straight math, regardless of any bounds on edge connectivity. Way too big to try. "Simple" algorithms exist to check in O(2^n) time, and have been known for years. I've not read the paper showing O(1.657^n) time, so I can't comment specifically, but I would imagine that the author tackles the general case, since they explicitly call out bipartite graphs as being solvable in O(1.414^n) ... I think that's the current best-case. My "17-minute" remark was for the O(1.657^n) time. \$\endgroup\$ Aug 27, 2015 at 19:28
  • \$\begingroup\$ That all said, I do believe that there are ways to shrink that O(1.657^32) time, given the constraints present (i.e., each vertex will have a maximum of 4 edges). I'd have to spend some more time thinking about this than I have to determine for sure. Additionally, all this is assuming that my mapping of "white squares as vertices, black squares as edges" is optimal, which I'm much too humble to think is the case, so there could be different ways of optimizing that, too. \$\endgroup\$ Aug 27, 2015 at 19:40
  • \$\begingroup\$ Related, in a general sense. Might be worthwhile to watch what happens with that one, just to see reaction and responses. \$\endgroup\$ Aug 28, 2015 at 20:49
  • \$\begingroup\$ @TimmyD Thanks - it will be interesting to see if the answers there turn out to be convertible to answers here. \$\endgroup\$ Aug 29, 2015 at 16:03
  • 1
    \$\begingroup\$ I know that this is ancient history now, but I'm fairly positive you can't construct a Hamiltonian path if the squares aren't checkered. Simple proof: Assuming a standard checkerboard, and that you start on black, there's no way to get to another black without taking 2N steps, and white without taking 2N-1 steps. If you swap a black with a white, then you will never be able to step on the black square on a 2N step. \$\endgroup\$ Mar 21, 2016 at 2:29
  • \$\begingroup\$ @NathanMerrill thanks for the proof. It does seem that this challenge will only be possible if I allow diagonal steps in the path too. I should have started by making some test cases. I have some more thinking to do... \$\endgroup\$ Mar 23, 2016 at 14:42
0
\$\begingroup\$

Oh dear, bad CSS! or How to Properly Format CSS™

Please give me any improvements/suggestions you may think of.

The goal is to write a short function to Properly Format CSS™; you must Properly Convert Spaces To Tabs™ and format the CSS nicely.

Bad CSS™

div> *
{
  padding: 10px;
     margin: 1em;
    -webkit-border-radius: 10px 2px 100%; border-radius:10px 2px 100%;
       border: 2px solid yellow;margin: 1rem;
-moz-border-radius:10px 2px 100%}

Proper CSS™

div > * {
--->border: 2px solid yellow;
--->-webkit-border-radius: 10px 2px 100%;
--->   -moz-border-radius: 10px 2px 100%;
--->        border-radius: 10px 2px 100%;
--->margin: 1em;
--->margin: 1rem;
--->padding: 10px;
}

A tab is represented by --->, as you can't embed tabs properly on StackExchange.

All the properties are sorted alphabetically, and nicely formatted (please also note that the order of the properties can be important, such as in the case of margin: 1em; ... margin: 1rem;. The selector is also nicely formatted.

Format

  • Format the selector with spaces around every token
  • A space; a left curly brace ({); a newline
  • One tab; optional spaces (see below); the property name; a colon; a space; the tokens, separated by single spaces how do I define token? (replace 0{unit} with 0); a semi-colon; a new line
  • A newline; a right curly brace (})

Property sorting

Sort the properties alphabetically, ignoring prefixes. Then list each prefix for the property specified in the original CSS, starting with the longest, down to the shortest (i.e., none), adding spaces before the property name to pad the shorter prefixes to the longest prefix.

The same property may appear more than once; keep each variant in the original order, as in the example.

Rules

  1. You may not use any built-in CSS parsers and/or formatters.
  2. Standard loopholes are disallowed.

Bonuses

  1. -100 bonus if the function can also format psuedo-classes and elements properly (e.g. p >a::before to p > a::before and p>a:visited to p > a:visited).
  2. -50 bonus if you change :after and :before to the new, two-colon syntax (::after and ::before).

The task is to provide a function to format (correct) some CSS (provided as a parameter) as specified above, not a fully-featured CSS parser – but you get a -1000 bonus if the code is a fully-featured, forwards-compatible CSS3 parser! :)

Input: function parameter or STDIN.
Output: function return value or STDOUT.
No output to STDERR.

\$\endgroup\$
0
\$\begingroup\$

With Rhyme and Reason

A budding poet (you) knows not his rhymes

Lines of code he can write deftly and quick

And those of prose he can write mostly fine

But the poems he creates make him sick

Through study of verse throughout all forms known

Our dear programmer shall learn the right way

But alas, all of his lyrical tomes

Would have him reading until he was gray

At once a brilliant epiphany struck

Thought he, "A program is just what I need!

It will look for me and rake through the muck

Songs and poems of all kinds it shall read

And give to me solely their rhyming scheme

With which I can write that of which I dream"


Your Task

Given an input, you are to output its rhyme scheme.

Rules

  1. You are to only compare the last words in each line when looking for rhymes. These will be referred to as "rhyme words."
  2. For each stanza (lines separated by single line breaks -- think something like a paragraph), you are to assign the first rhyme word the letter "A." If the next one rhymes with any other preceding rhyme word, it shall be assigned the letter of said word (in this case, "A"), and if not, the next letter in the alphabet (in this case, "B"). Once you reach two or more line breaks in a row, you treat whatever follows as separate stanza.
  3. You can code it in so that when you get past the letter "Z," your program wraps around and assigns rhyme words again to "A," but you should not expect that there will be that many rhymes in the stanzas provided. If your program errors instead, that is admissible.
  4. Sight rhymes do not count (you must find some sort of way to compare the words phonetically)
  5. Standard loopholes apply

Input

The input will be in the form of a file, unless your language cannot read files, in which case it will be through STDIN. It will consist of at least one stanza of written text.

Output

Your output will be either written to a file or the console (whichever is easier to read). Your output will consist of letters corresponding to the rhyme scheme as discussed in rule 2; you choose how they are formatted, but please format them in a readable fashion (especially for large inputs).

Scoring

Your score will be the amount of rhymes correctly identified over the total as a percentage. For example, if your program returns ABCA DDEE when the actual was ABBA CCDD, your score would be 3/4, or 75%, because it got AA, CC, and DD, but not BB.

I do not expect scores near 100%, due to the difficulty of this challenge, so if your score is low, don't worry about it.

Here is a link to my implementation of a scorer in Python.


Test Cases

Input: (Sonnets from the Portuguese #43)

How do I love thee? Let me count the ways.
I love thee to the depth and breadth and height
My soul can reach, when feeling out of sight
For the ends of Being and ideal Grace.
I love thee to the level of everyday's
Most quiet need, by sun and candle-light.
I love thee freely, as men strive for Right;
I love thee purely, as they turn from Praise.
I love thee with a passion put to use
In my old griefs, and with my childhood's faith.
I love thee with a love I seemed to lose
With my lost saints, --- I love thee with the breath,
Smiles, tears, of all my life! --- and, if God choose,
I shall but love thee better after death.

Output:

ABBA ABBA CDC DCD

Input:

A budding poet (you) knows not his rhymes
Lines of code he can write deftly and quick
And those of prose he can write mostly fine
But the poems he creates make him sick
Through study of verse throughout all forms known
Our dear programmer shall learn the right way
But alas, all of his lyrical tomes
Would have him reading until he was gray

At once a brilliant epiphany struck
Thought he, "A program is just what I need!
It will look for me and rake through the muck
Songs and poems of all kinds it shall read
And give to me solely their rhyming scheme
With which I can write that of which I dream"

Output:

ABAB CDCD 
ABAB CC

Input:

cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow
cow

Output:

Error.

or

ABCDEFGHIJKLMNOPQRSTUVWXYZA

What I'm looking for help with

  1. How can I figure out a way of easily scoring answers (this seems to be a programming puzzle in and of itself)? Maybe check to see if the characters used match I've made a scorer in Python, but I'm not 100% sure yet that it is completely accurate.
  2. Is this challenge too difficult; should I restrict it to only a certain few test cases?
  3. Regarding test cases, I plan on making a large one for purposes of scoring - how many lines of rhymes would be good?
  4. Would this maybe do better as a partially code golf challenge (factor in length with scoring) with the goal being to be able to give the scheme as accurately as possible for only a few test cases (although I believe that would make this come close to being a duplicate)?
  5. Anything else at all that you notice
\$\endgroup\$
2
  • 1
    \$\begingroup\$ IMO "you must find some sort of way to compare the words phonetically" is too broad. You should provide a clear specification of how words should be compared. I suggest requiring the use of CMUDICT (and allowing it to be preprocessed to remove comments and then read from a file named d), and specifying that words rhyme iff their phonetics as given in CMUDICT agree perfectly from the most stressed vowel to the end. And have test cases which cover words with more than one pronunciation in CMUDICT. \$\endgroup\$ Sep 21, 2015 at 9:36
  • \$\begingroup\$ @PeterTaylor I think you're right, I'll look into CMUDICT, but judging from your comment it ought to be fine. If I allow it, I think I will then factor in length in the score. Thanks for the reply! \$\endgroup\$
    – cole
    Sep 21, 2015 at 15:05
0
\$\begingroup\$

Format the code

Given some source code in a C-like language, format (prettify) it using the following rules:

  • remove all leading/trailing whitespace on each line
  • collapse consecutive empty lines into one empty line
  • if the first line is empty, remove it; same with the last line
  • split lines after each occurrence of a semicolon (;) or left curly bracket ({); if it's the last character on the line, leave it as it is
  • split lines at each right curly bracket (}), so that the bracket is on a line by itself
  • remove all leading/trailing whitespace (if any) that appeared after splitting
  • if a left curly bracket is alone on a line, move it to the end of the previous non-empty line, preceded by one space; any preceding empty line should be removed
  • each line gets an indentation level: the initial level is 0, and is incremented after each left curly bracket and decremented before each right curly bracket; prefix each non-empty line with a number of tab characters given by its indentation level

The input consists of ASCII characters with codes 9, 10 and 32-126. The first non-whitespace character in the input is not a curly bracket. All curly brackets are balanced correctly. You don't need to do any special handling for strings, characters or comments. The output should end in exactly 1 newline character.

TODO: add examples, restrictions and more details
Oh, and it's

\$\endgroup\$
2
  • \$\begingroup\$ You might want to add a special case for for statements, because splitting for (init; test; inc) over three lines with the same indentation is rather idiosyncratic and hard to read. (I would also prefer special cases for semicolons and brackets in character and string literals). \$\endgroup\$ Sep 21, 2015 at 9:05
  • \$\begingroup\$ @PeterTaylor oh, I hadn't thought about for statements, that's a good point. At the same time, I don't want to make the challenge too complicated/difficult. I'm considering removing the semicolon rule, but I'm not completely opposed to your suggestions (I'm just not convinced it's better that way) \$\endgroup\$ Sep 21, 2015 at 9:20
0
\$\begingroup\$

My first challenge in a long time. Feedback would be appreciated!

Last Minute Shipments

Here's the situation: You're an engineer for Acme Rail Shipping Inc. There's a string of shipments to make for tomorrow but it turns out at the last moment that they're actually expected to arrive today! There isn't enough time to stop at every destination. It doesn't matter if you skip a few stops as long as you get to others as fast as possible. Your task is to figure out which ones to skip.

Challenge

Given a list of stops and a minimum number of stops to make, write a program or function that outputs the list of stops to make that results in the lowest total time taken. Here's the catch: Your train is very long and very heavy, so it takes a long time to accelerate. Sometimes it may be more efficient to skip a stop rather than to slow down to make it.

  • Your train starts with the front at the origin and is at rest.
    • Each stop is a point along your 1D route defined by a positive distance from the origin.
    • To make a stop, you must slow down to rest with the front of the train on the point. The shipment is delivered immediately so right as you reach rest, you start accelerating again.
    • The train accelerates uniformly at 0.3 m/s^2 and brakes uniformly at 1.2 m/s^2 (I'm not sure how realistic these values are. Subject to change. Feedback would be helpful.)
    • Assume that there is no upper speed limit to the train. Therefore, you should be accelerating at every point between stops.
    • Added: You cannot go backwards.
    • Added: Total time will be measured from when you start to when you pass or arrive at the last stop, regardless of whether you decide to make it or not. You can't just leave your train in the middle of the route! This means that, for example, if you skip the last stop, then the total time will include the time taken for the train to accelerate from the second to last stop and reach the last stop at some velocity. If you don't skip the last stop, the measured time will end when you come to rest at the last stop.

Input

Input will be a number for the minimum number of stops to make, followed by a list of distances from the origin for each stop. The first item in the list will be the distance for stop #1, the next will be distance for stop #2, then distance for stop #3, etc. Distances in the list are strictly increasing and are defined in meters.

You can take input in any reasonable format, such as a delimited list on stdin with the first item as the minimum number of stops, as program arguments with the first item as the minimum number, or as parameters to a function.

Output

Output will be a list of stops to make. This list will contain the numbers of each stop, as defined in the previous section. For example, if it is determined that stops 2, 3, and 5 out of five stops need to be made, the output would be 2, 3, 5.

Output can be any reasonable format, such as a delimited list on stdout, or an array return value from a function. Trailing whitespace or newlines are acceptable. The list doesn't necessarily have to be sorted.

Example I/O

Coming soon

Standard rules apply. Shortest code wins, however clever solutions will get my upvotes. Good luck!

\$\endgroup\$
5
  • \$\begingroup\$ This feels like a minor variant on the several existing single-source shortest path questions. It's borderline enough that I wouldn't use my unilateral close-as-dupe powers, but I wouldn't be surprised to see it closed as a dupe. \$\endgroup\$ Sep 21, 2015 at 17:52
  • \$\begingroup\$ @PeterTaylor I did search before I posted this but I didn't find anything, maybe I didn't use the right terms. Are there any examples specifically that you are referring to? \$\endgroup\$
    – DankMemes
    Sep 21, 2015 at 18:41
  • \$\begingroup\$ codegolf.stackexchange.com/search?q=shortest+path+is%3Aquestion Not all of them are shortest path in a graph, but I think most of them are. \$\endgroup\$ Sep 21, 2015 at 21:42
  • \$\begingroup\$ @PeterTaylor I intended distance to always be the same, and the optimization to be for shortest time (I've updated the answer to clarify distance). The point here isn't that you must visit all nodes as fast as possible, it's that you must visit n of the nodes and decide which ones to pass. \$\endgroup\$
    – DankMemes
    Sep 21, 2015 at 22:07
  • \$\begingroup\$ Yes, I understood that. So the graph has vertices which are pairs (stop, num visited), for each k > j >= i there is an edge (stop_j, i) --> (stop_k, i+1) with weight corresponding to the time to get from stop j to stop k, and you start at (0, 0) and want the shortest path to (any, n). \$\endgroup\$ Sep 22, 2015 at 6:28
0
\$\begingroup\$

It's a small world!

A challenge inspired by small world networks. It is said that in such a network, starting at any point, you are able to reach any other node of the network in a specific amount of hops.

Your task will be determining the smallest number of hops necessary to reach any other node (maximum short-path length, aka graph diameter) and the average number of hops for the same purpose.

Input

Your program will recieve on its stdin some amount of lines, with space-separated numbers on it.

Line number N will list the line numbers of the nodes node N is connected to. Every node is linked mutually, there are no unidirectional eges.

2 3
1 4
1
2

Each line can be assumed to be sorted.

Output

Your program must compute the smallest number of hops necessary to depart from one node and land on any different node, and the average number of hops to traverse any node. Print it to stdout in any format desired. The average path length must be a decimal with at least 2 digits of precision.

The average path length is defined (for the purposes of this challenge) as the sum of the smallest number of hops between any 2 points divided by the amount of edges in the network (direct connections) plus the biggest short-path. The sum-of-short-paths includes the edges themselves (e.g. paths to neighbouring nodes), but not reversed paths (A to B and B to A).

sum(short_paths)/(edges+long)

Example

The network represented in this image:

visual representation of network

Will be input to your program as:

2 4
1 3 5
2 4
1 3
2

And the program must output something in the form of:

3
2.0

The average was calculated in this manner:

p12 = 1; p13 = 2; p14 = 1; p15 = 2; p23 = 1; p24 = 2; p25 = 1; p34 = 1; p35 = 2; p45=3
e = 5
A = sum(p) / (e+p45)
(5+8+3)/(5+3)

Rules

Basic rules, avoid standard loopholes


I can see an issue with the "average" part of the challenge, since it is ill-defined and I consider this challenge quite extensive without it already.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ It took me awhile to understand your notation for the graphs. Maybe something along the lines of “line no. n lists the nodes node n is connected to” would be clearer. \$\endgroup\$
    – xebtl
    Sep 23, 2015 at 6:28
  • \$\begingroup\$ I'm also unsure if the calculation of the average should be part of the challenge, mainly because I defined it arbitrarily, and because the challenge should already be long enough without it. \$\endgroup\$
    – Kroltan
    Sep 23, 2015 at 12:40
  • 1
    \$\begingroup\$ The average path length is well defined provided that you specify that the graphs will be connected. The other parameter is more of a problem: you call it "maximum path length", but that sounds like the longest path, and what you seem to be describing is the graph diameter. We've had a couple of longest path questions already; we haven't had graph diameter or average path length, although arguably they're trivial variations on all-sources shortest path. I'm not sure offhand whether that's been done, or just single-source. \$\endgroup\$ Sep 23, 2015 at 13:36
0
\$\begingroup\$

Find Your Stack Exchange Spirit Pokemon

It's a popular game on the internet to take some numbers related to someone (usually their birthday/age), multiply them, and divide until you get a number between 1 and 720. That number is the Pokedex number of your "spirit Pokemon".

We're going to play the same game, but since this is Stack Exchange, we'll be using our user IDs. And since this is PPCG, we'll be writing a program to tell us what our Stack Exchange-based spirit Pokemon is.

To find it, take any user, then multiply their user ID by the number of letters in their name. Take that number mod 720, then add 1 (so 0 will become 1 and 719 will become 720). That's the Pokedex number of their spirit Pokemon.

Input

A valid user ID greater than 0, and a valid name, in this format:
<ID> <name>

The site does not matter, and it won't be given.

You may accept input from either the command-line or STDIN (or your language's closest equivalent.)

Output

The name of the user's spirit Pokemon (as determined above.)

Additional Files

Since there's no way you can cram 720 names into one program, you'll be given a file with the names of all the Pokemon (in order). Here it is:

Bulbasaur
Ivysaur
Venusaur
Charmander
Charmeleon
Charizard
Squirtle
Wartortle
Blastoise
Caterpie
Metapod
Butterfree
Weedle
Kakuna
Beedrill
Pidgey
Pidgeotto
Pidgeot
Rattata
Raticate
Spearow
Fearow
Ekans
Arbok
Pikachu
Raichu
Sandshrew
Sandslash
Nidoran♀
Nidorina
Nidoqueen
Nidoran♂
Nidorino
Nidoking
Clefairy
Clefable
Vulpix
Ninetales
Jigglypuff
Wigglytuff
Zubat
Golbat
Oddish
Gloom
Vileplume
Paras
Parasect
Venonat
Venomoth
Diglett
Dugtrio
Meowth
Persian
Psyduck
Golduck
Mankey
Primeape
Growlithe
Arcanine
Poliwag
Poliwhirl
Poliwrath
Abra
Kadabra
Alakazam
Machop
Machoke
Machamp
Bellsprout
Weepinbell
Victreebel
Tentacool
Tentacruel
Geodude
Graveler
Golem
Ponyta
Rapidash
Slowpoke
Slowbro
Magnemite
Magneton
Farfetch'd
Doduo
Dodrio
Seel
Dewgong
Grimer
Muk
Shellder
Cloyster
Gastly
Haunter
Gengar
Onix
Drowzee
Hypno
Krabby
Kingler
Voltorb
Electrode
Exeggcute
Exeggutor
Cubone
Marowak
Hitmonlee
Hitmonchan
Lickitung
Koffing
Weezing
Rhyhorn
Rhydon
Chansey
Tangela
Kangaskhan
Horsea
Seadra
Goldeen
Seaking
Staryu
Starmie
Mr. Mime
Scyther
Jynx
Electabuzz
Magmar
Pinsir
Tauros
Magikarp
Gyarados
Lapras
Ditto
Eevee
Vaporeon
Jolteon
Flareon
Porygon
Omanyte
Omastar
Kabuto
Kabutops
Aerodactyl
Snorlax
Articuno
Zapdos
Moltres
Dratini
Dragonair
Dragonite
Mewtwo
Mew
Chikorita
Bayleef
Meganium
Cyndaquil
Quilava
Typhlosion
Totodile
Croconaw
Feraligatr
Sentret
Furret
Hoothoot
Noctowl
Ledyba
Ledian
Spinarak
Ariados
Crobat
Chinchou
Lanturn
Pichu
Cleffa
Igglybuff
Togepi
Togetic
Natu
Xatu
Mareep
Flaaffy
Ampharos
Bellossom
Marill
Azumarill
Sudowoodo
Politoed
Hoppip
Skiploom
Jumpluff
Aipom
Sunkern
Sunflora
Yanma
Wooper
Quagsire
Espeon
Umbreon
Murkrow
Slowking
Misdreavus
Unown
Wobbuffet
Girafarig
Pineco
Forretress
Dunsparce
Gligar
Steelix
Snubbull
Granbull
Qwilfish
Scizor
Shuckle
Heracross
Sneasel
Teddiursa
Ursaring
Slugma
Magcargo
Swinub
Piloswine
Corsola
Remoraid
Octillery
Delibird
Mantine
Skarmory
Houndour
Houndoom
Kingdra
Phanpy
Donphan
Porygon2
Stantler
Smeargle
Tyrogue
Hitmontop
Smoochum
Elekid
Magby
Miltank
Blissey
Raikou
Entei
Suicune
Larvitar
Pupitar
Tyranitar
Lugia
Ho-oh
Celebi
Treecko
Grovyle
Sceptile
Torchic
Combusken
Blaziken
Mudkip
Marshtomp
Swampert
Poochyena
Mightyena
Zigzagoon
Linoone
Wurmple
Silcoon
Beautifly
Cascoon
Dustox
Lotad
Lombre
Ludicolo
Seedot
Nuzleaf
Shiftry
Taillow
Swellow
Wingull
Pelipper
Ralts
Kirlia
Gardevoir
Surskit
Masquerain
Shroomish
Breloom
Slakoth
Vigoroth
Slaking
Nincada
Ninjask
Shedinja
Whismur
Loudred
Exploud
Makuhita
Hariyama
Azurill
Nosepass
Skitty
Delcatty
Sableye
Mawile
Aron
Lairon
Aggron
Meditite
Medicham
Electrike
Manectric
Plusle
Minun
Volbeat
Illumise
Roselia
Gulpin
Swalot
Carvanha
Sharpedo
Wailmer
Wailord
Numel
Camerupt
Torkoal
Spoink
Grumpig
Spinda
Trapinch
Vibrava
Flygon
Cacnea
Cacturne
Swablu
Altaria
Zangoose
Seviper
Lunatone
Solrock
Barboach
Whiscash
Corphish
Crawdaunt
Baltoy
Claydol
Lileep
Cradily
Anorith
Armaldo
Feebas
Milotic
Castform
Kecleon
Shuppet
Banette
Duskull
Dusclops
Tropius
Chimecho
Absol
Wynaut
Snorunt
Glalie
Spheal
Sealeo
Walrein
Clamperl
Huntail
Gorebyss
Relicanth
Luvdisc
Bagon
Shelgon
Salamence
Beldum
Metang
Metagross
Regirock
Regice
Registeel
Latias
Latios
Kyogre
Groudon
Rayquaza
Jirachi
Deoxys
Turtwig
Grotle
Torterra
Chimchar
Monferno
Infernape
Piplup
Prinplup
Empoleon
Starly
Staravia
Staraptor
Bidoof
Bibarel
Kricketot
Kricketune
Shinx
Luxio
Luxray
Budew
Roserade
Cranidos
Rampardos
Shieldon
Bastiodon
Burmy
Wormadam
Mothim
Combee
Vespiquen
Pachirisu
Buizel
Floatzel
Cherubi
Cherrim
Shellos
Gastrodon
Ambipom
Drifloon
Drifblim
Buneary
Lopunny
Mismagius
Honchkrow
Glameow
Purugly
Chingling
Stunky
Skuntank
Bronzor
Bronzong
Bonsly
Mime Jr.
Happiny
Chatot
Spiritomb
Gible
Gabite
Garchomp
Munchlax
Riolu
Lucario
Hippopotas
Hippowdon
Skorupi
Drapion
Croagunk
Toxicroak
Carnivine
Finneon
Lumineon
Mantyke
Snover
Abomasnow
Weavile
Magnezone
Lickilicky
Rhyperior
Tangrowth
Electivire
Magmortar
Togekiss
Yanmega
Leafeon
Glaceon
Gliscor
Mamoswine
Porygon-Z
Gallade
Probopass
Dusknoir
Froslass
Rotom
Uxie
Mesprit
Azelf
Dialga
Palkia
Heatran
Regigigas
Giratina
Cresselia
Phione
Manaphy
Darkrai
Shaymin
Arceus
Victini
Snivy
Servine
Serperior
Tepig
Pignite
Emboar
Oshawott
Dewott
Samurott
Patrat
Watchog
Lillipup
Herdier
Stoutland
Purrloin
Liepard
Pansage
Simisage
Pansear
Simisear
Panpour
Simipour
Munna
Musharna
Pidove
Tranquill
Unfezant
Blitzle
Zebstrika
Roggenrola
Boldore
Gigalith
Woobat
Swoobat
Drilbur
Excadrill
Audino
Timburr
Gurdurr
Conkeldurr
Tympole
Palpitoad
Seismitoad
Throh
Sawk
Sewaddle
Swadloon
Leavanny
Venipede
Whirlipede
Scolipede
Cottonee
Whimsicott
Petilil
Lilligant
Basculin
Sandile
Krokorok
Krookodile
Darumaka
Darmanitan
Maractus
Dwebble
Crustle
Scraggy
Scrafty
Sigilyph
Yamask
Cofagrigus
Tirtouga
Carracosta
Archen
Archeops
Trubbish
Garbodor
Zorua
Zoroark
Minccino
Cinccino
Gothita
Gothorita
Gothitelle
Solosis
Duosion
Reuniclus
Ducklett
Swanna
Vanillite
Vanillish
Vanilluxe
Deerling
Sawsbuck
Emolga
Karrablast
Escavalier
Foongus
Amoonguss
Frillish
Jellicent
Alomomola
Joltik
Galvantula
Ferroseed
Ferrothorn
Klink
Klang
Klinklang
Tynamo
Eelektrik
Eelektross
Elgyem
Beheeyem
Litwick
Lampent
Chandelure
Axew
Fraxure
Haxorus
Cubchoo
Beartic
Cryogonal
Shelmet
Accelgor
Stunfisk
Mienfoo
Mienshao
Druddigon
Golett
Golurk
Pawniard
Bisharp
Bouffalant
Rufflet
Braviary
Vullaby
Mandibuzz
Heatmor
Durant
Deino
Zweilous
Hydreigon
Larvesta
Volcarona
Cobalion
Terrakion
Virizion
Tornadus
Thundurus
Reshiram
Zekrom
Landorus
Kyurem
Keldeo
Meloetta
Genesect
Chespin
Quilladin
Chesnaught
Fennekin
Braixen
Delphox
Froakie
Frogadier
Greninja
Bunnelby
Diggersby
Fletchling
Fletchinder
Talonflame
Scatterbug
Spewpa
Vivillon
Litleo
Pyroar
Flabebe
Floette
Florges
Skiddo
Gogoat
Pancham
Pangoro
Furfrou
Espurr
Meowstic
Honedge
Doublade
Aegislash
Spritzee
Aromatisse
Swirlix
Slurpuff
Inkay
Malamar
Binacle
Barbaracle
Skrelp
Dragalge
Clauncher
Clawitzer
Helioptile
Heliolisk
Tyrunt
Tyrantrum
Amaura
Aurorus
Sylveon
Hawlucha
Dedenne
Carbink
Goomy
Sliggoo
Goodra
Klefki
Phantump
Trevenant
Pumpkaboo
Gourgeist
Bergmite
Avalugg
Noibat
Noivern
Xerneas
Yveltal
Zygarde
Diancie
Hoopa

Rules

  • The file containing all the Pokemon must be saved as "pokemonlist".
  • You may not open any files other than "pokemonlist".
  • The program must output the name of the Pokemon, not just the number.
  • Your program must work for any valid Stack Exhange user name and ID.

Bonuses

  • -50 points if you return "MissingNo." if the input -1 Community is entered.

Meta Questions

  • Are the rules clear?
  • Is the formula enough of a challenge?
  • I had a problem with the previous formula being too easy, so I've changed it. However, I'm not sure whether the problem was in the formula or the challenge itself. Will this challenge work, or is it too easy regardless of what formula I use?
\$\endgroup\$
3
  • \$\begingroup\$ I sincerely object to any formula where I end up a Palpitoad. \$\endgroup\$
    – Geobits
    Sep 22, 2015 at 18:50
  • 7
    \$\begingroup\$ On-topic: This is really just "print line X%720+1 from this file", right? \$\endgroup\$
    – Geobits
    Sep 22, 2015 at 18:52
  • \$\begingroup\$ @Geobits Yes. I'll probably have to rework the formula so it's not that simple. \$\endgroup\$ Sep 22, 2015 at 18:58
0
\$\begingroup\$

Prove Your Language's Turing Completeness

The goal is to show whether your language is or isn't Turing complete with the shortest program possible. This is different than "interpret BF" questions, since that's only one way to show the completeness of a language.

This question will maintain one for each programming language (using a snippet), so the goal is to have either the shortest Turing machine, or the shortest proof that your language isn't Turing complete.

Good luck with Malboge.

This is probably a weak question so far, and so it needs your suggestions!

  • Also, I'm not really sure how it'd work for non-Turing complete languages...
\$\endgroup\$
6
  • 1
    \$\begingroup\$ Also, are there any languages whose Turing completeness is undecidable? \$\endgroup\$
    – mbomb007
    Sep 24, 2015 at 18:07
  • \$\begingroup\$ What do you mean by "the shortest Turing machine"? Are you planning to write a spec for an input format which describes the TM (according to a specified commonly-used definition) and its starting tape? \$\endgroup\$ Sep 25, 2015 at 11:07
  • \$\begingroup\$ @PeterTaylor Not really. I could use some help with the wording. I really just want the user to show the Turing completeness of their language, which could involve implementing Rule 110, or interpreting BF, or several other things. Or are you saying a need a more specific definition of what it means to be Turing complete? \$\endgroup\$
    – mbomb007
    Sep 25, 2015 at 16:46
  • \$\begingroup\$ I did actually start writing a comment asking what assumptions we could make about other systems being Turing complete, and then I saw that you talked specifically about having "the shortest Turing machine" and I rewrote the comment. If you generalise it then it becomes even more difficult: a proof that my language can implement all mu-recursive functions is really going to be a set of snippets showing how to handle each case, not a program. I think the approach which would cause least arguments would be to ask for implementations of a specific universal TM, and forget the non-TC langs. \$\endgroup\$ Sep 25, 2015 at 21:35
  • \$\begingroup\$ @PeterTaylor Do you know of any good ones that haven't been done? Conway's Game of Life, Rule 110, Cyclic Tag System, Lambda Calculus, and BF have all been done. I was really hoping for a generic, "implement a TC" code-golf... \$\endgroup\$
    – mbomb007
    Sep 25, 2015 at 21:53
  • \$\begingroup\$ I see the confusion: you're using "Turing machine" to mean "Turing-powerful system", whereas I was interpreting it to mean machines made of a tape and a finite state machine. sciencedirect.com/science/article/pii/S0304397596000771 includes the UTM which was used to prove that Magic: the Gathering is TC (2 states, 18 symbols): it seems as good as any for your purpose. \$\endgroup\$ Sep 26, 2015 at 6:10
0
\$\begingroup\$

Hello, Loophole Abuse!

Assignment

Print the following string:

Hello, World!

Gimmick

you know the meta post "Loopholes that are forbidden by default"? Yeah, those don't apply here. In fact, you're actively encouraged to use as many as possible and combine them in weird ways. the more you use in a way that other users like, the more chance people will vote for you.

In addition, to prevent trivial answers getting all the glory, your program must also work in the event that the characters that make up the source code are reversed (this includes the separate characters of a string). This includes external sources, multi-character compiler and execution flags, file names and anything else that is essential for the execution of the software (like Metagolfscript IDs).

Scoring

This is .

\$\endgroup\$
6
  • 2
    \$\begingroup\$ See this comment thread \$\endgroup\$ Sep 26, 2015 at 21:13
  • \$\begingroup\$ @PeterTaylor If we can figure out a way to make the subjective part, i.e. determining which loopholes are broken, more objective, would that fix the question? \$\endgroup\$
    – Nzall
    Sep 26, 2015 at 21:34
  • \$\begingroup\$ Relevant chat discussion: chat.stackexchange.com/transcript/message/24349167#24349167 \$\endgroup\$
    – Nzall
    Sep 26, 2015 at 21:47
  • 3
    \$\begingroup\$ To be perfectly honest, I think it's such a pointless idea that I don't want to spend much time thinking about hypothetical changes. \$\endgroup\$ Sep 27, 2015 at 6:14
  • \$\begingroup\$ Characters reversed means reading the program from last to first character? \$\endgroup\$ Oct 11, 2015 at 8:27
  • \$\begingroup\$ @PaŭloEbermann Yes. So that means that, for example, closing brackets will come before opening brackets, \$\endgroup\$
    – Nzall
    Oct 11, 2015 at 10:02
0
\$\begingroup\$

PPCG New Question Generator

Specification

Write a program that does the following, given a string s and an integer n (as a file, STDIN, or command line arguments):

  1. Determines the n most used characters in that quote. If there are two characters that are equally used, the character with the lower ASCII value takes priority.
  2. Returns the text and the character in the following format:

    Return the following text:
    
    >{string}
    
    But there's an ORIGINAL TWIST! You cannot use the characters {characters} in your answer. As this is code-golf, the answer with the least characters wins. Have fun!
    

Specifics:

  1. You need to display {string} in blockquotes using Markdown formatting, not HTML. So if the string spans multiple lines, you need to prepend each line with >.
  2. You also need to display {characters} using proper grammar and in order from most used to least used. For example, with "a", "b", and "c":

    You cannot use the characters "a", "b", or "c" in your answer.

Example

In this example, n is 4, and s is:

I have loved flowers that fade, 
Within whose magic tents 
Rich hues have marriage made 
With sweet unmemoried scents: 
A honeymoon delight,
A joy of love at sight, 
That ages in an hour
My song be like a flower!

The output is:

Return the following text:

>I have loved flowers that fade, 
>Within whose magic tents 
>Rich hues have marriage made 
>With sweet unmemoried scents: 
>A honeymoon delight,
>A joy of love at sight, 
>That ages in an hour
>My song be like a flower!

But there's an ORIGINAL TWIST! You cannot use the characters "e", "a", "h", or "o" in your answer. As this is code-golf, the answer with the least characters wins. Have fun!
\$\endgroup\$
0
\$\begingroup\$

Remove Pieces from Chess Position Notation

You should write a program or function which receives a string representing a chess position as input and outputs or returns the position with only the pawns and kings left.

The positions in the input and output are described by FEN notation:

Each rank is described, starting with rank 8 and ending with rank 1; within each rank, the contents of each square are described from file "a" through file "h". Each piece is identified by a single letter taken from the standard English names (pawn = "P", knight = "N", bishop = "B", rook = "R", queen = "Q" and king = "K").[1] White pieces are designated using upper-case letters ("PNBRQK") while black pieces use lowercase ("pnbrqk"). Empty squares are noted using digits 1 through 8 (the number of empty squares), and "/" separates ranks. (taken from Wikipedia)

For example

rnbqkbnr/pp1ppppp/8/2p5/4P3/2N5/PPPP1PPP/R1BQKBNR

describes the board

---------------
♜♞♝♛♚♝♞♜
♟♟  ♟♟♟♟♟

    ♟
        ♙
    ♘
♙♙♙♙  ♙♙♙
♖  ♗♕♔♗♘♖
---------------

With everything except kings and pawns removed it becomes

---------------
       ♚
♟♟  ♟♟♟♟♟

     ♟
       ♙

♙♙♙♙ ♙♙♙
       ♔
---------------

and expressed with the FEN string

4k3/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/4K3    

Input

  • A FEN string consisting of the characters 12345678PNBRQKpnbrqk/.
  • The input describes a valid chess game position.

Output

  • A FEN string describing the position with knights, bishops, rooks, queens removed.
  • Output might not be a valid chess position in some extreme cases.

Examples

TODO

This is code golf so the shortest entry wins.

\$\endgroup\$
0
\$\begingroup\$

Pareto optimality challenge

Write a class that maintains a pareto optimal set. This class must have these three methods:

k(int n): Constructs the class. N is the array size that all of the other methods must use.

boolean k.p(int[] n): Adds n if there exists no entry m in k such that each single term of m is greater than each corresponding term in n. The method must also return true if n has been entered into k, or false otherwise. n can be assumed to be of the length specified by the constructor.

boolean k.s(int[] n): Returns true if n was previously entered by the above method and there exists no other term m in k such that each term of m is greater than each corresponding entry in n. Returns false otherwise.

This is code golf, so shortest entry wins. Yes, programming languages without classes may be used, but all the usual properties of classes must be satisfied by the three methods above.

\$\endgroup\$
0
\$\begingroup\$

ASCII Snake

NOTES

It was pointed out to me that we already have had at least 2 snake challenges before. However, seeing as they are from a couple years ago, I think another snake challenge would be nice. Below (from the description section to the end) I describe a "classic" snake challenge.

However, I want to differentiate this from the classic challenge. I am more than open to suggestions in the comments below. My idea is the following:

Make an "infinite" snake game. That is, every 10 points, the level changes and the snake is reset according to the following pattern:

--The nth level contains n obstacles in the form of the '#' character. These work the same as walls. They are randomly placed around the map, the difficulty is that they cannot create a situation where an ungettable 'x' exists. for example:

------------------------------
| #                          |  11
|                            |
|              oooooo        |
|              o    o        |
|              o    v        |
|              o             |
|                            |
|                            |
|    x                       |
|                            |
------------------------------

would be unacceptable because if an "x" were to spawn in the corner, it would be an automatic game over. Also, the barriers may not form a wall which closes off areas of the arena.

I can flesh out this idea more if you think it is any good.

Please Give Me Feedback On This Question

When I have a working question, I will begin work on a basic solution in C++.

Description

The goal of this challenge is to create a real time (non-buffered input) ASCII version of the popular game Snake .

The board is 10 newlines by 32 spaces. The boundary consists of the " | " and " - " characters.

The snake body is made of the "o" character.

The snake head is v,<,>,^ depending on direction of travel (intuitively)

The snake eats " x ".

For example a game board might look like:

------------------------------
|                            |  11
|                            |
|              oooooo        |
|              o    o        |
|              o    v        |
|              o             |
|                            |
|                            |
|    x                       |
|                            |
------------------------------

In the new game, the snake has three body segments and a head. It gains one body segment every time it eats an "x".

The score (the number of segments+head) should be displayed somewhere on the screen.

The starting position of the snake and the starting position of the "x" is left to the writer.

After an "x" is eaten, the snake gains a segment, and a new "x" must spawn. "x"s may not spawn in a set of predetermined coordinates. They must spawn "pseudo-randomly" in the loosest sense of the phrase. This means that they can spawn using a random number generator or their position may be simply a function of the snake's position or some such simple rule.

The snake moves according to nonbuffered user input according to one or both of the following layouts:

"W" - change direction up.

"A" - change direction left.

"D" - change direction right.

"S" - change direction down.

AND/OR

"UP" - change direction up.

"DOWN" - change direction left.

"LEFT" - change direction right.

"RIGHT" - change direction down.

Note that, as per the rules of snake, at a given instance of the game, only three options are available to the player:

-- Do nothing (and continue moving straight)

-- Turn 90 degrees

-- Turn -90 degrees

Therefore, at a given instance, two of the movement buttons should be unresponsive. E.g. in the above case, only right and left are responsive.

Snake movement follows the normal pattern. For those of you not familiar with it: Let segment zero, $$s_0$$ be the head and segment $$s_n$$ be the very end of the snake. In a given frame, the snake has 3 choices, go straight, go left, or go right (from the snake's reference frame). $$s_0$$ moves into one of these spaces based on user input. Then $$s_i$$ moves into the space taken by $$s_{i-1}$$ on the previous frame.

If an "x" is eaten, then on the next frame the new segment $$s_{n+1}$$ is placed where $$s_n$$ was on the previous frame.

The game ends when the snake head collides with the snake body or a with a wall.

Rules

1) Only languages which are available for free may be used. Libraries may be used (for i/o, etc), however the actual snake program must be written by you. (if library overuse is an issue, it will be determined by up/down votes)

2) The game must be playable (i.e. the framerate must be acceptable on most machines, as determined by readers)

3) The winner is the program using the smallest number of bytes that fits the above description.

4) If an online compiler is available, it is recommended that you link it with your code so that others may play your game.

\$\endgroup\$
2
  • \$\begingroup\$ FYI, we've had a couple snake-based challenges already (1 2). \$\endgroup\$
    – Geobits
    Oct 5, 2015 at 16:07
  • \$\begingroup\$ Thank you. I'll either delete this post or come up with a way to make it fundamentally different. Since those were three years ago hopefully I can come up with a refreshing twist \$\endgroup\$
    – Liam
    Oct 5, 2015 at 19:06
0
\$\begingroup\$

Machine Learning

If you give a downvote please say why! (otherwise how will I learn, thanks)

The task is to create a simple program that "learns"

-->The challenge is to create a program which:

(1) outputs 50 integers (1 at a time) and waits for input after each.

The input given will be 1 or 0 depending on whether the number is "good" or "bad" based on a predetermined pattern (see the pattern section for more information)

(2) The program will then output something to the effect of

<< Learning done. Ready for testing.

At which point it will wait for integer input.

(3) My script will then input 50 integers (1 at a time) and the program will read the integers and output 1 or 0 depending on whether it thinks the integer fits the pattern.

-->Types of Patterns

Patterns will be of the following types, in an unknown order

- is divisible by x (x no larger than 20)

- is greater/less than x (x no larger than 100)

- is a perfect square

- has exactly x prime divisors (x no larger than 3)

- is coprime to x (shares no common divisors with x except 1) (x no larger than 100 and not prime)

numbers above subject to change if a case is made in the comments

-->Scoring

Bots will be scored on correct answers to my script input. The score is equal to the total number of correct answers across all 5 tests. There is a max score of 250.

Since I do anticipate perfect scores, ties will be broken by golf score of the source.

Further ties will be broken by submission time.

-->Example of A Test

note: "in" is for my input. "out" is for machine output.

The rule is "even-good, odd-bad"

out<<  10
in>>   1
out<<  1901
in>>   0

... more lines like this ....

out<<  Learning Complete. Ready for Input.

in>>   12
out<<  1
in>>   87
out<<  0

... more lines like this ...

Say the machine got 47/50 correct on this test, then it currently has a score of 47. I would then proceed to test it with 4 different patterns. And sum its score on each test for its final score.

-->Rules

(1) you may not use external tables, i.e. have a library that contains table for all possible tests. However, your code may generate such tables.

(2) the bot may not exceed an average time of 2 seconds per output. This goes for both the learning and testing sections. I really don't want to have to spend over 15 minutes per test. The average is so that it can spend a bit of start-up time to generate tables if it needs to.

(3) Use of external libraries is permitted, although it should be clear that the bulk of the work is yours. (this will be determined by downvotes)

(4) Languages must have a free interpreter available. If they don't I won't be able to test them. This rules out MatLab, Mathematica, etc.

(5) other rules may be added as necessary.

\$\endgroup\$
5
  • \$\begingroup\$ As interesting as this challenge sounds, I think you'd need a lot more than 5 test cases and 20 inputs to be able to see any sort of meaningful result. \$\endgroup\$
    – Sp3000
    Oct 6, 2015 at 4:44
  • \$\begingroup\$ Really? Why do you say that? Regardless, that shouldn't be a problem, I could write a script to test the bots. \$\endgroup\$
    – Liam
    Oct 6, 2015 at 4:45
  • \$\begingroup\$ Given only 5 * 20 = 100 inputs, I'd expect there to be only a difference of a few incorrect responses between the top answers, which is small enough to be caused by chance. Also, is there any limit on the size of the programs? \$\endgroup\$
    – Sp3000
    Oct 6, 2015 at 4:50
  • \$\begingroup\$ Okay, I'll bump it up to 50 questions per test. I'll edit the scenario shortly. No, no size limit (should there be), although I think that I'll put in something to the effect of "bot must make decisions within 1 min at all steps" \$\endgroup\$
    – Liam
    Oct 6, 2015 at 4:52
  • \$\begingroup\$ Mathematica is free. \$\endgroup\$ Oct 24, 2015 at 23:47
0
\$\begingroup\$

Mutating variable

Output
n number of lines (where n is from 10 to 30, each run is random) where each line is either (all of the lines have to be possible)

  1. Array of n random chars (or String with n random characters) made out of letters only
  2. random int divisible by n (by int I mean a whole number of any kind)
  3. random double whose first two decimal digits is n (by double I mean an number that has decimal digits) therefore for n=12 it will have format ###.12####
  4. random boolean true or false (by that I mean 1 or 0)

No two consequent lines may be same type

Another requirement is that in your code may call print (or System.out.println or whatever you use to print to screen) only once.

This is code-golf, so shortest code wins.

By random I mean use your language's built-in random number generator,

\$\endgroup\$
12
  • \$\begingroup\$ Why the strange "may only print once" requirement? Also, for random, it might be better to use a somewhat standard definition instead of "anything you like". That's just begging for the ubiquitous xkcd/Dilbert joke of constantly using the same output. \$\endgroup\$
    – Geobits
    Oct 7, 2015 at 17:11
  • \$\begingroup\$ @Geobits I edited the question to accommodate for the random suggestion you proposed. And for only one line to print. I just thought it would make task a bit harder is all, and I tried it on a few languages I know, and it did make things just a tad bit more tricky. \$\endgroup\$
    – Quillion
    Oct 7, 2015 at 18:38
  • \$\begingroup\$ Just a few more comments/questions: 1) You seem to have removed the part about all lines having to be possible 2) Is there a minimum number of choices for the random string/int/double? Otherwise I could just random between n and 2n, say. \$\endgroup\$
    – Sp3000
    Oct 7, 2015 at 22:35
  • \$\begingroup\$ @Sp3000 I added requirement where all the lines have to be possible. Also what do you mean by minimum number of choices? I didn't quiteget the question you asked. \$\endgroup\$
    – Quillion
    Oct 8, 2015 at 13:08
  • \$\begingroup\$ You don't specify a range for the randomness, so the easiest thing to do is probably random between two possible options for everything, e.g. between n/2n for the int, or 0.n/1.n for the double, and "aaaaaaaaa"/"bbbbbbbbb" for the string \$\endgroup\$
    – Sp3000
    Oct 8, 2015 at 13:14
  • \$\begingroup\$ @Sp3000 I thought that wherever I use word random I amply that they must use their language's random method. So if I say n random chars, I mean that every char has to be generated using the random method. How would I clarify that? \$\endgroup\$
    – Quillion
    Oct 8, 2015 at 14:55
  • \$\begingroup\$ Well the problem is that this has nothing to do with a language's random method. I could use random.choice("ab") or random.choice("abcdefg") - both use the language's random, but there's more outcomes in one than the other \$\endgroup\$
    – Sp3000
    Oct 8, 2015 at 15:17
  • \$\begingroup\$ @Sp3000 so let the person use any random they like I guess. See no problem with aaaaa then bbbb and etc. As long as other requirements are met. The fun I wanted to see is printing all of those values and see the smallest amount of code. \$\endgroup\$
    – Quillion
    Oct 8, 2015 at 15:36
  • \$\begingroup\$ If you're fine with that then that's okay then I guess. Was just checking \$\endgroup\$
    – Sp3000
    Oct 8, 2015 at 15:42
  • \$\begingroup\$ @Sp3000 so the question is ripe enough to post on the main site? \$\endgroup\$
    – Quillion
    Oct 8, 2015 at 16:23
  • \$\begingroup\$ I think if you add the explanation for "consequent lines" back in it'd be fine. The writing could be a bit better, but at least it's not as ambiguous now. Also, if by 10-30 you mean that 10 and 30 are both possible, then it might be good to write that as "10 to 30 inclusive". \$\endgroup\$
    – Sp3000
    Oct 9, 2015 at 10:29
  • \$\begingroup\$ @Sp3000 Thanks for all your advice. I highly appreciate it! But I am leaving code golf for a while. As of late I noticed that it has become too toxic for my liking. Thanks for your help however :) \$\endgroup\$
    – Quillion
    Oct 9, 2015 at 12:57
0
\$\begingroup\$

Ceylon golfer (whitespace + comment removal)

As some people might have noted, I'm answering here often using Ceylon. This is usually done first writing a "normal" program, then slimming it down using whichever tricks I find, and at the last step remove all superfluous white space (and possibly also comments)

I want to automatize the last step.

Ceylon is syntax-wise a C-like language, so this golfer might be useful also for other languages. The details might differ, though.

This is similar to Remove Whitespace from a Java Program, but not the same, as Ceylon strings are a bit more complicated.

Details

A Ceylon program is a Unicode character stream, which can be lexically analized into a series of tokens, possibly separated by whitespace. (Only ASCII white space is allowed: space, tab, form feed (FF), line feed (LF), carriage return (CR).)

That whitespace is sometimes necessary – when otherwise the two tokens would stick together and form one token, or when a comment would become longer than before (but comments are to removed, too). Other whitespace can be removed.

Lines are terminated by LF, CR or a sequence of CR LF.

We have two kinds of comments:

  • Multiline comments start with /* and end with */.
  • end-of-line comments start with // or #! and end with the line (i.e. at the next line terminator).

Everything which is not whitespace or a comment is part of a token.

Tokens are of these forms:

  • Identifiers or keywords start with a (uppercase or lowercase) letter and then can contain letters, _ and digits. They can also start with \I or \i instead. (Examples are true, Integer, a, helloWorld, example1234, \Iexample1234.)
  • Literals:

    • numeric literals (decimal integer, hex integer, binary integer, formal floating point, shortcut floating point) have the form [0-9_]+[kMGTPmunpf]?|\$[01_]+|\#[0-9a-fA-F_]+|[0-9_]+\.[0-9_]+(e[+-]?[0-9]+|[kMGTPmunpf])? (where the _ is only allowed at certain places).

      (Maybe that can be simplified to [#$0-9][0-9a-fA-FkMGFPmunpf._]*, with the dot not being the last character. Not all such strings are valid numeric literals, but I guess you don't have to figure them all out. The details are in the specification linked above.)

    • Character literals have the form ' + single character (except " or \) or escape sequence + ', where an escape sequence is either a \{ + a name or code of a character + }, or a \ followed by a single (non-{) character.

      Examples: ' ', '←', 'a', '\'', '`', '\{#0020}', '\{#212B}', '\n', '\{ALCHEMICAL SYMBOL FOR GOLD}', '"', '\"', '\\', '/'.

    • String literals:

      • A simple string literal is " + a sequence of single characters (except ", \ and ` ) and escape sequences (see above) + "
      • An interpolated string literal (or string template) looks like a simple string literal, but can also contain `` + some non-string-code + `` inside the string. (In this non-string-code the whitespace and comment removal can be applied.)
      • A verbatim string literal is """ + a sequence of any characters, except """, + """. (There is no escape sequences or interpolation here.)

      There is further complication with multi-line string literals, but I guess for this challenge we can assume that there are no multi-line string literals.

      Examples for String literals: "", """""" (both the empty string), "Hello World!", "Escapes: \{#212B}, \{ALCHEMICAL SYMBOL FOR GOLD}", """non-interpreted Escapes: \{#212B}, \{ALCHEMICAL SYMBOL FOR GOLD}""", "some more escapes: \n, \r, \f, \t, \b, \\, \`, \', \"", "punctuation: ' ` \" and more text", """punctuation: ' ` " and even single \.""",

  • A lot of symbols are punctuation and operators:

     , ; ... { } ( ) [ ] ` ? . ?. *. = => + - * / % ^ ** ++ -- .. : -> !
     && || ~ & | === == != < > <= >= <=> += -= /= *= %= |= &= ~= ||= &&=
    

    The grammar is such that whitespace adjacent to one of those punctuation tokens is never relevant, so it can be removed.

Challenge

Write a program which receives as input a valid Ceylon program, and outputs the same program, with all comments and non-essential white space removed.

Whitespace is essential when without it two tokens would be one token – this applies specifically to keywords/identifiers and numeric literals. In those cases replace any string of whitespace with a single space.

(I guess there are some cases like 10else where an integer literal can be joined with a keyword, but for safety it is better to always have a space in there.)

Of course, whitespace inside a string is highly relevant, so it should not be touched.

If a removed comment was the only thing between two keywords/identifiers, make sure to put a space in there.


Open questions

  • I guess I should add some example inputs and expected outputs.
  • How to score this? Simply as Codegolf, assuming there will be correct answers? Or give some example programs and see which entry succeeds to make them smallest?
  • I guess most Ceylon programs to be golfed will actually be ASCII only – do we allow ASCII-only solutions, while giving a bonus for proper Unicode handling (in comments, strings, identifiers)?
  • Do we require full programs, or allow also functions which take+return strings (or character streams)?
  • Did I simplify the grammar not enough, or too much?
  • I can imagine some bonuses for finding the shortest representation of an integer of float literal .. not sure if that is worth the complication.
  • Another possible bonus would be to find the shortest way of representing a string literal (replacing some Unicode escapes by the actual characters, choosing between " and """, etc.).
  • Do we want to handle multiline strings correctly? Maybe as a bonus?
  • Another possible bonus would be to remove strings literals which are not passed or assigned to anything (these are often used for documentation comments) – but I'm not sure how to define that without specifying the whole grammar.

    (Those have leadings space in the following lines, up to the column where the literal started, which needs to be removed when lexing. If we change the alignment of the string literal, we need to adjust those spaces too. Here it can sometimes be useful actually not include a new-line before the string to minimize that indentation.)

\$\endgroup\$
0
\$\begingroup\$

Steganographic Image Encoding

Write two programs, an encoder and decoder. Score is the sum of the source in bytes.

Encoder Specs

Input:

  • a lossless 24-bit color image file
    • could be anything from BMP to PNG to PPM
  • an arbitrary data file
    • undefined behavior if one attempts to encode a too-large file in a too-small image.
  • an integer value, n, from 1 to 8, indicating the number of bits to use per subpixel.

Output:

An encoded image with the arbitrary data stored in the n least significant bits of the pixel data. The data must be stored in the pixels, i.e. not in some hidden metadata. How the data is serialized into the 3-D image space (height, width, color channel) is undefined.

Decoder Specs

Input:

  • an image produced by the encoder
  • the arbitrary file's length in bytes
  • the same integer value the decoder took indicating the number of bits per subpixel.

Output:

  • the identical arbitrary data file as was provided to the encoder

Requests for Comment:

  • Fix n to 1?
  • Encode the length/LSB's used in the image so you don't need to specify them again. (e.g. fixed format for a couple pixels to define it?) Requirement/Bonus?
  • Maybe have the arbitrary data file be another image of the same dimensions, a la the Wikipedia example (cat in a tree)? That could be kinda boring though; some very simple array operations could do it all. Or that could be clever. In that case, there's necessarily data loss of the hidden image.
  • If n was one and this only required an encoder, it would be the same as this, but this requires a matching decoder. One way encoding challenges I find dull.
  • I'd be fine with using image libraries to load/save the image
\$\endgroup\$
0
\$\begingroup\$

Time Series Analysis

Time series analysis comprises methods for analyzing time series data in order to extract meaningful statistics and other characteristics of the data (from here).

The challenge

Write a program or function that take a time series vector ts and output a the coefficient of determination of a simple linear regression model estimated by the ordinary least squares.

The coefficient of determination should be the squared correlation between the predicted values of the model and the real values of the input, in such way that any perfectly linear time series should have 1 as it's coefficient.

Considerations

  • ts is a vector of racional numbers of length .
  • To make the model assume ts is time sucessive and use time as its regressor.
  • You can assume that ts is already loaded.
  • You can't use build-in modeling functions such as lm() or similars.
  • The input should be in any reasonable format.

Examples

# input
1,2,3,4,5,6  
# output                      
0

enter image description here

#input 
0.244,0.569,1.575,1.965,2.604,3.493,4.084,4.436,5.209,6.110,6.979,7.245,8.229,9.161,10.309
# output    
0.971                              

enter image description here

Let the shortest code win!

\$\endgroup\$
6
  • 1
    \$\begingroup\$ This could use either a link to a page that clearly explains the terms and method used, or preferably a better explanation within the post. \$\endgroup\$
    – Geobits
    Oct 14, 2015 at 18:42
  • \$\begingroup\$ Good idea, I will link it. \$\endgroup\$
    – Mutador
    Oct 14, 2015 at 18:43
  • \$\begingroup\$ The fact that this is time series doesn't change anything since it's just OLS estimation, which is not specific to time series. OLS requires two dimensions, so x is essentially position in the series and y is the value of the series? \$\endgroup\$
    – Alex A.
    Oct 14, 2015 at 18:43
  • \$\begingroup\$ I thought about saying time series to add some context, but yeah, it is just that, not sure about the output though. \$\endgroup\$
    – Mutador
    Oct 14, 2015 at 18:46
  • 1
    \$\begingroup\$ What does lm() do? \$\endgroup\$
    – flawr
    Oct 14, 2015 at 18:53
  • \$\begingroup\$ @flawr lm() is a function in R for fitting linear models. \$\endgroup\$
    – Alex A.
    Oct 14, 2015 at 19:33
0
\$\begingroup\$

Objective

Given a string in Markdown, determine how much of the string is in bold and italic.

Test Cases

**Bold** --> 0
*Italic* --> 0
**_BI_** --> 2
__*abcde*__ --> 5
This is in **bold and _this_ is in italic** --> 4
\**_BI_** --> 0
\\**_BI_** --> 2
This is not in ___ bold-italic ___ --> 0
\$\endgroup\$
1
0
\$\begingroup\$

Implementations of linked lists

Given the source code of a function or method to delete the first node having value x if existed, from a non-cyclic singly linked list, in a specific programming language. Write a program or function (not necessarily in the same language) to decide what kind of implementation it is.

You don't have to check for all the cases. But the more intelligent your code is, the better.

The possible implementations need to be checked are:

Pointer of pointers

(Spec and examples to be added.)

Head node

(Spec and examples to be added.)

Moving the data

(Spec and examples to be added.)

(And maybe some others.)


Possible winning criteria:

  • Just .
  • Something like where a submission is valid if no shorter programs can do all the things documented in the answer.
\$\endgroup\$
0
\$\begingroup\$

Would someone like to write a crontab puzzle?

I have just asked for a software that displays all times at which a cronjob runs. As I think more about it, this might be a nice golfing question.

Unfortunately I'm not too familiar with the crontab specification, especially when it comes to combining operators such as

*/15,34,49-52 * * * * /path/to/command

Is that suitable for code-golf at all? If someone or a group of people would define it as a puzzle, I'd be glad to see it.

Starting point:

The program

  • takes a crontab line as input
  • checks if it is valid or not
  • if valid, from now on lists the next execution times
  • limited to a user definable amount

E.g.

program -n 10 30 17 * * *

produces 10 lines of output (assuming today is 2015-10-22 18:00)

2015-10-23 17:30
2015-10-24 17:30
2015-10-25 17:30
2015-10-26 17:30
2015-10-27 17:30
2015-10-28 17:30
2015-10-29 17:30
2015-10-30 17:30
2015-10-31 17:30
2015-11-01 17:30
\$\endgroup\$
0
\$\begingroup\$

Word Game KotH

First of all, I don't know what this game is called (or if it even has a name), but it's a modification of a game I've played a few times on road trips, especially with my family. I'll be thinking of a better name.

Any suggestions at all are very welcome.

How It's Played

There are 51 bots playing per game. At the beginning of the game, they are given a collection of letters (which is not necessarily a word), for example "a" or "jet." The bots take turns in a predetermined order. When it is a bot's turn it is passed the current word(s) and has four2 options:

  1. It can change a single letter to any other letter.
  2. It can add a single letter to any position in the word.
  3. It can swap any two letters in the word.
  4. It can split the word at any point.

If you didn't infer already, these actions are allowed with the caveat that their result is a valid word or two valid words, if the bot chooses to split. The game ends when the combined lengths of all the words in play are 3 times the length of the longest word in the dictionary used (e.g. if "onomatopoeia" is the longest word, the max length would be 36 letters since it has 12) or when only one bot remains. The bots are scored on how many turns they last*, and the winner of the game is granted a bonus3.

*The turn they lose on is not counted, so if the bot were to lose on its first turn it would have lasted 0 turns.

A word is valid if it is both in the dictionary and hasn't been played before.

Bots should take a reasonable amount of time in making their plays (no more than a few seconds).

Available Methods

isValid(word) returns a Boolean value (whether the word is valid or not).

getDictionary() returns the entire dictionary as a single string.

getPreviousPlays() returns the words previously played as an array (one word per element).

Once any of the following methods are called, the bot's turn is over:

change(index,letter) changes the letter at that index to the letter provided. This method cannot change a space to a letter (to prevent stalling).

insert(index,letter) inserts the provided letter at the provided index.

swap(index1,index2) swaps the letters at index1 and index2.

split(index) splits the word into two by inserting a space at the specified index. Both of these words have to be valid4

If any of the calls to these methods are invalid, the bot is disqualified for that game (treated as a loss).

Author's notes

  1. Basically a random number I determined; I don't know if it's too big or small.
  2. Is four too few to make this challenge interesting?
  3. This bonus is undetermined as of now, but I'd say 2 points tentatively. I'm also a bit unsure as to whether that is a good scoring method. Should it just be on victories or position in victory (i.e. first, second, third, etc. place)? I'm also worried that this might encourage users to submit bots that collaborate to last as many rounds as possible.
  4. Would it be more interesting if this ignored validity? e.g. if you have candies dog as the two words, splitting candies into can and dies would be valid even if either of those words had been played before.

I haven't done a KotH submission before, so I'd love feedback as to how to improve this.

Unimplemented Portions

Controller

This is the big unimplemented portion: I want to get feedback on the idea as a whole before diving into programming out a controller.

Scoring

I'm still unsure as to how the games should be scored.

\$\endgroup\$
1
  • \$\begingroup\$ I don't understand how the game starts. If I'm passed a bunch of random letters, surely the majority of the time I can't make a word and I lose immediately? \$\endgroup\$ Oct 24, 2015 at 8:58
0
\$\begingroup\$

Create CHIQRSX9+ Analogue Program.

Your task is to create a program in same language, that when given a CHIQRSX9+ will print a that analogue. That analogue program will do similiar thing that CHIQRSX9+ program do. There's exception though. There's may be more than 1 instruction. Then it's meant to be executed

  1. C => Read until empty line and print all entered lines, including empty line.
  2. H => Print "Hello, world!"
  3. I => Read input until a newline then return that analogue
  4. Q => Print the analogue program source code. (Not the entered one)
  5. R => Read input until a newline then print that string after doing ROT-13
  6. S => Read comma separated number until newline and sort that.
  7. X => For this, X have undefined behavior.
  8. 9 => Print 99 Bottles of beer with correct pluralization.
  9. + => Increment Accumulator.

Printing instruction(C, H, I, Q, R, S, and 9) begin in a new line. After everything is printed, accumulator count is written at new line. Final newline is optional.

Example

If there's program X written in Haskell, then

X
CH
>main=interact$(++"\nHello, world!\n0").unlines.takeWhile(/="").lines

Which when compiled (Example as W) will do that

W
This is a line
This is another line

>This is a line
>This is another line
>
>Hello, world!
>0

Another example for Q

X
Q
>main=putStr(s++[';','s','=']++show s);s="main=putStr(s++[';','s','=']++show s)"

Yet another example

X
H+
>main=printStr"Hello, world!\n1"

Here is for indication of output. DO NOT print it.

Sandboxing Question

How about scoring. I want to reward short produced program. However, shorness of producing program is also counted. I guess just 10A+5B+C. Where A is length of original source code, B is length of "QQQQ" analogue program. C is length of "CHIQRS9+".

\$\endgroup\$
7
  • \$\begingroup\$ Well, please tell me what's wrong in my question? \$\endgroup\$
    – Xwtek
    Oct 24, 2015 at 15:51
  • \$\begingroup\$ 1. I think this is a source-source compiler, which might be a more recognisable title than "create analogue program". 2. The HQ9+ family has a very mixed reception here, so you should probably expect some downvotes. 3. Why does the scoring system include a weight for votes? \$\endgroup\$ Oct 25, 2015 at 7:43
  • \$\begingroup\$ 1. If it source-source compiler, Q will compiled to main=putstr"Q\n0" instead. \$\endgroup\$
    – Xwtek
    Oct 25, 2015 at 13:10
  • \$\begingroup\$ 2. What's wrong about HQ9+ except that it can be used to cheat at golfing. \$\endgroup\$
    – Xwtek
    Oct 25, 2015 at 13:11
  • \$\begingroup\$ 3. Just a tiny boost since "QQQQ" "CHIQRS9+" and original source code is already very big. Wait I'm writing it wrong. It must be subtraction. Else it will be penalty \$\endgroup\$
    – Xwtek
    Oct 25, 2015 at 13:12
  • \$\begingroup\$ Is that vote annoying? \$\endgroup\$
    – Xwtek
    Oct 26, 2015 at 8:05
  • \$\begingroup\$ Congrats on posting the 1600th answer in the Sandbox! \$\endgroup\$
    – mbomb007
    Oct 27, 2015 at 15:57
0
\$\begingroup\$

Goal

The goal is to stitch several ordered lists of numbers into a single list that contains each of those lists as a contiguous sublist, with the numbers in the same order without gaps. The resulting list should be as short as possible.

Input

n ordered lists of numbers between -2^63 and 2^63-1

Ouput

A minimum-length list so that each input list appears within that list with its elements in the same order without gaps

Example

Input:

[1, 2, 3] [3, -38, 23424, 292] [0, 1, 2] [-38]

Output:

[0, 1, 2, 3, -38, 23424, 292]

The output contains each of the input lists:

[0, 1, 2, 3, -38, 23424, 292]
   [1, 2, 3]
         [3, -38, 23424, 292]
[0, 1, 2]
            [-38]
\$\endgroup\$
6
  • \$\begingroup\$ Many languages have built-ins both for flattening a list of lists and for removing duplicates, giving them a straightforward solution. I think that makes this too easy overall. The removing duplicates part is like this challenge, though it uses characters and requires preserving order. \$\endgroup\$
    – xnor
    Oct 30, 2015 at 21:26
  • \$\begingroup\$ But it is not only about removing duplicates, but also about finding the perfect combination of lists, so you have to figure out in which order you want to put the input lists together. Also it might be necessary to have duplicates in the output to be able to have all input lists in there. \$\endgroup\$
    – Nitek
    Oct 31, 2015 at 7:13
  • 2
    \$\begingroup\$ Oh, my mistake, I didn't realize the lists had to appear as contiguous subsequences. Let me edit that to try to make it clearer. \$\endgroup\$
    – xnor
    Oct 31, 2015 at 7:18
  • 1
    \$\begingroup\$ Out of curiosity, I found notes about this as an algorithmic problem, and it's NP-hard, so solutions are going to be exponential time. It would do good to include some test cases that a greedy algorithm would get wrong. \$\endgroup\$
    – xnor
    Oct 31, 2015 at 7:29
  • 2
    \$\begingroup\$ Looks like we already have this challenge. \$\endgroup\$
    – xnor
    Oct 31, 2015 at 8:53
  • \$\begingroup\$ Good catch. It's indeed the same problem. Thanks for pointing that out! \$\endgroup\$
    – Nitek
    Oct 31, 2015 at 9:03
0
\$\begingroup\$

Hello, World! Fitted in cases.

Your task is to take a line of input and print Hello,world! multiple times fitted to length of input. The cases of that character is fitted to input in same position(except shifted from deletion). If the corresponding character is non-alphabeth, you must use default case(lowercase except for "h" that is uppercase). And for punctuations, if the corresponding character is not punctuation, it will deleted. And if the corresponding character is space, the the ouput is space but it doesn't skip the "Hello,world" writing.

Example

Hello, world!
Hello, world!

About punctuation deletion and space insertion

I have a dog. I name it Underdog.
H ello w orld H ello wo Rldhellow

Explanation

Ihaveadog.InameitUnderdog.
Hello,worlD!hello,world!hellow
Helloworld!hello,World!hellow
HelloworldHello,wOrld!hellow
HelloworldHellowoRld!hellow
HelloworldHellowoRldhellow

Other examples

.....&^&%&*%&(&)^$#()&#()&@#)*%)#1-
Hello,world!Hello,world!Hello,world

UPPERCASES
HELLOWORLD

lowercases
helloworld

Abdeg,fGhiJ.
Hello,wOrlD!

Example Program

Here is ungolfed version of example program in Python. If there is error, correct me.

p=readline()
h="Hello, world"
i=0
k=""
for a in xrange(len(p)):
    if p[a]==" ":
        k=k+" "
        continue
    if isUpper(p[a]):
        if isAlpha(h[i]):
            k=k+upper(h[i])
        i=i+1
        continue
    if isLower(p[a]):
        if isAlpha(h[i]):
            k=k+lower(h[i])
        i=i+1
        continue
    k=k+h[i]
    i=i+1

Sandbox Question

This language is surely need to be fixed.

\$\endgroup\$
1
92 93
94
95 96
155

You must log in to answer this question.

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