สร้างลำดับ Abacaba


35

ความท้าทายนี้เกี่ยวกับการพิมพ์ลำดับ abacaba ของความลึกที่เฉพาะเจาะจง

นี่คือไดอะแกรมของ 5 ลำดับแรก ( a(N)เป็นลำดับ abacaba ของความลึก N, บน / ล่างเป็นเพียงเพื่อแสดงรูปแบบนี้ไม่จำเป็นในผลลัพธ์ของโปรแกรมของคุณ):

a(0) = A
a(1) = aBa
a(2) = abaCaba
a(3) = abacabaDabacaba
a(4) = abacabadabacabaEabacabadabacaba
...
a(25) = abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabajabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaia...

อย่างที่คุณสามารถบอกได้ลำดับของ abacaba n'th เป็นลำดับสุดท้ายที่มีตัวอักษร n'th และเพิ่มเข้าไปอีกครั้ง ( a(n) = a(n - 1) + letter(n) + a(n - 1))

งานของคุณคือการสร้างโปรแกรมหรือฟังก์ชั่นที่ใช้จำนวนเต็มและพิมพ์ลำดับ abacaba ของความลึกนั้น ผลลัพธ์จะต้องถูกต้องอย่างน้อยสำหรับค่าสูงสุดและรวมถึง 15


3
ลำดับจะไม่ถูกกำหนดหลังจาก𝑎₂₅หรือไม่
LegionMammal978

3
@nicael ฉันรู้ว่าฉันแค่สงสัยว่า defined (∞) จะถูกกำหนดอย่างไร
LegionMammal978

2
หรือที่เรียกว่าลำดับไม้บรรทัด (แต่ใช้ตัวอักษรแทนตัวเลข) เพื่อให้สามารถใช้กับ Google ได้ง่ายขึ้น
253751

4
สำหรับสิ่งที่คุ้มค่าการแก้ปัญหาที่ถูกต้องสำหรับปัญหานี้ก็เป็นวิธีแก้ปริศนาของหอคอยแห่งฮานอยสำหรับดิสก์N
Jeff Zeitlin

3
เราสามารถใช้การจัดทำดัชนีแบบที่ 1 แทนการทำดัชนีที่เป็นแบบ 0 ได้หรือไม่
ผลไม้แยกแยะ

คำตอบ:


8

Pyth, 11 ไบต์

u++GHG<GhQk

ลดง่าย


2
@ Loovjo โอ้ ทำให้รู้สึกไม่0ควรจะเป็นลำดับที่ว่างเปล่า IMO แต่ฉันจะสอดคล้องกับคำถาม ...
orlp

4
ใช่ง่าย ไปแล้วเรียบหัวบนผนัง
J Atkin

@JAtkin เปิด Pyth rev-doc.txtถัดจากคำตอบนี้และมันควรจะแสดงให้เห็นว่าเป็นเรื่องง่าย
orlp

Hehehe ไม่ใช่สิ่งที่ฉันหมายถึง (ฉันไม่ทราบว่า pyth ดังนั้น .... )
J Atkin

7

Python ขนาด 44 ไบต์

f=lambda n:"a"[n:]or f(n-1)+chr(97+n)+f(n-1)

ดูน่าสงสัยอาจจะเป็นกอล์ฟ


7

Haskell, 39 37 ไบต์

a 0="a"
a n=a(n-1)++['a'..]!!n:a(n-1)

ตัวอย่างการใช้งาน: ->a 3"abacabadabacaba"

แก้ไข: @Ang พบสองไบต์เพื่อบันทึก ขอบคุณ!


จะไม่a n=a(n-1)++[97+n]++a(n-1)ทำงานเหรอ ไม่สามารถทดสอบได้ในขณะนี้
Seequ

@Seeq: ไม่[97+n]เป็นรายการIntegerและa(n-1)เป็นรายการของChar(aka String) คุณไม่สามารถเชื่อมต่อรายการที่มีประเภทแตกต่างกัน toEnumทำให้ออกมาจากChar Integer
nimi

อาฉันคิดเสมอว่าชาร์เป็นเพียงจำนวนเต็มพิเศษใน Haskell
Seequ

['a'..]!!nสั้นกว่า 2 ไบต์toEnum(97+n)
Angs

@Angs: จับได้ดี! ขอบคุณ!
nimi

6

Pyth, 14 13 ไบต์

ขอบคุณ Jakube สำหรับการบันทึกไบต์!

