Bardzo długa Terza Rima

38

Opis

Wyjście schematu wierszy dla bardzo długiej Terza Rima.

Wkład

Żaden.

Wydajność

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

Zasady

Możesz wybierać między oddzielającymi zwrotkami za pomocą białych znaków lub znaków nowej linii, więc albo:

ABA BCB...

LUB

ABA
BCB
...

Dozwolona jest jedna końcowa spacja na linię i jedna końcowa nowa linia.

Dane wyjściowe mogą być wielkie lub małe.

To jest , więc wygrywa najkrótszy kod w bajtach dla każdego języka.

LiefdeWen
źródło
4
Czy lista linii jest w porządku?
całkowicie ludzki,
6
Według en.wikipedia.org/wiki/Terza_rima twoje zakończenie jest złe. Powinien kończyć się na Z lub ZZ.
Chris
Czy może istnieć dodatkowa wydajność poza schematem wierszyków? To może zaoszczędzić mi kilka bajtów.
NK1406,
@ NK1406 Nie przepraszam.
LiefdeWen
1
@totallyhuman Tablica ciągów jest w porządku.
LiefdeWen,

Odpowiedzi:

24

JavaScript (ES6), 51 50 49 bajtów

Zapisano 1 bajt dzięki @ l4m2

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

Wypróbuj online!

W jaki sposób?

Zaczynamy od n = 45358 ( yzy w bazie 36). Odejmujemy 1333 od n przy każdej iteracji ( 111 w podstawie 36). My wyłączony w chwili n MOD 63 = 0 , ponieważ 12033 ( 9a9 w bazie-36) ma pierwszą wartość, dla której ten warunek jest spełniony, i 63 jest najmniejsza modulo z taką właściwość.

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
Arnauld
źródło
Jak zdecydowałeś base36? i czy jesteś pewien, że jest optymalny?
LiefdeWen,
2
@LiefdeWen Jest to najniższa baza, która zawiera wszystkie litery, więc jest optymalna.
Erik the Outgolfer,
@ user202729 Co masz na myśli? On nie jest OP, więc jest jedną z tych osób, o których mówisz?
Erik the Outgolfer,
17
Jako (nie) interesujący węzeł boczny, 1333 = 666 * 2 + 1 i to jest moja 666 odpowiedź na PPCG.
Arnauld,
3
@Arnauld, upewnij się, że użyjesz wartości 1335 gdzieś w następnej odpowiedzi.
IanF1,
15

C (gcc) , 41 bajtów

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

Wypróbuj online!

Naprawiono i -9 dzięki user202729 . -1 dzięki Dennisowi i -2 dzięki Arnauldowi .

Pan Xcoder
źródło
45 bajtów .
user202729,
1
(i='ABA';i<'ZZZ';i+=65793)zapisuje bajt.
Dennis
Użyj 59e5zamiast 'ZZZ'zapisuje kolejny bajt.
user202729,
Można użyć i%29do 41 bajtów
Arnauld
10

Galaretka , 7 bajtów

ØAṡ2ŒBY

Wypróbuj online!

-1 bajt dzięki Dennisowi

ØAṡ2ŒBY  Main Link
ØA       Alphabet
  ṡ2     Slice into overlapping slices of length 2
    ŒB   Palindromize (bounce) each
      Y  Join by newlines
HyperNeutrino
źródło
9

pieprzenie mózgu , 51 48 bajtów

Zaoszczędzono 3 bajty dzięki @ovs.

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

Wypróbuj online!

Wyjaśnienie

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                    >]
Conor O'Brien
źródło
@ ConorO'Brien - Właśnie zauważyłem, że moja odpowiedź jest bardzo podobna do twojej. Skomentuj, jeśli uważasz, że jest za blisko, a ja go usunę.
ElPedro,
1
@ElPedro Nie, wszystko w porządku, w tym wyzwaniu nie ma zbyt wiele miejsca na innowacje :)
Conor O'Brien
9

05AB1E , 5 bajtów

Aü«€û

Wypróbuj online!

-1 bajt dzięki Emignie
-1 bajt dzięki zmianie reguły; dzięki kalsowerusowi za zwrócenie na to uwagi

Hehe, obecnie bije Pytha. \ o /

Wyjaśnienie

Aü«€û»  Full Program
A       Lowercase Alphabet
 ü«     Pairwise with merge-list
   €û   For each, palindromize
HyperNeutrino
źródło
Mógłbyś zrobićAü«€û»
Emigna,
@Emigna O cool, dzięki! : D
HyperNeutrino,
Fajnie, to też mam bez patrzenia.
Magic Octopus Urn
Zgodnie z komentarzami, lista ciągów jest w porządku, ponieważ dane wyjściowe można usunąć.
kalsowerus,
9

