Учитывая ввод списка дней недели, выведите кратчайшее отсортированное представление списка.
Формат ввода является строка , состоящая из одного или нескольких из подстрок двухсимвольных Su
(воскресенье), Mo
(понедельник), Tu
( и т.д.), We
, Th
,
Fr
, и Sa
. Ввод необязательно может быть дан в отсортированном порядке.
Чтобы преобразовать ввод в выходной формат,
Сортировать ввод по дню недели, начиная с воскресенья (например,
ThMoSaSuFrTuWe
->SuMoTuWeThFrSa
).Сократите сокращения до одной буквы, если это не оставляет двусмысленности . Например,
SuMoTuWe
должно стать,SMTW
потому что первая буква S не может быть субботой, так как это сделает вывод несортированным (то же самое для T). Тем не менее, этоThFrSa
должноThFS
произойти, так как вторник и четверг наступят раньше пятницы, и их снижениеTFS
приведет к двусмысленности.Если вывод сейчас
MTWTF
, выводD
вместо (что означает « день недели s»). Кроме того ,SS
должно статьE
для недельного конца . Наконец,SMTWTFS
должно статьA
на все дни.
Вход и выход должны быть одной строкой.
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Тестовые случаи:
In Out | In Out
-----------------------|--------------------
SuTu STu | SuTuWe STW
SuTuSa STuS | SuWeTh SWT
TuThSa TTS | TuThSu STT
Su Su | Sa Sa
WeTh WT | FrTh ThF
WeTu TW | FrTu TuF
FrWeMo MWF | SaWeSu SWS
ThTu TT | We W
ThTuMoFrWe D | SaSu E
SuMoWeTuThFr SMTWTF | ThMoSaSuFrTuWe A
источник
Ответы:
Сетчатка ,
15288Массовый гольф с помощью @ Martin's и @ randomra! Спасибо вам обоим!
Попробуйте онлайн. Несколько строк начинаются
m`
с этой ссылки онлайн-переводчика. Это так, программа работает с несколькими входными строками (чтобы все тесты выполнялись одним выстрелом). Однако наличие нескольких строк ввода не является обязательным, поэтому они не включены выше или в мой счет.источник
T`l``Su\B|\BSa|.*e.*|uTh|o|r
экономит еще 3 байта.JavaScript (ES7),
187178168157143 байтаТесты регулярных выражений помогли быстро справиться со специальными правилами дня, и хотя объектная карта и не идеальна, она работает. Я уверен, что смогу выжать еще несколько из этого.
источник
Python 3, 321 байт
Тест на идеоне
источник
'Su Mo Tu We Th Fr Sa'.split()
короче['Su','Mo','Tu','We','Th','Fr','Sa']
JavaScript (ES6), 197 байт
объяснение
Кодирует каждый день как бит и сохраняет ввод как число
n
. Бит 0 = воскресенье ... бит 6 = суббота. Это позволяет коду проверки правила неоднозначности быть намного короче из-за побитовых операций и возможности сравнивать всю комбинацию с числом, которое всегда меньше 128.Тестовое задание
Показать фрагмент кода
источник