VhQ=+k+@GNk;k

วิธีการแก้ปัญหากับ 14 VhQ=ks[k@GNk;kไบต์:

คำอธิบาย:

VhQ=+k+@GNk;k

               # Implicit: k = empty string
VhQ            # For N in range input + 1      
   =           # Assign k
      +@GNk    # Position N at alphabet + k
    +k         # k + above
           ;   # End loop
            k  # Print k

ลองที่นี่ !


ไม่ควร "N ในช่วง" อยู่ในVบรรทัด? hQเป็นเพียงeval(input) + 1
Loovjo

@Loovjo ใช่ว่าดีขึ้นและทำให้เกิดความสับสนน้อย :)
Adnan

คุณสามารถร่นไป=k =Pyth โดยอัตโนมัติจะกำหนดผลให้kตั้งแต่เป็นตัวแปรแรกในการแสดงออกk +k+@GNk
Jakube

@Jakube ขอบคุณมาก! :)
Adnan

ฉันมีคำตอบที่แตกต่างกันสำหรับความท้าทายนี้ มันจะไม่เอาชนะโซลูชันนี้ แต่มันแสดงให้เห็นถึงเทคนิคในการให้อักขระ n ตัวแรกของลำดับ: Vt^2Q=+k@Gx_.BhN`1)k(ในกรณีนี้มันถูกตั้งค่าให้อักขระ 2 ^ Q-1 ตัวแรกตามความต้องการ แต่คุณสามารถเห็นได้ วิธีการเปลี่ยนแปลงนั้น.)
quintopia

5

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

$
aa
(T`_l`l`.$
)`1(a.*)
$1$1
z

ตัวป้อนบรรทัดต่อท้ายมีความสำคัญ การป้อนข้อมูลจะนำมาในเอก

ลองออนไลน์!


มันไม่ทำงาน.
Leun Nun

@KennyLau ใช่เพราะ Retina เปลี่ยนไปตั้งแต่ฉันโพสต์คำตอบนี้ หากคุณตรวจสอบการเปิดตัวที่ล่าสุดเมื่อโพสต์นี้โดยตรงจาก GitHub มันจะทำงานร่วมกับที่
Martin Ender

5

Brainfuck, 157 ไบต์

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

การป้อนข้อมูลจะได้รับในไบนารี

แนวคิดพื้นฐานคือการทำซ้ำลำดับปัจจุบันซ้ำ (เริ่มต้นด้วย "a") และเพิ่มองค์ประกอบสุดท้ายหลังจากการวนซ้ำแต่ละครั้ง:

  1. a → aa → ab

  2. ab → abab → abac

  3. abac → abacabac → abacabac

  4. ...

เมื่อทั้งหมดนี้เสร็จสิ้นตามระยะเวลาที่กำหนดผลลัพธ์จะถูกพิมพ์โดยไม่รวมองค์ประกอบสุดท้าย

คำอธิบายในเชิงลึก

หน่วยความจำถูกจัดเรียงตามวิธีต่อไปนี้:

.---------.-.-----.----.---.-----.----.---.---
|Countdown|0|Value|Copy|End|Value|Copy|End|...
'---------'-'-----'----'---'-----'----'---'---

            |--Element 1---|--Element 2---|

นับถอยหลังถือจำนวนรอบการคัดลอกที่ยังไม่ได้ดำเนินการ ลำดับ ABACABA จะถูกเก็บไว้ในบล็อก adjecent แต่ละเซลล์ประกอบด้วย 3 เซลล์ Valueถืออักขระขององค์ประกอบ (เช่น "A", "B", "C" ... ) การตั้งค่าสถานะการคัดลอกบ่งชี้ว่าองค์ประกอบที่เกี่ยวข้องต้องถูกคัดลอกภายในรอบการคัดลอกปัจจุบัน (0 = คัดลอก, 1 = ไม่) การตั้งค่าสถานะสิ้นสุดถูกตั้งค่าเป็น 0 สำหรับองค์ประกอบสุดท้ายในขณะที่กำลังถูกคัดลอก (เป็น 1 ในกรณีอื่นทั้งหมด)

ตอนนี้ถึงโปรแกรม (ไม่ได้รับการปรับเล็กน้อย) จริง:

,                       read Countdown from input
+                       add 1 to avoid off-by-one error
>-[>++<-----]>-----     initialize value cell of first element to 97 ("a")
>>+                     set End flag of first element to 1
<<<<                    move to Countdown
[                       loop until Countdown hits 0 (main loop)
    -                   decrement Countdown
    >>                  move to Value cell of first element
    [                   copying loop
        [               duplication sub-loop
            -           decrement Value cell of the element to copy
            >>          move to End flag
            [>>>]       move to End flag of the last element
            <+<+        increment Copy and Value cell of last element (Copy cell is temporarily abused)
            <           move to End flag of second to last element
            [<<<]>>     move back to Copy cell of first element
            [>>>]<      move to Value cell of the first element where the Copy flag is 0
        ]
        >>[>>>]<        move to (abused) Copy flag of the last element
        [               "copy back" sub-loop
            -           decrement Copy flag
            <<          move to End flag of second to last element
            [<<<]>>     move back to Copy cell of first element
            [>>>]<      move to Value cell of the first element where the Copy flag is 0
            +           increment Value cell
            >>[>>>]<    move back to Copy flag of the last element
        ]
        +>+             set Copy and End flag to 1
        <<<             move to End flag of second to last element
        [<<<]>>         move back to Copy cell of first element
        [>>>]<          move to Value cell of the first element where the Copy flag is 0
        >+<             set Copy flag to 1
        >[>>>]<         move to Value cell of the next element to copy
    ]                   loop ends three cells behind the last "valid" Value cell
    <<<+                increment Value cell of last element
    >>                  move to End flag
    [<-<<]              reset all Copy flag
    <                   move to Countdown
]
>>>>                    move to End flag of first element
[>>>]<<<                move to End flag of last element                
<<<                     skip the last element
[<<.<]                  output Value cells (in reverse order, but that doesn't matter)

2
ยินดีต้อนรับสู่เว็บไซต์! ฉันจะสนใจรายละเอียดเพิ่มเติม!
ข้าวสาลี Wizard

1
@ SriotchilismO'Zaic ขอบคุณที่ตอบกลับ :) ฉันได้เพิ่มคำอธิบายโดยละเอียดแล้ว
orthoplex

5

Haskell , 36 ไบต์

tail.(iterate((:"a").succ=<<)"_a"!!)

ลองออนไลน์!

วิธีนี้ใช้วิธีเรียกซ้ำแบบอื่นจากคำตอบส่วนใหญ่ ในการรับสตริงถัดไปในลำดับเราไม่ได้รวมสองสำเนาในสตริงก่อนหน้าด้วยตัวอักษรใหม่ในระหว่าง แต่แทนที่จะเพิ่มตัวอักษรทุกตัวและ intersperse aแทน

aba -> bcb -> abacaba

1
คุณหมายถึงbcbแทนcbc?
Jo King

4

05AB1E , 12 ไบต์ (ไม่แข่งขัน)

รหัส:

'aIGDN>.bsJl

ฉันจะสาปแช่ง. ฉันแก้ไขข้อผิดพลาดมากมายด้วยความท้าทายนี้ฮ่าฮ่า

คำอธิบาย:

'aIGDN>.bsJl

'a             # Push the character 'a'
  I            # User input
   G           # For N in range(1, input)
    D          # Duplicate the stack
     N         # Push N
      >        # Increment
       .b      # Convert to alphabetic character (1 = A, 2 = B, etc.)
         s     # Swap the last two elements
          J    # push ''.join(stack)
           l   # Convert to lowercase
               # Implicit: print the last item of the stack

ทำไมถึงไม่มีการแข่งขัน
Loovjo

@ Loovjo ฉันแก้ไขข้อผิดพลาดหลังจากที่มีการโพสต์ความท้าทายดังนั้นจึงไม่ใช่การแข่งขัน :(
Adnan

4

JavaScript (ES6), 43 42 ไบต์

a=n=>n?a(--n)+(n+11).toString(36)+a(n):"a"

ไบต์ที่บันทึกขอบคุณ@Neil !

อีกโซลูชันแบบเรียกซ้ำง่ายๆ ...


(n+11).toString(36)ช่วยให้คุณประหยัด 1 ไบต์และใช้งานได้ถึง (25)!
Neil

@Neil ดำเนินการแล้ว ขอบคุณ!
user81655


3

ทับทิม (1.9 และสูงกว่า), 38 ไบต์

?aเป็นวิธีที่นักกอล์ฟเขียน"a"แต่ดูแปลก ๆ เมื่อผสมกับไตรภาค?:

a=->n{n<1??a:a[n-1]+(97+n).chr+a[n-1]}

3

R , 48 ไบต์

f=function(n)if(n)paste0(a<-f(n-1),letters[n],a)

ลองออนไลน์!

เรียกซ้ำง่าย ๆ


เอ่ออะไรคือ paste0 ???
ซีอาน

@ ซีอานpaste0เทียบเท่าpasteกับsep=""ดังนั้นคุณหลีกเลี่ยงช่องว่างระหว่างตัวอักษรที่pasteจะเพิ่มโดยค่าเริ่มต้น
Robin Ryder


2

Perl, 33 ไบต์

map$\.=chr(97+$_).$\,0..pop;print

ไม่จำเป็นต้องยกเลิกการตีกอล์ฟจริงๆ สร้างสตริงขึ้นโดยเพิ่มอักขระตัวต่อไปซ้ำ ๆ ตามลำดับบวกกับการย้อนกลับของสตริงโดยใช้ค่า ASCII ของ 'a' เป็นจุดเริ่มต้น ใช้$\เพื่อประหยัดจังหวะสองสามครั้ง แต่นั่นเป็นเรื่องยุ่งยากเท่าที่จะได้รับ

ทำงานa(0)ผ่านa(25)และเกิน แม้ว่าคุณจะเข้าสู่ ASCII แบบขยายหลังจากa(29)นั้นคุณจะมีหน่วยความจำไม่เพียงพอก่อนที่จะมีรหัสอักขระ:

a(25)คือ ~ 64MiB a(29)คือ ~ 1GiB

ในการจัดเก็บผลลัพธ์ของa(255)(ยังไม่ทดลอง!) จะต้องมี 2 ^ 256 - 1 = 1.15x10 ^ 77 ไบต์หรือประมาณ1.15x10 ^ 65 ไดรฟ์ 1 เทราไบต์


1
เราต้องการไดรฟ์ yottabyte ที่สั่นเทาในตอนนี้!
CalculatorFeline

2

Java 7, 158 ไบต์

class B{public static void main(String[]a){a('a',Byte.valueOf(a[0]));}static void a(char a,int c){if(c>=0){a(a,c-1);System.out.print((char)(a+c));a(a,c-1);}}}

ฉันชอบที่จะแฝงตัวรอบ PPCG และฉันจะเพลิดเพลินไปกับความสามารถในการลงคะแนน / แสดงความคิดเห็นในคำตอบอื่น ๆ

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


ยินดีต้อนรับสู่ PPCG แล้ว! ฉันหวังว่าคุณจะทำอะไรมากกว่าการลงคะแนนและแสดงความคิดเห็นในอนาคต (แต่ไม่รู้สึกว่าคุณต้อง) :)
Martin Ender

2

Mathematica, 36 32 ไบต์

##<>#&~Fold~Alphabet[][[;;#+1]]&

คุณเคยดู TWOW 11B หรือไม่?


มีความจำเป็นไม่เป็นและจากนั้นคุณสามารถใช้สัญกรณ์สำหรับมัด"", Fold
Martin Ender

# 1 ทำให้ null <>s และ # 2 ใช้ได้กับฟังก์ชันไบนารีเท่านั้น
CalculatorFeline

คุณโพสต์ความคิดเห็นนี้ในคำตอบที่คุณตั้งใจ? เพราะฉันไม่รู้ว่าคุณหมายถึงอะไร :)
Martin Ender

* # 1 ทำให้ StringJoin เข้าร่วมเป็นโมฆะและ # 2 ใช้งานได้กับฟังก์ชันเลขฐานสองหรือฟังก์ชันเชื่อมโยงเท่านั้น (x ~ Fold ~ y ~ Fold ~ z = พับ [x, พับ [y, z]] แทน Fold [x, y, z])
CalculatorFeline

โอ้คุณหมายถึง "ข้อเสนอแนะ # 1" ไม่ไม่ทำให้ Nulls ทำไมมันจะ?
Martin Ender

2

Python, 62 54 46 45 ไบต์

ฉันคิดว่ารหัสนี้ยังคงสามารถเล่นกอล์ฟได้

แก้ไข: แก้ไขข้อผิดพลาดด้วย Lynn -1 ไบต์ต้องขอบคุณปลาหมึก

a=lambda n:n and a(n-1)+chr(97+n)+a(n-1)or'a'

ลองออนไลน์!


เอาต์พุตควรเป็นตัวพิมพ์เล็กทั้งหมด ตัวพิมพ์ใหญ่ในคำถามเป็นเพียงความชัดเจนเกี่ยวกับการทำซ้ำ
Loovjo

อ๊ะ ขอขอบคุณสำหรับการชี้แจง.
Sherlock9

Blargle ขอบคุณ @ user81655
Sherlock9

สิ่งนี้ไม่ถูกต้อง (ไม่สิ้นสุด - ลองเลย) แม้ในกรณีพื้นฐานส่วนวนซ้ำของนิพจน์จะถูกประเมิน
ลินน์

คงที่ ขอบคุณ @ ลินน์!
Sherlock9

1

Mathematica ขนาด 46 ไบต์

If[#<1,"a",(a=#0[#-1])<>Alphabet[][[#+1]]<>a]&

ฟังก์ชั่นวนซ้ำง่าย ๆ ทางออกอื่น:

a@0="a";a@n_:=(b=a[n-1])<>Alphabet[][[n+1]]<>b

1

K5, 18 ไบต์

"A"{x,y,x}/`c$66+!

