Lar Finanças Pessoais Java Programming Challenge: Criando uma máquina de Turing simples - manequins

Java Programming Challenge: Criando uma máquina de Turing simples - manequins

Vídeo: Qt Designer - PyQt with Python GUI Programming tutorial 2025

Vídeo: Qt Designer - PyQt with Python GUI Programming tutorial 2025
Anonim

Em 1936, o matemático Alan Turing concebeu um tipo de máquina computacional enganosamente simples chamado Turing Machine . Turing nunca criou uma máquina de Turing. Em vez disso, era um dispositivo hipotético que ele inventou para ajudar no estudo da computação - ou seja, se os problemas complexos podem ser resolvidos por etapas computacionais e se uma máquina pode ser concebida que pode resolver qualquer problema computable. (Se você estiver interessado em saber mais sobre o histórico ou a aplicação das máquinas Turing, você pode encontrar muitos artigos sobre eles na Internet. Basta usar qualquer provedor de pesquisa para procurar "Turing machine".)

A operação de uma máquina de Turing é simples. Ele incorpora apenas alguns conceitos básicos:

  1. O coração de uma máquina de Turing é uma fita infinitamente longa que é dividida em células nas quais as informações podem ser escritas.

    Na prática real, é claro, nenhum dispositivo físico pode ter um número infinito de células. Mas na teoria de uma máquina de Turing, a fita é infinita.

  2. A informação que pode ser escrita em cada célula é limitada a um único símbolo, como um 0 ou um 1. No entanto, a informação pode ser representada pelos valores combinados de células sucessivas.

    Por exemplo, você pode representar valores numéricos por ocorrências sucessivas do símbolo 1 seguido por um 0. Assim, 1110 representam o valor 3 porque existem três 1; 111111011110 pode representar os valores 6 e 4 (seis 1 seguido por um zero, seguido por quatro 1 seguido de outro zero).

  3. A máquina de Turing contém uma cabeça de leitura-gravação que está sempre posicionada sobre uma (e uma única) das células da fita.

    Esta cabeça de leitura e gravação pode ler o símbolo que está contido na célula. Também pode apagar o símbolo e, se desejado, escreva um novo símbolo em seu lugar. A célula sobre a qual a cabeça de leitura e gravação está posicionada é referida como célula atual ou célula principal .

  4. A fita é motorizada para que ela possa ser movida para a esquerda ou para a direita sob a cabeça de leitura-escrita uma célula por vez.

  5. A máquina tem um estado , que é representado por um símbolo, como uma letra do alfabeto.

Como qualquer computador, uma máquina de Turing pode ser programada. No entanto, um programa para uma máquina de Turing não se assemelha remotamente a um programa Java.

Em vez disso, um programa Turing Machine é simplesmente um conjunto de regras que são avaliadas para determinar quais ações a máquina deve tomar. Cada regra identifica uma ação a ser tomada quando a célula atual contém um símbolo dado e a máquina está em um determinado estado.Por exemplo, uma regra pode ditar o que fazer se a célula atual contiver 1 e o estado da máquina é "a".

Cada regra pode especificar uma das três ações:

  • Apague a célula atual ou escreva um novo valor para a célula.

  • Mova a fita uma célula para a esquerda ou uma célula para a direita.

  • Mude o estado da máquina para um novo estado.

Por exemplo, uma regra pode especificar que se a célula atual contiver 1 e o estado da máquina for "a", a Máquina de Turing deve escrever um 0 na célula atual, avançar a fita uma célula para a direita e mudar o estado da máquina para "b. "

Além de um programa, a fita da máquina Turing pode ter um valor inicial.

É isso; Essa é a definição completa de uma Máquina de Turing. Apesar de sua simplicidade, uma Máquina de Turing pode calcular qualquer coisa de 2 + 2 para a trajetória de um foguete para Marte.

Para este desafio, você deve criar uma Máquina de Turing muito simples. Para simplificar o problema, aceite as seguintes limitações nesta versão do Turing Machine:

  • A fita não precisa ser infinita. Você pode usar qualquer recurso Java - uma matriz, uma string ou uma coleção - para representar a fita.

    (Note que, embora a fita não precise ser infinita, você deve poder mover-se facilmente para a esquerda ou para a direita a partir da célula atual. Se você optar por usar uma matriz, não comece com a célula atual no elemento 0 porque você não poderá se mover para a esquerda a partir de lá.)

  • Uma célula pode estar vazia ou pode conter qualquer letra ou numeral. Uma célula vazia é representada por um caractere de sublinhado.

  • O estado pode ser qualquer caractere alfanumérico.

  • O programa para a máquina de Turing será lido a partir de um arquivo de texto. Este arquivo de texto contém uma regra por linha. Cada regra contém cinco caracteres, separados por espaços, que fornecem os detalhes de cada regra, da seguinte forma:

    • Célula atual: O valor a ser correspondido para a célula atual.

    • Estado atual: O valor a ser combinado para o estado atual da máquina.

    • Nova célula: O valor a ser gravado na nova célula. _ para apagar a célula, * para deixar a célula inalterada.

    • Movimento: L ou R para mover a fita para a esquerda ou para a direita; H para interromper o programa; qualquer outro personagem para não mover a fita.

    • Estado novo: O novo valor para o estado da máquina.

  • Por exemplo, o seguinte diz que, quando a célula atual é 1 e o estado é "a", a célula atual deve ser definida como 0, a fita moveu uma célula para a esquerda e o estado deve ser definido como " b: "

    1 a 0 L b
    
    • A primeira linha do arquivo de texto deve conter uma seqüência de caracteres que represente os valores iniciais para a fita.

    • A segunda linha do arquivo de texto deve conter o status inicial.

