Terza Rima ที่ยาวมาก ๆ


38

ลักษณะ

เอาท์พุทรูปแบบสัมผัสสำหรับ Terza Rima ที่ยาวมาก

อินพุต

ไม่มี.

เอาท์พุต

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
Chris

สามารถมีผลผลิตเพิ่มเติมนอกเหนือจากโครงการสัมผัส? นี่อาจช่วยฉันสักสองสามไบต์
NK1406

@ NK1406 ไม่ขอโทษ
LiefdeWen

1
@tallyhuman อาร์เรย์สตริงเป็นสิ่งที่ดี
LiefdeWen

คำตอบ:


24

JavaScript (ES6), 51 50 49 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @ l4m2

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

ลองออนไลน์!

อย่างไร?

เราเริ่มต้นด้วยn = 45358 ( yzyใน base-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

คุณตัดสินใจ base36 อย่างไร และคุณแน่ใจหรือว่ามันเหมาะสมที่สุด
LiefdeWen

2
@LiefdeWen มันเป็นฐานที่ต่ำที่สุดในการบรรจุตัวอักษรทั้งหมดดังนั้นมันจึงเหมาะสมที่สุด
Erik the Outgolfer

@ user202729 คุณหมายถึงอะไร เขาไม่ได้เป็น OP ดังนั้นเขาจึงเป็นหนึ่งในคนที่คุณอ้างถึง?
Erik the Outgolfer

17
ในฐานะที่เป็น (un) side-node ที่น่าสนใจ, 1333 = 666 * 2 + 1 และนี่คือคำตอบที่ 666 ของฉันใน PPCG
Arnauld

3
@Arnauld โปรดให้แน่ใจว่าคุณใช้ค่า 1,335 ที่ไหนสักแห่งในคำตอบของคุณต่อไป
IanF1

15

C (gcc) , 41 ไบต์

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

ลองออนไลน์!

คงที่และ -9 ขอบคุณที่user202729 -1 ต้องขอบคุณเดนนิสและ -2 ขอบคุณอานอลด์เช่นกัน


45 ไบต์
user202729

1
(i='ABA';i<'ZZZ';i+=65793)บันทึกเป็นไบต์
Dennis

ใช้59e5แทนการ'ZZZ'บันทึกไบต์อื่น
user202729

คุณสามารถใช้i%29สำหรับ41 ไบต์
Arnauld


9

brainfuck , 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 โอไบรอัน

9

05AB1E , 5 ไบต์

Aü«€û

ลองออนไลน์!

-1 ไบต์ขอบคุณ Emigna
-1 ไบต์ขอบคุณการเปลี่ยนแปลงกฎ; ขอบคุณ kalsowerus สำหรับการชี้ให้เห็นว่า

Hehe ปัจจุบันชนะ Pyth \ O /

คำอธิบาย

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

คุณสามารถทำได้Aü«€û»
Emigna

@ Emigna O เยี่ยมมากขอบคุณ! : D
HyperNeutrino

เยี่ยมมากนั่นคือสิ่งที่ฉันได้เช่นกันโดยไม่ได้ดู
Magic Octopus Urn

ตามความเห็นรายการของสตริงเป็นเรื่องปกติตามผลลัพธ์คุณสามารถลบการเข้าร่วม
kalsowerus

9

brainfuck , 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 ขอบคุณ

ความพยายามครั้งแรกของฉันที่ brainfuck ดังนั้นคำแนะนำใด ๆ ที่ได้รับสุดซึ้ง ถ้าฉันมีประสบการณ์กับมันมากขึ้นฉันมั่นใจว่าฉันสามารถโกนหนวดได้อีกสองสามไบต์ แต่ฉันเพิ่งจะทำมันเมื่อวานนี้





6

ถ่าน 11 ไบต์

E²⁵✂αι⁺²ι‖O

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

 ²⁵         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 ไบต์

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

ลองออนไลน์!

เหตุผลหนึ่งที่ทำให้สั้นกว่าคำตอบที่ไม่น่าเชื่อคือมันใช้ตัวพิมพ์ใหญ่แทนตัวอักษรตัวเล็กซึ่งมีค่า 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
}

