Программа печати сомой себя ...

и задачки для интервью.
User avatar
viv
Уже с Приветом
Posts: 816
Joined: 10 Apr 2000 09:01

Программа печати сомой себя ...

Post by viv »

см сабж
User avatar
Kisena
Уже с Приветом
Posts: 1615
Joined: 12 Jul 2001 09:01
Location: Raleigh, NC

Программа печати сомой себя ...

Post by Kisena »

А среда и язык какой? А то в UNIX'e? например, можно создать файл self:
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code[quote:70bbd7d1c1]<pre>cat self</pre>[/quote:70bbd7d1c1]
Сменить права на 700 и все. [img:70bbd7d1c1]images/smiles/icon_smile.gif[/img:70bbd7d1c1]
Pavel
Уже с Приветом
Posts: 6549
Joined: 15 Apr 1999 09:01

Программа печати сомой себя ...

Post by Pavel »

Либо я чего-то не понял, либо одно из двух:

#!/usr/bin/perl
open(programfile, "/usr/printme.pl");
@data = <programfile>;
close(programfile);
print "@data\n";

Или смысл в том, чтобы программа определяла свое имя самостоятельно?
User avatar
lxf
Уже с Приветом
Posts: 13590
Joined: 04 Jul 2001 09:01
Location: Boston, MA

Программа печати сомой себя ...

Post by lxf »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Pavel:
<STRONG>Либо я чего-то не понял, либо одно из двух:
open(programfile, "/usr/printme.pl");
</STRONG><HR></BLOCKQUOTE>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.
Pavel
Уже с Приветом
Posts: 6549
Joined: 15 Apr 1999 09:01

Программа печати сомой себя ...

Post by Pavel »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by lxf:
<STRONG>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.</STRONG><HR></BLOCKQUOTE>

А. Значит, не понял..
Pavel
Уже с Приветом
Posts: 6549
Joined: 15 Apr 1999 09:01

Программа печати сомой себя ...

Post by Pavel »

Тогда сделаем так:

#!/usr/bin/perl
@data = <STDIN>;
print @data;

А запускать ее нужно так:

perl -w имя_программы.pl < имя_программы.pl

Переориентируем стандартный буфер ввода.. И вся недолга.
User avatar
viv
Уже с Приветом
Posts: 816
Joined: 10 Apr 2000 09:01

Программа печати сомой себя ...

Post by viv »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Pavel:
<STRONG>Либо я чего-то не понял, либо одно из двух:

#!/usr/bin/perl
open(programfile, "/usr/printme.pl");
@data = <programfile>;
close(programfile);
print "@data\n";

Или смысл в том, чтобы программа определяла свое имя самостоятельно?</STRONG><HR></BLOCKQUOTE>

эта программа
1) явно зависит от своего имени
2) полюзуется системными функциями чтения из файла
User avatar
du
Уже с Приветом
Posts: 1487
Joined: 03 Jul 2000 09:01
Location: Omsk->VA->CT->VA->FL->(Omsk<->VA)

Программа печати сомой себя ...

Post by du »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by lxf:
<STRONG>
Программа ничего читать не может. В своем теле она должна содержать последовательность операторов вывода, воспроизводящих на выходном устройстве свой собственный исходный текст.</STRONG><HR></BLOCKQUOTE>

Nu skazem tak:


void main()
{
char prog_txt[] =
"void main()"
"{"
" char prog_txt[] = \"%s\""
" printf(prog_txt, prog_txt);"
"}";
printf(prog_txt, prog_txt);
}


Pohoze na pravdu?
User avatar
viv
Уже с Приветом
Posts: 816
Joined: 10 Apr 2000 09:01

Программа печати сомой себя ...

Post by viv »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Pavel:
<STRONG>Тогда сделаем так:

#!/usr/bin/perl
@data = <STDIN>;
print @data;

А запускать ее нужно так:

perl -w имя_программы.pl < имя_программы.pl

Переориентируем стандартный буфер ввода.. И вся недолга.</STRONG><HR></BLOCKQUOTE>

в этом варианте большую чась работы выполняет специфичный способ вызова программы ... почему бы тогда уже в качестве программы имя_программы.pl не использовать "hello world"
а в качестве способа ее вызова:
cat имя_программы.pl

тоже работать будет ...

формально говоря lxf - совершенно прав в частности что -
"Программа ничего читать не может."
User avatar
viv
Уже с Приветом
Posts: 816
Joined: 10 Apr 2000 09:01

Программа печати сомой себя ...

Post by viv »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by du:
<STRONG>

Nu skazem tak:


void main()
{
char prog_txt[] =
"void main()"
"{"
" char prog_txt[] = \"%s\""
" printf(prog_txt, prog_txt);"
"}";
printf(prog_txt, prog_txt);
}


Pohoze na pravdu?</STRONG><HR></BLOCKQUOTE>
вот результат работы этой программы который я получил откомпилировав и запустив ее

void main(){ char prog_txt[] = "void main(){ char prog_txt[] = "%s" printf(prog_txt, prog_txt);}" printf(prog_txt, prog_txt);}

как видно он очень близок - но не повторяет в точности тело программы
User avatar
viv
Уже с Приветом
Posts: 816
Joined: 10 Apr 2000 09:01

Программа печати сомой себя ...