ใช้ฟังก์ชันซ้ำกับค่าที่ดำเนินการ ( "A") และแต่ละองค์ประกอบของลำดับ ลำดับคือตัวอักษรจาก B ถึงบางหมายเลข N ( `c$66+!) ฟังก์ชั่นรวมอาร์กิวเมนต์ด้านซ้ายที่ด้านข้างของอาร์กิวเมนต์ด้านขวา ( {x,y,x})

ในการดำเนินการ:

 ("A"{x,y,x}/`c$66+!)'!6
("A"
 "ABA"
 "ABACABA"
 "ABACABADABACABA"
 "ABACABADABACABAEABACABADABACABA"
 "ABACABADABACABAEABACABADABACABAFABACABADABACABAEABACABADABACABA")

ฉันคิดว่าลำดับควรเป็นตัวพิมพ์เล็ก แต่ไม่มีค่าใช้จ่ายไบต์
user48538

1

JavaScript, 65 57 1ไบต์

n=>eval('s="a";for(i=0;i<n;i++)s+=(i+11).toString(36)+s')

การสาธิต:

function a(n){
  return eval('s="a";for(i=0;i<n;i++)s+=(i+11).toString(36)+s')
}
alert(a(3))

1 - ขอบคุณ Neil สำหรับการบันทึก 8 ไบต์