ฉันเขียนเวอร์ชันแรกและไม่มี upvotes ที่คุณเขียนเวอร์ชันกอล์ฟและรับ +5 ???
Christopher

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

@Giuseppe ที่จะเป็นเพราะผมไม่ได้ใช้sprintfอย่างถูกต้อง :)
plannapus

ตกลง แต่ฉันพบ40 byter :)
Giuseppe

@Giuseppe ouch :)
plannapus

1
อีก [40 byter] [ tio.run/##K/r/…ขึ้นอยู่กับการแปลงรหัส ASCII ในกรณี
NofP

5

Java 8 , 132 85 62 60 Bytes

  • 47 ไบต์ขอบคุณนีล
  • ขอบคุณ 26 ไบต์ถึงโอลิเวอร์
  • 3 ไบต์และการจัดรูปแบบที่ดีขึ้นมากต้องขอบคุณ Kevin
  • แก้ไขข้อผิดพลาดโดย Oliver

แข็งแรงเล่นกอล์ฟ

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

Ungolfed

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 อาจจะสั้นกว่ามาก
Neil

1
คุณสามารถทำให้เกินไป? ichar
Neil

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

2
ขณะนี้นี่เป็นข้อมูลโค้ดแทนที่จะเป็นฟังก์ชั่นหรือโปรแกรมดังนั้นคุณจะต้องเพิ่มสิ่งv->{...}ที่กล่าวถึงข้างต้นโดย @ OlivierGrégoire ( ในกรณีที่คุณไม่ทราบว่า Java lambdas ทำงานอย่างไรฉันได้อธิบายมาก่อนแล้ว ) นอกจากนี้คุณสามารถลบวงเล็บของห่วงเหมือนที่ Olivier ทำและเป็นกอล์ฟเพิ่มเติมที่คุณสามารถเปลี่ยนการพิมพ์เป็นSystem.out.print(" "+i+++i--+i);(เว้นวรรคแทน ของบรรทัดใหม่และคุณไม่ต้องการพื้นที่ที่c+++c--+c) ลองที่นี่
Kevin Cruijssen

1
ขอบคุณ @KevinCruijssen สำหรับเคล็ดลับเช่นเดียวกับเอกสาร java lambdas นั่นเป็นคำแนะนำที่ง่ายมากที่จะใช้ lambdas ง่าย ๆ ฉันมีการปรับปรุงตาม!
กำลังพัฒนาผู้พัฒนา




4

brainfuck , 41 ไบต์

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

ลองออนไลน์!


+1 ฉันติดตามส่วนใหญ่ แต่เริ่มต้นด้วย - [หมายความว่าคุณกำลังตั้งค่าเซลล์ 0 ถึง -1 ก่อนที่คุณจะเริ่มลูปหรือไม่ มีโอกาสใดที่จะมีคำอธิบายสำหรับมือใหม่ brainfuck ถ้าคุณมีเวลา? Btw ขอบคุณสำหรับ -2 ในความพยายามของฉัน
ElPedro

@ElPedro สิ่งนี้ขึ้นอยู่กับตัวแปล brainfuck ล่ามที่ tio.run เก็บหมายเลข 8 บิตที่ไม่ได้ลงชื่อในแต่ละเซลล์ดังนั้นเซลล์แรกที่ได้รับ 255 ก่อนลูป
ovs

@ElPedro ส่วนเริ่มต้นจะถูกสร้างขึ้นจริงโดยBF-ขบเคี้ยว
ovs

4

brainfuck , 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 โดยปกติแล้วจะได้รับอนุญาตในสิ่งที่ท้าทาย (น่าจะเป็นในการโพสต์ Default IO หากยังไม่ได้เปิด) OP ยังไม่ตอบสนองต่อความท้าทายนี้โดยเฉพาะ อย่างไรก็ตามนี่คือเหตุผลที่จะ downvote ไม่มี
สิ้นเชิงมนุษย์

@totallyhuman ในขณะนี้ความท้าทายระบุอย่างชัดเจนว่าควรเว้นช่องว่างหรือการขึ้นบรรทัดใหม่เพื่อแยกเอาต์พุตดังนั้นคำตอบนี้ไม่ถูกต้องในขณะนี้ ดังนั้นตามอย่างเคร่งครัดกับกฎระเบียบของเว็บไซต์ที่มันควรจะถูกลบหรือเพียงแค่การแก้ไขโดย prepending หรือunlines unwords
Laikoni

@Laikoni ฉันดูเหมือนจะมีคุณนินจา ความท้าทายไม่ได้ปฏิเสธรายการของบรรทัดเป็นเอาต์พุตอย่างชัดเจน (นอกจากนี้นั่นอาจทำให้คำตอบมีจำนวนยุติธรรม) ในทางใดทางหนึ่งตอนนี้คำตอบก็ไม่ถูกต้อง
สิ้นเชิงมนุษย์

3

R , 40 ไบต์

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

ลองออนไลน์!

อีกทางเลือกหนึ่งในคำตอบของ R ถึงPlannapusและGiuseppe โพสต์ติดตามคำขอของพวกเขา วิธีนี้ใช้รหัส ASCII เพื่อเข้ารหัส UTF8

ป.ล. ถ้าแท็บได้รับอนุญาตหนึ่งสามารถแทนที่ขึ้นบรรทัดใหม่ (รหัส ASCII 10) ด้วยการจัดตาราง (รหัส ASCII 9) และการแก้ปัญหาสามารถหดตัวถึง 39 ไบต์:

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


ฉันคิดว่าการใช้9นั้นดีมากเพราะเป็นช่องว่างที่ OP อนุญาต
Giuseppe


3

PowerShellขนาด39 37 ไบต์

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

ลองออนไลน์!

ลูปจากไป65 89การวนซ้ำแต่ละครั้งเรากำลังสร้างอาร์เรย์จำนวนเต็มของ (ปัจจุบันอีกหนึ่งและปัจจุบัน) ของตัวเลขปัจจุบันโดยใช้การเพิ่มล่วงหน้าและลดลงล่วงหน้า จากนั้นจึงทำการส่งซ้ำเป็น a char-ray และ-joinรวมเข้าด้วยกันเป็นสายเดี่ยว แต่ละสตริงจะถูกวางไว้บนไพพ์ไลน์และการบอกเป็นนัยWrite-Outputเมื่อเสร็จสิ้นการโปรแกรมทำให้เรามีบรรทัดใหม่ระหว่างแต่ละองค์ประกอบได้ฟรี


หรือนับเป็นไบต์เดียวกัน

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

ลองออนไลน์!


1
($_,($_+1),$_)เป็น tuple ที่มีความยาวเหมือนกันเป็นทางเลือก
Veskah



2

Pepe, 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 ขอบคุณ! ฉันทำรหัสนี้ก่อนที่จะเพิ่มค่าสถานะใน Pepe อัปเดตคำตอบ
RedClover

1

เรติน่า 24 ไบต์


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

ลองออนไลน์!


21 ไบต์แต่ได้รับความทุกข์ทรมานจากการขึ้นบรรทัดใหม่ ...
Neil

@Neil `...ใช่คุณไม่จำเป็นที่จะต้อง การกำจัดบรรทัดใหม่ที่ตามมานั้นน่ารำคาญจริงๆ ฉันหวังว่าจะทำให้การพิมพ์เป็นแบบลูปยืดหยุ่นขึ้นเล็กน้อยและสะดวกใน Retina 1.0
Martin Ender

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.