До обнаружения отпечатков пальцев и анализа ДНК британская полиция использовала антропометрическую систему для выявления повторных преступников. Определенные части тел преступников были измерены и сохранены в записях - эти части тела, как предполагалось, не изменились в размере после взрослой жизни. Эта система была известна как bertillonnage .
На диаграмме ниже показана система регистрации, используемая полицией для быстрого доступа к этим записям.
Диаграмма 1: Система подачи с пронумерованными ящиками.
Примечание: если вы не видите изображение, попробуйте зеркало imgur или скомпилируйте его самостоятельно .
Шкаф состоит из 81 пронумерованных ящиков. Каждый ящик содержит карточки, и каждая карточка имеет размеры отдельных частей тела преступника:
- Длина их головы (
H
) - Ширина их головы (
B
) - Ширина их правого уха (
E
) - Длина их указательного пальца (
F
)
Каждое измерение классифицируется как маленькое, среднее или большое.
Например, ящик 56 содержит карты со следующими характеристиками: малая H, B большой, средние Е, и малые F. Это может быть нотировано с помощью букв S
, M
и L
в месте малых, среднего и большая:
SH,LB,ME,SF
Обратите внимание, что сначала идет буква размера, а затем измерение. Кроме того, восклицательный знак !
может быть помещен впереди, чтобы вызвать отрицательный результат:
!SH,LB,!ME,SF
Это указывает на карты, которые имеют следующие характеристики: не маленький H, большой B, не средний E и маленький F. Есть четыре ящика, которые содержат карты с этими характеристиками - 58, 60, 61 и 63.
Ваша задача - написать программу, которая при наличии строки с указанием некоторых характеристик выводит все ящики, в которых содержатся карточки с этими характеристиками. Если нет выдвижных ящиков с карточками с заданными характеристиками, выведите 0
.
Вот несколько примеров входов и выходов.
- Вход:
SH,LB,ME,SF
Выход:56
- Вход:
!SH,LB,!ME,SF
Выход:58,60,61,63
- Вход:
SB,!MF,!LF
Выход:1,2,3,4,5,6,7,8,9
- Вход:
MH,!MH
Выход:0
Это код гольф, поэтому выигрывает самый короткий вход. Задайте вопросы в комментариях, если спецификация не ясна.
Ответы:
GolfScript 95 ( DEMO )
источник
Рубин 1.9.3 -
173 157143Редактировать:
Демо онлайн: http://ideone.com/lodTLt
источник
select
это более короткий синоним дляfind_all
. Вы можете обрезать еще два символа, заменивy[-2..-1]
сy[-2,2]
, и еще три по- прежнему используя==[]
вместо.empty?
.Скала - 951
Определенно не выиграю этот, главным образом из-за названий встроенных функций, я думаю.
Аргумент передается в функцию
f
f("SH,LB,ME,SF")
знак равно56
источник
T-SQL -
547544Не победная запись, но подходит для такого рода проблем.
Настройка таблицы сетки - 254
Запрос -
293290Ввод осуществляется путем объявления @i перед запросом
Я мог бы сохранить еще 89 символов, если выходные данные не должны быть разделены запятой
источник
Mathematica
191235Представляет каждый номер ячейки в основании 3. Каждая позиция цифры представляет телесный признак. Значение цифры {0,1,2} представляет «Малый», «Средний», «Большой», соответственно.
Особенности соответствуют цифрам следующим образом:
Например, вход,
Значит:
2001
в базе 3 - 55 в базе 10.Нам нужно добавить один, потому что мы считаем ячейки от 1, а не от нуля.
Код
Тестовые случаи
источник
Python 3 - 192 - попробуй!
источник
Питон 2 - 194
Вывод имеет квадратные скобки, и его не волнует порядок вывода.
Несколько предложений от Фалько и пара от меня, чтобы снять 10 символов.
источник