Ach das war gemeint.
Das habe ich auch mal zu Schulzeiten umgesetzt. Auf dem C64, in BASIC. Mal die Diskette raus suchen… Liegt in drei Versionen vor. Einmal für das Programm ”basic assembler”, was der eigentliche Quelltext war, den ich eingegeben hatte, ohne Zeilennummern, dafür mit Labeln, und der hat das dann zu einem normalen CBM BASIC-Programm ”übersetzt”:
[codebox=locobasic file=Unbenannt.txt] 2 poke 53280,6:poke 53281,14
4 dim z1(39),z2(39),er(39)
6 print "{blue}{clear}{lower case}{up/lo lock on}{down} Palindrom oder 'Das 196-Problem'"
8 print "{down} Bitte geben Sie eine zwei- oder mehr-"
10 print "{down} stellige Zahl ein !!!"
12 print "{down}>";
14 poke 19,1
16 input e$
18 poke 19,0
20 l=len(e$)
22 if l<2 or l>20 then run
24 for i=1 to l
26 z1(39-l+i)=asc(mid$(e$,i,1))-48
28 next
30 print "{clear}";
32 print tab(39-l);
34 for i=40-l to 39
36 print chr$(z1(i)+48);
38 next
40 for i=1 to l
42 z2(39-l+i)=z1(40-i)
44 next
46 print:print tab(39-l);
48 for i=40-l to 39
50 print chr$(z2(i)+48);
52 next
54 print:print tab(39-l);
56 for i=1 to l
58 print "{shift asterisk}";
60 next
62 ue=0
64 for i=0 to l-1
66 er(39-i)=z1(39-i)+z2(39-i)+ue
68 ue=int(er(39-i)/10)
70 if ue>0 then er(39-i)=er(39-i)-ue*10
72 next
74 if ue>0 then l=l+1:er(40-l)=ue
76 print:print tab(39-l);
78 for i=40-l to 39
80 print chr$(er(i)+48);
82 next
84 ue=0
86 for i=0 to int(l/2)
88 if er(40-l+i)<>er(39-i) then ue=ue+1
90 next
92 if ue=0 then end
94 if l=39 then print:print "{down}Nicht mit 39 Stellen loesbar !!!":end
96 for i=0 to l
98 z1(39-i)=er(39-i)
100 next
102 goto40[/code]
Und das dann durch ein Programm gejagt das überflüssige Leerzeichen entfernt und Zeilen zusammenfasst und dabei so viel wie möglich in jede Zeile quetscht. Teilweise mehr als man manuell über den BASIC-Editor vom C64 eingeben kann, denn der Zeilenpuffer dort ist 80 Zeichen lang, technisch kann der BASIC-Interpreter aber mit Zeilen umgehen in denen bis zu 255 Bytes stecken.
[codebox=locobasic file=Unbenannt.txt] 2 poke53280,6:poke53281,14:dimz1(39),z2(39),er(39):print"{blue}{clear}{lower case}{up/lo lock on}{down} Palindrom oder 'Das 196-Problem'":print"{down} Bitte geben Sie eine zwei- oder mehr-":print"{down} stellige Zahl ein !!!":print"{down}>";:poke19,1:inpute$:poke19,0:l=len(e$):ifl<2orl>20thenrun
24 fori=1tol:z1(39-l+i)=asc(mid$(e$,i,1))-48:next:print"{clear}";:printtab(39-l);:fori=40-lto39:printchr$(z1(i)+48);:next
40 fori=1tol:z2(39-l+i)=z1(40-i):next:print:printtab(39-l);:fori=40-lto39:printchr$(z2(i)+48);:next:print:printtab(39-l);:fori=1tol:print"{shift asterisk}";:next:ue=0:fori=0tol-1:er(39-i)=z1(39-i)+z2(39-i)+ue:ue=int(er(39-i)/10):ifue>0thener(39-i)=er(39-i)-ue*10
72 next:ifue>0thenl=l+1:er(40-l)=ue
76 print:printtab(39-l);:fori=40-lto39:printchr$(er(i)+48);:next:ue=0:fori=0toint(l/2):ifer(40-l+i)<>er(39-i)thenue=ue+1
90 next:ifue=0thenend
94 ifl=39thenprint:print"{down}Nicht mit 39 Stellen loesbar !!!":end
96 fori=0tol:z1(39-i)=er(39-i):next:goto40[/code]
Eine Implementierung in Assembler müsste ich auch noch irgendwo haben.