Écrivez un programme ou une fonction qui accepte une chaîne de caractères -=o.
où les -=o
«et .
» alternent toujours, caractère à caractère. La chaîne aura une longueur impaire supérieure à un et débutera et se terminera toujours par l'un des -=o
.
Fondamentalement, l'entrée ressemblera à une ligne de visages d'émoticônes qui partagent les yeux dans divers états de somnolence, par exemple
o.=.=.-.-.o.o
Votre objectif est d'imprimer ou de rendre le visage le plus endormi ou le plus éveillé (à vous de choisir). S'il y a plusieurs choix pour qui est le plus endormi / le plus éveillé, l'un d'eux peut être affiché.
Il y a neuf visages distincts et cinq niveaux de somnolence:
-.- is 100% sleepy
-.= is 75% sleepy
-.o is 50% sleepy
=.- is 75% sleepy
=.= is 50% sleepy
=.o is 25% sleepy
o.- is 50% sleepy
o.= is 25% sleepy
o.o is 0% sleepy
Dans le cas où ce n'est pas clair, le pourcentage de somnolence est calculé en attribuant 1
à -
complètement endormi, 0.5
à =
moitié endormi et 0
à o
éveillé. Ensuite, la somme des deux valeurs oculaires divisée par deux est le pourcentage.
Le code le plus court en octets gagne.
Cas de test
Le plus endormi
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES -.=
=.-.= GIVES =.- OR -.=
o.-.= GIVES -.=
-.-.= GIVES -.-
o.o.- GIVES o.-
=.=.=.o GIVES =.=
-.=.=.= GIVES -.=
=.o.-.= GIVES -.=
o.-.o.=.= GIVES o.- OR -.o OR =.=
-.o.-.=.= GIVES -.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES -.-
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES -.= OR =.-
Le plus éveillé
-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES o.-
=.-.= GIVES =.- OR -.=
o.-.= GIVES o.-
-.-.= GIVES -.=
o.o.- GIVES o.o
=.=.=.o GIVES =.o
-.=.=.= GIVES =.=
=.o.-.= GIVES =.o
o.-.o.=.= GIVES o.=
-.o.-.=.= GIVES -.o OR o.- OR =.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES o.o
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES o.o
-.-
Réponses:
Pyth,
12 à10 octetsCela imprime l'émoticône la plus endormie. Vérifiez tous les cas de test à la fois dans le compilateur Pyth .
Nous remercions @ Sp3000 pour l'idée d'utiliser le tri .
Comment ça marche
la source
hS%2.:z3
?=.-
être plus endormis que-.o
, mais ils sont triés dans l'autre sens. J'avais fait la même erreur.Python 2,
5453 octetsC'est une fonction qui renvoie le visage le plus éveillé.
Un grand merci à xnor pour avoir fourni de nombreuses astuces tactiques pour raccourcir mon algorithme d'origine.
la source
max
plutôt que de le répéter à travers:f=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
=.-.o
, car=.-
vs-.o
est l'exception à la règle de tri.,key=sorted
serait une solution, mais c'est 11 caractères donc le vôtre est probablement plus court.CJam, 12 octets
Cela imprime l'émoticône la plus endormie. Essayez ce violon ou cette suite de tests dans l'interpréteur CJam.
Nous remercions @ Sp3000 pour l'idée d'utiliser le tri .
Comment ça marche
la source
Dyalog APL,
3528 octetsIl s'agit d'une fonction monadique qui prend la chaîne à droite et produit le visage le plus endormi.
la source
{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
??
est également inutile.Prolog,
205189 octetsCode
Explication
Exemple
Edit: 16 octets enregistrés en unifiant les clauses r avec OR.
la source
Clojure, 82 octets
Bonus: la fonction plus petite suivante imprime le même visage, mais avec plus de style!
Testez ici.
la source
Rubis, 59 octets
La fonction renvoie le visage le plus endormi, en utilisant l'astuce de tri.
Appelé comme ça:
Fonctionne sur l'ordre des yeux maladroit en raison du type interne des yeux:
la source
Minkolang 0,12 , 119 octets
Au début, j'ai essayé de faire ce court et vraiment golfique. J'ai abandonné et j'ai opté pour quelque chose d'un peu plus "amusant", mais toujours relativement golfique.
Essayez-le ici!
Explication
Mais vraiment, cliquez sur le lien ci-dessus et cliquez Slow! En tous cas...
Cela saute le
fv
, qui sera important plus tard.Tout ce que cela a été a été de mettre un
^
côté des visages qui correspondaient. Alors maintenant, la boîte à codes pourrait ressembler à ceci:Sans les commentaires, bien sûr. Maintenant, le
40w
trou de ver a envoyé le pointeur d'instruction àv
, qui le redirige immédiatement versF
. Maintenant,F
c'est une commande "gosub". C'est comme un goto, mais vous pouvez retourner là où vous l'appeliez. Au moment oùF
est rencontré, la pile est[3,1]
, donc elle saute au1
(peut-être) sur la deuxième ligne. Alors que le compteur de programme se dirigeait vers le bas, il continue, poussant1
s sur la pile en cours de route. C'est-à-dire ... jusqu'à ce qu'il atteigne un^
, auquel cas il est redirigé vers le haut, où il repousse chacun1
. Le pointeur d'instruction frappe alorsf
, ce qui rétablit sa position et sa direction (lorsqu'il aF
été rencontré précédemment). Pour plus de commodité, je vais prendre le code suivant et changer sa disposition. (Le</\
servir à rediriger le pointeur d'instruction selon les besoins.)Je suis en fait assez fier de la façon dont j'ai utilisé plusieurs fonctionnalités uniques à Minkolang que je n'ai pas souvent utilisées auparavant. Principalement le ternaire et le gosub. Quoi qu'il en soit, vous l'avez!
la source
C, 70 octets
La fonction renvoie le visage le plus éveillé. Il modifie la chaîne d'entrée en place, afin de renvoyer une chaîne terminée par null.
la source
Python 2/3, 54
56octetsJe voulais juste prendre une approche alternative à la réponse récursive de xsot.
Cela prend le meilleur (ou le pire?) Tuple de paires d'yeux adjacents et les joint ensemble.
Remplacez max par min pour retourner le plus endormi (comme c'est le retour le plus éveillé)
Semble fonctionner, en utilisant le test suivant:
Ce qui donne le résultat suivant:
la source
f=
pièce est-elle requise dans le cadre de la taille du code pour ce défi? Si je ne fais pas cela, cela créera le lambda et le jettera immédiatement de nouveau ...f=
alors le consensus actuel semble que les fonctions anonymes sont bien par défaut, donc vous pouvez laisser tomber lef=
dans ce cas ( xsot en a besoin car il est récursif)Brachylog , 10 octets
Essayez-le en ligne!
Traduit de la réponse Pyth de Dennis.
la source
Mathematica, 61 octets
Va pour le plus endormi.
la source
%
lequel elle s'appuie.F # 60
Renvoie la face la plus éveillée (changement
max
parmin
la dors)la source
Perl 5, 127 octets
(Je suis sûr que c'est faisable plus brièvement.) Comment cela fonctionne:
--pos
fait le).la source
ES6,
8172 octetsNécessite probablement Chrome 45 ou Firefox 41.
Merci à @ETHproductions pour avoir économisé 9 octets.
la source
"=.-"
devrait être changé avec"-.o"
; même avec"=.o"
et"o.-"
. En outre, vous pourrez peut-être enregistrer certains octets en mettant tout dans une chaîne, séparés par des virgules et en utilisant.split`,`
.> <> , 55 octets
essayez-le ici!
Sort le visage le plus éveillé.
Étant donné que les valeurs ASCII pour -, = et o augmentent respectivement, je pourrais l'utiliser à mon avantage. Fondamentalement, il ajoute les valeurs de la partie actuelle et précédente de l'œil, vérifiez si c'est une valeur plus élevée qu'auparavant, si c'est le cas, il enregistre la nouvelle valeur et met à jour la face qui représente, puis boucle jusqu'à la fin de l'entrée. Sort ensuite le visage qui reste. (Je suis très content de voir à quel point tout le code s'intègre bien)
la source
Perl 5
-MList::Util=max -p
, 68 octetsEssayez-le en ligne!
Saisit chaque ensemble de trois caractères, ignore le
.
au milieu, mappe l'addition des deux autres à un entier compris entre 0 et 4, concatène celui-ci au recto de la face de l'émoticône, puis trie en fonction de cela. Récupère la dernière entrée (la plus éveillée), supprime le numéro par l'avant et le sort.la source