Interpretar Volátil
Volatile é um esolang baseado em pilha feito por A_ / a '_' / A que possui apenas 8 instruções e está completo. No entanto, também não é determinístico ... o que significa que os programas nem sempre dão a mesma saída. Sua tarefa é interpretar esse idioma.
Especificações de idioma
Retirado da página esolangs:
~: Push a random integer in any range of integers. Minimum range of 0 through 32768
+: Pop 2 values and push the sum of the 2 values
-: Like +, but subtracts
*: Multiply
/: Divide. 0-division will result in an error.
:: Duplicate the top of the stack
.: Output the top of the stack without popping it
(...): Execute ... inside a while loop when the top of the stack is not 0
Tudo o mais é desconsiderado
Entrada
Observe que esses programas podem falhar aleatoriamente
~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.~:/:::::::::::::::::::::::::::::::::+++++++++++++++++++++++++++++++++.~:/::::::::::++++++++++.
~:-.~:/+.(~:/+.)
~:-:/
Resultado
73 102 109 109 112 45 33 120 112 115 109 101 34 11
0 1 2 3 4 5 6 7 8 9 ...
<Any Error Message>
Mais exemplos, bem como uma implementação de referência (use o segundo, encontrado em (Outro) intérprete python 3 ) podem ser encontrados em https://esolangs.org/wiki/Volatile
Pontuação
Isso é código-golfe, então a resposta mais curta em bytes ganha
Classificação
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.
Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
# Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
fonte
~
um número inteiro ou qualquer número?1
, que pode ser dividida por zero.~
deve poder pressionar zero, caso contrário, é determinístico. Além disso, o RNG sempre deve poder retornar zero após qualquer número de zeros consecutivos.~:-.~:/+.(~:/+.)
começar em0 1 2 ...
vez de1 2 3 ...
? A~:-.
resultaria em 0 que ele gera. Os intérpretes da página Esolang parecem confirmar isso ( aqui o segundo ).~:-.(~:/+.)
Respostas:
05AB1E , 35 bytes
Experimente online!
Transpila o código volátil para 05AB1E e o avalia.
*
,+
E-
pode ser deixado como está.:
,,.
e)
possui um byte equivalente direto. Os outros comandos levam alguns bytes cada. Infelizmente, 05AB1E não falha na divisão por 0, então isso é implementado por uma condição "encerre se o topo da pilha == 0".fonte
0
e1
corretamente antes do loop, mas, em seguida, ele começa a produzir o programa volátil (a entrada implícita) em si. Eu gosto dessaD Doingõq
string de dicionário para a instrução if, btw! :)while peek
, mas no intérprete de referência é awhile pop
. O exemplo pode ser corrigido adicionando alguns:
( TIO ). Como alternativa, meu código pode ser alterado para awhile peek
adicionando aD
.0 1 2 3 ...
, no entanto. Eu não olhei para o código fonte deles, mas tentei os dois.D
no meu código.replace
vs do JavareplaceAll
(que substituem todas as ocorrências, masreplaceAll
usam expressões regulares e a outra não). xDJulia 1.0 , 334 bytes
Meu primeiro "intérprete" de qualquer tipo, foi mais fácil do que eu esperava. Eu pratiquei golfe básico, mas provavelmente há espaço para mais. Eu fiz imprimir um espaço após a saída para. mach para exemplo de saída. A versão ungolfed está no cabeçalho no link TIO. Exemplo de uso
v("~:-:/")
.+41 bytes para corrigir o erro Night2 indicado adicionando um contador de loop. Agora vejo por que transpilar é uma boa opção. Um bom caso de teste é
~:-.(~:/+.)(~:/+.())~:-.
com a saída esperada0 0
Experimente online!
fonte
Encantos Rúnicos ,
266264 bytesExperimente online!
Devido às limitações embutidas no Runic, ele suporta apenas comprimentos de programa (e tamanho da pilha) de ~ 50 1 . Programas grandes demais simplesmente falham. Se a pilha crescer muito, ocorrerá um erro
SO!
(não foi necessário, mas foi melhor que a finalização silenciosa; custou 24 bytes). Se o programa tentar dividir por 0, será impresso/0!
.Os erros são anexados ao final da saída padrão, pois o Runic não tem como gravar em STDERR.
Esta versão suporta programas arbitrariamente longos, mas ainda está limitada a uma pilha de ~ 90 (e, portanto, erros no segundo resultado do primeiro programa de teste) e não foi muito bem-sucedida (o aumento no comprimento do comando entre
S͗}:
eS͗}͍:0%:
exigia alguns espaçamento adicional para alinhar as seções, mas esse espaço extra também permitiu mais<
para um tamanho máximo de pilha maior).Como alternativa, este programa evitará
~
gerar um zero e o programa será encerrado após 1 milhão de etapas de execução (uma proteção contra loops infinitos incorporados ao intérprete Runic). Também inclui alguns bytes para pular o excesso de espaço NOP e executar um pouco mais.sizeof(stack) < mana
e há 5 IPs que mesclam e combinam sua mana (50 inicial). Aumentar esse valor para o limite verdadeiro (o +10) custaria mais 2 bytes e eu deixei a lógica de golfe em vez de precisa.Explicação
<<<<<
dos cinco IPs e se fundem noy
~
ou:
comandos para erro no estouro da pilha; a seção amarela é pulada se a pilha não estiver cheia demais e retorna via azulejo para o azul escuro.)
encontrado, o programa ramifica para a seção vermelha e move-se para a direita.(
seja encontrada (continue em verde).)
é encontrado (continue em laranja), a pilha de profundidade da pilha é aumentada e, quando(
for encontrado, a pilha de profundidade da pilha é exibida uma vez (prossiga na reentrada em verde escuro e laranja)B
retorno e retorne para ciano no loop de análise principal; caso contrário, enrole em laranja-> amarelo-> vermelho (reinsira o loop de redefinição do loop).fonte
PHP , 196 bytes
Entrada 1: Experimente online!
Entrada 2 (0, 1, 2, ...): Experimente online!
Entrada 3 (erro de divisão por zero): Experimente online!
Apenas traduz o código para PHP e o avalia!
fonte
JavaScript (V8) ,
178 172171 bytesTranspiles para JS. Pode lançar um
Z is not defined
oux is not defined
se o código tentar fazer algo ruim.Experimente o 1º programa online!
Experimente o 2º programa online!
Experimente o terceiro programa online!
Quão?
Cada instrução é transpilada para
S.push(
, seguida por um padrão específico, seguido por);
.Temos que testar a divisão por zero explicitamente, porque JS não dá a mínima para uma operação tão inofensiva. :-p
fonte
Java 8,
420418402373359357341 bytes-2 bytes graças a @Grimy .
-16 bytes graças a @ceilingcat .
Experimente online.
Explicação:
fonte
new Random().nextInt()
é 2 menor que(int)(Math.random()*1e5)
.java.util.*
importação para oStack
. Obrigado! :)new Random().nextInt()
por5
todas as caixas de teste, ainda será aprovado.5
não é exatamente aleatório ;) xkcd relevanteC (gcc) para Linux x86_64,
675643621211313773404040bytesExperimente online!
Este é um JIT que converte diretamente as instruções voláteis no idioma da máquina x86_64 e executa o código. Se a sua máquina não tiver as
rdrand
instruções, você poderá substituirL"\xf0c70f50"
-lo"Pj*X"
por um " PRNG menos uniforme ". Para a porta para algo diferente de Linux, substitua as syscalls nosprintf()
eexit()
blobs e ajustar parâmetros parammap()
.EDIT: Esta versão chama em
printf()
vez de implementar um subconjunto do zero.EDIT2: números inteiros suportados agora são 32 bits em vez de 64.
Um pouco menos jogado ...
fonte
Kotlin , 412 bytes
Infelizmente, perdi para o Java, mas não queria
import java.util.Stack
(e não tenho certeza se isso diminuiria a diferença).Ungolfed
Experimente online!
fonte