Écrivez un programme qui accepte en entrée une émoticône et sort si l'émoticône est heureuse ou triste.
Le programme accepte une chaîne comme entrée ou paramètre et doit afficher la chaîne "happy" si l'entrée est dans la liste d'émoticônes happy, ou "sad" si l'entrée est dans la liste d'émoticônes sad.
Vous pouvez supposer que l'entrée est toujours une émoticône valide (heureuse ou triste), sans espace ni onglets.
Voici une liste d'émoticônes joyeuses séparées par des espaces:
:-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:
Voici une liste d'émoticônes tristes séparées par des espaces:
>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8
C'est le code-golf, donc le programme le plus court l'emporte.
:'D
,:')
(heureux) et:@
(en colère)Réponses:
Python, 86 octets
Je devrais être envoyé en prison.
Le plus court que j'ai pu trouver était équivalent à la réponse CJam de Martin, j'ai donc décidé de cacher tous les emojis tristes (moins le caractère central le cas échéant) à l'inverse de mon code et d'utiliser la
__file__
triche quine de Python .Muahahaha.
la source
c:
8) (8 :] [:
CJam,
3332 octetsMerci à Dennis d'avoir économisé 1 octet.
On dirait qu'il est plus court de faire la même chose sans regex ...
Testez-le ici.
Explication
Cela est basé sur la même observation que la réponse Retina, mais cette fois, faire correspondre les visages heureux n'a aucun avantage, nous allons donc faire correspondre les visages tristes à la place (car il y a une bouche de moins à prendre en compte). La solution est par ailleurs exactement la même, sauf qu'elle n'est pas implémentée via la substitution d'expression régulière:
la source
Rétine ,
3836 octetsNous pouvons reconnaître toutes les émoticônes par leurs bouches, car aucune des bouches n'est utilisée comme un chapeau ou des yeux dans l'autre ensemble (uniquement dans le même ensemble). Les heureux ont une bouche de plus à prendre en compte, mais ils ont l'avantage que les bouches n'apparaissent pas du tout dans l'autre ensemble, pas même en tant que nez (l'inverse n'est pas vrai:
c
est à la fois une bouche triste et heureuse nez). Cela signifie que nous pouvons éviter d'utiliser des ancres, mais au lieu de cela, assurez-vous simplement qu'il y a plus de caractères de l'autre côté de la bouche.Ainsi, les bouches valides pour les visages heureux sont
] ) D 3 > }
à droite ou< [ ( {
à gauche. Nous les associons.+[])D3>}]|[<[({].+
et les remplaçons parhappy
. Si nous ne correspondons pas, il y aura deux ou trois caractères dans la chaîne (l'émoticône), mais si nous le faisons, il y en aura cinq (happy
). Donc, dans un deuxième temps, nous remplaçons deux ou trois caractères parsad
.la source
We can recognise all emoticons by their mouths, because none of the mouths is used as a hat.
Eh bien, l']:<
émoticône utilise une bouche comme un chapeau, juste pour dire..
de "chapeau" dans ma réponse. ;) "... comme un chapeau ou des yeux dans l'autre ensemble (uniquement dans le même ensemble)."JavaScript (ES6), 46
Utiliser une expression rationnelle pour trouver des émoticônes tristes, qui commencent
>)]}
ou finissent par<([{c
. Remarque: d'autres expressions rationnelles ici peuvent être plus courtes, mais je ne suis pas sûr de les comprendre.Remarque habituelle: test de l'exécution de l'extrait sur n'importe quel navigateur compatible EcmaScript 6 (notamment
pas leplus récent Chrome mais pas MSIE. J'ai testé sur Firefox, Safari 9 pourrait aller)Grande nouvelle Il semble que les fonctions fléchées soient enfin arrivées sur Chrome! Rel 45, août 2015
la source
=>
? J'ai raté cette nouvelleJulia,
8769 octets - économisé 18 octets grâce à Alex A.la source
if
/else
et en mettant le ternaire à l'intérieur deprint
pour éviter d'avoir à l'assignert
.Python 3 ,
777574726155 octetsEssayez-le en ligne!
Comment ça marche
Si une chaîne de visage commence par
])>}
ou se termine par[(c<{
, c'est triste, sinon elle est heureuse. L'indexation de tuple est utilisée commeif
.la source
x
n'est pas autorisé.Brachylog , 50 octets
Explication
la source
Python, 159 octets.
la source
MATLAB,
8583 octetsIl doit y avoir un moyen de réduire la taille ici.
L'entrée est une chaîne souriante. Les premier et dernier caractères seront comparés pour déterminer si c'est triste. Sinon, c'est content.
J'ai pu enregistrer 2 octets en n'affichant pas non plus, mais en les affectant à la variable par défaut de MATLAB (ans) à la place, puis en affichant ans après l'instruction if. Mais je suis convaincu que cela peut être amélioré d'une manière ou d'une autre.
Amélioration de 2 octets en changeant la fonction s (e), en e = entrée (''); .
la source
PowerShell, 92 octets
Un peu verbeux, mais en bonus, il n'utilise pas regex!
Cela tire parti de la
<string>.IndexOf()
fonction .NET qui renvoie-1
si le caractère n'est pas trouvé dans la chaîne. Donc, si le premier caractère n'est pas un caractère "heureux", le premierIndexOf()
sera -1 - de même pour le dernier caractère. Donc, si c'est un visage triste, leIndexOf()
s sera toujours égal à -2, ce qui signifie que le-eq-2
est$TRUE
, et sera doncsad
imprimé.Variante bonus: PowerShell avec Regex, 95 octets
la source
Python 3 , 75 octets
Essayez-le en ligne
L'importation regex le rend un peu trop long, ainsi que l'impossibilité de l'utiliser
None
comme index de tableau. Mais j'aime regex :)la source
Java 8, 52 octets
Essayez-le en ligne.
Explication:
Java
String#matches
ajoute implicitement^...$
pour correspondre à l'ensemble de la chaîne, c'est pourquoi il est plus court de rechercher des visages tristes au lieu de rechercher des visages heureux comme le font la plupart des autres réponses.+[\\])D3>}]|[<\\[({].+
(car mon expression régulière échouerait dans la réponse Retina de @MartinEnder par exemple, en raison de le cas de test heureux:c)
).Explication de l'expression régulière:
la source