A tarefa é simples. Escreva um intérprete para o idioma * .
Aqui está um link maior para o wiki.
Existem apenas três programas * válidos:
*
Imprime "Olá, mundo"*
Imprime um número aleatório entre 0 e 2.147.483.647*+*
Corre para sempre.
O terceiro caso deve ser um loop infinito de acordo com as especificações nesta pergunta
Entrada:
- A entrada pode ser obtida através de qualquer método de entrada aceitável pelas nossas regras de E / S padrão
- Será sempre um dos programas acima
Resultado:
- O primeiro caso deve ser impresso exatamente
Hello World
, com ou sem uma quebra de linha à direita. - Para o segundo caso, se o número inteiro máximo do seu idioma for menor que 2.147.483.647, use o número inteiro máximo do seu idioma
- O primeiro e o segundo casos podem ser impressos em qualquer saída aceitável de acordo com nossas regras de E / S padrão.
- O terceiro caso não deve dar saída.
Pontuação:
Como se trata de código-golfe , a resposta mais curta, em bytes, vence.
code-golf
interpreter
code-golf
array-manipulation
sorting
code-golf
halting-problem
code-golf
javascript
code-golf
algorithm
code-golf
arithmetic
code-golf
math
counting
code-golf
math
code-golf
decision-problem
radiation-hardening
code-golf
conversion
bitwise
code-golf
number
decision-problem
code-golf
string
decision-problem
code-golf
random
game
code-golf
ascii-art
graphical-output
code-golf
decision-problem
binary-tree
tree-traversal
code-challenge
array-manipulation
code-challenge
graphical-output
path-finding
test-battery
algorithm
code-golf
integer
factorial
code-golf
binary-tree
code-golf
grid
graph-theory
code-golf
regular-expression
quine
code-golf
encoding
code-golf
king-of-the-hill
javascript
TheOnlyMrCat
fonte
fonte
0
e2,147,483,647
", isso é inclusivo ou exclusivo? (Por exemplo, é0
uma saída válida?)-1
para mim.Respostas:
* , 0 bytes
Como * não tem como ler a entrada, as regras padrão permitem especificar que a entrada deve ser fornecida concatenando-a no programa .
(... eu acho. Existe uma condição "pelo menos o dobro de votos positivos e negativos" que eu não tenho o representante para verificar).
fonte
R , 69 bytes
Experimente online!
switch
tenta corresponder aos argumentos nomeados e, se não houver correspondência, seleciona o primeiro sem nome após o primeiro, que neste caso é o loop infinitorepeat{}
.fonte
Geléia ,
2120 bytesUm link monádico que aceita uma lista de caracteres.
Experimente online!
vL’...
também funciona (veja abaixo).Quão?
Alternativo
fonte
C (gcc) ,
6663 bytesObrigado a attinat pelos -3 bytes.
Eu só tenho que verificar o segundo caractere: se o LSB estiver definido, é um
+
(portanto, o programa é "*+*
") e o programa faz um loop. Depois disso, se forNUL
"*
" , o programa foi " " e nós exibimosHello World
; caso contrário, ele exibirá um valor aleatório ("*
", a única outra opção restante.)Experimente online!
fonte
f(char*s){*++s&1?f(s-1):printf(*s?"%d":"Hello World",rand());}
rand
não é garantido que retorne um valor suficientemente grande;RAND_MAX
eINT_MAX
não é garantido que sejam os mesmos (e não estão nos compiladores do mundo real, por exemplo, o Visual StudioRAND_MAX
é32767
, enquantoINT_MAX
[nos modernos sistemas derivados de x86] é o2147483647
valor especificado na pergunta do OP).Python 2 ,
103938987 bytesEu combinei minha resposta anterior com Chas das Browns resposta e tem algo alguns bytes mais curto.
O número aleatório estará entre 0 e 2 ** 31-1, inclusive.
Experimente online!
Versões prévias:
103 bytes
93 bytes
fonte
randint(0,2**31-1)
porrandrange(2**31)
.while'*'<i
Salvar 2randrange(2**31)
paragetrandbits(31)
(o último retornalong
, nãoint
, masprint
imprimirá ostr
formulário, não orepr
formulário, para que o finalL
não esteja lá).i=input()
só funciona se as entradas forem citadas; se você simplesmente inserir sem formatação*/ * /*+*
, ela morreria com aSyntaxError
(porqueinput
inclui um implícitoeval
); você precisaria inserir'*'/' * '/'*+*'
(ou equivalente com aspas duplas). Não vi nada óbvio nas regras de E / S padrão que permitissem isso, o que poderia significar que você precisaria usarraw_input()
, custando quatro bytes.input()
pega uma string como entrada e a avalia. Eu realmente não estou adicionando à entrada, estou apenas tomando uma string como entrada, e as cordas têm aspas. Isso é bastante padrão, da mesma maneira que eu posso pegar uma matriz como, em[1,2,3]
vez de uma string delimitada, que eu tenho que dividir e analisar. O objetivo do site não é restringir a entrada, é facilitar a E / S, para que possamos focar o código no desafio em questão.Barril ,
-lp
,-ir
302625242019 bytes-1 byte usando sinalizadores
Experimente online!
Histórico de respostas
Experimente online!
Encurtada
Hello World
para a sequência de dicionáriosExperimente online!
Eu nunca deixei de me surpreender com o poder do barril. Créditos ao usuário EdgyNerd por outro byte salvo.
Versões anteriores
Experimente online!
Crédito ao usuário A__ pelo byte extra salvo.
Versão antiga
Essencialmente, pega o programa de entrada e:
Em seguida, imprima implicitamente a pilha.
4 bytes salvos devido ao fato de o hello world não precisar de pontuação.
Experimente online! Versão antiga
Experimente online! Nova versão
fonte
Befunge-93 , 54 bytes
Experimente online!
Anotado:
A aleatoriedade não é uniforme. A cada incremento, há 50% de chance de parar de incrementar.
fonte
Japonês , 22/25 bytes
A primeira solução é para as especificações originais que tinham
*<space>
como segundo programa e a outra é para as especificações atualizadas que as alteraram arbitrariamente para<space>*</space>
, com agradecimentos a EoI pela "correção" sugerida.Ambos lançam um erro de estouro ao entrar no loop infinito do terceiro programa, mas, teoricamente, com memória suficiente (o que podemos assumir para os propósitos do código-golfe ), funcionaria para sempre.
Experimente o programa 1
Experimente o programa 2
Experimente o programa 3
Experimente o programa 1
Experimente o programa 2
Experimente o programa 3
fonte
*<space>
. Não tem tempo para atualizar agora.UÌ>S
vez de¢
no segundo ternárioJavaScript (ES7), 66 bytes
Experimente online! (Olá Mundo)
Experimente online! (número aleatório)
Experimente online! (Loop infinito)
fonte
x=(z=>x())&&x()
não funciona para -1byte do código de loop infinito, assumindo um navegador sem tamanho máximo pilha de chamadas?Geléia ,
2321 bytesExperimente online!
Um link monádico pegando um único argumento e retornando
Hello World
, um inteiro aleatório de 31 bits ou fazendo um loop infinito conforme a especificação.Todas as opções:
*
*
*+*
Explicação
fonte
Java (JDK) , 83 bytes
Experimente online!
fonte
Python 2 ,
918988 bytesExperimente online!
2 bytes graças a Jonathan Allan ; 1 byte thx para o ShadowRanger .
fonte
while'*'<p
salva 2getrandbits(31)
salva um byterandrange(2**31)
.PowerShell,
60, 56 bytesConsideravelmente versão mudo, a técnica só jogar golfe aqui está omitindo
Get-
noGet-Random
.UPD. Reduzido para 56 bytes removendo aspas, graças a veskah !
fonte
Perl 5
-p
,4339 bytesExperimente online!
fonte
C # (compilador interativo do Visual C #) , 71 bytes
Experimente online!
fonte
Ruby
-n
, 47 bytesExperimente online!
fonte
Wolfram Language (Mathematica) , 65 bytes
Experimente online!
fonte
Carvão , 30 bytes
Experimente online! Link é a versão detalhada do código. Abusa do formato de entrada padrão do Charcoal, que se divide em espaços se houver apenas uma linha; portanto, a entrada do número aleatório se parece com três entradas. Explicação:
Repita enquanto a primeira entrada contém a
*
.Se a primeira entrada for
*
apenas uma ...... substitua-o por
Hello World
, fazendo com que o loop termine.*+*
não é substituído, resultando em um loop infinito.Se a primeira entrada não estiver vazia, emita-a.
Mas se estiver vazio, emita um número inteiro aleatório no intervalo desejado.
fonte
Adicionar ++ , 78 bytes
Experimente online!
Explicação
fonte
Braquilog ,
2623 bytesExperimente online!
Leva o programa como uma string pela variável de entrada e ignora a variável de saída. Explora fortemente a garantia de que a entrada é apenas um dos três programas válidos: qualquer entrada de comprimento três se comportará como um
" * "
ou"*+*"
dependendo de o primeiro caractere ser um espaço ou não, e qualquer outra entrada se comportará como"*"
.fonte
PHP , 51 bytes
Experimente online! (Olá Mundo)
Experimente online! (Número aleatório)
Experimente online! (Loop infinito)
Toma o segundo caractere da entrada que pode ser
''
,'*'
ou'+'
. Caso'+'
o valor'*'<'+'
seja verdadeiro e o loop seja infinito, caso contrário, após o loop, "Hello World" ou um número aleatório é mostrado. Elerand()
gera automaticamente um número entre 0 e osgetrandmax()
usos definidosRAND_MAX
na biblioteca C padrão e, por padrão, está2147483647
na maioria das plataformas / ambientes, incluindo o TIO.fonte
05AB1E , 21 bytes
Experimente online. (OBSERVAÇÃO: O buildin aleatório é bastante lento com grandes listas; portanto, pode levar algum tempo até que o resultado seja fornecido.)
Explicação:
Veja esta dica 05AB1E meu (seção Como usar o dicionário? ) Para entender por que
”Ÿ™‚ï
é"Hello World"
.fonte
Pitão , 32 bytes
Experimente online!
Explicação (Python-ish)
fonte
hC*4\ÿ
é^2 32
, mas para que a solução esteja correta, você deve usar^2 31
. Além disso, use emz
vez deJw
economiza mais 1 byte. E sua explicação pula a linhat
imediatamente anteslJ
.+
caractere, economiza 1 byte, porque você não precisa diminuí-lo.APL (Dyalog Unicode) , SBCS de 39 bytes
Prefixo anônimo lambda.
Experimente online!
{
"dfn";⍵
é o argumento:'+'∊⍵:
se plus é um membro do argumento:∇⍵
cauda recursão no argumento' '∊⍵
se o espaço for um membro do argumento:?0
flutuação aleatória (0–1)2E31×
escala para (0–2³¹)⌊
chão'Hello World'
caso contrário, retorne a stringfonte
Commodore BASIC (VIC-20, C64, TheC64Mini etc) - 170 bytes tokenize BASIC
Penso que, para fazer isso com mais precisão, terei que me aprofundar no mundo estranho da linguagem assembly 6502, mas este é um primeiro rascunho.
Primeiro, a
INPUT
palavra - chave no Commodore BASIC ignora os espaços em branco; portanto, a sub-rotina em linha9
é uma maneira rápida e suja de aceitar entradas do teclado, incluindo espaços.Segundo ponto, inteiros Commodore BASIC têm um alcance de 16-bit assinado, por isso -32.768-32.767 fonte - para que eu tenha mantido o número aleatório gerado para 0 - 32767 inclusiva
fonte
Wren ,
143135 bytesEu não sou um bom jogador de golfe ... O RNG gera o mesmo valor de cada vez porque é um gerador de números pseudo-aleatórios.
Experimente online!
fonte
JavaScript, 63 bytes, sem recursividade infinita
rede ruim, então nenhum link TIO
fonte