Programming in Beatnik¶
In this Notebook you can tokenize your text, compute its scrabble values and interpret it as Beatnik Code.
1. set variables (strings)¶
read your text into the machine and output again in the same way with the print
command.
# paste your text in between the apostrophes ''' YOUR TEXT '''
text = '''
Man sagt, dass alle Übersetzungen nur für den Leser sind. Werke dienen nur der Hörerschaft. Oder? Kunstwerk: Übel. Wenn Dasein erste Dichterische ist, dann Leben genug für eines schlechte. Scheint grade genug: translate. Denn unentbehrlich, denn vertauschbar. Selbe, Gemeinten, selbe mit Kunstwerke ohne einander. Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue also Gottes sinn frage. bis hinreichend Leser erwägen, tongue teilt apodiktisch. Bild scheint einem Original. Oder sagt man, Übersetzer sollten mit Sinn überdies Übel Dasein, denn Grund gibt Gewissen genug unter Rücksicht dessen beiden. Bis hinreichend Leser erwägen, Bild gilt Übermittlung. Leben enthalten Leben oder sie Leben voraus. Erste entsprechend allen wirklich allen Kunstwerk weil sehr besteht genug, sagt man nirgends daher. Einer Augenblick unter Symphonie oder man will tongue Gewissen. Dasein bis fruchtbar gilt, die. Sollten Dasein translate. Allen sind Leser hinreichend genug. Werke stellen keinem genug, dass nur nicht Kunst. Bis hinreichend Leser erwägen, tongue teilt apodiktisch. Bild scheint einem Original. Einer Rücksicht seine Aussage Grade besteht. In der Bild forderte Bild Form. Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue, also Gottes sinn frage. Man sagt, dass alle Übersetzungen nur für den Leser sind. Genug, denn gegenüber gibt es eines: Dichtung. tongue teilt doppelsinnig, tongue teilt mutter tongue, macht übel oder grundsätzlich nicht. translate.
'''
print("\033[1m" + 'Text: ' + "\033[0m", text)
Text:
Man sagt, dass alle Übersetzungen nur für den Leser sind. Werke dienen nur der Hörerschaft. Oder? Kunstwerk: Übel. Wenn Dasein erste Dichterische ist, dann Leben genug für eines schlechte. Scheint grade genug: translate. Denn unentbehrlich, denn vertauschbar. Selbe, Gemeinten, selbe mit Kunstwerke ohne einander. Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue also Gottes sinn frage. bis hinreichend Leser erwägen, tongue teilt apodiktisch. Bild scheint einem Original. Oder sagt man, Übersetzer sollten mit Sinn überdies Übel Dasein, denn Grund gibt Gewissen genug unter Rücksicht dessen beiden. Bis hinreichend Leser erwägen, Bild gilt Übermittlung. Leben enthalten Leben oder sie Leben voraus. Erste entsprechend allen wirklich allen Kunstwerk weil sehr besteht genug, sagt man nirgends daher. Einer Augenblick unter Symphonie oder man will tongue Gewissen. Dasein bis fruchtbar gilt, die. Sollten Dasein translate. Allen sind Leser hinreichend genug. Werke stellen keinem genug, dass nur nicht Kunst. Bis hinreichend Leser erwägen, tongue teilt apodiktisch. Bild scheint einem Original. Einer Rücksicht seine Aussage Grade besteht. In der Bild forderte Bild Form. Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue, also Gottes sinn frage. Man sagt, dass alle Übersetzungen nur für den Leser sind. Genug, denn gegenüber gibt es eines: Dichtung. tongue teilt doppelsinnig, tongue teilt mutter tongue, macht übel oder grundsätzlich nicht. translate.
2. replace Umlaute¶
import re
text=text.replace("ä","ae").replace("Ä","Ae").replace("ö","oe").replace("Ö","oe").replace("ü","ue").replace("Ü","ue")
print(text)
Man sagt, dass alle uebersetzungen nur fuer den Leser sind. Werke dienen nur der Hoererschaft. Oder? Kunstwerk: uebel. Wenn Dasein erste Dichterische ist, dann Leben genug fuer eines schlechte. Scheint grade genug: translate. Denn unentbehrlich, denn vertauschbar. Selbe, Gemeinten, selbe mit Kunstwerke ohne einander. Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue also Gottes sinn frage. bis hinreichend Leser erwaegen, tongue teilt apodiktisch. Bild scheint einem Original. Oder sagt man, uebersetzer sollten mit Sinn ueberdies uebel Dasein, denn Grund gibt Gewissen genug unter Ruecksicht dessen beiden. Bis hinreichend Leser erwaegen, Bild gilt uebermittlung. Leben enthalten Leben oder sie Leben voraus. Erste entsprechend allen wirklich allen Kunstwerk weil sehr besteht genug, sagt man nirgends daher. Einer Augenblick unter Symphonie oder man will tongue Gewissen. Dasein bis fruchtbar gilt, die. Sollten Dasein translate. Allen sind Leser hinreichend genug. Werke stellen keinem genug, dass nur nicht Kunst. Bis hinreichend Leser erwaegen, tongue teilt apodiktisch. Bild scheint einem Original. Einer Ruecksicht seine Aussage Grade besteht. In der Bild forderte Bild Form. Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue, also Gottes sinn frage. Man sagt, dass alle uebersetzungen nur fuer den Leser sind. Genug, denn gegenueber gibt es eines: Dichtung. tongue teilt doppelsinnig, tongue teilt mutter tongue, macht uebel oder grundsaetzlich nicht. translate.
3. remove punctations and digits¶
# Our dictionary (https://en.wikipedia.org/wiki/Associative_array) SCRABBLE in part 6.
# contains only alphabetical characters, so we will remove all digits and punctuations.
remove_digits = str.maketrans('', '', '0123456789')
text = text.translate(remove_digits)
# import necessary library
import re
textt = re.sub(r'[^\w\s]','',text)
print("\033[1m" + 'Text without punctations: ' + "\033[0m", textt)
Text without punctations:
Man sagt dass alle uebersetzungen nur fuer den Leser sind Werke dienen nur der Hoererschaft Oder Kunstwerk uebel Wenn Dasein erste Dichterische ist dann Leben genug fuer eines schlechte Scheint grade genug translate Denn unentbehrlich denn vertauschbar Selbe Gemeinten selbe mit Kunstwerke ohne einander Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue also Gottes sinn frage bis hinreichend Leser erwaegen tongue teilt apodiktisch Bild scheint einem Original Oder sagt man uebersetzer sollten mit Sinn ueberdies uebel Dasein denn Grund gibt Gewissen genug unter Ruecksicht dessen beiden Bis hinreichend Leser erwaegen Bild gilt uebermittlung Leben enthalten Leben oder sie Leben voraus Erste entsprechend allen wirklich allen Kunstwerk weil sehr besteht genug sagt man nirgends daher Einer Augenblick unter Symphonie oder man will tongue Gewissen Dasein bis fruchtbar gilt die Sollten Dasein translate Allen sind Leser hinreichend genug Werke stellen keinem genug dass nur nicht Kunst Bis hinreichend Leser erwaegen tongue teilt apodiktisch Bild scheint einem Original Einer Ruecksicht seine Aussage Grade besteht In der Bild forderte Bild Form Leser hinreichend bis wesentliche Dasein besteht bis geheimnisvolle tongue also Gottes sinn frage Man sagt dass alle uebersetzungen nur fuer den Leser sind Genug denn gegenueber gibt es eines Dichtung tongue teilt doppelsinnig tongue teilt mutter tongue macht uebel oder grundsaetzlich nicht translate
4. tokenize it!¶
words = textt.split()
print("\033[1m" + 'Tokenized Text: ' + "\033[0m", words)
Tokenized Text: ['Man', 'sagt', 'dass', 'alle', 'uebersetzungen', 'nur', 'fuer', 'den', 'Leser', 'sind', 'Werke', 'dienen', 'nur', 'der', 'Hoererschaft', 'Oder', 'Kunstwerk', 'uebel', 'Wenn', 'Dasein', 'erste', 'Dichterische', 'ist', 'dann', 'Leben', 'genug', 'fuer', 'eines', 'schlechte', 'Scheint', 'grade', 'genug', 'translate', 'Denn', 'unentbehrlich', 'denn', 'vertauschbar', 'Selbe', 'Gemeinten', 'selbe', 'mit', 'Kunstwerke', 'ohne', 'einander', 'Leser', 'hinreichend', 'bis', 'wesentliche', 'Dasein', 'besteht', 'bis', 'geheimnisvolle', 'tongue', 'also', 'Gottes', 'sinn', 'frage', 'bis', 'hinreichend', 'Leser', 'erwaegen', 'tongue', 'teilt', 'apodiktisch', 'Bild', 'scheint', 'einem', 'Original', 'Oder', 'sagt', 'man', 'uebersetzer', 'sollten', 'mit', 'Sinn', 'ueberdies', 'uebel', 'Dasein', 'denn', 'Grund', 'gibt', 'Gewissen', 'genug', 'unter', 'Ruecksicht', 'dessen', 'beiden', 'Bis', 'hinreichend', 'Leser', 'erwaegen', 'Bild', 'gilt', 'uebermittlung', 'Leben', 'enthalten', 'Leben', 'oder', 'sie', 'Leben', 'voraus', 'Erste', 'entsprechend', 'allen', 'wirklich', 'allen', 'Kunstwerk', 'weil', 'sehr', 'besteht', 'genug', 'sagt', 'man', 'nirgends', 'daher', 'Einer', 'Augenblick', 'unter', 'Symphonie', 'oder', 'man', 'will', 'tongue', 'Gewissen', 'Dasein', 'bis', 'fruchtbar', 'gilt', 'die', 'Sollten', 'Dasein', 'translate', 'Allen', 'sind', 'Leser', 'hinreichend', 'genug', 'Werke', 'stellen', 'keinem', 'genug', 'dass', 'nur', 'nicht', 'Kunst', 'Bis', 'hinreichend', 'Leser', 'erwaegen', 'tongue', 'teilt', 'apodiktisch', 'Bild', 'scheint', 'einem', 'Original', 'Einer', 'Ruecksicht', 'seine', 'Aussage', 'Grade', 'besteht', 'In', 'der', 'Bild', 'forderte', 'Bild', 'Form', 'Leser', 'hinreichend', 'bis', 'wesentliche', 'Dasein', 'besteht', 'bis', 'geheimnisvolle', 'tongue', 'also', 'Gottes', 'sinn', 'frage', 'Man', 'sagt', 'dass', 'alle', 'uebersetzungen', 'nur', 'fuer', 'den', 'Leser', 'sind', 'Genug', 'denn', 'gegenueber', 'gibt', 'es', 'eines', 'Dichtung', 'tongue', 'teilt', 'doppelsinnig', 'tongue', 'teilt', 'mutter', 'tongue', 'macht', 'uebel', 'oder', 'grundsaetzlich', 'nicht', 'translate']
5. set scrabble + beatnik-function dictionaries¶
SCRABBLE = {
'A': 1,
'B': 3,
'C': 3,
'D': 2,
'E': 1,
'F': 4,
'G': 2,
'H': 4,
'I': 1,
'J': 8,
'K': 5,
'L': 1,
'M': 3,
'N': 1,
'O': 1,
'P': 3,
'Q': 10,
'R': 1,
'S': 1,
'T': 1,
'U': 1,
'V': 4,
'W': 4,
'X': 8,
'Y': 4,
'Z': 10
}
ACTION = {
5: 'PUSH',
6: 'DISCARD',
7: 'ADD',
8: 'INPUT',
9: 'OUTPUT',
10: 'SUBTRACT',
11: 'SWAP',
12: 'DUP',
13: 'SKIP_AHEAD_ZERO',
14: 'SKIP_AHEAD_NONZERO',
15: 'SKIP_BACK_ZERO',
16: 'SKIP_BACK_NONZERO',
17: 'STOP',
}
# counting-function...
def scrabble(word):
acc = 0
for c in word.upper():
# check if c exists in scrabble (otherwise we'll get an error)
if c in SCRABBLE:
acc += SCRABBLE[c]
return acc
The following table describes the meaning of the ACTIONS (see above).
Score |
Pseudo-Code |
Description |
---|---|---|
<5 |
NOOP |
Does nothing. The Beatnik Interpreter may mock you for your poor scoring, at its discretion. |
5 n |
push(n) |
Finds the score of the next word and push it onto the stack. |
6 |
pop(n) |
Pops the top number off the stack and discards it. |
7 |
push(pop()+pop()) |
Adds the top two values on the stack together |
8 |
push(input()) |
Input a character from the user and push its value on the stack. Waits for a keypress. |
9 |
print(pop()) |
Pop a number off the stack and output the corresponding ASCII character to the screen. |
10 |
push(pop()-pop()) |
Pop two numbers from the stack, subtract the first one popped from the second one popped, and push the result. |
11 |
a = pop(); b = pop(); push(a); push(b) |
Swap the top two values on the stack. |
12 |
a = pop(); push(a); push(a) |
Duplicate the top value and pushes the value on top of the stack. |
13 n |
if(top()==0) jump(+n) |
Pop a number from the stack, and figure out the score of the next word. |
14 n |
if(top()!=0) jump(+n) |
Same as above, except skip if the value on the stack isn’t zero. |
15 |
if(top()==0) jump(-n) |
Skip back n words, if the value on the stack is zero. |
16 |
if(top()!=0) jump(-n) |
Skip back if it’s not zero. |
17 |
exit() |
Stop the program. |
18-23 |
NOOP |
Does nothing. However, the score is high enough that the Beatnik Interpreter will not mock you, unless it’s had a really bad day. |
>23 |
Generates “Beatnik applause” for the programmer. |
6. print out the scrabble-values + beatnik-functions¶
#setup array of value
VALUE = []
#counter = 0
for index, word in enumerate(words):
value = scrabble(word)
VALUE.append(value)
# to print with linebreaks:
print ("%s\t[%s:%s/%s]" % (index, value, ACTION.get(value, 'NOP'), "\033[1m" + word + "\033[0m"))
# to print without linebreaks:
# print ("[%s:%s/%s]" % (value, ACTION.get(value, 'NOP'), "\033[1m" + word + "\033[0m"), end='')
0 [5:PUSH/Man]
1 [5:PUSH/sagt]
2 [5:PUSH/dass]
3 [4:NOP/alle]
4 [26:NOP/uebersetzungen]
5 [3:NOP/nur]
6 [7:ADD/fuer]
7 [4:NOP/den]
8 [5:PUSH/Leser]
9 [5:PUSH/sind]
10 [12:DUP/Werke]
11 [7:ADD/dienen]
12 [3:NOP/nur]
13 [4:NOP/der]
14 [23:NOP/Hoererschaft]
15 [5:PUSH/Oder]
16 [20:NOP/Kunstwerk]
17 [7:ADD/uebel]
18 [7:ADD/Wenn]
19 [7:ADD/Dasein]
20 [5:PUSH/erste]
21 [23:NOP/Dichterische]
22 [3:NOP/ist]
23 [5:PUSH/dann]
24 [7:ADD/Leben]
25 [7:ADD/genug]
26 [7:ADD/fuer]
27 [5:PUSH/eines]
28 [19:NOP/schlechte]
29 [12:DUP/Scheint]
30 [7:ADD/grade]
31 [7:ADD/genug]
32 [9:OUTPUT/translate]
33 [5:PUSH/Denn]
34 [23:NOP/unentbehrlich]
35 [5:PUSH/denn]
36 [22:NOP/vertauschbar]
37 [7:ADD/Selbe]
38 [12:DUP/Gemeinten]
39 [7:ADD/selbe]
40 [5:PUSH/mit]
41 [21:NOP/Kunstwerke]
42 [7:ADD/ohne]
43 [9:OUTPUT/einander]
44 [5:PUSH/Leser]
45 [20:NOP/hinreichend]
46 [5:PUSH/bis]
47 [19:NOP/wesentliche]
48 [7:ADD/Dasein]
49 [12:DUP/besteht]
50 [5:PUSH/bis]
51 [23:NOP/geheimnisvolle]
52 [7:ADD/tongue]
53 [4:NOP/also]
54 [7:ADD/Gottes]
55 [4:NOP/sinn]
56 [9:OUTPUT/frage]
57 [5:PUSH/bis]
58 [20:NOP/hinreichend]
59 [5:PUSH/Leser]
60 [12:DUP/erwaegen]
61 [7:ADD/tongue]
62 [5:PUSH/teilt]
63 [23:NOP/apodiktisch]
64 [7:ADD/Bild]
65 [12:DUP/scheint]
66 [7:ADD/einem]
67 [9:OUTPUT/Original]
68 [5:PUSH/Oder]
69 [5:PUSH/sagt]
70 [5:PUSH/man]
71 [22:NOP/uebersetzer]
72 [7:ADD/sollten]
73 [5:PUSH/mit]
74 [4:NOP/Sinn]
75 [12:DUP/ueberdies]
76 [7:ADD/uebel]
77 [7:ADD/Dasein]
78 [5:PUSH/denn]
79 [7:ADD/Grund]
80 [7:ADD/gibt]
81 [12:DUP/Gewissen]
82 [7:ADD/genug]
83 [5:PUSH/unter]
84 [21:NOP/Ruecksicht]
85 [7:ADD/dessen]
86 [9:OUTPUT/beiden]
87 [5:PUSH/Bis]
88 [20:NOP/hinreichend]
89 [5:PUSH/Leser]
90 [12:DUP/erwaegen]
91 [7:ADD/Bild]
92 [5:PUSH/gilt]
93 [18:NOP/uebermittlung]
94 [7:ADD/Leben]
95 [12:DUP/enthalten]
96 [7:ADD/Leben]
97 [5:PUSH/oder]
98 [3:NOP/sie]
99 [7:ADD/Leben]
100 [9:OUTPUT/voraus]
101 [5:PUSH/Erste]
102 [20:NOP/entsprechend]
103 [5:PUSH/allen]
104 [20:NOP/wirklich]
105 [5:PUSH/allen]
106 [20:NOP/Kunstwerk]
107 [7:ADD/weil]
108 [7:ADD/sehr]
109 [12:DUP/besteht]
110 [7:ADD/genug]
111 [5:PUSH/sagt]
112 [5:PUSH/man]
113 [10:SUBTRACT/nirgends]
114 [9:OUTPUT/daher]
115 [5:PUSH/Einer]
116 [19:NOP/Augenblick]
117 [5:PUSH/unter]
118 [19:NOP/Symphonie]
119 [5:PUSH/oder]
120 [5:PUSH/man]
121 [7:ADD/will]
122 [7:ADD/tongue]
123 [12:DUP/Gewissen]
124 [7:ADD/Dasein]
125 [5:PUSH/bis]
126 [19:NOP/fruchtbar]
127 [5:PUSH/gilt]
128 [4:NOP/die]
129 [7:ADD/Sollten]
130 [7:ADD/Dasein]
131 [9:OUTPUT/translate]
132 [5:PUSH/Allen]
133 [5:PUSH/sind]
134 [5:PUSH/Leser]
135 [20:NOP/hinreichend]
136 [7:ADD/genug]
137 [12:DUP/Werke]
138 [7:ADD/stellen]
139 [12:DUP/keinem]
140 [7:ADD/genug]
141 [5:PUSH/dass]
142 [3:NOP/nur]
143 [10:SUBTRACT/nicht]
144 [9:OUTPUT/Kunst]
145 [5:PUSH/Bis]
146 [20:NOP/hinreichend]
147 [5:PUSH/Leser]
148 [12:DUP/erwaegen]
149 [7:ADD/tongue]
150 [5:PUSH/teilt]
151 [23:NOP/apodiktisch]
152 [7:ADD/Bild]
153 [12:DUP/scheint]
154 [7:ADD/einem]
155 [9:OUTPUT/Original]
156 [5:PUSH/Einer]
157 [21:NOP/Ruecksicht]
158 [5:PUSH/seine]
159 [8:INPUT/Aussage]
160 [7:ADD/Grade]
161 [12:DUP/besteht]
162 [2:NOP/In]
163 [4:NOP/der]
164 [7:ADD/Bild]
165 [12:DUP/forderte]
166 [7:ADD/Bild]
167 [9:OUTPUT/Form]
168 [5:PUSH/Leser]
169 [20:NOP/hinreichend]
170 [5:PUSH/bis]
171 [19:NOP/wesentliche]
172 [7:ADD/Dasein]
173 [12:DUP/besteht]
174 [5:PUSH/bis]
175 [23:NOP/geheimnisvolle]
176 [7:ADD/tongue]
177 [4:NOP/also]
178 [7:ADD/Gottes]
179 [4:NOP/sinn]
180 [9:OUTPUT/frage]
181 [5:PUSH/Man]
182 [5:PUSH/sagt]
183 [5:PUSH/dass]
184 [4:NOP/alle]
185 [26:NOP/uebersetzungen]
186 [3:NOP/nur]
187 [7:ADD/fuer]
188 [4:NOP/den]
189 [5:PUSH/Leser]
190 [5:PUSH/sind]
191 [7:ADD/Genug]
192 [5:PUSH/denn]
193 [14:SKIP_AHEAD_NONZERO/gegenueber]
194 [7:ADD/gibt]
195 [2:NOP/es]
196 [5:PUSH/eines]
197 [15:SKIP_BACK_ZERO/Dichtung]
198 [7:ADD/tongue]
199 [5:PUSH/teilt]
200 [18:NOP/doppelsinnig]
201 [7:ADD/tongue]
202 [5:PUSH/teilt]
203 [8:INPUT/mutter]
204 [7:ADD/tongue]
205 [12:DUP/macht]
206 [7:ADD/uebel]
207 [5:PUSH/oder]
208 [30:NOP/grundsaetzlich]
209 [10:SUBTRACT/nicht]
210 [9:OUTPUT/translate]
7. beatnik interpreter¶
Thanks @Ting!
The function beatnik() below executes the program (your text) which is defined in the VALUE above.
def PUSH(index):
#exception for ArrayIndexOutOfBoundary
index+=1
if(index < len(VALUE)):
stack.append(VALUE[index]%256)
return index
def DISCARD(index):
if(len(stack) > 0):
stack.pop()
return index
def ADD(index):
#add only when there are more than two elements
if(len(stack)>=2):
a = stack.pop()
b = stack.pop()
stack.append(a+b)
return index
def INPUT(index):
stack.append(scrabble(input("input your own word:")))
return index
def OUTPUT(index):
output_ = ''
#output only when there are at least 1 element
if(len(stack)>0):
output_ = chr(abs(stack.pop()%256))
return index, output_
def SUBTRACT(index):
#subtract only when there are more than two elements
if(len(stack)>=2):
a = stack.pop()
b = stack.pop()
stack.append(b-a)
return index
def SWAP(index):
#swap only when there are more than two elements
if(len(stack)>=2):
a = stack.pop()
b = stack.pop()
stack.append(a)
stack.append(b)
return index
def DUP(index):
#duplicate only when there are at least 1 element
if(len(stack)>=1):
a = stack.pop()
stack.append(a)
stack.append(a)
return index
def SKIP_AHEAD_ZERO(index):
a = None
if(len(stack)!=0):
a = stack.pop()
index += 1
#exception for ArrayIndexOutOfBoundary
if(index < len(VALUE)):
dist = VALUE[index]
else:
dist = 0
if(a == 0):
return index + dist
else:
return index
def SKIP_AHEAD_NONZERO(index):
a = None
if(len(stack)!=0):
a = stack.pop()
index+=1
#exception for ArrayIndexOutOfBoundary
if(index < len(VALUE)):
dist = VALUE[index]
else:
dist = 0
if(a != 0):
return index + dist
else:
return index
def SKIP_BACK_ZERO(index):
a = None
if(len(stack)!=0):
a = stack.pop()
#exception for ArrayIndexOutOfBoundary
if(index+1 < len(VALUE)):
dist = VALUE[index+1]
else:
dist = 0
if(a == 0):
return index - dist
else:
return index
def SKIP_BACK_NONZERO(index):
a = None
if(len(stack)!=0):
a = stack.pop()
#exception for ArrayIndexOutOfBoundary
if(index+1 < len(VALUE)):
dist = VALUE[index+1]
else:
dist = 0
if(a != 0):
return index - dist
else:
return index
def STOP(index):
return len(VALUE)
def beatnik(debug=False):
index, index_for_print = 0, 0
length = len(VALUE)
while(index < length):
output = ''
n = VALUE[index]
#printing debug line
if(debug):
print('{:<4} {:<18} {:>2} >> \033[1m{:<18}\033[0m'.format(index_for_print,words[index_for_print],VALUE[index_for_print],ACTION.get(n, 'NOP')),end='')
if(n>=5 and n<= 17):
if(n==5):
index = PUSH(index)
if(debug):
print('\n{:<4} {:<18} {:>2} >> {:<18}'.format(index,words[index],VALUE[index],"Value Pushed"),end='')
if(n==6):
index = DISCARD(index)
if(n==7):
index = ADD(index)
if(n==8):
index = INPUT(index)
if(n==9):
index, output = OUTPUT(index)
if(n==10):
index = SUBTRACT(index)
if(n==11):
index = SWAP(index)
if(n==12):
index = DUP(index)
if(n==13):
index = SKIP_AHEAD_ZERO(index)
if(index_for_print!=index-1 and debug):
for i in range(index_for_print+1,index+1):
if(i >= length):
break
print('\n{:<4} {:<18} {:>2} >> {:<18}'.format(i,words[i],VALUE[i],"Value Skipped"),end='')
if(n==14):
index = SKIP_AHEAD_NONZERO(index)
if(index_for_print!=index-1 and debug):
for i in range(index_for_print+1,index+1):
if(i >= length):
break
print('\n{:<4} {:<18} {:>2} >> {:<18}'.format(i,words[i],VALUE[i],"Value Skipped"),end='')
if(n==15):
index = SKIP_BACK_ZERO(index)
if(index_for_print!=index and debug):
for i in reversed(range(index,index_for_print)):
if(i < 0):
break
print('\n{:<4} {:<18} {:>2} >> {:<18}'.format(i,words[i],VALUE[i],"Value Skipped"),end='')
if(n==16):
index = SKIP_BACK_NONZERO(index)
if(index_for_print!=index and debug):
for i in reversed(range(index,index_for_print)):
if(i < 0):
break
print('\n{:<4} {:<18} {:>2} >> {:<18}'.format(i,words[i],VALUE[i],"Value Skipped"),end='')
if(n==17):
index = STOP(index)
#moving to next index
index += 1
else:
#non
index += 1
#save last index
index_for_print = index
if(debug):
print(" >> ",stack)
# check if we have an output (9), then print it
if output != '' and debug:
print("\033[1moutput: \033[0m" + output + "\n")
else:
print(output, end='')
print()
8. run interpreter¶
#create dynamic stack
stack = []
print('output of your text:\n')
#execute
### debug execution
### delete or add a "#" below to print all the process###
beatnik(True)
# normal execution
beatnik()
output of your text:
0 Man 5 >> PUSH
1 sagt 5 >> Value Pushed >> [5]
2 dass 5 >> PUSH
3 alle 4 >> Value Pushed >> [5, 4]
4 uebersetzungen 26 >> NOP >> [5, 4]
5 nur 3 >> NOP >> [5, 4]
6 fuer 7 >> ADD >> [9]
7 den 4 >> NOP >> [9]
8 Leser 5 >> PUSH
9 sind 5 >> Value Pushed >> [9, 5]
10 Werke 12 >> DUP >> [9, 5, 5]
11 dienen 7 >> ADD >> [9, 10]
12 nur 3 >> NOP >> [9, 10]
13 der 4 >> NOP >> [9, 10]
14 Hoererschaft 23 >> NOP >> [9, 10]
15 Oder 5 >> PUSH
16 Kunstwerk 20 >> Value Pushed >> [9, 10, 20]
17 uebel 7 >> ADD >> [9, 30]
18 Wenn 7 >> ADD >> [39]
19 Dasein 7 >> ADD >> [39]
20 erste 5 >> PUSH
21 Dichterische 23 >> Value Pushed >> [39, 23]
22 ist 3 >> NOP >> [39, 23]
23 dann 5 >> PUSH
24 Leben 7 >> Value Pushed >> [39, 23, 7]
25 genug 7 >> ADD >> [39, 30]
26 fuer 7 >> ADD >> [69]
27 eines 5 >> PUSH
28 schlechte 19 >> Value Pushed >> [69, 19]
29 Scheint 12 >> DUP >> [69, 19, 19]
30 grade 7 >> ADD >> [69, 38]
31 genug 7 >> ADD >> [107]
32 translate 9 >> OUTPUT >> []
output: k
33 Denn 5 >> PUSH
34 unentbehrlich 23 >> Value Pushed >> [23]
35 denn 5 >> PUSH
36 vertauschbar 22 >> Value Pushed >> [23, 22]
37 Selbe 7 >> ADD >> [45]
38 Gemeinten 12 >> DUP >> [45, 45]
39 selbe 7 >> ADD >> [90]
40 mit 5 >> PUSH
41 Kunstwerke 21 >> Value Pushed >> [90, 21]
42 ohne 7 >> ADD >> [111]
43 einander 9 >> OUTPUT >> []
output: o
44 Leser 5 >> PUSH
45 hinreichend 20 >> Value Pushed >> [20]
46 bis 5 >> PUSH
47 wesentliche 19 >> Value Pushed >> [20, 19]
48 Dasein 7 >> ADD >> [39]
49 besteht 12 >> DUP >> [39, 39]
50 bis 5 >> PUSH
51 geheimnisvolle 23 >> Value Pushed >> [39, 39, 23]
52 tongue 7 >> ADD >> [39, 62]
53 also 4 >> NOP >> [39, 62]
54 Gottes 7 >> ADD >> [101]
55 sinn 4 >> NOP >> [101]
56 frage 9 >> OUTPUT >> []
output: e
57 bis 5 >> PUSH
58 hinreichend 20 >> Value Pushed >> [20]
59 Leser 5 >> PUSH
60 erwaegen 12 >> Value Pushed >> [20, 12]
61 tongue 7 >> ADD >> [32]
62 teilt 5 >> PUSH
63 apodiktisch 23 >> Value Pushed >> [32, 23]
64 Bild 7 >> ADD >> [55]
65 scheint 12 >> DUP >> [55, 55]
66 einem 7 >> ADD >> [110]
67 Original 9 >> OUTPUT >> []
output: n
68 Oder 5 >> PUSH
69 sagt 5 >> Value Pushed >> [5]
70 man 5 >> PUSH
71 uebersetzer 22 >> Value Pushed >> [5, 22]
72 sollten 7 >> ADD >> [27]
73 mit 5 >> PUSH
74 Sinn 4 >> Value Pushed >> [27, 4]
75 ueberdies 12 >> DUP >> [27, 4, 4]
76 uebel 7 >> ADD >> [27, 8]
77 Dasein 7 >> ADD >> [35]
78 denn 5 >> PUSH
79 Grund 7 >> Value Pushed >> [35, 7]
80 gibt 7 >> ADD >> [42]
81 Gewissen 12 >> DUP >> [42, 42]
82 genug 7 >> ADD >> [84]
83 unter 5 >> PUSH
84 Ruecksicht 21 >> Value Pushed >> [84, 21]
85 dessen 7 >> ADD >> [105]
86 beiden 9 >> OUTPUT >> []
output: i
87 Bis 5 >> PUSH
88 hinreichend 20 >> Value Pushed >> [20]
89 Leser 5 >> PUSH
90 erwaegen 12 >> Value Pushed >> [20, 12]
91 Bild 7 >> ADD >> [32]
92 gilt 5 >> PUSH
93 uebermittlung 18 >> Value Pushed >> [32, 18]
94 Leben 7 >> ADD >> [50]
95 enthalten 12 >> DUP >> [50, 50]
96 Leben 7 >> ADD >> [100]
97 oder 5 >> PUSH
98 sie 3 >> Value Pushed >> [100, 3]
99 Leben 7 >> ADD >> [103]
100 voraus 9 >> OUTPUT >> []
output: g
101 Erste 5 >> PUSH
102 entsprechend 20 >> Value Pushed >> [20]
103 allen 5 >> PUSH
104 wirklich 20 >> Value Pushed >> [20, 20]
105 allen 5 >> PUSH
106 Kunstwerk 20 >> Value Pushed >> [20, 20, 20]
107 weil 7 >> ADD >> [20, 40]
108 sehr 7 >> ADD >> [60]
109 besteht 12 >> DUP >> [60, 60]
110 genug 7 >> ADD >> [120]
111 sagt 5 >> PUSH
112 man 5 >> Value Pushed >> [120, 5]
113 nirgends 10 >> SUBTRACT >> [115]
114 daher 9 >> OUTPUT >> []
output: s
115 Einer 5 >> PUSH
116 Augenblick 19 >> Value Pushed >> [19]
117 unter 5 >> PUSH
118 Symphonie 19 >> Value Pushed >> [19, 19]
119 oder 5 >> PUSH
120 man 5 >> Value Pushed >> [19, 19, 5]
121 will 7 >> ADD >> [19, 24]
122 tongue 7 >> ADD >> [43]
123 Gewissen 12 >> DUP >> [43, 43]
124 Dasein 7 >> ADD >> [86]
125 bis 5 >> PUSH
126 fruchtbar 19 >> Value Pushed >> [86, 19]
127 gilt 5 >> PUSH
128 die 4 >> Value Pushed >> [86, 19, 4]
129 Sollten 7 >> ADD >> [86, 23]
130 Dasein 7 >> ADD >> [109]
131 translate 9 >> OUTPUT >> []
output: m
132 Allen 5 >> PUSH
133 sind 5 >> Value Pushed >> [5]
134 Leser 5 >> PUSH
135 hinreichend 20 >> Value Pushed >> [5, 20]
136 genug 7 >> ADD >> [25]
137 Werke 12 >> DUP >> [25, 25]
138 stellen 7 >> ADD >> [50]
139 keinem 12 >> DUP >> [50, 50]
140 genug 7 >> ADD >> [100]
141 dass 5 >> PUSH
142 nur 3 >> Value Pushed >> [100, 3]
143 nicht 10 >> SUBTRACT >> [97]
144 Kunst 9 >> OUTPUT >> []
output: a
145 Bis 5 >> PUSH
146 hinreichend 20 >> Value Pushed >> [20]
147 Leser 5 >> PUSH
148 erwaegen 12 >> Value Pushed >> [20, 12]
149 tongue 7 >> ADD >> [32]
150 teilt 5 >> PUSH
151 apodiktisch 23 >> Value Pushed >> [32, 23]
152 Bild 7 >> ADD >> [55]
153 scheint 12 >> DUP >> [55, 55]
154 einem 7 >> ADD >> [110]
155 Original 9 >> OUTPUT >> []
output: n
156 Einer 5 >> PUSH
157 Ruecksicht 21 >> Value Pushed >> [21]
158 seine 5 >> PUSH
159 Aussage 8 >> Value Pushed >> [21, 8]
160 Grade 7 >> ADD >> [29]
161 besteht 12 >> DUP >> [29, 29]
162 In 2 >> NOP >> [29, 29]
163 der 4 >> NOP >> [29, 29]
164 Bild 7 >> ADD >> [58]
165 forderte 12 >> DUP >> [58, 58]
166 Bild 7 >> ADD >> [116]
167 Form 9 >> OUTPUT >> []
output: t
168 Leser 5 >> PUSH
169 hinreichend 20 >> Value Pushed >> [20]
170 bis 5 >> PUSH
171 wesentliche 19 >> Value Pushed >> [20, 19]
172 Dasein 7 >> ADD >> [39]
173 besteht 12 >> DUP >> [39, 39]
174 bis 5 >> PUSH
175 geheimnisvolle 23 >> Value Pushed >> [39, 39, 23]
176 tongue 7 >> ADD >> [39, 62]
177 also 4 >> NOP >> [39, 62]
178 Gottes 7 >> ADD >> [101]
179 sinn 4 >> NOP >> [101]
180 frage 9 >> OUTPUT >> []
output: e
181 Man 5 >> PUSH
182 sagt 5 >> Value Pushed >> [5]
183 dass 5 >> PUSH
184 alle 4 >> Value Pushed >> [5, 4]
185 uebersetzungen 26 >> NOP >> [5, 4]
186 nur 3 >> NOP >> [5, 4]
187 fuer 7 >> ADD >> [9]
188 den 4 >> NOP >> [9]
189 Leser 5 >> PUSH
190 sind 5 >> Value Pushed >> [9, 5]
191 Genug 7 >> ADD >> [14]
192 denn 5 >> PUSH
193 gegenueber 14 >> Value Pushed >> [14, 14]
194 gibt 7 >> ADD >> [28]
195 es 2 >> NOP >> [28]
196 eines 5 >> PUSH
197 Dichtung 15 >> Value Pushed >> [28, 15]
198 tongue 7 >> ADD >> [43]
199 teilt 5 >> PUSH
200 doppelsinnig 18 >> Value Pushed >> [43, 18]
201 tongue 7 >> ADD >> [61]
202 teilt 5 >> PUSH
203 mutter 8 >> Value Pushed >> [61, 8]
204 tongue 7 >> ADD >> [69]
205 macht 12 >> DUP >> [69, 69]
206 uebel 7 >> ADD >> [138]
207 oder 5 >> PUSH
208 grundsaetzlich 30 >> Value Pushed >> [138, 30]
209 nicht 10 >> SUBTRACT >> [108]
210 translate 9 >> OUTPUT >> []
output: l
koenigsmantel
9. appendix¶
''' Helper function to convert a target string into target ascii values. '''
target = 'Hello World!'
target_ascii = []
for i in range(len(target)):
target_ascii.append(ord(target[i]))
print(target[i], ' = ', target_ascii[i])
H = 72
e = 101
l = 108
l = 108
o = 111
= 32
W = 87
o = 111
r = 114
l = 108
d = 100
! = 33
additional links¶
Now, if you click >here<, you will find an ASCII-Table
if you click >here<, you will find some beatnik-code examples
and if you click >here<, there is a table which explains the commands connected to the scrabble-values
Browser-based beatnik interpreter > https://tio.run/#beatnik