(Remarque: il s'agit d'un spin-off plus facile de mon défi précédent Find the Infinity Words!, Qui est un spin-off de mon autre défi précédent Find the Swirling Words! :))
Définition d'un mot ondulé :
- Si vous connectez avec des courbes tous les caractères d'un mot ondulé sur l'alphabet (AZ), vous obtenez le chemin d'une onde allant continuellement vers la droite ou vers la gauche et ne changeant jamais de direction, comme dans les schémas ci-dessous.
- Un mot ondulé peut être:
- Augmenter si chaque caractère consécutif est à droite (sur l'alphabet) du précédent.
- Diminue si chaque caractère consécutif est à gauche (sur l'alphabet) du précédent.
- Toutes les connexions paires doivent être interrompues, toutes les connexions impaires doivent être actives.
- Vous pouvez ignorer les majuscules / minuscules ou considérer / convertir tout en majuscules ou tout en minuscules.
- Les mots saisis sont uniquement des caractères de la gamme alphabétique AZ, pas d'espaces, pas de ponctuation ou des symboles.
- Si un mot a des caractères doubles, comme "SPOON", vous devez réduire les doubles à un caractère: "SPOON"> "SPON" (car si vous passez de O à O, la distance est nulle).
- Les mots ondulés contiendront au moins 3 caractères distincts (même après l'effondrement des doubles).
Voici quelques exemples:
Tâche:
Écrire un programme complet ou une fonction qui prendra un mot d'entrée et la sortie standard volonté si elle est un mot onduleux ou non, et dans le cas positif, la production si elle soulève ou baisse . La sortie peut être True/False/Null
, 2/1/0
, 1/Null/0
, -1/0/1
, NO/WR/WD
, etc, vous décidez comment représenter.
Cas de test:
WAVY WORDS:
ADEPT, BEGIN, BILL, BOSS, BOOST, CHIMP,
KNOW, SPONGE, SPOON, TROLL, WOLF
ADEPT > YES > RAISING
BEGIN > YES > RAISING
BILL > YES > RAISING
BOSS > YES > RAISING
BOOST > YES > RAISING
CHIMP > YES > RAISING
KNOW > YES > RAISING
SPONGE > YES > DECREASING
SPOON > YES > DECREASING
TROLL > YES > DECREASING
WOLF > YES > DECREASING
NOT WAVY WORDS:
WATCH, EARTH, NINON, FOO, BAR, WAVE, SELECTION,
YES, NO, DEFINITION, WATER, WINE, CODE, AAAHHHH, I, MM, ABCA
Règles:
- Le code le plus court gagne.
Tâche facultative:
Trouvez, sous forme de liste, autant de mots ondulés que possible dans un dictionnaire anglais, et le plus long aussi. Vous pouvez prendre par exemple comme référence la liste complète des mots anglais ici .
NO
etFOO
ne sont pas des entrées valides selon vos règles.NOT WAVY WORDS
section cependant, ce qui est correct ..Réponses:
05AB1E ,
119 octets (Merci à Adnan)Essayez-le en ligne!
Cas ondulés:
0 - Diminution ondulée
1 - Augmentation de l'ondulation
Cas non ondulés:
[0,1] - Pas ondulé, initialement décroissant, mais a ensuite une augmentation / égalité qui a brisé le motif.
[1,0] - Pas ondulé, initialement en augmentation, mais a ensuite une diminution / égalité qui a brisé le motif
Chaîne d'entrée - Impossible d'être ondulé en premier lieu en raison de la longueur.
Explication:
la source
The input words will contain at least 3 distinct characters
que je n'avais pas à gérer moins de 3 mots char. Travailler sur les changements peut prendre un certain temps; c'est ma première réponse que j'ai pu faire en 05AB1E.ü‹
c'est la même chose queü-0‹
:)Gelée , 10 octets
TryItOnline! ou exécutez tous les cas de test
Renvoie:
[1]
pour les cheveux ondulés de plus en plus[-1]
pour les cheveux ondulés diminuantautre chose autrement (
[]
,[0]
,[-1,1]
ou[1,-1]
)(Déclarée comme inutile: Pour obtenir une valeur unique pour chaque
OIṠḟ0µL’aQS
(11 octets) retourne1
,-1
et0
respectivement).Comment?
la source
Python 2, 54 octets
Prend la saisie sous forme de liste de caractères. Les sorties:
Vérifie si la chaîne d'entrée triée est égale à son origine ou son inverse. Le fait en découpant avec des tailles de pas de 1 et -1. Dans le même temps, nous vérifions si le mot a au moins 2 lettres distinctes.
Si "exit with error" peut être utilisé comme sortie pour les deux cas, on peut descendre à 51 octets:
la source
Python 3,
7775 octetsSuppose que toutes les lettres sont du même cas.
Retour:
0
sinon ondulé1
si en avant ondulé2
si ondulé en arrièreSuppression des espaces inutiles grâce à @ETHproductions
la source
or
.R,
9695 octetsRetour:
1
pour onduler et soulever2
pour ondulé et décroissant3
pour non onduléExpliqué
d=diff(rle(utf8ToInt(x))$v)
: Génère une variabled
en convertissant d'abord la chaîne en sesASCII
valeurs en utilisantutf8ToInt
ce qui renvoie commodément un vecteur. Exécutez ensuite l'encodage de la longueur d'exécution à l'aide derle
.rle(...)$v
renvoie les valeurs non répétitives de la séquence (c'est-à-dire en réduisant toutes les exécutions). Prenez enfin la différence.if(any(d>0)&any(d<0)|sum(1|d)<2)3
: Si au moins une des différences est positive et au moins une négative, ou si la séquence de différence a moins de2
éléments (équivalent au mot d'origine ayant moins de 3 caractères), le mot est non ondulé et retourne3
else``if``(all(d<1),2,1)
: Sinon si toutes les différences sont négatives, retour2
pour ondulé et décroissant, sinon retour1
pour ondulé et élévation.Essayez tous les cas de test chez R-fiddle (notez qu'il est nommé de manière à pouvoir être vectorisé pour les cas de test).
la source
JavaScript (ES6),
8481 octetsSuppose que l'entrée est tout dans le même cas. Renvoie
1
pour augmenter ondulé,-1
pour diminuer ondulé0
ou-0
(les deux sont faux) pour non ondulé. Edit: sauvé 3 octets grâce à @RobertHickman.la source
new
?new
.t=[...s]
et en utilisant t au lieu de [... s] dans ces deux endroits que vous avez.Javascript (ES6),
848078 octetsOù l'augmentation ondulée est 0, la diminution est 1 et -1 n'est pas ondulé.
Grâce à @Neil de m'avoir aidé à économiser 2 octets.
la source
new Set(s=[...i])
vous fait gagner 2 octets. (Il fonctionne en itéreri
, en le transformant en un tableau, itérer le tableau, et en tournant que dans un ensemble Convoluted mais vous ne vous inquiétez pas de ce genre de chose quand vous êtes de golf..)Pyth, 12 octets
Essayez-le en ligne. Suite de tests.
la source
Python 2,
535250 octetsAttend une entrée entre guillemets, par exemple
"watch"
En tant que lambda sans nom:
Additionne le signe de différence entre chaque lettre et divise l'entier par
len-1
. Si tous étaient1
(augmentant), la somme estlen-1
affichée1
, similaire pour décroissante-1
et pour mixte1
,-1
la somme est inférieure àlen-1
ce qu'elle affiche0
.-1 octet pour passer
cmp,s[1:],s[:-1])
àcmp,s[1:],s)+1
la source
1
pour"NO"
LMNOP
donc O est après N ce qui signifie augmenter ce qui signifie 1len
problème, mais les caractères répétitifs sont toujours un problèmeRubis, 54 octets
Retour
0
si le mot n'est pas ondulé,1
s'il est ondulé vers l'arrière et2
s'il est ondulé vers l'avant.la source
Groovy - 56 octets
Sorties
[1,0]
pour augmenter ondulé,[0,1]
pour diminuer ondulé,[0,0]
pour entrée de caractère unique ou[1,1]
pour non ondulé.REMARQUE: suppose que l'entrée est une chaîne ou un caractère [] et toutes les lettres sont du même cas.
la source
PHP, 96 octets
ou 98 octets
0 non ondulé 1 augmentant -1 diminuant
la source
-
au lieu de2*
(-1 pour décroître: -1 octet).*(!!...)
n'a pas besoin de parenthèses. (-2)$s*$s>1
au lieu deabs($s)>1
(-2)PHP, 100 octets
Retour:
-1
pour ondulé, décroissant.0
pour pas ondulé.1
pour ondulé, soulevant.la source
!!array_unique($s)[2]
au lieu decount(array_unique($l))>2
C, 164 octets
Renvoie 0 si pas wawy, 1 si wawy et augmente, 2 si diminue.
la source
Raquette 321 octets
Non golfé:
Essai:
Production:
la source
Java 7,
254240 octetsSort
0
si la chaîne d'entrée n'est pas ondulée,1
si c'est une onde montante et2
si c'est une onde décroissante.Code non testé et testé:
Essayez-le ici.
Production:
la source
int c(char[]s){int t=s[0],f=s.length,a=1,b=1,i;for(i=1;i<f;){if(s[i]-s[i-1]>=0)++a;if(s[i]-s[i++-1]<1)++b;}return a==f?1:b==f?-1:0;}
(132 octets)