# 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

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).

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.

(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, 2014 at 6:39
• chatroom for discussion on this question Oct 27, 2014 at 7:04
• @Mew HQ9+ prints the wrong message. But this one... esolangs.org/wiki/Huby Oct 27, 2014 at 13:55
• Maybe this can be interesting : migl.io/projects/hw. This list automatically the answers and display their life time. Oct 27, 2014 at 15:00
• @gerrit Cause I could really use 350 more answer notifications... Nov 4, 2014 at 1:39

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


Yes the spaces are required and no they're not printed

• @Oriol Fixed ;) Oct 30, 2014 at 19:07
• It helps if people explain their answers some. Without research, one can't tell if this outputs leading or trailing spaces. The problem statement says: "The output should only be Hello World! and no other characters (a leading/trailing newline is not an issue)." so if there is (for instance) a rule by which leading and trailing spaces are stripped somehow that would be nice to point out the nuances of. Or whatever mad science is happening to meet the requirements; if " Hello World! " isn't a string constant but the quotes mean something else, etc. Oct 30, 2014 at 19:36
• The wiki page says like Forth, quotes must be space separated so I think the lines with out the space separation are ignored and the Hello World! line prints correctly. Now mine finally fits I login and I can't answer cos it's protected! Noooooooooooooooo
– Matt
Oct 30, 2014 at 20:17
• Yes the spaces are required and no they're not printed Oct 30, 2014 at 20:20

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


Distance from Answer 114 : 7

RegXy is based on Regular Expressions, perl styled.

label/regex/target_label means if the regex matches, go to the target_label line

label/regex/replacement/ means replace the regex match with replacement text.

• Is there a working interpreter? The first line in your code doesn't seem valid. It has 3 /s. Oct 31, 2014 at 2:16
• The second / is inside a regex. -##[][/]#i--#main(){pu Oct 31, 2014 at 2:18
• The VB interpreter (from archive.org) seemed not parsing [/] correctly, although I don't know how to compile it. It will be better if there is another good interpreter. (But it also ignores invalid lines so your code works anyway.) Oct 31, 2014 at 2:27

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


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


Distance from Answer 122 : 7

//#class{//-ta[][ void main(){//println(;\#//Hello*}}
END
{$print("Hello World!")} //#;//"-##[;]#bye</>%  Distance 7 from answer 129. • C# don't need public. It can come earlier. Nov 1, 2014 at 18:31 • Console.WriteLine is a bigger task to achieve. Isn't it ? Nov 1, 2014 at 19:14 • @Optimizer There is also Console.Write. Nov 2, 2014 at 2:08 # Answer 132 - gosu //#class jux{//-ta[][ void main(){//println(;\#//Hello*}} print("Hello World!"); //#;//"-##[;]#bye</>%  Distance 6 from Answer 131 • class jux :D :D Nov 2, 2014 at 9:14 • This gives errors on gosu-lang.github.io/play.html . Am I doing something wrong ? Nov 2, 2014 at 9:23 • I tested it offline and it works. It looks like the online player isn't working. I couldn't get any of the online examples to work. – user19187 Nov 2, 2014 at 9:39 • You have to disable insecure content protection first for anything to compile. After that, all three samples work. Nov 2, 2014 at 9:43 # Answer 133 - V "/#class jux{//-ta[][ void main(){//println(;\#//Hello*}} print""Hello World!"puts #;//"-##[;]#bye</>%  Distance 7 from answer 132. # Answer 134 – ALAGUF "/#class jux{//-ta[][stat void main(){//println(;\#//Hello*}} print"0"Hello World!"#!puts #;//"-##[;]#bye</>%  Distance 7 from answer 133. Moving towards Java... • There is already a ta which is in static. Nov 2, 2014 at 14:50 • Duh, didn't notice that. Well, too bad. It's after a // so shouldn't be too hard to cure. Nov 2, 2014 at 15:46 # Answer 137 - Caché ObjectScript  //#class jux{//-ta[][static void main(){y//println(;\#//Hello*}} write "Hello World!" ;!puts #;//-##[;]#bye</>%"  Distance 7 from Answer 136. • What's with the yst ? Nov 2, 2014 at 16:52 • I was going to do ystem but I needed more bytes to adjust the comments. Nov 2, 2014 at 16:56 • @Optimizer: edited the post, sorry; I apparently suck at comments. Nov 2, 2014 at 17:02 • Ah System.out.println !! Nov 2, 2014 at 17:03 • @Optimizer: eventually, yeah. That's what all the class and static void bits have been building to. We can do either C# with System.Console.WriteLine or Java with System.out.println, and I think both are possible if we can find enough intermediate languages. Nov 2, 2014 at 17:44 # Answer 138 - owl #//#class jux{//-ta[][static void main(Str){y//println(;\#//Hello*}} write "Hello World!"#;!puts #;//-##[;]#bye</>%"  Distance 7 from Answer 137 (4 necessary, 3 to add int). • Doesn't main in Java take String[]? Or are we going for C++? Nov 2, 2014 at 21:21 • Right, I changed. Nov 2, 2014 at 21:53 # 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. Nov 3, 2014 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, 2014 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. Nov 5, 2014 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. Nov 4, 2014 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 ;) Nov 4, 2014 at 13:19 • Ah. Didn't know. Nov 4, 2014 at 13:27 • I've never seen 'String" before, TI-BASIC just allows unmatched quotes like Disp "HELLO Nov 4, 2014 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). Nov 4, 2014 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 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 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>~


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


• 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. Nov 1, 2014 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. Nov 21, 2014 at 20:20

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


Distance: 7

• bring on all the shell variants ... ;p
– user4768
Oct 29, 2014 at 11:17
• ps: #85 is still under debate
– user4768
Oct 29, 2014 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. Oct 29, 2014 at 11:19
• #85 is perfectly valid, I found the documentation. See my comment on #85.
– user4768
Oct 29, 2014 at 11:27

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


C is possible now.

• CCCCCCCCCCCCCCCCCCC Oct 29, 2014 at 19:54
• Mine was first. I refreshed the two pages until the timestamps differed and mine was posted before this one was undeleted. Oct 29, 2014 at 20:00
• I never saw yours before posting. I just checked the undeletion timestamp on codegolf.stackexchange.com/posts/40645/revisions Oct 29, 2014 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. Oct 29, 2014 at 20:07
• How do you get the time in seconds? I can only see minutes. Oct 29, 2014 at 20:07

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


Distance from Answer 108 : 7

Try it online here

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


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

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


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