Escriba un programa que acepte como entrada un emoticón y salga si el emoticón es feliz o triste.
El programa acepta una cadena como entrada o parámetro, y debe mostrar la cadena "feliz" si la entrada está en la lista de emoticones felices, o "triste" si la entrada está en la lista de emoticones triste.
Puede suponer que la entrada siempre es un emoticón válido (feliz o triste), sin espacios ni pestañas.
Aquí hay una lista de emoticones felices separados por espacios:
:-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:
Aquí hay una lista de emoticones tristes separados por espacios:
>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8
Este es el código de golf, por lo que gana el programa más corto.
:'D
,:')
(feliz) y:@
(enojado)Respuestas:
Python, 86 bytes
Debería ser enviado a prisión.
Lo más corto que pude encontrar fue equivalente a la respuesta CJam de Martin, así que decidí esconder todos los emojis tristes (menos el carácter del medio, si los hubiera) en el reverso de mi código y usar el
__file__
truco de Python .Muahahaha
fuente
c:
8) (8 :] [:
CJam,
3332 bytesGracias a Dennis por guardar 1 byte.
Parece que es más corto hacer lo mismo sin una expresión regular ...
Pruébalo aquí.
Explicación
Esto se basa en la misma observación que la respuesta de Retina, pero esta vez emparejar caras felices no tiene ningún beneficio, por lo que combinaremos caras tristes (porque hay una boca menos para tener en cuenta). La solución es exactamente la misma, excepto que no se implementa a través de la sustitución de expresiones regulares:
fuente
Retina ,
3836 bytesPodemos reconocer todos los emoticones por sus bocas, porque ninguna de las bocas se usa como sombrero u ojos en el otro conjunto (solo en el mismo conjunto). Los felices tienen una boca más para tener en cuenta, pero tienen el beneficio de que las bocas no aparecen en el otro conjunto, ni siquiera como narices (lo contrario no es cierto:
c
es tanto una boca triste como una feliz nariz). Esto significa que podemos evitar el uso de anclas, sino asegurarnos de que haya más caracteres al otro lado de la boca.Entonces las bocas válidas para caras felices están
] ) D 3 > }
a la derecha o< [ ( {
a la izquierda. Emparejamos aquellos con.+[])D3>}]|[<[({].+
y los reemplazamos conhappy
. Si no coincidimos, habrá dos o tres caracteres en la cadena (el emoticón), pero si lo hiciéramos, habrá cinco (happy
). Entonces, en un segundo paso, reemplazamos dos o tres caracteres consad
.fuente
We can recognise all emoticons by their mouths, because none of the mouths is used as a hat.
Bueno, el]:<
emoticón usa una boca como sombrero, solo diciendo..
después de "sombrero" en mi respuesta. ;) "... como un sombrero u ojos en el otro conjunto (solo en el mismo conjunto)".JavaScript (ES6), 46
Usar una expresión regular para encontrar emoticones tristes, que son los que comienzan
>)]}
o terminan con<([{c
. Nota al margen: otras expresiones regulares aquí pueden ser más cortas, pero no estoy seguro de entenderlas.Nota habitual: prueba ejecutando el fragmento en cualquier navegador compatible con EcmaScript 6 (notablemente
no es elChrome más nuevo pero no MSIE. Probé en Firefox, Safari 9 podría funcionar)Grandes noticias Parece que las funciones de flecha finalmente llegaron a Chrome. Rel 45, agosto de 2015
fuente
=>
? Me perdí esa noticiaJulia,
8769 bytes - ahorró 18 bytes gracias a Alex A.fuente
if
/else
y colocando el ternario dentroprint
para evitar tener que asignart
.Python 3 ,
777574726155 bytesPruébalo en línea!
Como funciona
Si una cadena de la cara comienza
])>}
o termina con[(c<{
, es triste, de lo contrario es feliz. La indexación de tuplas se usa comoif
.fuente
x
no está permitido.Brachylog , 50 bytes
Explicación
fuente
Python, 159 bytes.
fuente
MATLAB
8583 bytesDebe haber una manera de reducir el tamaño aquí.
La entrada es una cadena sonriente. El primer y el último personaje se compararán para determinar si es triste. Si no, es feliz.
Pude guardar 2 bytes al no mostrarlos, sino asignarlos a la variable predeterminada (ans) de MATLAB y luego mostrar ans después de la instrucción if. Pero estoy convencido de que se puede mejorar de alguna manera.
Mejora de 2 bytes cambiando la función s (e), a e = input (''); .
fuente
PowerShell, 92 bytes
Un poco prolijo, pero como beneficio adicional, ¡no usa expresiones regulares!
Esto aprovecha la
<string>.IndexOf()
función .NET que regresa-1
si el carácter no se encuentra en la cadena. Entonces, si el primer personaje no es un personaje "feliz", el primeroIndexOf()
será -1, del mismo modo para el último personaje. Entonces, si es una cara triste, laIndexOf()
s siempre sumará a -2, lo que significa que-eq-2
es$TRUE
, y asísad
se imprime.Variante de bonificación: PowerShell con Regex, 95 bytes
fuente
Python 3 , 75 bytes
Pruébalo en línea
La importación de expresiones regulares hace que sea demasiado larga, así como la imposibilidad de usarla
None
como índice de matriz. Pero me gusta la expresión regular :)fuente
Java 8, 52 bytes
Pruébalo en línea.
Explicación:
Java se
String#matches
agrega implícitamente^...$
para que coincida con la cadena completa, por lo que es más corto buscar caras tristes en lugar de buscar caras felices como lo hacen la mayoría de las otras respuestas.+[\\])D3>}]|[<\\[({].+
(porque mi expresión regular fallaría en la respuesta Retina de @MartinEnder , por ejemplo, debido a El caso de prueba feliz:c)
).Explicación de expresiones regulares:
fuente