Escreva um programa que aceite como entrada um emoticon e saia se o emoticon estiver feliz ou triste.
O programa aceita uma sequência como entrada ou parâmetro e deve exibir a sequência "feliz" se a entrada estiver na lista de emoticons felizes ou "triste" se a entrada estiver na lista de emoticons tristes.
Você pode assumir que a entrada é sempre um emoticon válido (feliz ou triste), sem espaço ou guias ao redor.
Aqui está uma lista separada por espaços de emoticons felizes:
:-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:
Aqui está uma lista separada por espaços de emoticons tristes:
>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8
Isso é código-golfe, então o programa mais curto vence.
:'D
,:')
(feliz) e:@
(irritado)Respostas:
Python, 86 bytes
Eu deveria ser enviado para a prisão.
O menor tempo que consegui pensar foi equivalente à resposta de Martin no CJam, então decidi esconder todos os emojis tristes (menos o caractere do meio, se houver) no verso do meu código e usar o
__file__
truque do Python .Muahahaha.
fonte
c:
8) (8 :] [:
CJam,
3332 bytesAgradecemos a Dennis por economizar 1 byte.
Parece que é mais curto fazer a mesma coisa sem um regex ...
Teste aqui.
Explicação
Isso se baseia na mesma observação que a resposta da Retina, mas desta vez combinar rostos felizes não tem nenhum benefício, então, em vez disso, combinaremos rostos tristes (porque há menos uma boca para levar em consideração). Caso contrário, a solução é exatamente a mesma, exceto que ela não é implementada via substituição de regex:
fonte
Retina ,
3836 bytesPodemos reconhecer todos os emoticons pelas bocas, porque nenhuma das bocas é usada como chapéu ou olhos no outro conjunto (apenas no mesmo conjunto). Os felizes têm mais uma boca para levar em consideração, mas têm o benefício de que as bocas não aparecem no outro conjunto, nem mesmo como nariz (o contrário não é verdadeiro:
c
é uma boca triste e uma feliz). nariz). Isso significa que podemos evitar o uso de âncoras, mas apenas garantir que haja mais caracteres do outro lado da boca.Portanto, as bocas válidas para rostos felizes estão
] ) D 3 > }
à direita ou< [ ( {
à esquerda. Nós os combinamos com.+[])D3>}]|[<[({].+
e substituí-los porhappy
. Se não correspondermos, haverá dois ou três caracteres na sequência (o emoticon), mas se o fizermos, haverá cinco (happy
). Então, em um segundo passo, substituímos dois ou três caracteres porsad
.fonte
We can recognise all emoticons by their mouths, because none of the mouths is used as a hat.
Bem, o]:<
emoticon usa a boca como um chapéu, apenas dizendo..
"chapéu" na minha resposta. ;) "... como um chapéu ou olhos no outro conjunto (apenas no mesmo conjunto)."JavaScript (ES6), 46
Usando um regexp para encontrar emoticons tristes, que são aqueles que começam com
>)]}
ou terminam em<([{c
. Nota lateral: outros regexps aqui podem ser mais curtos, mas não tenho certeza de entendê-los.Nota habitual: teste a execução do snippet em qualquer navegador compatível com EcmaScript 6 (principalmente
noChrome mais novo, mas não no MSIE. Testei no Firefox, o Safari 9 pode ser usado)Grandes notícias Parece que as funções de seta finalmente chegaram ao Chrome! Rel 45, agosto 2015
fonte
=>
? Eu perdi essa notíciaJulia,
8769 bytes - economizou 18 bytes graças a Alex A.fonte
if
/else
e colocando o ternário dentro deleprint
para evitar a atribuiçãot
.Python 3 ,
777574726155 bytesExperimente online!
Como funciona
Se uma sequência de rosto começa
])>}
ou termina com[(c<{
, é triste, caso contrário, é feliz. A indexação de tupla é usada comoif
.fonte
x
não é permitido.Braquilog , 50 bytes
Explicação
fonte
Python, 159 bytes.
fonte
MATLAB,
8583 bytesDeve haver uma maneira de reduzir o tamanho aqui.
Entrada é uma seqüência de caracteres sorridente. O primeiro e o último caracteres serão comparados para determinar se é triste. Se não, é feliz.
Consegui salvar 2 bytes também não exibindo, mas atribuindo-os à variável padrão (ans) do MATLAB e exibindo ans após a instrução if. Mas estou convencido de que isso pode ser melhorado de alguma forma.
Melhoria de 2 bytes alterando a função s (e), para e = input (''); .
fonte
PowerShell, 92 bytes
Um pouco prolixo, mas como um bônus, ele não usa regex!
Isso tira proveito da
<string>.IndexOf()
função .NET que retorna-1
se o caractere não for encontrado na string. Portanto, se o primeiro caractere não for "feliz", o primeiroIndexOf()
será -1 - da mesma forma que o último. Portanto, se for um rosto triste, osIndexOf()
s sempre somarão -2, significando o-eq-2
é$TRUE
e, portanto , serãosad
impressos.Variante de bônus: PowerShell com Regex, 95 bytes
fonte
Python 3 , 75 bytes
Experimente online
A importação de regex o torna um pouco demorada, além da incapacidade de usá-lo
None
como um índice de matriz. Mas eu gosto de regex :)fonte
Java 8, 52 bytes
Experimente online.
Explicação:
O Java é
String#matches
incluído implicitamente^...$
para corresponder à String inteira, e é por isso que é mais curto procurar rostos tristes em vez de procurar rostos felizes como a maioria das outras respostas.+[\\])D3>}]|[<\\[({].+
(porque meu regex falharia na resposta Retina de @MartinEnder , por exemplo, devido a o caso de teste feliz:c)
).Explicação Regex:
fonte