Дуже довга Терза Ріма


38

Опис

Виведіть схему римування для дуже довгої Терза-Рими.

Вхідні дані

Немає.

Вихідні дані

ABA
BCB
CDC
DED
EFE
FGF
GHG
HIH
IJI
JKJ
KLK
LML
MNM
NON
OPO
PQP
QRQ
RSR
STS
TUT
UVU
VWV
WXW
XYX
YZY

Правила

Ви можете вибрати між розділеннями строф пробілами або новими рядками, так що:

ABA BCB...

АБО

ABA
BCB
...

Дозволено одне пробільне проміжне місце на рядок та дозволено один зворотний новий рядок.

Вихід може бути великим або малим.

Це , тому найкоротший код у байтах для кожної мови виграє.


4
Чи добре список списку рядків?
повністюлюдсько

6
На думку en.wikipedia.org/wiki/Terza_rima, ваше закінчення неправильне. Він повинен закінчуватися або Z, або ZZ.
Кріс

Чи може бути додатковий вихід поза схемою римування? Це може врятувати мене кілька байт.
NK1406

@ NK1406 Не шкода.
LiefdeWen

1
@totallyhuman String масив добре.
LiefdeWen

Відповіді:


24

JavaScript (ES6), 51 50 49 байт

Збережено 1 байт завдяки @ l4m2

f=(n=45358)=>n%63?f(n-1333)+n.toString(36)+' ':''

Спробуйте в Інтернеті!

Як?

Почнемо з n = 45358 ( yzy в базі-36). Віднімаємо 1333 з n при кожній ітерації ( 111 в базі-36). Ми зупиняємось, як тільки n MOD 63 = 0 , тому що 12033 ( 9a9 в базі-36) є першим значенням, для якого виконується ця умова, а 63 - найменший модуль з такою властивістю.

Decimal | Base-36 | MOD 63
--------+---------+-------
  45358 |   yzy   |   61
  44025 |   xyx   |   51
  42692 |   wxw   |   41
  41359 |   vwv   |   31
  40026 |   uvu   |   21
  38693 |   tut   |   11
  37360 |   sts   |    1
  36027 |   rsr   |   54
  34694 |   qrq   |   44
  33361 |   pqp   |   34
  32028 |   opo   |   24
  30695 |   non   |   14
  29362 |   mnm   |    4
  28029 |   lml   |   57
  26696 |   klk   |   47
  25363 |   jkj   |   37
  24030 |   iji   |   27
  22697 |   hih   |   17
  21364 |   ghg   |    7
  20031 |   fgf   |   60
  18698 |   efe   |   50
  17365 |   ded   |   40
  16032 |   cdc   |   30
  14699 |   bcb   |   20
  13366 |   aba   |   10
  12033 |   9a9   |    0

Як ви вирішили базу36? і ви впевнені в його оптимальності?
LiefdeWen

2
@LiefdeWen Це найнижча база, яка містить усі літери, тому вона оптимальна.
Ерік Атголфер

@ user202729 Що ти маєш на увазі? Він не ОП, тож він один із тих людей, яких ви посилаєтесь?
Ерік Аутгольфер

17
Як (не) цікавий бічний вузол, 1333 = 666 * 2 + 1, і це моя 666-я відповідь на PPCG.
Арнольд

3
@Arnauld, будь ласка, переконайтеся, що ви використовуєте значення 1335 десь у своїй наступній відповіді.
IanF1

15

C (gcc) , 41 байт

f(i){for(i='ABA';i%29;i+=65793)puts(&i);}

Спробуйте в Інтернеті!

Виправлено та -9 завдяки користувачу202729 . -1 дякую Деннісу і -2 завдяки Арнолду .



1
(i='ABA';i<'ZZZ';i+=65793)зберігає байт.
Денніс

Використовувати 59e5замість 'ZZZ'збереження іншого байта.
користувач202729

Ви можете використовувати i%29для 41 байт
Arnauld


9

мозковий ебать , 51 48 байт

