(inspiré par ce post sur Puzzling. ATTENTION: SPOILERS POUR CE PUZZLE SONT CI-DESSOUS.)
Le clavier téléphonique standard met en corrélation les lettres et les chiffres comme suit:
1 ->
2 -> ABC
3 -> DEF
4 -> GHI
5 -> JKL
6 -> MNO
7 -> PQRS
8 -> TUV
9 -> WXYZ
0 ->
Un mot d'entrée donné est défini comme un mot ordonné si, lorsqu'il est traduit sur des touches du clavier à l'aide de ce qui précède, le nombre résultant est soit non décroissant soit non croissant. En d'autres termes, le nombre résultant ne peut ni augmenter ni diminuer.
Par exemple, le mot se CAT
traduit par 228
, qui n'est pas décroissant, et donc un mot ordonné. Cependant, le mot DOG
est 364
, qui augmente et diminue à la fois, et n'est donc pas un mot ordonné.
Le défi
Étant donné un mot, affichez s'il est ordonné ou non.
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 véridique / falsey cohérente indiquant si le mot saisi est ordonné (véridique) ou non ordonné (falsey).
Règles
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
- 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
Voici quelques mots ordonnés (c'est-à-dire véridiques), et il y en a plus sur le puzzle Puzzling lié.
CAT
TAC
AAA
DEMONS
SKID
LKJONMSRQP
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Voici quelques mots non ordonnés (c.-à-d. Falsey)
DOG
GOD
ROSE
COFFEE
JKLMNOGHI
abc->t9
et ce défi est de vérifier la monotonie?abc->t9
.AAA
Réponses:
Python 2 ,
164148132 13277 octets-16 octets grâce à la suggestion de Rod ailleurs . Un frickin '-55 octets grâce à Arnold Palmer.
Essayez-le en ligne!
L'entrée doit être en majuscules. Sorties
True
ou enFalse
fonction de son ordre.Explication
La première ligne associe chaque lettre à un nombre.
Cela fonctionne basé sur:
* Les valeurs sont arrondies. : P
La deuxième ligne sort si la liste des nombres est dans l'ordre croissant ou décroissant.
la source
JavaScript (ES6),
83 ... 7170 octetsRenvoie un booléen.
Cas de test
Afficher l'extrait de code
Comment?
Conversion de lettres
Nous utilisons
parseInt(c, 35)
pour convertir chaque lettre de la chaîne d'entrée en un certain nombre dans [ 10 .. 34 ]. Parce qu'il s'agit de la base-35, "Z" est converti à laNaN
place.L'expression
* .32 | 0
mappe ce nombre dans l'intervalle [ 3 .. 10 ], conduisant à 8 groupes de lettres corrects pour "A" à "Y" . Nous devons|| 10
obtenir la valeur correcte pour "Z" .Test de commande
Nous gardons une trace des signes de différences entre les nombres consécutifs dans le masque de bits v , initialement défini sur 3 (0b11):
La valeur précédente est stockée dans la même variable x que l'entrée. Cela garantit que la première itération - où aucune valeur précédente n'existe réellement - n'effacera aucun bit, car une chaîne contenant uniquement des lettres n'est ni supérieure ni inférieure à n'importe quel nombre:
Un mot est ordonné sauf si les deux signes sont rencontrés, ce qui conduit à v = 0 et fait
every()
échouer.la source
Gelée ,
28, 27, 25, 23, 22, 21, 19,18 octetsEssayez-le en ligne!
C'était très amusant à écrire!
Explication:
Merci à @ErikTheOutgolfer, @leakynun et @BusinessCat pour tous les octets de sauvegarde. :)
la source
05AB1E , 36 octets
Essayez-le en ligne!
la source
.•1нJ©½è`ÇHø¹á₂N¸°…ÈáÀ•#
parA•22ā₂•S£
.MATL ,
2625 octetsL'entrée est en majuscules. La sortie est
1
ou0
.Essayez-le en ligne!
Explication
la source
Husk ,
22 21 1918 octetsRetourne
1
pour les entrées véridiques,0
pour les fausses. Les entrées doivent être en majuscules. Réussit tous les cas de test. Essayez-le en ligne!Explication
la source
Python 2 , 60 octets
Essayez-le en ligne!
Accepte les entrées en minuscules.
Comment ça marche
⌊3681 / x ⌋ diminue de
a
;c
etd
;f
etg
;i
etj
;l
etm
;o
etp
;s
ett
;v
etw
;z
.la source
C ++,
375199195194 octetsMerci à la réponse JavaScript de Shaggy:
-5 octets grâce à Zacharý
la source
int j=1,i=0,d=0
boucle for?i
etd
sont utilisés en dehors du bloc de boucle, je ne peux pasi==0||d==0
==>i*d==0
.!(i*d)
marcherait? (en supprimant l'espace aprèsreturn
)05AB1E , 30 octets
Essayez-le en ligne!
-1 grâce à Magic Octopus Urn .
la source
¥0K0.SË
parce que ce¥0‹Ë
n'est pas correct? Je ne peux pas dire si0.S
c'est nécessaire.¥0K0‹Ë
semble fonctionner.Rétine , 65 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Remplacez la première lettre de chaque touche par un chiffre. (Ceci est désactivé par 1 mais cela n'a pas d'importance pour un contrôle ascendant / descendant. D'un autre côté, les zéros rendraient ma vie plus difficile, alors j'ai laissé un caractère de remplissage.)
Mélangez toutes les lettres restantes de 1 et répétez jusqu'à ce qu'elles soient toutes converties en chiffres.
Convertissez les chiffres en unaire, mais une seule fois par série de chiffres identiques. Les valeurs unaires sont séparées par un
<
...... mais si le LHS se révèle être supérieure à l'ERS, corriger l'
<
à>
.Supprimez les
1
s qui ne sont plus nécessaires.Vérifiez que le mot est ordonné. (Le
>
dernier vient du dernier chiffre qui se compare toujours plus grand que l'espace vide qui le suit.)la source
Pyth , 23 octets
Une de mes premières réponses Pyth non triviales! 6 octets enregistrés grâce à @LeakyNun. La solution initiale est ci-dessous.
Suite de tests.
Pyth , 29 octets
Suite de tests.
Explication
la source
05AB1E ,
2117 octetsCode
Utilise l' encodage 05AB1E .
Essayez-le en ligne! ou Vérifiez tous les cas de test!
Explication
Cela mappe désormais essentiellement les lettres suivantes aux nombres suivants:
la source
JavaScript (ES6),
1079795928885 octetsFonctionne avec des chaînes à casse mixte. Retourne
1
pour véridique ou0
pour falsey.Essayez-le
la source
Math.min((parseInt(c,36)-3)/3.13|0,9)
à la place"2..9"[parseInt(c,36)-10]
pour économiser quelques octetsAAA
.Gaia ,
29272517 octetsEssayez-le en ligne!
Explication
la source
05AB1E , 13 octets
Chaque fois que je vois une question de pavé numérique, je dois faire une réponse basée sur pi.
Essayez-le en ligne ou vérifiez tous les cas de test
la source
Gelée , 32 octets
Essayez-le en ligne!
la source
32222323
donc il enregistre seulement 2 octets.C # (.NET Core) , 133 octets
Essayez-le en ligne!
J'ai l'impression qu'il y a de la place pour économiser, mais C # n'est pas un langage concis donc peut-être pas. Non golfé:
En particulier, je pense qu'il existe un moyen plus court d'exprimer la vérification finale de la validité, peut-être un moyen de l'intégrer au
Zip
. Trouver un moyen d'exprimer leZip
sans avoir besoin de stockage temporaire pour leSkip
sauverait également quelque chose, mais je doute qu'il y ait quelque chose de plus concis pour cela.la source
Python 3 ,
143147 147148149130 octetsLe mieux que je puisse faire pour l'instant. La fonction brute transforme la lettre en nombre basé sur le code ascii. Il y a certainement des améliorations à apporter. 0 est véridique, 1 est falsey (désolé). Enregistré 10 octets grâce à Rod, 3 autres grâce à M. Xcoder.
Essayez-le en ligne!
la source
x=[f(a)-f(b)for a,b in zip(s,s[1:])]
pour enregistrer quelques octetsmin(int((ord(c)-58)/3.13),9)
est un moyen plus court de convertir l'omble chevalierPython 2 ,
111103 octets-8 octets grâce à @Arnold Palmer: pas
lower()
besoinEssayez-le en ligne!
la source
.lower()
puisque l'entrée peut être dans tous les cas que vous spécifiez.PHP 7,
98 + 1 95 + 184 + 1 octetsun port golfé de la réponse d'Arnauld .
accepte les majuscules; sortie vide pour faux,
1
pour vrai.Exécuter en tant que pipe avec
-nR
ou l' essayer en ligne .poste d'origine:
la source
CJam,
37313027 octetsEssayez-le en ligne
Bien sûr, la version laide finit par être plus courte ...
la source
C (gcc) ,
183 169 153 153117 octetsEssayez-le en ligne!
Ancienne solution:
8 octets enregistrés grâce à ThePirateBay.
Vieille vieille solution:
Vieille vieille vieille solution:
la source
TI-Basic,
9266 octetsConvertit chaque caractère de la chaîne en un entier de 0 à 7 et prend la différence entre chaque élément consécutif; vérifie ensuite si les différences minimum et maximum ont le même signe (ou bien 0).
la source
ΔList(int(4^-1seq(inString("DEF GHI JKL MNO PQRSTUV WXYZ",sub(Ans,I,1))+3,I,1,length(Ans
sauve un octet.Zsh ,
73 6957 octets-12 octets en utilisant la
3681/code
conversion de @ anders-kaseorg .Essayez-le en ligne! Essayez-le en ligne!Essayez-le en ligne!Quelques choses que nous abusons:
((statement,statement,...))
est une séquence d' expressions arithmétiques qui renvoie la vérité si la dernière instruction est non nulle.une seule paire deparenthèses sans a été utilisée. Un octet pourrait être enregistré s'il est!
lié moins étroitement que&
.0
dans les extensions arithmétiques.La fonction que nous utilisons pour mapper au numéro du clavier estcomme nous n'avons besoin que du changement entre les codes, nous ne faisons pas l'ajustement linéaire.CODE / 3.2 - 18
(avec un cas spécial pourZ
), mais2 octets peuvent être sauvegardés si les valeurs vérité / falsey peuvent être échangées.
la source