Terza Rima yang sangat panjang


38

Deskripsi

Keluarkan skema sajak untuk Terza Rima yang sangat lama.

Memasukkan

Tidak ada

Keluaran

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

Aturan

Anda dapat memilih antara memisahkan bait dengan spasi putih atau baris baru, jadi:

ABA BCB...

ATAU

ABA
BCB
...

Spasi tunggal trailing diperbolehkan per baris dan satu trailing newline diizinkan.

Output dapat berupa huruf besar atau kecil.

Ini adalah , jadi kode terpendek dalam byte untuk setiap bahasa akan menang.


4
Apakah daftar garis oke?
manusiawi

6
Menurut en.wikipedia.org/wiki/Terza_rima, akhir cerita Anda salah. Itu harus diakhiri dengan Z atau ZZ.
Chris

Bisakah ada output tambahan di luar skema sajak? Ini mungkin menyelamatkan saya beberapa byte.
NK1406

@ NK1406 Tidak maaf.
LiefdeWen

1
@totallyhuman String array baik-baik saja.
LiefdeWen

Jawaban:


24

JavaScript (ES6), 51 50 49 byte

Disimpan 1 byte berkat @ l4m2

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

Cobalah online!

Bagaimana?

Kita mulai dengan n = 45358 ( yzy di base-36). Kami mengurangi 1333 dari n pada setiap iterasi ( 111 di basis-36). Kami berhenti segera setelah n MOD 63 = 0 , karena 12033 ( 9a9 dalam basis-36) adalah nilai pertama yang memenuhi kondisi ini, dan 63 adalah modulo terkecil dengan properti seperti itu.

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

Bagaimana Anda memutuskan base36? dan apakah Anda yakin itu optimal?
LiefdeWen

2
@LiefdeWen Ini adalah pangkalan terendah untuk memuat semua huruf, jadi ini optimal.
Erik the Outgolfer

@ user202729 Apa maksudmu? Dia bukan OP, jadi dia salah satu dari orang-orang yang Anda maksud?
Erik the Outgolfer

17
Sebagai simpul samping (yang tidak menarik), 1333 = 666 * 2 + 1 dan ini adalah jawaban saya yang ke-666 di PPCG.
Arnauld

3
@Arnauld pastikan Anda menggunakan nilai 1335 di suatu tempat di jawaban Anda berikutnya.
IanF1


10

Jelly , 7 byte

ØAṡ2ŒBY

Cobalah online!

-1 byte terima kasih kepada Dennis

ØAṡ2ŒBY  Main Link
ØA       Alphabet
  ṡ2     Slice into overlapping slices of length 2
    ŒB   Palindromize (bounce) each
      Y  Join by newlines

9

brainfuck , 51 48 byte

Disimpan 3 byte berkat @ovs.

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

Cobalah online!

Penjelasan

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 - Saya baru memperhatikan bahwa jawaban saya sangat mirip dengan jawaban Anda. Jangan ragu untuk berkomentar jika Anda merasa terlalu dekat dan saya akan menghapusnya.
ElPedro

1
@ ElPedro Tidak, Anda baik-baik saja, tidak ada banyak ruang untuk inovasi dalam tantangan ini :)
Conor O'Brien

9

05AB1E , 5 byte

Aü«€û

Cobalah online!

-1 byte terima kasih kepada Emigna
-1 byte terima kasih untuk perubahan aturan; terima kasih kepada kalsowerus untuk menunjukkan hal itu

Hehe, saat ini mengalahkan Pyth. \Hai/

Penjelasan

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

Anda bisa melakukannyaAü«€û»
Emigna

@ Emigna O keren, terima kasih! : D
HyperNeutrino

Bagus, itulah yang saya dapatkan juga tanpa melihat.
Magic Gurita Guci

Menurut komentar, daftar string baik-baik saja sebagai keluaran, Anda dapat menghapus gabungan.
kalsowerus

9

brainfuck , 51 49 byte

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

Cobalah online!

Upaya penjelasan ...

+++++                     #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 dengan terima kasih kepada @ovs

Upaya pertama saya di brainfuck sehingga setiap petunjuk diterima dengan rasa terima kasih. Jika saya lebih berpengalaman dengan itu maka saya yakin saya bisa mencukur beberapa byte lagi, tetapi saya hanya membahasnya kemarin.





6

Arang , 11 byte

E²⁵✂αι⁺²ι‖O

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

 ²⁵         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 byte

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

Cobalah online!

Salah satu alasan ini lebih pendek daripada jawaban brain-flak lainnya adalah karena ia menggunakan huruf besar dan bukan huruf kecil, yang memiliki nilai ASCII lebih kecil, dan karenanya lebih mudah untuk didorong.

Penjelasan:

#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
}

Saya menulis versi pertama dan tidak mendapatkan upvotes Anda menulis versi golf dan mendapatkan +5. ???
Christopher

5

R, 51 47 byte

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

Keluaran:

> 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

Cara naif tanpa mewah sprintfadalah 49 byte
Giuseppe

@ Giuseppe itu karena saya tidak menggunakan sprintfdengan benar :)
plannapus

OK, tapi saya menemukan 40 byter :)
Giuseppe

@Giuseppe ouch :)
plannapus

