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.


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

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,



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                    >]

@ 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

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.





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

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
}

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

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);
    }
}

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!


+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

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


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

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)))


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!


1
($_,($_+1),$_)jest alternatywną krotką tej samej długości
Veskah



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

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,


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.