(inspiré par ce défi sur Puzzling - les SPOILERS pour ce puzzle sont ci-dessous, alors arrêtez de lire ici si vous voulez résoudre ce puzzle par vous-même!)
Si une lettre d'un mot apparaît alphabétiquement plus tard que la lettre précédente du mot, nous appelons cela une élévation entre les deux lettres. Sinon, même si c'est la même lettre , ça s'appelle une chute .
Par exemple, le mot ACE
a deux montées ( A
vers C
et C
vers E
) et aucune chute, tandis qu'il THE
a deux chutes ( T
vers H
et H
vers E
) et aucune montée.
Nous appelons un mot cahoteux si la séquence de montées et de chutes alterne. Par exemple, BUMP
va monter ( B
à U
), tomber ( U
à M
), monter ( M
à P
). Notez que la première séquence n'a pas besoin d'être une montée - BALD
va chute-montée-chute et est également cahoteuse.
Le défi
Étant donné un mot, affichez s'il s'agit ou non de Bumpy.
Contribution
- Un mot (pas nécessairement un mot du dictionnaire) composé uniquement de lettres (
[A-Z]
ou[a-z]
) alphabétiques ASCII , dans n'importe quel format approprié . - Votre choix si l'entrée est entièrement en majuscules ou en minuscules, mais elle doit être cohérente.
- Le mot comptera au moins 3 caractères.
Sortie
Une valeur truey / falsey pour savoir si le mot d'entrée est Bumpy (véridique) ou non Bumpy (falsey).
Les règles
- Un programme complet ou une fonction sont acceptables.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
Vérité:
ABA
ABB
BAB
BUMP
BALD
BALDY
UPWARD
EXAMINATION
AZBYCXDWEVFUGTHSIRJQKPLOMN
Falsey:
AAA
BBA
ACE
THE
BUMPY
BALDING
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Classements
Voici un extrait de pile permettant de générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
la source
BUMP
est répertorié dans Truthy (c'est-à-dire Bumpy), pourquoiBUMPY
est-il dans la liste Falsey? Que signifie «monte et descend alterné»? Deux ascensions ne peuvent pas se succéder?BUMPY
est faux carMPY
donne deux hausses consécutives. En d'autres termes, aucune sous-chaîne de longueur 3 ne doit être triée par ordre croissant ou décroissant pour qu'un mot soit cahoteux (sauf dans le cas particulier où deux lettres consécutives sont identiques).Réponses:
MATL, 4 octets
Explication:
Ceci est ma première entrée MATL, donc je me demande quelle amélioration il peut y avoir de ce port naïf de ma tentative MATLAB / Octave (qui serait
@(a)all(diff(diff(a)>0))
). Notez que leall
n'est pas nécessaire car tout zéro rend un tableau faux, donc il n'yA
en a pas dans le port MATL.la source
d0>d
devrait fonctionner (vous n'avez pas besoin duA
selon notre définition de truey / falsey)JavaScript (ES6),
7569634643 octetsEnregistré 3 octets grâce à Neil:
Déstructuration du paramètre de chaîne au lieu de
s.slice(1)
.Solution précédente:
17 octets économisés grâce aux productions ETH:
Ce qui s'est passé étape par étape de la solution précédente:
Solutions précédentes:
63 octets grâce aux productions ETH:
69 octets:
75 octets:
Toutes les lettres d'un mot doivent avoir la même casse.
la source
!s[2]|...
faire la même chose ques[2]?...:1
?f=([c,...s])=>s[1]?c<s[0]^s[0]<s[1]&&f(s):1
LabVIEW, 36 octets équivalents
Golfé en utilisant des équivalences logiques:
Ungolfed:
Nous convertissons d'abord en minuscules, puis en tableau d'octets. Coupez le premier élément du tableau d'octets car il n'a pas de précédent. Ensuite, pour chaque élément du tableau, vérifiez s'il est supérieur au précédent (le caractère U8 est mappé en ASCII comme prévu) et stockez le résultat pour la prochaine itération, ainsi que dans un tableau pour afficher les bosses globales. Si les vérifications booléennes actuelles et antérieures sont égales, nous terminons la boucle et ce n'est pas cahoteux. Sinon, c'est cahoteux!
la source
Python, 56 octets
Tous les cas de test sont à idéone
Zips à travers des triplets de caractères dans s et teste que tous ces triplets ont des paires gauche et droite avec différentes propriétés de montée / descente.
Fonctionne soit en majuscules soit en minuscules.
la source
Rubis,
5748 octetsS'attend à ce que l'entrée soit entièrement en majuscules.
Voir sur repl.it: https://repl.it/D7SB
Explication
L'expression régulière
/.(?=(.)(.))/
correspond à chaque caractère suivi de deux autres caractères.(?=...)
est une anticipation positive, ce qui signifie que nous faisons correspondre les deux caractères suivants, mais ne les "consommons" pas dans le cadre de la correspondance. À l'intérieur des accolades, se$&
trouve le texte correspondant - le premier caractère des trois - et$1
et$2
sont les caractères capturés à l'intérieur de l'antichambre. En d'autres termes, si la chaîne est"BUMPY"
, elle correspondra d'abord"B"
(et la mettra$&
) et capturera"U"
et"M"
(et les mettra$1
et$2
). Ensuite , il correspondra"U"
et la capture"M"
et"P"
, et ainsi de suite.À l'intérieur du bloc, nous vérifions si la première paire de caractères (
$&
et$1
) est une montée et la seconde ($1
et$2
) est une chute ou vice versa, un peu comme la plupart des autres réponses. Cette^
expression renvoietrue
oufalse
, qui est convertie en chaîne et insérée à la place de la correspondance. En conséquence, notre exemple"BUMPY"
devient ceci:Puisque nous savons que l'entrée est entièrement en majuscules, nous savons
"f"
qu'elle ne se produira que dans le cadre de"false"
et!result[?f]
nous donnera notre réponse.la source
C #,
646355 octets-8 octets des suggestions de Scepheo
Il s'agit d'un portage de la solution Hedi vers C #. J'ai également trouvé une solution récursive, mais la récursivité n'était pas aussi bonne. Ma solution originale est ci-dessous.
Mon C # d'origine,
969491 octets-2 octets en utilisant
1>0
au lieu detrue
.-3 octets des suggestions de Scepheo pour la solution de port ci-dessus
S'appelle récursivement vérifier que l'alternance montante / descendante alterne à chaque fois.
Ungolfed:
la source
?:
opérateur ou des parenthèses:unsafe bool B(char*s)=>1>s[2]|s[0]<s[1]!=s[1]<s[2]&B(s+1);
unsafe bool B(char*s)=>1>s[2]|*s<s[1]!=*++s<s[1]&B(s);
||
au lieu d'un OR au niveau du bit|
. Mis à jour le message, merci.C 59 octets
la source
AAA
- le premier "Falsey" dans les exemplesgcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
et je suis faux pour aaa et excité. Dans cette version, non nul est falsey, et zéro est véridique. En fait, je me demande maintenant si cela est autorisé.f("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
compilé dans Visual Studio 2012 renvoie une valeur23
qui peut être traitée comme,True
mais dans la question, cette valeur se trouve dans la section "Falsey", donc valeur0
attendue.Gelée , 6 octets
Basé sur la réponse de @sanchises .
Essayez-le en ligne! ou Vérifiez tout.
Explication
la source
JavaScript (ES6), 65 octets
.map
n'est certainement pas la meilleure solution .la source
Python 2, 88 octets
Solution simple.
Essayez-le en ligne
Si les mêmes lettres consécutives n'étaient ni une montée ni une chute, la solution serait de 79 octets:
la source
Perl, 34 octets
Comprend +3 pour
-p
(le code contient'
donc-e
ne peut pas être utilisé)Donnez une entrée en majuscule sur STDIN:
bump.pl
la source
Python, 51 octets
Prend entrée comme
g('B','U','M','P')
et sorties1
ou0
.Utilise le déballage des arguments pour prendre les trois premières lettres et vérifier si les deux premiers se comparent différemment des deux autres. Ensuite, revient sur le reste, en utilisant la multiplication pour
and
.la source
Gelée ,
6 à5 octets-1 octet grâce à @Dennis (utilisez une réduction cumulative)
Tous les cas de test sont sur TryItOnline
Comment?
Fonctionne soit en majuscules soit en minuscules.
la source
Japt, 8 octets
Testez-le en ligne!
Comment ça marche
la source
C #
105104 Octets105 octets Solution:
Essayez-le en ligne
L'utilisation d'un tableau de caractères a sauvé un octet car l'espace peut être omis après les crochets.
f(string x)
contref(char[]x)
C'est 101 octets si je peux retourner un int 1/0 au lieu de bool true / false
la source
Haskell, 52 octets
Je soupçonne que je pourrais obtenir un morceau plus petit si je réussissais à me débarrasser de la construction "où", mais je suis probablement coincé avec zipWith.
Cela fonctionne en faisant une liste des hausses (Vrai) et des chutes (Faux), puis en faisant une liste de si les entrées adjacentes dans cette liste sont différentes
Il s'agit de ma première tentative sur l'un d'entre eux, je vais donc passer par mon processus de réflexion au cas où je me serais horriblement trompé quelque part.
Version non golfée (168 octets)
Raccourcir les noms, supprimer les informations de type (100 octets)
Déplacer h dans la fonction principale car elle n'est utilisée qu'une seule fois (86 octets)
Sachez que areBumps et riseFall sont assez similaires à l'abstrait (73 octets)
Notez que (tail y) est plus court que ya @ (y: ys) (70 octets)
Ranger; supprimer les espaces inutiles (52 octets)
la source
g h=tail>>=zipWith h
et en faire une fonction globale pour éviter lewhere
mot - clé.Java 7,
157153150125 125117 octetsCas non testés et testés:
Essayez ici.
Sortie:
la source
a > b
, mais tombe quanda <= b
, au lieu de>
et<
?char[]
afin de ne pas avoir à transformer votre chaîne d'entrée en tableau char. cela devrait économiser quelques octets. PS: java ftw!String s
->char[]z
?truthy
oufalsey
, alors faites de votre méthode un entier et retournez 1 ou 0 :) .. vous met à 117 octetsPowerShell v2 +, 83 octets
Un peu d'une approche différente. Cela boucle à travers l'entrée
$n
, chaque itération voyant si le caractère précédent$n[$_-1]
est-l
esst
han le caractère actuel$n[$_]
, puis transtypant le résultat de cet opérateur booléen en un int avec+
. Ceux-ci sont-join
édités ensemble dans une chaîne, stockés dans$a
. Nous vérifions ensuite si$a
est-eq
compatible$a
avec les sous-chaînes de00
ou11
supprimées.la source
Python 2.7, 84 octets
Renvoie 1 pour cahoteux, 0 pour sinon
J'ai appris des trucs sympas avec bit & et ^.
Commence par booléen b définissant la première paire comme haut / bas, puis teste et retourne b pour chaque paire suivante.
o bascule sur faux si le test échoue et colle.
Nécessite des guillemets autour de l'entrée (+4 octets pour raw_input () si cela enfreint une règle)
Essaye-le
la source
05AB1E , 9 octets
Explication
Essayez-le en ligne!
la source
Python 2.7 (encore une fois,
8483 octets)Ou,
7877 octets sans l'impression.À propos, l'exemple Python 2.7 de 56 octets ci-dessus se casse, par exemple,Tant pis, je n'ai pas lu les instructions. Révision."abbab"
ou toute autre entrée avec des caractères répétés.D'accord, jusqu'à 83. Le triplet est plus joli cependant.
la source
a(x)if x else[]
. 2. Utilisez un lambda à la placea=lambda s:[cmp(s[0],s[1:])]+a(s[1:])if s[1:]else[]
3. Utilisez un lambda à la fin au lieu d'imprimer.lambda s:len(set(a(s)))>1
4. s'illen(set(a(s)))
n'est pas supérieur à 1, il est déjà faux, vous pouvez donc décoller>1
CJam , 15 octets
Essayez-le en ligne! (En tant que suite de tests séparés par des sauts de ligne.)
Explication
la source
PHP, 80 octets
ou
sortie vide pour faux,
1
pour vraiou approche récursive de Hedi portée et un peu golfée pour 70 octets:
En fait, cela devrait récurrence infiniment pour les mots cahoteux, mais ce n'est pas le cas!
la source
Haskell,
3037 octetsUsage:
la source
foldl1(/=)
ne fait pas ce que vous pensez qu'il fait.PHP 7,
137118 octetsSortie vide pour Bumpy,
0
pour Not Bumpy.C'est ma première tentative de golf à code et je dois m'améliorer beaucoup, mais c'était une merveilleuse méthode pour apprendre de nouvelles choses pour moi. Je voulais également me mettre au défi dans cette tâche en utilisant le nouvel opérateur PHP 7 Spaceship qui semble très intéressant.
Quoi qu'il en soit, je ne suis pas satisfait, tout d'abord pour le fait que j'ai dû ajouter un supplément(Remarque: j'ai corrigé cela simplement en changeantif(isset($s[$i+2]))
pour vérifier si la variable existe parce que je n'ai pas trouvé d'autre solution au problème, mais c'est tout pour le moment.strlen($s)-1
enstrlen($s)-2
, je ne pouvais pas vraiment voir ça avant ...).Code de test:
Testez en ligne
la source
Javascript ES6, 100 octets
Essayez-le ici:
Oh allez, deux personnes me l'ont déjà battu de 40 octets ... peu importe
la source
"A"<"B"
:, vous n'avez donc pas besoin d'obtenir les codes de caractères des caractères.1
pourBUMPY
(ou toute autre chose qui contient à la fois une hausse et une baisse).Python 3,
148 139127 octetscode de test
la source
C
655760 octetsest correct de
qui fonctionne correctement avec toutes les données uniquement lors d'un appel de fonction unique (lorsque la variable globale
r
est initialisée à zéro).Mais dans tous les cas, c'est plus court que la solution précédente (65 octets) en raison de l'utilisation de
for
au lieu dewhile
. Mais le précédent (ce qui suit) est un peu plus facile à comprendre:Ma solution est basée sur le bit
&
avec le code de direction précédent et actuel inversé, où le code de direction peut être2
(1<<1
) pour augmenter le code de caractère (*s > *(s-1)
) ou1
(1<<0
) sinon. Le résultat de cette opération est devenu 0 si nous utilisons le même code de direction que précédent et actuel, c'est-à-dire lorsque le mot n'est pas cahoteux.MISE À JOUR:
Code de test:
la source
r
à0
gratuitement, mais vous devez le faire à partir de la fonction.PHP, 100 octets
Remplace chaque caractère de la chaîne (sauf le dernier évidemment) par un
r
pour augmenter ou unf
pour tomber, puis vérifie sirr
ouff
se produisent dans la chaîne. Pour éviter que le dernier caractère restant interfère avec cela, l'entrée doit être entièrement en majuscules.Je suis très insatisfait de la boucle, par exemple, j'ai le sentiment qu'il doit y avoir un moyen de combiner le
$i++
dans l'un des nombreux$i
s utilisés dans la boucle, mais je n'ai pas réussi à trouver cette façon. Peut-être que quelqu'un d'autre le voit.(C'est aussi pourquoi j'ai posté mon code, bien qu'il soit 20 (!) Octets de plus que la belle solution de Titus.)
la source
Java 8,
11490 octetsProgramme de test non golfé
la source