Il y a presque six ans, steenslag, membre du PPCG, a lancé le défi suivant:
Dans un dé standard, les numéros sont disposés de telle sorte que les faces opposées totalisent sept. Ecrivez le programme le plus court possible dans votre langue préférée, qui génère un lancer aléatoire suivi de 9 basculements aléatoires. Un basculement est un quart de tour du dé, par exemple si le dé est tourné vers 5, tous les basculements possibles sont 1,3,4 et 6.
Exemple de sortie souhaitée:
1532131356
Donc, maintenant que tout le monde l'a complètement oublié et que la réponse gagnante a été acceptée depuis longtemps, nous allons écrire un programme pour valider les séquences de basculement générées générées par les solutions soumises. (Cela a du sens. Imaginez-le.)
Défi
Votre programme ou fonction reçoit une séquence telle que 1532131356
. Valider que chaque chiffre consécutif est:
- Pas égal au chiffre précédent
- Pas égal à 7 moins le chiffre précédent
(Vous n'êtes pas obligé de valider le premier chiffre.)
Règles
- Votre programme doit renvoyer une valeur de vérité si l'entrée est valide et une valeur de falsey sinon.
- Vous pouvez supposer que la saisie ne comprend que les chiffres 1 à 6 et comporte au moins 1 caractère. Les séquences n'auront pas une longueur fixe comme dans le défi de steenslag.
- Vous pouvez prendre l’entrée sous forme de chaîne (
"324324"
), de tableau ou de structure de données de type tableau ([1,3,5]
) ou d’arguments multiples (yourFunction(1,2,4)
).
Les règles standard d' entrée / sortie et d' échappatoire s'appliquent.
Cas de test
Vérité
1353531414
3132124215
4142124136
46
4264626313135414154
6
2642156451212623232354621262412315654626212421451351563264123656353126413154124151545145146535351323
5414142
Falsey
Chiffre répété
11 3132124225 6423126354214136312144245354241324231415135454535141512135141323542451231236354513265426114231536245 553141454631 14265411
Côté opposé du die
16 42123523545426464236231321 61362462636351 62362462636361
la source
3132124225
revient5
.n and p*(7-p!=n!=p)
.Python, 44 octets
Magie des bits! C'est une fonction anonyme qui prend une liste d'entiers et vérifie que le XOR de chaque élément consécutif est compris entre 1 et 6 inclus.
Pourquoi ça marche
Premièrement, le XOR est toujours compris entre 0 et 7 inclus, puisque 7 est
111
en base 2 et que nos nombres ont au plus 3 chiffres binaires. Pour l'égalité,a^b == 0
si et seulement sia == b
. Aussi, nous avons7-a == 7^a
quand0 ≤ a ≤ 7
, et donca^b == 7
si et seulement sia == 7^b == 7-b
.la source
05AB1E ,
119 octets-2 octets pour l’idée intelligente d’Oseable d’utiliser un produit.
Essayez-le en ligne!
Troisième approche utilisant 05AB1E, qui n’utilise pas la commande pairwise:
0
si elle viole les propriétés de tipy.Not 0
si rien ne l'empêchait d'être ivre.la source
Á
. Agréable!¥¹D7-Á+«P
. Cela donne 0 quand il y a un 0 dans le tableau ou toute autre valeur.R,
39373231 octetsEssayez-le en ligne!
Prend les commentaires de stdin. Permet
diff
de voir si deux chiffres consécutifs sont identiques. compare ensuite chaque chiffre à 7 moins le chiffre précédent. RetoursTRUE
ouFALSE
.5 octets sauvés grâce à Jarko Dubbeldam et un autre merci à JayCe.
la source
q
, puis tester2*x+q-7
au lieu dec(0,x)!=c(7-x,0)
sauvegarder quelques octets. Six1 + x2 = 7
alors2*x1 + diff(x1,x2) = 7
. Vérifier2*x+q - 7
ensuite explicitement les tests!=0
.05AB1E , 10 octets
Utilise le codage CP-1252 . Essayez-le en ligne!
la source
Ê
: P Nice!1*[] = []
maisproduct(1, []) = 1
. C'est bon à savoir.[]
devrait être 1.)1*
,)1s*
et)1P
sont[]
tout ce qui)1sP
est 1.[]
donne une erreur et est jeté. C'est pourquoi ça donne 1. J'essaierai de le réparer quand je rentrerai à la maison.R,
4944 octetsLit les entrées de stdin (séparées par un espace) et les sorties
TRUE/FALSE
. Donnera un avertissement si l'entrée est de longueur un mais fonctionne toujours.Edit: sauvegardé quelques octets grâce à @rturnbull
la source
all(x)&all(y)
dansall(x,y)
pour enregistrer des octets. Vous pouvez également basculerrle(x)$l==1
versrle(x)$l-1
, qui renverra alors un ensemble de tousFALSE
six
est valide; puis passer le plus tard!=
à un==
etall
à!any
. Cela permet d'!any(rle(x<-scan())$l-1,ts(x)==7-lag(ts(x)))
économiser 5 octets au total. (PS, j'ai écrit une solution alternative qui pourrait vous intéresser.)05AB1E , 15 octets
Essayez-le en ligne! ou en tant que suite de tests
la source
JavaScript (ES6),
4340 octetsRetours
0
/true
.Cas de test
Afficher l'extrait de code
la source
test()
Perl 6 , 22 octets
En utilisant une regex:
Prend l'entrée sous forme de chaîne. Inspiré par la réponse de GB Ruby .
Comment ça marche:
/ /
: Une regex.(.)
: Correspond à n'importe quel caractère et capture-le comme$0
.<{ }>
: Générer dynamiquement une sous-expression rationnelle à faire correspondre à cette position."$0|" ~ (7 - $0)
: La sous-expression régulière que nous générons est celle qui correspond uniquement au chiffre précédent, ou 7 moins le chiffre précédent (par exemple5|2
).Ainsi, l'expression rationnelle globale correspondra si et seulement si elle trouve une paire de chiffres consécutifs non valide n'importe où.
{! }
: Contraindre à un booléen (ce qui provoque la correspondance de l'expression rationnelle$_
), l'annule et transforme le tout en lambda (avec un paramètre implicite$_
).Perl 6 , 38 octets
Utilisation du traitement de liste:
Prend l'entrée sous forme de tableau d'entiers.
Comment ça marche:
.[1..*] Z $_
: Compressez la liste d'entrée avec une version d'elle-même décalée-par-un, afin de générer une liste de 2 tuples de chiffres consécutifs.[!=] 7 - .[1], |$_
: Pour chacun de ceux-ci, vérifiez si(7 - b) != a != b
.all ( )
: Retourne une valeur de vérité ou de fausseté selon que toutes les itérations de boucle ont renvoyé la valeur True.la source
Python, 38 octets
Une fonction récursive qui prend des arguments tels que
f(1,2,3)
.Ceci utilise l'argument de décompression pour extraire le premier nombre
h
et le reste dans le tuplet
. Sit
est vide, la sortie est True. Sinon, utilisez l’ astuce de Zgarb pour vérifier que les deux premiers jets de dés ne sont pas incompatibles. Ensuite, vérifiez que le résultat est également valable pour l’appel récursif à la fin.la source
Ruby, 34 octets
la source
#[]
méthode de la chaîne :->s{!s[/[16]{2}|[25]{2}|[34]{2}/]}
JavaScript
6143 octetsDes commentaires ont mentionné que je ne peux pas utiliser les fonctions linq de C # sans inclure l'instruction using, voici donc exactement la même chose en moins d'octets avec JS standard ...
C #,
996765 octetsPrend l'entrée comme un tableau int
a
Explication:
la source
0
ou à la1
place defalse
outrue
> <> (Poisson) 47 octets
Assez simple;
Ligne 1: vérifiez si vous avez entré un nombre, s'il n'y a pas de numéro (EOF), alors nous avons la vérité pour imprimer d'autres chèques.
Ligne 2: résultat d'impression.
Ligne 3: transformer l'entrée en numéro (ASCII 0 - à partir de l'entrée), puis vérifier si elle est égale à l'entrée précédente.
Ligne 4: vérifiez si l'entrée est opposée au dé.
la source
Brain-Flak 128 Octets
Sorties 0 pour falsey ou -7 pour la vérité.
Essayez-le en ligne! (Truthy)
Essayez-le en ligne! (Flasey)
Explication (t représente top et s correspond à la deuxième à partir du haut):
la source
MATLAB, 30 octets
la source
PHP, 63 octets
prend l'entrée comme liste d'arguments de commande; quitte avec
1
(erreur) si l'entrée est invalide,0
(ok) si valide.Courez avec
-nr
.entrée en tant qu'argument de chaîne, 65 octets
la source
PowerShell ,
574441 octets( 44 barrées sont toujours régulières 44 )
Essayez-le en ligne!
(OP a précisé que prendre les entrées en tant qu'arguments séparés est correct - enregistrer 13 octets ... enregistrer 3 autres octets en éliminant
$b
)Nous parcourons l'entrée
$args
un chiffre à la fois. Chaque chiffre, on vérifie que le$l
chiffre est ast-n
ote
qual au chiffre actuel$_
, et qui7-$_-$l
est un nombre différent de zéro (qui est truthy). Ces résultats booléens sont encapsulés dans des parenthèses et introduits dans l'opérande droit de l'-notin
opérateur, en vérifiant0
. En d'autres termes, s'il y a uneFalse
valeur n'importe où dans la boucle, le-notin
sera égalementFalse
. Ce booléen est laissé sur le pipeline et la sortie est implicite.Il est long en raison de la
$
nécessité de noms de variables et du fait que les commandes booléennes-ne
-and
sont détaillées dans PowerShell. Tant pis.la source
Traitement,
939290 octetsRemplacé
||
par|
: 1 octet enregistré grâce à @ClaytonRamseyCommence à compter en arrière: 2 octets enregistrés grâce à @IsmaelMiguel
Prend l’entrée comme un tableau d’entiers, la sortie est
1
vraie ou0
false.Ungolfed
la source
return 0
est dans la déclaration if alors quereturn 1
n'est pas. Je ne vois pas comment cela serait possible à moins que vous n'ayez une autre idée.Golfed it! Yipee! (nobody's going to read these summaries so why not have fun :)
<- Je l'ai lu en comparant ce que vous avez avec ce que vous aviez.C
4744 octetsprend une chaîne de chiffres (ou un tableau d'octets terminé par zéro)
Explication
F(char*s){
selon le type de
int
retour standard est implicite. (économiser 4 octets)return
retour inconditionnel parce que c'est une fonction récursiveen utilisant l'évaluation de raccourci:
!s[1]||
si le second caractère est nul, retourne vrai((*s^s[1])%7&&
si les deux premiers caractères ne sont pas légaux, fauxF(s+1))
vérifier le reste de la chaîne de la même manièrecette expression déroutante
*s
est le premier caractères[1]
est le second*s^s[1]
Si elles sont identiques, le résultat est 0 si elles ajoutent à 7, le résultat est 7 (si elles diffèrent et n'additionnent pas à 7, le résultat est compris entre 1 et 6 inclus)donc
(*s^s[1])%7
est zéro pour les mauvaises entrées et non nul sinon, donc false si ces 2 caractères sont mauvais et true sinoncommentaire: comme cet appel de fonction utilise uniquement la fin de récursion (seule la dernière instruction est un appel récursif), un optimiseur pourrait traduire la récursion en boucle, ce qui est une bonne conicidence et ne vaut évidemment pas un score de golf, mais dans le vrai mot permet de traiter des chaînes de n'importe quelle longueur sans manquer de pile.
la source
!((*s^s[1])%7)
Je pense que vous ne voulez pas!
. La valeur zéro pour une mauvaise entrée serait falsy, vous voulez donc renvoyer la falsy lorsqu'elle est mauvaise.Python, 71 octets
Utilise une approche récursive.
Explication:
la source
Retina , 28 octets
Essayez-le en ligne!
Alternativement:
Essayez-le en ligne!
la source
MATL , 9 octets
L'entrée est un tableau de nombres représentant les chiffres.
La sortie est un tableau non vide, qui est truthy si toutes ses entrées ne sont pas nuls, et falsy autrement ( en savoir plus sur le critère de MATL pour truthy et falsy ici ).
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
movsum
, il y a déjàconv2
(ce qui inclutconv
); voirY+
etZ+
C # (avec Linq)
908173716968 octetsExplication:
la source
C, 81 octets, 85 octets
L'entrée est un tableau d'entiers A de longueur L. Retourne 1 pour vrai et 0 pour faux. L'entrée est vérifiée de bout en bout en utilisant la longueur d'entrée L comme index du tableau.
la source
int
est facultatif au début, vous pouvez économiser 4 octets.int s=1;
peut être déclaré en dehors de la fonction commes=1;
pour un autre 4.Haskell, 37 octets
Exemple d'utilisation:
f [1,5,2]
->False
.Récursion simple. Cas de base: liste d'éléments uniques, qui retourne
True
. Cas récursif: laisseza
etb
soyez les deux premiers éléments de la liste d’entrée etc
le reste. Toutes les conditions suivantes doivent être:a+b/=7
,a/=b
et l'appel récursif aa
chuté.la source
JavaScript, 40 octets
Exploite la fonctionnalité JavaScript qui
&&
renvoie la dernière valeur analysée (soit le terme faux, soit le dernier terme).0
est transmis s'il ne remplit pas les conditions et si le terme précédent est transmis autrement. Le 9 s'assure qu'il commence par une valeur de vérité.la source
Groovy, 61 octets
la source
Python 2, 58 octets
la source
> <> , 39 octets
Essayez-le en ligne!
la source
Lot, 102 octets
Ungolfed:
la source