(i+11).toString(36)ช่วยให้คุณประหยัด 6 ไบต์
Neil

@Neil ฮ่า ๆ ที่สับฉลาด
nicael

โอ้และถ้าคุณย้ายการมอบหมายs="a";ไปก่อนหน้าforนั้นจะกลายเป็นค่าส่งคืนเริ่มต้นและคุณสามารถปล่อยการติดตาม;sสำหรับการบันทึก 2 ไบต์อีกครั้ง
Neil

@ Neil Nice ไม่รู้เรื่องนั้น
nicael

ฉันคิดว่าคุณสามารถบันทึกไบต์โดยการเพิ่มiอินไลน์และลดการเพิ่มในการวนรอบ ดังนั้น ...for(i=0;i<n;)s+=(i+++11)...
ไม่ใช่ Charles

1

Japt, 20 17 ไบต์

97oU+98 r@X+Yd +X

ทดสอบออนไลน์!

มันทำงานอย่างไร

         // Implicit: U = input integer
65oU+66  // Generate a range from 65 to U+66.
r@       // Reduce each item Y and previous value X in this range with this function:
X+Yd     // return X, plus the character with char code Y,
+X       // plus X.

         // Implicit: output last expression

รุ่นที่ไม่ใช่คู่แข่งขนาด 14 ไบต์

