Submeter | Todas submissőes | Melhores | Voltar |
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. |