программа распечатывающая сама себя
Сам напиши. Так даже интереснее. А на каком языке должна быть программа?
#!/bin/bash
cat $0
спасибо
PS: Это Бейсик
let q = '"';;
type str_entity = String of string | Char of char | PrList | CR;;
let program = [String "let q = '"; Char q; String "';;"; CR; String "type str_entity =
String of string | Char of char | Char cr;;"; CR; String "let program = [";
PrList; String "];;"; CR; String "let print_list list first = "; CR;
String " match list with"; CR; String " [] -> ";
CR; String " | (String str)::t -> (if (first == 0) then
(print_char '; ') else ; print_string "; Char q; String "String "; Char
q; String "; print_char q; print_string str; print_char c; print_list t
0)];;"; CR; String " | (Char _)::t -> (print_string "; Char
q; String "; Char q"; Char q; String "; print_list t 0);"; CR; String " |
(CR)::t -> (print_char '\n'; print_list t 0)"; CR; String " |
(PrList)::t -> (print_string "; Char q; String "; PrList"; Char q;
String "print_list t 0);;"; CR; String "let rec print list ="; CR;
String " match list with"; CR; String " [] -> ";
CR; String " | (String str)::t -> (print_string str; print
t)"; CR; String " | (Char c)::t -> (print_char c; print
t)"; CR; String " | (CR)::t -> (print_char '\n'; print t)";
CR; String " | (PrList) -> (print_list program 1; print
t);;"; CR; String "let main = print program;;"];;
let print_list list first =
match list with
[] ->
| (String str)::t -> (if (first == 0) then (print_char '; ') else ; print_string "String ";
print_char q; print_string str; print_char c; print_list t 0)
| (Char _)::t -> (print_string "; Char q"; print_list t 0);
| (CR)::t -> (print_char '\n'; print_list t 0)
| (PrList)::t -> (print_string "; PrList"; print_list t 0);;
let rec print list =
match list with
[] ->
| (String str)::t -> (print_string str; print t)
| (Char c)::t -> (print_char c; print t)
| (CR)::t -> (print_char '\n'; print t)
| (PrList) -> (print_list program 1; print t);;
let main = print program;
#!/bin/cat
Что типа такого:
Makefile который definит значение которое является телом программы на момент компиляции. Возможно придется сделать какую-то сериализацию. Эта значение распечатывается из программы.
> knave, эти проги однотипные и не интересные
Согласен, но не со всем. При наличии специфических ограничений все становиться достстаточно интересным. Даже проходят соревнования по их написанию.
#include<string.h>
void main{
int i,j;
char*a="#include<stdio.h>\n#include<string.h>\nvoid main{\n int i,j;\n char*a=%s%s%s;\n char b[1100];\n char*k=%s%s%s%s;\n char*s=%s%s%s%s;\n for(i=0,j=0;i<strlen(a);i++){\n switch(a){\n case '%sn':\n b[j]='%s%s';\n b[j+1]='n';\n j+=2;\n break;\n case '%s%s':\n b[j]='%s%s';\n b[j+1]='%s%s';\n j+=2;\n break;\n case '%s%s':\n b[j]='%s%s';\n b[j+1]='%s%s';\n j+=2;\n break;\n default:\n b[j]=a;\n j++;\n }\n }\n b[j]='%s0';\n printf(a,k,b,k,k,s,k,k,k,s,s,k,s,s,s,s,k,s,s,s,k,s,s,s,s,s,s,s);\n}";
char b[1100];
char*k="\"";
char*s="\\";
for(i=0,j=0;i<strlen(a);i++){
switch(a){
case '\n':
b[j]='\\';
b[j+1]='n';
j+=2;
break;
case '\"':
b[j]='\\';
b[j+1]='\"';
j+=2;
break;
case '\\':
b[j]='\\';
b[j+1]='\\';
j+=2;
break;
default:
b[j]=a;
j++;
}
}
b[j]='\0';
printf(a,k,b,k,k,s,k,k,k,s,s,k,s,s,s,s,k,s,s,s,k,s,s,s,s,s,s,s);
}
Так получается тоже можно?
#include <stdio.h>
int main
{
FILE *fp=fopen(__FILE__,"r");
char c;
while(!feof(fp
{
c=fgetc(fp);
putchar(c);
}
fclose(fp);
}
Нельзя. На момент запуска программы, исходников уже может не быть
Один из IOCCC'2000 Winners.
Инструкция:
исходник сохранить как saitou.c
Selected Author's Comments:
This one is dedicated to Saitou Hajime fans ^_^x
Instead of making one self reproducing program, what I made was a
program that generates a set of mutually reproducing programs, all of
them with cool layout!
For your enjoyment:
1. Compile saitou.c
2. Run a.out and pipe output to another .c file
3. Compile that file
4. Repeat steps 2 and 3 until eventually the output cycles
Ну и сам исходник:
#define/**/X
char*d="X0[!4cM,!"
"4cK`*!4cJc(!4cHg&!4c$j"
"8f'!&~]9e)!'|:d+!)rAc-!*m*"
":d/!4c(b4e0!1r2e2!/t0e4!-y-c6!"
"+|,c6!)f$b(h*c6!(d'b(i)d5!(b*a'`&c"
")c5!'b+`&b'c)c4!&b-_$c'd*c3!&a.h'd+"
"d1!%a/g'e+e0!%b-g(d.d/!&c*h'd1d-!(d%g)"
"d4d+!*l,d7d)!,h-d;c'!.b0c>d%!A`Dc$![7)35E"
"!'1cA!2kE`*!-d(!(k(f//g&!)f.e5'f(!+a+)"
"f%2g*!?f5f,!=f-*e/!<d6e1!9e0'f3!6f)-g5!4d*b"
"+e6!0f%k)d7!+~^'c7!)z/d-+!'n%a0(d5!%c1a+/d4"
"!2)c9e2!9b;e1!8b>e/! 7cAd-!5fAe+!7fBe(!"
"8hBd&!:iAd$![7S,Q0!1 bF 7!1b?'_6!1c,8b4"
"!2b*a,*d3!2n4f2!${4 f. '!%y4e5!&f%"
"d-^-d7!4c+b)d9!4c-a 'd :!/i('`&d"
";!+l'a+d<!)l*b(d=!' m- a &d>!&d'"
"`0_&c?!$!$!$ b < ^&d$`"
":!$d9_&l++^$!%f3a' n1 _ $ !&"
"f/c(o/_%!(f+c)q*c %! * f &d+"
"f$s&!-n,d)n(!0i- c- k) ! 3d"
"/b0h*!H`7a,![7* i] 5 4 71"
"[=ohr&o*t*q*`*d *v *r ; 02"
"7*~=h./}tcrsth &t : r 9b"
"].,b-725-.t--// #r [ < t8-"
"752793? <.~;b ].t--+r / # 53"
"7-r[/9~X .v90 <6/<.v;-52/={ k goh"
"./}q; u vto hr `.i*$engt$ $ ,b"
";$/ =t ;v; 6 =`it.`;7=` : ,b-"
"725 = / o`. .d ;b]`--[/+ 55/ }o"
"`.d : - ?5 / }o`.' v/i]q - "
"-[; 5 2 =` it . o;53- . "
"v96 <7 / =o : d =o"
"--/i ]q-- [; h. / = "
"i]q--[ ;v 9h ./ < - "
"52={cj u c&` i t . o ; "
"?4=o:d= o-- / i ]q - "
"-[;54={ cj uc& i]q - -"
"[;76=i]q[;6 =vsr u.i / ={"
"BihY_gha \0 " , o [
3217];int i, r,w,f , b ,x ,
p;n{return r <X X X X X
768?d[X(143+ X r++ + *d ) %
768]:r>2659 ? 59: ( x = d
[(r++-768)% X 947 + 768] ) ?
x^(p?6:0):(p = 34 X X X )
;}s{for(x= n ; ( x^ ( p
?6:0==32;x= n ) ;return x ; }
void/**/main X { r = p
=0;w=sprintf (X X X X X X o
,"char*d="); for ( f=1;f < * d
+143;)if(33-( b=d [ f++ X ] )
){if(b<93){if X(! p ) o
[w++]=34;for X(i = 35 +
(p?0:1);i<b; i++ ) o
[w++]=s;o[ w++ ]
=p?s:34;} else X
{for(i=92; i<b; i
++)o[w++]= 32;} }
else o [w++ ]
=10;o [
w]=0 ;
puts(o);}
кстати, было бы интересно узнать, что означают эти иероглифы в переводе
const q=#39;var s,t:String;begin s:='const q=#39;var s,t:String;begin s:=';t:=';Writeln(s,q,s,q,#59#116#58q,t,q,t);end.';Writeln(s,q,s,q,#59#116#58q,t,q,t);
хыхы, офигенный код
“Then Dennis and Brian worked on a truly warped version of Pascal,
called “A.” When we found others were actually trying to create real
programs with A, we quickly added additional cryptic features and
evolved into B, BCPL, and finally C. We stopped when we got a
clean compile on the following syntax:
for(;P("\n"R=;P("|"for(e=C;e=P("_"+(*u++/8)%2P("|"+(*u/4)%2);
(c) Ken Thompson, Unix Haters Handbook
[i]
тогда
#!/bin/cat
и
#!/bin/sh
cat $0
я думаю не прокатят.
void main
{
char txt[256];
strcpy(txt,"printf(\"#include <string.h> void main { char txt[256]; txt=\"%s\"; %s }\",txt,txt);");
printf("#include <string.h>\nvoid main\n{\nchar txt[256];\nstrcpy(txt,\"%s\");\n%s\n}",txt,txt);
}
а программирую я хуйово
Оставить комментарий
Elen13
мб кто-нить напомнит сабж?вроде пару лет назад в форуме проскакивали тексты