Колмогоровская перестановка

37

Выведите или отобразите следующие три строки текста в точности так, как они показаны ниже. Завершающий перевод строки принят.

 bC#eF&hI)kL,nO/qR2tU5wX8z
A!cD$fG'iJ*lM-oP0rS3uV6xY9
aB"dE%gH(jK+mN.pQ1sT4vW7yZ

Этот блок текста такой же, как приведенный ниже, но там, где n-й столбец вращается n раз вниз:

 !"#$%&'()*+,-./0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

Имейте в виду, что это задача для , поэтому формат вывода не является гибким.

Стьюи Гриффин
источник
1
Текст заканчивается на новой строке? В частности, нормально ли заканчиваться на '.... z \ n \ n`?
Тон Хоспел
2
@ Том нет, это должен быть максимум один завершающий перевод строки
Стьюи Гриффин
Является ли ведущий символ новой строки приемлемым?
Дом Гастингс
@DomHastings Нет, прости.
Стьюи Гриффин
(для многих языков (HTML, ///, Text, Bubblegum) жесткое кодирование этих 80 символов будет (предположительно, за исключением Bubblegum) самым коротким, что скучно, не делайте этого)
user202729

Ответы:

18

Java 8, 169 162 150 146 116 113 106 95 94 93 92 91 90 84 байта

Yay, мы наконец сделали это! Мы побили 88-байтовый вывод, который можно найти внизу. Спасибо всем, кто участвовал в игре в гольф!

v->{for(int i=0,t=0;++i<81;System.out.printf("%c",i%27<1?10:(4-t++%3)*32%97+i%27));}

-7 байт благодаря @StewieGriffin .
-42 байта благодаря @Neil .
-11 байт благодаря @PeterTaylor .
-3 байта благодаря @ OlivierGrégoire .
-6 байт благодаря @ OlivierGrégoire и @Neil (Оливье предложил порт ответа Нейла на JavaScript ).

Попробуйте онлайн.

Объяснение:

v->{                          // Method with empty unused parameter and no return-type
  for(int i=0,t=0;++i<81;     //  Loop from 1 to 81 (exclusive)
     System.out.printf("%c",  //   Print the following character:
      i%27<1?                 //    If it's the last column
       10                     //     Print a new-line
      :                       //    Else:
       (4-t++%3)*32%97+i%27   //     Print the correct character based on the index

Посмотрите здесь, что делает каждая из арифметических частей и как она заканчивается правильными символами.


Java 8, 88 байт

v->" bC#eF&hI)kL,nO/qR2tU5wX8z\nA!cD$fG'iJ*lM-oP0rS3uV6xY9\naB\"dE%gH(jK+mN.pQ1sT4vW7yZ"

Скучно, но использование намеченного поворота столбцов в Java точно не будет короче ... Я исправлен! Опубликует решение в любой момент, чтобы увидеть, сколько байтов оно отличается. Видимо, разница всего -4 байта! : D

Попробуйте онлайн.


Кевин Круйссен
источник
1
Основываясь на моем подходе CJam, я почти уверен, что должна быть достаточно простая арифметическая формула для кодовой точки в позиции (x, y), которая, скорее всего, превзойдет ваш 169-байтовый подход и, возможно, даже буквальную строку.
Мартин Эндер
1
116 байт: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;}
Нил
1
Гм, 95: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;}
Питер Тейлор
1
92 байта ( cполностью удалено )
Оливье Грегуар
4
@ OlivierGrégoire Java превосходит JavaScript? Что я сделал не так?
Нил
13

Шелуха , 13 байт

Tzṙṫ26¡m→"Aa 

Обратите внимание на завершающий пробел. Попробуйте онлайн!

объяснение

Tzṙṫ26¡m→"Aa   No input.
         "Aa   The string "Aa ".
      ¡        Iterate
       m→      map successor: ["Aa ","Bb!","Cc\"","Dd#",..
 z             Zip with
   ṫ26         the reversed range [26,25,24,..,1]
  ṙ            using rotation: [" Aa","b!B",..,"z9Z"]
               This also truncates the list to length 26.
T              Transpose, implicitly print separated by newlines.
Zgarb
источник
11

SPL (язык программирования Шекспира), 1679 1618 1600 байт

.
Ajax,.
Ford,.
Puck,.
Act I:.
Scene I:.
[Enter Ajax and Ford]
Ajax:
You are the remainder of the quotient between the sum of the remainder of the quotient between the product of me and a fat joy and the sum of the cube of a big red day and the difference between a red fat pig and a big old fat cow and the quotient between me and the sum of a day and the square of the sum of a joy and a big red day and the sum of a cat and a fat son.
[Exit Ajax]
[Enter Puck]
Ford:
Am I as good as nothing? If so, you are a bad big old red fat day. Am I as good as a joy? If so, you are the sum of a joy and a the cube of an old bad day. Am I as good as a big day? If so, you are the sum of the square of the sum of a big red fat cat and an old cow and the sum of an old war and a lie.
[Exit Ford]
[Enter Ajax]
Ajax:
You are the sum of thyself and the remainder of the quotient between me and the sum of a man and the square of the sum of a son and a big fat cow. Speak thy mind!
[Exit Puck]
[Enter Ford]
Ford:
You are the sum of yourself and a son.
Ajax:
You are the remainder of the quotient between me and the sum of a cat and the square of the sum of a cow and an old red sky.
Ford:
Am I as good as nothing? If so, let us proceed to scene III.
Scene II:.
Ajax:
You are the product of the sum of a fat man and a cow and the sum of a man and the square of the sum of a cat and a big red son. Are you not better than me? If so, let us return to act I. Let us proceed to scene IV.
Scene III:.
Ajax:
You are the sum of a big old fat cat and a red cow. Speak thy mind! Let us return to scene II.
Scene IV:.
[Exeunt]

У меня были некоторые проблемы с переводчиком ( https://github.com/drsam94/Spl ), так что он не такой маленький, как мне кажется. Но, по крайней мере, это работает :)


Вот та же логика в PHP, чтобы было немного проще увидеть, что происходит.

<?php

Act1Scene1:
$ford = ((2 * $ajax) % 52 + $ajax / 26) % 3;
if ($ford == 0) {
    $puck = 32;
}
if ($ford == 1) {
    $puck = 65;
}
if ($ford == 2) {
    $puck = 97;
}
$puck = $ajax % 26 + $puck;
echo chr($puck);

$ajax = $ajax + 1;

$ford = $ajax % 26;
if ($ford == 0) {
    goto Act1Scene3;
}

Act1Scene2:
if ($ajax < 78) {
    goto Act1Scene1;
}
goto Act1Scene4;

Act1Scene3:
$ford = 10;
echo chr($ford);
goto Act1Scene2;

Act1Scene4:
chocochaos
источник
4
Речи в этом звучат как сумасшедшая книга доктора Сьюза. : ^ D
DLosc
10

JavaScript (ES6), 86 75 байт

f=(i=k=0)=>i<80?String.fromCharCode(++i%27?(4-k++%3)*32%97+i%27:10)+f(i):''

Изменить: Сохранено 11 байтов благодаря @Ryan. Теперь на 10 байт короче, чем буквальный!

JavaScript (Node.js) , 64 байта

f=(i=k=0)=>i<80?Buffer([++i%27?(4-k++%3)*32%97+i%27:10])+f(i):''

Попробуйте онлайн! Спасибо @Ryan.

Нил
источник
2
Вы можете сэкономить 11 байтов с рекурсией: 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):''
Ry-
8

05AB1E , 17 15 байт

Сохранено 2 байта благодаря Эрику Аутгольферу

žQAuA)øε¼¾GÁ]ø»

Попробуйте онлайн!

объяснение

žQ                 # push the list of printable ascii characters
  Au               # push upper-case alphabet
    A              # push lower-case alphabet
     )ø            # zip
       ε           # apply to each
        ¼          # increment counter
         ¾G        # for N in [1 ... counter] do:
           Á       # rotate string right
            ]      # end loops
             ø     # zip
              »    # print list joined by newlines
