Ваша задача - найти двух пропавших персонажей в названии эпизода Коломбо.
вход
Один из 69 названий эпизодов Коломбо (перечисленных ниже), в котором ровно два персонажа заменены на *
.
Пример :
"Ran*om for a *ead Man"
Выход
Вы можете вернуть либо полный заголовок эпизода, либо только два пропущенных символа в любом приемлемом формате, при условии, что порядок символов однозначен.
Некоторые действительные результаты :
"Ransom for a Dead Man"
"sD"
["s", "D"]
Эпизоды
Пожалуйста, перейдите по этой ссылке, чтобы получить неформатированный список.
Prescription: Murder Swan Song Murder, Smoke and Shadows
Ransom for a Dead Man A Friend in Deed Sex and the Married Detective
Murder by the Book An Exercise in Fatality Grand Deceptions
Death Lends a Hand Negative Reaction Murder: A Self Portrait
Dead Weight By Dawn's Early Light Columbo Cries Wolf
Suitable for Framing Troubled Waters Agenda for Murder
Lady in Waiting Playback Rest in Peace, Mrs. Columbo
Short Fuse A Deadly State of Mind Uneasy Lies the Crown
Blueprint for Murder Forgotten Lady Murder in Malibu
Etude in Black A Case of Immunity Columbo Goes to College
The Greenhouse Jungle Identity Crisis Caution: Murder Can Be Hazardous to Your Health
The Most Crucial Game A Matter of Honor Columbo and the Murder of a Rock Star
Dagger of the Mind Now You See Him... Death Hits the Jackpot
Requiem for a Falling Star Last Salute to the Commodore No Time to Die
A Stitch in Crime Fade in to Murder A Bird in the Hand...
The Most Dangerous Match Old Fashioned Murder It's All in the Game
Double Shock The Bye-Bye Sky High IQ Murder Case Butterfly in Shades of Grey
Lovely But Lethal Try and Catch Me Undercover
Any Old Port in a Storm Murder Under Glass Strange Bedfellows
Candidate for Crime Make Me a Perfect Murder A Trace of Murder
Double Exposure How to Dial a Murder Ashes to Ashes
Publish or Perish The Conspirators Murder With Too Many Notes
Mind Over Mayhem Columbo Goes to the Guillotine Columbo Likes the Nightlife
Разъяснения и правила
- Хранение списка эпизодов (или хранение достаточного количества информации, чтобы угадать недостающие символы) является частью проблемы. Другими словами, вы не получите список «бесплатно». При использовании внешних файлов их длина должна быть добавлена к вашему счетчику байтов.
- Ваша программа / функция должна поддерживать заголовки в точности так, как указано выше:
- Регистр каждой буквы должен точно совпадать.
- Знаки препинания также должны точно совпадать.
- И т.д...
- Все символы в названии могут быть заменены
*
, а не только буквы. Они могут быть смежными. - Вы можете ожидать другого «пустого» символа вместо
*
, если он не появляется нигде в заголовке. (Если это так, пожалуйста, укажите это в своем ответе.)
Ах, есть еще одна вещь. Я почти забыл...
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
Тестовый набор
Вот ссылка на все 14252 возможных ввода.
code-golf
string
error-correction
Arnauld
источник
источник
error-correction
тег, который, я думаю, уместен здесь.A
и другоеa
в списке существующих уникальных строк.',-.:ABCDEFGHIJLMNOPQRSTUWYabcdefghiklmnopqrstuvwxyz
(и<space>
, конечно же).Ответы:
Stax , 294 байта
Запустите и отладьте его
Вот подход:
Чтобы убедиться, что неправильный результат не будет получен, я использовал программу на C #, чтобы проверить вывод для всех возможных входных данных. Это не очень портативно, и это довольно долго работает. До сих пор я проводил поиск кандидатов в знаменателях более 24 часов, поэтому он не очень подходит для TIO. Я запускаю его в LINQPad.
Еще одно примечание о хранении встроенных хеш-значений в программе. Хэши сортируются до встраивания в массив. Я использую функцию Stax, называемую «забитые целочисленные массивы», которая является способом эффективного представления целочисленных массивов. Это представление может хранить различия между элементами, если это более эффективно, поэтому предварительная сортировка значений экономит несколько байтов.
Вот распакованное представление с некоторыми минимальными комментариями.
источник
Python 2, 862 байта
Вот скрипт bash, который собирает эту программу и демонстрирует ее выполнение.
объяснение
Это довольно простое решение: я искал наиболее сжимаемую перестановку заголовков, объединенных пробелами. Эта программа просто заменяет
*
во входных данных.
и ищет совпадения с этим регулярным выражением внутри строки.Строка распаковывается в:
источник
JavaScript (ES6), 634 байта
Предполагалось, что это представление будет скрыто до тех пор, пока не будет опубликован ответ размером менее 500 байт. Что сейчас и сделано .
Попробуйте онлайн!(один случайный тестовый случай на эпизод)
Как?
Мы определяем chr , список символов, используемых в заголовках эпизодов.
Мы определяем хэш , строку, содержащую хэши всех необъяснимых заголовков. Каждый хеш состоит из 6-значного числа в base-36.
Определим H () , простую хеш-функцию.
Это дает log 2 (36 6 ) ~ = 31 бит энтропии. Округляя это до 4 байтов и добавляя размер chr , мы получаем общий размер данных полезной нагрузки: 4 * 69 + 53 = 329 байтов .
Основная функция теперь выглядит как:
(Это было всесторонне проверено на всех возможных входах .)
источник
Wolfram Language
13831226 байтEditDistance находит расстояние Левенштейна между строками.
источник
Желе , 752 байта
Попробуйте онлайн!
Использовал это для сжатия списка.
Это предполагает, что нет фильма, который имеет ровно 2 символа, отличных от другого фильма, что доказано здесь (вывод
1
).источник
Рубин ,
11851165 байтПопробуйте онлайн!
Лямбда, принимающая строку и возвращающая строку. Использует некоторые домашние расширения строки. Вероятно, есть место для игры в гольф как в том, как название выбирается из расширенного списка, так и в том, как именно список сжат.
-20 байт: изменить порядок списка (вручную), чтобы увеличить повторяемость подстроки
Ungolfed:
Вот фрагмент алгоритма выбора жадной замены, который я использовал для генерации этого кода. Я опустил некоторые детали, чтобы они не работали как есть, но это должно дать суть.
источник
Java 10,
1426,1405,1381,1315,1313,1298 байт.-66 байт благодаря @ OlivierGrégoire путем кодирования строки.
Объяснение:
Попробуйте онлайн.
Вот код для кодера.
источник
java.nio.Files.readAllBytes(java.nio.Paths.get("a"))
. Таким образом, bas64 не требуется.796
и1397
определяется?d.deflate(b)
иi.inflate(b)
наSystem.out.println(d.deflate(b))
иSystem.out.println(i.inflate(b))
. Если вы играете в гольф текст, вы должны обновить размеры массива.var bytes = new byte[9999]
и выведите число. Второй запуск: замените9999
полученное значение и удалитеSystem.out.println()
. Если вы этого не сделаете, ваш String, скорее всего, будет иметь неправильный размер, и результат будет испорчен, вероятно, это то, что произошло с гольфом 1290. Предполагается, что API работает с буферами, но в нашем случае мы хотим играть в гольф, поэтому нам необходимо предварительно рассчитать эти значения. Если мы этого не сделаем, мы теряем байты.Python 2 , 621 байт
Попробуйте онлайн!
Примечание: черт! Просто увидел, что это по сути то же самое, что и решение Арно ...
Пока не полностью в гольф ...
Основная идея здесь: создать список хэшей заголовков по модулю 36 ^ 6 (для этого требуется 6 байтов на заголовок; плюс некоторые накладные расходы).
Теперь, учитывая заголовок с двумя пропущенными символами, брутфорс подставляет две возможные буквы и проверяет, есть ли хеш результирующей строки в списке.
Подготавливая 'B' к заголовкам и используя
hash
функцию Python , мы получаем список, в котором никогда не бывает коллизий в этой задаче; так что всегда будет один и только один возможный ответ.источник