Определение
Слово доллара - это слово, где, когда каждой из его букв присваивается значение цента от a = 1 до z = 26, и буквы суммируются, результат равен 100. Вот пример CodeReview, а здесь список долларовых слов я нашел в сети.
вход
Ввод будет в алфавитном порядке от az, в текстовых типах данных вашего языка (допустимы массивы). Вам не нужно учитывать любые другие входные данные - не будет пробелов, апострофов или дефисов. Вы можете использовать как строчные, прописные или комбинации. Конечные переводы строки разрешены.
Выход
Выведите истинное значение, если ввод является долларовым словом, и ложное значение, если это не так.
Тестовые случаи
Truthy:
buzzy
boycott
identifies
adiabatically
ttttt
Falsey:
zzz
zzzzzzz
abcdefghiljjjzz
tttt
basic
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах! Стандартные лазейки и правила применяются. Галстук идет к первому постеру.
Ответы:
GS2 , 6 байт
Ввод должен быть в верхнем регистре.
Попробуйте онлайн!
Как это устроено
источник
Python,
3938 байтПопробуйте онлайн!
-1 байт благодаря @JonathanAllan
источник
05AB1E , 8 байтов
Код:
Использует кодировку CP-1252 . Попробуйте онлайн!
Объяснение:
источник
Tn
тоже работает: PÇ4+OTn%0Q
была другая идея, которая у меня была, но она хуже.Perl 6 , 21 байт
Попробуй
Alternate:
Попробуй
Обратите внимание, что
Ⅽ
этоROMAN NUMERAL ONE HUNDRED
U + 216D с унивалом… 100,что для кодирования занимает 3 байта.
Expanded:
источник
MATL , 8 байт
Использует ввод строчных букв.
Попробуйте онлайн!
объяснение
Код читается настолько, насколько это возможно:
источник
JavaScript (ES6), 46 байт
Возвращает
0
или1
.источник
reduce
рекурсию, они оба вышли на 2 байта длиннее.reduce()
в течение первых нескольких минут льготного периода, когда я первоначально разместил его.Haskell , 32 байта
Попробуйте онлайн!
Идея состоит в том, чтобы составить список символов
a
для данного символа для каждого символа в списке и проверить, что общая длина равна 100.Другие попытки:
Жаль,
enumFromTo
это так долго.источник
(100==).length.(enumFromTo 'a' =<<)
- такое чистое использованиеC
4543 байтаСпасибо @Neil за сохранение двух байтов и решение без учета регистра!
Попробуйте онлайн!
источник
n=0
глобально, а затем пропустив первое предложение спецификации цикла, нет? изменить: не берите в голову - я думаю, это будет работать только для самого первого звонка.&31
может помочь сделать ваш код нечувствительным к регистру.n=!n
работает? Я понимаю, что он проверяет,n
равен ли он нулю, потому что на основании некоторого теста я вижу!0
возвраты1
;!15
возвращается0
; и!-15
возвращается0
. Но почему? Какой операнд!
в C при использовании его как!integer
?!
просто логичноnot
. В С0
означаетfalse
, а любое другое целочисленное значение означаетtrue
. Так!0 == 1
и!n == 0
для каждогоn != 0
.0=false; 1=true
, отсюда мое замешательство. Спасибо за ответ.Haskell , 32 байта
Это работает для ввода строчных букв. В верхнем регистре
s/96/64/
. Поддержка смешанного регистра добавит кучу байтов.источник
Mathematica, 23 байта
Чистая функция, принимающая строку (или массив букв) в качестве входных данных, без учета регистра и возвращающая
True
илиFalse
. ЗдесьTr
просто складываются буквенные числа вместе; все остальное самоочевидно.источник
Желе ,
97? * 8 байтПолная программа, выдающая 1, если ввод является долларовым словом, или 0, если нет.
Попробуйте онлайн!
Как?
* Может ли это быть 7 байтов?
Единственная причина, по которой это потребовало ввода,
ɠ
заключалась в том, чтобы сохранить³
в качестве литерала 100, а не 3- й ввод командной строки (1- й ввод программы).Способ избежать этого состоит в том, чтобы, как указал Деннис, создать 100 с использованием необработанной литеральной формы, равной
ȷ2
10 2 . Это приводит к еще одному 8-байтовомуO%32S=ȷ2
, но теперь это неназванная монадическая функция (а также работа как полноценная программа с 3- м аргументом).Поскольку в гольфе можно создавать переменные или вспомогательные функции, которые ограничивают программу, в которой они могут находиться (нельзя повторно использовать имя в области видимости, не останавливая функцию для повторного использования), возможно, ограничение программы только на ввод данных из STDIN может также допустимо, и в этом случае 7-байтовый код
O%32S=³
будет приемлемым здесь как безымянная функция.источник
O%32S=ȷ2
. Работает для ввода прописных и строчных букв.O%32S⁼³
самом деле она не будет действительной записью, поскольку она определяет неназванную, повторно используемую функцию, если остальная часть программы, в которой она находится, не использует аргументы командной строки для ввода?Алиса , 23 байта
Попробуйте онлайн!
Ввод должен быть в нижнем регистре. Печать
1
на долларовые слова и0
прочее.объяснение
Время показать ленту Алисы и продвинутый поток управления. Несмотря на то, что Алиса довольно хорошо умеет работать с целыми числами и строками по отдельности, у нее нет встроенных функций для: а) определения длины строки, б) преобразования между символами и их кодовыми точками. Причина этого заключается в том, что все команды Алисы отображают целые числа в целые числа или строки в строки. Но оба из них потребуют сопоставления строк с целыми числами или наоборот, поэтому они не вписываются ни в один из режимов Алисы.
Однако, помимо стека, у Алисы также есть лента, а режимы Cardinal и Ordinal по-разному интерпретируют данные на ленте.
Эта лента может использоваться для обеих вышеуказанных операций: чтобы получить длину строки, мы записываем ее на ленту в обычном режиме, ищем завершающий -1 в кардинальном режиме и получаем положение головки ленты. Чтобы преобразовать символы в их кодовые точки, мы просто читаем их с ленты в режиме Cardinal.
Две другие важные функции, используемые в этом решении - это стек возвратов и итератор. У Алисы есть стек возвратов, который обычно заполняется при использовании команды прыжка
j
, и с которого вы можете получить адрес для перехода назадk
. Тем не менее, также возможно поместить текущий адрес в стек возврата, не переходя никуда с помощьюw
. Если мы соединимw
с повтора команды&
, мы можем нажать на текущий адрес в стеке возвратов п раз. Теперь каждый раз, когда мы достигаемk
, одна копия извлекается из стека возврата, и мы выполняем другую итерациюw
(начиная с ячейки после нее, потому что IP перемещается до выполнения другой команды). Когда возвращаемый стек становится пустым,k
вообще ничего не делает и IP просто проходит. Следовательно,&w...k
появляется целое число n, а затем выполняется...
n + 1 раз, что дает нам очень краткий способ выразить простойfor
цикл.На сам код ...
источник
R,
5554 байта-1 байт благодаря BLT
возвращает функцию, которая выполняет необходимые вычисления, которая возвращает
TRUE
и,FALSE
как и следовало ожидать.принимает ввод в нижнем регистре; будет только переключение с
letters
наLETTERS
для всех прописныхисточник
function(x)sum(match(el(strsplit(x,"")),letters))==100
сохраняет байт.Рубин, 25 байт
Работает в верхнем регистре.
Я вижу несколько более сложных записей Ruby, но на самом деле все так просто.
s.sum
добавляет ASCII-коды входной строки, и из этого мы вычитаем 64-кратную длину строки.Пример использования
источник
Java 8, 36 байт
Попробуйте онлайн!
Примечание: регистр не зависит.
источник
05AB1E , 9 байтов
Попробуйте онлайн!
объяснение
Поскольку 1 - единственное истинное значение в 05AB1E, мы можем сохранить байт, используя вычитание по сравнению со 100 .
источник
Perl 5 , 30 байт
-1 байт благодаря @Neil (
31&
вместо-96+
).29 байт кода +
-p
флаг.Попробуйте онлайн!
источник
31&ord
вместо этого?-96+
для таких вещей .. Большое спасибо за это! (но теперь я чувствую, что должен вернуться к своим старым сообщениям и заменить каждый-96+
: x){$@+=31&ord for@_;$@==100}
(не проверено)+=
, но в других случаях вы можете тратить экономию на скобках.your one language's text datatypes
. Массивы вряд ли являются текстовым типом данных Perl ... (В противном случае это действительно спасло бы 1 байт)PowerShell ,
3630 байтПопробуйте онлайн!
Входные данные в виде массива, но мне интересно, есть ли лучший способ обработки символов.
РЕДАКТИРОВАТЬ Пропустил легкий пробел, но @AdmBorkBork, пожалуйста, дайте мне знать: P также, на самом деле, был лучший способ обработки символов!
источник
[char]$_-96
, и вам не нужно пространство между-eq
и100
, приводя вас к 33. Вы также можете сделать"$_"[0]
вместо того[char]$_
, чтобы снизить до 32. Попробуйте онлайн!"
вокруг$_
необходимости? Кажется, работает без актерского состава. Может ли это быть из-за того, что вход уже является строковым массивом?"
Не нужно в данном конкретном случае.Алиса ,
2818 байтСпасибо @MartinEnder за 10 байтов в гольфе
Попробуйте онлайн!
В этом представлении используется метод, отличный от ответа @ MartinEnder.
Эта подача выводов
0x00
для ложных и0x01
правдивых.Так вот версия, которая выводит
0
или1
вместо этого: Попробуйте!объяснение
Объяснение ниже для «видимой» версии. Оба очень похожи, за исключением первой программы, последняя
o
не преобразует0
или1
в строку (потому что мы в кардинальном режиме), но вместо этого берет число и выводит символ в этой кодовой точке.После этого IP переходит к левому краю на
=
. Если верхнее значение стека равно0
, IP продолжает свой путь, увеличивая общую сумму всех символов, как только это будет сделано с помощью ввода (вершина стека будет1
), тогда IP поворачивает направо (90 градусов по часовой стрелке).Важно отметить одну вещь: цикл в первой строке будет повторяться один раз после окончания ввода. Это вычтет
97
(96
из'`
и-1
из-за отсутствия ввода) из общей суммы.источник
Такси , 1259 байт
С переносами строк это выглядит так:
Он принимает верхний или нижний регистр, потому что
Auctioneer School
преобразует все это в верхний регистр.Chop Suey
разбивает его на отдельных персонажей.Charboil Grill
преобразует символы в их ASCII-кодМы подбираем один символ за раз, конвертируем его в ASCII, вычитаем 65 и добавляем его к промежуточной сумме.
Как только больше нет символов, сравните общее количество до 100.
Возвращает
TRUE
за долларовые слова иFALSE
за все остальное.источник
Машинный код IA-32, 21 байт
HexDump:
Код сборки:
Считает от 100 до 0. Если прибыл в 0, возвращает true (0xff); в противном случае ложь (0x00).
источник
Дьялог АПЛ,
1715 байтИспользует набор символов Dyalog Classic.
источник
Python , 38 байт
Попробуйте онлайн!
Та же длина, что и у овса . Вместо того, чтобы вычитать 96 из каждого
ord
значения, это проверяет,ord
равна ли сумма100+96*len(s)
. Это выражается на один байт короче4-96*~len(s)
, что равно4-96*(-len(s)-1)
.источник
lambda s:sum(s.encode(),96*~len(s))==4
также будет работать.Рубин ,
3530 байтПопробуйте онлайн!
источник
Сетчатка ,
4723 байтаПопробуйте онлайн! Примечание. Заголовок вводит нижний регистр и разбивает его на слова; результаты появляются в отдельных строках. Изменить: Слишком много байтов сохранено благодаря @MartinEnder.
источник
Октава, 18 байт
Вычитает
96
из входной строкиx
(нижний регистр), чтобы получить числовые значения букв. Беретsum
и сравнивает это с100
. Возвращает логическое1
для истинных случаев и логическое0
для ложных случаев.Я мог бы сохранить один байт, если бы было нормально давать false для «долларовых слов» и true для «недолларовых слов».
источник
Japt ,
13 1210 байтОбъяснение:
Проверьте это онлайн!
12-байт:
Попробуйте онлайн!
Еще одно 12-байтовое решение с использованием другой техники
Попробуйте онлайн!
источник
m%H
вместоm-96
(это будет работать в обоих случаях сейчас, бонус!), И одного на втором сL¥U¬x@;CaX Ä
m%H
была хорошая находка.x@
тоже была отличная идея!Рубин (2.4+), 38 байт
Принимает ввод в нижнем регистре. Требуется Ruby 2.4,
Array#sum
чтобы он не работал на TIO.источник
String#bytes
вместо того,String#chars
чтобы вам не пришлось звонитьc.ord
.sum
на массиве вместоmap
/// ,
564210189185 байтПопробуйте онлайн!
Печатает 1, если это «долларовое слово», в противном случае печатает «0»
Ввод следующий: (Прокрутите полностью вправо)
Работает, заменяя каждую букву ее значением в унарном, затем заменяя унарную 100 на 0. Затем она заменяет любое значение слова на 1. Если значение слова равно 0, то оно будет печатать 1, потому что в конце код, он заменяет 0. Если значение слова является чем-то еще, он просто напечатает это 0.
Гольф работает, используя обычные вхождения в коде в качестве замены.
источник
Утилиты Bash + GNU, 47
Попробуйте онлайн .
источник