# Evolution of “Hello World!”

This contest is officially over, the winner is jimmy23013. Congratulations!

The challenge is to make a program that prints Hello World! to stdout. The catch is that your program must have a Levenshtein distance of 7 or less from the program in the answer submitted before yours.

# How This Will Work

Below I have already submitted the first answer using Python: print("Hello World!").

The next person to answer must modify the string print("Hello World!") with up to 7 single character insertions, deletions, or substitutions so that when it is run in any language that hasn't been used so far (only Python in this case) the output is still Hello World!.

For example the second answerer might use 1 substitution (r -> u), 2 deletions (in), and 1 insertion (s) to make the string puts("Hello World!") which prints Hello World! when run in Ruby.

The third person to answer must do the same thing in a new language, but using the program of the second person's answer (e.g. puts("Hello World!")) as their starting point. The fourth answer will be in relation to the third answer and so on.

This will continue on until everyone get stuck because there is no new language the last answer's program can be made to run in by only changing 7 characters. The communal goal is to see how long we can keep this up, so try not to make any obscure or unwarranted character edits (this is not a requirement however).

# Formatting

#Answer N - [language]

[code]

[notes, explanation, observations, whatever]


Where N is the answer number (increases incrementally, N = 1, 2, 3,...).

You do not have to tell which exact characters were changed. Just make sure the Levenshtein distance is from 0 to 7.

# Rules

The key thing to understand about this challenge is that only one person can answer at a time and each answer depends on the one before it.