Збережено 3 байти завдяки @ovs.

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

Спробуйте в Інтернеті!

Пояснення

INITIALIZE TAPE:

0000:           (none)
0001: C_NEWLINE (10)
0002: V_COUNT   (25)
0003: V_ALPHA   (64)
++++++++[>+>+++>++++++++<<<-]>++>+

V_COUNT TIMES:              [-
    INCREMENT V_ALPHA         >+
    PRINT V_ALPHA             .
    PRINT V_ALPHA PLUS ONE    +.
    PRINT V_ALPHA             -.
    PRINT C_NEWLINE           <<.
END LOOP                    >]

@ ConorO'Brien - Я щойно помітив, що моя відповідь досить схожа на вашу. Будь ласка, не соромтесь коментувати, якщо ви вважаєте, що це занадто близько, і я його видалю.
ElPedro

1
@ElPedro Ні, ти все добре, в цьому виклику мало місця для інновацій :)
Conor O'Brien

9

05AB1E , 5 байт

Aü«€û

Спробуйте в Інтернеті!

-1 байт завдяки Emigna
-1 байт завдяки зміні правила; завдяки kalsowerus за те, що вказав на це

Хе-хе, в даний час б'є Піта. \ o /

Пояснення

Aü«€û»  Full Program
A       Lowercase Alphabet
 ü«     Pairwise with merge-list
   €û   For each, palindromize

Ви могли зробитиAü«€û»
Емінья

@Emigna О здорово, спасибі! : D
HyperNeutrino

Приємно, це я теж отримав, не дивлячись.
Чарівна восьминога урна

Згідно з коментарями, список рядків відмінний як вихід, ви можете видалити об'єднання.
kalsowerus

9

мозковий ебать , 51 49 байт

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

Спробуйте в Інтернеті!

Спроба пояснення ...

+++++                     #Put 5 in cell 0 because that is the highest common denominator of 10, 65 and 25
[                         #Start loop
>+++++                    #Counter in cell 1 is 25 (How many lines we must print)
>+++++++++++++            #Counter in cell 2 is 65 (ASCII A)  
>++                       #Counter in cell 3 is 10 (Newline)
<<<-]                     #Decrement the outer counter until the cells have the right values (muliples of 5).
>                         #Move to the counter that says how many lines we must print.
[>.                       #Print the character in cell 2
+.                        #Add one to the character in cell 2 and print it
-.                        #Subtract one from the character in cell 2 and print it
+                         #Add one to the character in cell 2 for the next loop
>.                        #Print a new line
<<-]                      #Decrement cell 1 and run again until cell 1 is 0

-2 завдяки @ovs

Моя перша спроба обдурити мозг, тому будь-які натяки були вдячні. Якби я був більш досвідчений з цим, то я впевнений, що міг би поголити ще декілька байтів, але я ввійшов у нього лише вчора.






6

Мозок-Флак , 90 байт

((((()()()){}){}){}()){(({})<((({}((((()()()()){}){}){}){})())[()])((()()()()()){})>[()])}

Спробуйте в Інтернеті!

Однією з причин цього є коротша, ніж інша відповідь, що відповідає мозку, оскільки вона використовує великі регістри замість малих символів, які мають менші значення ASCII, і тому їх легше натиснути.

Пояснення:

#Push 25
((((()()()){}){}){}())

#While true
{

    #Keep track of the number on top of the stack...
    # We'll call it 'a'
    (({})

        #Push A +...
        <((({}

        # 64 (push)
        ((((()()()()){}){}){}){})
        # + 1 (push)
        ())
        # - 1 (push)
        [()])

        # Push 10
        ((()()()()()){})>

    # Now that's all pushed, we push a - 1 to decrement the loop counter
    [()])

# Endwhile
}

Я пишу першу версію і не отримую жодних заявок, ви пишете версію для гольфу і отримуєте +5. ???
Крістофер

5

R, 51 47 байт

L=LETTERS;cat(sprintf("%s%s%1$s",L[-26],L[-1]))

