Ваша задача состоит в том, чтобы зашифровать строку! Вы спрашиваете, что такое пароли?
Возьмите строку в качестве ввода. Эта строка будет содержать только заглавные буквы, строчные буквы, цифры и пробелы.
Вы должны заменить все пробелы подчеркиванием и переместить все числа в конец строки в том порядке, в котором они отображаются слева направо. Затем для каждой буквы в строке случайным образом измените ее на прописные или строчные.
Примеры (регистр символов должен меняться каждый раз):
Input
Hello world
Output
HElLo_wORld
Input
pa55 w0rd
Output
pA_Wrd550
Input
14 35
Output
_1435
Input
0971
Output
0971
Input
[space]
Output
_
Самый короткий код в байтах побеждает!
Кто бы ни спросил о информационной безопасности SE, выигрывает ли это хороший алгоритм хеширования! - Не волнуйтесь, повелители SE, я просто шучу.
Ответы:
Pyth, 15 байт
демонстрация
источник
Лабиринт , 76 байт
Еще один сговор с @ MartinBüttner и более безумной стороной лабиринтного спектра - впервые у нас все четыре
^>v<
в одной программе. Попробуйте онлайн!объяснение
Общий алгоритм, который работает в цикле, выглядит следующим образом:
Чтобы сохранить объяснение компактным, вот примерно то, как каждая часть программы соответствует псевдокоду выше:
Вот интересные части.
Получение случайности в Лабиринте
Есть только один способ получить случайность в Лабиринте, и это когда IP пытается идти вперед, но 1) нет ни пути вперед, ни назад, и 2) есть пути, доступные слева и справа. В этом случае IP случайным образом выбирает между левым и правым маршрутами.
Это возможно только с помощью
^>v<
операторов, которые выталкиваютn
и сдвигают строку / столбецn
на 1. Например, программа ( попробуйте онлайн! )выводит 1 или 2 случайным образом, так как
v
смещение столбца со смещением 0 (т. е. столбца, на котором включен IP) на 1, что приводит кIP направлен вправо и пытается идти вперед (вершина стека равна нулю), но не может. Он также не может двигаться назад, поэтому он случайным образом выбирает между левым или правым.
Гольф трюки
Программа запускается с первого символа в порядке чтения, что, как вы заметите, на самом деле является шагом 6. Однако, выталкивание из пустого стека Лабиринта дает 0, поэтому выполняются шаги 10 и 14, смещая ноль во вспомогательный стек, что эффективно нет оп.
Основной стек фактически пуст после каждой итерации, что позволяет нам обрабатывать макет кода, используя
>
и<
неявные нули внизу.>
Оборачивает нижнюю строку вокруг так , что IP перемещается от нижнего правого угла к нижнему левому, и<
сдвигает строку назад. Затем IP успешно перемещается вверх по левому столбцу, чтобы продолжить цикл.Цифры в лабиринте лопаются
n
и толкаются10*n + <digit>
. Кроме того, символы передаются по модулю 256 перед выводом. Соединение этих двух значений позволяет нам вывести 95 (подчеркивание), выполнив`33
32 (пробел), что работает потому, что-3233 % 256 = 95
. Несмотря на то, что есть другие способы превратить 32 в 95 (;95
самый простой), работа с отрицательным числом позволяет нам немного сжать код левыми поворотами.источник
05AB1E ,
222120 байтКод:
Использует кодировку CP-1252 .
Попробуйте онлайн!
источник
CJam , 25 байтов
Попробуйте онлайн!
объяснение
Перевод моего ответа MATL.
источник
CJam, 23 байта
Проверьте это здесь.
объяснение
источник
Python, 107 байт
Улучшение в двух других ответах Python, потому что:
[...,'_'][c<'!']
используется вместоs.replace(' ','_')
, иchoice(c+c.swapcase())
используется вместоchoice([c.upper(),c.lower()])
источник
JavaScript (ES6),
114101 байт47 байтов просто для рандомизации регистра символа ...
Редактировать: благодаря @ edc65 сохранены огромные 13 байтов.
источник
f=s=>s.replace(/./g,x=>x>'9'?x[`to${Math.random()<.5?"Low":"Upp"}erCase`]():x>' '?(s+=x,''):'_',s='')+s
MATL , 27 байт
Попробуйте онлайн!
источник
Python 3,
128 122118 символовСпасибо xnor за то, что сбрил 6 байтов.
источник
lambda x:''.join(choice([i.upper(),i.lower()])for i in sorted(x.replace(' ','_'),key=str.isnumeric))
Perl 6,
777561 байтS///
это какs///
за исключением того, что он не изменяется$_
на местеисточник
Pyth, 17 байт
Попробуй это здесь!
объяснение
источник
Mathematica, 86 байт
Спасибо Sp3000 за сохранение 1 байта.
Аааа, обработка строк Mathematica ... разве это не мило? Это безымянная функция, которая принимает и возвращает строку.
Из-за всего синтаксического сахара порядок чтения немного смешной:
Разбейте строку на символы, иначе мы не сможем ничего с этим поделать.
Сортирует цифры до конца. Оборачивая тестовую функцию в список, мы делаем сортировку стабильной.
Сопоставляет функцию левой руки над каждым символом в списке.
Выбирает случайную изменяющую регистр функцию для текущего символа.
Применяет его к текущему персонажу.
Заменяет пробелы подчеркиванием.
Наконец объединяет все символы обратно в строку.
источник
PowerShell, 113 байт
PowerShell означает ужасный язык игры в гольф. Разбить на массив символов и заменить пробелы подчеркиванием. Возьмите каждого персонажа и обработайте. Соберите числа в переменную $ d для последующего вывода. Каждый другой символ случайным образом превращается в верхний или нижний регистр, вызывая выражение с помощью
'char'.ToLower()
или'char'.ToUpper()
. Если какие-либо цифры были собраны, добавьте их в конце.источник
$_-in0..9
и-in
оператор , введенный в PowerShell v3 вместо регулярных выражений-match
.Юлия,
888778 байтЭто анонимная функция, которая принимает строку и возвращает строку. Чтобы вызвать его, назначьте его переменной.
Сначала мы разбиваем входную строку на массив ее символов и сортируем массив в соответствии с тем, является ли каждый символ цифрой. Это поддерживает порядок в тексте и цифрах, но подталкивает цифры до конца. Затем для каждого символа в массиве мы проверяем, является ли это пробелом. Если это так, замените символом подчеркивания, в противном случае случайным образом выберите один из символов
ucfirst
илиlcfirst
применить его к символу, преобразовав его соответственно в верхний или нижний регистр. Соедините массив в строку, и все готово!Попробуй здесь
Сохранено 9 байт благодаря Sp3000!
источник
Perl,
5148 байтВключает +2 для
-lp
Запустите с помощью ввода на STDIN:
passwordify.pl
:источник
Фактор, 154 байта
или 222 с импортом
kernel splitting sequences ascii combinators.random regexp
Я не слишком хорош в игре в гольф, и я не уверен, что выбрал здесь лучший подход, но думал, что попробую
источник
Рубин, 84 байта
Анонимная функция. Удаление пробела раньше
c.downcase
вызывает синтаксическую ошибку по какой-то причине, и я не уверен почему.источник
Луа, 125 байт
Когда объект встречается с функционалом, вы можете делать красивые вещи даже в Lua! Я не думаю, что смогу сыграть в гольф, это уже довольно большой беспорядок, и я уже рад побить большинство ответов питона: D.
Неуправляемый и объяснения
источник
Серьезно, 25 байт
Попробуйте онлайн!
Объяснение:
источник
IPOS - не конкурирует, 14 байтов
Да, я добавил встроенные функции для этой задачи, но они не предназначены специально для этой проблемы.
Это работает с версией 0.1 интерпретатора .
Пример запуска
объяснение
источник
PHP, 368 байт
Код Ungolfed:
источник
Python 2, 179 байт
Здесь, вероятно, есть много возможностей для улучшения, над которым я поработаю позже.
источник
AWK, 128 байт
Он
srand()
нужен для того, чтобы каждый раз давать нам разные случайные числа.Чтобы это работало правильно с многострочным вводом, нам нужно поместить что-то вроде
A=N=""
передfor
циклом.источник
Python 3,5 - 118 байт:
Как вы можете видеть, я в основном использую
choice
функцию случайного модуля для выбора случайной функции (.upper () или .lower ()) для каждой буквы в отсортированной версии данной строки, в которой все цифры идут в конец. Кроме того, каждый пробел заменяется подчеркиванием в отсортированной строке.источник
PHP,
164158 символов / байтЭто лучше, чем другой PHP-гольф , потому что:
скрипт
пример
источник
> <> , 73 байта
Ничего сумасшедшего здесь нет:
_
при встречеВы можете попробовать это здесь !
источник
Python 3, 151 байт
источник