Emigna
источник
@ Emigna Я чувствую, что εNдолжно быть вещь. Объединяет две идеи vyNFÁ])ø»и твои.
Волшебная Урна Осьминога
@MagicOctopusUrn: Да, я часто хотел Nво время использования ε. Технически это не подходит, поскольку εэто не цикл, хотя, поскольку мы иногда используем его как таковой, было бы неплохо иметь его.
Emigna
8

CJam (18 байт)

26{_" Aa"f+m>}%zN*

Онлайн демо

рассечение

Очевидный подход состоит в том, чтобы генерировать исходные линии, zip, вращать с ee::m>и zip back. Но ee::это довольно долго, и короче генерировать столбцы напрямую.

26{         e# For i = 0 to 25...
  _" Aa"f+  e#   Generate the unrotated column by offsets from the starting chars
  m>        e#   Rotate the appropriate distance
}%
zN*         e# Zip and join the rows with newlines
Питер Тейлор
источник
8

Python 2 , 72 байта

x=98
exec"r='';exec'r+=chr(x/3);x+=291*(x<180)-94;'*26;print r;x-=78;"*3

Попробуйте онлайн!

Это работает путем удаления 31.333..из предыдущего символа, добавления, 97когда предыдущая кодовая точка меньше 60, и вычитания 26в конце каждой строки.

