1votos

SMS en Perl

por josejuan hace 6 años

El código en Perl, genera la máquina de Turing. ¡Genial idea la de JCarles de hacerlo en Turing! (se generan 164 estados). La entrada es como la de JCarles, pero en lugar de la primera doble comillas hay que poner un mayor que.

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
#!/usr/bin/perl 
 
use strict; 
 
my @f = split(/\|/, '-_:0|.;_1|abc2|def3|ghi4|jkl5|mno6|pqrs7|tuv8|wxyz9'); 
for(my $n = 0; $n < @f; $n++) { 
    my $d = $n ? "$n" : "z"; 
    my $f = $f[$n]; 
    my $l = length($f) - 1; 
    print "0 $n _ r ${d}1\n"; 
    for(my $m = 1; $m < $l; $m++) { 
        print "${d}$m $n _ r ${d}" . ($m + 1) . "\n"; 
        print "${d}$m * * l d${d}$m\n"; 
    print "${d}$l $n _ l d${d}" . ($l + 1) . "\n"; 
    print "${d}$l * * l d${d}$l\n"; 
    for(my $m = 1; $m <= length($f); $m++) { 
        print "d${d}$m \" " . substr($f, $m - 1, 1) . " r R\n"; 
        print "d${d}$m * * l d${d}$m\n"; 
print "0 \" _ l c\n"; 
print "0 > \" r 0\n"; 
print "0 * * r 0\n"; 
print "c \" _ * halt\n"; 
print "c * _ l c\n"; 
print "R * \" r 0\n"; 
 
# en la máquina poner una entrada como: 
#          >446665552111688663666" 
4 comentarios
0votos

Escrito por josejuan hace 6 años

Lo del "mayor que" es por no andar cambiando los símbolos, se puede intercambiar en los estados involucrados.
0votos

Escrito por JCarles hace 6 años

Las prisas no te han permitido realizar pruebas más exhaustivas :D

¿Has probado en introducir >55555" tal como sugiere el anunciado? ;)

Lástima que no se pueda votar negativo, jejeje. Aunque te perdono si votas mi solución. :D
0votos

Escrito por josejuan hace 6 años

Funciona perfectamente, el problema no son las pruebas, sino que no leí el enunciado (craso error evidentemente, en mi defensa diré que eran la 1:30 o así) y mi programa interpreta 55555 como 5555 5 (como incorrectamente hipoteticé).

Tu solución ya la voté :P

Veremos si se puede hacer más corta, y correcta... XD
0votos

Escrito por josejuan hace 6 años

Arg! ciñéndome me salen 182 estados :|

Debe haber alguna forma... ~:/

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.