Disons que je suis à dix pas de ma destination. J'y marche en suivant le vieil adage "deux pas en avant et un pas en arrière". Je fais deux pas en avant, un en arrière, jusqu'à ce que je me tienne exactement sur ma destination. (Cela peut impliquer de dépasser ma destination et d'y revenir). Combien de pas ai-je parcourus?
Bien sûr, je ne serais peut-être pas à 10 pas. Je pourrais être à 11 pas ou 100. Je pourrais mesurer dix pas et continuer à marcher d'avant en arrière pour résoudre le problème, ou ... je pourrais écrire du code!
- Écrivez une fonction pour déterminer le nombre d'étapes nécessaires pour obtenir N étapes, dans l'ordre: deux pas en avant, un pas en arrière.
- Supposons que vous avez commencé à l'étape 0. Comptez les «deux pas en avant» comme deux pas, pas un.
- Supposons que toutes les étapes ont une longueur uniforme.
- Il doit renvoyer le nombre de pas effectués en premier lorsque vous atteignez cet espace. (Par exemple, à 10 pas, cela prend 26 pas, mais vous le frapperiez à nouveau à l'étape 30). Nous nous intéressons au 26.
- Utilisez n'importe quelle langue que vous aimez.
- Il doit accepter tout entier positif en entrée. Cela représente l'étape cible.
- Le plus petit nombre d'octets gagne.
Exemple:
Je veux m'éloigner de 5 pas:
| | | | | | <- I'm at step 0, not yet on the grid.
| |X| | | | <- I take two steps forward, I'm on step 2: the count is 2
|X| | | | | <- I take one step back, I'm on step 1: the count is 3
| | |X| | | <- I take two steps forward, I'm on step 3: the count is 5
| |X| | | | <- I take one step back, I'm on step 2 again: the count is 6
| | | |X| | <- I take two steps forward, I'm on step 4: the count is 8
| | |X| | | <- I take one step back, I'm on step 3 again: the count is 9
| | | | |X| <- I take two steps forward, I'm on step 5: the count is 11
Dans ce cas, le résultat de la fonction serait 11.
Exemples de résultats:
1 => 3
5 => 11
9 => 23
10 => 26
11 => 29
100 => 296
1000 => 2996
10000 => 29996
100000 => 299996
Amusez-vous, golfeurs!
code-golf
math
arithmetic
AJFaraday
la source
la source
Réponses:
Oasis ,
54 octets1 octet enregistré grâce à @Adnan
À ne pas confondre avec
23+3
Essayez-le en ligne!
Comment?
la source
b
.Python 2 , 18 octets
Essayez-le en ligne.
J'ai récupéré cette astuce de xnor il y a quelques jours à peine…!
la source
Python 2 , 20 octets
Essayez-le en ligne!
la source
Python 2 , 17 octets
Essayez-le en ligne!
J'ai trouvé l'expression par recherche par force brute. Il calcule efficacement
n+2*abs(n-2)
.la source
Polyglotte: Java 8 / JavaScript / C # .NET,
161412 octetsEssayez-le en ligne (Java 8).
Essayez-le en ligne (JavaScript).
Essayez-le en ligne (C # .NET) .
Port de la réponse Python 2 de @Lynn , alors assurez-vous de voter pour sa réponse.
Ancienne réponse:
Polyglotte: Java 8 / JavaScript / C # .NET,
1614 octetsEssayez-le en ligne (Java 8).
Essayez-le en ligne (JavaScript).
Essayez-le en ligne (C # .NET) .
Explication:
la source
n=>(--n*3||4)-1
soit également possible en JavaScript (également 14 octets).R , 20 octets
Essayez-le en ligne!
Je n'ai remarqué le modèle qu'après avoir mis en œuvre ma solution moins élégante.
la source
05AB1E ,
87 octetsEssayez-le en ligne!
-1 octet grâce à Emigna!
la source
3*s≠i4-
enregistre un octetOasis , 5 octets
Explication:
Essayez-le en ligne!
la source
Haskell , 15 octets
Essayez-le en ligne!
la source
ML standard , 16 octets
Essayez-le en ligne!
la source
Dodos , 27 octets
Essayez-le en ligne!
la source
Gelée , 6 octets
Essayez-le en ligne!
la source
Prolog (SWI) , 21 octets
Essayez-le en ligne!
la source
MATL , 7 octets
Utilise la
3*n-4*(n>1)
formule. Multipliez l'entrée par 3 (3*
), appuyez à nouveau sur l'entrée (G
) et décrémentez-la (q
). Si le résultat n'est pas nul (?
), soustrayez 4 du résultat (4-
).Essayez-le en ligne!
la source
2-|EG+
Gelée , 4 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
APL (Dyalog) , 9 octets
Essayez-le en ligne!
la source
C (gcc) , 20 octets
Essayez-le en ligne!
la source
f(n){n=n<2?3:n*3-4;}
f(n){n=n*3-4*(n>1);}
MachineCode sur x86_64,
343224 octetsNécessite l'
i
indicateur pour la sortie entière; l'entrée est prise via l'ajout manuel au code.Essayez-le en ligne!
J'ai parcouru ces 4 fonctions C différentes pour trouver le programme MachineCode de 24 octets:
n+2*abs(n-2)
=8d47fe9931d029d08d0447c3
(24 octets)3*n-4*!!~-n
=8d047f31d2ffcf0f95c2c1e20229d0c3
(32 octets)n*3-4*(n>1)
=31d283ff028d047f0f9dc2c1e20229d0c3
(34 octets)n<2?3:n*3-4
=83ff01b8030000007e068d047f83e804c3
(34 octets)la source
> <> ,
109 octets1 octet enregistré grâce à Jo King
Essayez-le en ligne!
la source
4 , 54 octets
Essayez-le en ligne!
Si vous remettez en question la méthode de saisie, veuillez d'abord visiter l' entrée numérique et la sortie peuvent être données sous forme de méta-message de code de caractère .
la source
4
n'a qu'une entrée char.Japt, 7 octets
Un port de la solution Python de Lynn.
Essayez-le
Alternative
C'était une alternative amusante aux solutions de formule fermée qui est, malheureusement, un octet plus long:
Essayez-le
la source
TI-Basic, 8 octets
la source
05AB1E , 4 octets
Utilise la méthode abs de la réponse de Dennis 'Jelly
Essayez-le en ligne!
Explication
la source
65816 code machine, 22 octets
J'aurais pu faire ce code machine 65C02 facilement pour 3 octets de moins, mais je ne l'ai pas fait, car la taille du registre sur le 65C02 est de 8 bits au lieu de 16 bits. Cela fonctionnerait, mais c'est ennuyeux car vous ne pouvez utiliser que des chiffres très bas ;-)
vidage xxd:
démontage / explication du code:
Test sur un émulateur compatible 65816:
la source
SHELL , 28 octets
Tests:
Explication:
La formule est:
suivant la séquence de 3 étapes "Deux pas en avant et un pas en arrière", nous aurons la série arithmétique:
Au minimum, ou première coïncidence:
en une seule formule:
la source
$((…))
) sont effectuées, probablement pas.F(){bc<<<$1*3-$(($1>1))*4}
fonctionne bien en zsh et supprime 2 octetsPython 3 , 48 octets
Essayez-le en ligne!
la source
J , 9 octets
Essayez-le en ligne!
la source
MATLAB / Octave , 15 octets
Essayez-le en ligne!
Un peu surpris qu'il n'y ait pas déjà de réponse MATLAB. Même algorithme
3*n-4
si supérieur à 1, ou3*n
autre.la source
Brain-Flak , 38 octets
Essayez-le en ligne!
La première réponse que je vois pour calculer la réponse en marchant d'avant en arrière.
la source
W
d
, 7 octetsExplication
Évalue
(a*3)-4*(a>1)
.Une autre alternative possible
Évalue
(a*3)-4*(1%a)
.la source