pieprzenie mózgu , 51 49 bajtów

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

Wypróbuj online!

Próba wyjaśnienia ...

+++++                     #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 dzięki dzięki @ovs

Moja pierwsza próba pieprzenia mózgu, więc wszelkie wskazówki otrzymane z wdzięcznością. Gdybym był z tym bardziej doświadczony, to jestem pewien, że mógłbym zgolić jeszcze kilka bajtów, ale dostałem się dopiero wczoraj.

ElPedro
źródło
-1 bajt
Jo King
7

APL (Dyalog) , 14 bajtów

250 1 03/⍪⎕A

Wypróbuj online!

Należy pamiętać, że dodane ⎕←jest, aby TIO wyprowadzało tekst i zwykle nie jest wymagane.

Erik the Outgolfer
źródło
7

Python 2 , 42 41 bajtów

-1 bajt dzięki Halvardowi Hummelowi

i=65;exec"print'%c'*3%(i,i+1,i);i+=1;"*25

Wypróbuj online!

Pręt
źródło
6

Węgiel drzewny , 11 bajtów

E²⁵✂αι⁺²ι‖O

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

 ²⁵         Literal 25
E           Map over implicit range
    α       Predefined uppercase letters
   ✂ ι⁺²ι   Slice 2 characters
            Implicitly print result on separate lines
         ‖O Reflect with overlap
Neil
źródło
6

Brain-Flak , 90 bajtów

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

Wypróbuj online!

Jednym z powodów, dla których jest on krótszy niż w przypadku innej odpowiedzi polegającej na uderzeniu mózgu, jest to, że używa wielkich liter zamiast małych liter, które mają mniejsze wartości ASCII i dlatego są łatwiejsze do przesunięcia.

Wyjaśnienie:

#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
}
DJMcMayhem
źródło
Piszę pierwszą wersję i nie dostaję głosów pozytywnych, piszesz wersję golfową i dostajesz +5. ???
Christopher,
5

R, 51 47 bajtów

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

Wydajność:

> 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
plannapus
źródło
Naiwny sposób bez fantazji sprintfto 49 bajtów
Giuseppe,
@Giuseppe, to byłoby dlatego, że nie sprintf
użyłem
OK, ale znalazłem 40 bajtów :)
Giuseppe
@Giuseppe ouch :)
plannapus
1
inny [40 bajtów] [ tio.run/##K/r/… oparty na konwersji kodów ASCII, w przypadku
NofP
5

Java 8 , 132 85 62 60 bajtów

  • 47 bajtów dzięki Neilowi
  • 26 bajtów dzięki Oliverowi
  • 3 bajty i znacznie lepsze formatowanie dzięki Kevinowi
  • Błąd naprawiony przez Olivera

Grał w golfa

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

Nie golfił

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);
    }
}
DevelopingDeveloper
źródło
1
Wydrukowanie tablicy znaków byłoby prawdopodobnie znacznie krótsze.
Neil,
1
Można dokonać też? ichar
Neil,
2
a->{for(char c=64;++c<90;)System.out.println(""+c++ +c--+c);}(62 bajty)
Olivier Grégoire,
2
Obecnie jest to fragment kodu zamiast funkcji lub programu, więc musisz dodać v->{...}jak wspomniano powyżej przez @ OlivierGrégoire. ( Jeśli nie wiesz, jak działają lambdy Java 8, już raz wytłumaczyłem ) . Możesz także usunąć nawiasy pętli, jak zrobił to Olivier, a jako dodatkowy golf możesz zmienić nadruk na System.out.print(" "+i+++i--+i);(zamiast tego spację nowej linii i nie potrzebujesz miejsca w c+++c--+c). Wypróbuj tutaj.
Kevin Cruijssen,
1
Dzięki @KevinCruijssen za wskazówki, a także dokument java lambdas. To był bardzo łatwy do naśladowania przewodnik po implementacji prostych lambd. Zaktualizowałem odpowiednio!
DevelopingDeveloper
4

pieprzenie mózgu , 41 bajtów

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

Wypróbuj online!

