Depois eu passei a ver este teste como uma forma legal de avaliar se um determinado candidato tinha potencial pra trabalhar na área de systems programming, porque o teste tem muito a ver com programação Assembly: entender a arquitetura da máquina e saber usar as instruções de máquina.
Se você tiver curiosidade sobre sua possível habilidade para esta área da Informática, sugiro que tente fazer o teste abaixo. As regras são as seguintes:
- Você tem, no máximo, uma hora para fazer o teste;
- Todas as informações necessárias para responder às questões estão no texto;
- A interpretação das questões faz parte do teste.
Enfim, vamos ao enunciado. Depois publico o gabarito. Quem tiver um pouco de familiaridade com a teoria da computação vai reconhecer que o que vamos usar no teste é uma máquina de Turing.
Um computador hipotético é composto por:
a) Unidade de fita magnética cujos cabeçotes de leitura e gravação possuem acionamento independente (ou seja: é possível estar lendo e gravando em posições físicas diferentes da mídia montada na unidade) e, quando acionados, sempre atuam na direção progressiva de leitura/gravação da mídia;
b) Memória de tamanho infinito, com cada posição de memória sendo capaz de armazenar uma única instrução de máquina, e endereçamento das posições de memória de forma sequencial, crescente, iniciando em 0 (zero), com todos os endereços expressos em decimal;
c) CPU que sempre inicia a execução dos programas a partir da posição de memória com endereço 0 (zero) e que, com exceção dos casos previstos no instruction set, executa as instruções de máquina de forma sequencial em ordem crescente dos endereços de memória;
d) Instruction set:
d.1) Instrução A - causa a gravação de um caracter * (asterisco) na mídia montada na unidade de fita magnética;
d.2) Instrução H - causa a gravação de um caracter - (hífen) na mídia montada na unidade de fita magética;
d.3) Instrução T - causa a leitura de um caracter na mídia montada na unidade de fita magnética e: se o caracter lido for - (hífen) executa a seguir a instrução no endereço de memória x + 1; se o caracter lido for * (asterisco) executa a seguir a instrução no endereço de memória x + 2; onde x é o endereço de memória onde reside a instrução T;
d.4) Instrução n (onde n = 0,1,2,3,4,5,6,7,8 ou 9) - causa desvio incondicional para a instrução de máquina no endereço de memória n.
Para cada um dos exemplos apresentados e problemas propostos supõe-se que:
1) Existe mídia montada na unidade de fita magnética, cujo conteúdo inicial é uma sequência aleatória dos caracteres * (asterisco) e - (hífen), e tanto o cabeçote de leitura quanto o cabeçote de gravação da uidade de fita magnética estão posicionados no início físico da mídia;
2) Todas as posições da memória estão preenchidas com uma sequência aleatória de instruções de máquina válidas;
3) Não é possível codificar instruções de máquina inválidas;
4) Todos os programas par asolução dos problemas iniciam-se na posição de memória de endereço 0 (zero).
EXEMPLO:
Trocar, na mídia de fita magnética, cada caracter * (asterisco) por - (hífen), e vice-versa.
Resposta: T4H0A0
Com estas informações, elabore programas com o menor número possível de instruções de máquina que solucionem os problemas propostos.
PROBLEMAS PROPOSTOS:
P.1) Gravar, na mídia de fita magnética, o padrão de caracteres: *-**-***- ... (um asterisco, um hifen, dois asteriscos, um hífen, três asteriscos, um hífen, ...).
P.2) Trocar, na mídia de fita magnética, cada segundo caracter * (asterisco) encontrado pelo caracter - (hífen).
P.3) Localizar, na mídia de fita magnética, a primeira ocorrência do string *** (três asteriscos consecutivos) copiar, a partir do início da mídia de fita magnética, todos os caracteres que se seguem ao string localizado até encontrar a próxima ocorrência do string *** (três asteriscos consecutivos), copiando-os, inclusive, e depois parar.
Boa sorte!
Nenhum comentário:
Postar um comentário