вход
Непустая закодированная строка, состоящая из печатных символов ASCII (в диапазоне 32-126), где некоторые пропущенные буквы были заменены на _
.
Выход
Декодированная строка одинаковой длины со всеми буквами в нижнем регистре, включая пропущенные.
Как?
Редактировать: Как упомянуто @Deusovi в комментариях, это вариант шифра Бэкона .
- Соберите все буквы в исходной строке и сгруппируйте их по 5. Дополнительные буквы, которые не помещаются в полную группу из 5, игнорируются.
- Преобразуйте каждую группу в двоичную: нижний регистр = 0 , верхний регистр = 1 . Это приводит к списку целых чисел.
- Используйте каждое значение N в этом списке, чтобы заменить каждое
_
в исходной строке на N-ю букву алфавита (с 0 индексами) в порядке появления.
Пример: prOGraMMIng PuZZleS & cOde ____
prOGr --> 00110 --> 6 --> 7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 --> 5 --> 6th letter = 'f'
Заменив пропущенные буквы и преобразовав все обратно в нижний регистр, вы получите оригинальную строку:
programming puzzles & code golf
Это ожидаемый результат.
Разъяснения и правила
- Пропущенные буквы гарантированно появляются в конце строки. Более формально: никогда не будет никакой буквы после первой
_
во входной строке. Однако могут быть другие печатные символы ASCII, такие как пробелы и знаки пунктуации. - Входные данные гарантированно не содержат никаких бесполезных заглавных букв: все заглавные буквы представляют собой биты, установленные на 1, которые необходимы для декодирования пропущенных букв. Все остальное в нижнем регистре.
- Входная строка гарантированно будет действительной. Особенно:
- Он всегда будет содержать достаточно полных групп из 5 букв для декодирования подчеркивания.
- Бинарно-кодированные целые числа гарантированно находятся в диапазоне [0-25] .
- Во
_
входной строке может вообще не быть , в этом случае вам просто нужно вернуть ввод. - Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
Контрольные примеры
Input : hello!
Output: hello!
Input : helLO, worl_!
Output: hello, world!
Input : i aM yoUr faTh__.
Output: i am your father.
Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf
Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?
Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.
Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.
Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.
Несколько дополнительных тестов:
Input : BInar_
Output: binary
Input : 12 MonKey_
Output: 12 monkeys
Input : hyPerbolIZ__
Output: hyperbolized
Input : {[One Last Test ca__]}
Output: {[one last test case]}
_
во входной строке, является частным случаем.The input is guaranteed not to contain any useless capital letter
, в случае, если нет подчеркивания, также не будет заглавной буквы.[32-126]
. Я добавил еще один тест.Ответы:
05AB1E , 18 байт
Код:
Использует кодировку 05AB1E . Попробуйте онлайн!
Объяснение:
источник
Python 2 , 113 байт
Попробуйте онлайн!
источник
Perl 5
-pF -MList::Util=sum
, 75 байтПопробуйте онлайн!
Объяснение:
-pF
читает строку ввода в переменную$_
и, разбитую на символы, в массив@F
.@a=grep!/\W|\d/,@F
устанавливает массив@a
равным тем членам,@F
которые не удовлетворяют регулярному выражению\W|\d
.\W
это что-нибудь, кроме букв, цифр и_
;\d
это числа. Так\W|\d
что все, кроме букв и_
, и@a
имеет все буквы и_
символы. Мы никогда не будем изучать_
персонажей@a
. (Обратите внимание, что это работает только потому, что вход ASCII гарантирован.)map{a gt shift@a&&16/2**$_}0..4
выполняет следующие действия в диапазоне от 0 до 4: он сдвигает следующий элемент@a
, сокращает его и оценивает,a
является ли асибиетически больше этого элемента (т. е. является ли этот элемент заглавными). Если это так, то&&
не замыкается накоротко, поэтому мы получаем 16, деленное на 2, на величину входного значения (от 0 до 4). В противном случае&&
происходит короткое замыкание, и мы получаем 0.map
Возвращает список из пяти чиселsum
, который добавляет их.a..z
, и это то, что мы получаем(a..z)[…]
.s!_!…!eg
преобразует каждый_
в$_
свою очередь в соответствующую букву.$_=lc
преобразует$_
в строчную версию себя и-p
печатает ее.источник
J ,
6261 байтПопробуйте онлайн!
источник
Желе ,
28 2726 байт-1 спасибо Эрику Аутгольферу и Дилнану
Не очень желе-дружественный вызов!
Монадическая ссылка, принимающая и возвращающая списки символов.
Попробуйте онлайн!
Как?
источник
Сетчатка ,
9190 байтПопробуйте онлайн! Объяснение:
Переводите строчные буквы в
a
и прописныеA
, удаляя все остальное.Разделите
Aa
на группы по 5 человек.Преобразовать из двоичного в унарное, рассматривая
A
как 1 иa
как 0. ПосколькуAa
изначально было 5 с, осталось 5a
с плюс числоA
s в зависимости от желаемой позиции в алфавите.Увеличивайте последний в
a
соответствии с количеством следующихA
s.Подставить исходный ввод.
Замените любые
_
s следующей расшифрованной буквой.Удалите все лишние расшифрованные буквы.
Строчные все.
Сетчатка 0.8.2 , 117 байт
Попробуйте онлайн! Объяснение:
Дублируйте ввод.
Строчная первая копия.
Переведите строчные буквы
a
во второй экземпляр.Перевести заглавные буквы в
A
. Они должны быть во второй копии, потому что первая копия уже была в нижнем регистре.Удалите все остальное во втором экземпляре.
Разделите вторую копию (теперь только
Aa
s) на группы по 5 человек.Расшифруйте буквы и вставьте их, как раньше.
источник
APL (Dyalog Unicode) , 46 байтов SBCS
Анонимная лямбда, Предполагается
⎕IO
(Index Origin) быть0
.Попробуйте онлайн!
{
...⋄
...}
два-оператор функции;⍵
аргумент,⋄
разделяет заявления⊢
Аргумент (функция no-op),'_'=
где он равен подчеркиванию (то есть функции булевого отображения),_←
назначает эту функцию_
A[
…]@_⍵
Поместите следующие символыA
в позиции подчеркивания в аргументе⎕A
в верхнем регистре . Алфавиту lA←
назначают, чтобыA
819⌶
его в нижнем регистре ( 819 ≈ BIg , без левого аргумента означает не большой, то есть в нижнем регистре)A,
перед алфавитом в верхнем регистре; это дает нам все буквы⍵∩
пересечения аргумента и того; только буквы аргумента,A∊⍨
какие из них являются членами заглавного алфавита; верхний регистр битых(
...)5⍴
г eshape , что к следующему числу строк и пяти столбцов:_⍵
маски подчеркивания в аргументе+/
сумме этого; количество подчеркиваний⍉
Транспонировать (обрабатывать каждую строку как число, а не как разрядную позицию)2⊥
оценивать как819⌶
строчные 2 в Base -2 всеисточник
Scala , 189 байт
Попробуйте онлайн!
Объяснение:
источник
JavaScript (Node.js) ,
125124 байтаПопробуйте онлайн!
источник
Желе , 26 байт
Попробуйте онлайн!
Отличный подход от Джонатана Аллана. РЕДАКТИРОВАТЬ: Итак, я, видимо, думал о том же сокращении байтов, что и Джонатан Аллан, так что не повредит снова упомянуть его имя.
источник
CJam , 43 байта
Попробуйте онлайн!
источник
Чисто ,
180... 150 байтПопробуйте онлайн!
Определяет функцию
$ :: [Char] -> [Char]
с@ :: [Char] [Char] -> [Char]
помощью? :: [Char] -> [Char]
в качестве помощника для замены символов подчеркивания и в качестве помощника для генерации символов замены.источник
i<-:""
часть? Символы неявно преобразуются в числа при их суммировании или суммировании?JavaScript (Node.js) , 100 байт
Попробуйте онлайн!
Благодаря @Arnauld, экономит 2 байта.
источник
/[a-z]/gi
сих пор.R ,
153135113 байтПопробуйте онлайн!
Выдает некоторые предупреждения с использованием,
matrix
но это не должно повлиять на результат. Также выдает предупреждения, так как[<-
назначение по умолчанию удаляет посторонние назначенные объекты.40 (!) Байтов уменьшено благодаря улучшениям JayCe
источник
,length(L)%/%5
[<-
выбрасываю элементы за пределы длины индексов ...intToUtf8
C (gcc) ,
111109101100 байтРедактировать: Добавлен нижний регистр для комментария @ FrownyFrog; спасибо Линн, Кристофу и user5329483 за их предложения!
Попробуйте онлайн!
источник
i+=i+(*s<97)
.j
, введя маркерi
и переписав второй для asfor(i=1;i<32;s++)
. И компенсировать дополнительные 32 во внешнем. Как новичок здесь я считаю семь байт запасными.for(i=3;i<96;s++)
сводит 65 к однозначному числу, иначе1
.Go,
219217192210209156 байтСохранено 25 байтов благодаря @Lynn! Сохранено 53 байта благодаря @ovs!
Пришлось потерять 18 байт из-за ошибки со строками без подчеркивания :(
Попробуйте онлайн!
источник
Stax , 22 байта
Запустите и отладьте его
Общий подход заключается в замене регулярного выражения
"_"
использованием функции обратного вызова, которая разрезает буквы входных данных для вычисления каждого символа замены.Запустите этот
источник
Красный , 247 байт
Попробуйте онлайн!
Более читабельно:
источник
Java 10, 186 байт
Попробуйте онлайн.
Объяснение:
источник
Рубин ,
107106103 байтовПопробуйте онлайн!
источник
Japt, 25 байт
Попробуй
объяснение
источник
Pyth, 36 байт
Попробуй здесь
объяснение
источник
Python 3.5 , 296 байт
Попробуйте онлайн
Первый код гольф :)
(Я знаю, что это не маленький в байтах, я просто получал удовольствие, делая код в 1 строку)
Вот объяснение:
Пользовательский ввод
Находит индекс первого _ в строке и сохраняет его
удаляет строку всех не-буквенных символов
Разбивает альфа-строку на массив с каждым элементом, состоящим из 5 символов
Ex. ['TheqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']
Затем преобразует строчные буквы в 0 и прописные в 1
Ex. ['11001', '11000', '00011', '01110', '00110', '00000']
и преобразует двоичную строку в целое число, добавляет 65 и преобразует его в символ
Ex. ['z', 'y', 'd', 'o', 'g', 'a']
находит все символы после первого _ и помещает их в массив z в соответствующих местах (определено выше)
Ex. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']
разделить нашу строку в список символов
разделите нашу строку от первого _ до конца списка и замените ее массивом z. Мне также пришлось нарезать массив z по длине строки разбиения от первого _ до конца, потому что я получил дополнительный символ в примере с ленивым псом ("a" в конце примеров выше)
* распечатать ответ *
источник
o.islower()
иelse
, и я думаю,'1'
иfor
. Кроме того, вы можете изменитьif d!="_"
наif"_"!=d
, но вышеупомянутый комментарий уже делает это.Haskell , 165 байт
Попробуйте онлайн! Пример использования:
g"" "BInar_"
доходность"binary"
.источник
PowerShell , 121 байт
Попробуйте онлайн!
Менее гольф:
источник
Perl 5
-p
, 78 байтПопробуйте онлайн!
источник