Ne me demandez pas comment ni pourquoi, mais en codant sur un projet, j'ai remarqué que les caractères de deux mots avaient un motif particulier faisant référence à l'alphabet, j'ai relié chaque caractère des mots au crayon de l'alphabet et j'ai obtenu deux spirales, puis j'ai remarqué que la première spirale était dans le sens des aiguilles d'une montre et l'autre dans le sens contraire des aiguilles d'une montre, ainsi que d'autres caractéristiques ... alors je les ai nommées Mots tourbillonnants !
Un mot tourbillonnant peut être:
- dans le sens horaire ou antihoraire
- centripète ou centrifuge
Voici quelques exemples de mots tourbillonnants :
Tache 1:
Ecrivez un programme complet ou une fonction qui prendra un mot de l’entrée standard et produira un mot tourbillonnant et ses caractéristiques, dans un format lisible, un texte étendu, 3 caractères, des drapeaux, etc.
Cas de test et exemples de sorties pour différents mots (mais vous pouvez décider comment représenter les résultats):
EARTH, GROUP > NO // NOT A SWIRLING WORD
OPERA, STAY, IRIS > SW,CF,CW // SWIRLING WORD, CENTRIFUGAL, CLOCKWISE
MINER, TAX, PLUG, META > SW,CF,CC // SWIRLING WORD, CENTRIFUGAL, COUNTERCLOCKWISE
AXIOM, AXIS, COOK > SW,CP,CW // SWIRLING WORD, CENTRIPETAL, CLOCKWISE
WATCH, YETI, PILL > SW,CP,CC // SWIRLING WORD, CENTRIPETAL, COUNTERCLOCKWISE
MORE EXAMPLES OF FALSE TEST CASES (NOT SWIRLING WORDS):
EARTH, GROUP, OUTPUT, WORD, CONNECTION, ODD, MOM, DAD,
CHARACTER, EXAMPLE, QUESTION, NEWSLETTER, OTHER
Règles:
- La connexion entre les deux premiers caractères doit être active (comme dans les graphiques), toute la connexion paire doit être interrompue , toutes les connexions impaires doivent être actives .
- Vous pouvez ignorer les majuscules / minuscules ou considérer / convertir tout en majuscule ou tout en minuscule.
- Les mots d'entrée ne sont que des caractères dans la plage alphabétique de AZ, pas d'espaces, pas de ponctuation, etc.
- Si un mot a des caractères doubles, comme "GROOVE", vous devez réduire les doubles à un seul caractère: "GROOVE"> "GROVE".
- Les mots entrés contiendront au moins 3 caractères distincts. Des mots comme "MOM", "PAPA", "LOL" ne sont pas des mots valides.
- Il est possible de passer plusieurs fois dans le même caractère, comme "IRIS".
- Le code le plus court gagne.
Tâche 2:
Pour obtenir plus de réputation, recherchez les mots les plus longs qui tourbillonnent , ainsi que leurs caractéristiques, que vous trouverez dans le dictionnaire anglais en suivant les règles ci-dessus. Vous pouvez prendre par exemple comme référence la liste complète des mots anglais ici .
Bonne codage!
Réponses:
MATL ,
333130 octetsL'entrée est en majuscules (ou en minuscules, mais non mélangée).
La sortie est:
1
/-1
indique centrifuge / centripète.1
/ «-1» indique le sens horaire / antihoraire.Essayez-le en ligne! Ou vérifiez tous les cas de test (code modifié pour prendre toutes les entrées et produire les deux numéros de sortie sur la même ligne)
Explication
Prenons l'entrée
'OPERAA'
comme exemple.La première partie du code supprime les doubles lettres:
Nous vérifions maintenant si les distances entre les lettres ne sont pas décroissantes (condition nécessaire pour que le mot tourbillonne):
Nous vérifions ensuite si les lettres vont et viennent (c’est l’autre condition pour que le mot tourbillonne):
Enfin, nous vérifions si les deux conditions sont vérifiées et, dans ce cas, produisons la sortie:
la source
Mathematica,
117111 octetsMerci à JHM d’avoir économisé 6 octets et de le rendre insensible à la casse!
Fonction sans nom qui prend une chaîne et retourne une liste imbriquée de booléens dans le formulaire
{{B1,B2},B3,B4}
. B4 enregistre si le mot tourbillonne (et si ce n'est pas le cas, le reste de la sortie est illisible). Si le mot tourne, B1 indique si le mot est centrifuge, B2 si le mot est centripète et B3 si le mot est dans le sens des aiguilles d'une montre (Vrai) ou dans le sens inverse des aiguilles d'une montre (Faux).Voici une version plus longue que les processus de post-(première ligne) la fonction ci - dessus (espacées sur les 2e-5e lignes) pour la rendre identique à l'OP:
NO
si le mot est tourbillonnant, et le choix approprié de{SW,CF,CW}
,{SW,CF,CC}
,{SW,CP,CW}
ou{SW,CP,CC}
si le mot tourbillonne:L'explication est la même que dans la réponse de Martin Ender dans CJam, avec une remarque supplémentaire: la liste des différences consécutives doit alterner dans le signe pour que le mot tourbillonne, et cela peut être détecté en s'assurant que tous les produits de paires de différences consécutives sont négatifs. (c'est ce que
Max[Most[d]Rest@d]<0
fait).En exécutant la fonction sur plus de 40 000 mots de Mathematica
WordList[]
, nous trouvons les mots tourbillonnants de 8 lettres suivants, qui sont les plus longs de leurs types tourbillonnants respectifs:(Brownie fait référence à
positive
ne pas avoir de lettres doubles et moins de lettres répétées questowaway
.)Mais le champion absolu est le mot centripète tourbillonnant dans le sens antihoraire
vassalage
!la source
LetterNumber
place deToCharacterCode
et 3 autres octets en utilisant à laMost[d]
place deDrop[d,-1]
.Scala, 110 octets
Retourne un tuple
(a,b)
aveca == 1
si s est centripètea == 0
si s est centrifugea == -1
si s ne tourne paset
b == true
si s est dans le sens des aiguilles d'une montreb == false
si s est dans le sens antihoraireExplication:
la source
Gelée , 30 octets
TryItOnline
Ou voir les cas de test (avec un léger changement car le dernier
Ñ
point indiquerait le nouveau lien principal)(Mon manque de compétences d'enchaînement coûte probablement quelques octets ici)
Tout en haut ou tout en bas.
Renvoie une liste de drapeaux [D, F, S]:
S: rotation = 1 / pas de rotation = 0
F: centrifuge = 1 (circulaire = 0) centripète = -1
D: dans le sens des aiguilles d'une montre = 1 / dans le sens inverse des aiguilles d'une montre =
S - 0 les autres indicateurs sont toujours évalués même s'ils ne contiennent aucune information utile.
Comment?
la source
0
sorte que cela fonctionne toujours pour ceux-là aussi!circular(0)
votre explication à l' intérieur, peut-être qu'il est temps de l'enlever également.min([])=0
jelly.tryitonline.net/#code=W13huYI&input= - Notez que depuis les mots circulaires ne sont jamais entrée attendue, il n'y a pas de problème dans la restauration pour eux.min([])==0
, mais je pensais que c'était encore golfable.CJam , 39 octets
Essayez-le en ligne!
L'entrée peut être en majuscule ou en minuscule, mais pas mélangée.
Le programme signale par inadvertance des mots qui ne sont pas nécessairement centrifuges ou centripètes, mais qui répondent aux exigences de spirale. Celles-ci sont décrites comme "circulaires" dans le tableau ci-dessous.
Pour interpréter la sortie, utilisez ce tableau:
Explication:
Le programme évalue en fait si la séquence de différences non nulles entre les caractères commence positivement ou négativement, si elle alterne en signe, si les magnitudes commencent à augmenter ou à diminuer et si elle continue à le faire. Si les magnitudes n'augmentent ni ne diminuent, le programme s'interrompt en opérant sur un tableau vide. Les principales étapes sont indiquées ci-dessous (ce code indiquera également la progression de la pile):
la source
PHP, 322 octets
pour une sortie plus jolie
echo["n","+P","-P","+F","-F"][$s];
Version élargie
Tâche 2 seconde valeur sans la règle des doubles courts
Visualiser un mot
dans l'extrait est le résultat du SVG que j'ai créer
la source
'.(.8*$radius).'
au lieu de'.($radius).'
et si vous remplacez($radius).' 0 0 0
par($radius).' 0 0 '.(($w[$i-1]<$w[$i]?1:0)^(($i-1)%2)).'
le programme n'a pas une direction fixeHaskell, 148 octets
Essayez-le sur Ideone.
Les entrées doivent être toutes les lettres majuscules ou minuscules.
La sortie est une liste de cinq booléens:
[SW?, CF?, CP?, CW?, CC?]
.f "positive" -> [True,True,False,False,True]
Cela s'est avéré plus long que prévu, en particulier le traitement de la réduction des caractères répétés prend environ 40 octets.
Au début, je n'ai comparé que les deux premiers caractères pour céder
CW
ouCC
avant de remarquer que les cas de test sont valablesbba
oubbc
valables aussi et que cette approche est vaincue .la source
Python, 152 octets:
Une fonction lambda anonyme. Appeler comme
print(<Function Name>('<String>'))
.Prend les entrées en minuscules ou majuscules, mais pas en majuscules.
Génère un tableau ne contenant rien (
[]
) si le mot n'est pas swirly, ou un tableau au format suivant:True/False
pourCentrifugal/Centripetal
.True/False
pourClockwise/Counterclockwise
.Essayez-le en ligne! (Idéone)
la source