У меня и моего друга есть эта игра, в которую мы играем словами. Это забавное времяпрепровождение, и оно включает в себя «отмену» букв в слове, пока ничего не останется. Я действительно устал от того, что он намного быстрее меня, поэтому твоя задача - реализовать это и позволить мне наконец победить его. Очевидно, что поскольку я должен сделать программу максимально простой для скрытия, она должна быть как можно меньше.
Как работает эта игра?
В игре довольно простой алгоритм. Он сокращает алфавитную строку до тех пор, пока ее нельзя будет уменьшить, что делает его своего рода хэшем. Реальную игру, которую мы, люди, делаем, очень сложно реализовать, но ее можно упростить до следующего алгоритма:
Вы начинаете с того, что складываете алфавит пополам и выстраиваете две части так:
a b c d e f g h i j k l m
z y x w v u t s r p q o n
Затем, начиная с середины, вы присваиваете положительные целые числа верхней половине, а отрицательные - нижней:
a b c d e f g h i j k l m
13 12 11 10 9 8 7 6 5 4 3 2 1
z y x w v u t s r p q o n
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Затем вы берете свою строку (мы будем использовать hello world
) и, игнорируя любые не алфавитные символы, переводим ее:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Затем вы суммируете значения букв. Те, которые выстроились на предыдущей диаграмме (например, d
и w
, l
и o
), отменится, а остальные добавят.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 это номер b
, так что хэш hello world
ISb
Для слова , которые полностью уравновешивает (например love
), то вывести «0 символ»: -
. Обратите внимание, что при вводе -
все равно будет игнорироваться. Это имеет значение только на выходе.
Если величина числа больше 13, то вы начинаете удваивать числа a
«и z
». Вы в основном берете столько же a
или z
«вписывается» в число и берете все, что осталось в последней букве, например:
code golf: 43.
Подходит 3 a
и 4 осталось:
aaa 4: j
result: aaaj
Подсказка: эта часть в основном divmod
за исключением того, что она округляется до нуля, а не -infinity
(например, -43 станет 3 z
-х, а a -4
- это p
так zzzp
).
Примечание: черточка не появляется, если она a
или z
вписывается идеально, только если это точно 0
.
Разъяснения:
- Хэш регистр в чувствительном
- Стандартные лазейки не допускаются
- Ввод / вывод может быть в любом не слишком странном формате: стандартный ввод, стандартный вывод, аргумент командной строки, функция и т. Д.
- Это код-гольф, поэтому выигрывает самый короткий размер в байтах .
Примеры:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
пусто ...Ответы:
CJam, 46 байтов
Попробуйте онлайн или попробуйте набор тестов онлайн .
объяснение
Алгоритм работает так, как вы могли бы ожидать: читать ввод, преобразовывать в нижний регистр, отображать каждый символ в значение, суммировать значения и печатать символы и корректировать сумму соответственно, пока сумма не станет равной нулю. Вероятно, наиболее интересная оптимизация (хотя она сохраняет только два байта) заключается в том, что вместо этого используются сопоставления с отрицательными символами, поскольку это позволяет избежать замены аргументов вычитания для исправления знака при вычислении отображенного значения и избежать замены снова при отображении обратно на букву из-за вычитание отрицательного значения, заменяемого сложением.
источник
Pyth,
797877656158источник
@Jz
вместоf}YJz
Там, вероятно, больше, но я должен спать сейчас. Удачи;)@
!Клип 10 , 87
источник
R, 258 байт
Это должен быть самый грубый код R когда-либо. Я подумал, что R может быть достойным выбором, поскольку он имеет вектор всех букв от «а» до «z» в качестве встроенной глобальной переменной. Но оказывается, все остальное - беспорядок.
Ungolfed + объяснение:
Это создает безымянный объект функции, который принимает строку в качестве входных данных и возвращает соответствующее значение хеш-функции. Чтобы назвать его, дайте ему имя, например
f=function(s){...}
.Примеры:
Попробуйте онлайн!
Вопросов? Я с радостью предоставлю дальнейшие объяснения. Предложения? Предложения более чем приветствуются!
источник
Haskell, 171 байт
Тестовый забег:
Как это работает:
l
это таблица поиска из букв на соответствующее значение. Найти все символы из входной строки и отбросить те, которые не найдены. Подведите итоговый список. В зависимости от суммы, которую выp
печатаете,-
или, может быть, сначала несколькоa
s илиz
s и, наконец, (обратный) ищет буквуl
.источник
R - 200
источник