Sua própria instrução "para"
Supondo que você tenha a seguinte entrada: a, b, c, d
A entrada pode estar em uma linha usando qualquer formato "a / b / c / d" ou "a, b, c, d" etc.
Você também pode ter 4 entradas.
Você deve codificar o seguinte comportamento (pseudo-código aqui):
var i = <a>
while (i <b> <c>)
print i
i = i + <d>
print "\n"
Aqui estão alguns casos de testes:
input : 1,<,10,1
output :
1
2
3
4
5
6
7
8
9
Mais um :
input : 20,>,10,1
output :
20
21
22
23
24
25
26
27
...
infinite loop / program crashes
a
é um número inteiro , o valor inicial dei
.b
é uma string ou um char , não pode ser outra coisa, o comparador usado na condição final dofor
loop.b
pode e deve ser uma das seguintes strings:- ">" - "<"
c
é um número inteiro , o número usado na condição final dofor
loop.d
é um número inteiro que é adicionado a i em cada loop.
Este é o código-golfe, a resposta mais curta ganha!
print "\n"
, mas estou usando o alerta do javascript para cada linha. Isso seria aceitável ou eu teria que usar o console.log em vez de prolongar minha resposta?alert("23\n24\n25");
iria funcionar enquantoalert("23"); alert("24"); alert(25);
não o fariaRespostas:
JavaScript (ES6),
444356 bytesEconomizou 1 byte graças ao ETHproductions
Edit: corrigido para atender aos requisitos de saída
Teste
Mostrar snippet de código
fonte
eval
para salvar um byte:(a,b,c,d)=>{for(;eval(a+b+c);a+=d)alert(a)}
Javascript (ES6),
474248 bytesQueria fazer a versão for, mas alguém foi mais rápido, então aqui está a versão recursiva.
Você precisa adicionar
f=
antes e chamá-lo comof(b,c,d)(a)
.Muito obrigado a Arnauld pelo golfe incrível.
alert
alterado paraconsole.log
por causa da especificação de saídafonte
Festa pura, 35
Eu suponho que está OK apenas para conectar os parâmetros no loop for padrão:
Experimente online .
fonte
Gelatina , 12 bytes
Experimente online!
O Jelly tem várias maneiras de fazer iterações, criar intervalos, etc. Mas, espelhar o comportamento do C ++ exatamente é bastante difícil, devido a casos especiais como o incremento sendo 0, o loop terminando antes de iniciar (devido à desigualdade ao contrário) ) e o incremento indo na direção errada (o que significa que a condição de saída do loop não pode ser atendida naturalmente). Como tal, essa solução é basicamente uma tradução direta do C ++, embora isso o torne um nível mais baixo do que normalmente é um programa Jelly. Felizmente, o C ++ tem um comportamento indefinido no estouro de número inteiro assinado (a pergunta usa
int
), o que significa que um programa pode fazer qualquer coisa nesse caso e, portanto, não há necessidade de tentar imitar o comportamento do estouro.Explicação
Falhando no programa é a maneira mais concisa de desativar a saída implícita do Jelly (caso contrário, ele produziria o valor final do contador); ele gera várias mensagens de erro no stderr, mas normalmente consideramos isso permitido.
Aliás, o contador do loop é inicializado com o valor atual antes do loop iniciar. Como o loop aparece no início do programa, essa será a primeira entrada.
fonte
t
paraḊ
não ter travamento. A desenfileiramento resulta em uma lista vazia para a qual a impressão implícita de Jelly não produz nada.Python 2 , 50 bytes
Experimente online!
fonte
R, 63 bytes
fonte
Java, 58 bytes
fonte
i
? Você poderia pular a parte de inicialização e apenas usara
? Além disso, o uso do valor ASCII de '>' (62) salva um byte.b>61
05AB1E ,
2220 bytesExperimente online!
Explicação
fonte
SmileBASIC, 53 bytes
Explicação:
Isso usa o fato de que
X<Y
é o mesmo que-X>-Y
fonte
READ
instrução, economizando 1 byte.Empilhados , 34 bytes
Experimente online! (Teste incluído.) Essa é uma função que espera que a pilha se pareça com:
Por exemplo:
Explicação
fonte
C ++, 80
Opa, isso
C++
não éC
. Fiquei um pouco confuso com a pergunta.fonte
using namespace std
de graça).i
precisa começara
, não0
? Você pode simplesmente usara
e pulari
completamente e usar o valor ASCII de '>'.for(;b==62?a>c:a<c;a+=d)
f(1,'<'3,1);
for(b-=61;b*a>b*c;a+=d)
trabalha para um único byte; mas o mesmo acontecefor(;b-62?a<c:a>c;a+=d)
.C,
5251 bytes-1 byte graças a H Walters
Experimente online!
fonte
b&2
vez deb^60
para outro byte.Python 3, 52 bytes
repl.it
fonte
Pip , 14 bytes
Leva quatro argumentos de linha de comando. Suporta números de ponto flutuante e negativo e operadores de comparação
< > = <= >= !=
. Experimente online!fonte
Geléia , 8 bytes
Esse é um link diádico que leva a, b, c como argumento à esquerda ed como seu argumento à direita. A saída pode ser infinita e vai para STDOUT.
Experimente online!
Como funciona
fonte
F
para achatar a matriz.Python 2 , 45 bytes
Experimente online!
Uma implementação muito literal da especificação. Pega o modelo de código, substitui as entradas por formatação de string e o executa.
fonte
TeX simples, 88 bytes
O comando
\for
fornece a função solicitada. Salve issofor.tex
e, em seguida, execute-o e insira os valores das variáveis na linha de comandos:pdftex '\input for \for 1 < 5 1 \bye'
Os valores das variáveis devem ser separados por espaços.fonte
Python 3, 61 bytes
Um forro:
fonte
\t
por um espaço.Haskell ,
6664 bytesExperimente online! Uso:
fonte
Bash (+ Ferramentas Unix), 29 bytes
Golfe
Teste
fonte
Ruby,
4341 bytesSe
b
pode ser recebido como um símbolo Ruby em vez de uma string, você obtém 38 bytes :Experimente qualquer uma das soluções online!
fonte
Lisp comum,
8280797364 bytesTeste
-9 bytes graças a PrzemysławP.
fonte
(defmacro f(a b c d)<insert backqoute here>(do((i,a(+ i,d)))((not(,b i,c)))(print i)))
Uso:(f 1 < 10 1)
PHP,
6965 bytesExecute com '-r'; fornecer argumentos de linha de comando como entrada.
Por
apenas um byte a mais4 bytes, posso usar todos os operadores:Sim, avaliação do mal. Você sabia que isso pode retornar algo?
A desestruturação abreviada
[,$i,$b,$c,$d]=$argv;
economizaria mais 4 bytes;mas o PHP 7.1 pós-desafio.
fonte
list
salva 4 bytes mais 4 bytes com sintaxe curtalist()
.Perl 6 , 44 bytes
Como funciona
Se não há problema em retornar uma sequência (potencialmente infinita) de números como um valor do tipo
Seq
, em vez de imprimir os números no stdout, a.say for
peça pode ser removida, reduzindo-a para 35 bytes.fonte
Clojure,
6663 bytes-3 bytes fatorando o
loop
. Estou "abusando" do parâmetro init para atuar como acumulador em execução.Solução recursiva (com TCO). Veja os comentários no código pré-escrito. Tentei uma solução recursiva não-TCO e ela acabou sendo de 67 bytes.
Eu adoraria ver essa batida em Clojure! Eu acho que este é o menor que posso conseguir.
fonte
#(when(({">">"<"<}%2)% %3)(println %)(recur(+ % %4)%2 %3 %4))
seria 61 bytes, combinando o seuwhen
com o meu({">">"<"<}%2)
.Groovy, 51 bytes
Este é um fechamento sem nome. Experimente Online!
Cuidado - Se você quiser testar isso
groovy console
, mate todo o processo quando a entrada causar um loop infinito. Percebi isso depois que consumiu ~ 5 GB de RAM.fonte
QBIC ,
5140 bytesE três minutos após a postagem, percebi que poderia simplificar a lógica do terminador ...
fonte
Lote, 94 bytes
Se não fosse o comportamento do segundo parâmetro, poderia ser feito em 53 bytes:
Isso simplesmente não faz nada se a etapa tiver o sinal errado. O teste extra é porque o
for
loop do lote permite que a variável do loop seja igual ao valor final.fonte
Clojure, 66 bytes
Poderia ter 55 bytes
<
e>
são funções no Clojure:fonte
<
, em vez de"<"
, exceto Clojure.TI-Basic,
4134 bytesfonte
Prompt
,Str2
,Str3
,While
,expr(
,Disp
,->
, EEnd
são todos os símbolos de um byte. Eu conto 29 bytes.Str2
,Str3
, eexpr(
são todas as fichas de dois bytes. Para ver uma lista de tokens de um byte, consulte tibasicdev.wikidot.com/one-byte-tokens