ส่งออกลำดับ Goodstein ที่ง่ายขึ้น


22

ตัวเลขจะอยู่ในรูปแบบพื้นฐาน -B ทำให้ Goodstein ง่ายขึ้นหากมันถูกเขียนเป็น

b + b + ... + b + c,   0 < c ≤ b

ลำดับ Goodstein แบบย่อของตัวเลขเริ่มต้นด้วยการเขียนหมายเลขในแบบฟอร์ม -1 แบบง่าย Goodstein จากนั้นแทนที่ 1 ทั้งหมดด้วย 2 และลบออก 1 เขียนผลการค้นหาในแบบฟอร์ม Goodstein แบบย่อ 2 จากนั้นแทนที่ทั้ง 2 ด้วย 3 และลบ 1 เป็นต้นจนกว่าคุณจะถึง 0

โปรแกรมของคุณคือรับค่าอินพุทและเอาท์พุทจำนวนเต็มบวก / พิมพ์ลำดับ Goodstein และยุติ โปรแกรมของคุณควรจัดการกับตัวเลขน้อยกว่า 100 แม้ว่ามันอาจจะไม่ยุติในระยะเวลาที่เหมาะสม

ตัวอย่างเช่นเมื่อได้รับ 3 เป็นอินพุตโปรแกรมของคุณควรเอาต์พุต (ด้านขวาเป็นเพียงคำอธิบาย)

1 + 1 + 1                | 3 = 1 + 1 + 1
2 + 2 + 1                | Change 1's to 2's, then subtract 1. (2 + 2 + 2 - 1 = 2 + 2 + 1)
3 + 3                    | 3 + 3 + 1 - 1 = 3 + 3
4 + 3                    | 4 + 4 - 1 = 4 + 3
5 + 2                    | 5 + 3 - 1 = 5 + 2
6 + 1                    | 6 + 2 - 1 = 6 + 1
7                        | 7 + 1 - 1 = 7
7                        | 8 - 1 = 7
6                        | Numbers are now lower than the base, so just keep subtracting 1.
5                        |
4                        |
3                        |
2                        |
1                        |
0                        | End

การเว้นวรรคนั้นไม่สำคัญ


เกณฑ์การชนะ:

นี่คือรหัสกอล์ฟรหัสที่สั้นที่สุดชนะ


1
จำเป็นต้องรวม 0 ครั้งสุดท้ายหรือไม่
KSab

5
@KSab อืม .... ไม่ฉันเดาไม่ได้
ศิลปะที่สวยงามเรียบง่าย

คำตอบ:


2

05AB1E , 19 ไบต์

Å1[D'+ý,N>D>:`Ž<)0K

อาจถูกจัดใหม่เป็น >Å1[ND>:`Ž<)0KD'+ý,

ลองออนไลน์!

คำอธิบาย

Å1                    # push a list of 1's the length of the input
  [                   # start a loop
   D                  # duplicate the current list
    '+ý,              # join on "+" and print
        N>D>:         # replace <current_iteration>+1 with <current_iteration>+2
             `        # flatten the list to the stack
              Ž       # break loop if the stack is empty
               <      # decrement the top number
                )     # wrap the stack in a list
                 0K   # remove zeroes

10

Python 2, 77 74 ไบต์

-3 ไบต์ด้วยLynn

n=input();b=1
while n:print"+".join(n/b*[`b`]+[`n%b`][:n%b]);n+=n/b-1;b+=1

ลองออนไลน์!

วิ่งได้อย่างง่ายดายถึง n = 100 (แม้ว่าเอาต์พุตจะยาวเกินไปสำหรับการแสดง tio อย่างสมบูรณ์)


"การเว้นวรรคไม่สำคัญ" ดังนั้นคุณก็สบายดี
ศิลปะที่สวยงามเรียบง่าย

บันทึกไบต์โดยอ่านอินพุตจาก STDIN:n=input() b=1 while n:…
Lynn

1
n+=n/b-1;b+=1และสองมากขึ้นด้วย 74 ไบต์
Lynn

1
@SimplyBeautifulArt ได้รับการแก้ไขแล้ว
KSab

1
@SimplyBeautifulArt มันเห็นได้ชัดว่าจะทำอย่างไรกับในขณะที่ห่วงคุณไม่สามารถใส่ต่อไปนี้while ;ฉันเดาว่านี่เป็นเพราะถ้าบรรทัดเริ่มต้นด้วยwhileคำสั่งต่อไปนี้ (คั่นด้วยเครื่องหมายอัฒภาค) จะถูกพิจารณาภายในขอบเขตของเวลาและพฤติกรรมจะคลุมเครือหรืออย่างน้อยก็ค่อนข้างทึบ
KSab



1

Python 3, 155 ไบต์

n=int(input());l=[1]*(n+1);i=0
while l:
    l=[t+1 if t==i else t for t in l];l[-1]-=1;l=l[:-1] if l[-1]==0 else l;print("+".join(list(map(str,l))));i+=1

สามารถทำการฟอร์แมตใหม่ได้

n = int(input())
l = [0]*(n+1)
i = 0
while l:
    l = [t+1 if t==i else t for t in l]
    if l[-1] == 0:
        l = l[:-1]
    print("+".join(list(map(str,l))))
    i += 1

คุณพลาดบรรทัดแรก1+1+...และโปรดทราบว่าโปรแกรมของคุณควรจัดการกับอินพุตจำนวนเต็มบวกใด ๆ
ศิลปะที่สวยงามเรียบง่าย

1
ได้โปรด นอกจากนี้ MathJax ไม่สามารถใช้งานได้ในเว็บไซต์นี้: P
Simply Beautiful Art

1
+สำหรับผมมันดูเหมือนว่าคุณใส่ช่องว่างในรุ่นแข็งแรงเล่นกอล์ฟของคุณแทน
ศิลปะที่สวยงามเรียบง่าย


1
@RGS -~xมีค่าเช่นเดียวกับx+1คุณ แต่คุณไม่จำเป็นต้อง parenthesize มันเป็นเอก-(ปฏิเสธ) และเอก~(บิตปฏิเสธ) *ไม่ได้มีความสำคัญสูงกว่า ในกรณีของคุณมีค่าเท่ากับ[1]*-~n [1]*(n+1)
ovs

1

Javascript ES6, 121 ตัวอักษร

for(q=1,s=Array(+prompt()).fill(1).join`+`;s!=0;s=s.split(q).join(++q).replace(/\d+$/,x=>x-1).replace(/\+0$/,''))alert(s)

alert=s=>document.write(s+'\n')
document.write("<pre>")

for(q=1,s=Array(+prompt()).fill(1).join`+`;s!=0;s=s.split(q).join(++q).replace(/\d+$/,x=>x-1).replace(/\+0$/,''))alert(s)


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