รับ N องค์ประกอบที่ n ขององค์ประกอบ ['A', 'B', 'AB', 'C', 'D', 'CD', 'ABCD', 'E', …]?


12

พิจารณารายการต่อไปนี้:

expected = [
'A',
'B',
'AB',
'C',
'D',
'CD',
'ABCD',
'E',
'F',
'EF',
'G',
'H',
'GH',
'EFGH',
'ABCDEFGH',
'I',
'J',
'IJ',
'K',
'L',
'KL',
'IJKL',
'M',
'N',
'MN',
'O',
'P',
'OP',
'MNOP',
'IJKLMNOP',
'ABCDEFGHIJKLMNOP',
...
]

นี่คือวิธีหนึ่งในการดู - คุณกำลังเรียนรู้วิธีการเขียนตัวอักษรจีนและต้องการเรียนรู้ชิ้นใหญ่ ๆ ของพวกเขามากขึ้นฝึกซ้อมเมื่อคุณไป คุณเริ่มต้นด้วย A จากนั้นไปด้วย B จากนั้นมีลำดับที่เป็นคู่ที่สองแล้วคุณรวมมัน จากนั้นคุณไปกับ C และ D สร้างคู่อีกคู่ฝึกมัน จากนั้นคุณซ้อม: ABCD จากนั้นไปด้วย E ถึง H แล้วทดสอบซ้ำ: ABCDEFGH รายการไม่มีที่สิ้นสุด

เป้าหมายคือการสร้างและพิมพ์องค์ประกอบที่ n ของรายการนี้ดัชนีจะเพิ่มขึ้นจากศูนย์ สมมติว่าหลังจาก 'Z' คุณจะได้ 'A' อีกครั้ง

เกณฑ์การชนะคือความยาวซอร์สโค้ด


3
ไม่แน่ใจว่าผมได้รับมันเมื่อเป็นBCหรือCDEF? อะไรเป็นตัวตัดสินว่าเราต่อกันอะไรและอะไรที่เราไม่ทำ? มันจะไม่มีที่สิ้นสุดได้อย่างไรถ้ามันเริ่มต้นAอีกครั้งหลังจากนั้นZ(คุณหมายถึงบางจุดหลังจากที่ABCDEFGHIJKLMNOPQRSTUVWXZเรามีABCDEFGHIJKLMNOPQRSTUVWXZABหรืออะไร?)
Jonathan Allan

5
กรณีทดสอบสำหรับตัวอักษรที่ล้อมรอบเป็นที่นิยม ( x,y,z,a,b...)
Stewie Griffin

7
ฉันขอแนะนำให้คุณใช้Sandboxในอนาคตเพื่อปรับปรุงความท้าทายของคุณ ที่นั่นคุณจะได้รับคำติชมจากผู้ใช้เพื่อนเพื่อให้แน่ใจว่าความท้าทายของคุณเหมาะสำหรับเว็บไซต์ PPCG หลัก! โดยส่วนตัวฉันจะออกจากโพสต์ใน Sandbox อย่างน้อย 2 วันเพื่อให้ทุกคนมีโอกาสดูโพสต์
JungHwan Min

2
@JungHwanMin: ไม่ตกลงเพื่อพิมพ์รายการอย่างไม่ จำกัด ฉันจะส่งคืนรายการจำนวนเต็ม
d33tah

4
"ฉันจะส่งคืนรายการจำนวนเต็ม" หมายความว่าอย่างไร เอาท์พุทของรายการจำนวนเต็มเป็นที่ยอมรับหรือไม่? ถ้าเป็นเช่นนั้น "สมมติว่าหลังจาก 'Z' คุณจะได้ 'A' อีกครั้ง" - นี่ควรเป็นกรณีที่มีรูปแบบผลลัพธ์นี้ (หลังจากฉัน + 25 เราจะได้รับอีกครั้ง) (อัปเดตโพสต์ด้วยข้อมูลที่เกี่ยวข้อง - อย่าทิ้งข้อกำหนดที่จะพบในความคิดเห็น)
Jonathan Allan

คำตอบ:


8

Python 2, 53 ไบต์

x,y=0,1
exec"x^=y-x;y+=x/y;"*input()
print range(x,y)

ลองออนไลน์!

คล้ายกับการนี้การก่อสร้างที่มีการเปลี่ยนแปลงx = u-v,y = u


เป็นเรื่องง่ายดี! คำสั่งแรกสามารถเป็นx^=y-x-1 ไบต์
xnor

@xnor โอ้ใช่ฉันโง่
KSab

6

JavaScript (ES6), 59 ไบต์

เราสามารถบันทึก 2 ไบต์โดยสร้างลำดับที่ 1 จัดทำดัชนีและใช้การทำให้เข้าใจง่ายคล้ายกับที่ใช้โดย KSab :

