Комментарии 48
НЛО прилетело и опубликовало эту надпись здесь
это называется Quine:
http://en.wikipedia.org/wiki/Quine_(computing)
http://en.wikipedia.org/wiki/Quine_(computing)
так я что-то не понял, это исходники программы выглядят как спираль, или это и есть исходники, которые печатают сами себя?
Исходники, которые печатают сами себя. Имхо, интерпретатор бы долго плевался после "wh\nile".
видимо мне не понять всей красоты перла :(
Там в конце, заметили, есть скромный оператор s;\s;;g; который все разорванные слова как раз сливает перед выполнением.
тама пробелы и всё такое регуляркой заменяется... такое и на php можно сделать, и на jscript, и даже на каком-нибудь другом американском языке программирования.... а бы тока regex+eval работали
''=~( '(?{' .('`' |'%') .('[' ^'-')
.('`' |'!') .('`' |',') .'"'. '\\$'
.'==' .('[' ^'+') .('`' |'/') .('['
^'+') .'||' .(';' &'=') .(';' &'=')
.';-' .'-'. '\\$' .'=;' .('[' ^'(')
.('[' ^'.') .('`' |'"') .('!' ^'+')
.'_\\{' .'(\\$' .';=('. '\\$=|' ."\|".( '`'^'.'
).(('`')| '/').').' .'\\"'.+( '{'^'['). ('`'|'"') .('`'|'/'
).('['^'/') .('['^'/'). ('`'|',').( '`'|('%')). '\\".\\"'.( '['^('(')).
'\\"'.('['^ '#').'!!--' .'\\$=.\\"' .('{'^'['). ('`'|'/').( '`'|"\&").(
'{'^"\[").( '`'|"\"").( '`'|"\%").( '`'|"\%").( '['^(')')). '\\").\\"'.
('{'^'[').( '`'|"\/").( '`'|"\.").( '{'^"\[").( '['^"\/").( '`'|"\(").(
'`'|"\%").( '{'^"\[").( '['^"\,").( '`'|"\!").( '`'|"\,").( '`'|(',')).
'\\"\\}'.+( '['^"\+").( '['^"\)").( '`'|"\)").( '`'|"\.").( '['^('/')).
'+_,\\",'.( '{'^('[')). ('\\$;!').( '!'^"\+").( '{'^"\/").( '`'|"\!").(
'`'|"\+").( '`'|"\%").( '{'^"\[").( '`'|"\/").( '`'|"\.").( '`'|"\%").(
'{'^"\[").( '`'|"\$").( '`'|"\/").( '['^"\,").( '`'|('.')). ','.(('{')^
'[').("\["^ '+').("\`"| '!').("\["^ '(').("\["^ '(').("\{"^ '[').("\`"|
')').("\["^ '/').("\{"^ '[').("\`"| '!').("\["^ ')').("\`"| '/').("\["^
'.').("\`"| '.').("\`"| '$')."\,".( '!'^('+')). '\\",_,\\"' .'!'.("\!"^
'+').("\!"^ '+').'\\"'. ('['^',').( '`'|"\(").( '`'|"\)").( '`'|"\,").(
'`'|('%')). '++\\$="})' );$:=('.')^ '~';$~='@'| '(';$^=')'^ '[';$/='`';
Привет начальник!
Это программа, которая выводит вращающуюся спираль, своим исходным кодом
прям фрактал какой-то
Дааа, перл это жесть :) Жаль что я его не люблю, но это все равно жесть :))
Там еще как-будто смайлик во второй строчке, вначале: $_=
Помню, на школьных олимпиадах по информатике была такая задача: написать программу, которая выводит свой код. Что-то похожее, но реализация была на паскале :)
несмотря на часто встречающиеся упоминания о такой задаче - я до сих пор не могу заглянуть хоть в одну из них,дабы оценить идею. Скажите в чем суть подобной программы? Кажется это так просто - открыть и прочитать себя... но скорее всего там наверняка это делается по-другому. Расскажите, как?
вот примерчик на паскале:
program SelfPrint(output);
var i: integer; ch, ch1: char;
s: array [0..9] of string[127];
begin ch:= chr(39); ch1:= chr(59);
s[0]:= 's[0]:= ';
s[1]:= 'program SelfPrint(output);';
s[2]:= ' var i: integer; ch, ch1: char;';
s[3]:= ' s: array [0..9] of string[127];';
s[4]:= 'begin ch:= chr(39); ch1:= chr(59);';
s[5]:= 'for i:= 1 to 4 do writeln(s[i]);';
s[6]:= 'for i:= 0 to 9 do';
s[7]:= ' begin s[0][3]:= chr(i+48); writeln(s[0],ch,s[i],ch,ch1) end;';
s[8]:= 'for i:= 5 to 9 do writeln(s[i]);';
s[9]:= 'end.';
for i:= 1 to 4 do writeln(s[i]);
for i:= 0 to 9 do
begin s[0][3]:= chr(i+48); writeln(s[0],ch,s[i],ch,ch1) end;
for i:= 5 to 9 do writeln(s[i]);
end.
program SelfPrint(output);
var i: integer; ch, ch1: char;
s: array [0..9] of string[127];
begin ch:= chr(39); ch1:= chr(59);
s[0]:= 's[0]:= ';
s[1]:= 'program SelfPrint(output);';
s[2]:= ' var i: integer; ch, ch1: char;';
s[3]:= ' s: array [0..9] of string[127];';
s[4]:= 'begin ch:= chr(39); ch1:= chr(59);';
s[5]:= 'for i:= 1 to 4 do writeln(s[i]);';
s[6]:= 'for i:= 0 to 9 do';
s[7]:= ' begin s[0][3]:= chr(i+48); writeln(s[0],ch,s[i],ch,ch1) end;';
s[8]:= 'for i:= 5 to 9 do writeln(s[i]);';
s[9]:= 'end.';
for i:= 1 to 4 do writeln(s[i]);
for i:= 0 to 9 do
begin s[0][3]:= chr(i+48); writeln(s[0],ch,s[i],ch,ch1) end;
for i:= 5 to 9 do writeln(s[i]);
end.
неужто все настолько банально? это даже неинтересно...
На самом деле, это не так банально. Банально только тогда, когда перед глазами код, а в принципе - очень неплохая задача "для подумать".
банально - это вот как:
=)
10 LIST
=)
НЛО прилетело и опубликовало эту надпись здесь
в BASIC'е принята нумерация строк с интервалом в 10, начиная с 10. Это нужно для того, чтобы иметь возможность вставлять дополнительные строки без их перенумерации (возможность которой предусмотрена далеко не во всех версиях интерпретаторов).
и хотя в данном случае совершенно не имеет значения как именно будет пронумерованна строчка с оперетором LIST, для сохранения аутентичности кода следует использовать "10" как номер строки.
и хотя в данном случае совершенно не имеет значения как именно будет пронумерованна строчка с оперетором LIST, для сохранения аутентичности кода следует использовать "10" как номер строки.
ойойой, а чего так мног? там можно обойтись чем-то около 100 байт
Что ты открывать-то собрался? Есть скопилированный экзешник, откуда возьмутсы исходники, которые ты хочешь прочитать-то?
10 LIST
самый правильный язык - HQ9+, в нем это стандартная операция :)
JAPH^2 :)
http://en.wikipedia.org/wiki/JAPH
http://en.wikipedia.org/wiki/JAPH
Вот ещё пример такой программы:
>>+++++++>>++>>++++>>+++++++>>+>>++++>>+>>+++>>+>>+++++>>+>>++>>+
>>++++++>>++>>++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+
>>+++++>>+>>+>>+>>++++>>+++++++>>+>>+++++>>++++++++++++++>>+>>+>>
++++>>+++++++>>+>>+++++>>++>>+>>+>>++++>>+++++++>>+>>+++++>>+++++
++++++++++++++++++++++++>>+>>+>>++++>>+++++++>>+>>+++++>>++>>+>>+
>>+++++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>
>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>+>>++>>+>>++++++>>++
>>++++>>+++++++>>+>>+++++>>+++++++>>+>>+++++>>+>>+>>+>>++++>>+>>+
+>>+>>++++++>>+>>+++++>>+++++++>>+>>++++>>+>>+>>++>>+++++>>+>>+++
>>+>>++++>>+>>++>>+>>++++++>>+>>+++++>>+++++++++++++++++++>>++>>+
+>>+++>>++>>+>>++>>++++>>+++++++>>++>>+++++>>++++++++++>>+>>++>>+
+++>>+>>++>>+>>++++++>>++++++>>+>>+>>+++++>>+>>++++++>>++>>+++++>
>+++++++>>++>>++++>>+>>++++++[<<]>>[>++++++[-<<++++++++++>>]<<++.
.------------------->[-<.>>+<]>[-<+>]>]<<[-[-[-[-[-[-[>++>]<+++++
++++++++++++++++++++++++>]<++>]<++++++++++++++>]<+>]<++>]<<[->.<]<<]
Забавно .)
Вечный двигатель уже создан?)
отличный пример того, за что любят и ненавидят лари уола ))
Пакет CPAN Acme::EyeDrops даёт возможность любую программу преобразовать в чудесные картинки, похожие на приведённую в посте.
Предыдущий коммент содержал ссылку на пакет на CPAN'е, однако отрицательная карма, оказывается, плохо влияет на ссылки... Даю плэйнтекстом: http://search.cpan.org/~asavige/Acme-EyeDrops-1.52/lib/Acme/EyeDrops.pm
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Самовоспроизводящийся код.