Post by viv »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Kisena:
<STRONG>А среда и язык какой? А то в UNIX'e? например, можно создать файл self:
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code[quote:214cbe7e72]<pre>cat self</pre>[/quote:214cbe7e72]
Сменить права на 700 и все. [img:214cbe7e72]images/smiles/icon_smile.gif[/img:214cbe7e72]</STRONG><HR></BLOCKQUOTE>

)) Вообще язык не оговорен как собственно и среда ... главноя - идея построения алгоритма с использованием базовых конструксий некоторого языка и операторам вывода на экран
ок - возмем для определенности язык C ( стандарт ). Код должен работать в любой среде и от имени программы не зависеть.
Системными функциями/вызовами ( кроме printf(...) конечно ) пользоваться нельзя.
User avatar
Melkor
Уже с Приветом
Posts: 1257
Joined: 03 Oct 2001 09:01
Location: Valinor->Utumno->Angband

Программа печати сомой себя ...

Post by Melkor »

Вообще, я никогда не понимал, почему эта задача считается сложной, или хотя бы "с подковыкой"...

#include <stdio.h>
char *code[] = {
"#include <stdio.h>",
"char *code[] = {",
"};void main(int argc, char* argv[]){",
"char s0[]={10,0},s1[]={34,0},s2[]={34,44,10,0},s3[]={34,10,0};",
"for(int i=0;i<2;i++) { printf(code[i]);printf(s0); }",
"for(i=0;i<8;i++) { printf(s1);printf(code[i]);printf(s2); }",
"printf(s1);printf(code[i]);printf(s3);",
"for(i=2;i<9;i++) { printf(code[i]);printf(s0); }",
"}"
};void main(int argc, char* argv[]){
char s0[]={10,0},s1[]={34,0},s2[]={34,44,10,0},s3[]={34,10,0};
for(int i=0;i<2;i++) { printf(code[i]);printf(s0); }
for(i=0;i<8;i++) { printf(s1);printf(code[i]);printf(s2); }
printf(s1);printf(code[i]);printf(s3);
for(i=2;i<9;i++) { printf(code[i]);printf(s0); }
}
User avatar
du
Уже с Приветом
Posts: 1487
Joined: 03 Jul 2000 09:01
Location: Omsk->VA->CT->VA->FL->(Omsk<->VA)

Программа печати сомой себя ...

Post by du »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Melkor:
[QB]Вообще, я никогда не понимал, почему эта задача считается сложной, или хотя бы "с подковыкой"...

QB]<HR></BLOCKQUOTE>

задача "с подковыкой" - napisat' Windows ne huze chem Microsoft. Predlagau vam ee reshit' na dosuge [img:2828b62aee]images/smiles/icon_smile.gif[/img:2828b62aee]
User avatar
Melkor
Уже с Приветом
Posts: 1257
Joined: 03 Oct 2001 09:01
Location: Valinor->Utumno->Angband

Программа печати сомой себя ...

Post by Melkor »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by du:
<STRONG>

задача "с подковыкой" - napisat' Windows ne huze chem Microsoft. Predlagau vam ee reshit' na dosuge [img:9ff09323f7]images/smiles/icon_smile.gif[/img:9ff09323f7]</STRONG><HR></BLOCKQUOTE>

Очевидная шутка в ответ - "подковыка" была бы, если бы требовалось написать Windows хуже, чем Microsoft. Но она несмешная, поэтому я так шутить не буду. [img:9ff09323f7]images/smiles/icon_smile.gif[/img:9ff09323f7]
Volant
Уже с Приветом
Posts: 1346
Joined: 22 Sep 2001 09:01
Location: Dallas TX, USA

Программа печати сомой себя ...

Post by Volant »

По-моему, вот простейшее решение этой задачи:

Пустая программа. Вообще ни одной строчки кода...

И печатает сама себя очень хорошо - только листки подавай (даже принтера не нужно)
[img:f29a294e7f]images/smiles/icon_smile.gif[/img:f29a294e7f] [img:f29a294e7f]images/smiles/icon_smile.gif[/img:f29a294e7f] [img:f29a294e7f]images/smiles/icon_razz.gif[/img:f29a294e7f]

[ 21-10-2001: Message edited by: Volant ]
User avatar
Melkor
Уже с Приветом
Posts: 1257
Joined: 03 Oct 2001 09:01
Location: Valinor->Utumno->Angband

Программа печати сомой себя ...

Post by Melkor »

<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by Volant:
<STRONG>По моему, вот простейшее решение этой задачи:

Пустая программа. Вообще ниодной строчки кода...

И печатает сама себя очень хорошо - только листки подавай (даже принтера не нужно)
[img:9124837aae]images/smiles/icon_smile.gif[/img:9124837aae] [img:9124837aae]images/smiles/icon_smile.gif[/img:9124837aae] [img:9124837aae]images/smiles/icon_razz.gif[/img:9124837aae]</STRONG><HR></BLOCKQUOTE>

А скомпилируется? Или, если даже копмиляция не нужна, это только круче? [img:9124837aae]images/smiles/icon_wink.gif[/img:9124837aae]
Geo
Posts: 10
Joined: 05 Oct 2001 09:01
Location: Харьков, Украина

Программа печати сомой себя ...

Post by Geo »

MS GW-Basic
10 a=1
.
any code
.
999 list

и все напечатается от и до

Return to “Головоломки”