прут
источник
8

R , 64 63 байта

cat(intToUtf8(c(32:57,10,65:90,10,97:122,10)[(0:80*55)%%81+1]))

Попробуйте онлайн!

-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), преобразовать в символы и распечатать.

user2390246
источник
отлично сработано! Я буду щедро вознаграждать это, хотя я действительно ожидал другого решения в диапазоне более 80 байт, так что я думаю, что увеличу награду до 100.
Джузеппе
@ Giuseppe Не беспокойся! Честно говоря, это скорее вызов, чем представитель.
user2390246
а, вы можете сохранить байт, используя 55вместо -26с -26 == 55(мод 81).
Джузеппе
@Giuseppe Спасибо за предложение и за щедрость!
user2390246
6

Japt , 17 15 байт

"@`"
;By@=cÄ é

Проверьте это онлайн!

объяснение

"@`"         The string "@`\x1F". The following newline sets U to this string.
;            Reset variables A-L to various values. B is set to
 B           the uppercase alphabet, which we only use to get a length of 26.
  y@         Map each column Z (initially just the letter itself) through this function:
     cÄ        Increment each char-code in U.
        é      Rotate by 1 character.
    =          Set U to the result to keep the chain going.
             This generates the 26 columns exactly how we needed them.
             Implicit: output result of last expression

7 других возможных 15-байтов:

;By@" Aa"c+Y éY
;ByÈpv)iSc+Y)éY
;ByÈ+v)iSc+Y)éY
;ByÈpv)iYd32)éY
;ByÈ+v)iYd32)éY
;ByÈpv)i32dY)éY
;ByÈ+v)i32dY)éY
ETHproductions
источник
5

CJam , 23 21 байт

3{26{_I-" aA"=+}/N}fI

Попробуйте онлайн!

объяснение

