Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

BRAIN - Brainfuck

Linguagens de programação, times de futebol e religião não se discutem. Cada um tem seus favoritos e não admite que o do outro seja melhor (que me perdoem os corinthianos, palmeirenses e são-paulinos). Um grupo de pesquisadores (que não tinha o que fazer) resolveu escrever uma linguagem de programação ``ideal'' (ideal prá quem, cara pálida?): o Brainfuck.

Brainfuck é uma linguagem de programação cujo funcionamento é muito parecido com uma máquina de Turing. Essa máquina possui como componentes um vetor de 30000 bytes, indexado de 0 a 29999, e um ponteiro, que guarda uma posição desse vetor.

Em cada passo, a máquina realiza uma instrução de acordo com o byte armazenado na posição do vetor indicada pelo ponteiro. Quando esse byte é igual a zero, a execução é terminada.

O conjunto de instruções válidas da linguagem é o seguinte:

Instrução Descrição
> Incrementa o ponteiro.
< Decrementa o ponteiro.
+ Incrementa o byte na posição indicada pelo ponteiro.
- Decrementa o byte na posição indicada pelo ponteiro.
. Imprime o valor do byte na posição indicada pelo ponteiro.
, Lê um byte e armazena na posição indicada pelo ponteiro.
Se não houver nada que possa ser lido (entrada acabou), armazenar zero.
[ Início do loop: Executa o código delimitado até que o byte
na posição indicada pelo ponteiro seja igual a zero.
] Fim do loop.
# Imprime os valores das 10 primeiras posições do vetor.

O ponteiro sempre começa com valor 0, assim como todas as posições do vetor. Na descrição de programas na linguagem brainfuck, caracteres diferentes dos descritos acima são ignorados.

Entrada

A entrada é composta de diversas instâncias. O número de instâncias é dado na primeira linha da entrada. Cada instância começa com uma linha em branco. A próxima linha contém uma cadeia de caracteres não-brancos (ou seja, diferentes de espaço em branco e tabulação), que vai conter a entrada para o programa. Ou seja, os comandos de leitura são realizados nessa cadeia. Toda a entrada para o programa está contida em uma única linha.

Por fim, a terceira linha contém a descrição do programa. Assim como a segunda linha, esta também não contém caracteres brancos e está inteiramente contida em uma única linha (a separação feita no segundo exemplo de entrada foi feita para evitar o estouro de linha).

Tanto a segunda como a terceira linha têm entre 1 e 100000 caracteres.

Saída

Para cada instância, você deverá imprimir um identificador Instancia k, onde h é o número da instância atual. Na linha seguinte você deve imprimir a saída do código fornecido na entrada.

Após cada instância, seu programa deve imprimir uma linha em branco.

Exemplo

Entrada:
2

marrocos
+[>,]<-[+.<-]

nada
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<
+++++++++++++++.>.+++.------.--------.>+.>.

Saída:
Instancia 1
socorram

Instancia 2
Hello World!


Adicionado por:Wanderley Guimarăes
Data:2007-09-01
Tempo limite:1s
Tamanho do fonte:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Linguagem permitida:Todas exceto: ASM64 CLOJURE ERL FSHARP JS-RHINO NODEJS PERL6 PY_NBC SCALA TCL VB.NET
Origem:Seletiva para Maratona de Programação do IME - 2006

hide comments
2023-01-31 15:18:44
muchas gracias aficiones esta para vosotros SIUUUUUUUU
2014-04-28 15:08:21 Valmir [FACENS]
.

Last edit: 2014-04-28 16:51:06
2013-08-27 12:45:40 Tilibra
me desculpe a ignorância, mas o comando ',', vai ler um byte da onde? stdin? ou ele le o byte apontado pelo ponteiro(năo faria sentido)? ou ele le o byte apontado pelo ponteiro, incrementa o ponteiro e coloca o byte lido la? essa dúvida ta me matando aqui... :q

Last edit: 2013-08-27 12:47:07
2011-11-01 20:32:55 Dórian C. Langbeck [IESAM]
pode ter subloops?
2011-10-14 00:32:00 thiagojobson [UERN]
Olha que legal:
+++++++.
Cuidado com esse:
+++++++[.]
2011-09-23 02:40:42 Rodrigo Roim Ferreira [ITA]
Pra esclarecer um pouco, pra entrar no loop, o valor apontado tem que ser diferente de zero (se for zero ele pula pro fim do loop ] direto).
Alem disso, ele sai do loop se quando chegar no ] o valor apontador for zero, se nao for ele volta pro [ correspondente.

Last edit: 2011-09-23 04:50:07
2011-08-04 06:35:10 bla
isak
http://www.go-hero.net/jam/09/name/bozzball
engole aí otário. O "idiota" ficou em 1ş no Round 3 esse ano.
2011-07-17 22:56:17 isak
que idiota programaria em brainfuck quando c++ é mol vezes melhor?
só quem năo tem nada para fazer

Last edit: 2011-07-17 22:57:06
2011-06-13 18:20:19 Jefferson Rodrigo [UECE]
Năo. Somente ao fim de cada iteraçăo o byte para o qual o ponteiro aponta é testado.
2011-01-12 12:09:21 Rodrigo Castro
A soluçăo deve ser em um único arquivo? Como deve ser feita a leitura da entrada? Sou novo por aqui... to boiando mais que tudo...

Tava tentando fazer em Java, com OO, mas pelo visto vou ter que fazer estruturado.
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.