Certaines versions de l'application de calculateur Android standard vous permettent d'appuyer sur une touche, telle que "sin", puis sur la touche "del" pour la définir "si". Probablement juste un bug qu'ils ne peuvent pas être dérangés de supprimer.
Les lettres / groupes de lettres suivants sont typables:
péché si s cos co c bronzer ta t dans l bûche lo e
Donc, "insipide" est typable, parce que ta-steless et donc "sabots" parce que "c-log-s". Cependant, 'got' n'est pas typable, ni 'an' ni 'xyz'.
Ecrivez un programme qui accepte un seul mot (ou une séquence de lettres, uniquement une entrée en z) et génère une sortie pour indiquer si un mot est typable ou non.
La sortie peut être un seul caractère / lettre / chiffre / etc. ou il peut être plus grand. Tous les mots typables doivent produire le même résultat. Tous les mots non typables doivent également produire le même résultat.
Post-scriptum Juste par curiosité, "sans goût" est-il le plus long terme du dictionnaire typable?
la source
Réponses:
Perl,
474341 + 1 = 42 octets-4 octets grâce à @Sunny Pun. -2 octets grâce à @Brad Gilbert b2gills et @Downgoat
Courez avec le
-n
drapeau.On peut certainement jouer au golf plus loin, mais dans l’esprit de compétition, je quitte la regex pour l’essentiel originale que j’avais imaginée au début. Ne retourne rien si vrai,
1
si faux.Essayez-le en ligne!
J'ai téléchargé un fichier de dictionnaire et le mot le plus long que j'ai trouvé était de 11 lettres -
tattletales
la source
co?
devrait suffire puisquesin
va s'occuper dus
:) Bien jouer avec/log?/
!i
), ou que le résultat unique doit avoir un sens (retirer un!
)/^(s|sin?|co?|t|tan?|ln?|log?|e)+$/
ou si vous préférez:/^([celst]|sin?|co|tan?|ln|log?)+$/
JavaScript (ES6), 44 octets
Je pense que c'est la regex la plus courte possible, mais bien sûr je peux me tromper.
Explication
Un premier endroit évident pour commencer serait une regex qui inclut simplement toutes les options séparément:
Premièrement, nous pouvons observer que cela
cos
peut être forméco
et les
rend inutile:Certains d'entre eux, tels que
sin
etsi
, peuvent être combinés en rendant la dernière lettre facultative:Cela fonctionne car les
sin?
correspondancessi
avec ou sansn
fin, couvrant ainsi à la foissin
etsi
.Il semble y avoir beaucoup de
n?
s aussi. Et si on les mettait tous ensemble?Une autre façon de jouer au golf serait de combiner les options restantes à un seul personnage dans une plage de caractères, mais cela revient à la même longueur:
Et c'est comme ça que vous jouez au golf avec une regex simple. Je crois que c’est la regex la plus courte possible qui associe chaque chaîne correctement, mais peut-être pas. J'attribuerai une prime de +100 à quiconque parviendra à améliorer cette regex.
la source
^(s|t|co?|(l|ta|si)n?|log?|e)+$
/ /.test.bind(/^((si|ta|l)n?|co?|log?|[ste])+$/)
.a=/^((si|ta|l)n?|co?|log?|[ste])+$/;a.test
pour 42 octets. Je crois que cela est autorisé car ila.test
s'agit d'une fonction anonyme.f=a.test
cela ne fonctionne pas. Je me demande s'il est acceptable d'appeler avec le nom alternatifa.test
si ...Pyth,
37332928 octetsLe code contient un caractère non imprimable, donc voici un
xxd
hexdump.Essayez-le en ligne.
Extrêmementastronomique. La complexité temporelle et spatiale estO (16 n )O (24 n ).Explication
Tout d'abord, a
Q
est implicitement ajouté.la source
s
.Jelly ,
3231302826 octetsAffiche 0 si le mot est typable, 1 sinon. Merci à @JonathanAllan pour le golf d'un octet!
Essayez-le en ligne!
Comment ça fonctionne
la source
Brachylog , 33 octets
Correction d'un bug grâce à @ Synoli.
Essayez-le en ligne!
Sorties
true.
si typables oufalse.
non.Explication
Nous essayons des déconcaténations de l'entrée jusqu'à ce que nous en trouvions une pour laquelle toutes les chaînes que nous concaténons sont le préfixe de l'une de celles-ci
["sin", "cos", "tan", "log", "lne", "eee]
.la source
.
aprèstrue
?true.
etfalse.
sinon. Je viens de réimplémenter ceci: si la sortie est ignorée (comme c'est le cas ici) et qu'il n'y a pas d'écriture surSTDOUT
, alors elle sera impriméetrue.
oufalse.
selon que le prédicat principal réussit ou échoue. Il a un point dans SWI-Prolog parce quetrue.
etfalse.
sont en fait des programmes valides qui réussissent / échouent toujours.tan
apparaître explicitement dans la liste?Perl 6 ,
60 5044 octetspremière tentative ( 60 )
traduction de Perl 5 réponse ( 50 )
utilisant l'
-n
interrupteur ( 43 + 1 )Le premier
?
convertit le résultat en booléen et le premier+
convertit en nombre (1
pourTrue
,0
pourFalse
)la source
Mathematica, 101 octets
Il semble que les parties les plus difficiles de ce défi consistent à proposer la regex la plus courte et à choisir le langage le plus concis qui soit. Je n'ai rien à contribuer au premier, et Mathematica n'est pas un bon candidat pour le second, car vous devez utiliser
StringMatchQ
etRegularExpression
. Ce que je peux faire, c’est répondre à votre PS: le mot le plus long que vous puissiez taper est-il sans saveur?Donc, "tattletale" semble être le plus long d'un personnage.
la source
True
ouFalse
plutôt qu'un seul caractère.Merveille , 41 octets
Usage:
Totalement mal compris la question avant, mais maintenant tout est fixé. Sorties
F
pour correspondance etT
pour aucune correspondance.Non compétitif, 35 octets
Usage:
Cela utilise les expressions rationnelles applicables, qui ont été implémentées après ce défi.
la source
n
de ne pas typable maissin
etln
êtes.sa
comme vraiegot
.?
faire le docile sous d'expression; voir rexegg.com/regex-quantifiers.html#cheat_sheet . Mais même le rendre gourmand??
ou possessif avec?+
ne fonctionne pas pour une raison quelconque (du moins en PHP).coelostats
déclenche le piège (àlo
etta
).Traitement, 223 octets
Finalement décidé de faire une réponse sans regex. Pour appeler la fonction, utilisez
l("tasteless");
. Retourne0
pour faux et1
pour vrai.Code développé avec explication
Fondamentalement, nous itérons sur la chaîne donnée, en construisant
b
char par char. Nous vérifions l' utilisationd()
si l' un destan
,log
... commencerb
. Si c'est le cas, alors c'est valide. Sinon, nous vérifions si le caractère à cette position est valide et nous réinitialisonsb
. Maintenant, s'il est invalide,0
sera retourné, sinon il sera toujours valide. A la fin, si le programme n'a pas encore renvoyé quelque chose, retournez-le1
.la source
d
fonction ne peut pas retourner unbool
?boolean
queint
. Aussitrue
etfalse
nécessitent plus d'octets que1
et0
Scala, 49 octets
Retourne true si la chaîne donnée correspond à l'expression rationnelle, false sinon.
la source
Python 3 , 154 octets
Essayez-le en ligne!
la source
Python 3 ,
149130 octetsedit # 1: rasé 19 octets avec la solution @Henke
la source
Python 2, 124 octets
la source
PHP, 60 octets
regex volé à partir de ETHproductions :
prend en entrée l'argument de la ligne de commande; impressions
1
pour typable,0
pour non typable.versions antérieures,
757369 octetsremplace tous les mots possibles par une chaîne vide, renvoie le résultat, annule.
divise l'entrée par correspondances rationnelles. Le drapeau
1
représentePREG_SPLIT_NO_EMPTY
et ditpreg_split
de ne renvoyer que les résultats non vides. Si input est typable,preg_split
les résultats ne seront vides que si le résultat est retourné, ce qui retournera un tableau vide, qui est faux.!
annule le résultat.Les deux versions prennent en entrée l'argument de la ligne de commande
et sont imprimées
1
si le résultat est vide (l'entrée est typable), sinon rien.Remarques: L'utilisation de
l'expression rationnelle à l'aide de regex
?
ne fonctionne pas ici; cela rend les expressions peu gracieuses; probablement en raison d'un retour en arrière. Et l’ordre des alternatives est important:ta
doit être arrêté avantt
ou le moteur cessera de s’adapter quand il trouverat
.J'ai trouvé un aide- mémoire quantificateur , pensé
??
ou?+
susceptible d'aider; mais ils n'ont pas travaillé pour moi.la source
Java 8, 55 octets
Disclamer: J'ai utilisé le regex d' ETHproductions parce que son nombre d'octets était inférieur au mien.Crédit complet sur la regex pour lui. Ce que j'ai fait a été d'ajouter 24 octets pour en faire une fonction Java.
Retourne
false
si le mot ne rentre pas dans la regex, sinontrue
.la source