3votos

SMS en Perl

por josejuan hace 6 años

Máquina de turing con 148 estados ejecutando estrictamente el enunciado, ver notas porque son relevantes.

SMS

Escritura de mensajes utilizando un teclado de teléfono móvil.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/perl 
 
use strict; 
 
# NOTAS: 
# Los símbolos de las teclas se pueden considerar símbolos 
# diferentes a los caracteres de salida (en la máquina de 
# turing), por eso se han reemplazado 0..9 A..J 
# El simulador de turing no admite los caracteres _ ni ; 
# se han reemplazado por un espacio (un _ en la codificación) 
#  
# El simulador de turing, tiene un bug, se indica que los 
# estados "actual" y "destino" pueden indicarse con un comodín 
# (el *) para indicar que la regla encaja con cualquier estado. 
# Sin embargo, ¡no hace match!, por eso las reglas indicadas en 
# la var "$bug" pueden ser eliminadas (actuará la regla 
# "* * * l *") si se corrige dicho bug en el simulador. 
# Se generan 148 estados. 
 
print "0 \" ? r f\n"; 
print "f \" * l b\n"; 
print "f * * r f\n"; 
 
 
my @f = split(/\|/, '-_:A|.__B|abcC|defD|ghiE|jklF|mnoG|pqrsH|tuvI|wxyzJ'); 
my $bug = ""; 
for(my $n = 0; $n < @f; $n++) { 
    my $d = $n ? "$n" : "z"; 
    my $f = $f[$n]; 
    my $l = length($f) - 1; 
    print "b $n _ l ${d}0\n"; 
    for(my $m = 0; $m <= $l; $m++) { 
        print "${d}$m $n _ l ${d}" . (($m + 1) % ($l + 1)) . "\n"; 
        print "${d}$m * * * x${d}$m\n"; 
        print "x${d}$m ? " . substr($f, $m, 1) . " l rst\n"; 
        $bug .= "\nx${d}$m * * l *"; 
 
print "b * * l b\n"; 
print "b ? \" r v\n"; 
print "v \" * * halt\n"; 
print "v _ \" r t\n"; 
print "v * * r v\n"; 
print "t \" _ * halt\n"; 
print "t _ _ r t\n"; 
print "rst * ? r f\n"; 
print "* * * l *\n"; 
# éstos estados siguientes se pueden quitar si se corrige el bug 
print $bug; 
1 comentario
0votos

Escrito por josejuan hace 6 años

Anthony (el creador del simulador de turing) ha comentado:

"You're right, that is a bug. Thanks for the report. I've fixed the bug now (I think) and uploaded the fixed version. If you find any more problems, do let me know! I'm glad you find the simulator useful :)"

Por lo tanto podéis quitar la última línea de mi código y ahora son ¡147 estados! XD XD XD

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.