Votre propre "pour" instruction
En supposant que vous ayez les entrées suivantes: a, b, c, d
La saisie peut se faire sur une ligne, quel que soit le format "a / b / c / d" ou "a, b, c, d", etc.
Vous pouvez également avoir 4 entrées.
Vous devez coder le comportement suivant (pseudo-code ici):
var i = <a>
while (i <b> <c>)
print i
i = i + <d>
print "\n"
Voici quelques cas de tests:
input : 1,<,10,1
output :
1
2
3
4
5
6
7
8
9
Un de plus :
input : 20,>,10,1
output :
20
21
22
23
24
25
26
27
...
infinite loop / program crashes
a
est un entier , la valeur initiale dei
.b
est une chaîne ou un omble chevalier , il ne peut pas être autre chose, le comparateur utilisé dans l'état de fin de lafor
boucle.b
peut et doit être l'une des chaînes suivantes:- ">" - "<"
c
est un entier , le nombre utilisé dans la condition de fin de lafor
boucle.d
est un entier ajouté à i à chaque boucle.
C'est du code-golf, la réponse la plus courte gagne!
print "\n"
, mais j'utilise l'alerte javascript pour chaque ligne. Cela serait-il acceptable ou devrais-je utiliser console.log à la place, ce qui allongerait ma réponse?alert("23\n24\n25");
marcherait alors que ça ne marcheraitalert("23"); alert("24"); alert(25);
pasRéponses:
JavaScript (ES6),
444356 octetsEnregistré 1 octet grâce à ETHproductions
Edit: corrigé pour se conformer aux exigences de sortie
Tester
Afficher l'extrait de code
la source
eval
pour économiser un octet:(a,b,c,d)=>{for(;eval(a+b+c);a+=d)alert(a)}
Javascript (ES6),
474248 octetsVoulait faire la version pour, mais quelqu'un était plus rapide, alors voici la version récursive.
Vous devez ajouter
f=
avant et appeler comme çaf(b,c,d)(a)
.Un grand merci à Arnauld pour son superbe golf.
alert
changé enconsole.log
raison de la spécification de sortiela source
Pure bash, 35
Je suppose qu’il suffit de brancher les paramètres dans la norme pour la boucle:
Essayez-le en ligne .
la source
Gelée , 12 octets
Essayez-le en ligne!
Jelly a beaucoup de façons de résumer, créer des plages, etc. Cependant, refléter exactement le comportement de C ++ est assez difficile, en raison de cas spéciaux tels que l'incrément étant 0, la boucle se terminant avant de commencer (en raison de l'inégalité inversée ), et l’incrément allant dans la mauvaise direction (ce qui signifie que la condition de sortie de la boucle ne peut pas être remplie naturellement). En tant que telle, cette solution est fondamentalement une traduction directe du C ++, même si cela la rend plutôt de bas niveau qu'un programme Jelly. Heureusement, C ++ a un comportement indéfini en cas de dépassement d'entier signé (la question utilise
int
), ce qui signifie qu'un programme peut tout faire dans ce cas. Il n'est donc pas nécessaire d'essayer de reproduire le comportement de dépassement de capacité.Explication
Arrêter le programme est le moyen le plus rapide de désactiver la sortie implicite de Jelly (sinon, la valeur finale du compteur serait sortie); cela génère un tas de messages d'erreur sur stderr, mais nous considérons normalement que cela est autorisé.
Incidemment, le compteur de boucle est initialisé avec la valeur actuelle avant le début de la boucle. Lorsque la boucle apparaît au début du programme, ce sera la première entrée.
la source
t
pourḊ
ne pas avoir l' accident. La sortie de file d'attente produit une liste vide pour laquelle l'impression implicite de Jelly ne donne rien.Python 2 , 50 octets
Essayez-le en ligne!
la source
R, 63 octets
la source
Java, 58 octets
la source
i
? Pourriez-vous ignorer la partie d'initialisation et simplement l'utilisera
? De plus, l'utilisation de la valeur ASCII de '>' (62) enregistre un octet.b>61
05AB1E ,
22 à20 octetsEssayez-le en ligne!
Explication
la source
SmileBASIC, 53 octets
Explication:
Ceci utilise le fait qui
X<Y
est le même que-X>-Y
la source
READ
déclaration en sauvegardant 1 octet.Empilés , 34 octets
Essayez-le en ligne! (Test inclus.) C'est une fonction qui s'attend à ce que la pile ressemble à ceci:
Par exemple:
Explication
la source
C ++, 80
Oups, ce n'est
C++
pasC
. Était un peu confus par la question.la source
using namespace std
gratuitement).i
commencer àa
, non0
? Vous pouvez simplement utilisera
et ignoreri
complètement et utiliser la valeur ASCII de '>'.for(;b==62?a>c:a<c;a+=d)
f(1,'<'3,1);
for(b-=61;b*a>b*c;a+=d)
fonctionne pour un seul octet; mais le fait aussifor(;b-62?a<c:a>c;a+=d)
.C
5251 octets-1 octet grâce à H Walters
Essayez-le en ligne!
la source
b&2
au lieu deb^60
pour un autre octet.Python 3, 52 octets
repl.it
la source
Pip , 14 octets
Prend quatre arguments en ligne de commande. Prend en charge les nombres négatifs et à virgule flottante et les opérateurs de comparaison
< > = <= >= !=
. Essayez-le en ligne!la source
Gelée , 8 octets
This is a dyadic link that takes a,b,c as its left argument and d as its right one. Output may be infinite and goes to STDOUT.
Try it online!
How it works
la source
F
to flatten the array.Python 2, 45 bytes
Try it online!
A very literal implementation of the spec. Takes the code template, substitutes in the inputs via string formatting, and executes it.
la source
Plain TeX, 88 bytes
The command
\for
provides the requested function. Save this asfor.tex
and then run it and enter the variable values at the command line:pdftex '\input for \for 1 < 5 1 \bye'
The variable values must be separated by spaces.la source
Python 3, 61 bytes
One liner:
la source
\t
with a space.Haskell,
6664 bytesTry it online! Usage:
la source
Bash (+Unix Tools), 29 bytes
Golfed
Test
la source
Ruby,
4341 bytesIf
b
can be taken in as a Ruby symbol instead of a string, you get 38 bytes:Try either solution online!
la source
Common Lisp,
8280797364 bytesTest
-9 bytes thanks to PrzemysławP.
la source
(defmacro f(a b c d)<insert backqoute here>(do((i,a(+ i,d)))((not(,b i,c)))(print i)))
Usage:(f 1 < 10 1)
PHP,
6965 bytesRun with '-r'; provide command line arguments as input.
For
just one byte more4 more bytes, I can take every operator:Yeah, evil eval. Did you know that it can return something?
Shorthand destructuring
[,$i,$b,$c,$d]=$argv;
would save 4 more bytes;but PHP 7.1 postdates the challenge.
la source
list
saves 4 Bytes plus 4 Bytes with short syntaxlist()
.Perl 6, 44 bytes
How it works
If it's okay to return a (potentially infinite) sequence of numbers as a value of type
Seq
, instead of printing the numbers to stdout, the.say for
part could be removed, bringing it down to 35 bytes.la source
Clojure,
6663 bytes-3 bytes by factoring out the
loop
. I'm "abusing" the init parameter to act as the running accumulator.Recursive solution (with TCO). See comments in pregolfed code. I tried a non-TCO recursive solution, and it ended up being 67 bytes.
I'd love to see this beat in Clojure! I think this is the smallest I can get it.
la source
#(when(({">">"<"<}%2)% %3)(println %)(recur(+ % %4)%2 %3 %4))
would be 61 bytes, combining yourwhen
with my({">">"<"<}%2)
.Groovy, 51 bytes
This is an unnamed closure. Try it Online!
Caution - If you want to test this with
groovy console
, make sure you kill the entire process when the input causes an infinite loop. I noticed this after it consumed ~5 gigs of RAM.la source
QBIC,
5140 bytesAnd three minutes after posting I realised I could simplify the terminator logic...
la source
Batch, 94 bytes
If it wasn't for the second parameter behaviour, it could be done in 53 bytes:
This simply does nothing if the step has the wrong sign. The extra test is because Batch's
for
loop allows the loop variable to equal the end value.la source
Clojure, 66 bytes
This could have been 55 bytes as
<
and>
are functions in Clojure:la source
<
instead of"<"
, except Clojure.TI-Basic,
4134 bytesla source
Prompt
,Str2
,Str3
,While
,expr(
,Disp
,->
, andEnd
are all single-byte symbols. I count 29 bytes.Str2
,Str3
, andexpr(
are all two-byte tokens. To see a list of one-byte tokens, check out tibasicdev.wikidot.com/one-byte-tokens