Выведите или отобразите следующие три строки текста в точности так, как они показаны ниже. Завершающий перевод строки принят.
bC#eF&hI)kL,nO/qR2tU5wX8z
A!cD$fG'iJ*lM-oP0rS3uV6xY9
aB"dE%gH(jK+mN.pQ1sT4vW7yZ
Этот блок текста такой же, как приведенный ниже, но там, где n-й столбец вращается n раз вниз:
!"#$%&'()*+,-./0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
Имейте в виду, что это сложная задача для колмогоров , поэтому формат вывода не является гибким.
code-golf
string
kolmogorov-complexity
alphabet
Стьюи Гриффин
источник
источник
Ответы:
Java 8,
16916215014611611310695949392919084 байтаYay, мы наконец сделали это! Мы побили 88-байтовый вывод, который можно найти внизу. Спасибо всем, кто участвовал в игре в гольф!
-7 байт благодаря @StewieGriffin .
-42 байта благодаря @Neil .
-11 байт благодаря @PeterTaylor .
-3 байта благодаря @ OlivierGrégoire .
-6 байт благодаря @ OlivierGrégoire и @Neil (Оливье предложил порт ответа Нейла на JavaScript ).
Попробуйте онлайн.
Объяснение:
Посмотрите здесь, что делает каждая из арифметических частей и как она заканчивается правильными символами.
Java 8, 88 байт
Скучно,
но использование намеченного поворота столбцов в Java точно не будет короче ...Я исправлен!Опубликует решение в любой момент, чтобы увидеть, сколько байтов оно отличается.Видимо, разница всего -4 байта! : DПопробуйте онлайн.
источник
(x, y)
, которая, скорее всего, превзойдет ваш 169-байтовый подход и, возможно, даже буквальную строку.v->{String a="";for(int i=2,j,t;++i<6;){for(j=31;++j<58;a+=(char)(t<1?j+65:t>1?j:j+33))t=(j-i)%3;a+="\n";}return a;}
v->{for(int i=0,r,c;++i<81;System.out.printf("%c",c<1?10:32*++r+c-1/r))r=(i/27+28-(c=i%27))%3;}
c
полностью удалено )Шелуха , 13 байт
Обратите внимание на завершающий пробел. Попробуйте онлайн!
объяснение
источник
SPL (язык программирования Шекспира),
167916181600 байтУ меня были некоторые проблемы с переводчиком ( https://github.com/drsam94/Spl ), так что он не такой маленький, как мне кажется. Но, по крайней мере, это работает :)
Вот та же логика в PHP, чтобы было немного проще увидеть, что происходит.
источник
JavaScript (ES6),
8675 байтИзменить: Сохранено 11 байтов благодаря @Ryan. Теперь на 10 байт короче, чем буквальный!
JavaScript (Node.js) , 64 байта
Попробуйте онлайн! Спасибо @Ryan.
источник
f=(i=k=0)=>i-80?String.fromCharCode(++i%27?(4-k++%3)*32%97+i%27:10)+f(i):''
и еще 11 в среде Node, кроме как:f=(i=k=0)=>i-80?Buffer([++i%27?(4-k++%3)*32%97+i%27:10])+f(i):''
05AB1E ,
1715 байтСохранено 2 байта благодаря Эрику Аутгольферу
Попробуйте онлайн!
объяснение
источник
εN
должно быть вещь. Объединяет две идеиvyNFÁ])ø»
и твои.N
во время использованияε
. Технически это не подходит, посколькуε
это не цикл, хотя, поскольку мы иногда используем его как таковой, было бы неплохо иметь его.CJam (18 байт)
Онлайн демо
рассечение
Очевидный подход состоит в том, чтобы генерировать исходные линии, zip, вращать с
ee::m>
и zip back. Ноee::
это довольно долго, и короче генерировать столбцы напрямую.источник
Python 2 , 72 байта
Попробуйте онлайн!
Это работает путем удаления
31.333..
из предыдущего символа, добавления,97
когда предыдущая кодовая точка меньше 60, и вычитания26
в конце каждой строки.источник
R ,
6463 байтаПопробуйте онлайн!
-1 байт благодаря Джузеппе
Я пришел к этому через довольно много проб и ошибок, поэтому я изо всех сил пытаюсь получить краткое объяснение. По сути, вместо кодов символов я начал с более простой последовательности 1:81, представляющей исходный блок текста (3 * 26 плюс 3 новых строки), и исследовал индексы того, где эти значения оказываются в повернутом блоке. Это следует регулярной последовательности, которая уменьшается на 26 каждый раз, по модулю 81 (или, что эквивалентно, увеличивается на 55 мод 81). Затем
(0:80*55)%%81+1])
нужно было воссоздать эту последовательность , сопоставить с реальными значениями Юникодаc(32:57,10,65:90,10,97:122,10)
, преобразовать в символы и распечатать.источник
55
вместо-26
с-26 == 55
(мод 81).Japt ,
1715 байтПроверьте это онлайн!
объяснение
7 других возможных 15-байтов:
источник
CJam ,
2321 байтПопробуйте онлайн!
объяснение
источник
MATL , 16 байт
Попробуйте онлайн!
объяснение
источник
1:26
в качестве смены. Я должен попробовать это в моем ответе R ...&
была отличным дополнением от идеи Суэвера :-)Желе , 13 байт
Попробуйте онлайн!
Как это работает
источник
Perl 5 , 46 байт
Сохранено 13 байтов благодаря тайному волшебству @TonHospel !
Попробуйте онлайн!
источник
$i++
просто ,$_
и вы можете использоватьsay
вместоprint
так что это на самом деле50
{}
на карте тоже легко избавиться от49
:say map$/x/26|52/.chr$_%26+(32,65,97)[$_%3],0..77
47
:print map{chr$n+++$_,$/x!($n%=26)}(32,97,65)x26
. К сожалению,say
дает одну новую строку слишком много.48
:say map$/x/.A/.chr$n++%26+(65,32,97)[$n%3],A..BZ
R ,
8886 байтПопробуйте онлайн!
R ужасен при манипулировании строками, и хотя он имеет некоторые аккуратные встроенные матрицы, вращение - это еще одна вещь, которую он не делает очень легко.Я с радостью дам щедрость любому, кто может превзойти меня в гольф в R.Несмотря на то, что я нашел более короткий ответ, я все же присваиваю награду в 50 повторений первому другому ответу R короче, чем 88 байтов.
Полагаю, я бы присудил себе награду, если бы мог, но это на два байта короче, чем «скучный» ответ! Я избегаю вращений, просто используя склонность R к переработке.
РЕДАКТИРОВАТЬ: user2390246 ответ полностью превзошел меня, и я буду награждать 100 баллов, так как это решение намного лучше.
Чтобы добраться сюда, я деконструировал желаемый вывод в их кодовые точки ASCII с помощью
utf8ToInt
(удаляя новые строки), строил матрицу и запускалdiff
их, получая различия по столбцам. Отмечая там периодичность, я решил построить матрицу в гольфе, надеясь использовать ееdiffinv
для воссоздания оригинала.Благодаря периодичности мы можем воссоздать
diff
матрицу ed, заставив R перезапускать с кратной длиной, и извлечь столбцы, которые мы на самом деле хотели:Затем мы инвертируем этот процесс, с помощью которого
diffinv
воссоздаем кодовые точки, добавляем строку10
(новые строки) в конец, снова преобразуем в ASCII сintToUtf8
и получаемcat
результат.источник
Stax ,
1412 байтЗапустите и отладьте его
Распакованный, размазанный и прокомментированный, это выглядит так.
Запустите этот
Эта программа использует только те функции, которые были доступны с момента первого выпуска Stax, но, по-видимому, я забыл о
K
кросс-карте, когда первоначально писал этот ответ.Об этом ответе следует отметить одну очень интересную вещь
R
: это ненужная инструкция, потому чтоK
неявно превращает целые числа в диапазоны. Однако нет никакого способа нажать3
и26
без некоторого дополнительного байта между ними.источник
PowerShell , 53 байта
Попробуйте онлайн!
Я вижу, что это похоже на ответ Dom's Perl, но я пришел к нему независимо.
Это использует тот факт, что шаблон работает
Symbol - Lowercase - Capital
даже при переносе новых строк (8 - z - A
например) и, таким образом, просто добавляет соответствующее смещение (выбранное с помощью$j++%3
) к текущему числу,$_
прежде чем-join
объединить их в одну строку. Это сделано три раза, чтобы придумать три строки (сохранение$j
между итерациями). Эти три строки остаются на конвейере, и неявныеWrite-Output
дают нам новые строки бесплатно.источник
Юлия 0,6 , 79 байт
[' ':'9' 'A':'Z' 'a':'z']
это необращенный 2-мерный массив символов,[n,mod1(i-n,3)]
индексирующий в этот массив с соответствующим вращением.prod
переводит вектор символов в строку (поскольку для объединения строк используется умножение). Есть два вложенных вектора понимания, в результате чего вектор, содержащий 3 строки, затемprintln.
печатается каждая строка в векторе, за которой следует новая строка.TIO не хватает соответствующего метода для умножения (с
prod
) двух символов для получения строки. Я знаю, что этот метод был добавлен несколько недавно, но версия TIO, похоже, совпадает с версией на моем ПК, где работает этот код, поэтому я не могу полностью объяснить, почему он не работает на TIO.Пример копирования вставки (
;
необязательно, он просто подавляет дополнительный вывод в REPL):источник
Древесный уголь ,
262115 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
J ,
29, 2725 байт-2 байта благодаря FrownyFrog -2 байта благодаря милям
Попробуйте онлайн!
Исходный подход: J , 29 байт
Пояснение:
i.26
- диапазон 0-2632 65 97+/]
- создать 3-х рядную таблицу для персонажей&.|:
перенести затем сделать следующий глагол (|.
) и снова транспонировать-|."_1
вращать каждую строку n разu:
конвертировать в юникодПопробуйте онлайн!
источник
|:u:(<26)2&(|.>:)32 65 97
экономит 2 байта.C
7069676064 байта+4 байта, чтобы сделать функцию многоразовой .
Неверный 60-байтовый ответ, который нельзя использовать повторно:
Порт
моего ответа Java 8@Neil 's JavaScript answer .Попробуйте онлайн.
источник
i=t=0
.APL + WIN, 26 байт
Индекс происхождения 0
Создайте матрицу целочисленных значений индекса символов в атомном векторе APL.
Поверните каждый столбец вниз на его числовое значение.
Используйте полученные индексы для отображения символов атомного вектора.
источник
Вим,
8179 байтовПояснение (упрощенно)
источник
C 72 байта
источник
Python 2 , 65 байт
Попробуйте онлайн!
источник
бред ,
121115 байтСпасибо @JoKing за сохранение 6 байтов!
Попробуйте онлайн!
источник
+++[[<+>>++<-]>]
действительно начало всего, а? Благодарность!Japt , 17 байт
Попробуй это
объяснение
источник
;Bå_cÄ é}"@`" ·y
C
после обеда. Не знаю, какy
и·
закончил в ту сторону; Должно быть, яCtrl+Z
слишком много разCtrl+A
редактировал, прежде чем я !Python 2 , 79 байт
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 23 байта ( SBCS Адама )
Попробуйте онлайн!
-1 благодаря Адаму .
Работает в интерактивной среде.
Предполагает
⎕IO←0
.источник
(⎕UCS-⊖∘↑32 65 97+⊂)⍳26
или(⎕UCS-⊖32 65 97∘.+⊢)⍳26
K4 , 38 байт
Решение:
Пример:
Объяснение:
9 символов для выполнения вращения ...
источник
Perl,
4946 байтили
источник
$^x8
, но не могу придумать другой var с достаточной длиной, возможно,"@INC"
но он слишком длинный и использует"@-"
вместо$n++
, но все же, той же длины. Разве это не поможет вам сократить это дальше? Разве вы не добавили-p
флаг и получили неявный вывод?