Problème:
Votre tâche consiste à décider si dans une séquence de nombres, chaque numéro contient au moins un des chiffres du numéro qui l'a précédé.
Par exemple, ce qui suit devrait retourner véridique:
[1, 12, 203, 0, 30]
^ ^ Contains a 0
^ Contains a 2
^ Contains a 1
Les éléments suivants devraient renvoyer falsey:
[1, 32, 23, 34]
^ Doesn't contain a 1, therefore false
Votre soumission peut être une fonction ou un programme complet.
Contribution:
L'entrée peut être n'importe quel type de séquence raisonnable. Un tableau de nombres, un tableau de chaînes, une chaîne de nombres délimitée, etc.
Cependant, l'ordre importe, quelle que soit la structure que vous choisissez d'accepter comme entrée, il doit évidemment avoir un ordre défini.
L'entrée peut être prise via le stdin ou comme argument.
Vous pouvez supposer:
tous les nombres seront des entiers non négatifs
l'entrée contiendra toujours au moins 2 chiffres
les numéros d'entrée ne commenceront pas par un 0
Sortie:
La sortie sera une valeur true ou falsey (telle que définie par votre langue), indiquant si la spécification ci-dessus est remplie ou non.
Les valeurs Truthy / Falsey n'ont pas besoin d'être cohérentes entre les tests.
Il peut être soit sorti vers la sortie standard, soit retourné.
Cas de test:
True cases:
[1, 1, 1, 11, 111, 11, 1]
[12, 23, 34, 45, 56]
[65, 54, 43, 32, 21]
[123, 29, 9, 59, 55, 52, 2017, 2]
[1234567890, 19, 95, 5012, 23]
False cases:
[1, 2, 3, 4, 5, 1, 11] (2 doesn't contain a 1)
[12, 23, 33, 45] (45 doesn't contain a 3)
[98, 87, 76, 11, 12, 23] (11 doesn't contain a 7 or 6)
Il s'agit de code-golf, donc le moins d'octets gagne.
JavaScript (ES6),
4744 *43 octetsUn octet enregistré grâce à @Neil
Prend l'entrée comme une liste de chaînes.
Extrait de test
Afficher l'extrait de code
* ( barré 44 est toujours régulier 44 )
la source
`[${p}]`
ne marche pas?a=>a.reduce((l,r)=>`${l}`.match(`[${r}]`)&&r)
(qui fonctionne également pour la saisie numérique).p&&
si vous définissezp=1/19
?05AB1E , 10 octets
Essayez-le en ligne! ou comme suite de tests
Explication
la source
€Sü.å
- Je souhaite que cela fonctionne comme je le pensais.ü.å
ou€Süå
.CJam ,
181514 octets4 octets enregistrés grâce à Martin Ender
Essayez-le en ligne!
Explication
la source
Haskell,
514835 octets-3 octets grâce à @NickHansen! J'ai vraiment besoin de m'améliorer avec ces opérateurs de monade
-4 et -9 octets grâce à @Laikoni et @nimi respectivement!
Cette version prend l'entrée comme un tableau de chaînes, éliminant le besoin de
show
, mais pour autant que je puisse voir, cela fonctionne en grande partie de la même manière que l'ancienne version:(Je suis assez certain que je suis autorisé à soumettre une fonction anonyme comme celle-ci, mais je la corrigerai si nécessaire)
Les nombres sont d'abord convertis en chaînes. Ensuite, la magie de la monade
zip=<<tail
crée une fonction qui zippe la liste avec elle-même, qui associe chaque entrée à son ou ses voisins. Ensuite,all
mappe un lambda à chaque paire qui vérifie si une chaîne contient des caractères de l'autre et enfin vérifie qu'ils sortent tousTrue
.Ancienne version qui fonctionne essentiellement de la même manière:
la source
and.(zipWith(any.flip elem)=<<tail).map show
["1234567890", "19", "95", "5012", "23"]
, afin que vous puissiez supprimer le.map show
.Mathematica
62 4735 octetsAvec 12 octets enregistrés grâce à MartinE.
la source
Rubis,
4948 octetsLa sortie est
nil
pour false et un entier "aléatoire" pour true.la source
Java 8,
949087 octetsL'entrée est un tableau de chaînes représentant les nombres. A partir de la deuxième chaîne, il effectue une comparaison d'expression régulière contre chaque chaîne précédente pour voir si elle contient l' un de ses personnages:
.*[previous string].*
.Golfé:
Non golfé:
la source
a->{for(int i=1;i<a.length;)if(!a[i].matches(".*["+a[i++-1]+"].*"))return 0>1;return 1>0;}
a->{int r=1;for(int i=0;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
a->{int r=1,i=0;for(;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
Gelée , 6 octets
Essayez-le en ligne!
Explication
Il est plus évident d'essayer d'utiliser
2/
ici, mais cela exécute une fonction unaire sur toutes les tranches de taille 2."Ḋ
exécute efficacement une fonction binaire sur toutes les paires d'éléments adjacents, ce qui signifie que nous pouvons utiliserf
directement (plutôt que d'avoir besoin de le convertir en unaire fonctionner commef/
). Cela finit par laisser le dernier élément de l'entrée en place, mais heureusement, même une entrée de 0 ne devient pas une liste vide lorsqu'elle est convertie en décimal, donc cela n'a aucun effet sur leẠ
.la source
Python 3 , 48 octets
Essayez-le en ligne!
la source
Gelée , 8 octets
Essayez-le en ligne!
Comment?
la source
05AB1E , 5 octets
Code:
Utilise l' encodage CP-1252 . Essayez-le en ligne! ou Vérifiez tous les cas de test! .
Explication:
la source
RüÃõå_
c'est ce que j'ai trouvé tout seul. Je suis honoré d'avoir été si proche de votre meilleure réponse, en supprimant la mienne. Pourquoi n'avez-vous pas besoin deR
cela?R
alors? : pPowerShell , 87 octets
Essayez-le en ligne!
Pas le plus court du tout, mais une approche légèrement différente de celle utilisée par d'autres, et montre la
|?{}
fonctionnalité astucieuse .Cela prend l'entrée sous la forme d'un tableau de chaînes
$n
, puis effectue une boucle du1
haut vers lelength-1
. Nous utilisonsWhere-Object
(le|?{...}
) pour extraire les indices qui sont véridiques pour une condition particulière. Vous pouvez penser à cela comme unefor
boucle de combinaison avec uneif
clause.La clause ici est
[char[]]$n[($i=$_)-1]|?{$n[$i]-like"*$_*"}
. Autrement dit, nous prenons l'index en cours$_
, le définissant sur$i
, et soustrayant1
, et en l'utilisant pour indexer$n
(c'est-à-dire que nous obtenons donc l'élément précédent dans notre tableau d'entrée). Celui-ci est ensuitechar
converti en tableau et envoyé via une autreWhere-Object
procédure.La clause interne
$n[$i]-like"*$_*"
spécifie que la chaîne de l'index actuel$i
est-like
le caractère actuel$_
de l'index précédent. Cela produira donc tous les caractères communs aux deux éléments du tableau. Ainsi, la clause externe ne sera véridique que s'il y a un caractère en commun (puisqu'un tableau vide est falsey dans PowerShell), et donc l'index ne sera sélectionné que s'il y a des caractères en commun.Ensuite, nous rassemblons tous les indices qui correspondent aux critères et vérifions que
.count
ceux-ci correspondent-eq
à la longueur du tableau d'entrée. Ce résultat booléen est laissé sur le pipeline et la sortie est implicite.la source
Perl 5 , 31 octets
Un port de la belle réponse de Martin Ender .
30 octets de code +
-p
indicateur.Essayez-le en ligne!
la source
APL (Dyalog APL) , 9 octets
Essayez-le en ligne!
∧/
sont tous ceux dans la liste des×
les panneaux≢
du décompte de¨
chacun des2∩/
les intersections par paire de⎕
l'entrée?la source
PHP,
6568parcourir tous les nombres et supprimer tous les chiffres apparus dans le précédent. Comptez la fréquence à laquelle il est égal au nombre lui-même (aucun chiffre supprimé). Si au moins un égal, nous n'avions pas de match dans l'une des paires.
Correction d'une erreur en utilisant
trim
insted ofstrtr
. Merci à @ JörgHülsermannla source
["filename",1,11,414]
ne fonctionne pas.trim
ne fonctionne que pour les caractères de début et de fin. A corrigé.a&
place denull!==
(-5 octets).$argv[$i]
, car "Si de et pour avoir des longueurs différentes, les caractères supplémentaires dans le plus long des deux sont ignorés." (extrait du manuel)PHP, 75 octets
prend les nombres des arguments de la ligne de commande; sort avec
1
pour faux, avec0
pour vrai.Exécutez-le
-r
ou testez-le en ligne .$b
= un nombre contenant tous les chiffres$b
l'argument$b
1
0
la source
PHP, 77 octets
la source
foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v)):1;echo$t;
77 octets (non testé).$k--
à--$k
déposer un) après que votre approche devrait fonctionner et vous devez ajouter un @ pour l'avertissement$k--
. Je l'ai utilisé spécifiquement pour que $ k soit toujours 0 lors de la première exécution. Et les avertissements sont ignorables. Cela signifie que le code fait maintenant 76 octets, mais n'a pas encore été testé.foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v):1;echo$t;
fonctionne comme il se doit. Test avec$argv = array(1, 12, 123, 3, 34, 45, 5, 5);
écrans1
et test avec$argv = array(1, 12, 123, 3, 34, 45, 5, 6);
écrans0
, comme prévu.MATL , 14 octets
Essayez-le en ligne!
Merci @LuisMendo d'avoir enregistré un octet. Explication:
la source
1)VG
par1&)
(et cela évite de répéter le premier nombre))
donne les valeurs sélectionnées comme première sortie, puis les valeurs restantes comme deuxième sortieClojure, 71 octets
Une fonction anonyme qui accepte une séquence de nombres. Renvoie
true
/false
.J'aime sa lecture. Il y a certainement quelques domaines qui peuvent être améliorés ici. Ma fonction passée à
map
ne peut pas être facilement modifiée de sorte qu'elle ne nécessite pas la macro de fonction, ce qui signifie que la fonction entière ne peut pas utiliser la macro, qui a probablement ajouté quelques octets. Ce serait également bien si je pouvais trouver une meilleure façon de décompresser les valeurs dans leevery?
prédicat.la source
SimpleTemplate, 124 octets
Wow, c'était un entraînement!
Cela fait "simplement" un regex en utilisant l'ancien élément, montrant
1
comme une valeur véridique, ou rien d'autre.Non golfé:
la source
JavaScript (ES6), 37 octets
Accepte l'entrée comme une chaîne de nombres séparés par des sauts de ligne. Basé sur l'excellente réponse Retina de @ MartinEnder ♦, mais faisant tout le test en une seule expression rationnelle, car il est plus court en JavaScript de cette façon.
la source
Pip ,
1210 octetsPrend l'entrée comme une série d'arguments de ligne de commande. La sortie est une liste non vide pour véridique et une liste vide pour falsey. Essayez-le en ligne ou vérifiez tous les cas de test .
Explication
la source
Röda ,
4535 octetsEssayez-le en ligne!
Ceci est similaire à la solution Perl 5, qui est un port de la solution Retina de Martin Ender. -10 octets grâce à @Neil.
Voici une solution différente (
7372 octets):Il s'agit d'une fonction anonyme qui extrait les chaînes du flux et vérifie que les chaînes consécutives contiennent les mêmes caractères. Explication:
Il pourrait éventuellement être joué au golf plus ...
la source
^(\S*(\S)\S* (?=\S*\2))+\S+$
.Utilitaires Bash + Unix,
7169 octetsEssayez-le en ligne!
L'entrée se fait sur stdin, un nombre par ligne.
La sortie est dans le code de sortie: 0 pour véridique, 1 pour falsey.
Cela peut probablement être joué plus.
Pour que le code ci-dessus fonctionne, il ne doit pas y avoir de fichier dans le répertoire courant dont le nom est un seul chiffre. Si ce n'est pas acceptable, remplacez-le
[\1]
dans le programme par'[\1]'
(au coût de 2 octets supplémentaires).Exemple d'exécution (le dernier cas de test fourni dans le défi):
(1 ici est falsey.)
Comment ça marche:
Je vais démontrer sur l'exemple ci-dessus.
La commande sed convertit l'entrée en:
La commande tr convertit ensuite ceci en chaîne:
Cette chaîne est une commande shell pour effectuer l'opération souhaitée, donc je la redirige vers sh et j'ai terminé.
la source
Q, 57 octets
Remarque: 0 ajouté au début du tableau d'entrée dans la fonction. Cela a été fait de façon à ce que la comparaison du premier élément se fasse en enrôlé. Sinon, le dernier caractère du premier élément est saisi pour comparaison. Pourrait cependant faire une vérification de type qui ajoute 7 octets sur le nombre actuel.
la source