29
\$\begingroup\$

You need to make three things:

  1. Statement of a task, T.
  2. Solution of the task in language not typically used for golfing, A.
  3. Solution of the task in language typically used for golfing, B. Don't try to just bloat up B to pump up the score, instead think as if B was written by your competitor.

Use common sense in defining typically used for golfing, try to maximize fun for other users.

Other users may propose better Bs (maybe including in other "golfy" languages).

Scoring is (length_in_bytes(B)+5)/(length_in_bytes(A)+5), more is better. (Maybe the scoring formula should be changed?..)

The main idea is to invent a task where languages that typically perform well in codegolf meet a problem. It can be sudden strength of a usual language in the given task or sudden weakness of some golflang.

Avoid tasks that mention specific programming languages, like Input a string and execute it as a Scheme code.

\$\endgroup\$
15
  • 1
    \$\begingroup\$ I suppose that you make this a popularity-contest instead of a code-golf. Otherwise people will complain that it is not a "shortest-code-wins". \$\endgroup\$ Jan 17, 2014 at 19:36
  • \$\begingroup\$ OK, changing to popularity-contest. You can also suggest better title or better scoring. \$\endgroup\$
    – Vi.
    Jan 17, 2014 at 19:38
  • 1
    \$\begingroup\$ Do we get to specify lang B (as long as it is good at golfing)? Or can anyone say "here is a program in language <insert language name> and it has a very short solution of length <n>:"? \$\endgroup\$
    – Justin
    Jan 17, 2014 at 19:49
  • 1
    \$\begingroup\$ BTW some languages like Perl can be both on A side and on B side, depending on context. \$\endgroup\$
    – Vi.
    Jan 17, 2014 at 20:02
  • 1
    \$\begingroup\$ Why was this closed as off-topic? It seems to have an objective winning criterion to me? \$\endgroup\$ Apr 14, 2019 at 16:19

9 Answers 9

14
\$\begingroup\$

My previous question, Print a sinusoidal wave (vertically), qualifies at this moment. I'm posting it here as a solution, also hoping that you guys can come up with some shorter solutions to my original question.

As required by Vi., I will post a summary of the question.

Print a continuous sinusoidal wave scrolling vertically on a terminal. The program should not terminate and should continuously scroll down the wave (except until SIGINT). You may assume overflow is not a problem (i.e. you may use infinite loops with incrementing counters, or infinite recursion).

The wave should satisfy the following properties:

  • Amplitude = 20 chars (peak amplitude)
  • Period = 60 to 65 lines (inclusive)
  • The output should only consist of spaces, newline and |
  • After each line of output, pause for 50ms

There is a sample output on my original question, but I'm not posting it here, because this will make my answer ridiculously long. My original question can be seen here: Print a sinusoidal wave (vertically)

Shortest A currently: a Perl solution with 48 chars: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

Shortest B currently: a J solution with 54 chars: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Currently, the score of this answer is 1.113 (an awfully low score)

\$\endgroup\$
4
  • \$\begingroup\$ The current score according to current formula is approximately 1.113 \$\endgroup\$
    – Vi.
    Jan 17, 2014 at 19:54
  • \$\begingroup\$ @Vi. should I delete this answer or should I wait some time and see what happens? If the latter, how long should I wait? \$\endgroup\$
    – user12205
    Jan 17, 2014 at 20:23
  • \$\begingroup\$ The statement states bytes, not characters. Converted to UTL-8, the APL solution made 61 bytes (70 for UTF-16). \$\endgroup\$
    – Vi.
    Jan 17, 2014 at 20:26
  • 2
    \$\begingroup\$ You're claiming that Perl is not a language typically used for golfing, but it's the language which was first associated with the word golf! Ruby, at 56, looks like the real language A in the current answers to your questions. \$\endgroup\$ Jan 18, 2014 at 10:44
8
\$\begingroup\$

Add two numbers

Get two numbers from STDIN, and add them together. You have to support floating point numbers, so 0.5 + 1.5 has to equal 2.

