(Вдохновленный этим постом над Puzzling. ВНИМАНИЕ: СПОЙЛЕРЫ ДЛЯ ЭТОЙ ЗАГАДКИ НИЖЕ.)
Стандартная телефонная клавиатура соотносит буквы с цифрами следующим образом:
1 ->
2 -> ABC
3 -> DEF
4 -> GHI
5 -> JKL
6 -> MNO
7 -> PQRS
8 -> TUV
9 -> WXYZ
0 ->
Заданное входное слово определяется как упорядоченное слово, если при переводе на нажатия клавиш с использованием вышеуказанного результирующее число является либо неубывающим, либо не увеличивающимся. Другими словами, результирующее число не может как увеличиваться , так и уменьшаться.
Например, слово CAT
переводится 228
как «неубывающий» и, следовательно, «упорядоченное слово». Тем не менее, слово DOG
есть 364
, которое увеличивается и уменьшается, и, следовательно, не является Упорядоченным Словом.
Соревнование
Если дано слово, выведите, заказано ли оно или нет.
вход
- Слово (не обязательно словарное слово), состоящее только из букв ASCII (
[A-Z]
или[a-z]
) букв в любом подходящем формате . - Ваш выбор, если ввод вводится только в верхнем или нижнем регистре, но он должен быть согласованным.
- Слово будет длиной не менее 3 символов.
Выход
Последовательное truthy / falsey значение входного слова Упорядоченный ли (truthy) или нет Упорядоченный (falsey).
правила
- Допустимы либо полная программа, либо функция. Если функция, вы можете вернуть вывод, а не распечатать его.
- Если возможно, укажите ссылку на среду онлайн-тестирования, чтобы другие люди могли опробовать ваш код!
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Примеры
Вот несколько Упорядоченных Слов (т. Е. Правдивых), и есть еще несколько связанных головоломок.
CAT
TAC
AAA
DEMONS
SKID
LKJONMSRQP
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Вот некоторые неупорядоченные слова (например, фальси)
DOG
GOD
ROSE
COFFEE
JKLMNOGHI
abc->t9
и этим испытанием является проверка монотонности?abc->t9
.AAA
Ответы:
Python 2 ,
16414813277 байт-16 байт благодаря предложению Рода в другом месте . Чертовски -55 байтов благодаря Арнольду Палмеру.
Попробуйте онлайн!
Ввод должен быть в верхнем регистре. Выходы
True
или вFalse
зависимости от его упорядоченности.объяснение
Первая строка отображает каждую букву в число.
Это работает на основе:
* Значения округлены. :П
Вторая строка выводит, если список чисел находится в порядке возрастания или убывания.
источник
JavaScript (ES6),
83 ... 7170 байтВозвращает логическое значение.
Контрольные примеры
Показать фрагмент кода
Как?
Конвертация писем
Мы используем
parseInt(c, 35)
для преобразования каждой буквы входной строки в некоторое число из [ 10 .. 34 ]. Поскольку это база-35, вместо этого "Z" преобразуется вNaN
.Выражение
* .32 | 0
отображает это число в интервал [ 3 .. 10 ], что приводит к 8 правильным группам букв от «A» до «Y» . Нам нужно|| 10
получить правильное значение для «Z» .Заказать тест
Мы отслеживаем признаки различий между последовательными числами в битовой маске v , изначально установленной в 3 (0b11):
Предыдущее значение сохраняется в той же переменной x, что и входные данные. Это гарантирует, что первая итерация - где на самом деле не существует предыдущего значения - не очистит ни одного бита, потому что строка, содержащая только буквы, не больше и не меньше любого числа:
Слово упорядочено, если не встречаются оба знака, что приводит к v = 0 и делает
every()
сбой.источник
Желе ,
28, 27, 25, 23, 22, 21, 19,18 байтовПопробуйте онлайн!
Это было очень весело писать!
Объяснение:
Спасибо @ErikTheOutgolfer, @leakynun и @BusinessCat за все сохраненные байты. :)
источник
05AB1E , 36 байт
Попробуйте онлайн!
источник
.•1нJ©½è`ÇHø¹á₂N¸°…ÈáÀ•#
наA•22ā₂•S£
.MATL ,
2625 байтВвод прописными буквами. Вывод
1
или0
.Попробуйте онлайн!
объяснение
источник
Шелуха ,
22 21 1918 байтВозвращает
1
для правдивых входов,0
для ложных. Входы должны быть в верхнем регистре. Проходит все тестовые случаи. Попробуйте онлайн!объяснение
источник
Python 2 , 60 байт
Попробуйте онлайн!
Принимает ввод в нижнем регистре.
Как это работает
813681 / x ⌋ уменьшается от
a
;c
иd
;f
иg
;i
иj
;l
иm
;o
иp
;s
иt
;v
иw
;z
.источник
С ++,
375199195194 байтаБлагодаря ответу Shaggy на JavaScript:
-5 байт благодаря Zacharý
источник
int j=1,i=0,d=0
цикл for?i
иd
используются за пределами блока цикла, я не могуi==0||d==0
==>i*d==0
.!(i*d)
работать? (удаляя пробел послеreturn
)05AB1E , 30 байтов
Попробуйте онлайн!
-1 благодаря волшебной урне осьминога .
источник
¥0K0.SË
потому что¥0‹Ë
не правильно? Я не могу сказать, если0.S
это необходимо.¥0K0‹Ë
кажется, работает.Сетчатка , 65 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Измените первую букву на каждой клавише на цифру. (Это значение равно 1, но это не имеет значения для проверки по возрастанию / убыванию. С другой стороны, нули усложняют мою жизнь, поэтому я оставил один заполняющий символ.)
Перемешайте все оставшиеся буквы до 1 и повторяйте, пока они не будут преобразованы в цифры.
Преобразуйте цифры в одинарные, но только один раз за цикл идентичных цифр. Унарные значения разделены
<
...... но если LHS окажется больше, чем RHS, исправьте
<
значение>
.Удалить те,
1
которые больше не нужны.Проверьте, что слово упорядочено. (Трейлинг
>
идет от последней цифры, которая всегда сравнивается больше, чем пустой пробел после нее.)источник
Pyth , 23 байта
Один из моих первых нетривиальных ответов Pyth! Сохранено 6 байт благодаря @LeakyNun. Начальное решение ниже.
Тестирование.
Pyth , 29 байт
Тестирование.
объяснение
источник
05AB1E ,
2117 байтКод
Использует кодировку 05AB1E .
Попробуйте онлайн!или проверьте все контрольные примеры!
объяснение
Теперь это по существу отображает следующие буквы на следующие цифры:
источник
JavaScript (ES6),
1079795928885 байтРаботает со смешанными строками. Возвращается
1
за правду или0
за фальси.Попытайся
источник
Math.min((parseInt(c,36)-3)/3.13|0,9)
вместо этого,"2..9"[parseInt(c,36)-10]
чтобы сохранить несколько байтовAAA
.Gaia ,
29272517 байтПопробуйте онлайн!
объяснение
источник
05AB1E , 13 байтов
Всякий раз, когда я вижу вопрос с цифровой клавиатурой, я должен ответить на основе числа пи.
Попробуйте онлайн или проверьте все тесты
источник
Желе , 32 байта
Попробуйте онлайн!
источник
32222323
поэтому он экономит всего 2 байта.C # (.NET Core) , 133 байта
Попробуйте онлайн!
Я чувствую, что есть место для сохранения, но C # не является кратким языком, так что, возможно, нет. Ungolfed:
В частности, я думаю, что есть более короткий способ выразить окончательную проверку на достоверность, возможно, способ встроить его в
Zip
. Найти способ выразитьZip
не требуя временного хранилища дляSkip
, также сохранит что-то, но я сомневаюсь, что есть что-то более лаконичное для этого.источник
Питон 3 ,
143147148149,130 байт.Лучшее, что я могу сделать сейчас. Необработанная функция превращает букву в число, основанное на коде ASCII. Определенно есть некоторые улучшения, которые нужно сделать. 0 - правда, 1 - ложь (извините). Сэкономили 10 байтов благодаря Роду, еще 3 благодаря мистеру Xcoder.
Попробуйте онлайн!
источник
x=[f(a)-f(b)for a,b in zip(s,s[1:])]
чтобы сохранить некоторые байтыmin(int((ord(c)-58)/3.13),9)
это более короткий способ преобразования символаPython 2 ,
111103 байта-8 байт благодаря @ Арнольду Палмеру: не
lower()
нужноПопробуйте онлайн!
источник
.lower()
так как ввод может быть в любом случае, который вы укажете.PHP 7,
98 + 1 95 + 184 + 1 байтгольф-порт Арнаулда .
принимает заглавные буквы; пустой вывод для фальши,
1
для правды.Запустите как трубу с
-nR
или попробуйте онлайн .оригинальный пост:
источник
CJam,
37313027 байтовПопробуйте онлайн
Конечно, уродливая версия оказывается короче ...
источник
C (gcc) ,
183 169 153117 байтПопробуйте онлайн!
Старое решение:
Сохранено 8 байт благодаря ThePirateBay.
Старое старое решение:
Старое старое старое решение:
источник
TI-Basic,
9266 байтПреобразует каждый символ в строке в целое число от 0 до 7 и принимает разницу между каждым последовательным элементом; затем проверяет, имеют ли минимальные и максимальные различия одинаковый знак (или 0).
источник
ΔList(int(4^-1seq(inString("DEF GHI JKL MNO PQRSTUV WXYZ",sub(Ans,I,1))+3,I,1,length(Ans
сохраняет один байт.Зш ,
73 6957 байт-12 байт с помощью
3681/code
преобразования @ anders-kaseorg .Попробуйте онлайн! Попробуйте онлайн!Попробуйте онлайн!Несколько вещей, которыми мы злоупотребляем:
((statement,statement,...))
является последовательностью арифметических выражений, которая возвращает истину, если последнее утверждение не равно нулю.только одна паране были использованы скобки. Один байт может быть сохранен, если!
связан менее плотно, чем&
.0
арифметических расширений.Функция, которую мы используем для сопоставления с номером клавиатуры,поскольку нам нужно только переключение между кодами, мы не делаем линейную настройку.CODE / 3.2 - 18
(с особым случаем дляZ
), но2 байта могут быть сохранены, если значения truey / falsey можно поменять местами.
источник