n=>(x=g=y=>n?g(y+=y==(x^=y-x),n--):x<y?[x++,...g(y)]:[])(1)

ลองออนไลน์!


JavaScript (ES6), 61 ไบต์

ส่งคืนรายการจำนวนเต็มที่ไม่ได้ห่อ

n=>(g=v=>n?g(u&-u^v?v*2:!!u++,n--):v?[u-v,...g(v-1)]:[])(u=1)

ลองออนไลน์!

ตามการก่อสร้างโดย Donald Knuth OEIS ที่เกี่ยวข้องรายการ: A182105

อย่างไร?

นี่เป็นฟังก์ชั่นวนซ้ำแบบสองขั้นตอน

ก่อนอื่นเราสร้างลำดับกำหนดเป็นและ:(un,vn)(u1,v1)=(1,1)

(un+1,vn+1)={(un+1,1),if (unANDun)=vn(un,2vn),otherwise

ในช่วงที่สองเราสร้างรายการและในที่สุดก็ส่งคืน[unvn,unvn+1,,un]


JavaScript (ES6), 97 ไบต์

ส่งคืนการตัดตัวอักษรตัวพิมพ์ใหญ่

n=>(s=i='',g=v=>(s+=String.fromCharCode(65+i++%26),n--)?g(u&-u^v?v*2:!!u++):s.substr(u-v,v))(u=1)

ลองออนไลน์!

หรือ91 ไบต์เป็นตัวพิมพ์เล็ก


3

Python 2 , 60 ไบต์

u=v=1
exec"v=u/v%2or 2*v;u+=1/v;"*input()
print range(u-v,u)

ลองออนไลน์!

ขึ้นอยู่กับการใช้งานของ Arnauld ของการก่อสร้างของ เงื่อนไขu&-u==vสามารถถูกแทนที่ด้วยเงื่อนไขที่ง่ายกว่าu/v%2>0หรืออีกทางหนึ่งu&v>0เนื่องจากvมีกำลัง 2 ที่uหารด้วยเสมอ


2

ภาษา Wolfram (Mathematica) , 80 71 ไบต์

Range@#2+#-#2&@@Nest[If[#~BitAnd~-#==#2,{#+1,1},{#,2#2}]&@@#&,{1,1},#]&

ลองออนไลน์!

ส่งคืนรายการจำนวนเต็มแทนที่จะเป็นสตริงการตัดของตัวอักษร 0 การจัดทำดัชนี

ใช้OEIS A182105ขอบคุณ @Arnauld

พิมพ์รายการไปเรื่อย ๆ 54 ไบต์

Do[j=Range@i;#∣i&&Print@j[[-#;;]]&/@(2^j/2),{i,∞}]

ลองออนไลน์!

1 การจัดทำดัชนี รุ่น TIO มีlimแทนเพื่อป้องกันไม่ให้เกิดปัญหา




1

ถ่าน , 45 42 35 ไบต์

FN⊞υ⎇∧›Lυ¹⁼L§υ±¹L§υ±²⁺⊟υ⊟υ§αL⭆υκ⮌⊟υ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด 1 การจัดทำดัชนี ฉันไม่สามารถหาสูตรง่าย ๆ ในการสร้างผลลัพธ์ดังนั้นฉันเพียงทำตามขั้นตอนที่ให้ไว้ในคำถาม คำอธิบาย:

FN

ทำซ้ำจำนวนnครั้งที่กำหนด

⊞υ

กดองค์ประกอบถัดไปไปยังอาร์เรย์ว่างที่กำหนดไว้ล่วงหน้าuซึ่งคำนวณเป็น ...

⎇∧›Lυ¹⁼L§υ±¹L§υ±²

... หากมีองค์ประกอบมากกว่าหนึ่งรายการuและองค์ประกอบสองรายการสุดท้ายมีความยาวเท่ากัน ...

⁺⊟υ⊟υ

... จากนั้นผนวกองค์ประกอบสุดท้ายต่อท้ายองค์ประกอบสุดท้าย (ซึ่งสร้างผลลัพธ์ในลำดับที่กลับกัน) ...

§αL⭆υκ

... มิฉะนั้นจะพบตัวอักษรตัวต่อไปโดยนับจำนวนตัวอักษรที่เราได้เพิ่มเข้าไปและสร้างดัชนีลงในตัวอักษรตัวพิมพ์ใหญ่ที่กำหนดไว้ล่วงหน้า (การรวมผลรวมของความยาวหรือความยาวของผลรวมล้มเหลวเมื่อรายการว่างเปล่าและการแมปรายการลงในสายอักขระจะบันทึกสองไบต์ผ่านการกำหนดรายการพิเศษว่างเปล่า)

⮌⊟υ

ใช้องค์ประกอบสุดท้ายของuซึ่งเป็นnองค์ประกอบที่ตรงกันข้ามของรายการที่ต้องการและพิมพ์ย้อนกลับโดยปริยาย

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