A figura a seguir mostra a interface do usuário para a solução de amostra, mas você pode usar qualquer projeto de interface de usuário que você gostaria para este projeto.

Uma interface Turing Machine potencial.

Aqui estão algumas considerações para criar a interface:

  • Valor e célula atual: No mínimo, você deve mostrar o valor da fita e destacar a célula atual.

  • Ferramentas e exibição: Você também deve fornecer a capacidade de iniciar, parar ou reiniciar a execução do programa, e você deve exibir os resultados de cada etapa do programa.

  • Execução do programa: Você pode fornecer uma maneira para o usuário executar o programa carregado do início ao fim, bem como uma maneira para o usuário entrar em um único passo através do programa clicando em um botão para executar cada etapa do programa.

  • Carregando o programa : Você deve fornecer botões que permitem que o usuário carregue um programa Turing Machine a partir de um arquivo de texto e que permita ao usuário redefinir a máquina para executar o programa novamente.

Aqui está uma dica para implementar a fita infinita: use três variáveis ​​de string para manter os valores da fita, um para o caractere único armazenado na célula atual, um segundo para os caracteres à esquerda da célula atual e um terceiro para os caracteres à direita da célula atual. Você pode mover facilmente a célula atual para a esquerda ou para a direita usando a combinação certa de operações de concatenação e substring.

Você pode encontrar a solução para este desafio na guia Downloads da página de produtos Java All-in-One For Dummies, 4th Edition.

Boa sorte!

Java Programming Challenge: Criando uma máquina de Turing simples - manequins

Escolha dos editores

Como executar o teste beta para uma aplicação iOS - manequins

Como executar o teste beta para uma aplicação iOS - manequins

Depois de executar o seu aplicativo em alguns dispositivos e está confiante de que está funcionando da maneira que é suposto, considere levá-lo às mãos de alguns testadores beta. O teste beta permite que você receba comentários de usuários reais e repare todos os erros antes que o público em geral os veja. Você pode se surpreender ...

Como publicar no Amazon Appstore para Android - dummies

Como publicar no Amazon Appstore para Android - dummies

Publicação para o Amazon Appstore para Android é semelhante à publicação na Google Play Store: você cria uma conta e, em seguida, talvez seja necessário pagar uma taxa de desenvolvedor. Ao contrário do Google Play Store, os aplicativos devem ser revistos no Amazon Appstore para Android, portanto, planeje alguns dias entre o dia em que você enviar ...

Como preparar ativos gráficos em seu aplicativo Android para publicar na Play Store - Dummies

Como preparar ativos gráficos em seu aplicativo Android para publicar na Play Store - Dummies

Quando você publica um aplicativo Android na Play Store, você interage com o Console do desenvolvedor do Google Play. O passo essencial nesta interação é o passo em que você carrega o arquivo APK do seu aplicativo. É o passo essencial, mas não é o único passo. Você também deve usar a Consola do desenvolvedor da Play Store ...

Escolha dos editores

As Leis de Minecraft Redstone - dummies

As Leis de Minecraft Redstone - dummies

Cada mecanismo Redstone da Minecraft possui um conjunto diferente de propriedades que determinam como ele atua. Você deve entender as relações entre suas propriedades. Depois de trabalhar com Redstone por um tempo, a forma e a função das suas ferramentas podem se tornar bastante intuitivas. Até então, você pode usar essas informações para descobrir quais opções são ...

Minecraft Pocket Edition Guia de Sobrevivência - dummies

Minecraft Pocket Edition Guia de Sobrevivência - dummies

Ao contrário da versão bastante complicada para PC do Minecraft, Pocket Edition (PE) de A Minecraft tem uma série de etapas mais direta para alcançar seu ponto final, o Nether Spire. Para sobreviver ao PE Minecraft, um jogador precisa seguir a série de passos descritos abaixo. Punch madeira e construir um abrigo. Todo o Minecraft ...

Minecraft Para Dummies Cheat Sheet - dummies

Minecraft Para Dummies Cheat Sheet - dummies

Minecraft requer um jogador para reunir recursos para sobreviver, construir, criar, e avance no jogo. Devido aos diferentes ambientes encontrados no Minecraft, um jogador precisa usar diferentes estratégias para reunir recursos eficientemente nas três principais áreas do jogo - Overland, the Mines e the Nether. Uma vez que estes ...

Escolha dos editores

Como criar mensagens de e-mail de impressão em série no Word 2013 - dummies

Como criar mensagens de e-mail de impressão em série no Word 2013 - dummies

Palavra 2013 permite que você expire mensagens de e-mail personalizadas usando a opção E-Mail para mala direta. Esta opção funciona apenas quando você configura o programa Microsoft Outlook no seu computador. Depois disso, você inicia o documento principal para sua fusão de e-mail obedecendo a estas etapas:

Como criar múltiplas colunas em um documento do Word 2007 - dummies

Como criar múltiplas colunas em um documento do Word 2007 - dummies

Para converter seu padrão single- (ou não-) coluna do documento do Word 2007 em um com várias colunas, basta escolher o formato da coluna que deseja no menu Colunas. Instantaneamente, seu documento é transformado em uma maravilha multicolora!

Como criar tabelas rápidas nas tabelas do Word 2008 para Mac - dummies

Como criar tabelas rápidas nas tabelas do Word 2008 para Mac - dummies

Ajudam você a organizar idéias ou dados que seriam aborrecedores e difíceis de compreender em forma de parágrafo regular. Com o Word 2008 para Mac, você pode facilmente criar tabelas - às vezes chamadas de grades - em qualquer lugar em seus documentos. A maneira mais fácil de criar tabelas é com um dos melhores recursos novos ...