Напишите программу или функцию, которая принимает строку символов, -=o.
где символы -=o
's .
' и 's' всегда чередуются, символ за символом. Строка будет иметь нечетную длину больше единицы и всегда начинаться и заканчиваться одним из -=o
.
По сути, ввод будет выглядеть как линия смайликов, которые разделяют глаза в различных состояниях сонливости, например
o.=.=.-.-.o.o
Ваша цель - напечатать или вернуть лицо, которое является либо самым сонным, либо самым бодрствующим (вы сами выбираете). Если есть несколько вариантов для тех, кто спит / наиболее бодрствует, то может быть выведен любой из них.
Есть девять отдельных лиц и пять уровней сонливости:
-.- 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
В случае , если это не ясно, процент сонливости вычисляется путем присвоения 1
в -
течение полностью спит, 0.5
чтобы =
за полусне, и 0
в o
течение бодрствования. Тогда сумма двух значений глаз, деленная на два, представляет собой процент.
Самый короткий код в байтах побеждает.
Тестовые случаи
Sleepiest
-.- 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 =.-
Most Awake
-.- 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
-.-
Ответы:
Pyth,
1210 байтЭто печатает самый сонный смайлик. Проверьте все контрольные примеры сразу в компиляторе Pyth .
Кредит идет к @ Sp3000 за идею использовать сортировку .
Как это работает
источник
hS%2.:z3
?=.-
быть более сонными-.o
, но они отсортированы в другую сторону. Я сделал ту же ошибку.Python 2,
5453 байтаЭто функция, которая возвращает лицо, которое наиболее проснулся.
Большое спасибо xnor за то, что он предоставил много тактических приемов, чтобы сократить мой оригинальный алгоритм.
источник
max
а не повторять это:f=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
=.-.o
, так как=.-
vs-.o
является исключением из правила сортировки.,key=sorted
что это было бы решением, но это 11 символов, поэтому ваш, вероятно, короче.CJam, 12 байтов
Это печатает самый сонный смайлик. Попробуйте эту скрипку или этот набор тестов в интерпретаторе CJam.
Кредит идет к @ Sp3000 за идею использовать сортировку .
Как это работает
источник
Дьялог АПЛ,
3528 байтЭто монадическая функция, которая берет строку справа и выводит самое сонное лицо.
источник
{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
??
тоже не нужно.Пролог,
205189 байтКод
объяснение
пример
Изменить: 16 байтов сохранены путем объединения r-предложений с ИЛИ.
источник
Clojure, 82 байта
Бонус: следующая меньшая функция печатает то же лицо, но с большим стилем!
Проверьте здесь.
источник
Рубин, 59 байт
Функция возвращает самое сонное лицо, используя трюк сортировки.
Вызывается так:
Работает на неловкий порядок глаз из-за внутреннего вида глаз:
источник
Минколанг 0,12 , 119 байт
Сначала я попытался сделать это коротким и действительно гольфом. Я сдался и пошел на что-то более «веселое», но все же относительно гольф.
Попробуй это здесь!
объяснение
Но на самом деле, нажмите на ссылку выше и нажмите Slow! Так или иначе...
Это пропускает
fv
, что будет важно позже.Все, что он сделал, это поставил
^
рядом с лицами, которые соответствовали. Так что теперь кодовое поле может выглядеть так:Без комментариев, конечно. Теперь
40w
червоточина отправила указатель инструкцииv
, который немедленно перенаправляет ее наF
. ТеперьF
это команда "gosub". Это как гото, но вы можете вернуться туда, где вы его назвали. В то время, когдаF
встречается, стек есть[3,1]
, поэтому он переходит к1
(возможно) во второй строке. Когда счетчик программ движется вниз, он продолжает работу, вставляя1
s в стек по пути. То есть ... до тех пор, пока он не коснется a^
, в этот момент он перенаправляется обратно вверх, где он1
снова толкает каждого . Указатель инструкций затем нажимаетf
, что восстанавливает его положение и направление (когдаF
встречалось ранее). Для удобства я возьму следующий код и поменяю его раскладку. (The</\
служат для перенаправления указателя инструкций по мере необходимости.)Я на самом деле горжусь тем, как я использовал несколько уникальных для Минколанга функций, которыми раньше не пользовался. В основном троичный и госуб. Во всяком случае, у вас есть это!
источник
C 70 байт
Функция возвращает самое проснувшееся лицо. Он изменяет входную строку на месте, чтобы вернуть строку с нулевым символом в конце.
источник
Python 2/3, 54
56байтПросто хотел взять альтернативный вариант рекурсивного ответа xsot.
Это берет лучший (или худший?) Кортеж соседних пар глаз и соединяет их вместе.
Замените max на min, чтобы вернуть наиболее сонного (так как это возвращает наиболее бодрствующий)
Кажется, работает, используя следующий тест:
Что дает следующий результат:
источник
f=
Требуется ли часть как часть размера кода для этой задачи? Если я не сделаю этого, он создаст лямбду, а затем сразу же выбросит ее снова ...f=
то текущий консенсус , кажется, что анонимные функции в порядке по умолчанию, так что вы можете опускатьf=
в этом случае ( xsot нуждается в этом, так как он рекурсивный)Брахилог , 10 байт
Попробуйте онлайн!
Перевод Дениса Пита с ответа.
источник
Mathematica, 61 байт
Идет к самому сонному.
источник
%
переменной, на которую она опирается.F # 60
Возвращает наиболее просыпается лицо (изменение
max
отmin
за спящий)источник
Perl 5, 127 байт
(Я уверен, что это можно сделать более кратко.) Как это работает:
--pos
делает).источник
ES6,
8172 байтаВероятно, требуется Chrome 45 или Firefox 41.
Спасибо @ETHproductions за сохранение 9 байтов.
источник
"=.-"
следует переключаться с"-.o"
; то же самое с"=.o"
и"o.-"
. Кроме того, вы можете сохранить несколько байтов, поместив все в одну строку, разделив их запятыми, и используя.split`,`
.> <> , 55 байт
попробуйте это здесь!
Выходы самого бодрствующего лица.
Поскольку значения ASCII для -, = и o увеличиваются соответственно, я мог бы использовать это в своих интересах. В основном это добавляет значения текущей и предыдущей части глаза, проверяет, является ли это более высоким значением, чем прежде, если это - оно сохраняет новое значение и обновляет то, что представляет лицо, а затем зацикливается до конца ввода. Затем выводит лицо, которое осталось. (Я очень рад тому, как хорошо все код помещается на место)
источник
Perl 5
-MList::Util=max -p
, 68 байтПопробуйте онлайн!
Захватывает каждый набор из трех символов, игнорирует
.
в середине, отображает сложение двух других в целое число в диапазоне 0-4, объединяет это с передней частью лица смайлика, а затем сортирует по этому. Захватывает последнюю запись (наиболее активную), удаляет номер спереди и выводит его.источник