En Russie, nous avons quelque chose comme une tradition: nous aimons chercher des billets chanceux.
Voici à quoi ressemble un billet régulier:
Comme vous pouvez le voir, le ticket a un numéro à six chiffres.
Un nombre à six chiffres est considéré comme chanceux si la somme des trois premiers chiffres est égale à la somme des trois derniers.
Le numéro sur la photo n'a pas de chance:
038937
038 937
0 + 3 + 8 = 11
9 + 3 + 7 = 19
11 != 19
Défi
Étant donné les limites d'une plage (incluse), renvoyez le nombre de numéros de billets chanceux qu'elle contient.
Paramètres
- Entrée: 2 entiers: le premier et le dernier entier de la plage
- Les entrées seront comprises entre 0 et 999999 inclus
- Sortie: 1 entier: combien de numéros porte-bonheur sont dans la plage
- Vous pouvez prendre les entrées et renvoyer la sortie dans n'importe quel format acceptable
- Supposons des zéros non significatifs pour les nombres inférieurs à 100 000.
Exemples
0, 1 => 1
100000, 200000 => 5280
123456, 654321 => 31607
0, 999999 => 55252
Il s'agit de code-golf, donc la réponse la plus courte en octets dans chaque langue l'emporte.
Réponses:
05AB1E ,
8 (ou 10?)11 (ou 13?) OctetsEssayez-le en ligne ou vérifiez d'autres cas de test .
REMARQUE: dans 05AB1E, les chaînes et les entiers sont interchangeables, donc les numéros de sortie ne contiennent pas de zéros de tête. Cela pourrait cependant être corrigé avec 1 octet supplémentaire ( 12 octets ):
Essayez-le en ligne ou vérifiez d'autres cas de test .
+3 octets pour les numéros de correction de bogues d'une longueur de 3 ou moins (plage
[000000, 000999]
).Explication:
EDIT: Il me semble (et la plupart des autres réponses) avoir mal lu le défi et le nombre de chiffres est demandé au lieu des chiffres eux-mêmes dans la plage. Dans ce cas, une fin
}g
peut être ajoutée (fermez le filtre; et obtenez le nombre de chiffres restants dans la liste filtrée), c'est donc1013 octets à la place:Essayez-le en ligne ou vérifiez d'autres cas de test .
la source
R
.C # (.NET Core) , 93 + 18 = 111 octets
Essayez-le en ligne!
18 octets pour
using System.Linq;
. Je supposais que les formats d'entrée et de sortie pouvaient être flexibles. Je prends donc deux entiers en entrée (la plage, inclus).Quelques résultats de tests:
la source
JavaScript (ES6), 66 octets
Prend une entrée dans la syntaxe de curry
(m)(n)
, où m est la borne supérieure inclusiveexclusiveet n est la borne inférieure inclusive.Essayez-le en ligne!
Comment?
Nous testons chaque nombre en parcourant ses chiffres d i et en mettant à jour un total t :n di t
Si nous avons à la fin du processus, alors n est un nombre porte-bonheur.t=0 n
JavaScript (ES6), 67 octets
Même format d'entrée.
Essayez-le en ligne!
Comment?
38937 --> 38.937
['3','8','.','9','3','7']
+
:"3+8+.+9+3+7"
+.
par^
:"3+8^+9+3+7"
24
la source
Rubis ,
5654 octetsEssayez-le en ligne!
Méthode:
la source
Japt ,
3815 octets-23 merci à Shaggy!
Ma première soumission Japt; merci à Shaggy pour toute son aide!
Essayez-le en ligne!
la source
Python 3,
117113106 106135 octetsCeci est ma première réponse, donc je suis sûr qu'il y a place à amélioration.
Obtient les trois premiers chiffres par division entière et les trois derniers par modulo. Les premiers et derniers nombres entiers dans la plage sont entrées en tant que arguments de la
x
fonction,a
etb
, respectivement. La sortie estn
imprimée.Non golfé:
la source
n=n+1
parn+=1
et de le déplacer juste après la déclaration if (if...:n+=1
)a
etb
comme variables pré-déclarées. Vous devez soit avoir une fonction, soit les prendre via une entréen=0
pièce dans l'en-tête, commedef x(a,b,n=0)
R ,
9386 octetsUne logique plus courte à la fin compliments de @ Giuseppe /
Essayez-le en ligne!
Entrées entières. Garnissez-les avec
0
. Convertissez en six points de code ASCII.F
Abuser de la fonction intégrée.la source
scipen
problème. Tant pis.Husk , 12 octets
Essayez-le en ligne!
Explication
la source
[000000, 001001]
devrait se traduire par2
(000000
et001001
), mais résulte à la1001
place. (J'ai ajouté1,000,000
et supprimé le suivi1
comme correctif pour cela, je ne sais pas à quel point cela est facile / efficace en octets dans Husk.)Fusain , 15 octets
Essayez-le en ligne!Le lien est vers la version détaillée du code. Edit: Je pensais à l'origine que c'était la liste des numéros porte-bonheur qui était requise. Cela peut être fait en 14 octets (en supprimant le
L
, ce qui prend la longueur de la liste), ou en 20 octets si vous voulez un bon formatage:Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Perl 5 +
-pl -MList::Util+(sum)
, 49 octetsEssayez-le en ligne!
Perl 5 +
-nl -MList::Util+(sum) -M5.010
, 50 octetsLa sortie de chaque ticket à la place est de +1 octet:
Essayez-le en ligne!
la source
Python 3 ,
8986 octets-2 merci à M. Xcoder.
-3 inspirant des réponses d'Asone Tuhid.
Résultats des tests:
Essayez-le en ligne!
la source
sum
peut faire n'importe quel générateur de sorte que les supports[...]
ne sont pas nécessairesrange(a,b+1)
spec indique maintenant "inclusif" (si ce n'était pas le cas, vous pouvez utiliser*r
àa,b
la place - voir ma réponse Python 2). Notez également que la spécification confirme maintenant que c'est bien le nombre qui est émis.MATL , 24 octets
Essayez-le en ligne!
(-2 octets grâce à Luis Mendo.)
&:
- Faites une plage inclusive entre les deux nombres donnés1e3&\
- 'divrem' - divisez par 1000 et obtenez les rappels et les quotients au sol dans deux tableaux.,
- faire deux fois!'03d'&V
- transposer et convertir chaque valeur en une chaîne à trois largeurs avec un rembourrage nul&s
- additionner les valeurs de chaque lignew
- basculez pour faire apparaître le tableau de rappel et recommencez]
- boucle de fin=
- vérifier l'égalité (retourne 1s aux endroits où les tableaux sont égaux)s
- additionnez-les pour obtenir le nombre (sortie implicite)la source
Kotlin ,
152119 octetsEssayez-le en ligne!
Prendre deux entiers que convertir en six chaînes de symboles et compter.
Optimisé grâce à mazzy et sa solution à 119 octets.
Essayez-le en ligne!
la source
{a:Int,b:Int->(a..b).map{"%06d".format(it)}.filter{(it[0]-'0')+(it[1]-'0')+(it[2]-'0')==(it[3]-'0')+(it[4]-'0')+(it[5]-'0')}.count()}
dc , 44 octets
Prend deux arguments d'une pile autrement vide, sort en haut de la pile.
Essayez-le en ligne!
Le plus intelligent ici est l'utilisation d'une macro sans nom (c'est-à-dire non stockée) qui est dupliquée avant l'exécution afin d'exécuter une copie d'elle-même sur l'autre partie à trois chiffres.
Explication
La macro interne
[rA~rA~++rx]
a pour effet de "calculer la somme des chiffres du nombre à trois chiffres qui est le deuxième en haut de la pile, puis d'exécuter le haut d'origine de la pile en tant que macro".Programme principal:
la source
Pascal (FPC) ,
163153 octetsEssayez-le en ligne!
Explication
Voici d'abord un code d'aspect normal:
Essayez-le en ligne!
Ensuite, j'ai abusé du comportement de la boucle for:
a
àb
), ellesa
peuvent donc être réutilisées comme variable de boucle,i
;b
avant la boucle). Je l'ai utiliséb
comme conteneur, l'incrémentant lorsqu'un numéro porte-bonheur est trouvé et à la fin de la boucleb
est éloigné de son ancienne valeur par la quantité de numéros porte-bonheur, ce quib-a
donne le résultat correct. Cela a chutés
.Le remplacement
d
par des opérations directement sura
raccourcit la boucle. Remplacerc
par des opérations directement sur laa
dose ne raccourcit pas la boucle, mais, après la suppressiond
, les bouclesbegin
etend
sont inutiles et j'ai fini par utiliser seulement 2 variables :)$
démarre les constantes hexadécimales dans le code golfé. Bien qu'ils n'enregistrent pas d'octets, ils éliminent les espaces nécessaires avant les constantes décimales.la source
Java (OpenJDK 8) , 162 octets
... emprunte à l'exemple de Kotlin ci-dessus.
Essayez-le en ligne!
La comparaison de la somme des octets de la chaîne équivaut à résumer les chiffres réels.
la source
a->b->
), mais vous devrez vous qualifier complètementIntStream
car il n'est pas dansjava.lang
.java.util.stream.
devant duIntStream
à votre code et décompte d'octets. Comme également mentionné par Jakob , vous pouvez enregistrer un octet en utilisanta->b->
, et vous pouvez également enregistrer quelques octets supplémentaires en changeantString.format
en"".format
. Essayez-le en ligne: 139 octets . Belle première réponse, cependant. +1 de moi. Profitez de votre séjour!PHP , 131 octets
Pour l'exécuter:
Exemple:
Ou essayez-le en ligne!
la source
Perl 6 ,
5149 octetsEssayez-le en ligne!
Bloc de code anonyme qui prend deux nombres et renvoie le nombre de chanceux. Délai d'expiration pour les entrées plus importantes
la source
Gelée ,
98 octets-1 merci à Dennis (
rµ...E)S
->r...E€S
puisque tout vectorise.)Un lien dyadique acceptant les deux points de terminaison de la plage (dans les deux sens) qui donne le nombre de tickets chanceux.
Essayez-le en ligne! Ou voir une suite de tests
Comment?
Notez que pour tout entier non négatif inférieur à1000000 , N , nous pouvons obtenir deux nombres avec des chiffres qui totalisent les valeurs requises pour vérifier en utilisant la division entière par 1000 X= ⌊ N1000⌋ ) Oui= Nmod1000 ) N= 1000 × X+ Y
(cédant, disons,
et son reste
(disons
... c'est-à-dire,
Maintenant, nous voulons comparer les sommes des chiffres deX et Oui pour chaque N dans une plage et comptez ceux qui sont égaux.
la source
E€S
enregistre leµ
.Powershell, 85 octets
Script de test:
Production:
la source
Kotlin, 95 octets
.kt
pour test:Explication
Comptez les nombres de la plage où la somme de tous les chiffres est égale à la double somme des 3 premiers chiffres.
la source
Stax , 14 octets
Exécutez-le et déboguez-le , mais soyez patient!
la source
Python 2 ,
8380 octets-3 en utilisant l'observation d'Asone Tuhid - allez donner du crédit!
Essayez-le en ligne!
Tout comme ma réponse Jelly (mais les entrées doivent être triées ici, c'est-à-dire
a<=b
)75 octets pour l'entrée
a, b+1
(c'est-à-dire que la plage exclut la limite droite):Essaye celui-là
la source
Clojure, 102 octets
Mélanger les cordes et les mathématiques n'est pas trop amusant.
la source
J , 35 octets
Essayez-le en ligne!
la source
C (gcc),
9088 octetsPort de ma réponse Java . Essayez-le en ligne ici . Merci à plafondcat pour avoir joué deux octets au golf.
Non golfé:
la source
L'✐'
place de10000
et attribuer10
à une variable.L'…'
astuce, c'est bien; mais cela économise-t-il des octets? Il me semble qu'il s'agit d'un caractère à plusieurs octets, donc lors de l'enregistrement de caractères, il ne peut pas enregistrer d'octets… ou le peut-il?Java 8,
10199 octetsUne approche différente de l'autre réponse Java . Au lieu d'utiliser des flux et des chaînes, cela utilise une boucle et évalue directement les nombres. Essayez-le en ligne ici .
Merci à plafondcat pour avoir joué deux octets au golf.
Non golfé:
la source
VBA (Excel), 159 octets
Utilisation de la fenêtre immédiate et des cellules
[A1]
[A2]
comme entrée.la source
F #, 110 octets
Essayez-le en ligne!
t
convertit la chaîne en nombres et les résume.r
prend la plage de nombres des
àe
et filtre les nombres malchanceux. Les trois premiers chiffres sont collectés parn/1000
. Les trois derniers chiffres sont calculés parn-(n/1000)*1000
.la source