Я просто обожаю этот простой шифр, так весело читать не совсем понятные человеку слова и заполнять пробелы ...
Ot wes thi bist uf tomis, ot wes thi wurst uf tomis,
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss,
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty,
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss,
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor,
wi hed ivirythong bifuri as, wi hed nuthong bifuri as,
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey –
on shurt, thi piroud wes su fer loki thi prisint piroud,
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid,
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.
Правила очень просты:
- Принять некоторый текст в качестве ввода (символы ASCII, прописные / строчные буквы и знаки препинания).
- Для каждого гласного поверните его к следующему гласному или назад к началу.
- а => е
- е => я
- я => о
- о => ты
- и => а
- Прописные гласные остаются заглавными, строчные - строчными.
- Вывести текст после этих преобразований.
- Не нужно поддерживать акценты.
- Все остальные символы должны остаться без изменений.
- Попробуйте сделать это в наименьшем количестве байтов.
- Любой старый язык, который вам нравится.
Тестовые случаи
It was the best of times, it was the worst of times,
it was the age of wisdom, it was the age of foolishness,
it was the epoch of belief, it was the epoch of incredulity,
it was the season of light, it was the season of darkness,
it was the spring of hope, it was the winter of despair,
we had everything before us, we had nothing before us,
we were all going direct to heaven, we were all going direct the other way –
in short, the period was so far like the present period,
that some of its noisiest authorities insisted on its being received,
for good or for evil, in the superlative degree of comparison only.
Вне:
Ot wes thi bist uf tomis, ot wes thi wurst uf tomis,
ot wes thi egi uf wosdum, ot wes thi egi uf fuuloshniss,
ot wes thi ipuch uf biloif, ot wes thi ipuch uf oncridaloty,
ot wes thi siesun uf loght, ot wes thi siesun uf derkniss,
ot wes thi sprong uf hupi, ot wes thi wontir uf dispeor,
wi hed ivirythong bifuri as, wi hed nuthong bifuri as,
wi wiri ell guong dorict tu hievin, wi wiri ell guong dorict thi uthir wey –
on shurt, thi piroud wes su fer loki thi prisint piroud,
thet sumi uf ots nuosoist eathurotois onsostid un ots biong riciovid,
fur guud ur fur ivol, on thi sapirletovi digrii uf cumperosun unly.
В:
The quick brown fox jumps over the lazy dog.
Вне:
Thi qaock bruwn fux jamps uvir thi lezy dug.
В:
Home is where the heart is.
Вне:
Humi os whiri thi hiert os.
В:
Boaty McBoatface
Вне:
Buety McBuetfeci
В:
AEIOUaeiou
Вне:
EIOUAeioua
В:
Programming Puzzles And Code Golf
Вне:
Prugremmong Pazzlis End Cudi Gulf
code-golf
text-processing
AJFaraday
источник
источник
Ответы:
Stax , 7 байт
Запустите и отладьте его
Попробуйте онлайн!
объяснение (без упаковки)
Может быть в состоянии сэкономить больше, будет продолжать пытаться.
источник
MS-SQL, 51 байт
Работает на SQL 2017 или выше:
Новая функция
TRANSLATE
выполняет замену отдельных персонажей, поэтому идеально подходит для этой задачи.Ввод осуществляется с уже существующей таблицей т на колонку с VARCHAR V , в соответствии с нашими правилами ввода - вывода .
В этом случае таблица должна быть создана с использованием сортировки с учетом регистра , либо путем запуска на чувствительном к регистру сервере, либо с использованием
COLLATE
ключевого слова (не учитывается в общем количестве символов):РЕДАКТИРОВАТЬ : SSMS может обрезать длинную цитату выше при возврате результата в окне «результаты в текст», это настройка клиента, а не ошибка в моей программе .
Чтобы исправить, перейдите
Tools > Options > Query Results > SQL Server > Results to Text
и увеличьте «Максимальное количество символов, отображаемых в каждом столбце».источник
REPLACE
для некоторых приемов: например,REPLACE(TRANSLATE(v,'1234567890','xxxxxxxxxx'),'x','')
исключить все цифры из строки. Все еще долго, но намного короче 10 вложенныхREPLACE
с.Баш + coreutils , 24
Попробуйте онлайн!
источник
Haskell , 52 байта
Попробуйте онлайн!
Линн спасла мне два байта, указав, что
!!0
она корочеhead
.объяснение
Если вы никогда не кодировали на Haskell, это, вероятно, будет похоже на кучу бреда. Итак, сначала давайте раскроем это, а затем разберем это:
Сначала у нас есть функция
!
, которая принимает строкуs
и символc
. Наше первое совпадение с шаблоном принимает входные данные, если строка не пустая. Если строка не пустая, мы сравниваем ее первый символ сc
. Если его первый символ не равен,c
мы бросаем его и вызываем!
снова с остатком строки иc
. Если оно равно, мы возвращаем второй символ в строке.Наше следующее сопоставление с образцом перехватывает строку во всех других случаях, то есть, если строка пуста. В этом случае мы просто вернемся
c
.В общем, эта функция принимает символ
c
и строкуs
и возвращает символ после первого появленияc
ins
. Если мы передадим это вместе сaeiouaAEIOUA
ним, мы выполним наш шифр с одним символом. Чтобы сделать всю нашу функцию, мы должны отобразить это через строку.источник
Сетчатка ,
1098 байтПопробуйте онлайн!
Сохранено 1 байт благодаря Нейлу! И еще один байт благодаря Мартину!
Новая версия сетчатки имеет классы гласных, что делает результат немного короче. Транслитерация также использует «другой» класс. Таким образом,
to
класс выглядит как "aeiouAEIOUA", аfrom
класс выглядит как «uaeiouAEIOUA»Это не вызывает никаких проблем, так как второе
u
сопоставлениеA
никогда не будет выполнено, поскольку оноu
уже сопоставленоa
.источник
T`_o`uvUV
._
из набора будет относиться к нему буквально, но похоже, что он этого не делает.Y
много, поэтому завтра попробую.Perl 5 + -p,
2423 байтаПопробуйте онлайн
-1 байт благодаря @DomHastings
источник
-p
+1, вместо этого мы считаем, что этот ответ находится в «Perl 5+-p
».;
в качестве разделителя, вы можете сохранить байт!Python 3, 62 байта
Составьте таблицу перевода (словарь) с помощью
str
статическогоstr.maketrans
метода. Переведите соответствующие символы в их символы назначения.источник
x
параметр. В python лямбда-функции не требуют оператора return.C
8576676564 байтаПорт Кевина Круйссена Java ответ . Попробуйте это онлайн здесь .
Спасибо Кевину Круйссену за игру в гольф 9 байтов, Кристофу за игру в гольф 11 байтов и потолку за игру в гольф 1 байт.
Безголовая версия:
источник
\0
. Кроме того, это не работает при компиляции с помощью clang: tio.run/##S9ZNzknMS///…const char *res = strchr("AEIOU...", 0)
возвращает указатель на терминатор в строковом литерале.putchar(res[1])
читает после конца строкового литерала. С gcc, по-видимому, он находит другой нулевой байт, и это работает, но с clang он получает73 'I'
(вероятно, изmain
строкового литерала "Это было ...", но я не проверял asm). Такputchar
что не возвращает 0, и мы в конечном итоге segfault, когда*c++
читает не отображенную страницу.f(char*c){for(;*c;)putchar(1[strchr("AEIOUAaeioua",*c++)?:c-2]);}
. That's all for now I guess.a[b]==*(a+b)==*(b+a)==b[a]
. Therefore1[...]==(...)[1]
R, 43 bytes
Try it online!
Here's my solution wrapped in a
cat
to get it to print out more nicely: Try it online!источник
Jelly, 11 bytes
Try it online!
источник
Python 2,
796867 bytes-1 byte thanks to @ArnoldPalmer
Try it online!
источник
JavaScript (ES6), 60 bytes
Try it online!
источник
s=>s.replace(/./g,c=>'auoieaAUOIEA'.match(".(?=${c})")||c)
only.
=>unlya
Ruby
-p
, 31 bytesTry it online!
источник
Pyth, 17 bytes
Try it here
источник
Japt 2.0,
2521 bytesI had fun golfing this one with Shaggy.
Run it here.
источник
S.p(f)
used.Java 10,
9787 bytes-10 bytes after being inspired by @Arnauld's JavaScript answer (his 60-bytes version).
Try it online.
Explanation:
источник
05AB1E,
141311 bytesTry it online!
источник
|
and»
: Try it online: 11 bytes.Retina 0.8.2, 20 bytes
Try it online! Link includes test cases.
источник
APL+WIN, 55 bytes
Prompts for input string:
источник
Mumps, 38 bytes
Mumps doesn't normally add a carriage return, as I didn't see a requirement to separate input from output it does look a bit weird on first run. For example, the output for the last test case looks like this:
If you did want to add a carriage return, add two bytes thusly:
источник
Vim + tpope/vim-abolish, 30 bytes
Alternate solution, also 30 bytes:
According to meta, vim answers can use plugins with no byte penalty. This is not a vim answer, but a vim + abolish answer.
Abolish is an extremely useful plugin. This section of the README nicely describes how this command (the
Subvert
command) works.источник
CJam,
2919 bytesTry it online!
-10 bytes thanks to @Peter Taylor
Explanation:
источник
q
rather thanl
to take input. The first test case appears to be multi-line. Also you can shorten"eioua"
to_1m<
. In fact, you can go further and golf this toq"aeioua"_eu+_1m<er
AutoHotkey, 24 bytes
AuotHotkey automatically replaces letters in a case sensitive manner.
источник
PHP, 90 Bytes
Try it online
Code
Explanation
75 Bytes if ran with
php -r
using$argv
источник
J, 33 bytes
Try it online!
источник
str, 18 bytes
Try it online!
Explanation
источник
PHP, 38 bytes
Quite simple, not very creative, uses
strtr
to replace the vowels:Run with
echo '<input>' | php -nF <filename>
or Try it online.источник
argn
? If so then that's not valid; you'd need to pass the string as an argument and use$argv1]
instead.-F
flag, then it works with input on the command line. From the PHP docs on options:-F --process-file PHP file to execute for every input line. Added in PHP 5.
The Try it online variable defining is just because some people don't have PHP installed locally, and I couldn't get the-F
flag working in TIO.q/kdb+,
3633 bytesSolution:
Examples:
Explanation:
Figure out index of vowels, add one to push along to the next and index in. Still think this approach can be significantly improved...
Bonus:
My old **36 byte(()) solution which I think is quite cool, but need to golf down the lists to make it competetive:
источник
Charcoal, 35 bytes
Try it online!
Naive method.
Explanation:
источник
PHP, 76 bytes.
Check it out!
This was the shortest I was able to do this in PHP.
источник