コード例 #1
0
ファイル: main.py プロジェクト: rodps/turingmachine
def main():
    if len(sys.argv) < 2:
        print("Uso: python main.py arquivo.txt conteudo_fita1 [conteudo_fita2... ]")
        return

    try:
        arquivo = open(sys.argv[1], 'r')
    except IOError:
        print("Erro ao abrir o arquivo")
        return

    entrada = arquivo.readlines();
    alfabeto_entrada = entrada[0].replace('\n','').replace('\r','').split(' ')
    alfabeto_fita = entrada[1].replace('\n','').replace('\r','').split(' ')
    branco = str(entrada[2].replace('\n','').replace('\r',''))
    estados = entrada[3].replace('\n','').replace('\r','').split(' ')
    inicial = str(entrada[4].replace('\n','').replace('\r',''))
    finais = entrada[5].replace('\n','').replace('\r','').split(' ')
    fitas = entrada[6].replace('\n','').replace('\r','')
    transicoes = []
    for i in range(7,len(entrada)):
        transicoes.append(entrada[i].replace('\n', '').replace('\r','').split(' '))
    conteudo = []
    for i in range(2, int(fitas)+2):
        c = []
        if i >= len(sys.argv):
            c = ['B']
            conteudo.append(c)
            continue
        for j in range(len(sys.argv[i])):
            c.append(str(sys.argv[i][j]))
        conteudo.append(c)

    TM = tm.TuringMachine(
        alfabeto_entrada = alfabeto_entrada,
        alfabeto_fita = alfabeto_fita,
        simb_branco = branco,
        estados = estados,
        estado_inicial = inicial,
        estados_finais = finais,
        fitas = int(fitas),
        transicoes = transicoes,
        conteudo = conteudo
    )
    TM.executar()
コード例 #2
0
def rand_tm(number_of_states, tape_length):
    return tm.TuringMachine(
        number_of_states,
        [rand_state(number_of_states) for i in range(number_of_states)],
        random.randint(0, 2**tape_length))
コード例 #3
0
import numpy as np
import turing_machine as tm

input = np.array([[0, 1, 0], [1, 0, 1], [0, 1, 0]])

output = np.array([[0, 2, 0], [2, 0, 2], [0, 2, 0]])

if __name__ == "__main__":

    # number of TMs
<<<<<<< HEAD
    n = 50

    # create n TMs
    alans = [tm.TuringMachine(None, 5, 5, 2) for _ in range(n)]

    # try to solve this for 10000 steps max
    step = 0
    while step < 100000 :
=======
    n = 15

    # number to retain from each population
    n_parents = 5
    add_random = 5

    # parameter
    max_steps = 10000

    step_found = []
コード例 #4
0
def main():
	"""
		main function
	"""

	if len(sys.argv) < 2:
		print "modo de usar: python main.py arquivo.txt conteudo_fita1 [conteudo_fita2...]"
		return
	

	# Abrir arquivo
	try:
		arquivo = open(sys.argv[1], 'r')
	except IOError:
		print "Erro ao abrir o arquivo"
		return

	# Ler as linhas do arquivo (linha 1 a 7)
		# Linha 1: alfabeto de entrada
		# Linha 2: alfabeto da fita
		# Linha 3: simbolo que representa o espaco em branco (padrao: B)
		# Lista 4: conjunto de estados
		# Linha 5: estado inicial
		# Linha 6: conjunto de estados finais
		# Linha 7: quantidade de fitas

	#Das linhas 42 a 55 e feita a leitura do arquivo, conforme descrito entre as linhas 32 e 39.
	elements = []
	content = arquivo.readline() #lendo linhas 1 a 7 e associando a lista 'content'
	for i in range(7):
		#Associo o que peguei até a linha 7 à lista de 'elements'.
		elements.append(util.remove_escape_char(content))
		content = arquivo.readline()

	alfabeto_entrada = elements[0].split(' ')
	alfabeto_fita    = elements[1].split(' ')
	branco           = elements[2]
	estados          = elements[3].split(' ')
	estado_inicial   = elements[4]
	estados_finais   = elements[5].split(' ')
	qtde_fitas       = elements[6]

	#A partir da linha 58 ate a linha 64, e feita a associacao, conforme a quantidade de fitas lidas, do conteúdo delas, ficando isso armazenado na lista conteudo_fita.
	conteudo_fitas = []
	try:
		for i in range(int(qtde_fitas)):
			conteudo_fitas.append(str(sys.argv[2 + i]))
	except IndexError:
		print "modo de usar: python main.py arquivo.txt conteudo_fita1 [conteudo_fita2...]"
		return 0

	# mostrar conteudo das fitas
	for i in range(int(qtde_fitas)):
		print "conteudo da fita " + str(i+1) +":", conteudo_fitas[i]

	# A partir da linha 71 em diante, e feita a leitura das transicoes em relacao a linha 8 em diante do arquivo fornecido.
	transicoes = []
	while content:
		transicoes.append(util.remove_escape_char(content))
		content = arquivo.readline()

	# tratar transicoes
	transicoes = util.format_transicoes(transicoes, qtde_fitas)

	# instanciar objeto tm
	tm = TM.TuringMachine(
							alfabeto_entrada=alfabeto_entrada,
							estados=estados,
							estado_inicial=estado_inicial,
							estados_finais=estados_finais,
							qtde_fitas=qtde_fitas,
							fita=alfabeto_fita,
							simbolo_branco=branco,
							transicoes = transicoes,
							conteudo_fitas = conteudo_fitas
						)

	tm.executar()
	tm.resultado()
コード例 #5
0
import turing_machine as tm
import random

does_nothing = tm.TuringMachine(
    1, [[False, True, 0, False, True, 1, True, True, 1]],
    random.randint(0, 2**16))
inverter = tm.TuringMachine(1,
                            [[False, True, 0, True, True, 1, False, True, 1]],
                            random.randint(0, 2**16))
false_tm = tm.TuringMachine(1,
                            [[False, True, 0, False, True, 1, False, True, 1]],
                            random.randint(0, 2**16))
true_tm = tm.TuringMachine(1, [[True, True, 0, True, True, 1, True, True, 1]],
                           random.randint(0, 2**16))

# Broken because my TM specification doesn't allow writing before the beginning of the tape.
wolfram_smith = tm.TuringMachine(
    2, [[False, True, 2, True, False, 1, False, False, 1],
        [True, False, 1, True, True, 2, None, True, 1]],
    random.randint(0, 2**16))
# wolfram_smith.tape = [None]*16 + wolfram_smith.tape
# wolfram_smith.head = 20

neat = tm.TuringMachine(12,
                        [[False, False, 4, False, True, 2, True, False, 9],
                         [True, False, 12, False, False, 0, True, True, 7],
                         [True, False, 6, False, False, 12, False, False, 1],
                         [True, True, 7, True, False, 11, False, False, 6],
                         [False, True, 11, False, False, 5, False, True, 5],
                         [False, True, 4, False, False, 12, True, True, 10],
                         [False, True, 8, True, True, 3, True, True, 11],