Вихід:

> L=LETTERS;cat(sprintf("%s%s%1$s",L[-26],L[-1]))
ABA BCB CDC DED EFE FGF GHG HIH IJI JKJ KLK LML MNM NON OPO PQP QRQ RSR STS TUT UVU VWV WXW XYX YZY

Наївний спосіб без фантазії sprintf- 49 байт
Джузеппе

@Giuseppe це було б тому, що я неправильно використовував sprintf:)
plannapus

Гаразд, але я знайшов 40 байт :)
Джузеппе

@Giuseppe ouch :)
plannapus

1
інший [40 байт] [ tio.run/##K/r/… на основі перетворення кодів ASCII, у випадку
NofP

5

Java 8 , 132 85 62 60 байт

  • 47 байт завдяки Нілу
  • 26 байт завдяки Оліверу
  • 3 байти та набагато краще форматування завдяки Кевіну
  • Помилка, виправлена ​​Олівером

Гольф

a->{for(char i=64;++i<90;)System.out.println(""+i+++i--+i);}

Безумовно

public class TerzaRima {
    interface A{
        void a(String a);
    }
    static A a = a -> {
        for (char i = 64; ++i < 90; ) System.out.println("" + i++ + i-- + i);
    };
    public static void main(String[] args){
        a.a(null);
    }
}

1
Друк масиву char, можливо, буде набагато коротшим.
Ніл

1
Можете чи ви зробити теж? ichar
Ніл

2
a->{for(char c=64;++c<90;)System.out.println(""+c++ +c--+c);}(62 байти)
Олів'є Грегоар

2
Наразі це фрагмент замість функції чи програми, тому вам доведеться додати те, v->{...}як згадувало вище @ OlivierGrégoire. ( Якщо ви не знаєте, як працюють лямбди Java 8, я вже раніше робив пояснення. ) Також ви можете зняти дужки петлі, як це робив Олів'є, і в якості додаткового гольфу ви можете змінити друк на System.out.print(" "+i+++i--+i);(пробіл замість цього нового рядка, і вам не потрібно місця в c+++c--+c). Спробуйте тут.
Кевін Круїссен

1
Дякую @KevinCruijssen за поради, а також документ java lambdas. Це було дуже просто слідувати керівництву, щоб реалізувати кілька простих лямбда. Я відповідно оновив!
DevelopingDeveloper




4

мозковий ебать , 41 байт

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

Спробуйте в Інтернеті!


+1 Я дотримуюсь більшості, але це починається з - [Чи означає це, що ви встановлюєте клітинку 0 до -1 перед запуском циклу? Будь-який шанс пояснити новобранця, якщо у вас є час? До речі, дякую за -2 за мої зусилля.
ElPedro

@ElPedro це залежить від інтерпретатора brainfuck, перекладач на tio.run зберігає неподписані 8-бітові числа у кожній комірці, тому перша комірка отримує 255 перед циклом.
ов

@ElPedro сегмент ініціалізації фактично генерується BF-Crunch .
ов

4

мозковий ебать , 45 37 байт

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

Спробуйте в Інтернеті!

Друкується великими літерами, розділеними пробілами з пробілом.

Як це працює:

+[[<+>>++<-]>] Intialises the tape with the format n^2
               1 2 4 8 16 32 64 128 0 0'
<<---          Navigates to the desired section and tweaks the counter
               1 2 4 8 16 32 64 125<
[-----<+.+.-.<.>>] Prints the Terza Rima, using:
                 125 as the loop counter (decremented by 5 each loop)
                 64 as the current alphabetic character (incremented and printed each loop)
                 32 as the space character

1
Це насправді дуже приємно! Хороша робота!
Пил





3

Haskell , 28 байт

[[x,succ x,x]|x<-['A'..'Y']]

Спробуйте в Інтернеті!

succ такий невдалий вибір імен ...

Пояснення

[[x,succ x,x]|x<-['A'..'Y']]

[            |x<-          ]  -- for x in...
                 ['A'..'Y']   -- the alphabet sans Z
 [x,succ x,x]                 -- construct a string of x, the successor of x and x

4
Я не вважаю, що цілком справедливо повертати список рядків, а не розділяти їх пробілом чи новою лінією, як потрібно.
користувач28667

@ user28667 Зазвичай це дозволено у викликах (це, мабуть, має бути на посаді IO за замовчуванням, якщо його ще немає). На цей виклик ОП ще не відповідає. Це, однак, не є підставою для спростування.
повністюлюдський

@totallyhuman На даний момент виклик прямо вказує, що для розділення виводу слід використовувати або пробіли, або нові рядки, тому ця відповідь наразі є недійсною. Так суворо за правилами сайту, його слід видалити або просто виправити, попередньо встановивши a unlinesабо unwords.
Laikoni

@Laikoni Здається, я тебе ніндзя. Завдання прямо не заперечує список рядків як вихід. (Плюс це може призвести до недійсності неабиякої кількості відповідей.) У будь-якому випадку відповідь зараз не є недійсною.
повністюлюдський

3

R , 40 байт

cat(intToUtf8(rbind(x<-65:89,x+1,x,10)))

Спробуйте в Інтернеті!

Ще одна альтернатива в R для Планапуса і Джузеппе . Опубліковано відповідно до їх запиту. Це рішення використовує ASCII-код для кодування UTF8.

PS, якщо дозволено TAB, можна замінити новий рядок (ASCII код 10) табличним (ASCII код 9), і рішення може скоротитися до 39 байт:

cat(intToUtf8(rbind(x<-65:89,x+1,x,9)))


Я думаю, що використовувати 9це цілком чудово, оскільки це пробіл, який дозволений ОП.
Джузеппе


3

PowerShell , 39 37 байт

65..89|%{-join[char[]]($_,++$_,--$_)}

Спробуйте в Інтернеті!

Петлі від 65до 89. Кожну ітерацію ми будуємо цілий масив (поточний, ще один і поточний) поточної цифри, використовуючи попереднє збільшення та попереднє зменшення. Потім це повторно charпередається у вигляді- масиву та -joinоб'єднується в єдиний рядок. Кожна рядок залишається на конвеєрі, і неявна Write-Outputпри завершенні програми надає нам новий рядок між кожним елементом безкоштовно.


Крім того, кількість байтів

65..89|%{-join[char[]]($_,($_+1),$_)}

Спробуйте в Інтернеті!


1
($_,($_+1),$_)- альтернативний кортеж однакової довжини
Веска



2

Пепе, 59 56 байт

-3 байти завдяки u_ndefined

REeEeEEeEerEeEeeeeeERrEEEEErEEEeeREEreeerEEEEEeeEreeERee

Спробуйте в Інтернеті!

Пояснення:

# Prepare stacks

  # prepare stack R [Z]
  REeEeEEeEe  # push Z

  # prepare stack r [A,B,A]
  rEeEeeeeeE  # push A
  RrEEEEE     # copy and increment A (getting B)
  rEEEee      # duplicate A to end

# Start loop
REE           # create label Z

  reee        # output stack r contents
  rEEEEEeeE   # increment all

  reeE        # end line

Ree           # loop while r[p] != Z

1
Заміна rEeEeeeeEeз RrEEEEEекономить від 3 байта
u_ndefined

@u_ndefined Дякую! Я зробив цей код до того, як прапори були додані Пепе. Оновлено відповідь.
RedClover

1

Сітківка , 24 байти


ABA
;{:G`
T`_p`p`[^Y]..

Спробуйте в Інтернеті!


21 байт, але страждає від перенесення нових рядків ...
Ніл

@Neil Так, вам це навіть не потрібно `.... Позбавлення від цих слідів нового рядка насправді дратує. Я сподіваюся зробити друк у циклах трохи гнучкішим та зручнішим у Retina 1.0.
Мартін Ендер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.