3{         e# For I from 0 to 2...
  26{      e#   For i 0 to 25...
    _I-    e#     Duplicate i and subtract I. This shifts the starting
           e#     character of each line left in the following string.
    " aA"= e#     Pick the character at the start of the unrotated line
           e#     of the current character. We basically just cycle
           e#     through non-letters, lower-case, upper-case, which is
           e#     the cycle throughout the result. Due to the I-, when
           e#     We get to the second line we start from A, and on the
           e#     third line we start from a.
    +      e#     Add i to the starting character to get the correct
           e#     column.
  }/
  N        e#   Push a linefeed.
}fI
Мартин Эндер
источник
3
Очень хорошее объяснение. Мне особенно нравится: «Нажми эту случайно выглядящую строку». : P
Стьюи Гриффин
2
@StewieGriffin извините, эта строка должна была уйти.
Мартин Эндер
5

MATL , 16 байт

1Y2tk9V:v26:l&YS

Попробуйте онлайн!

объяснение

1Y2     % Push 'AB...Z' (predefined literal)
t       % Duplicate
k       % Maker lowercase
9V      % Push 9, convert to string representation: gives char '9'
:       % Range. For chars, gives string from space to that
v       % Concatenate vertically. Gives a 3×26 char matrix
26      % Push 26
:       % Range. For numbers, gives numeric vector from 1 to that
l&YS    % Circularly shift each column of the first input (char matrix)
        % by the amount specified by the second input (numeric vector).
        % Implicitly display
Луис Мендо
источник
2
Хорошо :) Я все еще испытываю трудности, когда мне нужно изменить форматы функций ввода / вывода по умолчанию ... :(
Стьюи Гриффин,
1
ооо, очень хорошо с порядком строк, которые нужно использовать 1:26в качестве смены. Я должен попробовать это в моем ответе R ...
Джузеппе
1
@StewieGriffin Мета-функция &была отличным дополнением от идеи Суэвера :-)
Луис Мендо
@Giuseppe Да, это спасло байт :-)
Луис Мендо
5

Желе , 13 байт

26“ aA‘ẋs+ḶỌY

Попробуйте онлайн!

Как это работает

26“ aA‘ẋs+ḶỌY  Main link. No arguments.

26             Set the argument and the return value to 26.
  “ aA‘ẋ       Repeat [32, 97, 65] (code points of ' ', 'a', and 'A') 26 times.
        s      Split the result into chunks of length 26.
          Ḷ    Unlength; yield [0, ..., 25].
         +     Add [0, ..., 25] to each of the chunks.
           Ọ   Unordinal; cast all integers to characters.
            Y  Jojn, separating by linefeeds.
Деннис
источник
5

Perl 5 , 46 байт

print map{chr$n+++ord,$/x!($n%=26)}($",A,a)x26

Сохранено 13 байтов благодаря тайному волшебству @TonHospel !

Попробуйте онлайн!

Дом Гастингс
источник
Вы $i++просто , $_и вы можете использовать sayвместо printтак что это на самом деле50
Ton Hospel
Ммм, и {}на карте тоже легко избавиться от 49:say map$/x/26|52/.chr$_%26+(32,65,97)[$_%3],0..77
Тон Хоспель
@TonHospel Да, конечно! Благодарность!
Дом Гастингс
Перестройка цикла дает 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
Тон Хоспель
5

R , 88 86 байт

cat(intToUtf8(rbind(diffinv(matrix(c(66,-32,-31),25,5,T)[,1:3],,,t(c(32,65,97))),10)))

Попробуйте онлайн!

R ужасен при манипулировании строками, и хотя он имеет некоторые аккуратные встроенные матрицы, вращение - это еще одна вещь, которую он не делает очень легко. Я с радостью дам щедрость любому, кто может превзойти меня в гольф в R.

Несмотря на то, что я нашел более короткий ответ, я все же присваиваю награду в 50 повторений первому другому ответу R короче, чем 88 байтов.

Полагаю, я бы присудил себе награду, если бы мог, но это на два байта короче, чем «скучный» ответ! Я избегаю вращений, просто используя склонность R к переработке.

РЕДАКТИРОВАТЬ: user2390246 ответ полностью превзошел меня, и я буду награждать 100 баллов, так как это решение намного лучше.

Чтобы добраться сюда, я деконструировал желаемый вывод в их кодовые точки ASCII с помощью utf8ToInt(удаляя новые строки), строил матрицу и запускал diffих, получая различия по столбцам. Отмечая там периодичность, я решил построить матрицу в гольфе, надеясь использовать ее diffinvдля воссоздания оригинала.

Благодаря периодичности мы можем воссоздать diffматрицу ed, заставив R перезапускать с кратной длиной, и извлечь столбцы, которые мы на самом деле хотели:

matrix(c(66,-32,-31),25,5,T)[,1:3]

Затем мы инвертируем этот процесс, с помощью которого diffinvвоссоздаем кодовые точки, добавляем строку 10(новые строки) в конец, снова преобразуем в ASCII с intToUtf8и получаем catрезультат.

Giuseppe
источник
3
Вы можете дать себе награду. Щедрость обойдется вам в x повторений, и вы получите от нее x повторений ... Итак, считайте, что это сделано!
Стьюи Гриффин
5

Stax , 14 12 байт

ü≤▐éh╢%╠£┐3]