There should never be two answers with the same N. If two people happen to simultaneously answer for some N, the one who answered later (even if it's a few seconds difference) should graciously delete their answer.

Furthermore...

• A user may only submit one answer per 8 hour period. i.e. Each of your answers must be at least 8 hours apart. (This is to prevent users from constantly watching the question and answering as much as possible.)
• A user may not submit two answers in a row. (e.g. since I submitted answer 1 I can't do answer 2, but I could do 3.)
• Each answer must be in a different programming language.
• Different versions of the same language count as the same language.
• Languages count as distinct if they are traditionally called by two different names. (There may be some ambiguities here but don't let that ruin the contest.)
• You may only use tabs, newlines, and printable ASCII. (Newlines count as one character.)
• The output should only be Hello World! and no other characters (a leading/trailing newline is not an issue).
• If your language doesn't has stdout use whatever is commonly used for quickly outputting text (e.g. console.log or alert in JavaScript).

Please make sure your answer is valid. We don't want to realize there's a break in the chain five answers up. Invalid answers should be fixed quickly or deleted before there are additional answers.

Don't edit answers unless absolutely necessary.

# Scoring

Once things settle down, the user who submits the most (valid) answers wins. Ties go to the user with the most cumulative up-votes.

### Leaderboard: (out of date)

(user must have at least 2 valid answers)

### Languages used so far:

(Feel free to edit these lists if they are incorrect or out of date.)

This question works best when you sort by oldest.

NOTE: This is a trial question for a new challenge type I have in mind where each answer depends on the last and increases in difficulty. Come discuss it with us in the chatroom for this question or in meta.

• "Sort by oldest" is useful here. – xnor Oct 27 '14 at 6:39
• chatroom for discussion on this question – Justin Oct 27 '14 at 7:04
• @Mew HQ9+ prints the wrong message. But this one... esolangs.org/wiki/Huby – Sp3000 Oct 27 '14 at 13:55
• Maybe this can be interesting : migl.io/projects/hw. This list automatically the answers and display their life time. – Michael M. Oct 27 '14 at 15:00
• @gerrit Cause I could really use 350 more answer notifications... – Calvin's Hobbies Nov 4 '14 at 1:39

# Answer 139 – Cardinal

x//#class jux{//-ta[][static void main(Str){Sys//println(;\#//Hello*}} write
%"Hello World!";x!puts
x;//-##[;]#bye</>%"


Distance 7 from answer 138 (5 necessary, 2 for adding Sys).

# Answer 140 - Parser

#//#class jux{//-ta[][static void main(Str){Syst//println(;\#//Hello*}} write
Hello World!
#x!putsx;//-##[;]#bye</>%"


Distance 7 from answer 139 (6 nessasary, 1 for Syst).

• I think I'd better change #x to #/ instead. – jimmy23013 Nov 3 '14 at 8:19

# Answer 141 – Grin

[//#class jux{//-ta][static void main(Str){Syste//println(;\#//Hello*}} write]
(Hello World!)x!putsx;//-##[;]#bye</>%"


Distance 7 from answer 140 (6 necessary, 1 for Syste).

# Answer 142 - Kitten

//#class jux{//-ta][static void main(Str){Syste//println(;\#//Hello*}} write]
"Hello World!"say"putsx;//-##[;]#bye</>%"


Distance 7 from answer 141.

# Answer 144 - Asymptote

//#class jux{//-ta][static void main(String[]){System..println(;\#//Hello*}}
write("Hello World!");//y"putsx;//-##[;]#bye</>%"


Distance 7 from Answer 143 - 4 (->\n, ]->(, and );) + 3 free changes (Syste//->System..))

• I swear I am not picking on you specifically, but I think you didn't count deleting the \n after write(. – Muqo Nov 4 '14 at 17:56
• Sorry about that. The Lehvenstein distance calculator linked to by the OP doesn't distinguish newlines and spaces, so I didn't catch that. While the upper bound of 7 should be a strict global rule, I feel that cases like this might reasonably be allowed, as I would be able to do it in 5 changes if I didn't make other modifications, so it doesn't violate the true spirit of the challenge. It is a bit late to do anything about it, but a single character doesn't make much of a difference in the long run, IMO. – archaephyrryx Nov 5 '14 at 19:34

# Answer 145 - Cat

//#class jux{//-ta][static void main(String[]){System..println(;\#//Hello*}}
"rite""Hello World!"write"putsx;//-##[;]#bye</>%"


Distance 7 from answer 144.

Tested in the C# interpreter. It doesn't work in the online interpreter.

# Answer 146 - IDL

;//#class jux{//-ta][static void main(String[]){System.o.println(;\#//Hello*}}
print,"Hello World!";write"putsx;//-##[;]#bye</>%"


Distance 7 from answer 145.

1. Inserted ; before /
2. Replaced " by p
3. Replaced t by n
4. Replaced e by t
5. Inserted ; before w
6. Inserted , after print

And:

1. Added o after System.
• For those unfamiliar, see this PDF introduction, which shows that ; is comment character and includes a Hello World example. Surprising that after 145 answers, there is low-hanging fruit in non-esoteric languages left. – gerrit Nov 4 '14 at 0:02

# Answer 148 - WTFZOMFG

#class jux{public[static void main(String[]){System.out.println(;\#//Hello*}}print,
'Hello World!"#;write"putsx;//-##[;]#bye</>%"


Distance from Answer 147 : 7

First language that I have seen which has unmatched quotes as syntax :D

• TI-BASIC has unmatched quotes as syntax btw ;) – Timtech Nov 4 '14 at 13:19
• Ah. Didn't know. – Optimizer Nov 4 '14 at 13:27
• I've never seen 'String" before, TI-BASIC just allows unmatched quotes like Disp "HELLO – QuadmasterXLII Nov 4 '14 at 16:44
• Right. That's what I thought was meant, also Game Maker Language (GML) doesn't differentiate between ' and " (they probably still have to match each other though). – Timtech Nov 4 '14 at 17:04

# Answer 152 - Onyx

#/#class jux{public static void main(String[] h){System.out.println(//;\#//Hello*}}print,
Hello World!'#);}}//
print#putsx;//-##[;]#bye</>%"


Distance 7 from answer 151.

I found these languages here: http://concatenative.org.

# Answer 149 - Io

#class jux{public static void main(String[]){System.out.println(;\#//Hello*}}print,
"Hello World!"print"putsx;//-##[;]#bye</>%"


Distance 7 from answer 148 (6 necessary, 1 for the space after public).

Io supports both write("...") and "..."print, but not print("...") or "..."write unfortunately.

This question has most answers in this site now.

# Answer 156 - yash

#B00class jux{public static void main(String[] h){
#System.Cont.Wrintln(//;\#//Hello*}}print,
cat<<<"Hello World!" #;}}//print#putsx;//-##[;]#bye</>%"


Distance 7 from answer 155 (5 necessary, 2 change the single quotes to double quotes, to make next answers easier).

I'll stop looking for new languages now. And I'll be no longer answering so fast. I'll only post answers with languages that I have found but yet didn't have chance to use.

I also found apt-cache search useful. And if you want more languages that only a few people use, you can try something like this. If you want it to be uninteresting, you can also see here.

There are also many esolangs and serious languages in those long lists not have been used yet, I think.

• – Vlo Nov 5 '14 at 14:35

# Answer 153 - JBoss

//#class jux{public static void main(String[] h){
System.out.println(//;\#//Hello*}}print,
'Hello World!');//}}//print#putsx;//-##[;]#bye</>%"


Distance 7 from answer 152.

Note due to incorrect syntax the last line was changed... 2014-11-18 (OP)

• ... Anyone has ideas fixing answer 154? – jimmy23013 Nov 20 '14 at 2:57
• About that.. :3 – Timtech Nov 20 '14 at 19:24

## Answer 170 - Minkolang 0.9

Distance 7 from answer 169.

03w!(*#class jux{public static void main(String[] h){#
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)
pint)(!
"Hello World!"(O).g!)S(#X ;}}//printputsx;//-##E;]bye</>%#*)


The two additions are 03w at the beginning, which jumps it to the beginning of the fourth line and (O). after "Hello World!", which prints out the whole stack as characters. Very, very, very conveniently, this is exactly 7 characters!

• Rise of the new golfing langs! – Conor O'Brien Oct 26 '15 at 22:54

# Answer 172 - Jolf

Distance 7 from answer 171.

"#03w(*#class jux!{public static void main(String[] h){#\
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)\
put"
a"Hello World!'#(O).g!)S(#X ;}}//printputsx;//-##E;]bye</>#*)


Guide:

• Five insertions; "s at beginning and after put; \ after first two lines; a before "Hello World!
• 1 substitution; ' to " on the last line
• 1 deletion; the % towards the end.

Try it here!

• Are languages newer than the challenge allowed? – mbomb007 Feb 24 '16 at 21:37
• @mbomb007 Yes, they are. – Conor O'Brien Feb 24 '16 at 21:49

# Answer 175 - Retina

x4mrZ"#03w(*#class jux!{public static void main(String[] h){#\
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)\
put"

^
Hello World!
gx#(O).g!)S(#X ;}}//printputs;//-##E;]bye</>#*)
<empty>


Distance 7 from Answer 174.

The last line is simply an empty line, so the next person should remove <empty>. I used free-spacing mode so that # starts a comment. This takes care of the unmatched brackets and parentheses. I guess the g is the last replace's configuration string is ignored?

Try it online

# Answer 173 - Vitsy

Distance 7 from answer 172

4mrZ"#03w(*#class jux!{public static void main(String[] h){#\
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)\
put"
a
"Hello World!";#(O).g!)S(#X ;}}//printputsx;//-##E;]bye</>#*)


Oh, geez, that was easier than I expected it to be.

Explanation:

4mrZ inserted (4 chars), which calls the 4th index of code (the 5th line), reverses the stack, and then outputs everything in the stack as a char. I can get away with no newline due to the # character, which will teleport to the 90th character in the first line (which doesn't exist) (Z in ASCII), throwing an error and exiting the program.

Newline inserted before "Hello... (one char) to designate a new method line.

" substituted for ' at the end of World!' (one char) to end the quotes.

; inserted after the newly substituted " (one char), which is a return character. This leaves Hello, World! on the stack.

More interestingly, if you want to know what Vitsy is actually reading, here's the verbose mode version (any lines starting with : designate a newline):

push 4;
goto top method;
reverse stack;
output stack as chars;
toggle double quote;
teleport to top instruction;
push 0;
push 3;
wait top seconds;
if (int) top is 0;
multiply top two;
teleport to top instruction;
push 12;
push length of stack;
push 10;
push inverse sine of top;
push inverse sine of top;
;
j;
flatten top two stacks;
x;
!;
rotate stack left;
push whether (int) top item is prime;
flatten top two stacks;
push 11;
push length of stack;
push input item;
push 12;
;
push inverse sine of top;
push inverse tangent of top;
push 10;
push inverse tangent of top;
push input item;
push 12;
;
save top as temporary variable;
capture stack as object with next;
push input item;
push 13;
;
goto top method;
push 10;
push input item;
eval(stack);
if (int) top is 0;
push sine of top;
push inverse tangent of top;
reverse stack;
push input item;
eval(stack);
g;
begin recursive area;
end recursive area;
;
factorize top item;
if (int) top is not 0;
rotate stack left;
teleport to top instruction;
repeat next instruction set top times;
:teleport to top instruction;
push sine of top;
push number of stacks;
push inverse sine of top;
push inverse tangent of top;
push 14;
goto top method;
.;
push cosine of top;
capture stack as object with next;
eval(stack);
push inverse sine of top;
capture stack as object with next;
push length of stack;
push 14;
.;
STDIN;
reverse stack;
push input item;
push inverse tangent of top;
push 14;
push length of stack;
eval(stack);
if (int) top is 0;
divide top two;
divide top two;
get top specified item;
repeat next instruction set top times;
divide top two;
divide top two;
push all ints between second to top and top;
push 14;
push length of stack;
push length of stack;
capture stack as object with next;
multiply top two;
rotate stack right;
rotate stack right;
push whether (int) top item is prime;
reverse stack;
push input item;
eval(stack);
push inverse tangent of top;
,;
push 12;
push 10;
push inverse tangent of top;
go backward;
go backward;
teleport to top instruction;
multiply top two;
if (int) top is not 0;
repeat next instruction set top times;
:push whether (int) top item is prime;
flatten top two stacks;
push inverse tangent of top;
toggle double quote;
:push 10;
:toggle double quote;
push all ints between second to top and top;
push 14;
push length of stack;
push length of stack;
capture stack as object with next;
;
STDIN;
capture stack as object with next;
reverse stack;
push length of stack;
push 13;
!;
toggle double quote;
generic exit;
teleport to top instruction;
if (int) top is 0;
output top as character;
if (int) top is not 0;
.;
g;
!;
if (int) top is not 0;
push sine of top;
if (int) top is 0;
teleport to top instruction;
remove top;
;
;
generic exit;
rotate stack right;
rotate stack right;
divide top two;
divide top two;
push whether (int) top item is prime;
reverse stack;
push input item;
eval(stack);
push inverse tangent of top;
push whether (int) top item is prime;
flatten top two stacks;
push inverse tangent of top;
push inverse sine of top;
x;
generic exit;
divide top two;
divide top two;
subtract top two;
teleport to top instruction;
teleport to top instruction;
push e;
generic exit;
end recursive area;
push 11;
push number of stacks;
push 14;
go backward;
divide top two;
go forward;
teleport to top instruction;
multiply top two;
if (int) top is not 0;

Try it Online!

## Answer 177 - Seriously

H.4mrZ"#03w(*#class jux!{public static void main(String[] h){#\
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)\
put"

^
disp"Hello World!")
gx#(O)X.g!)S(#X ;}}//printputs;//-##E;]bye</>#*)kX
<empty>


The last line is intended to be empty; SE doesn't like blank lines at the end of code blocks.

Distance 6 from Answer 176

Modifications:

+ H. (at the start, prints "Hello, World!")
+ X  (before the first . on the last line; prevents extraneous printing by clearing the stack)
+ kx  (at the end, finishes a function definition and clears the stack to prevent printing)

• @mbomb007 This solution is intended to also have the empty line; SE apparently doesn't like blank lines in code blocks (which I didn't realize). – Mego Mar 8 '16 at 21:08
• ^ yeah. It's annoying. It allows them if you use <code><pre> or something like it, but then it removes any < or >, which sucks for copy-paste purposes... – mbomb007 Mar 8 '16 at 21:54

# Answer 76 - FreeBASIC

'#sh  o[.]c;cat;#&&alert"  "
print "Hello World!"
';#bye";dnl</vsh>~


Distance: 5

# Answer 79 - Hack

<?hh #[.]c;cat;#&&alert"  "
echo \$e= "Hello World!"
;#";#bye;dnl</vsh>~


Distance 7 from answer 78.

# Answer 84 - sh

#[]([.]c;cat;#&&alert"  "
echo Hello "World!"
#[;]:;#bye;dnl</vsh>


Distance from answer 83: 7

• Added #
• Removed @
• Changed ( to
• Added 2 "'s
• Added #

Yes, bash and dash have been done, but I'm just taking the opportunity here as sh has not...

Added the quotes just to get some difficulty up.

• -1 for "Added the quotes just to get some difficulty up". The OP clearly stated that the goal is to have the chain go as long as possible, and we should be cleaning up the mess instead of adding more. – nyuszika7h Nov 1 '14 at 20:48
• On most computers today, sh is really bash or dash or ksh. All those languages are taken. But on older System V systems, sh was the classic Bourne shell, the predecessor to those other shells. Heirloom sh is a current implementation of the classic language. – kernigh Nov 21 '14 at 20:20

# Answer 86 - csh

#[]([.]c;main()&al
echo Hello World!
#[;]:;#bye;dnl</vsh>


Distance: 7

• bring on all the shell variants ... ;p – user4768 Oct 29 '14 at 11:17
• ps: #85 is still under debate – user4768 Oct 29 '14 at 11:17
• @Stacey Figured if Lisp variants are okay then why not. And yeah, I noticed the comments there, if 85 is invalid I can just update this answer. – Nit Oct 29 '14 at 11:19
• #85 is perfectly valid, I found the documentation. See my comment on #85. – user4768 Oct 29 '14 at 11:27

# Answer 93 - QBasic

'#[]([.]c;main()    {
print("Hello World!")
'}/#[;]:;#bye;dnl</>


Distance 7 from answer 92.

C is possible now.

• CCCCCCCCCCCCCCCCCCC – Optimizer Oct 29 '14 at 19:54
• Mine was first. I refreshed the two pages until the timestamps differed and mine was posted before this one was undeleted. – feersum Oct 29 '14 at 20:00
• I never saw yours before posting. I just checked the undeletion timestamp on codegolf.stackexchange.com/posts/40645/revisions – feersum Oct 29 '14 at 20:02
• @feersum I was just about to delete my answer. But mine is 19:53:13Z in that page. And yours is 19:53:36Z. – jimmy23013 Oct 29 '14 at 20:07
• How do you get the time in seconds? I can only see minutes. – feersum Oct 29 '14 at 20:07

# Answer 109 - REXX

--#[][.]#i--#main(){puts(
say"Hello World!"
--#[;]#bye;dnl</>%


Distance from Answer 108 : 7

Try it online here

# Answer 114 - itflabtijtslwi

/-##[][/]#i--#main(){puts(
select/Hello World!/
"-##[;]#bye;nl</>%"


Distance 7 from answer 113.

I saw so many Lisp, sh, Basic and SQL dialects here. This time it's a /// dialect.

# Answer 117 - Squirrel

#/-##[][/]#i--#main(){
print(
#sel/.*
"Hello World!")
#b/"-##[;]#bye;nl</>%"


Distance 7 from answer 116.

# Answer 136 - Flaming Thunder

#/#class jux{//-ta[][static void main(){//println(;\#//Hello*}}

write"Hello World!".#!puts
#;//-##[;]#bye</>%"


Distance from Answer 135 : 7

# Answer 143 - TwoDucks

//#class jux{//-ta][static void main(String[]){Syste//println(;\#//Hello*}} write]
"Hello World!"//y"putsx;//-##[;]#bye</>%"


Distance from Answer 142 - 7 (2 for // 5 for ing[])

# Answer 176 - Codename Dragon

x4mrZ"#03w(*#class jux!{public static void main(String[] h){#\
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)\
put"

^
disp"Hello World!")
gx#(O).g!)S(#X ;}}//printputs;//-##E;]bye</>#*)
<empty>


Distance 7 from Answer 175.

For some reason, this works without the leading (. The seven chars added were disp" (5) followed by ") (2). (NOTE THAT THE LAST LINE IS AN EMPTY LINE.)

To execute the program, go the github in the header and paste CDragon.js into a jsfiddle or something, then call the wrapper function with the above code.

# Answer 178 - Reng v.3.3

^.4mrZ"#03w(*#class jux!{public static void main(String[] h){#\
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)\
put"

^
<isp~;ob"Hello World!")
gx#(O)X.g!)S(#X ;}}//printputs;//-##E;]bye</>#*)kX


Distance 7 from Answer 177. Changes:

• H^ (1)
• d< (2)
• inserting ~;ob (6)
• removing the final newline (7)

Here is the code passed over:

^

<   ~;ob"Hello World!")
g


g and ) are no-ops. Otherwise, this is a pretty standard HW submission. Try it here!

# Answer 169 - Simplex v.0.6

!(*#class jux{public static void main(String[] h){#
#System.Console.Writeln(//@\//Hello*}}print,cat<<#*)
pint)(!
"Hello World!"g!)S(#X ;}}//printputsx;//-##E;]bye</>%#*)


Distance 7 from answer 168:

• 3 ! inserted
• 1 newline inserted
• 2 " inserted
• 1 g inserted

Hopefully the newline helps a bit. Anything of the form !...! not in a string is treated as a comment, and a matching ! is not required, as an EOF closes everything/does not care if something is closed. I'll extract the portion of the code I used to make it more clear:

!...!\n"Hello World!"g!...
!...!                      ~~ comment
\n                    ~~ newline
"            "      ~~ consecutively add each character to the strip
Hello World!       ~~ add this
g     ~~ clear the strip and output those characters
!... ~~ comment the rest of the file


## protected by Community♦Nov 5 '14 at 21:59

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?