457
\$\begingroup\$

What is the Sandbox?

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

To post to the Sandbox, scroll to the bottom of this page or click on the "Add Proposal" link below, and click "Answer This Question". Click "OK" when it asks if you really want to add another answer. Write your challenge just as you would when actually posting it. You may also add some notes about specific things you would like to clarify before posting it. Other users will help you improve your challenge by rating and discussing it. When you think your challenge is ready for the public, go ahead and post it, replace the post here with a link to the challenge and delete it.

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

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

Add Proposal

Search the Sandbox

Browse your pending proposals

Get the Sandbox Viewer to view the sandbox more easily

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

\$\endgroup\$
  • \$\begingroup\$ How are tags added to questions? \$\endgroup\$ – guest271314 Jan 9 at 7:51
  • \$\begingroup\$ @guest271314 You can use this markup to create a tag in a draft: [tag:code-golf] \$\endgroup\$ – DJMcMayhem Aug 29 at 15:19
  • \$\begingroup\$ Why no featured anymore? Can't we have it auto-added or something? \$\endgroup\$ – JL2210 Sep 26 at 15:57
  • 1
    \$\begingroup\$ @JL2210 We now have a permanent info box that links to the Sandbox, so the featured tag isn't necessary \$\endgroup\$ – caird coinheringaahing Sep 29 at 13:43
  • \$\begingroup\$ I think the sentence 'replace the post here with a link to the challenge and delete it' may specify that the deletion should be done immediately . \$\endgroup\$ – AZTECCO Oct 5 at 19:39

2558 Answers 2558

0
\$\begingroup\$

Browser identifier

There are three major browsers at the moment, Internet Explorer, Google Chrome and Firefox. Sometimes, the JavaScript engines inside of these browsers work a bit differently, and that can break some applications. Therefore, we need a way to identify what browser the user is currently using!

Your answer should be a JavaScript program or function, that when run on the latest version of a browser, should output a string representing that browser. The string outputed could be anything, as long as it stays the same every time you run it. Output should go to a HTML paragraph with id O, console.log, or as return value.

Please put your answer in a snippet, along with <p id="o"></p> in the HTML section if your answer uses it.

(scoreboard snippet goes here)

\$\endgroup\$
  • 1
    \$\begingroup\$ I believe Javascript has a builtin for this. It may be best to forbid using it. \$\endgroup\$ – SuperJedi224 Dec 22 '15 at 17:34
  • \$\begingroup\$ @SuperJedi224 Well, I did some searching before, and I found this thread on SO, and the highest voted answer was a big mess, and no answer was very short and reliable. There is this other thread, and it has some that could be golfed a bit, but there isn't really one function / builtin that checks the browser. \$\endgroup\$ – Loovjo Dec 23 '15 at 2:56
  • \$\begingroup\$ You might need to freeze the version numbers of the 3 browsers, or else require that answers specify version numbers. \$\endgroup\$ – trichoplax Dec 29 '15 at 15:54
0
\$\begingroup\$

Parse a tree for pruning

Windows supplies users with tree: a neat little tool that converts a directory tree to ASCII-CP437 art. It's a very human-readable format. However, it's a bit useless if you want the directory tree of an entire drive, or even just the Windows folder, as it's very hard to prune the parts you don't want. Hence this challenge.

Task

Your task is to produce a function or program that will convert the tree from one or both of the input formats into one or more of the output formats. The smaller your code, the more of a head start you have.

Input

There are two types of input that you might be given:

CP437

This is the default.

Folder PATH listing for volume Main Drive
Volume serial number is 00F3-F586
C:\WINDOWS
│   explorer.exe
│   notepad.exe
│   virus.dll
│   WLXPGSS.SCR
│   write.exe
│   
├───Boot
│   │   BootDebuggerFiles.ini
│   │   
│   ├───DVD
│   │       your.txt
│   │       
│   ├───EFI
│   │       pc.txt
│   │       
│   ├───Fonts
│   │       has.txt
│   │       
│   ├───PCAT
│   │       been.txt
│   │       
│   └───Resources
│           wrecked.txt
│           
├───System
└───System32
        cmd.exe
        conhost.exe
        winlogon.cmd
        winlogon.exe

ASCII

This will be easier to parse for many languages.

Folder PATH listing for volume Main Drive
Volume serial number is 00F3-F586
C:\WINDOWS
|   explorer.exe
|   notepad.exe
|   virus.dll
|   WLXPGSS.SCR
|   write.exe
|   
+---Boot
|   |   BootDebuggerFiles.ini
|   |   
|   +---DVD
|   |       your.txt
|   |       
|   +---EFI
|   |       pc.txt
|   |       
|   +---Fonts
|   |       has.txt
|   |       
|   +---PCAT
|   |       been.txt
|   |       
|   \---Resources
|           wrecked.txt
|           
+---System
\---System32
        cmd.exe
        conhost.exe
        winlogon.cmd
        winlogon.exe

Output

There are several possible types of output you can return, each suited to a different type of language.

Array / List hierarchy of strings

The first element of each array / list is the name, the rest are the contents. Files should be represented by strings, empty folders should be represented by a single-length array containing one string. Note: This should be returned from a function as an array / list, not printed as a string.

["C:\WINDOWS", "explorer.exe", "notepad.exe", "virus.dll", "WLXPGSS.SCR", "write.exe", ["Boot", "BootDebuggerFiles.ini", ["DVD", "your.txt"], ["EFI", "pc.txt"], ["Fonts", "has.txt"], ["PCAT", "been.txt"], ["Resources", "wrecked.txt"]], ["System"], ["System32", "cmd.exe", "conhost.exe", "winlogon.cmd", "winlogon.exe"]]

Object / Dictionary

Similar to array / list, but a little more intuitive. Folders should have the value of their contents as another object / dictionary. Files should have the value "FILE".

{"C:\WINDOWS":{"explorer.exe":"FILE","notepad.exe":"FILE","virus.dll":"FILE","WLXPGSS.SCR":"FILE","write.exe":"FILE","Boot":{"BootDebuggerFiles.ini":"FILE","DVD":{"your.txt":"FILE"},"EFI":{"pc.txt":"FILE"},"Fonts":{"has.txt":"FILE"} [...] } [...] } [...] }

Lisp-style string

Similar to array / list, where the head of the list is the directory name and the tail is the contents. An empty directory is a list with no tail, and a file is a string.

No WAY am I putting an example. No way. I've spent half the time on this question creating the examples. No way. Ok, maybe later.

Bonus

If you satisfy none of these bonuses, your submission is still valid. But its score shall infinite, so it is non-competitive.
These bonuses are to multiply your score by. Bonuses stack by multiplication. These bonuses must all be achieved consistently to be awarded.

  • 100% Allow at least one input mode and output mode
  • 50% Allow both input modes
  • 90% Output in exactly two ways
  • 50% Output in one of two ways depending on parameters
  • 80% Output in exactly three ways
  • 25% Output in one of three ways depending on parameters
\$\endgroup\$
0
\$\begingroup\$

Identifying spies in "Resistance"

This is still very rough, but I think it has the makings of an interesting challenge. Please help me improve it. What do I need to add? What do I need clarify?

Resistance is a party game that pits "resistance members" against "imperial spies" on a series of missions. A very important aspect of the game is that the resistance members do not know who the spies are, whereas the spies do know who is who.

How the game works

The relevant details of the game will be added here. For now, just check the Wikipedia page linked in the title.

Challenge

your challenge is to write a program that takes as input the details of every round and outputs who it thinks is a spy after each round. There are 5 rounds (missions) in a game of resistance, so the program/function will take in all the data for the first round, which includes

  1. Each proposed team to go on the mission
  2. Each public vote following each proposal
  3. The final team to go on the mission
  4. The outcome of the mission (i.e. how many passes and how many fails)

It will then output who it thinks is a spy. It will then do the same for each subsequent round.

Important Details

We will be playing resistance for (6?) people, A, B, C, D, E, and F.

Input format is flexible. It may be done round by round or all at once. However, since ach submission is outputting something for each of the five rounds, the submission may not use information from future rounds (if all information is given at once) in judging the current round.

Here is an example of possible input format:

Since the first mission requires two people, and person A is the first mission planner, the only thing input would be two letters in {A,B,C,D,E,F} indicating his selection. Then the votes of each person, in order, would be input. This continues until a mission team is accepted. Then the votes given on the mission would be input, in no/any particular order. The program would then output the letters of the two people it thinks are spies (there are 2 spies in a 6 person game). Here is an example

A B              # A selects A and B for first mission
P P P F F F      # Everyone votes, mission team is not accepted (lacks majority pass)
B F              # B selects B and F for first mission
P P P P P F      # Mission team is accepted (majority pass)
P F              # Mission fails (there is at least one fail vote). Note that the order does not matter here. 

The bot would then output two people, the people it thinks are most likely to be the spies based on all the information it has up to this point.

B F              # Any two person subset is acceptable

Input then continues for the next 4 rounds, until the game is over.

Scoring

I will write several hundred test cases (from actual games played online). Then each output will be scored in the following way:

  • 1 point for each correctly guessed spy.
  • 1 point for guessing both spies correctly.

The submission's total score will be the sum of all scores on all rounds in all games. The program will never be told who is a spy (unless it is used to self-score and does not factor into the actual guessing) but this information will be available with the test cases for scoring purposes.

Tie break is code golf.


Meta: I think I'm going to remove output after the first round, because very rarely do people ever fail the first mission. So it will likely just be pure chance.

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

Nth Regex

This challenge('s explanation) is simple: given a number n and a regex r, output the nth string that matches r!

The regex r uses the syntax used in Python, described here. The regex will be for the whole string, meaning the regex will be implicitly wrapped in ^$.

The only valid strings are printable ASCII characters, and they count up like base 95 (ASCII codes 32-126).

To prevent people from brute-forcing it, I was thinking of making it .

\$\endgroup\$
  • 1
    \$\begingroup\$ I still think you mean "bijective base 95". otherwise, there are no strings with leading spaces (because if count up in base 10, there are no numbers with leading zeroes). \$\endgroup\$ – Martin Ender Dec 29 '15 at 14:09
  • 4
    \$\begingroup\$ I'm not a fan of using a specific real-world flavour, because that gives an advantage to Python over all other languages. I also think it contains way too many features to be fun to tackle (which don't really add anything interesting to the challenge). I think the challenge would be interesting and hard enough for a simplified regex flavour containing only simple quantifiers, alternation and character classes. \$\endgroup\$ – Martin Ender Dec 29 '15 at 14:11
  • \$\begingroup\$ I'm quite sure that some regexes are hard to solve. codegolf.stackexchange.com/questions/39829/… \$\endgroup\$ – Element118 Dec 29 '15 at 15:54
  • \$\begingroup\$ I absolutely don't get the challenge, any example input/output ? \$\endgroup\$ – Tensibai Dec 30 '15 at 14:31
  • \$\begingroup\$ Do you mean nth string lexicographically? \$\endgroup\$ – xnor Dec 30 '15 at 18:45
0
\$\begingroup\$

Robots on ice

Part 1 - The basic

