พรีลูด , 69 55 54 ไบต์
?1-(v #1)-
1 0v ^(# 0 (1+0)#)!
(#) ^#1-(0)#
หากล่ามที่สอดคล้องกับมาตรฐานที่ใช้นี้จะใช้เวลาเข้าและส่งออกเป็นค่าไบต์ ที่จริงการใช้ตัวเลขทศนิยมใน STDIN / STDOUT คุณจะต้องล่ามหลามด้วยและตัวเลือกเพิ่มเติมNUMERIC_OUTPUT = True
NUMERIC_INPUT = True
คำอธิบาย
โครงกระดูกของโปรแกรมคือ
?1-( 1 -
1 )!
เราอ่านการป้อนข้อมูลบนเสียงครั้งแรกและพร่องมันจะได้รับN
N-1
นอกจากนี้เรายัง initialise 1
เสียงที่สองที่จะ จากนั้นเราวนN-1
หนึ่งครั้งซ้ำแต่ละครั้งซึ่งได้รับค่าถัดไปของลำดับในกองที่สอง ในตอนท้ายเราพิมพ์N
หมายเลข th
ความคิดของโปรแกรมคือการทำให้แต่ละองค์ประกอบของลำดับในคิวเสียงที่สามและลดหัวของคิวนั้นในการทำซ้ำแต่ละครั้ง เมื่อมาถึงหัวเราเพิ่มมูลค่าของลำดับและลบที่ว่า0
0
ตอนนี้ปัญหาคือโหมโรงใช้กองซ้อนไม่ใช่คิว ดังนั้นเราต้องเลื่อนไปรอบ ๆ สแต็กเล็กน้อยเพื่อใช้มันเหมือนคิว
v #
0v ^
(#)
สิ่งนี้จะคัดลอกค่าปัจจุบันของลำดับไปยังเสียงแรก (เป็นสำเนาชั่วคราว), ส่ง0
ไปยังเสียงที่สอง (เพื่อทำเครื่องหมายจุดสิ้นสุดของคิว) จากนั้นทำการวนซ้ำเพื่อเปลี่ยน (และย้อนกลับ) สแต็กที่สามลงบนที่สอง หลังจากวนรอบเราวางสำเนาของค่าลำดับปัจจุบันที่ด้านบนของสแต็กที่สอง (ซึ่งคือส่วนท้ายของคิวของเรา)
)
(#
^#1-
มันดูน่าเกลียดนิดหน่อย แต่โดยพื้นฐานแล้วมันคือวงที่เลื่อนสแต็กกลับไปที่เสียงที่สาม ตั้งแต่)
อยู่ในคอลัมน์เดียวกับคำแนะนำการขยับที่เราใส่ในเสียงที่สองก่อนหน้านี้ก็จะจบลงในเสียงที่สามดังนั้นเราจึงจำเป็นที่จะเอามันออกไปอีกด้วย0
#
จากนั้นย่อส่วนบนของเสียงที่ 3 นั่นคือส่วนหัวของคิว
ตอนนี้มันน่ารำคาญนิดหน่อย - เราต้องการรันโค้ดบางอย่างเมื่อค่านั้นเป็น0
แต่โครงสร้างการควบคุม (ลูป) ของ Prelude เพียงตอบสนองต่อค่าที่ไม่เป็นศูนย์เท่านั้น
0 (1+0)#
(0)#
โปรดทราบว่าเสียงด้านบนสุดของเสียงที่สองนั้นเป็นจริง (เนื่องจากลำดับ Golomb ไม่มี0
s) ดังนั้นปริมาณงานจะเข้าสู่เสียงนั้น (วงเล็บคู่หลัง) เราแค่ต้องป้องกันไม่ให้เกิดขึ้นถ้าหัวคิว0
ยังไม่เกิดขึ้น ดังนั้นก่อนอื่นเรามี "วน" บนเสียงที่สามซึ่งผลัก a 0
ลงบนเสียงที่สองถ้าหัวของคิวยังคงไม่เป็นศูนย์ เรายังใส่0
เสียงที่สามเพื่อออกจากลูปทันที #
ในเสียงที่สามแล้วทั้งเอาที่0
หรือเอาหัวคิ้วถ้าที่มีอยู่แล้วเป็นศูนย์ ตอนนี้ลูปที่สองจะถูกป้อนก็ต่อเมื่อส่วนหัวของคิวเป็นศูนย์ (และ0
ในเสียงที่สองไม่เคยผลัก) ในกรณีนี้เราเพิ่มค่าปัจจุบันของลำดับและกด a 0
เพื่อออกจากลูป สุดท้ายจะมีส่วน0
บนของสแต็คเสมอซึ่งเราต้องทิ้ง
ฉันบอกคุณแล้วว่าการปฏิเสธทางตรรกะน่ารำคาญในโหมโรง ...
n
2 - n % 1
คุณมีเหตุผลที่คาดหวังคำตอบที่แตกต่างกันอย่างมีนัยสำคัญหรือไม่