0votos

>, < o = En Maquina de Turing en Other

por josejuan hace 1 año

.

Definir las reglas de una maquina de Turing que decida cual de 2 números escritos en notación unaria es mayor.

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
54
55
56
; se recomienda reproducir en: http://morphett.info/turing/turing.html 
 
; buscar coma y empezar 
0 , , l 1 
0 * * r 0 
 
; ver que hay a la izquierda 
1 _ * l 1 
1 , * l 1 
1 . * r 2 
1 1 _ r 3 
 
; debe haber punto para igual 
2 _ * r 2 
2 , * r 2 
2 . * l 4 
2 1 _ r 5 
 
; debe haber un uno para quitar 
3 _ * r 3 
3 , * r 3 
3 . * l 6 
3 1 _ l 1 
 
; iguales 
4 _ * l 4 
4 , = r 9 
 
; quita unos derechos y menor que 
5 1 _ r 5 
5 . * l 7 
7 _ * l 7 
7 , < r 9 
 
; quita unos izquierdos y mayor que 
6 1 _ l 6 
6 . * r 8 
6 * * l 6 
8 _ * r 8 
8 , > r 9 
 
; quita los espacios 
9 _ * r 9 
9 . _ r a 
a . _ l b 
b . _ l c 
b * * l b 
c . _ r d 
d _ * r d 
d * * r e 
e _ . r f 
f _ . l g 
g . * l h 
h * * l i 
i * . l j 
j * . * 0 ! 
12 comentarios
0votos

Escrito por AverageUser hace 1 año

No he logrado correrla, no estoy seguro de cual es el estado final, 'a'?
0votos

Escrito por AverageUser hace 1 año

¿o es la variante donde se detiene cuando no hay más reglas que se puedan aplicar?
0votos

Escrito por AverageUser hace 1 año

No me resulto correrlo el la pagina, pero aun así creo que es demasiado largo y complejo para lo que se necesita.
1votos

Escrito por josejuan hace 1 año

Hola AverageUser,

ejecutarlo es muy fácil en http://morphett.info/turing/turing.html, sólo pegas el código en "Turing machine program", metes el valor que deseas calcular en "Initial input:", pulsas "Reset" y luego "Run".

Cualquier máquina de turing debería detenerse cuando entra en un estado que no puede aplicar (si aplica uno aunque sea por defecto ya tiene un estado).

Lo de largo y complejo es porque hace más cosas de las que (por lo visto ;P ) debería hacer, como dejar siempre dos y sólo dos puntos antes y después y no asumir que el carrete estará en cierta posición (normalmente está al principio del dato). Lo habré interpretado mal. Obviamente si podemos ir dejando puntos "por ahí" basta analizar por los lados (en lugar de central como he hecho yo).
0votos

Escrito por AverageUser hace 1 año

Hola Josejuan.

Lo intente pero no me resulto. Osea quizás mi input este incorrecto, pero intente con algo como: '111,11'.

No las maquinas de Turing no siempre se deben detener cuando no hay mas reglas que aplicar, en algunas definiciones esto se considera error, pero no es algo muy importante tampoco ya que es cosa de definición, y las 2 son equivalentes.
0votos

Escrito por josejuan hace 1 año

Hay que poner lo que pone en el enunciado, algo como
..111,11..


Sí, un error, por eso se detiene.
0votos

Escrito por AverageUser hace 1 año

ahí esta tu error, en el enunciado explico que estos puntos son solo para ilustrar la infinidad de blanks hacia los 2 lados, pero que el input es solo '111,111' por ejemplo.
0votos

Escrito por josejuan hace 1 año

Tal como está parece que con el ejemplo termina el enunciado xD xD por eso no vi lo de los puntos...
0votos

Escrito por AverageUser hace 1 año

ahh te entiendo, pasa, a veces da paresa leerlo todo.
0votos

Escrito por AverageUser hace 1 año

quizás aquí entiendas a que me refiero, en el comentario puse un ejemplo: Texto del enlace
0votos

Escrito por AverageUser hace 1 año

bueno, no me resulto lo del link, pero es la otra solución a este desafio
0votos

Escrito por AverageUser hace 1 año

No se si entendí tu ultimo comentario, pero como dije los puntos son solo para representar un blank, es decir hay infinitos puntos hacia la izquierda y hacia la derecha, lo cual no significa que no se pueda preguntar por este signo, ni que no se pueda usar en otro lado. Los puntos en el ejemplo eran solo para fines ilustrativos

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.