L'inspiration du défi était ce que j'ai vu quelque part:
Le mot "nonne" est juste la lettre n faisant une roue
Votre défi est de prendre une ficelle et de déterminer s’il s’agit de la première lettre faisant une roue.
Règles
Une ficelle est une lettre faisant la roue si:
- La première lettre est la même que la dernière lettre. (La lettre ne peut pas atterrir sur sa tête.)
- La chaîne alterne des lettres à la molette, chaque caractère.
Les lettres en forme de roue sont n
and u
, m
and w
, b
and q
. Notez que n
et w
ensemble sont pas renversant sur les lettres, ni sont w
et b
.
- Vous allez prendre une chaîne en utilisant l’une de nos méthodes d’entrée standard.
- Vous produirez une valeur de vérité si la chaîne est une lettre, et une valeur de fausseté si ce n'est pas le cas. La sortie peut être effectuée en utilisant n'importe quelle méthode de sortie standard.
Règles supplémentaires:
- Seules les lettres minuscules
n
/u
/m
/w
/b
/q
doivent être manipulées. - Vous pouvez supposer que l'entrée n'est jamais vide.
- Une chaîne d'un caractère n'est pas une roue valide.
Cas de test
Input -> Output
nun -> truthy
nunun -> truthy
nunununu -> falsy
wmw -> truthy
wmwun -> falsy
bqbqbqbqbqb -> truthy
v^v^v -> falsy
AVAVA -> falsy
OOO -> falsy
ununununu -> truthy
nunwmwnun -> falsy
nun unun -> falsy
nunwmw -> falsy
nnuunnuunnuu -> falsy
nwnwnwnwn -> falsy
m -> falsy
nunuuunun -> falsy
Gagnant
Comme pour le code-golf , le code le plus court (dans chaque langue) gagne!
b
roues dans les rouesq
, n'est-ce pas?d
etp
sont aussi des copains de roue. Leur clé est qu'ils tournent et non pas à l'envers.uwuwuwuwuwu
bqb
mais paspdp
?dpd
,pdp
et que cela ne fonctionne pas, je pense que vous devriez les avoir dans les cas de test avec une réponse falsifiée.Réponses:
Gelée , 23 octets
Cela a pris plus de travail qu'on pourrait le penser!
Un lien monadique prenant une liste de caractères et retournant
1
(vérité) ou0
(falsey).Essayez-le en ligne! ou voir une suite de tests .
Comment?
Recherche l'index de chaque caractère de l'entrée dans la liste de caractères indexée 1
nmbuwq
. Cette chaîne est disposée de telle sorte que les index des paires sont trois à part, en tant que tel la différence incrémentale des index pour la roue valide sera répétitions de l' une[-3,3]
ou[3,-3]
.Quand un élément n'est pas trouvé dans une liste par "l'index" de l'atome
i
, il retourne0
, ce qui ferait correspondre les caractères non fondus avecb
, en faisant une entrée comme unebxbxb
vérité. Ainsi,0
s est remplacé par10
une valeur distante de plus de trois de toute autre valeur avant de vérifier sa validité.la source
sed 4.2.2 , 30 + 1
-r
=4331 octetsÉconomisé 12 octets grâce à @Neil en raccourcissant la première ligne
Essayez-le en ligne!
Supprime l'entrée si falsey, sinon ne fait rien à l'entrée.
Explication
Avec l'
-r
indicateur, nous n'avons pas besoin d'utiliser\(
et\)
de capturer des groupes, cela économise des octets.la source
sed
sorcier ...sed
moi ressemble à de la magie. : Punu
etnun
contientnu
et la deuxième ligne garantit que le reste des lettres correspond à ces deux lettres.JavaScript (ES6),
827877 octetsSauvé 1 octet en utilisant deux valeurs de fausseté, comme suggéré par ThePirateBay et MD XF.
Cas de test
Afficher l'extrait de code
la source
&&
au lieu de&
?&
produirait l'unfalse
ou l' autre0
.)&
; J'ai spécifié (dans le chat) que des valeurs de fausseté incohérentes sont autorisées.Python 3 , 111 octets
-2 octets merci à M. Xcoder.
Essayez-le en ligne!
la source
nunununu
.Python 2 , 63 octets
Essayez-le en ligne!
la source
"nu un nm mn bp pb".split()
économiser 4 octets et supprimer des espaces. 75 octets:lambda s:any(s==c[-1]+c*max(len(s)/2,1)for c in"nu un nm mn bp pb".split())
s[0]
au lieu dec[-1]
.unmnu
etunmwnu
. Vraiment, il renvoie les faux positifs quand(s==s[::-1])+len(set(s))
est 4, ce qui est facile à forcer. Même seulement 4 personnages différents le font retourner True.Python 3 , 71 octets
Essayez-le en ligne!
-1 grâce à @HyperNeutrino et -13 grâce à @ovs
S'il s'avère que ce qui précède a échoué pour n'importe quel cas de test, il existe une alternative:
Essayez-le en ligne!
Explication
''.join(sorted(list({*n[1::2]}).union({*n[::2]}))))
- Obtient les caractères aux index impairs et les caractères aux index pairs, les dédoublonne et trie la liste formée par leur union.in'nu,mw,bq'
- Vérifie s’il s’agit de combinaisons valides de lettres panier.n[0]==n[-1]
- Vérifie si le premier caractère est identique au dernier.la source
uwuwuwuwuwu
résultats dans truenuuun -> True
. Ça n'est pas correct.JavaScript (ES6), 40 octets
Vérifie si la chaîne d'entrée concaténée avec le deuxième caractère de la chaîne d'entrée est une chaîne répétitive de la même paire de caractères de roue à la base.
Tests:
la source
Clojure, 156 octets
C'était trompeusement difficile! J'ai fini par devoir le décomposer en 3 problèmes secondaires:
Je n’ai certes pas gagné, mais c’était un bon exercice du matin! Explication complète ci-dessous:
la source
Haskell,
8078 octetsEssayez-le en ligne!
Comment ça marche:
la source
Python 2 , 45 octets
Essayez-le en ligne!
Les espaces dans la chaîne sont des
DEL
caractères.la source
|u|
est interprété comme une roue de charrette.DEL
caractères pour être clair.s[:3]in'bqbqnunuwmwm'
Retina , 24 octets
Sorties 1 pour la vérité, 0 pour la fausseté.
La réponse du charlatan du port des vaches.
Essayez-le en ligne!
la source
nunwmwnun
(quand cela devrait être faux), c’est pourquoi j’ai eu la\1*
réponse dans sed.G`nu|mw|bp
car toutes les chaînes de vérité contiennent une de ces paires de lettres et la deuxième ligne assurera que tout le reste de la chaîne contient ces lettres aussi.ununununu
Grime , 28 octets
Essayez-le en ligne! Imprime
1
pour les entrées de vérité et0
pour les faux.Explication
La syntaxe Grime ressemble aux expressions régulières et un programme Grime spécifie un modèle qui peut correspondre ou non à un rectangle de caractères.
Quelques fonctionnalités de Grime qui ont permis de raccourcir ceci:
""
change ceci: les éléments de syntaxe sont échappés, mais pas les littéraux. Sans les guillemets, la partie qui énumère les paires de caractères serait(\n\u|\b\p|\m\w)oT
.-
) agissent sur son résultat:..-#!"…"oT
est équivalent à(..-"…"oT)#!
.v
s abaissent la priorité des éléments de syntaxe qui les suivent. Un solitaire&
a plus de priorité que-
, maisv&
a moins. De même,..+
est analysé comme.(.+)
, mais..v+
équivaut à(..)+
.la source
Python 2 , 69 octets
Essayez-le en ligne!
la source
Pyth , 27 octets
Suite de tests.
Sorties
1
de vérité et /False
ou0
de fausseté, comme l'OP le permettait dans le chat.la source
Gelée , 27 octets
Essayez-le en ligne!
Comment ça marche
la source
Python 2 , 103 octets
Essayez-le en ligne!
la source
Japt , 47 octets
Essayez-le en ligne!
la source
Python 3 , 88 octets
len(x)%2
: une chaîne de longueur égale ne peut pas se terminer sur le premier caractèrex[:2] in
: recherchez l’une des 6 paires de départ valideslen(set())
: obtenez la longueur des jeux de caractères à 0,2,4 ... et 1,3,5 ...Retourne
True
si la liste des évaluations est égale à [1,1,1,1], sinonFalse
.Essayez-le en ligne!
la source
Perl 5 , 55 + 1 (-p) = 56 octets
Essayez-le en ligne!
Imprime la version "à l'envers" du premier caractère pour vrai, rien pour faux.
la source
PHP, 59 + 1 octets
Courez comme un tuyau avec
-F
.solution partiellement regex, 101 + 1 octets:
Sortie vide pour fausseté. Courez comme un tuyau avec
-nR
.la source
Java 8, 57 octets
Essayez ici.
Regex simple pour correspondre à tous les six cas. Notez que Java
String#matches
correspond automatiquement à la chaîne entière, il n'y a donc pas besoin de^...$
.la source
MATL , 25 octets
La sortie est un vecteur de colonne numérique non vide, ce qui est vrai si toutes ses entrées sont non nulles et faux si ce n'est pas le cas. Essayez-le en ligne!
Pour vérifier tous les cas de test , une
if
branche est ajoutée dans le pied de page. Elle remplace toute valeur de vérité par la chaîne'truthy'
ou toute valeur de faux par la chaîne'falsy'
, puis affiche la chaîne.Explication
la source
Python 2 , 74 octets
Essayez-le en ligne! Cette prise en compte du problème est étonnamment compétitive.
la source
Clojure, 115 octets
Construisez une expression régulière à partir de chaque paire de lettres et voyez si l'entrée correspond à une. Beaucoup de façons plus élégantes de faire toutes ces parties, mais elles sont toutes plus verbeuses. Telle est la vie avec Clojure golfing.
la source
Perl 5, 68 + 1 = 69 octets
Courez avec
-n
.Explication:
la source
TXR Lisp , 50 octets
Courir:
f^$
est un combinateur qui prend un objet regex et renvoie une fonction qui correspond à cette regex de manière ancrée. (En lui-même, un objet regex est un objet appelable par une fonction qui prend une chaîne et se cherche à travers elle.)la source
Python 3 , 66 octets
Essayez-le en ligne!
la source
TXR :
7874 octetsExécuter, à partir de l'invite du système. Le nombre dans l'invite correspond au statut de fin: 0 = succès, 1 = échec:
Explication:
@{x 2}
: correspond à deux caractères, lie à lax
variable.@(rep :gap 0)@x@(end)
: correspondance répétée sans lacunes ignorées: aucune ou plusieurs occurrences dex
, le digraphe précédemment apparié.@y
: reste de la ligne appariée, capturée dansy
.@(bind(x y)(foo bar))
: lierx
àfoo
, y àbar
. Depuisx
ety
sont déjà liés, ils doivent correspondrefoo
etbar
sinon il y a un échec.foo
is#"nu un mw wm bq qb"
, une liste de mots littérale, un sucre syntaxique pour la liste Lisp("nu" "un" ... "qb")
. Unebind
correspondance entre une variable et une liste signifie que la variable doit correspondre à un élément.bar
is@[x 0..1]
: la sous-chaîne d'un caractèrex
depuis son début. Labind
correspondance entrey
et ceci force la dernière lettre de la ligne à correspondre à la première.la source
C ++, 268 octets
la source
n
= 110,u
= 117,m
= 109,w
= 119,q
= 113. Donc, utiliser des valeurs ASCII ou non n'a pas d'importance pour les caractères supérieurs àc
(99)JavaScript (ES6), 63 octets
Retours
1
ou0
.Explication
Toutes les chaînes de la roue auront un ou plusieurs des éléments suivants: bq , wm ou un . Nous testons pour cela avec:
Si vous remplacez toutes les occurrences des deux premières lettres d'une chaîne de roue par rien, vous vous retrouvez avec la première lettre de la chaîne. Nous testons pour cela avec:
Afficher l'extrait de code
la source