Défi
Un repdigit est un entier non négatif dont les chiffres sont tous égaux.
Créez une fonction ou un programme complet qui prend un seul entier en entrée et génère une valeur de vérité si le nombre entré est un chiffre de référence en base 10 et une valeur falsy dans le cas contraire.
L'entrée est garantie d'être un entier positif .
Vous pouvez utiliser et utiliser l'entrée en tant que représentation sous forme de chaîne en base 10 en toute impunité.
Cas de test
Ce sont tous des repdigits inférieurs à 1000.
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
111
222
333
444
555
666
777
888
999
Une liste plus longue peut être trouvée sur OEIS .
Gagnant
Le code le plus court en octets gagne. Cela ne veut pas dire que des réponses intelligentes dans les langues verbeuses ne seront pas les bienvenues.
code-golf
math
number
arithmetic
decision-problem
Aidan F. Pierce
la source
la source
Réponses:
Brachylog , 1 octet
Essayez-le en ligne!
Cela agit sur les entiers.
De
src/predicates.pl#L1151
:la source
C (gcc) ,
333029 octetsEssayez-le en ligne!
la source
return
(pensez que je vais voler cette dernière pour ma réponse :)).-O0
écrira avecn
exactement le résultat final deeax
manière à en faire la valeur de retour? Pourriez-vous préciser la logique pour laquelle vous saviez que cela fonctionnerait?return n
d'être un nop, et il n'y a aucune raison d'assigner une variable locale à la fin d'une fonction si vous ne voulez pas renvoyer le résultat.COBOL , 139 BYTES
J'ai l'impression que COBOL n'a pas d'amour en code golf (probablement parce qu'il n'y a aucun moyen de gagner), mais voici:
A est défini comme un PIC 9 (4).
la source
TRUE
FALSE
05AB1E , 1 octet
Vérifie si tous les chiffres sont égaux
Essayez-le en ligne!
la source
Python 3,
25, 2419 octets.Un stdin => variante de code d'erreur.
Retourne le code d'erreur 0 s'il s'agit d'un repdigit - ou une erreur en cas d'échec.
Merci à Dennis de m'avoir aidé dans les commentaires.
la source
>1
plutôt que<2
. L'augmentation d'une erreur réelle serait plus courte que l'utilisation deexit
BTW.if python3 repdigit.py; then echo truthy; else echo falsy; fi
doit fonctionner conformément à la définition, donc 0 est la vérité et tout le reste est de la fausseté.*
un itérable. Par exemple,{*'123'}
génère l'ensemble{'1','2','3'}
.Mathematica, 27 octets
Cela ne bat pas
Equal@@IntegerDigits@#&
, mais cela bat l’autre solution Mathematica basée sur l’arithmétique.Les repdigits sont de la forme n = d (10 m -1) / 9 où m est le nombre de chiffres et d le chiffre répété. On peut récupérer d de n en prenant le modulo 10 (car s'il s'agit d'un chiffre de représentation, son dernier chiffre sera d ). Nous pouvons donc simplement réorganiser ceci en m = log 10 (9 n / (n% 10) + 1) et vérifier si m est un entier.
la source
Haskell , 15 octets
Essayez-le en ligne! Prend une entrée de chaîne.
Équivalent à
\s->all(==head s)s
. De justesse bat les alternatives:la source
f s=(s<*s)==(s*>s)
C'est une idée très intéressante, je n'étais pas au courant de ce comportement d'<*
avant.C (gcc), 41 octets
C'est une fonction qui prend l'entrée en tant que chaîne et retourne
1
s'il s'agit d'un repdigit et0
sinon.Pour ce faire, il utilise la
strspn
fonction, qui prend deux chaînes et renvoie la longueur du préfixe le plus long de la première chaîne, composé uniquement de caractères de la deuxième chaîne. Ici, la première chaîne est l'entrée et la deuxième chaîne est le dernier chiffre de l'entrée, obtenu en passant un pointeur sur le dernier caractère de la chaîne d'entrée.Si l'entrée est un repdigit, alors le résultat de l'appel à
strspn
serastrlen(s)
. Ensuite, l'indexation danss
retournera un octet nul si c'est le cas (str[strlen(str)]
c'est toujours\0
) ou le premier chiffre qui ne correspond pas au dernier chiffre sinon. La négation de ceci avec des!
résultats en sis
représente un repdigit.Essayez-le en ligne!
Merci à @Dennis de m'avoir rappelé de manière indirecte le truc assigner plutôt que de retourner via sa réponse incroyablement impressionnante , économisant 4 octets!
la source
strlen
et en créant une nouvelle chaîne de*s
:c;f(char*s){c=*s;c=!s[strspn(s,&c)];}
pour 37.PHP,
252825supprime tous les caractères de la droite qui sont égaux au premier et affiche
1
si tous les caractères ont été supprimés.la source
R, 31 octets
Cette fonction fonctionne avec les entrées de chaîne et utilise une expression régulière pour déterminer si l'entrée est un repdigit.
Exemple
la source
/// , 110 octets
Essayez-le en ligne!
Le langage /// n'a pas de concept de vérité et de falsey, donc il génère "T" si l'entrée est un repdigit, et ne génère aucun caractère si l'entrée n'est pas un repdigit.
la source
Gelée ,
21 octetEssayez-le en ligne!
la source
1
-9
compte comme repdigits?Octave , 11 octets
Essayez-le en ligne!
Prend l'entrée sous forme de chaîne.
Il vérifie que tous les caractères sont égaux aux premiers. Si tous sont égaux, le résultat sera un vecteur avec seulement
1
(vrai dans Octave), sinon il y en aura au moins un0
(faux dans Octave). Voici une preuve .la source
all(...)
pour obtenir une sortie de valeur vérité / fausseté?grep, 17 octets
Correspond à n'importe quelle chaîne qui répète son premier caractère.
la source
C #,
423328 octetsi
doit être une chaîne.Réduit beaucoup grâce à @LethalCoder
la source
i[0].ToString()
peut être raccourci ài[0]+""
,<1
est plus court que==0
..Length<1
peut juste être==""
Braingolf , 6 octets
Essayez-le en ligne!
Malheureusement, l'entrée implicite de Braingolf à partir d'arguments en ligne de commande ne peut pas accepter une entrée composée uniquement de chiffres, elle le convertira toujours en nombre. La solution consiste donc à la transmettre via STDIN, ce qui ajoute 1 octet pour la lecture de STDIN (
i
).Explication:
Après
u
, la longueur de la pile est égale au nombre de caractères uniques dans l'entrée, soustraction de 1 signifie que ce sera0
si et seulement s'il y a exactement 1 caractère unique dans l'entrée,0
est le seul numéro de Falsey dans Python,n
remplace donc0
par1
, et tout le reste avec0
.la source
Japt , 4 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
2321 octets2 octets sauvés grâce à Neil
Prend l'entrée sous forme de nombre entier ou de chaîne. Retourne un booléen.
Démo
Afficher l'extrait de code
la source
test
au lieu de!!exec
sauvegarder 2 octets?Ohm , 4 octets
Essayez-le en ligne!
Explication
la source
Ul≤
devrait marcher.0
est falsey et chaque autre nombre est la vérité. Je viens de remarquer que nous avons besoin exactement du contraire pour ce défi (nous sommes souvent autorisés à échanger dès lors que nous déclarons quelle affaire est la vérité et laquelle est Falsey). La vérité est définie par "prendrait une franche".Ul1E
devrait aussi fonctionner (bien que je ne sache pas Ohm) car il n'a pas besoin de gérer 0.APL, 5 octets
2 octets enregistrés grâce à @KritixiLithos
Essayez-le en ligne!
la source
⊢≡1⌽⊢
.⊢
par⍕
pour gérer les chaînes et les nombres.Java, 21 octets:
l
estMutableList<Character>
issu des collections eclipse.la source
l
pourrait aussi être un CharAdapter.Kotlin ,
2819 octetsEssayez-le en ligne!
Prend en entrée
String
causeExplication
Si vous n'aimez pas le fait que cela prend un
String
, vous pouvez en avoir un qui prend unInt
pour 24 octets .la source
Regex (ECMAScript), 31 octets
Essayez-le en ligne!
Prend les entrées de manière unaire, comme d'habitude pour les expressions rationnelles mathématiques (notez que le problème est trivial avec une entrée décimale: juste
^(.)\1*$
).Explication:
la source
PHP, 30 octets
la source
Neim , 1 octet
Vérifie simplement que tous les éléments sont égaux.
Sans construit, 2 octets:
Explication:
Cela fonctionne parce que seule la
1
vérité est considérée dans Neim, et tout le reste est faux.Alternativement, pour 4 octets:
Explication:
Essayez le!
la source
C, 38 octets
Marche récursivement une chaîne. Si les deux premiers caractères diffèrent (
*s^s[1]
), alors nous ne réussirons que si nous sommes à la fin de la chaîne (!s[1]
), sinon nous répétons le test à la position suivante (f(s+1)
).Programme de test
la source
Java,
383323 octetsn
est unString
, naturellement.Notez que
^...$
l'expression régulière n'est pas nécessaire, car elle est automatiquement utilisée pour la correspondance exacte (telle que lamatch
méthode), par rapport à la recherche dans la chaîne.Essayez le!
Enregistre
String
depuis "Vous pouvez utiliser et utiliser les entrées comme une chaîne en toute impunité."la source
matches
not requiring^$
because it matches the entire String. So a definite +1 from me. ;)R, 25 bytes
Try it online
Best non-regex solution I could come up with was 36 bytes:
la source
rle(charToRaw(scan(,'')))$v[2]<1
Cubix, 15 bytes
Try it online!
Watch It Run
Outputs 1 for truthy and nothing for falsey
Very simply read reads in the input one character at a time. It takes the current character away from the previous. If a non zero result then it halts immediately. Otherwise it continues inputting and comparing until the EOI. On EOI (-1), negate and exit
la source
QBasic 4.5, 55 bytes
I've mathed it! The FOR-loop checks the number of digits in the input, then creates
c
, which is a series of 1's of length equal to the input. A number then is repdigit if it modulo the one-string == 0.Try it online! Note that the online interpreter is a bit quirky and I had to write out a couple of statements that the DOS-based QBasic IDE would expand automatically.
la source