You are helping a robot R on an iced island. R can go up/down/left/right. But since the island is made of ice, it cannot move only 1 square at a time, but instead moves in straight line. Your task is to help R reach G.

Input

The input (file, stdin, input, whatever suits you) is an n×m matrice with the following characters:

  • R The robot
  • G The goal
  • # An obstacle that stops the robot
  • Ice

The island is surrounded by a wall: the edges of the matrice always consist of #.

Output

A list of instructions consisting of U/D/L/R, corresponding to up/down/left/right.

The list should be the shortest possible. The distance traveled by the robot doesn't count.

The output should be the map with the instructions on it, with each instruction at the right coordinates. Each of RG# should be displayed if not overriden by an instruction (that will always be the case for R)

Example

Input:

##########
# #      #
#        #
#  G #   #
#        #
#    R#  #
#        #
##########

Output: Since D,R,U,L,D is one possible solution, the output should be:

##########
# #D    L#
#        #
#  G #   #
#        #
#    D#  #
#    R  U#
##########

Another solution, U,R,U,L,D, should be output as:

##########
# #D    L#
#        #
#  G #   #
#    R  U#
#    U#  #
#        #
##########

Input:

####################
###R             ###
#  ######          #
#      #####       #
##                G#
###              ###
####################

Output:

####################
###R            D###
#RD######          #
#U L   #####       #
##R               G#
###U            L###
####################

You can assume that the puzzle always has at least 1 solution

Part 2 - New options

The pitch is the same, but new characters can be displayed:

Input

The input (file, stdin, input, whatever suits you) is an n×m matrice with the following characters:

  • R The robot
  • G The goal
  • # An obstacle that stops the robot
  • Ice
  • W Some water. Robot doesn’t like water
  • B a Box. Robot can push the box 1 square at a time, in front of him (not on the side), if the next square is . It cannot be pushed into the water, through the goal… Robot cannot push 2 boxes at once. When pushing, the robot stays in place.
  • 1 a numbered teleportation door. Always in pair. When entering a teleportation door, Robot will continue sliding in the same direction through the other door. Can be used more than 1 time.

The island will this time be surrounded by water.

Output

A list of instructions consisting of U/D/L/R, corresponding to up/down/left/right.

The list should be the shortest possible. The distance traveled by the robot doesn't count.

This time the output won't be displayed on the map, but on stdout. The format doesn't matter:

UDRL

or

U
D
R
L

are accepted

Example

Input:

WWWWWWWWWW
W W      W
W        W
W  G 1   W
W        W
W    1R  W
W        W
WWWWWWWWWW

Output:

L

Input:

WWWWWWWWWW
W W      W
W    #   W
W  G     W
W        W
W    BR  W
W        W
WWWWWWWWWW

Output:

LLUL

The first L moves the box (but not the Robot) 1 square:

WWWWWWWWWW
W W      W
W    #   W
W  G     W
W        W
W   B R  W
W        W
WWWWWWWWWW

Input:

WWWWWWWWWWWWW
W         # W
W G 2       W
W           W
W   B 1     W
W#2         W
W   # 1R   #W
W          #W
W    #     #W
WWWWWWWWWWWWW

Output:

L #entering teleportation 1
L #pushing the box to the left
L #going to the box
U #entering teleportation 2

The solution RULU is also valid

Input:

WWWWWWWWWWWWW
W #         W
W     #     W
W#   1      W
W           W
W           W
W    1 R    W
W           W
W    G      W
WWWWWWWWWWWWW

Output:

L #entering teleportation 1
U #going to the wall
R #going to the wall
D #entering teleportation 1

In this situations, Robot cannot moves to the left:

W  GBR   W

W  #BR   W

W  BBR   W

W  WBR   W

W    R   W

You can assume that the puzzle always has at least 1 solution

Part 3 - With help

Same as part 2 but with others robots:

Input

The input (file, stdin, input, whatever suits you) is an n×m matrice with the following characters:

  • R The robot
  • G The goal
  • # An obstacle that stops the robot
  • Ice
  • W Some water. Robot doesn’t like water
  • B a Box. Robot can push the box 1 square at a time, in front of him (not on the side), if the next square is . It cannot be pushed into the water, through the goal… Robot cannot push 2 boxes at once. When pushing, the robot stays in place.
  • 1 a numbered teleportation door. Always in pair. When entering a teleportation door, Robot will continue sliding in the same direction through the other door. Can be used more than 1 time.
  • abcde up to 5 robots that can move the same as Robot. They cannot go through other robots, including R, and can pass through the Goal. They can be sacrified by going into the water. They can be used more than 1 time.

The island is surrounded by water.

Output

A list of instructions consisting of U/D/L/R, corresponding to up/down/left/right, prefixed by the name of the robot moving.

The list should be the shortest possible. The distance traveled by the robot doesn't count.

As usual, theformat doesn't matter:

a:UDR
R:LU

or

aU
aD
aR
RL
RU

are accepted

Example

Input:

WWWWWWWWWWWWWWWWWW
W        a     # W
W   G            W
W                W
W                W
W                W
W             R  W
W                W
W       #        W
W             #  W
W                W
WWWWWWWWWWWWWWWWWW

Output:

a:R
R:UL

The answer DLUL is valid but not the shortest

Input:

WWWWWWWWWWWWWWWWWW
W                W
W                W
W                W
W                W
W  G    a    R   W
W                W
W                W
W                W
W                W
W                W
WWWWWWWWWWWWWWWWWW

Output:

a:U
R:L

Input:

WWWWWWWWWWWWWWWWWW
W           #    W
W                W
W  #             W
W           G    W
W                W
W                W
W           b    W
W   R       a    W
W                W
W                W
WWWWWWWWWWWWWWWWWW

Output:

b:U
a:UL
R:UR

Input:

WWWWWWWWWWWWWWWWWW
W                W
W           #    W
W          B     W
W  #             W
W     G          W
W                W
W  #             W
W   e       R#   W
W                W
W           a    W
WWWWWWWWWWWWWWWWWW

Output:

e:R
R:U
a:UL
R:LLDLUR

Input:

WWWWWWWWWWWWWWWWWW
W                W
W         G #    W
W   b            W
W                W
W           a    W
W   c            W
W           #    W
W   R            W
W                W
W          #     W
WWWWWWWWWWWWWWWWWW

Output:

a:U
b:RD
a:D
C:RD
R:RU

Input:

WWWWWWWWWW
W    G   W
W aBbBR  W
WWWWWWWWWW

Output:

a:L
b:LL
R:LLU

In this situations, Robot and b cannot move to the left:

W  GaRb  W

W  #b#R  W

W aBbBR  W

You can assume that the puzzle always has at least 1 solution

Sandbox Questions

Has it been done before?

What do you think? Is it understandable? Should I do 3 separated challenges (and in the sandbox)? More, less? Which part needs more examples? What part is unclear?

I would like to go with shortest-code win. Should I use kolmogorov instead?

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

Everything about PI

Pi is the most popular transcedental number. As a result, pi has been thoroughly studied. This challenge is in spirit of 9-Hole challenge.

1. Digits of PI

Given n and k, output n'th digit after the decimal point in the base-k representation. For example, the 5th digit of PI base 10 is 9.

5 10
9
10 2
0
6 16
10

If the base is more than 10, output like in the last test case

More information : http://www.virtuescience.com/pi-in-other-bases.html

2. Continued fraction of PI

Given n, output n'th number in continued fraction of Pi.

5
292
7
1

3. Closest to PI

Given a positive integer d, output the integer n such that n/d is closest to pi. For example, 17/5 is closer to pi than any other n/5.

 5
 17
 7
 22
 21
 66

4. Closest to PI 2

Given a positive integer n, output the integer d such that n/d is closest to pi.

5
2
7
2
20
6

Restriction.

  1. You should not have any floating-number buildin, only integer, including PI constants.
  2. Standard loophole is disallowed.
  3. The program may be 4 program or a program that reads challenge number.

Sandbox Question

Originally, I have 5 challenge, 4 more required. Now, one of them is dupe. 5 more required.