Запустите и отладьте его

Распакованный, размазанный и прокомментированный, это выглядит так.

3R26        push [1,2,3] and 26
K           cross-map using the rest of the program, printing lines implicitly
            this instruction maps over a cartesian join
  -         subtract
  " Aa"@    index into " Aa" using the subtraction result
  i+        add the iteration index

Запустите этот

Эта программа использует только те функции, которые были доступны с момента первого выпуска Stax, но, по-видимому, я забыл о Kкросс-карте, когда первоначально писал этот ответ.

Об этом ответе следует отметить одну очень интересную вещь R: это ненужная инструкция, потому что Kнеявно превращает целые числа в диапазоны. Однако нет никакого способа нажать 3и 26без некоторого дополнительного байта между ними.

рекурсивный
источник
4

PowerShell , 53 байта

0..2|%{-join(32..57|%{[char]($_+(0,65,33)[$j++%3])})}

Попробуйте онлайн!

Я вижу, что это похоже на ответ Dom's Perl, но я пришел к нему независимо.

Это использует тот факт, что шаблон работает Symbol - Lowercase - Capitalдаже при переносе новых строк ( 8 - z - Aнапример) и, таким образом, просто добавляет соответствующее смещение (выбранное с помощью $j++%3) к текущему числу, $_прежде чем -joinобъединить их в одну строку. Это сделано три раза, чтобы придумать три строки (сохранение $jмежду итерациями). Эти три строки остаются на конвейере, и неявные Write-Outputдают нам новые строки бесплатно.

AdmBorkBork
источник
4

Юлия 0,6 , 79 байт

println.([prod([' ':'9' 'A':'Z' 'a':'z'][n,mod1(i-n,3)] for n=1:26) for i=2:4])

[' ':'9' 'A':'Z' 'a':'z']это необращенный 2-мерный массив символов, [n,mod1(i-n,3)]индексирующий в этот массив с соответствующим вращением. prodпереводит вектор символов в строку (поскольку для объединения строк используется умножение). Есть два вложенных вектора понимания, в результате чего вектор, содержащий 3 строки, затемprintln. печатается каждая строка в векторе, за которой следует новая строка.

TIO не хватает соответствующего метода для умножения (с prod ) двух символов для получения строки. Я знаю, что этот метод был добавлен несколько недавно, но версия TIO, похоже, совпадает с версией на моем ПК, где работает этот код, поэтому я не могу полностью объяснить, почему он не работает на TIO.

Пример копирования вставки ( ;необязательно, он просто подавляет дополнительный вывод в REPL):

julia> println.([prod([' ':'9' 'A':'Z' 'a':'z'][n,mod1(i-n,3)] for n=1:26) for i=2:4]);
 bC#eF&hI)kL,nO/qR2tU5wX8z
A!cD$fG'iJ*lM-oP0rS3uV6xY9
aB"dE%gH(jK+mN.pQ1sT4vW7yZ
GGGG
источник
4