1
[40 byter] lain [ tio.run/##K/r/… berdasarkan konversi kode ASCII, dalam kasus
NofP

5

Java 8 , 132 85 62 60 Bytes

  • 47 byte terima kasih kepada Neil
  • 26 byte berkat Oliver
  • 3 byte dan format yang lebih baik berkat Kevin
  • Kesalahan diperbaiki oleh Oliver

Golf

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

Tidak disatukan

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
Mencetak array char mungkin akan jauh lebih pendek.
Neil

1
Dapatkah Anda membuat isebuah charjuga?
Neil

2
a->{for(char c=64;++c<90;)System.out.println(""+c++ +c--+c);}(62 byte)
Olivier Grégoire

2
Saat ini ini adalah potongan daripada fungsi atau program, jadi Anda harus menambahkan v->{...}seperti yang disebutkan di atas oleh @ OlivierGrégoire. ( Jika Anda tidak tahu bagaimana Java 8 lambdas bekerja, saya pernah membuat penjelasan sebelumnya. ) Juga, Anda dapat menghapus tanda kurung loop seperti yang dilakukan Olivier, dan sebagai golf tambahan Anda dapat mengubah cetakan menjadi System.out.print(" "+i+++i--+i);(spasi sebagai gantinya dari baris baru, dan Anda tidak perlu spasi di c+++c--+c). Coba di sini.
Kevin Cruijssen

1
Terima kasih @KevinCruijssen untuk tips serta dokumen java lambdas. Itu adalah panduan yang sangat mudah untuk menerapkan beberapa lambda sederhana. Saya telah memperbarui sesuai!
DevelopingDeveloper




4

brainfuck , 41 byte

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

Cobalah online!


+1 Saya mengikuti sebagian besar tetapi diawali dengan - [Apakah itu berarti Anda mengatur sel 0 hingga -1 sebelum Anda memulai loop? Adakah kemungkinan penjelasan bagi seorang pemula yang brainfuck jika Anda punya waktu? Btw, terima kasih untuk -2 atas usahaku.
ElPedro

@ ElPedro ini tergantung pada interpreter brainfuck, interpreter di tio.run menyimpan angka 8-bit yang tidak ditandatangani di setiap sel, sehingga sel pertama mendapat 255 sebelum loop.
Ov

@ ElPedro segmen inisialisasi sebenarnya dihasilkan oleh BF-Crunch .
Ov

4

brainfuck , 45 37 byte

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

Cobalah online!

Mencetak dalam huruf besar, dipisahkan oleh spasi dengan spasi tambahan.

Bagaimana itu bekerja:

+[[<+>>++<-]>] 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
Ini sebenarnya sangat bagus! Kerja bagus!
Debu




3

Brain-Flak , 180 byte

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

Cobalah online!

Terima kasih kepada DJ untuk membuat ini berfungsi


3

Haskell , 28 byte

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

Cobalah online!

succ adalah pilihan penamaan yang sangat disayangkan ...

Penjelasan

[[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
Saya tidak merasa benar-benar adil untuk mengembalikan daftar string daripada memisahkannya dengan ruang atau baris baru sesuai kebutuhan.
user28667

@ user28667 Biasanya diizinkan dalam tantangan (mungkin harus ada di pos IO Default, jika belum). OP belum menanggapi tantangan ini secara khusus. Namun, ini bukan alasan untuk menurunkan suara.
totallyhuman

@totallyhuman Saat ini tantangan secara eksplisit menentukan bahwa spasi atau baris baru harus digunakan untuk memisahkan output, sehingga jawaban ini saat ini tidak valid. Jadi secara ketat sesuai dengan aturan situs itu harus dihapus, atau hanya diperbaiki dengan menambahkan unlinesatau unwords.
Laikoni

@Laikoni Sepertinya aku punya ninja bagimu. Tantangannya tidak secara eksplisit menolak daftar garis sebagai output. (Plus, itu akan membatalkan jumlah jawaban yang adil.) Bagaimanapun, jawabannya sekarang tidak valid.
manusiawi

3

R , 40 byte

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

Cobalah online!

Satu lagi alternatif di R untuk Plannapus dan Giuseppe's . Diposting mengikuti permintaan mereka. Solusi ini menggunakan kode ASCII untuk pengkodean UTF8.

NB jika TAB diizinkan, seseorang dapat mengganti baris baru (kode ASCII 10) dengan tabulasi (kode ASCII 9), dan solusinya dapat menyusut menjadi 39 byte:

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


Saya pikir menggunakan 9sangat baik, karena ini adalah spasi, yang diizinkan oleh OP.
Giuseppe


3

PowerShell , 39 37 byte

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

Cobalah online!

Loop dari 65ke 89. Setiap iterasi, kami membangun array integer (saat ini, satu lagi, dan saat ini) dari digit saat ini, menggunakan pra-kenaikan dan pra-pengurangan. Itu kemudian dilemparkan kembali sebagai char-array, dan -joined bersama menjadi satu string. Setiap string ditinggalkan di jalur pipa dan sebuah implisit Write-Outputpada penyelesaian program memberi kita garis baru antara setiap elemen secara gratis.


Atau, jumlah byte yang sama

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

Cobalah online!


1
($_,($_+1),$_)adalah tuple alternatif dengan panjang yang sama
Veskah



2

Pepe, 59 56 byte

-3 byte terima kasih kepada u_ndefined

REeEeEEeEerEeEeeeeeERrEEEEErEEEeeREEreeerEEEEEeeEreeERee

Cobalah online!

Penjelasan:

# 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
Mengganti rEeEeeeeEedengan RrEEEEEmenghemat 3 byte
u_ndefined

@ u_ndefined Terima kasih! Saya membuat kode ini sebelum bendera ditambahkan ke Pepe. Diperbarui jawabannya.
RedClover

1

Retina , 24 byte


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

Cobalah online!


21 byte tetapi menderita tertinggal baris baru ...
Neil

@Neil Ya, Anda bahkan tidak perlu `.... Menyingkirkan baris-baris baru yang tertinggal itu benar-benar menyebalkan. Saya berharap membuat pencetakan di loop sedikit lebih fleksibel dan nyaman di Retina 1.0.
Martin Ender

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.