\$\endgroup\$
  • \$\begingroup\$ This does look suspiciously like lot of questions rolled into one. +1 and you could split it up into loads of challenges. \$\endgroup\$ – wizzwizz4 Dec 30 '15 at 12:10
  • \$\begingroup\$ Also, you could add more clarification on what a "9-Hole challenge" is. \$\endgroup\$ – LegionMammal978 Dec 30 '15 at 12:12
  • \$\begingroup\$ @LegionMammal978 codegolf.stackexchange.com/q/16707/46245 \$\endgroup\$ – Akangka Dec 30 '15 at 12:38
  • \$\begingroup\$ The spirit is more than one challenge in one question. \$\endgroup\$ – Akangka Dec 30 '15 at 12:48
  • \$\begingroup\$ Are you looking for 4 more sub-challenges, or a catchy name for a 5 component question? \$\endgroup\$ – trichoplax Dec 30 '15 at 16:17
  • \$\begingroup\$ Quintessential pi question? \$\endgroup\$ – trichoplax Dec 30 '15 at 16:18
  • 2
    \$\begingroup\$ A. I believe that the "many small holes in one question" model is considered a failed experiment. B. I don't understand the spec for part 1 at all. Part 2 is inadequately specified. Part 3 is a dupe. Parts 4 and 5 look almost completely trivial (or completely trivial for languages with a pi built-in). \$\endgroup\$ – Peter Taylor Dec 30 '15 at 18:39
  • \$\begingroup\$ Added that pi build-in is not allowed \$\endgroup\$ – Akangka Dec 31 '15 at 4:08
  • \$\begingroup\$ What about getting pi via inverse trig? Complex logs? Evaluating integrals? Banning the built in value still lets languages express it via math, and it's tricky to draw the line. \$\endgroup\$ – xnor Dec 31 '15 at 5:16
  • 1
    \$\begingroup\$ Also, why does every question need to use pi? If you want a challenge about, say, rational approximations, you can use arbitrary inputs or square roots or anything all langs have access to roughly equally. \$\endgroup\$ – xnor Dec 31 '15 at 5:18
  • \$\begingroup\$ @xnor 1. trigonometry, log, etc. is useless without floating point number. And any uses of floating point number isn't allowed (Even if it just uses addition only). However, I am afraid of integrals, too. 2. Just because. \$\endgroup\$ – Akangka Dec 31 '15 at 5:52
  • \$\begingroup\$ In the revised version, I think that if these were posted separately then part 1 would be closed as a dupe of part 3. Also, part 2 is still inadequately specified. You need to at minimum explain the indexing convention, and ideally specify what a continued fraction is (since some answers may use generalised continued fractions and confuse people who aren't familiar with them). \$\endgroup\$ – Peter Taylor Dec 31 '15 at 11:12
  • \$\begingroup\$ @PeterTaylor I don't understand how part 1 is dupe of part 3. For part 2 I uses simple continued fraction and what is indexing convention? \$\endgroup\$ – Akangka Dec 31 '15 at 11:17
  • \$\begingroup\$ A. Part 3 says "Given d, find n such that (n-0.5)/d < pi < (n+0.5)/d". Part 1 is essentially (since there isn't a general Plouffe formula for all bases) "Given k and n, find b such that b / k^n < pi < (b+1) / k^n and then return b % k". The core problem is almost identical. B. It's not enough for you to know that you're using simple continued fractions: the question has to make it clear. The indexing convention is whether you count the initial 3 + ... as index 0 or 1. \$\endgroup\$ – Peter Taylor Dec 31 '15 at 11:34
  • \$\begingroup\$ @PeterTaylor A. The insight clears my mind. Thanks. I don't think as far as that. B. 1. But I don't know how to explain that. Please add yourself. \$\endgroup\$ – Akangka Dec 31 '15 at 11:43
0
\$\begingroup\$

How to print 2016 using only the number 2?

Print 2016 using only the digit 2 operators and native language built-in functions.

The objective is to

  • Output the integer 2016 without using any digits except 2.
  • no characters / strings literals are allowed, i.e. no tricks like ord('b')
  • The code that uses the least number of 2s in the code wins.

For example, in python, the following code uses 8 twos.:

>>> int(str(2**2*2) + str(2**2)) * int(str(2) + str(2**2))
2016

Or like this code, uses 13 twos:

>>> 2 ** 2 ** 2 * 2 ** 2 ** 2 * 2 * 2 * 2 - 2 ** 2 ** 2 * 2
2016
\$\endgroup\$
  • 3
    \$\begingroup\$ Can you use constants initialized to a certain value (like CJam's Z variable which defaults to 3)? \$\endgroup\$ – GamrCorps Dec 31 '15 at 19:42
  • 1
    \$\begingroup\$ What's the tiebreaker if multiple answers have the same number of 2s? \$\endgroup\$ – Doorknob Dec 31 '15 at 19:46
  • 6
    \$\begingroup\$ 1. Every language that has variables will have a score of at most 1, since you can just save the initial 2 in a variable. 2. There are many ways to produce numbers without using characters, strings or other numbers, like taking the length of a list, for example. That means a score of 0 is just as easy. \$\endgroup\$ – Dennis Dec 31 '15 at 19:47
  • \$\begingroup\$ I would suggest making the scoring system a normal code-golf challenge and disallowing date functions. \$\endgroup\$ – GamrCorps Dec 31 '15 at 19:55
  • \$\begingroup\$ I will make my original suggestion again: require that every function and operator take as input either a number consisting entirely of 2's in some base, or the output of some function or operator that obeys this rule. If you insist on your "least number of 2's metric" count 2's passed inside variables or in the outputs of functions as contributing to this count. \$\endgroup\$ – quintopia Dec 31 '15 at 21:15
  • \$\begingroup\$ What about such version: In repl environment produce value 2016 using only number 2, operators and math functions. No any other functions allowed. Code golf or code challenge. \$\endgroup\$ – Qwertiy Dec 31 '15 at 21:17
0
\$\begingroup\$

Growing Quine 2

Your task is to give program P1..P5 so that.

  1. For all k<5, length of Pk < length of Pk+1
  2. For all k<5, Pk outputs Pk+1
  3. For all k<=5, Pk is semi-pristine program. (Program that if any run on the source-code is deleted, will output different output)
  4. P5 return P1 sufficient times that the output will be longer than P5

Shortest P1 wins

\$\endgroup\$
  • \$\begingroup\$ By rule 4, do you mean if P1 is abc, then the output should be abcabcabc... for the minimum amount of repetitions that is longer than P5? can we output it more often that necessary? Also, I think rule 3 makes this incredibly hard. \$\endgroup\$ – Martin Ender Jan 1 '16 at 16:40
  • \$\begingroup\$ First, Yes. The rule 3 is to prevent the padding of source code with nop. Maybe I will change into different output to make this easier. \$\endgroup\$ – Akangka Jan 2 '16 at 0:50
  • \$\begingroup\$ I mean rule 4 can repeat more often than necessary \$\endgroup\$ – Akangka Jan 17 '16 at 1:22
0
\$\begingroup\$

Zipping double quine.

You must provide 2 program, A and B. Both are a quine and have same length.

If A and B is zipped each other(Both when A is zipped first, or B is zipped first), the result is also an quine.

Standard Loopholes is not allowed and standard quine rules apply.

Examples

If program A is ABCDEF and program B is GHIJKL then

slangi "ABCDEF"
ABCDEF
slangi "GHIJKL"
GHIJKL
slangi "AGBHCIDJEKFL"
AGBHCIDJEKFL
slangi "GAHBICJDKELF"
GAHBICJDKELF
\$\endgroup\$
  • \$\begingroup\$ Do all three quines have to use the same language? Are function quines allowed? \$\endgroup\$ – Dennis Jan 6 '16 at 17:03
  • \$\begingroup\$ @Dennis All three quine have to use same language. Function quines is allowed. \$\endgroup\$ – Akangka Jan 7 '16 at 7:57
0
\$\begingroup\$

War of Flatland

If you haven't read Flatland, please do so here. It is a must-read, for mathematical and non-mathematical alike.

Oh no. No no no! War has broken out in Flatland. Society has crumbled, and all the women and children are either hiding or dead1. It is total anarchy, kill or be killed. It is such conflict that the 4th dimensional people have erected indestructible borders to prevent the conflict spreading.

On the plus side, if you came out on top, you could rule (some of) the entire world!

Specifications

  • You can be a shape with three or more sides. (No women1, remember?)
  • All shapes are regular.
  • You can only see by sight. (No feeling; you'll be killed if you get close enough to do that!)
  • Everybody starts with 1 health.
  • You can hurt other people by stabbing one of their edges with a vertex.
  • The vertex of an n sided shape deals 1/n damage.
  • An n sided shape has 4n angles of vision (sensors evenly spaced around the shape which see the nearest point and return the distance to it).
  • An n sided shape can see 2n different distances (range [0,16))
  • People don't see themselves. (What good is sight if your body gets in the way?)
  • People are all the same size (radius).
  • People can see everything within 16 units of their centre point.
  • If your health is 0 or below, you are killed.
  • The world has borders.
  • You can rotate by a maximum of 15 degrees either direction, then move exactly 1 unit towards either of your vertices every turn.
  • Each shape's "radius" is 8 units.
  • Degrees are anticlockwise from 3 O'clock. The 0th sensor is at 3 O'clock relative to the shape's orientation.

1 This is not me being sexist. Read Flatland.

Sandbox Meta:

I am using the Sandbox as a public incubator. I will build up and work on the challenge until it is ready, then post it as a question. But it made more sense to let others see, comment on and help with this challenge's development.

The Specifications are probably not going to remain in this format once the Stack Snippet and actual code is up and running.
I am working on, and have got quite far with, a JavaScript class to let people write code. If anyone can write a code to do the boring rendering thing onto a HTML5 canvas, I would be grateful.

Stuff I plan to add:

  • A stack-snippet battlefield
  • A JavaScript class to let people write code
  • A web-socket system to let people make submissions in other languages
  • A system to pull submissions from answers (I'm no good at this sort of thing)
\$\endgroup\$
  • \$\begingroup\$ 1. What counts as stabbing an edge? (I can see the numerical issues involved in working out whether a contact is vertex-vertex or edge-vertex being quite hairy). 2. What does it mean that "an n sided shape has 4n angles of vision"? 3. How does movement work? \$\endgroup\$ – Peter Taylor Jan 3 '16 at 17:07
  • \$\begingroup\$ @PeterTaylor 1. I calculate line intersections on shapes with close enough centres, then I count the intersections and work out where the intersections are. 2. First, read up on how Flatlanders see distance. Distance is represented by a number. You have 4n numbers, evenly spaced around the shape. So a triangle will have 12 angles of vision. 3. You can rotate by a maximum of undecided degrees and move 1 unit towards either of your vertices every turn. \$\endgroup\$ – wizzwizz4 Jan 3 '16 at 17:21
  • \$\begingroup\$ The word distance occurs only 9 times in the text, and none of them seem to address how distance is perceived per se. \$\endgroup\$ – Peter Taylor Jan 3 '16 at 18:01
  • \$\begingroup\$ @PeterTaylor Part 1 Chapter 5 \$\endgroup\$ – wizzwizz4 Jan 3 '16 at 18:24
  • \$\begingroup\$ Why not just say that vision extends out to 16 units and that each movement is 1 unit? Other considerations: what prevents a player from repeatedly stabbing another one? If everyone moves the same distance in a turn, I don't see how escape is possible. Do people/bots choose how many sides they have? It seems to me like a triangle would be the best choice. The only downside is fewer sensors, but I don't think that's a particularly bad one. \$\endgroup\$ – El'endia Starman Jan 5 '16 at 7:42
  • \$\begingroup\$ @El'endiaStarman I've been trying to make higher shapes more balanced. And hopefully there will be a defined bouncing mechanism after stabbing. (Spinning like a saw however...) And yes, they choose. \$\endgroup\$ – wizzwizz4 Jan 5 '16 at 8:00
  • \$\begingroup\$ @El'endiaStarman what if you always start as a triangle, a vertex forms on a side whenever one gets stabbed there (like a bruise swelling up). Or, in other words, an n-gon becomes an n+1-gon when stabbed. Stabs don't do ANY damage other than this. You die when n exceeds some threshold. This seems self-balancing: The more vertices you have the more people you can poke at once and the sooner you can poke them (because you already have a vertex aimed at them). \$\endgroup\$ – quintopia Jan 7 '16 at 17:05
  • \$\begingroup\$ Another balancing possibility is making higher-sided shapes move faster. \$\endgroup\$ – quintopia Jan 7 '16 at 17:07
  • \$\begingroup\$ @quintopia But that is simply a balancing system, and is in no way derived from the book. (But will probably be used if nobody can think of another way to balance the higher shapes that is derived from the book). \$\endgroup\$ – wizzwizz4 Jan 7 '16 at 17:42
  • \$\begingroup\$ I was purposefully avoiding letting the content of the book influence my recommendations. It's more important that the game is fun than that it's thematic. \$\endgroup\$ – quintopia Jan 8 '16 at 16:19
  • \$\begingroup\$ @quintopia I suppose... But your speed idea would introduce the issue of how fast? Would it be logarithmic? Would there be a point where it is unrealistic to be able to kill a higher-sided shape because they can practically teleport? \$\endgroup\$ – wizzwizz4 Jan 8 '16 at 16:51
  • \$\begingroup\$ @quintopia And the n=>n+1 idea is a completely different challenge! \$\endgroup\$ – wizzwizz4 Jan 8 '16 at 16:52
0
\$\begingroup\$

Print Euler's number on its own graph

Print the first n characters of Euler's number (e, 2.718281828459...) on a 'graph' of e^n. For example, input 3 (the x and y-axis scales here are provided for reference, and need not be implemented in your program):

20 |         1
19 |
18 |
17 |
16 |
15 |
14 |
13 |
12 |
11 |
10 |
 9 |
 8 |
 7 |     7
 6 |
 5 |
 4 |
 3 | 2
 2 |
 1 |
 0 | - - - - - - -
     1   2   3
      digit #

In the example above, note that:

  • Three digits of Euler's number are presented
  • Each digit is shown at a height equal to e^n, where n is the digit number. 2, for example, is shown at height 3 because e^1 = 2.72, which we round up to 3. You may round up or down, see below.

Various other informational bits:

  • Rounding need not be implemented; 271 is acceptable output for input 3, as is 272.
  • You will always be provided with input >= 1 , and your input will never contain decimal places nor any characters other than 0-9.
  • You may round the y value up or down, I.e. e^3 = 20.0855 may be shown as y=20 or y=21.
  • Your graph must have higher y-values at the top and higher x-values to the right; it must have a positive slope
  • You may use any amount of horizontal spacing >= 1 between successive digits. In the example above, there are 3 spaces between successive digits. You just can't have digits stacked on top of eachother.
  • You are not required to print scales on the x or y axis.
  • Your input will always be <= 10.
  • You may hardcode the required digits if you so desire.
\$\endgroup\$
  • \$\begingroup\$ You should specify about trailing and leading whitespace, on each line and before and after the graph. \$\endgroup\$ – FryAmTheEggman Jan 14 '16 at 15:50
0
\$\begingroup\$

Print as many numbers as you can

A challenge where you have two occurrences of each ASCII character from 20 to 7E to write as many programs as you can to print single distinct integers (one integer per program). For example, you cannot have A and AA to print 10 and 1010 in CJam, respectively, as that is three occurrences of A.

Full programs are not required.

You get 1 point for each integer you print. In the case that two answers create the same number of integers, the tiebreaker is the answer that uses the fewest bytes to create the integers.

Is this a good idea for a challenge? Also, is it a dupe? I feel like I've seen it before but I'm not sure.

\$\endgroup\$
  • \$\begingroup\$ 1. TT is an odd example here, since it would print 10\n10 in Pyth. AA prints 1010 in CJam. 2. Are full programs required? Are leading zeroes allowed? Can the integers be negative? \$\endgroup\$ – Dennis Jan 8 '16 at 6:00
  • \$\begingroup\$ I'm a little confused by the scoring, would we get to pick our own integer? And in your example, would AA count for two points? If so I think most answers would be something like BC#D#E#F#{A}* in CJam, where they just output the number a million billion times in a loop. (Don't try this online..) \$\endgroup\$ – FryAmTheEggman Jan 8 '16 at 18:12
  • \$\begingroup\$ @FryAmTheEggman I added how it would be scored. The example you have would be I avoid anyways as it contains more than 2 # characters. \$\endgroup\$ – Arcturus Jan 8 '16 at 19:49
  • \$\begingroup\$ Sure, but that doesn't stop people from generating giant numbers in other ways, or even infinite loops. I think a better approach would be to count the total number of programs that print exactly the same number exactly once with the same restriction. I do think this is a neat idea, but I don't think optimizing for the largest numeric output is nearly as interesting. \$\endgroup\$ – FryAmTheEggman Jan 8 '16 at 20:16
  • \$\begingroup\$ @FryAmTheEggman The challenge isn't to optimize the largest number; it's to make the greatest quantity of numbers. \$\endgroup\$ – Arcturus Jan 8 '16 at 21:23
  • \$\begingroup\$ Yes, but they are really the same thing. If I can make a large number I can print a lot of numbers. \$\endgroup\$ – FryAmTheEggman Jan 8 '16 at 21:24
  • \$\begingroup\$ But can you make large numbers with multiple programs (remember that you can only print one integer at a time and only have 2 of each printable ASCII character to write all your programs)? \$\endgroup\$ – Arcturus Jan 8 '16 at 21:36
  • \$\begingroup\$ Ok, that's what I was asking about, if each program is limited to 1 point I think it's fine, that just didn't seem very clear to me, especially because of the AA example. \$\endgroup\$ – FryAmTheEggman Jan 8 '16 at 21:52
  • \$\begingroup\$ 1..99 in PowerShell will print a bunch of numbers (and similar in other languages). Is each program limited to only printing one? I think that's what you're intending, but it's not super-clear in your post. \$\endgroup\$ – AdmBorkBork Jan 8 '16 at 22:01
  • \$\begingroup\$ I'm confused. Can you give an example? And how about character outside 20 - 7E? \$\endgroup\$ – Akangka Jan 9 '16 at 2:21
0
\$\begingroup\$

Smallest Turing Complete Interpreter

Sandbox Notes

  • Has anything like this ever been done before?
  • Do you think this will be well received?
  • In my research I couldn't find a simple definition of what makes a language "Turing complete". What alterations or additions should I make to the language rules? I would prefer that the language in every answer was not exactly the same, but at the same time I want to keep the complexity as low as possible (while still being Turing complete) so that ideally one of the answers would become the world's smallest (non-eval) interpreter.
  • Are there any other loopholes I missed?

Let me know in the comments!


Your challenge is to make the smallest possible interpreter for a programming language.

What is the language we are interpreting?

You get to create the language! You can implement any instructions you like, however the language must be Turing complete. For the purposes of this challenge, your "Turing complete" language must be able to:

  • Store and retrieve an arbitrary amount of data in memory The amount must be theoretically infinite, but your interpreter only needs to handle a minimum of 64 kilobytes (256 ^ 0xffff distinct values). The format could be an array of numbers, a string, a very large integer (if the language of your interpreter supports 524288-bit integers :P ) or any other format that provides the same number of distinct values.
  • Loop conditionally The loop must also be able to alter the execution flow (if you implement a while loop that can only have one instruction in the body, it won't be able to affect anything outside of the while loop). This can be one command (eg: while A do { B C D }) or two (eg: if A then B and goto C) or any number that produces the same effect.
  • Print any ASCII character This includes code points 32 to 126 inclusive. Newline is not required but being able to print characters outside of this range is fine.

It does not need to take input. Any extra features are fine as long as it meets these requirements. The language does not have to be pleasant to use, but each of these requirements must be usable in the real world.

See the languages here for some inspiration...

Input

  • Your interpreter must take a single string containing the source code of a program in your language.
  • The input will always be a valid program. You do not need to handle endless loops, impossible instructions, etc.

Output

  • A single string containing the output of the program.
  • A single trailing newline is allowed, any other leading or trailing whitespace is not.

Rules

  • The only rule is that you cannot use eval (or equivalent) in your interpreter.
  • Your interpreter must be a full program, not just a function. Input and output must be from STDIN, STDOUT or their equivalents.
  • The interpreter and the specifications of your language must be posted in your answer. Make sure you include all details that prove the language is Turing complete!
  • Your language can be identical to an existing language or a language from another answer.

Remember...

This is . Your score is the number of bytes in the source code of your interpreter, so design your language to minimise this score.

Good luck!


Sample Answer

JavaScript (ES6), 148 bytes

s=prompt();o="";m=[];for(p=i=0;c=s[i];i++)v=m[p],+c?c-1?c-2?c-3?c-4?o+=String.fromCharCode(v):p++:p--:m[p]=~~v+1:m[p]=~~v-1:m[p]?i=m[p+1]:0;alert(o)

Language Specification

Memory is stored on an infinite tape. The pointer variable points to a position within this tape. The index variable holds the index of the current instruction in the source code being executed. Each instruction is a single-digit number. The numbers do the following:

  • 5 = print character ASCII code at pointer
  • 4 = increment pointer
  • 3 = decrement pointer
  • 2 = increment value at pointer
  • 1 = decrement value at pointer
  • 0 = if the value at pointer is non-zero, set index to the value at pointer + 1

Explanation

Using numbers instead of letters for the instructions means I can check with c-3 instead of c=="x".

s=prompt();
o="";
m=[];
for(p=i=0;c=s[i];i++)
  v=m[p],
  +c?
    c-1?
      c-2?
        c-3?
          c-4?
            o+=String.fromCharCode(v)
          :p++
        :p--
      :m[p]=~~v+1
    :m[p]=~~v-1
  :m[p]?i=m[p+1]:0;
alert(o)

Test

prompt = () => input.value;
alert = (output) => result.textContent = output;
var solution = _=>{ s=prompt();o="";m=[];for(p=i=0;c=s[i];i++)v=m[p],+c?c-1?c-2?c-3?c-4?o+=String.fromCharCode(v):p++:p--:m[p]=~~v+1:m[p]=~~v-1:m[p]?i=m[p+1]:0;alert(o) };
<textarea id="input" rows="5" cols="70">222222222222222222222222222222222222222222222222222222222222222222222222522222222222222222222222222222522222225522254222222222222222222222222222222222222222222225111111111111531111111111111111111111115222222222222222222222222522251111115111111115425</textarea><br />
<button onclick="solution()">Go</button>
<pre id="result"></pre>


Tags:

\$\endgroup\$
  • \$\begingroup\$ You ought to add that all submissions include a proof of TC-ness \$\endgroup\$ – quintopia Jan 9 '16 at 6:49
  • \$\begingroup\$ @quintopia Yes. I've been contemplating what the simplest way to prove turing-completeness is. At the moment the only way to check is by looking at their language specs and comparing them to the checklist in my question, but maybe there's a simple program that uses all these rules that I could require (or at least recommend) to be made and run in their language which proves Turing completeness... \$\endgroup\$ – user81655 Jan 9 '16 at 8:03
  • \$\begingroup\$ The only way to prove TC-ness that I know is to reduce a universal language to it. But you can let the submitter decide which language they want to reduce to it. \$\endgroup\$ – quintopia Jan 9 '16 at 8:07
  • 1
    \$\begingroup\$ 1. I would vote to close this as too broad. It essentially duplicates half of the interpreter tag. See in particular codegolf.stackexchange.com/q/40300/194 . 2. What makes a language TC is the ability to emulate a universal TM. This is often proven by proving ability to emulate another known-TC system and applying transitivity. 3. In "a minimum of 64 kilobytes (256 ^ 0xffff distinct values)", what is ^ and how does 256 ^ 0xffff relate to 64 kB? 4. Not all TC systems have an explicit concept of loop. \$\endgroup\$ – Peter Taylor Jan 9 '16 at 17:04
  • 1
    \$\begingroup\$ 5. Output in ASCII seems to directly contradict your stated intention to "keep the complexity as low as possible" and inspire "the world's smallest (non-eval) interpreter". 6. The restriction against eval seriously constrains some languages' ability to process input. \$\endgroup\$ – Peter Taylor Jan 9 '16 at 17:05
  • \$\begingroup\$ @PeterTaylor Yeah, the broadness of the challenge is my main concern. I'm not sure there is a way to fix this without changing the purpose of the challenge as well. Addressing your other points: 3. There are 256 to-the-power-of 0xffff different ways you can arrange the bits of a 64 kilobyte block of bits. I just worded it like this to illustrate that the memory can be stored in any way that produces the same effect (rather than enforcing a 16384 length array of 32-bit integers, etc). The wording could be improved. \$\endgroup\$ – user81655 Jan 10 '16 at 2:47
  • \$\begingroup\$ @PeterTaylor 4. I assumed that would be necessary. How would it compute a recursive algorithm without the execution jumping back to the start of the algorithm repeatedly? 5. True. It's purpose was to unify the output of the languages and simplify testing but it would probably be more work for some interpreter languages. 6. That was to prevent trivial answers like eval(input). I could make an exception for using eval to parse the input as a literal. \$\endgroup\$ – user81655 Jan 10 '16 at 2:47
0
\$\begingroup\$

Find my way

I wanted to propose a challenge that is code golf (shortest answer wins), but with more programming challenge than parsing and printing funky text. Let's see if it sticks.

You are given a maze map, such as this:

#################################################
##########                    ######  ##### 1 ###
####   ##   ######  ########  #####     ####  ###
##   ###   #######  ########   ######  ###    ###
## X  ##  ########  #####      ####   #####  ##  
#                      ##      ##    ##      ##  
###################   ####   #####   #   ##  ##  
###   #############  #####   ######  #  ##   ####
##   ###             ##      ##    ##   ##     ##
#   ##      ####     ##  #   #   #      ###    ##
#  ####              ##      #   #  #        ####
#   #####   ###    ####   #####  #  #############    
#  #####   #####  ####   ##  ##     #############
   ###             ##     #  #     ########      
   ##     ####    #####   ####     ########   ###
  ##     ###                ##        #####   ###
          #####################   #   #####      
#####       ##############  ##   ###    #########
##      #   ###     ######  ##    #   ###########
#########        #               ##########      
      ###   ###     ##   ##################      
      ###   ##########   ########################
#################################################

and you need to help the player 1 find the goal X. You can assume the following rules apply to the input map:

  • it is a n x m ASCII rectangle (i.e. n lines of m characters);
  • only the following characters are allowed: #, 1, X, (whitespace) and newline;
  • # represent walls (that can't be crossed), represent empty space (that can be crossed); you can go anywhere in the n x m rectangle but you can't leave it (it's not Pacman).

If the maze has a solution, you shall produce an output of the following form:

#################################################
##########DLLLLLLLLL          ######  ##### D ###
####   ## D ###### U########  #####     ####D ###
##   ### DL####### U########   ######  ###  D ###
## X  ## D######## U#####      ####   ##### D##  
#  ULLLLLL         UL  ##      ##    ##     D##  
################### U ####   #####   #   ## D##  
###   ############# U#####   ######  #  ##  D####
##   ###  RRRRRRRRRRU##      ##    ##   ##  D  ##
#   ##    U ####     ##  #   #   #DLLLL ### D  ##
#  ####   U          ##      #   #D # ULLLLLL####
#   ##### U ###    ####   #####  #D #############    
#  #####RRU#####  ####   ##  ##  DL #############
   ###  U          ##     #  #  DL ########      
   ##   U ####    #####   ####DLL  ########   ###
  ##RRRRU###                ##RRD     #####   ###
    ULLLLL##################### D #   #####      
#####    U  ##############  ##  D###    #########
##      #U  ### DLL ######  ##DLL #   ###########
#########ULLLLLLL#ULLLLLLLLLLLL  ##########      
      ###   ###     ##   ##################      
      ###   ##########   ########################
#################################################

where:

  • the letters U, R, D and L represent movements by 1 character to the, respectively, up, right, down and left;
  • the letter chain represent a valid path from the original 1 (which has been replaced by a direction character) and X.

If the maze has no solution, you should return void, NULL or anything equivalent.

Final rules:

  • this is code golf, so the shortest solution wins;
  • typical code-golf rules for input and output apply.
\$\endgroup\$
  • \$\begingroup\$ This is near enough to codegolf.stackexchange.com/questions/42707/can-maze-be-solved that I'd call it a duplicate \$\endgroup\$ – quintopia Jan 9 '16 at 18:18
  • \$\begingroup\$ Your solution is odd: It is not the shortest path. \$\endgroup\$ – Nathan Merrill Jan 10 '16 at 12:54
  • \$\begingroup\$ @NathanMerrill: that was to illustrate that producing an optimal solution wasn't required \$\endgroup\$ – Alexandre Halm Jan 10 '16 at 12:59
  • \$\begingroup\$ @quintopia: the example you mention can be solved with a basic flood-fill. Returning a valid path is slightly more complicated in terms of algorithm and vastly more complicated in terms of generating the output (but it's also more pleasant to look at). \$\endgroup\$ – Alexandre Halm Jan 11 '16 at 16:04
  • \$\begingroup\$ @AlexandreHalm I misread. I thought yours was to output a truthy also. (However, yours can be solved with a flood fill also, with only a small amount extra effort to remove the blocked paths.) \$\endgroup\$ – quintopia Jan 11 '16 at 16:14
  • \$\begingroup\$ @AlexandreHalm Speaking of which: what of mazes with multiple solutions? Since you do not require a path to be the shortest, would an output that includes all possible paths be valid? \$\endgroup\$ – quintopia Jan 11 '16 at 16:15
  • \$\begingroup\$ I'm not sure enumerating multiple possible solutions would be interesting. I could require to produce the shortest path, which would make it more challenging (but even then you're not guaranteed to have a unique optimal solution). Then, unless you're willing to try some super-exponential search, you'd have to implement something like A* \$\endgroup\$ – Alexandre Halm Jan 11 '16 at 16:36
  • \$\begingroup\$ To find any valid path requires something like backtracking algorithm. That could take a long time on any decent size maze (doing it double ended would help somewhat.) I think asking for the shortest possible is too much, unless the mazes are kept extremely simple. So I think it's more interesting as it is. But you should include wording similar to your reply to Nathan Merrill in the challenge text. Note that your text "shortest solution wins" is ambiguous (could be misinterepreted as shortest path through maze) and would be best changed to "shortest code wins." \$\endgroup\$ – Level River St Jan 15 '16 at 2:03
0
\$\begingroup\$

Iterating through Doubles

This challenge is relatively simple: You are passed two floating point numbers, a and b; you must print every floating point in between in order.

  • I don't care if your output includes a or b. You can choose to include/exclude them if you wish. For my examples, I will include a, but exclude b.
  • You can assume that a <= b
  • You should use IEEE 754 floating point numbers. As to the format of the numbers, I do not care, though I will be using binary32 in my examples.
  • Your program must not print any NaNs, infinities, or print out the same number twice. -0 is the same as 0.
  • Ifa or b cannot be perfectly represented in floating point, you must round-to-nearest them (standard for most languages). You can assume that a and b won't round to infinity.
  • Your program must have a runtime of O(N), where N is the total number of floating point numbers in between a and b.
  • Your program must not use more than O(1) storage. The only exception to this is for storing your output before printing it all.
  • Builtins that are able to generate floats in order are not allowed (such as Julia's nextfloat())

For the following examples, I have used this webpage to generate the numbers, and thus my examples may have human errors.

-5.6E-45, 5.6E-45
-5.6E-45, -4.2E-45, -2.8E-45, -1.4E-45, 0, 1.4E-45, 2.8E-45, 4.2E-45

-0, 0
No output, though printing either 0 or -0 would be allowed (but not both)

299.9998, 300.0002
299.9998, 299.99982, 299.99985, 299.99988, 299.9999, 299.99994, 299.99997, 300, 300.00003, 300.00006, 300.0001, 300.00012, 300.00015, 300.00018, 300.0002

1.9999998, 2.000001
1.9999998, 1.9999999, 2, 2.0000002, 2.0000005, 2.0000007, 2.000001

-3.4028235E38, -3.402822E38
-3.4028235E38, -3.4028233E38, -3.402823E38, -3.402829E38, -3.4028227E38, -3.4028225E38, -3.4028222E38

3.4028229E38, 3.4028235E38
3.4028229E38, 3.402823E38, 3.4028233E38, 3.4028235E38
\$\endgroup\$
  • 1
    \$\begingroup\$ 1. The header says doubles, but the question talks about binary32. Which of the various sizes permitted by IEEE 754 may be used? 2. More seriously, this is just a loop round an abuse of pointers (in C) or a library function to convert a bit-pattern from int to float (in pretty much any other language which supports IEEE 754). It doesn't offer much scope for creativity. \$\endgroup\$ – Peter Taylor Jan 10 '16 at 19:29
  • \$\begingroup\$ @PeterTaylor I was hoping to find some cases of duplicated numbers, but I haven't found any. I realized that this was because the radix I'm using is 2. Would it be interesting if I enforced a radix of 10? Not every language has floating points like that (Decimal in C# is the only one I know of), so I'm not sure how relevant this challenge would be. \$\endgroup\$ – Nathan Merrill Jan 10 '16 at 21:26
  • \$\begingroup\$ Sorry, I'm lost. Duplicated numbers? \$\endgroup\$ – Peter Taylor Jan 10 '16 at 21:41
0
\$\begingroup\$

Coaxial and Copolar?

Introduction

SANDBOX NOTE: Diagrams soon

Copolar: Two triangles ABC and A'B'C' (not necessarily in the same plane) are said to be copolar if and only if the lines AA', BB', and CC' are concurrent at one point V.

Coaxial: Supoose two triangles ABC and A'B'C' are defined such that AB and A'B' intersect at X, AC and A'C' intersect at Y, and BC and B'C' intersect at Z. Then, the two triangles ABC and A'B'C' are said to be Coaxial if and only if X, Y, and Z are collinear.

Desargue's Theorem: Copolar triangles are coaxial, and conversely.

The Challenge

Your challenge is to write two entire programs (but not necessarily in the same language, if you so desire) which detect whether or not two triangles are Coaxial/Copolar. One program must detect the existence of V, and the other must check the collinearity of X, Y, and Z (As defined above). You should provide some explanation or proof that your two programs perform these two different checks. Your score in this challenge is the Levenshtein distance between the two programs, with lowest score being dubbed winner.

Input

You will receive 6 vectors, all of which containing an x, y, and z floating-point Cartesian coordinate, to represent the vertices of ABC and A'B'C'. This information may be received by your program in any convenient format, including command line arguments, nested lists, etc. The two programs you submit should take input in the same manner.

Output

Your program should print a truthy value if ABC and A'B'C' are coaxial/copolar, and a falsey value otherwise. As this will likely require floating-point calculations, we establish some leniency:

Choose a constant value 0 < ERR < 0.01, for use in both programs.

  • If the pairwise intersections of AA', BB', and CC' intersect within ERR units of one another, the given triangles should be considered copolar.

  • If the point Z lies closer than ERR distance from the line XY, the given triangles should be considered coaxial.

Standard techniques for checking floating point calculation equality should be sufficiently accurate for this challenge.

Since copolar triangles are also coaxial, the programs should output the same value in all but extreme cases.

It should be assumed that any cross section of the cartesian space provided is an Extended Euclidean Plane. Note that it is possible that the vertex V or any of X, Y, and Z may be an ideal point, and this is a case that should be prepared for.

Test cases

SANDBOX NOTE: Coming soon...

\$\endgroup\$
  • \$\begingroup\$ Levenshtein distance between two programs has been tried before and is now well-known to be completely useless as a winning criterion. Anyone with half a brain can score 1, and sometimes it's even possible to vary the input enough to detect the cases and score 0. \$\endgroup\$ – Peter Taylor Jan 11 '16 at 11:09
0
\$\begingroup\$

Cookies are being served! Sibling rivalry ensues! Each of the twins wants the maximum quantity of cookie. The problem is that the cookies are of somewhat different sizes, not surprising since they are home baked. So you weigh each of the cookies and devise a program to help you allocate them to each twin such that the difference in total weight of the cookies each twin gets is minimized. Coding up the program is your task today!

Input

Each case is described on a single line that begins with the number of cookies (no more than 100) followed by the weight of each (in integer grams, no more than 1000 grams).

Output

For each case, display the minimum total weight difference.

Sample Input

5 6 8 5 2 6

2 25 62

Sample Output

1

37


I asked this earlier and it was put on hold. Not sure what needs to be changed.

\$\endgroup\$
  • 1
    \$\begingroup\$ First you need a winning criterion. Code golf (shortest valid code wins) would work well here. Another possibility would be fastest code, but that would be harder to judge - you'd probably need to run every answer on your machine, in a number of different languages. Popularity contest is hard to write a good question for, and is best saved for questions where there is no other way of judging. If you don't have a strong preference, I'd go with code golf. \$\endgroup\$ – trichoplax Jan 11 '16 at 3:37
  • 1
    \$\begingroup\$ An edge case to consider: Will the input ever be just 0 followed by no cookies? Whichever way you decide, it's worth mentioning this explicitly in the question so people know whether to plan for that. \$\endgroup\$ – trichoplax Jan 11 '16 at 3:42
  • 1
    \$\begingroup\$ You had asked for the total weight of cookies to be minimized, which I suspect was not what you intended, so I've edited it to ask instead for the difference in total weight to be minimized. If this wasn't what you intended feel free to roll back the edit. \$\endgroup\$ – trichoplax Jan 11 '16 at 3:47
  • 1
    \$\begingroup\$ That clears it up a lot, thank-you, @trichoplax \$\endgroup\$ – Tanner Jan 11 '16 at 3:54
  • \$\begingroup\$ You're welcome. You'll still need to do some further editing to address my first 2 comments, then after that hopefully others will comment with anything else that needs improving that I've missed. \$\endgroup\$ – trichoplax Jan 11 '16 at 4:50
  • \$\begingroup\$ This is a trivial variant of this older question and IMO close enough to count as a dupe. \$\endgroup\$ – Peter Taylor Jan 11 '16 at 11:07
  • \$\begingroup\$ I believe the question was closed as a duplicate of this because it's exactly the same, just about cookies instead of shopping bags. \$\endgroup\$ – user81655 Jan 15 '16 at 10:54
0
\$\begingroup\$

Count the ones!(better title needed)

[Sandbox-note: Is this really still code-golf?]

[Sandbox note: Need to find descriptive tags]

Void Corp needs you!

Thanks to extreme advancements in a technology called null-space we are able to compress any number of 0-bits into just one memory block. The problem is that storing 1-bits is extremely expensive now. To evaluate which data we should keep we need a program that count all 1-bits in a string. Sadly our programmer is currently in forced vacation after a caffeine-incident, so it is up to you now to help us out.

Your code should contain as few 1-bits as possible when stored in null-space.

We have heard of this strange Unary. As our programmer is the only one able to understand it, we are currently not able to implement it.

Task

Write a program that counts all 1-bits in a given string.

You may provide a function or fully functional program. Input will be provided via STDIN or argument and should be printed to STDOUT or returned.

Your answer must be in an existing language, especially the interpreter must already exist. No retro-active coding of a language that consists entirely of NUL (unless I missed it). [Sandbox note: Don't tell me there is such a thing.]

Scoring

Count the 1-bits in your code. Fewest amount wins.

[Sandbox note: Should add script to paste code into for evaluation]

Sandbox Questions

What do you think of the task? It seems pretty basic to me, the twist is the Scoring.

What do you think of the scoring? I want to encourage usage of obscure/lengthy commands which are normally not used in CodeGolf. Your opinion?

Does someone happen to have a script for evaluation lying around? Do you have anything to add?

Is appropriate for this question?

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

Fixed Width

Related.

We like fixed width. We want you to evaluate a string
on it's "fixed width"-ness. However, this string will
not be a regular string. This input will be presented
to your code as thus: "name1, name2, lin1,..., linN".

Each of linK is a single line of a transcript; you'll
assume that the speakers alternate, and that each lin
is will not have trailing whitespace, like this:     

You may take input in the form of a function or a program, as a string with commas, a list, or a series of arguments.

Say your input is rob, emily, hi, hey you, last night was nice, the best i've had. Then, the result would be:

<rob> hi
<emily> hey you
<rob> last night was nice
<emily> the best i've had

Then, this input would have a "fixed width"-ness of 2. This is what you would return/print. That is, you are to output the length of the longest run of fixed width messages.

Test cases

input => output

rob, emily, hi, hey you, last night was nice, the best i've had => 2
a, b, hello, hola!, no, what?, why, why not, abcdef, fededa, 012345 => 3

I think this should be , but I think this could also work as a fixed-width , maybe.

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

Hexotria number

Inspired by Triangular Ulam spiral

For instance we write number in triagular spiralling way

      30  10  26  51
    31  11  09  25  50
  32  12  01  08  24  49
33  13  02  00  07  23  48
  14  03  04  05  06  22
    16  17  18  19  20
      39  40  41  42

Then we read in spiralling hexagonal way (Starting from 0, 1 ,2) then we get

0, 1, 2, 4, 5, 7, 8, 9, 11, 12, 13, 3, 17, 18, 19, 6, 23, 24, 25, 26, 10, 30, 31, 32, 33, 14, 16, 39, 40, 41, 42, 20, 22, 48, 49, 50, 51

Your challenge is given a number (i) output the i'th item in that sequence. i is zero based. Shortest code wins.

\$\endgroup\$
  • 1
    \$\begingroup\$ meta.codegolf.stackexchange.com/a/8048/8478 \$\endgroup\$ – Martin Ender Jan 15 '16 at 15:00
  • 1
    \$\begingroup\$ Otherwise, this sounds like a nice challenge :). You should specify whether i is 0-based or 1-based or whether people can choose. \$\endgroup\$ – Martin Ender Jan 15 '16 at 15:01
  • \$\begingroup\$ @MartinBüttner Now, what's missing in this challenge? \$\endgroup\$ – Akangka Jan 17 '16 at 0:26
0
\$\begingroup\$

The quitting log-in

This program relies on the user pressing Ctrl + C at specified times to show him the secret message (the secret message is just m to avoid polluting the byte count with un-avoidable chars).

Given a 3 digit enter code that may be specified anywhere (just give directions to find it inside your source code) let the user see the message if he quits at the n-th (1-indexed, zero may never be present in the pass-code) ? each time.

The user should press Enter to get to the next question.

If the user does not press <Control-C>, nine successive prompts should be shown.

Given a code 523

?
?
?
?
? <Control-C>
?
? <Control-C>
?
?
? <Control-C>
m

Given a code 123

?
?
? <Control-C>
? <Control-C>
? <Control-C>
\$\endgroup\$
  • \$\begingroup\$ Instead of m you could make the program output something truthy or falsy depending on whether the pattern is correct. Also do you want to specifically make this a challenge about catching process signals? Because that will rule out a lot of languages, and if it's not your intention you could also have the user enter a specific string instead of having them send Ctrl+C. \$\endgroup\$ – Martin Ender Jan 19 '16 at 20:02
  • \$\begingroup\$ @MartinBüttner I actually want to make this a challange about handling KeyboardInterrupt because I have never seen it in a code-golf challange, as far as m vs truthy falsy is concerned, it is just a matter of r?'m':'' now, and the message may in theory be a long string, one char just to avoid cluttering the code up \$\endgroup\$ – Caridorc Jan 19 '16 at 20:35
  • \$\begingroup\$ There's at least codegolf.stackexchange.com/q/63105/8478 but I feel like we've had another one, too. \$\endgroup\$ – Martin Ender Jan 19 '16 at 20:52
0
\$\begingroup\$

Queuing queues

I recently found a great site, Dubtrack, for all my music needs. However, it features a very interesting method of ordering, which contains a queue of users, and each user has their own personal queue.

The user queue loops through each of the users that have songs, and plays the top song from their individual queue. This means that:

  1. When there is a single user, it simply plays the songs in the order that user added them.
  2. When there are multiple users, it interleaves the songs.

However, users' queues aren't always filled, and when a user adds his first song to the queue, the user is added to the end of the user queue.

For example, say there were 3 users each with the following queues (at time 0):

0 [1,10,100,1000]
0 [2,20]
0 [3,30,300]

then the resulting playlist would look like:

[1, 2, 3, 10, 20, 30, 100, 300, 1000]

However, if a user were to add his queue during the 4th song:

0 [1,10,100,1000]
0 [2,20]
0 [3,30,300]
3 [4,40,400,4000]

Then the playlist would look like

                      v New user's song finally plays
[1, 2, 3, 10, 20, 30, 4, 100, 300, 400, 1000, 400, 4000]
          ^ New user added here, but user 2 and 3 are still in front

Your challenge is to take a list of queues and join times, and return them in single playlist. You are guaranteed that there will be at least 1 queue at time 0, and that additional users won't be added after all the songs have played.

Test cases

Input
0 [1,5,3,7,2,6,3]
Output
[1,5,3,7,2,6,3]

Input
1 [3,6,9,12]
0 [4,10]
Output
[4,10,3,6,9,12]

Input    
0 [1,10,100,1000]
0 [2,20]
0 [3,30,300]
3 [4,40,400,4000]
Output
[1,2,3,10,20,30,4,100,300,400,1000,400,4000]

Input
11 [3000]
3 [6,8,10,11,0]
5 [4,100,14,12,0]
0 [0,1,2,3,4,5]
11 [2000]
Output
[0,1,2,3,6,4,8,4,5,10,100,11,14,3000,2000,0,12,0]
\$\endgroup\$
  • \$\begingroup\$ I'm not sure I understand how the queue system works. You say "when a user adds his first song to the queue, the song is placed at the end of the interleaving process", but in the second example, song 4 is placed before song 21, not at the end of the existing queue. Maybe I'm misunderstanding what you mean by "a queue". \$\endgroup\$ – Zgarb Jan 20 '16 at 19:43
  • \$\begingroup\$ @Zgarb I made a few changes: There is a queue of "users" and each user has their own individual queue. I've also termed the output as a "playlist". Do you understand now? \$\endgroup\$ – Nathan Merrill Jan 20 '16 at 20:07
  • \$\begingroup\$ It's much better now, yes. But just to be clear, when a song is popped from a user's personal queue to be played, that user is effectively sent to the bottom of the user queue, right? \$\endgroup\$ – Zgarb Jan 20 '16 at 20:16
  • \$\begingroup\$ Yep, that's how it works. \$\endgroup\$ – Nathan Merrill Jan 20 '16 at 20:17
  • \$\begingroup\$ What assumptions can be made about the song IDs? Are they guaranteed to be non-negative integers between e.g. 0 (inclusive) and 2^31 (exclusive)? Can answers choose between that or strings? Something else? \$\endgroup\$ – Peter Taylor Jan 23 '16 at 19:04
  • \$\begingroup\$ Both of those sound like good options. \$\endgroup\$ – Nathan Merrill Jan 23 '16 at 19:42
0
\$\begingroup\$

Natural Language Calculator

Background

You are working at Wolfram Alpha, when a big fire occurs, wiping out much of the hardware infrastructure, losing much of the code. Now you are assigned to the natural language team working on writing new code for converting natural language to mathematical expressions to be evaluated. You must parse the following commands and even do mixed commands!

Challenge

The input will be a string, obviously. For multiple operations, there will be commands within input of commands.

Pi and e are simply inputted as "pi" and "e". Other special numbers are not needed to be handled.

Parse the following commands:

  • Add x and y
  • Subtract x and y
  • Multiply x and y
  • Divide x and y
  • Factorial of x
  • x factorial
  • Exponent base n of x
  • Log base n of x
  • Natural log of x

You must deal with it case-insensitively. For example "5 Factorial" gives the same result ad "5 factorial" or "5 FAcTorial".

Testcases

> "Add 4 and 5"
9
> "Multiply 6 and 10"
60
> "Divide 144 and 12"
12
> Exponent base 10 of 3
1000
> 3 factorial
6
> 3
> Add 5 factorial and 2
122
> Exponent base e of natural log of e
e
> natural log of e
1
\$\endgroup\$
  • \$\begingroup\$ -1 Unclear challenge. \$\endgroup\$ – Akangka Jan 16 '16 at 9:11
  • 2
    \$\begingroup\$ @ChristianIrwan "Still in the works and need to add more detail" \$\endgroup\$ – TanMath Jan 16 '16 at 9:32
  • \$\begingroup\$ Well, I think the sandbox is not for brainwashing idea, but to polish the challenge while detecting it if the challenge is duplicate. \$\endgroup\$ – Akangka Jan 16 '16 at 13:57
  • \$\begingroup\$ The sad thing is, most of these are actually things in AppleScript already. Shame that there's no eval for i- oh, wait, there's a library for that in Java. \$\endgroup\$ – Addison Crump Jan 22 '16 at 23:13
  • 2
    \$\begingroup\$ Even if this were cleaned up, I don't see what it adds to the many existing "process arithmetic in english" challenges. \$\endgroup\$ – xnor Jan 22 '16 at 23:36
0
\$\begingroup\$

Semaphore Decoder

You are to write a program which can decode ASCII semaphores. Each semaphore fits in a 3x2 grid, with the flagger's head represented by a o (which is always in the upper middle square), and his flags represented by _ | / \. Each block is separated by one blank column. Text may continue onto additional lines if it gets too long. The letters look like the following format:

[Space]  o   A  o  B _o  C \o  D |o  E o/  F o_  G o   H _o  I \o  J |o_
        | |    /|     |     |     |    |     |     |\    /      /       

K  o|  L  o/  M  o_  N  o   O _o\  P _o|  Q _o/  R _o_  S _o   T \o|
  /      /      /      / \                                  \

U \o/   V |o   W /o_  X o/  Y \o_  Z o_
            \           \             \

To keep your messages from being observed by spies, your code must be as short as possible.

Example:

Input

_o| _o_ _o\  o   o   o_  o_ \o   o   o   o  _o| \o/  o_  o_  o/  o/ _o   o
             |\ /|  /   /    /  / \  |\ | |           \   \ /    |    \ | |
 o   o  |o   o  \o  _o\ |o   o/  o   o   o/ _o\  o/  o_
/|  / \  |  | |  |       |   |  | |  |\ /       /    |

Output

PROGRAMMING PUZZLES AND CODE GOLF
\$\endgroup\$
  • \$\begingroup\$ Essentially the opposite of this encoder -- codegolf.stackexchange.com/q/3628/42963 \$\endgroup\$ – AdmBorkBork Jan 25 '16 at 21:06
  • \$\begingroup\$ @TimmyD - I saw that. In fact I deliberately chose a different format (3x2 instead of 3x3) so that you couldn't just use the same code in reverse. I think the bonuses will also make this a bit more interesting, since some signals have multiple meanings, and you need to keep a stack to handle the Error code. \$\endgroup\$ – Darrel Hoffman Jan 25 '16 at 21:14
  • 2
    \$\begingroup\$ -1 for bonuses \$\endgroup\$ – Mego Jan 26 '16 at 8:42
  • \$\begingroup\$ @Mego - Is it the idea of bonuses that offends you? Or is the scoring just not balanced? I think the bonuses are what make this challenge the most interesting. Would it help if I were to make them requirements instead? \$\endgroup\$ – Darrel Hoffman Jan 26 '16 at 14:35
  • 1
    \$\begingroup\$ @DarrelHoffman The linked post explains fairly well why I am strongly against bonuses. The biggest issue I have is that n bonuses require people to solve the problem 2^n different ways, and look for the best score. The bonuses add unneede complexity, and detract from the actual challenge. \$\endgroup\$ – Mego Jan 26 '16 at 20:31
  • 3
    \$\begingroup\$ If you think the bonuses make it more interesting, make them requirements. \$\endgroup\$ – Peter Taylor Jan 26 '16 at 21:37
  • \$\begingroup\$ What I don't get is - I've seen dozens of challenges that had one or more bonuses, and I've never seen a complaint about them until now. I guess I could see how it affects some languages more than others, but it's not like there's actual prize-money going out for these things. It's more just a matter of having fun and practicing code-fu. I'm just afraid that having those bonuses as a requirement might scare off some people from even trying. But without them - is this even much of a challenge for the veterans out there? \$\endgroup\$ – Darrel Hoffman Jan 26 '16 at 21:56
  • 1
    \$\begingroup\$ @DarrelHoffman Bonuses on challenges used to be rarer. Then people started putting bonuses on everything, with severely detracted from challenge quality. So, in response, the community decided (in the post I linked) that bonuses shouldn't be used unless you have a really strong justification for including them. 9 times out of 10, the challenge would be vastly improved by making them requirements or discarding them outright. \$\endgroup\$ – Mego Jan 27 '16 at 1:53
0
\$\begingroup\$

How many swaps do I need to sort a list?

A swap is defined as an operation on a list that exchanges the position of exactly two elements:

[9, 1, 3, 4, 0, 0, 3, 7, 9, 1, 4, 4, 8, 7, 3, 9, 4, 7, 0, 1]
       | <----------------> |
[9, 1, 1, 4, 0, 0, 3, 7, 9, 3, 4, 4, 8, 7, 3, 9, 4, 7, 0, 1]

Of course, every list can be sorted via some sequence of swaps (e.g. that's how Shell sort works).

Given a list of single-digit integers, determine the minimum number of swaps you need to sort the list.

You may write a program or function, taking input via STDIN (or closest alternative), command-line argument or function argument and outputting the result via STDOUT (or closest alternative), function return value or function (out) parameter.

Input may be in any convenient, flat list format, as long as the data is not preprocessed.

Standard rules apply.

Test Cases

(will follow)

Sandbox Questions

  • If the list elements are distinct, this is simply: a) determine ordering, b) treat ordering as permutation and decompose into cycles, c) subtract one from each cycle's length and sum the results. (Which would make this a duplicate.) Off the top of my head, I can't think of a similarly simple algorithm when duplicates are allowed. Can anyone else?
\$\endgroup\$
  • \$\begingroup\$ Bubble sort only swaps adjacent pairs and that's much easier to calculate (at least for distinct elements) - all you need do is to consider each distinct pair of elements and count how many pairs are out of order. \$\endgroup\$ – Neil Jan 29 '16 at 8:37
  • \$\begingroup\$ @Neil Of course. But if you can sort a list via swaps of adjacent elements, you can also sort it via swaps of arbitrary elements. \$\endgroup\$ – Martin Ender Jan 29 '16 at 8:42
  • \$\begingroup\$ I just didn't think it was the best, um, sort of sort to use to demonstrate the idea. \$\endgroup\$ – Neil Jan 29 '16 at 8:49
  • \$\begingroup\$ @Neil fixed? :) \$\endgroup\$ – Martin Ender Jan 29 '16 at 9:11
  • \$\begingroup\$ Now that's what I call an excellent sort of sort to demonstrate the idea! \$\endgroup\$ – Neil Jan 29 '16 at 13:42
  • \$\begingroup\$ Oddly enough I was thinking of a challenge very much like this. \$\endgroup\$ – J Atkin Jan 29 '16 at 14:48
0
\$\begingroup\$

Employee Scheduler

This challenge is simple: make a schedule for the student workers in my department!

Student workers have to regularly update their availability to accommodate class changes every semester, and the number of student workers we have employed constantly varies. Also, student workers are not allowed to work more than 20 hours a week. Meanwhile, there are several stations that need to be manned throughout the work day.

Required Minimums:

Your program should at least be able to do the following:

  1. Input a list of first names and times of availability
  2. Output a one month schedule that covers 4 stations 5 days a week from 800 to 1700

If there is a gap of time that cannot be filled based on the availability given, you should fill that gap with an obvious name like "NEEDED" or something like that. Note that the times of availability will depend on the day of the week.

Your program does need to able to at least run in Windows. Also, your program absolutely may not schedule workers more than 20 hours in a week.

You may assume that all student workers have been trained in all stations, so anybody can work anywhere. You also may assume that the month for which you should generate a schedule is following month (so if it is January, make a schedule for February).

Other Notes:

You'll notice I'm not specifying an IO method you must use. I trust you as a coder to pick a method that suits your program, just keep in mind this is a popularity contest and ease of use is an inevitable factor. Also, you may use 12 or 24 hour time at your discretion. Please list both the method of IO and 12 or 24 hour time in your description.

Some things that I'm not requiring, but would definitely earn some kudos from me:

  • Use a station priority system when creating the schedule (some stations should be covered before others)
  • Try to maximize the hours given to each student (while not going over 20 hours per week, of course)
  • Minimize overlap
  • Make your output pretty (currently we use an excel spreadsheet that looks pretty nice)
  • Input the number of stations
  • Input the month for which to generate
  • Generate multiple months (using the same availability)
  • Input holidays and days the department is closed
  • Make your program run on both Windows and OS X
  • Golf your program

Examples

INPUT:

Jack    m:0900-1530 t:0800-1530 w:0900-1200 th:0800-1530 f:0900-1700
John    m:0000-0000 t:1300-1700 w:0900-1200 th:1300-1700 f:1000-1200
Joseph  m:0800-1000 t:1300-1700 w:0000-0000 th:1300-1700 f:0800-1000
Jannett m:1430-1700 t:0000-0000 w:1200-1700 th:1100-1400 f:1200-1700
Brianna m:0900-1430 t:0800-1300 w:0900-1430 th:0000-0000 f:1200-1700
Dianne  m:0800-0900 t:1300-1700 w:0000-0000 th:1300-1700 f:0800-1000
Megan   m:1400-1545 t:1100-1700 w:1400-1545 th:1100-1700 f:0000-0000
Sierra  m:1600-1700 t:0800-1100 w:0900-1300 th:0000-0000 f:0800-1300
Sandy   m:1345-1700 t:0800-1045 w:1345-1700 th:0800-1045 f:1200-1700
Holly   m:0800-1200 t:0800-1200 w:0000-0000 th:0800-1200 f:0800-1200

OUTPUT:

Monday              Tuesday          Wednesday        Thursday        Friday

STA 1               STA 1            STA 1            STA 1           STA 1
Joseph 8-10         Holly 8-1130     Brianna 9-1430   Jack 8-11       Joseph 8-10
Jack 10-1430        Brianna 1130-13  Jannett 1430-17  Megan 11-17     Holly 10-12
Jannett 1430-1700   Joseph 13-17                                      Desiree 12-17

STA 2               STA 2            STA 2            STA 2           STA 2
Riane 8-9           Sierra 8-11      John 9-12        Holly 8-11      Sierra 8-1
Brianna 9-1430      Megan 11-17      NEEDED 12-1430   Jannett 11-2    Brianna 13-17
Megan 1430-1545                      Megan 1430-1545  Joseph 14-17    
NEEDED 1545-16                       NEEDED 1545-17
Sierra 16-17

STA 3               STA 3            STA 3            STA 3           STA 3
Holly 8-12          Sierra 8-1045    Holly 8-12       Sierra 8-1045   Riane 8-10
NEEDED 12-1345      NEEDED 11-13     Sierra 12-1      Jack 11-1       Tyler 10-12
Sandy 1345-17       Riane 13-17      NEEDED 13-1345   Riane 13-17     Sandy 12-17
                                     Sandy 1345-17

STA 4               STA 4            STA 4            STA 4           STA 4
NEEDED 8-9          NEEDED 8-13      NEEDED 8-9       NEEDED 8-13     NEEDED 8-9
Jack 9-10           John 13-17       Jack 9-12        John 13-17      Jack 9-14
NEEDED 10-1430                       NEEDED 12-17                     NEEDED 14-17
Jack 1430-1530
NEEDED 1530-17

As you can see, in this case the input 0000-0000 means that person is not available on that day of the week.

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

Monophonic Pitch Detection

Tags:

Sandbox Notes

  • Still in progress. I haven't made any of the test cases or snippets yet.
  • This is intended to be an easier and more accessible alternative to Polyphonic Pitch Detection.
  • Would this still be a duplicate of the polyphonic version? Solutions could "work" in both challenges, but algorithms that work for this one would perform extremely poorly (typically monophonic algorithms fail outright with multiple waveforms and produce a completely incorrect frequency) for the other.

Take an array of samples, and output the frequency of the waveform found in the samples.


You will receive a list of samples as signed 16-bit integers at a fixed sample-rate of 44100 samples-per-second. Each input will only contain one waveform in the range of 100hz to 2000hz.

You must output the frequency detected (in hertz) with up to 2 decimal places of precision.

Test Cases

Each test case is on it's own line. Each line begins with the name of the test case, followed by a semi-colon (;), then the frequency present in the test case (with 2 decimal places of precision), followed by another semi-colon, then the samples separated by commas:

Test Case Name;123.45;3,75,1234,56789,4321,-23,-408,-9266,41,0,etc...

(link to test case file, will include synthesized waveforms, real instrument sounds, added noise, different pitches)

Scoring

The score of a submission is a percentage based on how close the submission's results are to the actual frequency of each test case. Specifically it will calculated using the formula in the snippet below (use this to calculate your score):

(snippet for calculating score)

Rules

  • No built-ins that detect pitch or extract waveform frequencies are allowed.
  • Helper functions that are designed to aid frequency analysis like FFT are permitted.
  • You may optimise your solution for the test cases, but you cannot hard-code the results for these specific test cases.

Play Samples

You can hear what a list of samples sounds like by pasting it into this snippet:

(snippet for playing sample strings or sine waves using web audio)

Links

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

Letter subsets

Consider two letters, L1 and L2. L1 is a solid subset of L2 if and only if all of the lines can be placed on L2 without rotating or breaking L1 or marring the image of L2; this is L1 s.s. L2, symbolically. For example, I s.s. T because you can place the line of I on T without a difference, and C s.s. O for the same reason. Here are all the letters (L1, L2) for which L1 s.s. L2 and L1 ≠ L2:

L1  L2
F   E
C   O
I   T
I   L
O   Q

Two letters L3 and L4 share the relation of variant subset (i.e. L3 is a variant subset of L4, or L3 v.s. L4) if and only if some rotation of L3 exists where L3 s.s. L4. Here are all the letters (L3, L4) for which L3 v.s. L4 and L3 ≠ L4:

L3  L4
F   E
C   O
I   T
I   L
O   Q
V   A
I   H
H   I
I   N
I   M
I   B
I   V
I   X
I   Z
I   P
I   E
I   W
I   R
I   K
I   F
I   D
N   Z
Z   N
T   H
G   Q

Specs

Your input will be two letters. You may take them as a string, two characters, or two numbers representing those characters, as arguments, read from STDIN, or from a file. With these two letters, you are to output their relation. You should favor s.s. over v.s. over nothing. Your output will be ss, vs, or nothing. Your program may do anything if the input is not a pair of uppercase letters. Your program should pass all of the above relations when given those letters as input.


~META~

Suggestions? Any letters in v.s. or s.s. I missed? Any you don't understand?

\$\endgroup\$
  • \$\begingroup\$ If I is a single vertical line (which it is in some fonts, but not all), why is it an s.s. of T and L but only a v.s. of B, D, E, F, H, K, M, N, P, R? (And in some fonts it might also be an s.s. of W). \$\endgroup\$ – Peter Taylor Feb 2 '16 at 12:45
  • \$\begingroup\$ @PeterTaylor I missed those, thanks. \$\endgroup\$ – Conor O'Brien Feb 2 '16 at 14:51
0
\$\begingroup\$

Reasoning

Introduction

Reasoning is one of the most important human capabilities, often counted as what separates us from other species. This capacity, however, takes up a substantial portion of our meaty brain. Your challenge is to recreate a reasoning system in a much abbreviated form.

Definitions

The challenge, is, given a universe of objects and n-ary relations and a set of facts and laws on the relations, to determine whether a hypothesis is a fact or not. The language in which these are expressed are drawn from the alphabet "012345789RC@ " under the following rules (in EBNF with an ad-hoc expansion).

  1. An unbound-variable is denoted by a sequence of digits denoting a non-negative integer. For example, 3 is a variable which we may read as "object 3".

    natural = non-zero-digit , { digit } ;

    unbound-variable = natural ;

  2. A bound-variable is denoted by a "@" followed by an unbound variable.

    bound-variable = "@" , unbound-variable ;

  3. A variable is either a bound-variable or an unbound-variable

    variable = bound-variable | unbound-variable ;

  4. A relation-identifier is denoted by a capital "R" followed by a single digit denoting its arity and then a natural number identifying it.

    relation-identifier(n : digit) = "R" , n , natural ;

  5. A relation is denoted by a relation identifier followed by a sequence of variables whose length matches its arity.

    relation = relation-identifier(a) , a * { " " , variable } ;

  6. A consequence is denoted by a capital "C" followed by two relations.

    consequence = "C" , relation , relation ;

  7. An expression is either a consequence or relation of that magnitude.

    expression = consequence | relation ;

The inference rules are the following:

  1. From C R R' and R (where R and R' are relations) to infer R'.

  2. From E to infer E{@m=p} where E{@m=p} is the expression E with all instances of bound-variable @m replaced by variable p.

The Challenge

You will be given a sequence of at least one expression, that will be provided as a newline separated strings on the stdin. The first of these will be a relation with no bound variables -- the hypothesis. The remaining expressions are the facts. Your program must indicate whether the hypothesis can be infered from the facts or not. It does this by printing any of the following strings to the stdout: "true" (case-insensitive), "+", "1", "yes". Any other input will be interpreted as claiming the hypothesis cannot be infered from the facts.

Test cases

>input:
R00
>expected output:
false|no|whatever

>input:
R00
R00
>expected output:
true

>input:
R10 0
R10 @1
>expected output:
true

>input:
R20 4 9
R20 9 4
CR20 9 4R20 4 9
>expected output:
true

>input: 
R2859 7 163
R2859 @0 163
>expected output:
true

>input:
R10 5
R10 1
CR10 1R10 2
CR10 2R10 3
CR10 3R10 4
CR10 4R10 5
>expected output:
true

>input:
R10 6
R10 1
CR10 1R10 2
CR10 2R10 3
CR10 3R10 4
CR10 4R10 5
>expected output:
false   

>input
R20 4 5
R20 9 6
CR20 6 @0R20 7 @0
CR20 @0 7R20 @0 4
CR20 @0 9R20 5 @0
CR20 @0 @1CR20 @1 @0
>expected output: 
true

>input
R20 4 5
R20 9 6
CR20 6 @0R20 7 @0
CR20 @0 7R20 @0 5
CR20 @0 9R20 5 @0
CR20 @0 @1CR20 @1 @0
>expected output: 
false

Grading

This is a golf competition, the fewest number of bytes wins. Other restrictions are TBD.

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

Determine if a given loan repayment schedule is a weekly or a daily schedule?

Problem scope

Its a real life problem which I recently fixed with >90% accuracy but wants to know if there can be near to 100% accurate result. Winner will be the one that can show using datasets that his solution will give minimal failures.

Problem Description

You are given a set of repayment schedules, some of which represents a daily repayment schedule and some represents a weekly repayment schedule. Each repayment schedule is in its own file and you need to segregate the repayment schedule files in 2 buckets, daily and weekly.

No repayment would be received on bank holidays which include weekends.

A weekly repayment schedule means that borrowers have agreed to make regular fixed repayments on a particular weekday every week. A Daily repayment schedule means that borrowers have agreed to make a fixed repayment on all working days till loan gets repaid fully.

Few Borrowers may do one of these besides doing regular repayments.

  1. Choose not to return on some scheduled repayment days.
  2. Choose to make only partial repayment on some scheduled/unscheduled repayment days.
  3. Choose to make extra repayment to catch up on previous payment or just doing prepayment.
  4. May skip making any payment for extended duration.

Off course, not everyone will do all, but in real life people sometimes are not able to make payments or sometimes do catch up or part payments. At the same time, most borrowers would stick to payment schedules for most of the time of the return duration.

A sample demonstrating above conditions from a daily repayment schedule could be as follows for a person not completely regular

Date Repayment amount

1-Feb-2016 500

2-Feb-2016 500

4-feb-2016 500

8-Feb-2016 400

10-Feb-2016 1000

10-Mar-2016 500

11-Mar-2016 500

A sample demonstrating above conditions from a weekly repayment schedule could be as follows for a borrower not completely regular

Date Repayment amount

1-Feb-2016 500

8-Feb-2016 500

17-feb-2016 500

22-Feb-2016 400

07-Mar-2016 1000

14-Mar-2016 500

11-Mar-2016 500

This real life problem is related to repayment schedule of low income borrowers where anomalies like above can be considered fair owing to their meager means. The sample above are only small part of the file, not the whole file.

I have clarified some doubts at https://codegolf.stackexchange.com/questions/71334/determine-if-a-given-loan-repayment-schedule-is-a-weekly-or-a-daily-schedule . Check those if possible.

\$\endgroup\$

You must log in to answer this question.

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