Древесный уголь , 26 21 15 байт

E³⭆⧧⟦γαβ⟧⁻κμμ

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

 ³              Literal 3
E               Map over implicit range
   β            Lowercase letters
  ⭆             Map over characters and concatenate
            κ   Outer index
             μ  Inner index
           ⁻    Subtract
       γ        Printable characters
        α       Uppercase letters
         β      Lowercase letters
     §⟦   ⟧     Circularly index into list (selects one of the three strings)
              μ Inner index
    §           (Circularly) index into string
                Implicitly print each inner map result on a separate line
Нил
источник
4

J , 29, 27 25 байт

-2 байта благодаря FrownyFrog -2 байта благодаря милям

 |:u:(<26)2&(|.>:)32 65 97

Попробуйте онлайн!

Исходный подход: J , 29 байт

u:(-|."_1&.|:32 65 97+/])i.26

Пояснение: i.26- диапазон 0-26

   i.26
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

32 65 97+/] - создать 3-х рядную таблицу для персонажей

   32 65 97+/i.26
32 33 34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57
65 66 67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

&.|: перенести затем сделать следующий глагол (|. ) и снова транспонировать

-|."_1 вращать каждую строку n раз

     (-i.26)|."_1|:32 65 97+/i.26
 32  65  97
 98  33  66
 67  99  34
 35  68 100
101  36  69
 70 102  37
 38  71 103
104  39  72
 73 105  40
 41  74 106
107  42  75
 76 108  43
 44  77 109
110  45  78
 79 111  46
 47  80 112
113  48  81
 82 114  49
 50  83 115
116  51  84
 85 117  52
 53  86 118
119  54  87
 88 120  55
 56  89 121
122  57  90

u: конвертировать в юникод

    u:(-i.26)|."_1&.|:32 65 97+/i.26
 bC#eF&hI)kL,nO/qR2tU5wX8z
A!cD$fG'iJ*lM-oP0rS3uV6xY9
aB"dE%gH(jK+mN.pQ1sT4vW7yZ

Попробуйте онлайн!

Гален Иванов
источник
@FrownyFrog Спасибо! По-видимому, я не проверял возможность создания матрицы по столбцам.
Гален Иванов
2
|:u:(<26)2&(|.>:)32 65 97экономит 2 байта.
миль
@Miles Спасибо за отличный код!
Гален Иванов
4

C 70 69 67 60 64 байта

i;f(t){for(i=t=0;++i<81;putchar(i%27?(4-t++%3)*32%97+i%27:10));}

+4 байта, чтобы сделать функцию многоразовой .

Неверный 60-байтовый ответ, который нельзя использовать повторно:

i,t;f(){for(;++i<81;putchar(i%27?(4-t++%3)*32%97+i%27:10));}

Порт моего ответа Java 8 @Neil 's JavaScript answer .

Попробуйте онлайн.

Кевин Круйссен
источник
Поскольку функции должны быть многократно используемыми, и эта функция не завершается корректно, она оставляет глобальные переменные позади. Вам нужен i=t=0.
Джонатан Фрех
@JonathanFrech Исправлено
Кевин Круйссен
3

APL + WIN, 26 байт

Индекс происхождения 0

⎕av[(-⍳26)⊖32 65 97∘.+⍳26]

Создайте матрицу целочисленных значений индекса символов в атомном векторе APL.

Поверните каждый столбец вниз на его числовое значение.

Используйте полученные индексы для отображения символов атомного вектора.

Грэхем
источник
3

Вим, 81 79 байтов

a !"#$%&'()*+,-./0123456789␛:h<_␍jjYZZpPgU$klqq"aDjlma"bD"ap`ajD"bpkkp`akl@qq@q

Пояснение (упрощенно)