ovs
źródło
+1 I śledzę większość, ale zaczyna się od - [Czy to oznacza, że ​​ustawiasz komórkę 0 na -1 przed uruchomieniem pętli? Czy jest jakaś szansa na wyjaśnienie nowicjusza, jeśli masz czas? Btw, dzięki za -2 za mój wysiłek.
ElPedro,
@ElPedro zależy to od tłumacza pieprzenia mózgu, interpreter w tio.run przechowuje niepodpisane 8-bitowe liczby w każdej komórce, więc pierwsza komórka dostaje 255 przed pętlą.
ovs
@ElPedro segment inicjujący jest generowany przez BF-Crunch .
ovs
4

pieprzenie mózgu , 45 37 bajtów

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

Wypróbuj online!

Drukuje wielkimi literami, oddzielając je spacjami z końcowymi spacjami.

Jak to działa:

+[[<+>>++<-]>] 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
Jo King
źródło
1
To jest naprawdę bardzo miłe! Dobra robota!
Pył
3

Brain-Flak , 180 bajtów

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

Wypróbuj online!

Dzięki DJ za to, że to działa

Krzysztof
źródło
3

Haskell , 28 bajtów

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

Wypróbuj online!

succ to taki niefortunny wybór nazywania ...

Wyjaśnienie

[[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
całkowicie ludzki
źródło
4
Nie wydaje mi się, aby zwracanie listy ciągów znaków zamiast rozdzielania ich spacją lub znakiem nowej linii było w pełni uzasadnione.
user28667,
@ user28667 Zwykle jest dozwolony w wyzwaniach (prawdopodobnie powinien znajdować się w domyślnym wpisie We / Wy, jeśli jeszcze nie jest). OP musi jeszcze odpowiedzieć na to wyzwanie. Nie jest to jednak powód, by głosować negatywnie.
całkowicie ludzki,
@totallyhuman W chwili obecnej wyzwanie wyraźnie określa, że ​​do rozdzielenia danych wyjściowych należy użyć spacji lub znaków nowej linii, dlatego ta odpowiedź jest obecnie nieprawidłowa. Więc ściśle zgodnie z zasadami witryny, należy ją usunąć lub po prostu naprawić, dodając unlineslub unwords.
Laikoni,
@Laikoni Wygląda na to, że mam ciebie ninja. Wyzwanie nie odrzuca jawnie listy wierszy jako wyniku. (Plus, które mogłyby unieważnić kwotę uczciwej odpowiedzi.) Tak czy inaczej, odpowiedź jest teraz nie nieważny.
całkowicie ludzki,
3

R , 40 bajtów

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

Wypróbuj online!

Jeszcze jedna alternatywa w R do odpowiedzi Plannapusa i Giuseppe . Wysłano po ich prośbie. To rozwiązanie wykorzystuje kod ASCII do kodowania UTF8.

PS, jeśli TAB byłyby dozwolone, można zastąpić nowy wiersz (kod ASCII 10) tabelą (kod ASCII 9), a rozwiązanie może się zmniejszyć do 39 bajtów:

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

Nie dotyczy
źródło
Myślę, że używanie 9jest w porządku, ponieważ jest to spacja, na co pozwala OP.
Giuseppe,
3

PowerShell , 39 37 bajtów

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

Wypróbuj online!

Pętle od 65do 89. Podczas każdej iteracji tworzymy tablicę liczb całkowitych (prądu, jeszcze jednego i prądu) bieżącej cyfry, używając wstępnego przyrostu i wstępnego zmniejszenia. Jest to następnie ponownie rzutowane jako chartablica i -joinpołączone razem w jeden ciąg. Każdy ciąg jest pozostawiony w potoku, a domniemane Write-Outputpo zakończeniu programu daje nam nowy wiersz między każdym elementem za darmo.


Alternatywnie, ta sama liczba bajtów

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

Wypróbuj online!

AdmBorkBork
źródło
1
($_,($_+1),$_)jest alternatywną krotką tej samej długości
Veskah
2

J , 18 16 bajtów

2(,{.)\u:65+i.26

Zmieniono a.{~na rozwiązania u:Conora O'Briena i FrownyFrog

Wypróbuj online!

Galen Iwanow
źródło
1
Alternatywny 16 bajtów:u:(i.25)+/66-#:5
FrownyFrog,
2

Pepe, 59 56 bajtów

-3 bajty dzięki u_ndefined

REeEeEEeEerEeEeeeeeERrEEEEErEEEeeREEreeerEEEEEeeEreeERee

Wypróbuj online!

Wyjaśnienie:

# 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
Czerwona koniczyna
źródło
1
Zastąpienie rEeEeeeeEeprzez RrEEEEEpozwala zaoszczędzić 3 bajty
zdefiniowano
@ u_ndefined Dzięki! Zrobiłem ten kod przed dodaniem flag do Pepe. Zaktualizowałem odpowiedź.
RedClover,
1

Siatkówka , 24 bajty


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

Wypróbuj online!

Martin Ender
źródło
21 bajtów, ale cierpi na końcowe znaki nowej linii ...
Neil,
@Neil Tak, nawet nie potrzebujesz `.... Jednak pozbycie się tych nowych linii jest naprawdę denerwujące. Mam nadzieję, że drukowanie w pętlach będzie bardziej elastyczne i wygodne w Retina 1.0.
Martin Ender,