Récemment, j'ai passé un test de mathématiques et j'ai remarqué qu'un certain nombre du test correspondait à un modèle intéressant. Le nombre ( 28384
) correspond à une séquence de chiffres générique qui ressemble à ceci
(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...
où n
et x
sont des entiers à un chiffre. La séquence peut commencer par ou x
ou n
et se terminer par x
ou n+y
.
Votre tâche consiste, étant donné un entier positif à plusieurs chiffres, à sortir une valeur true ou falsey, selon que l'entrée correspond au modèle. L'entrée comprendra entre 4 et 18 chiffres. Vous pouvez prendre l'entrée comme une représentation sous forme de chaîne de l'entier. L'entrée ne commencera pas par un 0 mais pourra contenir ou se terminer par des 0.
n+y
sera toujours un nombre à un seul chiffre (d'où la limite de longueur est de 18).
Cas de test
Ceux-ci devraient produire une valeur véridique
182838485868788898
4344
85868
12223242526
Et cela devrait être falsey
12345
6724013635
36842478324836
1222232425
5859510511
Comme avec tous les golfs de code, le code le plus court gagne! Bonne chance et que les chances soient toujours en votre faveur!
x
etn
non nul pour les nombres qui correspondent à la règle?Réponses:
Python 2 ,
84818079 octets-1 octet grâce aux ovs
Essayez-le en ligne!
Python 3 ,
82797877 octetsEssayez-le en ligne!
Un peu plus court en Python 3, mais je ne pensais pas qu'il méritait sa propre réponse.
Explication
Nous mettons en place une fonction
g
qui prend une chaîne et un index (1 ou 0).g
renvoie ensuite si oui ou nonlen(set(x[a::2]))
, c'est-à-dire le nombre de chiffres uniques dans toutes les autres positions, est égal à(x[a==0::2]in"123456789")
, que les autres chiffres soient ou non dans l'ordre croissant. Si les chiffres sont dans l'ordre croissant, cela renvoie s'ils sont tous identiques ou non, sinon il demandera si l'ensemble est vide, ce qu'il ne peut pas être, retournant ainsi toujours faux.la source
x[a<1::2]in"123456789"
peut être"0"<x[a<1::2]<":"
(la comparaison des caractères compare les codes de charge)a<1
? On dirait que ça peut être justea
.Gelée ,
1311 octetsEssayez-le en ligne!
Explication:
la source
05AB1E , 15 octets
Essayez-le en ligne!
Explication
Cela devrait fonctionner (les cas de test l'ont fait) mais si vous trouvez des défauts, faites-le moi savoir.
14 octets si aucune sortie n'est considérée comme fausse:
la source
D, 117 octets
Certainement sous-optimal, mais cela fonctionne bien
Essayez-le en ligne!
la source
Haskell,
1081139795 octetsExemple d'appel:
f "182838485868788898"
rendementsTrue
Version non golfée avec explications:
la source
isPrefixOf
n'est pas dans Prelude, vous devez donc inclureimport Data.List
dans votre code ou utiliser une alternative, par exempleand(zipWith(==)(n:r)[n..])
.x/=y
peut être1>0
parce que sinonx/=y
alorsx==y
et le premier cas l'attrape.where
définition des fonctions auxiliairesc
etd
en dehors def
c'est bien.f
peut ensuite être raccourcif s@(_:n:_)=c s||c(n:s)
.;
. C'est le même nombre d'octets mais améliore la lisibilité du code.JavaScript (ES6),
666360 octetsPrend l'entrée sous forme de chaîne.
Cas de test
Afficher l'extrait de code
la source
C (gcc), 123 octets
Essayez-le en ligne!
la source
Python 3 ,
99 9689 octetsall()
fonction&
|
et remplacer la variable supplémentaire park<1
Essayez-le en ligne!
Explication:
Divisez d'abord la chaîne en deux listes: une avec des éléments indexés impairs et l'autre avec des éléments indexés pairs. Les deux listes A et B sont supposées être telles que:
OU juste le contraire
La condition consécutive est vérifiée par:
a in '123456789'
La condition du même numéro est vérifiée par:
all(i=a[x] for i in a)
la source
i
withk<1
et supprimer l'i
argument tous ensemble.&
place deand
. Votreor
peut également être remplacé par|
.PHP , 68 octets
Essayez-le en ligne!
Sortie d'une partie de la chaîne de recherche à partir de la première occurrence de l'entrée à la fin de la chaîne de recherche en tant que valeur véridique et rien pour fausse
pour 2 octets de plus, vous pouvez remplacer
echo$s;
par!!echo$s;
pour obtenir1
une valeur fidèleRechercher l'occurrence de l'entrée dans l'une des chaînes suivantes du tableau
la source
JavaScript (ES6), 54 octets
Prend l'entrée sous forme de chaîne.
la source
MATL , 15 octets
Essayez-le en ligne!
Avec l'aide de @LuisMendo dans le chat. Notez que si une sortie vide + erreur est également considérée comme «fausse», elle
X
peut être laissée de côté, ce qui porte le score à 14 octets .la source
Mathematica, 121 octets
la source
Pyth , 20 octets
Sortie
[]
lorsque le nombre correspond au modèle de chiffres, sinon toute autre chose.Essayez-le en ligne!
Explications (exemple avec entrée
85868
)la source
Pyth, 17 octets
Essayez-le ici
Même algorithme que ma réponse Jelly.
Explication:
la source
Python 3 ,
167 161 157 157 131106 octets-55 octets grâce aux suggestions de @ WheatWizard
Essayez-le en ligne!
la source
set(c)
c'est la même chose que{*c}
. (au moins en python 3)[t[z]for z in range(0,len(t),2)]
est aussi juste une épissure de liste. Vous pouvez le faire simplement avect[::2]
. Si vous n'êtes pas familier avec cette syntaxe, je vous suggère de jeter un œil sur les documents, car elle est assez utile.Java (OpenJDK 8) ,
128119118108107104 octetsEssayez-le en ligne!
Explication:
la source
Rétine , 47 octets
Essayez-le en ligne!
Affiche 1 s'il correspond au modèle, 0 s'il ne correspond pas
Explication
Convertir chaque chiffre n en n + 1 en unaire, séparés par des points-virgules
(Trailing newline) convertit chaque chiffre à la différence entre lui-même et celui qui le précède
(Trait de fin de ligne) supprime les 2 premiers chiffres
Compte le nombre de correspondances de ce modèle, qui vérifie l'alternance des 0 et des 1
la source