Muitas pessoas sabem o que é uma máquina da verdade na programação. Mas é hora de aumentarmos as coisas um pouco. Apresentando, a máquina da verdade estendida! Uma máquina de verdade estendida aceita duas coisas como entrada, um número inteiro n
e uma sequência não vazia s
. Ele gera s
n
tempos com espaço em branco à direita opcional. No entanto, se n
for igual a 0
, você deve produzir s
até o programa ser parado manualmente, ou seja, nunca deve terminar.
Além disso, se n
for um número negativo, a sequência precisará ser revertida. Por exemplo, com s=hello
e n=-1
, a saída seria olleh
.
Métodos padrão de entrada, qualquer tipo de saída, desde que possa lidar com infinito. Se você tiver uma resposta que não lida com infinito, sinta-se à vontade para publicá-la se for interessante ou em um idioma que não possa lidar com saída infinita.
Casos de teste
n, s, output
5, "hello world", "hello worldhello worldhello worldhello worldhello world"
0, "PPCG", "PPCGPPCGPPCGPPCG..."
-2, "truThY", "YhTurtYhTurt"
2000, "o", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"
Isso é código-golfe , então o código mais curto vence!
Aqui está a postagem original da Sandbox. Foram feitas edições nele. Obrigado a @ComradeSparklePony por criar a ideia deste desafio
fonte
-n
vez deabs n
.PHP> = 7.1, 67 bytes
Versão com em
list(,$x,$y)
vez de[,$x,$y]
Experimente online!fonte
MATL , 37 bytes
Experimente online!
Explicação:
fonte
Python 3, 71 bytes
Experimente online!
A variável
k
garante que o loop seja sempre executado pelo menos uma vez. Isso significa que sen=0
, então,n
será negativo na próxima iteração do loop, portanto o loop continuará sendo executado para sempre.fonte
Matlab, 87 bytes
Minha primeira tentativa no código-golfe! Todas as sugestões de golfe são bem-vindas.
fonte
05AB1E ,
171614 bytesExperimente online!
Explicação:
Guardado 2 bytes graças a @EriktheOutgolfer
fonte
'-å
por0‹
e0Q
com_
.Cubix , 41
Quarenta e quatro45bytesAceita entrada como
<N> <String>
Experimente online!
Cubificado:
Assista a corrida
Ainda há uma quantidade de no-ops no código das quais eu poderia obter mais alguns bytes, mas queria resolver isso antes que eu o quebre.
Procedimento básico é
I
obter contador de entradaA
receba o restante da entrada como caracteres;p?
remova o espaço, traga o número e teste-opsuqB$)
se o contador for negativo, inverta a pilha. Isso envolve manipular o número de entrada e o marcador EOI (-1). Incremente o contador.;p;ouqu
se o contador for zero, remova o contador e o marcador EOI e inicie o loop de saída permanente.(
se positivo diminuir o contador<<q?/o()u
o loop de saída. Isso produzirá cada caractere da pilha até que o marcador EOI (-1) seja atingido.... _ ... ?wq!
no marcador EOI final, contorne o cubo e reflita de volta para a?
faixa de mudança, coloque o marcador EOI na parte inferior e teste o contador.@
se zero, pare?u(
se inversão de marcha e decréscimo positivos, isso acaba atingindo o início do loop? ... <)
se negativo, contorne o cubo para o outro lado, redirecione para o início do loop enquanto passa por um incremento./)<
se incremento negativo e continuar no loop de saídafonte
JavaScript (ES6), 79 bytes
Snippet:
fonte
!n&&
em fazer um loop infinito. No entanto, isso atingirá um StackOverflow eventualmente?it should never terminate.
JavaScript (ES6),
98949183 bytes-4, -5 bytes graças a Arjun
-3 bytes graças a Rick Hitchcock
Começou diferente da resposta do Java , mas rapidamente se tornou muito semelhante após o golfe. O alerta é infinito, mas se você deseja que ele fique bonito, mude para
console.log
.l=alert;
e escreveralert
são do mesmo tamanho, mas se você alternar paraconsole.log
menos, será redefinido.fonte
while(!n)l(s)
em vez deif(!n)for(;;)l(s)
.[...s].reverse()
em vez des.split''.reverse()
l(s.repeat(Math.abs(n)))
em vez defor
loop, finalmente.QBIC , 36 bytes
Muito aqui, e o QBIC / QBasic simplesmente não tem a sintaxe para lidar com essas condições de maneira elegante.
Explicação:
fonte
Java (OpenJDK 8) , 137 bytes
Experimente online!
fonte
str , 30 bytes
Experimente online!
Explicação
fonte
C (gcc) ,
115112109107104 bytesExperimente online!
C (gcc) , 115 bytes (134 com
#include<string.h>
na frente)Experimente online!
fonte
Retina , 49 bytes
Formato de entrada: recebe a sequência, seguida por uma nova linha, seguida pelo número.
Experimente online!
Explicação:
A
/¶-/&
linha é executada apenas se o número for negativo.V
é o estágio reverso e inverte^.+
, que corresponde à sequência (.
corresponde a todos os caracteres, exceto as novas linhas).A
/¶0/&
linha é executada apenas se o número for 0.//+>
inicia um loop infinito, que imprime a sequência de trabalho após cada iteração.G0
pega a corda e descarta o número; faz isso infinitamente, imprimindo sempre.Isso marca o código que irá gerar uma string; o programa avalia a sequência como código Retina depois.
(.+)¶-*(\d+)
corresponde à cadeia inteira e coloca a cadeia no grupo de captura 1 e o número no grupo de captura 2..-$2+>K
`$1
gera o código Retina a ser executado:.
desativa a saída implícita (caso contrário, a cadeia seria impressa n + 1 vezes),-$2+
define um loop de repetição que se repete por {capture group 2} vezes. O sinal de menos no início transforma o número em um número negativo, pois isso desativa a funcionalidade de convergência no loop, que o interrompe após a 1ª iteração.>
define esse loop para imprimir após cada iteração. O restante do código é apenas para imprimir a sequência.fonte
Perl 6 , 44 bytes
Experimente online!
Bloco de código anônimo que pega um número e uma string e retorna uma lista (possivelmente infinita)
fonte