Примечание: в этом вопросе есть несколько грубых слов.
В этом классическом наброске Monty Python есть неявная головоломка (вы также можете подготовить сценарий онлайн).
Различные фразы описаны как «древесные» или «жестяные», а одна - как «ПВХ».
Для данной фразы ответьте ее типом в соответствии со следующими списками:
woody
:
gone
sausage
seemly
prodding
vacuum
bound
vole
caribou
intercourse
pert
thighs
botty
erogenous zone
ocelot
wasp
yowling
tinny
:
litter bin
newspaper
antelope
recidivist
tit
simpkins
PVC
:
leap
правила
- Если входные данные принадлежат одному из перечисленных выше списков, выходные данные должны быть
woody
,tinny
илиPVC
, соответственно. - Все входные данные строчные.
- Любое поведение приемлемо для фраз, которые не перечислены выше.
- Наименьшее количество байтов в ответе выигрывает.
code-golf
string
classification
AJFaraday
источник
источник
You may choose how to deal (or ignore) with casing in input and output.
Чтобы уточнить, означает ли это, что мы можем ожидать ввода в верхнем регистре?Ответы:
Stax ,
3025 байтЗапустите и отладьте его
Комментируемое представление ascii таково. Я не изобрел этот алгоритм. Это бесстыдно сорвало решение Питона Джонатана Аллена .
Запустите этот
источник
can help you
немного запутанно, но логично.Python 2 ,
9973656463 байтаПопробуйте онлайн!
Альтернативы также с 63 байтами:
источник
Python 2 , 62 байта
Попробуйте онлайн!
Как?
В этом представлении используется тот факт, что
hash
функция стабильна для строк в Python 2. Каждый допустимый ввод имеет действительный вывод. Грубое повторение по модулю%97%78%28%15%2
возвращается1
для всех жестяных и ПВХ- слов, а также0
для древесных слов. Добавляя значение('ea' in n)
к нему, мы получаем2
вместо1
ввода «скачок». Вот таблица всех значений:Возвращаемый тип теперь извлекается из строки
'wtPoiVonCdn yy'
, беря каждый третий символ, начиная с вычисленного индекса.источник
JavaScript (ES6), Chrome / Edge, 54 байта
Поскольку поведение
parseInt()
больших входов с основанием 36 зависит от реализации , этот не работает с SpiderMonkey (Firefox).Попробуйте онлайн!
Как?
Хэш-функция возвращает 3 для слов Тинни, 1 для ПВХ и 0 , 4 , 5 или 6 для слов Вуди. Слова, помеченные звездочкой, неявно усекаются, поскольку parseInt () считает пробел недопустимым символом .
Предыдущая версия,
5957 байтПопробуйте онлайн!
Как?
Ниже приведены различные шаги функции для каждого входа. Результат первого по модулю является приближением в пределах точности чисел JS и математически недействителен для общения .
источник
Сетчатка ,
393836 байтСохранено 1 байт с использованием трех пар замещения, как в ответе Адама.
Попробуйте онлайн!
Я получил
.p.|is*t
регулярное выражение от гольфиста Питера Норвига .источник
Java 8,
818067 байтRegex из ответа Retina @MatrinEnder .
Попробуйте онлайн.
Оригинальный ответ:
8180 байтПопробуйте онлайн.
Объяснение:
Дополнительное объяснение:
woody
слов не присутствует в этой строке выше, ниle
отleap
.woody
слов не имеет вa
качестве третьей буквы, так что используется , чтобы получитьleap
к ,PVC
если это неtinny
слово.woody
списка.источник
Haskell , 61 байт
Попробуйте онлайн!
Использует эту ручную логику:
i
или первой буквойr
,a
илиn
являютсяtinny
l
(leap
)PVC
woody
Линн сохранила байт, проверив
leap
его по первой букве.источник
"leap"
с помощью|a=='l'="PVC"
.QuadS ,
3432 байтаБесстыдно использует систему Мартина Эндера , в том числе регулярное выражение от регулярного игрока в гольф Питера Норвига .
Попробуйте онлайн!
⊃⍵
выбрать первое вхождениеea
«еа»,.p.|is?t
«р» в окружении букв ИЛИ «i» и «t» с необязательным «s» между ними$
конец ввода… Но подставляя совпадения с соответствующим одним из следующих:
PVC
tinny
woody
Эквивалентная 43-байтовая функция Dyalog APL :
Попробуйте все случаи онлайн!
источник
C (gcc) , 81 байт
Попробуйте онлайн!
Первым делом было найти хеш-функцию, которая бы разделяла слова на категории. После некоторых раздумий я наткнулся на то
(s[0] ^ (s[1] << 2)) & 0x7f
, где 0x7f, конечно, там, чтобы снизить его до уровня ASCII для печати. Это дало следующую информацию (таблицы отсортированы, но не полученные строки):Хеш-коллизии не имеют значения, поскольку они относятся к одной и той же категории. Нам нужно только проверить, находится ли полученный хэш в строке хэшей Tinny («HzYfPW»), поскольку все хэши Woody находятся ниже хеша PVC (120). Если 120 или выше, а не Tinny слово, это должен быть ПВХ. Если не слово Tinny, а хэш меньше 120, то это должно быть хорошее, древесное слово.
источник
32-битный машинный код x86, 39 байт
HexDump:
Хеш-функция - это умножение на «магическое» число
0x2c616f47
. Есть только 6 номеров, которые можно использовать с этим кодом.Прежде всего, это пишет
PVC
в выходной. Это будет перезаписано, если необходимо.После хеширования проверяется слово PVC; проверка
al = ah
- я выбрал это, потому что это маленькая 2-байтовая инструкция. Затем он записывает либо,wood
либоtinn
, в зависимости от знака хешированного результата. Затем это пишетy
.Код сборки:
источник
Желе ,
2726 байтМонадическая ссылка, принимающая и возвращающая списки символов.
Попробуйте онлайн!
Как?
источник
Haskell , 75 байт
-2 байта благодаря Лайкони.
Попробуйте онлайн!
RIP
enklact
.источник
f"leap"="PVC";f s|
короче чемf s|s=="leap"="PVC"|
.Грязный ,
735754 байтаПопробуйте онлайн!
Разъяснение:
Для аналогичной старой версии (я обновлю ее, когда перестану играть в гольф)
Тело этого состоит из:
Если мы в конечном итоге идем налево, то имеем:
Иначе, это проверяет, начинается ли строка с любого из «nar»:
Затем мы проверяем, является ли вторая буква «я»:
Если они все провалится, мы сталкиваемся
Если мы в конечном итоге прыгали, мы оборачиваемся
источник
C # 97 байт
Я искал паттерн по длине строк и обнаружил, что они уникальны, за исключением длин 4 и 8. Так что я специально разбираю их, глядя на первые символы. Ну да ладно, это все же короче, чем некоторые ответы. :)
источник
string t(string w)=>
может быть простоw=>
. Вы можете конвертировать'p'
и другие символы в их int представления, я думаю. Вы можете удалитьPython , 59 байт
Попробуйте онлайн!
Используется индексирование из ответа Python от ovs, но более простая и короткая функция выбора:
Если десятая буква слова,
w
с переносом ((w*4)[9]
- гдеw*4
повторяетсяw
четыре раза) является буквой в слове tin (in"tin"
), тогда слово жестяное , в противном случае, если третья буква (w[2]
) - это a (<'b'
), то слово - PVC в противном случае слово древесное .... этот 59 делает ту же работу:
источник
C 107 байтов
Попробуйте онлайн!
источник
Пакет, 145 байт
Принимает участие в STDIN. Объяснение: После проверки
leap
жестяные слова начинаются либо с одной из буквa
,n
либо соr
второй буквыi
.источник
CJam , 35 байт
Попробуйте онлайн!
Я полностью забыл, что начал грубый поиск коротких выражений, чтобы разбить древесные и жестяные строки на два класса. Я только что нашел окно консоли, где выполнялся поиск, и оказалось, что он действительно что-то нашел ...
объяснение
источник
Excel, 81 байт
Использование метода anetisilire.
источник
Japt ,
3634 байтаИспользует RegEx от решения Retina Мартина.
Попробуй это | Проверьте все тесты
источник
JavaScript,
60, 50РЕДАКТИРОВАТЬ Я видел все другие ответы регулярных выражений. Я думаю, я просто слепой. Во всяком случае, вот один, используя тот же регулярное выражение
Кроме того, теперь, это бьет другой ответ JS
Отрывок:
Старый ответ
Я не видел ничего с регулярным выражением еще, поэтому я решил попробовать
Не уверен, что это 60 или более, потому что я не включил оператор возврата. Добавлю фрагмент когда я попаду на мой компьютер
Изменить: фрагмент
источник