Correzioni varie

* Un sacco di errori stupidi sistemati
This commit is contained in:
Rnhmjoj 2013-08-04 14:39:19 +02:00
parent ffb836b975
commit c344dfa364
2 changed files with 23 additions and 20 deletions

View File

@ -9,8 +9,8 @@ class Macchina:
self.a = trin(0)
#Registri
self.d = trinlist([0 for i in range(3**5)], True)
self.c = trinlist([0 for i in range(3**5)], True)
self.d = trinlist()
self.c = trinlist()
#Puntatori
self.puntatore_c = trin(0)
@ -30,20 +30,24 @@ class Macchina:
#Controllo lunghezza massima
if len(programma) > 3**10:
raise MemoryError("Memoria esaurita. Limite di 3^10 word superato.")
#Copia il programma nel registro c
for indice, word in enumerate(programma):
if trinord(word) not in range(33,127):
raise SyntaxError("Carattere non consentito nel programma: '%c' a %d." % (word, indice))
if word not in ("\n"," "):
self.c[indice] = trinord(word)
if trinord(word) not in range(32,127):
raise SyntaxError("Carattere non consentito nel programma: '%c' a %d." % (word, indice))
else:
self.c[indice] = trinord(word)
#Esecuzione del programma
while self.puntatore_c < len(programma):
#Calcola ed esegue l'istruzione
istruzione = self.__calcola_istruzione(trinchr(self.c[self.puntatore_c]))
istruzioni[istruzione]()
try:
istruzioni[istruzione]()
except KeyError:
istruzioni["o"]()
#Operazioni per ogni istruzione
self.c[self.puntatore_c] -= 33
self.__traduci()
@ -59,7 +63,7 @@ class Macchina:
Uo[D7,XTcA\"lI.v%{gJh4G\-=O@5`_3i< \
?Z';FNQuY]szf$!BS/|t:Pn6^Ha"
istruzione = (trinord(carattere) - 33 + self.puntatore_c) % 94
return tabella[istruzione]
return tabella[istruzione.decimale]
def __traduci(self):
"""
@ -69,8 +73,8 @@ class Macchina:
trascrizione = str.maketrans(
'!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN \
OPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~',
'5z]&gqtyfr$(we4{WP)H-Zn,[%\\3dL+Q;>U!pJS7 2FhOA \
1CB6v^=I_0/8|jsb9m<.TVac`uY*MK\'X~xDl}REokN:#?G"i@'
'5z]&gqtyfr$(we4{WP)H-Zn,[%\\3dL+Q;>U!pJS72FhOA1 \
CB6v^=I_0/8|jsb9m<.TVac`uY*MK\'X~xDl}REokN:#?G"i@'
)
istruzione = str.translate(trinchr(self.c[self.puntatore_c]), trascrizione)
self.c[self.puntatore_c] = trinord(istruzione)
@ -98,7 +102,6 @@ class Macchina:
"""
self.d[self.puntatore_d] = trin(self.a[-1] + self.a[0:-1])
def __pazza(self):
"""
Istruzione Malbolge "p"
@ -126,7 +129,6 @@ class Macchina:
else:
self.a = trinord(carattere)
def __stampa(self):
"""
Istruzione Malbolge "/"

View File

@ -163,23 +163,24 @@ class Trilista:
def __init__(self, lista, converti):
"""Inizializzazione della lista trinaria."""
for i in lista:
self.valori = [trin(i, converti) for i in lista]
self.valori ={a:trin(b, converti) for a, b in enumerate(lista)}
#Vari override degli operatori
def __setitem__(self, indice, valore):
try:
self.valori[indice.decimale]
self.valori[indice.decimale] = valore
except AttributeError:
self.valori[indice]
self.valori[indice] = valore
def __getitem__(self, indice):
try:
return self.valori[indice.decimale]
except AttributeError:
return self.valori[indice]
return self.valori[indice]
except KeyError:
return trin(0)
def __str__(self):
return self.valori.__str__()
@ -207,7 +208,7 @@ def trinchr(trinario):
"""
return chr(trinario.decimale % 256)
def trinlist(lista, converti=False):
def trinlist(lista=[], converti=False):
"""
Restituisce una lista accessibile da indici trinari data una lista.
Fornire converti=False come parametro solo se gli elementi della lista