J'ai remarqué que le compteur kilométrique de ma voiture était à 101101 lorsque j'ai commencé à travailler aujourd'hui. C'est un chiffre sympa parce que c'est binaire (et un palindrome, mais ce n'est pas important). Maintenant, je veux savoir quand la prochaine fois je vais avoir un compteur kilométrique binaire. Je ne peux pas lire le compteur kilométrique pendant que je conduis, car ce serait dangereux, donc il faudra que ce soit binaire lorsque je vais au travail ou à la maison.
Il y a vraiment une mauvaise circulation sur le chemin de et vers mon bureau, donc je dois emprunter un itinéraire différent chaque jour.
Aux fins de ce défi, une journée est un aller-retour et commence par mon trajet au travail.
Vous devrez prendre la lecture initiale de l'odomètre et une séquence de 10 éléments représentant le nombre de miles dans chaque sens. Cette séquence doit être répétée jusqu'à ce que vous arriviez à une lecture d'odomètre binaire. Vous devez ensuite afficher le nombre de jours nécessaires pour arriver à une lecture binaire.
Le kilométrage pour l'itinéraire et la lecture du compteur kilométrique seront des entiers positifs. Le nombre de jours sera soit x
ou x.5
, donc votre sortie du nombre de jours doit prendre en charge la virgule flottante pendant une demi-journée. Si le nombre de jours est un entier, vous n'avez pas besoin de sortir le .0
. Le compteur kilométrique atteindra toujours éventuellement un état binaire.
Toute forme d'entrée / sortie est acceptable et les failles standard sont interdites.
Cas de test:
101101, [27, 27, 27, 27, 27, 27, 27, 27, 27, 27] == 165.0
1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100] == 22.5
2, [2, 3, 1, 2, 7, 6, 10, 92, 3, 7] == 2.0
Réponses:
Gelée,
221716 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Javascript,
6863616052 octets5 octets de réduction grâce à @ETHproductions .
2311 !! octets de réduction merci @NotthatCharles .Testez ici.
la source
(i+=a[++m%10])
marcherait?r
oum
quoi que ce soit (ils devraient par défaut être nuls, c.-à-d., 0)m=0
l'initialisation et l'incrémenter après modulo (m++%10
) ... à quel point vous pouvez simplement le supprimerr
entièrement. Toute la méthode est alors dans les années 50MATL ,
292625 octetsLe format d'entrée est
EDIT (10 juin 2016): Le lien suivant remplace
v
par&v
( 26 octets ) pour s'adapter aux changements de langueEssayez-le en ligne!
la source
Lua, 108 octets
Première utilisation de la boucle repeat..until dans un codegolf!
Non golfé
Après la première boucle,
o
aura une partie décimale à cause detonumber
, j'ai dû la supprimer ... Et pour l'ajouter pour le premier cas, c'est pourquoi je la concatène avec un"."
.la source
Java, 112
millesoctetsla source
05AB1E , 31 octets
Code:
D'une manière ou d'une autre, le code ne s'arrête pas (et je ne comprends pas pourquoi). Apparemment, j'oubliais qu'il y avait trois boucles en cours au lieu de 2. Donc, cela entrerait toujours dans une boucle infinie ...Essayez-le en ligne!
la source
PowerShell,
8473675957 octetsPrend des entrées
$a
et$b
, s'attendant$b
à être un tableau explicite de kilométrages (par exemple,.\binary-car.ps1 1 @(13,25,3,4,10,8,92,3,3,100)
). On entre alors dans une boucledo
/until
. À chaque itération, nous incrémentons$a
le kilométrage en$b
position at$i++ % 10
afin de parcourir en continu le tableau. Cela commencera à zéro car pour la première boucle, le$i
n'est pas initialisé, et est donc évalué à$null
, ce qui équivaut à0
dans ce contexte, et ce n'est qu'après cette évaluation que++
se produit.Ensuite, l'
until
instruction vérifie si notre nombre est seulement0
et1
en-replace
commençant1
par rien, en le convertissant en entier avec+
, puis en prenant le booléen-pas avec!
. S'il vaut vrai, nous terminerons la boucle, sortirons$i / 2
et terminerons le programme.Explication de la boucle conditionnelle - Dans PowerShell, tout entier non nul est
$true
, et toute chaîne non vide l'est également$true
. Par exemple,231145
(un entier) deviendra"2345"
(une chaîne) après le-replace
, qui sera converti en entier comme2345
(un entier),!
dont le est$false
. Cependant,101101
(un entier) deviendra"00"
(une chaîne) qui sera convertie en0
(un entier),!
dont la valeur est$true
. Si nous n'avions pas le+
, la"00"
volonté!
de$false
puisque c'est une chaîne non vide.Edit - Enregistré 11 octets en échangeant l'égalité sur la longueur pour strictement zéro
Edit 2 - Enregistré encore 6 octets en réalisant que ce
$b.count
sera toujours10
...Edit 3 - Enregistré encore 8 octets en utilisant do / until au lieu de for
Edit 4 - Si l'objet étant
-replace
d est une valeur entière, pas besoin de guillemets, économisant encore 2 octetsla source
Rubis, 58
Rien de spécial. Juste un cycle ...
la source
->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
ou ...f=->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}; f[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
Mathematica, 92 octets
Oui. L'entrée est l'odomètre et une liste d'heures. La sortie est le nombre de jours.
la source
PHP,
10298Version non golfée
Les avis PHP peuvent être supprimés du coût supplémentaire de 4 caractères
$d = 0;
dans la version golfée.Exemple
la source
if
, la suppression du 00.5
et la suppression|
entre le 1 et le 0 dans votre expression régulière vous permettent d'économiser 4 octets.function f($i,$s){while(1)foreach($s as$v){$d+=.5;$i+=$v;if(preg_match('/^[01]+$/',$i))return$d;}}
Pyth,
363230 octetsEssayez-le ici!
Explication
la source
C Sharp, 180.
Cher seigneur C # est long.
la source