Perl 5 (with -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~
\$\endgroup\$
7
  • \$\begingroup\$ Calculated score as (24+5)/(8+2+5) = 1.9(3). -E also counted as program bytes. \$\endgroup\$
    – Vi.
    Jan 18, 2014 at 13:15
  • \$\begingroup\$ The same comment as I made to ace: you're claiming that Perl is not a language typically used for golfing, but it's the language which was first associated with the word golf! \$\endgroup\$ Jan 18, 2014 at 13:55
  • \$\begingroup\$ And your GolfScript program doesn't work. A working program would be n%'+'*'"#{ }"'n/\*~ where the character between {} is a literal newline (not supported in comments). \$\endgroup\$ Jan 18, 2014 at 13:56
  • \$\begingroup\$ @PeterTaylor, Compared with GolfScript, Perl is a "usual" language; compared with Java, it's a "golf" language. \$\endgroup\$
    – Vi.
    Jan 18, 2014 at 14:33
  • 1
    \$\begingroup\$ The J for this isn't too bad, actually: +/".1!:1,~1. APL would probably be even smaller. \$\endgroup\$ Mar 25, 2014 at 23:55
8
\$\begingroup\$

Print 'Hello, World!' to the stdout.

PHP, 13 bytes

Hello, World!

Golfscript, 15 bytes

'Hello, World!'

Pyth, 14 bytes

"Hello, World!
\$\endgroup\$
4
  • 3
    \$\begingroup\$ Nicely topical. :) \$\endgroup\$ Aug 28, 2015 at 14:39
  • 2
    \$\begingroup\$ New B: In HQ9+ H \$\endgroup\$ Aug 28, 2015 at 15:31
  • 2
    \$\begingroup\$ But it's spelt incorrectly, @NotthatCharles \$\endgroup\$
    – galexite
    Aug 28, 2015 at 15:35
  • 1
    \$\begingroup\$ @georgeunix Good point. You capitalized your "W". \$\endgroup\$ Aug 28, 2015 at 15:52
7
\$\begingroup\$

Score 48/37 or 1.(297)

T: write a code snippet that ends the program after exactly one hour (as close as possible, like within a second) of running. Don't worry about exceptions, they can be unhandled.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: is for Befunge 98, requires the TIME fingerprint (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

This takes the Hour, Minute, and Second at the time of running, and puts the at cells 02, 01, and 00. Then, it skips over the ; to the second part. The second part works as follows:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

similarly for the Minute and Hour.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Note that Befunge will automatically go back to the beginning of the line when the end of a line is reached.


As we can see, Befunge is not good when it comes to waiting for specific times. However, Java is not bad.

\$\endgroup\$
17
  • 9
    \$\begingroup\$ APL: ⎕DL 3600 \$\endgroup\$
    – marinus
    Jan 17, 2014 at 21:54
  • 14
    \$\begingroup\$ Java usually reads as class Main{public static void main... \$\endgroup\$
    – Vi.
    Jan 17, 2014 at 22:00
  • 3
    \$\begingroup\$ @Vi. see "code snippet". Basically, it requires the code that actually does the work, not more than that. \$\endgroup\$
    – Justin
    Jan 17, 2014 at 22:01
  • 2
    \$\begingroup\$ I don't know Befunge, but the Java snippet doesn't "end the program" as required by the spec. That would require either a System.exit(0); or wrapping your sleep in a main method. \$\endgroup\$ Jan 18, 2014 at 9:40
  • 3
    \$\begingroup\$ @DoorknobofSnow Fails to compile: error: not a statement \$\endgroup\$
    – Bob
    Jan 18, 2014 at 14:12
5
\$\begingroup\$

Output a certain text file (498.388888 points)

The goal output is here.

The Python 3.4.3 script to print it is 49 bytes:

for b in dir(__builtins__):print(eval(b).__doc__)

The naive CJam program equal to the goal output, by wrapping the output string in "..." and escaping each " that occurs in it, would be 26908 bytes.

\$\endgroup\$
5
  • \$\begingroup\$ Very clever, though it may run afoul of the "specific languages" restriction (which is vague, admittedly). \$\endgroup\$
    – BMac
    Aug 27, 2015 at 21:34
  • \$\begingroup\$ The closest rule is "avoid mentioning specific language". Python is not mentioned, but is clearly meaned. \$\endgroup\$
    – Vi.
    Aug 28, 2015 at 0:35
  • \$\begingroup\$ Yeah, this answer is a bit tongue-in-cheek, I sort of just wanted to point out that the rule is sort of a slippery slope. Imagine if I had "mangled" the output more -- say, taking the SHA1 checksum of each docstring -- it would be very weird to claim "this garbled bunch of hex digits is too language-specific" :) \$\endgroup\$
    – Lynn
    Aug 28, 2015 at 17:23
  • \$\begingroup\$ If I wanted to do a more "fair" answer, I'd probably use Mathematica. You can do a lot of extremely domain-specific things in it that would take thousands of bytes of CJam/Pyth/anything else. But sadly, I don't know the language. \$\endgroup\$
    – Lynn
    Aug 28, 2015 at 17:24
  • 1
    \$\begingroup\$ Link to output is dead. \$\endgroup\$ Oct 19, 2019 at 16:42
4
\$\begingroup\$

Say "Hello world!" (50 / 26 ≈ 1.92)