a !"#$%&'()*+,-./0123456789␛    Insert the first line
:h<_␍jjYZZpPgU$                  Insert the alphabet twice by copying it from the help page
klqq                             Define the loop `q`:
"aDjl                             Cut the rest of the line to `a`
ma"bD"ap                          Replace the rest of the second line (cut `b`, paste `a`)
`ajD"bp                           Replace the rest of the third line (cut `c`, paste `b`)
kkp                               Paste `c`
`akl@qq@q                        Run the loop, each time one more step to the right
Герман Л
источник
3

C 72 байта

f(k,x,n){for(n=81;n;putchar(x?k*32+59-x-!k:10))x=--n%27,k=(3+x-n/27)%3;}
anatolyg
источник
3

бред , 121 115 байт

+++[[<+>>++<-]>]<<[-<->]<+<+<----<++<[->>-<<]<[>>[>.[->>>+<<<]>[+[-<+>]>]<<<<<<+>-]<[->+>[->]<<<<<]++++++++++.,<--]

Спасибо @JoKing за сохранение 6 байтов!

Попробуйте онлайн!

Деннис
источник
115 байтов , возиться с генерацией чисел
Джо Кинг,
2
+++[[<+>>++<-]>]действительно начало всего, а? Благодарность!
Деннис
3

Japt , 17 байт

26Æ" Aa"c+X éX÷y

Попробуй это


объяснение

26Æ           Ã       :Create the range [0,26) and pass each X through a function
   " Aa"              :  String literal
        c+X           :  Add X to the codepoint of each character
            éX        :  Rotate right X times
               ·      :Join with newlines
                y     :Transpose
мохнатый
источник
Оооо, у меня было другое решение, которое может или не может быть достаточным для отдельного ответа:;Bå_cÄ é}"@`" ·y
ETHproductions
Ну, теперь, когда мы одной длины, я чувствую себя лучше ;-)
ETHproductions
@ETHproductions: выглядит для меня достаточно по-другому :) Собирался посмотреть, смогу ли я придумать более короткое решение, составив карту Cпосле обеда. Не знаю, как yи ·закончил в ту сторону; Должно быть, я Ctrl+Zслишком много раз Ctrl+Aредактировал, прежде чем я !
Лохматый
2

K4 , 38 байт

Решение:

-1"c"$+(-t).q.rotate'32 65 97+/:t:!26;

Пример:

q)k)-1"c"$+(-t).q.rotate'32 65 97+/:t:!26;
 bC#eF&hI)kL,nO/qR2tU5wX8z
A!cD$fG'iJ*lM-oP0rS3uV6xY9
aB"dE%gH(jK+mN.pQ1sT4vW7yZ

Объяснение:

9 символов для выполнения вращения ...

-1"c"$+(-t).q.rotate'32 65 97+/:t:!26;
-1                                   ; / print to stdout, swallow return
                                  !26  / til 26, 0..25
                                t:     / save as variable t
                             +/:       / add each right item to...
                     32 65 97          / the list 32, 65, 97 (ASCII offsets)
           .q.rotate'                  / rotate each-both
       (-t)                            / negate, 0..-25
      +                                / flip rows and columns
  "c"$                                 / cast to characters
streetster
источник
2

Perl, 49 46 байт

perl -E 'say map chr($_*55%81)=~y// -:A-Z             
a-z       
/cr,0..79'

или

perl -E 'say grep{$_=chr$_*55%81;y// -:A-Z             
a-z       
/c}0..79'
Тон Хоспел
источник
+1! Я не могу помочь вам сохранить какие-либо байты обратно, но я подумал об использовании $^x8, но не могу придумать другой var с достаточной длиной, возможно, "@INC"но он слишком длинный и использует "@-"вместо $n++, но все же, той же длины. Разве это не поможет вам сократить это дальше? Разве вы не добавили -pфлаг и получили неявный вывод?
Дом Гастингс
1
@DomHastings Ах, нашел способ зацикливаться без особой подготовки
Тон Хоспел