Esoterische Programmiersprachen
-
Habt Ihr euch mal damit beschäftigt? So Sprachen wie Brainfuck oder Ook (Brainfuck for Orang Utans)? Vor allem bei Ook musste ich laut lachen als ich mir einen Raum mit Programmierern vorstellte, die sich gegenseitig den Source-Code vorlesen... wahaha
Aber angetan hat es mir SPL: Shakespear Programming Language:
http://shakespearelang.sourceforge.net/Was denkt Ihr so darüber?
Schonmal aus Fun ein Programm mit so einer Sprache entwickelt?
rya.
-
sinnloser thread...
-
In Brainfuck habe ich mal für einen Wettbewerb, wo die Programmiersprache freigestellt war, ein Programm geschrieben. Es fing nämlich so an, daß für jede Sprache einzeln der erste Platz einen Preis bekommt. Bei Brainfuck haben sie dann aber eine Ausnahme gemacht und mich geschnitten.
Ich hab sie sogar noch, gregor.bf:PUSH64 >++++[->++++<]>[-<++++>]< E +++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< i ++++. n +++++. g -------. a ------. b +. e +++. PUSH32 >++[->++++<]>[-<++++>]< space .[-]< i ++++. m ++++. PUSH32 >++[->++++<]>[-<++++>]< space .[-]< PUSH32 >++[->++++<]>[-<++++>]< SUB [-<->]< F -------. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< o +++++++++. r +++. m -----. a ------------. t +++++++++++++++++++. PUSH32 >++[->++++<]>[-<++++>]< space .[-]< POP [-]< PUSH48 >+++[->++++<]>[-<++++>]< 0 . 5 +++++. 0 -----. 8 ++++++++. 1 -------. 9 ++++++++. 7 --. 6 -. : ++++. PUSH32 >++[->++++<]>[-<++++>]< space .[-]< PUSH0 ungueltig > PUSH0 tage > READDOUBLEDIGIT >,>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++<]>[-<++++>]<[-<->]<[-<+>]< READDOUBLEDIGIT >,>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++<]>[-<++++>]<[-<->]<[-<+>]< READDOUBLEDIGIT >,>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++<]>[-<++++>]<[-<->]<[-<+>]< READDOUBLEDIGIT >,>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++<]>[-<++++>]<[-<->]<[-<+>]< //////////////////////////////////////////////////////////////////////////////// //eigabe testen //schaltjahr=0 PUSH0 schaltjahr > //layout: ungueltig=0 tage tag monat jhd jahr schaltjahr //if not jahr%0 schaltjahr=1 DUP1 jahr2 <[->>+>+<<<]>>>[-<<<+>>>]< PUSH4 >++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< NOT >+<[[-]>-<]>[-<+>]< ADD [-<+>]< //if not jahr schaltjahr=0 DUP1 jahr2 <[->>+>+<<<]>>>[-<<<+>>>]< NOT >+<[[-]>-<]>[-<+>]< SUB [-<->]< //calc jhd%4!=0 DUP2 jhd <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< PUSH4 >++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< //calc jahr!=0 DUP2 jahr <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< //calc jahr!=0 or jhd%4!=0 ADD [-<+>]< //calc jahr==0 and jhd%4==0 NOT >+<[[-]>-<]>[-<+>]< //if jahr==0 and jhd%4==0 then schaltjahr=1 ADD [-<+>]< //if jahr==0 and jhd==0 then ungueltig=1 DUP2 jhd <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< DUP2 jahr <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< ADD [-<+>]< NOT >+<[[-]>-<]>[-<+>]< add to ungueltig [-<<<<<<<+>>>>>>>]< PUSH0 monatstage > //layout: ungueltig=0 tage tag monat jhd jahr schaltjahr monatstage DUP4 monat2 <<<<[->>>>>+>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]< //januar DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> monatstage=31 ++++[-<<++++++++>>]<<->> ENDIF ] POP0 < //februar DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> SUB monatstage 3 <<--->> DUP3 schaltjahr <<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]< add schaltjahr to mt [-<<<+>>>] POP0 < ENDIF ] POP0 < //maerz DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> ADD monatstage 3 <<+++>> DUP3 schaltjahr <<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]< sub schaltjahr from mt [-<<<->>>] POP0 < ENDIF ] POP0 < //april DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> sub monatstage 1 <<->> ENDIF ] POP0 < //mai DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> add monatstage 1 <<+>> ENDIF ] POP0 < //juni DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> sub monatstage 1 <<->> ENDIF ] POP0 < //juli DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> add monatstage 1 <<+>> ENDIF ] POP0 < //august DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> add monatstage 0 ENDIF ] POP0 < //september DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> sub monatstage 1 <<->> ENDIF ] POP0 < //oktober DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> add monatstage 1 <<+>> ENDIF ] POP0 < //november DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> sub monatstage 1 <<->> ENDIF ] POP0 < //dezember DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> add monatstage 1 <<+>> ENDIF ] POP0 < //zu gross DUP0 [->+>+<<]>>[-<<+>>]< IF [[-] DEC monat2 <-> monatstage=0 <<[-]>> ENDIF ] POP0 < POP monat2 [-]< //if monatstage==0 then ungueltig=1 DUP0 monatstage [->+>+<<]>>[-<<+>>]< NOT >+<[[-]>-<]>[-<+>]< IF [[-] ungueltig=1 <<<<<<<<+>>>>>>>> ENDIF ] POP0 < //layout: ungueltig tage tag monat jhd jahr schaltjahr monatstage //if tag groesser monatstage then ungueltig=1 DUP5 tag2 <<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]< WHILE tag2 [ DUP1 monatstage2 <[->>+>+<<<]>>>[-<<<+>>>]< NOT monatstage2 >+<[[-]>-<]>[-<+>]< IF [[-] monatstage=1 <<+>> ungueltig=1 <<<<<<<<<+>>>>>>>>> ENDIF ] POP0 monatstage2 < DEC monatstage <-> DEC tag2 - ENDWHILE tag2 ] POP0 tag2 < POP monatstage [-]< POP schaltjahr [-]< // fertig mit eingabe testen //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // tag berechnen //layout: tage=0 tag monat jhd jahr PUSH1 tmp >+ //if monat kleiner 3 dec jahr DUP3 monat2 <<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]< IF monat2 [ DEC monat2 - IF monat2 [ DEC monat2 - IF monat2 [ DEC monat2 - DEC tmp <-> CLEAR monat [-] ENDIF monat ] ENDIF monat ] ENDIF monat ] POPZERO monat < IF tmp [[-] go jahr < DUP0 jahr2 [->+>+<<]>>[-<<+>>]< NOT jahr2 >+<[[-]>-<]>[-<+>]< IF not jahr2 [[-] go jahr < //jahr=100 ADD10 ++++++++++ MUL10 [->++<]>[-<+++++>]< DEC jhd <-> go not jahr2 > ENDIF not jahr2 ] DEC jahr <-> go tmp ENDIF tmp ] POP0 tmp < //jahre mal 1 dazuzaehlen //365==1 was wochentage angeht DUP0 jahr [->+>+<<]>>[-<<+>>]< PUSH7 >+++++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< add to tage [-<<<<<+>>>>>]< //schaltjahre wegen /4 dazuzaehlen DUP0 jahr [->+>+<<]>>[-<<+>>]< PUSH4 >++++ DIV [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-]<[-<<+>>]<[-]< PUSH7 >+++++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< add to tage [-<<<<<+>>>>>]< //jahrhunderte mal 5 dazuzaehlen DUP1 jhd <[->>+>+<<<]>>>[-<<<+>>>]< PUSH7 >+++++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< add to tage [-<<<<<+++++>>>>>]< //damit das abziehen immer klappt 7 zu den tagen dazu PUSH7 >+++++++ add to tage [-<<<<<+>>>>>]< //schaltjahre wegen /400 dazuzaehlen DUP1 jhd <[->>+>+<<<]>>>[-<<<+>>>]< PUSH4 >++++ DIV [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-]<[-<<+>>]<[-]< PUSH7 >+++++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< add to tage [-<<<<<+>>>>>]< PUSH0 monatstage > DUP3 monat <<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]< //noch kein monat vergangen DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 0 ENDIF monat2 ] POP0 monat2 < //januar ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 3 <<+++>> ENDIF monat2 ] POP0 monat2 < //februar ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> //eigentlich 0 aber mit jahresausgleich SUB monatstage 1 <<->> ENDIF monat2 ] POP0 monat2 < //maerz ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 3 <<+++>> ENDIF monat2 ] POP0 monat2 < //april ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 2 <<++>> ENDIF monat2 ] POP0 monat2 < //mai ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 3 <<+++>> ENDIF monat2 ] POP0 monat2 < //juni ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 2 <<++>> ENDIF monat2 ] POP0 monat2 < //juli ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 3 <<+++>> ENDIF monat2 ] POP0 monat2 < //august ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 3 <<+++>> ENDIF monat2 ] POP0 monat2 < //september ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 2 <<++>> ENDIF monat2 ] POP0 monat2 < //oktober ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 3 <<+++>> ENDIF monat2 ] POP0 monat2 < //november ist um DUP0 monat2 [->+>+<<]>>[-<<+>>]< IF monat2 [[-] DEC monat <-> ADD monatstage 2 <<++>> ENDIF monat2 ] POP0 monat2 < POP monat [-]< PUSH7 >+++++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< add monatstage to tage [-<<<<<+>>>>>]< DUP3 tag2 <<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]< add tag2 to tage [-<<<<<+>>>>>]< POP jahr [-]< POP jhd [-]< POP monat [-]< POP tag [-]< PUSH7 >+++++++ MOD [->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]< // fertig mit tag berechnen //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // ausgabe //layout: ungueltig wochentag SWAP [->+<]<[->+<]>>[-<<+>>]< //layout: wochentag ungueltig IF ungueltig [[-] go wochentag < wochentag=7 [-]+++++++ go ungueltig > ENDIF ] POP0 ungueltig < PUSH1 weiter=1 >+ //layout: wochentag weiter DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< S +++++++++++++++++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< o ----. n -. n . t ++++++. a -------------------. g ++++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DEC wochentag <<->> DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< M +++++++++++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< o ++. n -. t ++++++. a -------------------. g ++++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DEC wochentag <<->> DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< D ++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< i +++++. e ----. n +++++++++. s +++++. t +. a -------------------. g ++++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DEC wochentag <<->> DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< M +++++++++++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< i ----. t +++++++++++. t . w +++. o --------. c ------------. h +++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DEC wochentag <<->> DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< D ++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< o +++++++++++. n -. n . e ---------. r +++++++++++++. s +. t +. a -------------------. g ++++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DEC wochentag <<->> DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< F ++++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< r ++++++++++++. e -------------. i ++++. t +++++++++++. a -------------------. g ++++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DEC wochentag <<->> DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< S +++++++++++++++++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< a ------------------. m ++++++++++++. s ++++++. t +. a -------------------. g ++++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < DUP0 weiter1 [->+>+<<]>>[-<<+>>]< IF weiter1 [[-] DEC wochentag <<->> DUP2 wochentag1 <<[->>>+>+<<<<]>>>>[-<<<<+>>>>]< NOT >+<[[-]>-<]>[-<+>]< IF not wochentag1 [[-] PUSH64 >++++[->++++<]>[-<++++>]< F ++++++. PUSH32 >++[->++++<]>[-<++++>]< ADD [-<+>]< e -. h +++. l ++++. e -------. r +++++++++++++. POP [-]< weiter=0 <<->> ENDIF wochentag1 ] POP0 wochentag1 < ENDIF weiter1 ] POP0 weiter1 < POP weiter [-]< POP wochentag [-]< PUSH10 >++++++++++ WRITECHAR .[-]< // fertig mit ausgabe ////////////////////////////////////////////////////////////////////////////////