Напишите программу, которая принимает в качестве входных данных смайлик и выводит их, если смайлик счастлив или печален.
Программа принимает строку в качестве ввода или параметра и должна отображать строку «счастливый», если вход находится в списке счастливых смайликов, или «грустный», если вход находится в списке печальных смайликов.
Вы можете предположить, что ввод всегда является действительным (счастливым или печальным) смайликом, без пробелов и табуляции.
Вот список разделенных пробелами счастливых смайликов:
:-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^:
Вот разделенный пробелами список грустных смайликов:
>:[ :-( :( :-c :c :-< :< :-[ :[ :{ 8( 8-( ]:< )-: ): >-: >: ]-: ]: }: )8 )-8
Это код-гольф, поэтому выигрывает самая короткая программа.
:'D
,:')
(счастливый) и:@
(сердито)Ответы:
Python, 86 байт
Я должен быть отправлен в тюрьму.
Самое короткое, что я мог придумать, было эквивалентно ответу Мартина CJam, поэтому я решил спрятать все грустные смайлики (за исключением среднего символа, если таковые имеются) в обратной части моего кода и использовать
__file__
чит- код Python .Muahahaha.
источник
c:
8) (8 :] [:
CJam,
3332 байтаСпасибо Деннису за сохранение 1 байта.
Похоже, короче сделать то же самое без регулярных выражений ...
Проверьте это здесь.
объяснение
Это основано на том же наблюдении, что и ответ Retina, но на этот раз сопоставление счастливых лиц не приносит никакой пользы, поэтому вместо этого мы сопоставим грустные лица (потому что нужно учесть на один рот меньше). В остальном решение точно такое же, за исключением того, что оно не реализовано с помощью подстановки регулярных выражений:
источник
Retina ,
3836 байтМы можем распознать все смайлики по рту, потому что ни один из ртов не используется в качестве шляпы или глаз в другом наборе (только в одном наборе). У счастливых есть еще один рот, который нужно принять во внимание, но у них есть то преимущество, что они вообще не появляются в другом наборе, даже в виде носов (обратное неверно:
c
это и грустный рот, и счастливый нос). Это означает, что мы можем избегать использования якорей, а просто гарантировать, что на другой стороне рта будет больше символов.Таким образом, правильные рты для счастливых лиц находятся
] ) D 3 > }
справа или< [ ( {
слева. Мы сопоставляем их с.+[])D3>}]|[<[({].+
и заменяем ихhappy
. Если мы не соответствуем, в строке будет два или три символа (смайлик), но если мы это сделаем, будет пять (happy
). Таким образом, на втором шаге мы заменяем два или три символа наsad
.источник
We can recognise all emoticons by their mouths, because none of the mouths is used as a hat.
Ну,]:<
смайлик использует рот как шляпу, просто говоря..
в моем ответе нет слова "шляпа". ;) "... как шляпа или глаза в другом наборе (только в том же наборе)."JavaScript (ES6), 46
Использование регулярного выражения для поиска печальных смайликов, начинающихся с
>)]}
или заканчивающихся на<([{c
. Примечание: другие регулярные выражения здесь могут быть короче, но я не уверен, что понимаю их.Обычное примечание: тестирование запуска сниппета в любом браузере, совместимом с EcmaScript 6 (особенно
не вChrome, но не в MSIE. Я тестировал на Firefox, Safari 9 мог пойти)Большие новости Кажется, функции стрелок наконец-то прибыли в Chrome Land! Rel 45, август 2015
источник
=>
? Я пропустил эту новостьЮлия,
8769 байтов - спасла 18 байтов благодаря Алексу А.источник
if
/else
и поместив троичный внутри,print
чтобы избежать необходимости назначатьt
.Python 3 ,
777574726155 байтПопробуйте онлайн!
Как это работает
Если лицевая нить начинается с
])>}
или заканчивается[(c<{
, это грустно, в противном случае она счастлива. Индексирование кортежей используется какif
.источник
x
не допускается.Брахилог , 50 байт
объяснение
источник
Python, 159 байт.
источник
MATLAB,
8583 байтаЗдесь должен быть способ уменьшить размер.
Ввод - смайлик. Первый и последний символы будут сравниваться, чтобы определить, грустно ли это. Если нет, то счастлив.
Я смог сохранить 2 байта, не отображая ни того, ни другого, а назначив их переменной по умолчанию (ans) MATLAB, а затем отобразив ans после оператора if. Но я убежден, что это можно как-то улучшить.
Улучшение на 2 байта путем изменения функции s (e) на e = input (''); ,
источник
PowerShell, 92 байта
Немного многословно, но в качестве бонуса оно не использует регулярные выражения!
Это использует
<string>.IndexOf()
функцию .NET, которая возвращает,-1
если символ не найден в строке. Таким образом, если первый символ не является «счастливым», первыйIndexOf()
будет -1 - аналогично последнему символу. Так что , если это печальное лицо, тоIndexOf()
ей будет всегда подводить -2, то есть-eq-2
это$TRUE
, и , таким образом , должна бытьsad
распечатана.Бонусный вариант: PowerShell с Regex, 95 байт
источник
Python 3 , 75 байт
Попробуйте онлайн
Импорт регулярных выражений делает его слишком длинным, а также невозможностью использования
None
в качестве индекса массива. Но я люблю регулярные выражения :)источник
Java 8, 52 байта
Попробуйте онлайн.
Объяснение:
Java
String#matches
неявно добавляет,^...$
чтобы соответствовать всей строке, поэтому короче проверять наличие печальных лиц, а не проверять счастливые лица, как это делают большинство других ответов.+[\\])D3>}]|[<\\[({].+
(потому что мое регулярное выражение не сработало в ответе Retina @MartinEnder, например, из-за счастливый тестовый кейс:c)
).Regex объяснение:
источник