Show a message box to say "Hello world!"

JavaScript

alert('Hello world!')

In a browser with support for DOM Level 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Running on ActivePerl with Win32::GUI.

\$\endgroup\$
2
  • \$\begingroup\$ alert isn't inherently part of JS, and the GolfScript program is just a comment. \$\endgroup\$ Jan 26, 2014 at 22:31
  • \$\begingroup\$ I've changed the answer to use plain Perl. \$\endgroup\$
    – Toothbrush
    Jan 27, 2014 at 12:41
3
\$\begingroup\$

Output "Hello world!" until user presses "q", 1.842 105/44 = 2.386

  1. Print "Hello world!" (including newline).
  2. The user presses a key, which is not echoed to the screen.
  3. Repeat until the key pressed was "q".

QBasic (52 39 characters)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Since posting my original answer, I discovered that I could turn off autoformatting in QB64. :^D With the line number and ? shortcut for PRINT, this looks rather like a ternary expression in C-like languages.

First version:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 characters)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

The above will only work on (certain?) UNIX systems (tested on Ubuntu 12.04). It's possible that one could go cross-platform and get it down to 91 characters using the Term::ReadKey module, but I haven't tested it:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}
\$\endgroup\$
1
\$\begingroup\$

Hello, world (3 1/3 points)

Write program that outputs Hello World..

HQ9+ (1 character)

This is not language "typically used for golfing", so I believe it fits here. Works in this interpreter, by the way.

H

GolfScript (15 characters)

I doubt it can get any shorter, even if it's GolfScript.

"Hello World."
\$\endgroup\$
11
  • 8
    \$\begingroup\$ I don't think HQ9+ suits as A language. It is designed for tricks/riddles/fun. Brainfuck/unlambda/other esoterical languages also does not seem to suit as A. \$\endgroup\$
    – Vi.
    Jan 19, 2014 at 21:02
  • \$\begingroup\$ @Vi.: But it's not typically used for golfing. \$\endgroup\$
    – 0..
    Jan 19, 2014 at 21:03
  • 4
    \$\begingroup\$ You can hovewer try to use HQ9+ as B language and beat it by Java or such... \$\endgroup\$
    – Vi.
    Jan 19, 2014 at 21:03
  • 7
    \$\begingroup\$ Looks like there's a hierarchy: Compared to Java, Perl's a golflang. Compared to Perl, GolfScript is a golflang. Compared to GolfScript, HQ9+ is a golflang... \$\endgroup\$
    – Vi.
    Jan 19, 2014 at 21:06
  • \$\begingroup\$ @Vi.: I carefully checked your task description. HQ9+ is never used for golfing, except for two particular tasks - "99 bottles", and "Hello, world". Unless you can show some other task in which HQ9+ wins with any other programming language, I still think it fits the definition, even if it abuses it (hey, it's popularity-contest). HQ9+ is simply not used for golfing stuff not related to those two tasks. So, it's not typically used for golfing. The second is obviously designed for CodeGolf - it's GolfScript. \$\endgroup\$
    – 0..
    Jan 19, 2014 at 21:09
0
\$\begingroup\$

Output "Hello world!", 33/97 = 2.94

Write a program that outputs Hello world!

Arduino or GML

Serial.print("Hello world!")

or

show_message("Hello world!")

Both are 28 characters.

GTB

I use GTB for golfing a lot (especially since I created it myself, and it is Turing complete). Unfortunately, there is only limited support for lowercase characters (because TI-84 calculator can't deal with it). This is probably the shortest GTB program that can output Hello world!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 characters.

\$\endgroup\$
9
  • \$\begingroup\$ Does GTB version also output it to serial port? \$\endgroup\$
    – Vi.
    Jan 20, 2014 at 1:59
  • \$\begingroup\$ Is GTB version intentionally bloated up with various coss and exprs or it genuintely can't just output something in regular way? Or " character is actually not a string literal and confusing me... \$\endgroup\$
    – Vi.
    Jan 20, 2014 at 2:01
  • \$\begingroup\$ @Vi. It's not bloated up at all... it has to strip e from expr, two l from lower, o from cos, or from or, l from lower, and d from and. \$\endgroup\$
    – Timtech
    Jan 20, 2014 at 11:10
  • \$\begingroup\$ 'Other users may propose better Bs (maybe including in other "golfy" languages). ' --- let me try golfscript: "Hello world!" \$\endgroup\$ Apr 13, 2014 at 9:01
  • \$\begingroup\$ @JanDvorak You're probably right. \$\endgroup\$
    – Timtech
    Apr 13, 2014 at 22:00

Not the answer you're looking for? Browse other questions tagged or ask your own question.