97ôU r@X+Yd +X

ôฟังก์ชั่นเป็นเหมือนoแต่สร้างช่วงแทน[X..X+Y] ทดสอบออนไลน์![X..Y)

ฉันชอบเปลี่ยน 97 เป็น 94 ซึ่งในกรณีนี้ผลลัพธ์สำหรับ5ดูเหมือน:

^_^`^_^a^_^`^_^b^_^`^_^a^_^`^_^c^_^`^_^a^_^`^_^b^_^`^_^a^_^`^_^

1

Java, 219 ไบต์

ฉันพยายามรหัสกอล์ฟครั้งแรก น่าจะเป็นสนามกอล์ฟต่อไปได้ แต่ฉันหิวและออกไปทานอาหารกลางวัน

public class a{public static void main(String[]a){String b=j("a",Integer.parseInt(a[0]),1);System.out.println(b);}public static String j(String c,int d,int e){if(d>=e){c+=(char)(97+e)+c;int f=e+1;c=j(c,d,f);}return c;}}

Ungolfed:

public class a {
    public static void main(String[] a) {
        String string = addLetter("a", Integer.parseInt(a[0]), 1);
        System.out.println(string);
    }

    public static String addLetter(String string, int count, int counter) {
        if (count >= counter) {
            string += (char) (97 + counter) + string;
            int f = counter + 1;
            string = addLetter(string, count, f);
        }
        return string;
    }
}

ขั้นตอนวิธีแบบเรียกซ้ำกำลังเดรัจฉานแรงตรงไปตรงมาใช้การcharจัดการ


คุณสามารถละเว้นpublicคำหลักจากaและ/addLetter j
dorukayhan ต้องการโมนิก้ากลับ

1

MATL , 14 ไบต์

0i:"t@whh]97+c

สิ่งนี้ใช้เวอร์ชัน 8.0.0ของภาษา / คอมไพเลอร์ซึ่งเร็วกว่าความท้าทาย

ตัวอย่าง

>> matl
 > 0i:"t@whh]97+c
 >
> 3
abacabadabacaba

คำอธิบาย

secuence ถูกสร้างขึ้นเป็นครั้งแรกที่มีตัวเลข0, 1, 2... เหล่านี้จะถูกแปลงเป็นตัวอักษร'a', 'b', 'c'ที่สิ้นสุด

0         % initiallize: a(0)
i:        % input "N" and create vector [1, 2, ... N]
"         % for each element of that vector
  t       % duplicate current sequence
  @       % push new value of the sequence
  whh     % build new sequence from two copies of old sequence and new value
]         % end for
97+c      % convert 0, 1, 2, ... to 'a', 'b', 'c'. Implicitly print

แก้ไข

ลองออนไลน์!


1

Powershell, 53 , 46 , 44 , 41 Bytes

1..$args[0]|%{}{$d+=[char]($_+96)+$d}{$d}

การวางลงในคอนโซลจะสร้างเอาต์พุตที่ไม่แน่นอนในการรันครั้งที่สองเนื่องจาก$dไม่ได้กำหนดค่าเริ่มต้นใหม่

บันทึก 2 ไบต์โดยใช้ + = บันทึก 3 ไบต์ด้วย @TimmyD


@TimmyD จริงได้รับมันลงไป 41 ตั้งแต่ฉันจะไม่จำเป็นต้อง,( )
Jonathan Leech-Pepin

ไม่นั่นเป็นความผิดของฉันฉันลืมปรับปรุงแม้ว่าฉันจะบอกว่าทำ
Jonathan Leech-Pepin

สคริปต์ไม่ได้ทำงานด้วย 0 และไม่ได้สร้างจดหมายตัวพิมพ์ใหญ่
mazzy





1

APL (NARS), 24 ตัวอักษร, 48 ไบต์

{⍵<0:⍬⋄k,⎕A[⍵+1],k←∇⍵-1}

ทดสอบ:

  f←{⍵<0:⍬⋄k,⎕A[⍵+1],k←∇⍵-1}
  f 0
A
  f 1
ABA
  f 2
ABACABA
  f 3
ABACABADABACABA
  f 4
ABACABADABACABAEABACABADABACABA

1
APL ใช้หน้ารหัสของตัวเองไม่ได้กับทุกตัวอักษรหนึ่งไบต์ทำ 24 ไบต์นี้หรือไม่
Loovjo

@ Loovjo สำหรับสิ่งที่ฉันรู้ว่า Nars Apl มีชุดอักขระ 2 ไบต์สำหรับอักขระ
RosLuP

1

PHP -r , 43 ไบต์

register_argc_argv ต้องเปิดใช้งานเพื่อให้สิ่งนี้ทำงานได้

for($a=$b=a;$argv[1]--;$a.=++$b.$a);echo$a;

ลองออนไลน์!

PHP , 51 ไบต์

ฟังก์ชั่นไม่ระบุชื่อที่พิมพ์ออกโดยตรง

function($n){for($a=$b=a;$n--;$a.=++$b.$a);echo$a;}

ลองออนไลน์!

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