ทำให้หมายเลขใด ๆ โดยเพิ่มหมายเลข 2 ซ้ำ ๆ


14

คุณจะได้รับเครื่องที่มีสองลงทะเบียน 16 บิตและx yลงทะเบียนจะเริ่มต้นและx=1 y=0การดำเนินการเพียงอย่างเดียวที่เครื่องสามารถทำได้คือการเพิ่มโมดูโล 65536 นั่นคือ:

  • x+=y- xถูกแทนที่ด้วย(x + y) mod 65536; yไม่เปลี่ยนแปลง
  • y+=x - ในทำนองเดียวกันสำหรับ y
  • x+=x- xถูกแทนที่ด้วย2x mod 65536; ถูกกฎหมายเฉพาะในกรณีที่xเป็นแม้กระทั่ง
  • y+=y - ในทำนองเดียวกันสำหรับ y

เป้าหมายคือการรับจำนวนที่กำหนดไว้ในหนึ่งในการลงทะเบียน (อย่างใดอย่างหนึ่งxหรือy)

เขียนโปรแกรมหรือรูทีนย่อยที่ได้รับหมายเลข (ในstdin,, argvพารามิเตอร์ฟังก์ชั่น, ด้านบนของสแต็กหรือสถานที่ทั่วไปอื่น ๆ ) และส่งออกโปรแกรมเพื่อรับหมายเลขนี้ เอาต์พุตควรไปที่stdoutหรือ (หากภาษาของคุณไม่มีstdout) ไปยังอุปกรณ์เอาต์พุตทั่วไปอื่น ๆ

โปรแกรมเอาต์พุตสามารถมีได้สูงสุด 100% บวกกับ 2 ขั้นตอนจากขั้นตอนที่เหมาะสมที่สุด นั่นคือถ้าโปรแกรมที่สั้นที่สุดที่จะได้รับจำนวนเป้าหมายมีขั้นตอนวิธีการแก้ปัญหาของคุณไม่สามารถจะยาวกว่าn 2n+2ข้อ จำกัด นี้คือการหลีกเลี่ยงการแก้ปัญหา "ง่ายเกินไป" (เช่นการนับ 1, 2, 3, ... ) แต่ไม่ต้องการการปรับให้เหมาะสมเต็มที่ ฉันคาดหวังว่าโปรแกรมที่สั้นที่สุดง่ายที่สุดในการค้นหา แต่ไม่แน่ใจ ...

ตัวอย่างเช่น: อินพุต = 25 เอาต์พุต:

y+=x
x+=y
x+=y
x+=x
x+=x
x+=x
y+=x

อีกตัวอย่างหนึ่ง: สำหรับหมายเลขฟีโบนักชีใด ๆ เอาต์พุตมีรูปแบบสลับนี้ สำหรับอินพุต = 21 เอาต์พุตคือ

y+=x
x+=y
y+=x
x+=y
y+=x
x+=y
y+=x

รหัสที่สั้นที่สุด (วัดเป็นไบต์) ชนะ

(ปริศนานี้ได้รับแรงบันดาลใจจากโค้ดบางอย่างสำหรับโปรเซสเซอร์ 16 บิตที่ฉันต้องสร้างเมื่อเร็ว ๆ นี้)

ป.ล. ฉันสงสัยว่าโปรแกรมใดที่ดีที่สุดยาวที่สุด


9
ด้วยความอยากรู้ทำไมถึงถูกx+=xต้องตามกฎหมายเท่านั้นทำไมถึงเป็นเช่นxนั้น? สำหรับโปรแกรมที่สั้นที่สุดฉันคิดว่าบางอย่างเช่น BFS สามารถใช้งานได้
Sp3000

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

ฉันเปลี่ยนข้อ จำกัด ตามจำนวนขั้นตอนดังนั้นสำหรับเป้าหมายหมายเลข 0 หรือ 1 โปรแกรมเอาต์พุตไม่จำเป็นต้องว่างเปล่า
anatolyg

3
ถ้าx+=xใช้งานได้กับคู่เท่านั้นxตัวอย่างสำหรับอินพุต 25 doubles 3 มาทำไม
bcsb1001

คำตอบ:


2

CJam, 31

เช่นเดียวกับคำตอบของ@Tobiaอัลกอริทึมของฉันก็ถูกขโมยอย่างไร้ยางอายโดย@CChakคำตอบของแต่การใช้เวทมนตร์สีดำนั่นคือ CJam ฉันสามารถทำให้การใช้อัลกอริทึมมีขนาดเล็กลงได้

ลองที่นี่

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

qi{_4%!:X)/X!-'xX+"
y+="@}h;]W%`

Ungolfed:

qi          "Read input and convert to integer.";
{           "Do...";
  _4%!:X    "Assign (value mod 4 == 0) to X.";
  )/X!-     "If X, divide value by 2. If not X, decrement value.";
  'xX+      "If X, put 'y' on the stack. If not X, put 'x' on the stack.";
  "
y+="        "Put '\ny+=' on the stack.";
  @         "Rotate top 3 elements of stack left so the value is on top.";
}h          "... while value is not zero.";
;           "Discard zero value on stack.";
]W%         "Collect stack into array and reverse.";

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


จุดที่น่าสนใจในการลบ mod 65536 ฉันคิดว่าคุณทำดีว่า "หมายเลขที่กำหนด" ต้องอยู่ภายใน 0-65535
CChak

8

Perl 107 97

โพสต์แรกดังนั้นที่นี่ไป

sub h{($i)=@_;return if(($i%=65536)==0);($i%4==0)?do{h($i/2);say"y+=y";}:do{h($i-1);say"y+=x";}}

ซึ่งตรงกับเกณฑ์การเพิ่มการลงทะเบียนทั้งหมด แต่ฉันไม่ได้ทำการตรวจสอบอย่างละเอียดถี่ถ้วนเพื่อดูว่าคำตอบของฉันนั้นอยู่ภายใน 2n + 2 ของจำนวนขั้นตอนที่เหมาะสมหรือไม่ แม้ว่าจะอยู่ในขอบเขตที่ จำกัด สำหรับทุกหมายเลขฟีโบนักชี

นี่คือรายละเอียดเพิ่มเติม

sub h{                           # Declare the subroutine, it should be called referencing an integer value
   ($i)=@_;                      # Assign the i variable to the integer used in the call
   return if(($i%=65536)==0);    # Check for base condition of called by 0, and enforce modulo from the start.
   ($i%4==0) ?                   # If the value passed is even, and will result in an even number if we halve it
   do{h($i/2);say"y+=y";}        # Then do so and recurse 
   :do{h($i-1);say"y+=x";}       # Otherwise "subtract one" and recurse
}                                # Note that the print statements get called in reverse order as we exit.

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

ที่น่าสนใจคือเราสามารถลดรหัสได้ 11 ไบต์ * และปรับปรุง "ประสิทธิภาพ" ของเราในแง่ของจำนวนการดำเนินการลงทะเบียนโดยการผ่อนคลายข้อกำหนดที่เพียงค่าเดียวเท่านั้นที่สามารถ "เพิ่ม" ได้ ฉันได้รวมไว้เพื่อความสนุกสนานที่นี่:

sub h{($i)=@_;return if(($i%=65536)==0);($i%2==0)?do{h($i/2);say"y+=y";}:do{h($i-1);say"y+=x";}}

เริ่มภาคผนวก:

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

ตัวเลขบางส่วน:

ใช้อัลกอริทึม BFS เพื่อหาทางออกที่ดีที่สุดใน 2 ^ 16 หมายเลขแรกมีเพียง 18 หมายเลขที่ต้องการ 23 ขั้นตอน พวกเขาคือ: 58558, 59894, 60110, 61182, 61278, 62295, 62430, 62910, 63422, 63462, 63979, 64230, 64314, 4486, 64510, 64698, 64854, 65295

การใช้อัลกอริทึมแบบเรียกซ้ำที่อธิบายข้างต้นหมายเลข "ยากที่สุด" ในการเข้าถึงคือ 65535 ที่ 45 การดำเนินการ (65534 ใช้เวลา 44 และมีตัวเลข 14 หมายเลขที่ทำขั้นตอนที่ 43) 65535 เป็นทางออกที่ใหญ่ที่สุดจากที่ดีที่สุด 45 ต่อ 22 ความแตกต่างของ 23 ขั้นตอนคือ 2n + 1 (มีเพียงสามหมายเลขเท่านั้นที่เข้าชม 2n: 65534, 32767, 32751) ยกเว้นกรณีเล็กน้อย (ขั้นตอนเป็นศูนย์) ในช่วงที่กำหนดวิธีการเรียกซ้ำเฉลี่ยประมาณ 1.4 เท่าของวิธีแก้ปัญหาที่ดีที่สุด

Bottom line: สำหรับตัวเลข 1-2 ^ 16 อัลกอริทึมแบบเรียกซ้ำไม่เคยข้ามเกณฑ์ที่กำหนดไว้ที่ 2n + 2 ดังนั้นคำตอบจึงใช้ได้ ฉันสงสัยว่ามันจะเริ่มห่างไกลจากทางออกที่ดีที่สุดสำหรับการลงทะเบียนขนาดใหญ่ / บิตเพิ่มเติมอย่างไรก็ตาม

รหัสที่ฉันใช้ในการสร้าง BFS นั้นเลอะเทอะมีหน่วยความจำมากไม่แสดงความคิดเห็นและไม่ได้ตั้งใจรวมไว้ ดังนั้น ... คุณไม่ต้องไว้วางใจผลลัพธ์ของฉัน แต่ฉันค่อนข้างมั่นใจในมัน


ทางออกที่ไม่ใช่ BFS เยี่ยมมาก!
anatolyg

ฉันคิดว่าแม้แต่กรณีพยาธิวิทยาที่สุดที่คุณจะอยู่ในปัจจัย 4 อาจจะดีกว่า (เนื่องจากฉันรู้เพียงว่าขอบเขตที่ต่ำกว่าสำหรับวิธีแก้ปัญหาที่ดีที่สุด) ซึ่งยังค่อนข้างดี
เหตุผล

7

Python 3, 202 ไบต์

def S(n):
 q=[(1,0,"")];k=65536
 while q:
  x,y,z=q.pop(0)
  if n in{x,y}:print(z);return
  q+=[((x+y)%k,y,z+"x+=y\n"),(x,(x+y)%k,z+"y+=x\n")]+[(2*x%k,y,z+"x+=x\n")]*(~x&1)+[(x,2*y%k,z+"y+=y\n")]*(~y&1)

(ต้องขอบคุณ @rationalis สักสองสามไบต์)

นี่คือทางออกขั้นพื้นฐานอย่างยิ่ง ฉันหวังว่าฉันจะเล่นกอล์ฟบรรทัดสุดท้ายได้ดีกว่า แต่ตอนนี้ฉันไม่มีไอเดีย S(25)โทรหา

โปรแกรมนี้ทำ BFS อย่างง่ายโดยไม่มีการแคชดังนั้นจึงช้ามาก ที่นี่คือS(97)ตัวอย่างเอาต์พุตบางส่วน:

y+=x
x+=y
x+=x
x+=x
x+=x
x+=x
y+=x
y+=x
x+=y

5

Dyalog APL, 49 ตัวอักษร / ไบต์ *

{0=N←⍵|⍨2*16:⍬⋄0=4|N:⎕←'y+=y'⊣∇N÷2⋄⎕←'y+=x'⊣∇N-1}

อัลกอริทึมแรงบันดาลใจลงคอโดย คำตอบของ@CChak

ตัวอย่าง:

    {0=N←⍵|⍨2*16:⍬⋄0=4|N:⎕←'y+=y'⊣∇N÷2⋄⎕←'y+=x'⊣∇N-1} 25
y+=x
y+=x
y+=y
y+=x
y+=x
y+=y
y+=y
y+=x

Ungolfed:

{
    N←(2*16)|⍵                 # assign the argument modulo 65536 to N
    0=N: ⍬                     # if N = 0, return an empty value (that's a Zilde, not a 0)
    0=4|N: ⎕←'y+=y' ⊣ ∇N÷2     # if N mod 4 = 0, recurse with N÷2 and *then* print 'y+=y'
    ⎕←'y+=x' ⊣ ∇N-1            # otherwise, recurse with N-1 and *then* print 'y+=x'
}

* Dyalog APL รองรับชุดอักขระดั้งเดิมซึ่งมีสัญลักษณ์ APL ที่แมปกับค่าสูงสุด 128 ไบต์ ดังนั้นโปรแกรม APL ที่ใช้เฉพาะอักขระ ASCII และสัญลักษณ์ APL จึงถือเป็นไบต์ == ตัวอักษร


3

Python, 183

def S(n):
 b,c,e=16,'x+=x\n','x+=y\n';s=d='y+=x\n';a=i=0
 if n<2:return
 while~n&1:n>>=1;a+=1
 while n:n>>=1;s+=[e,c][i]+d*(n&1);i=1;b-=1
 while a:s+=[c,c*b+e*2][i];i=0;a-=1
 print(s)

ฉันไม่สามารถรับประกันได้ว่าการเข้าพักจะอยู่ภายใน 2x โปรแกรมที่ดีที่สุดสำหรับตัวเลขที่เท่ากัน แต่มีประสิทธิภาพ สำหรับอินพุตที่ถูกต้องทั้งหมด0 <= n < 65536เป็นหลักทันทีและสร้างโปรแกรมได้สูงสุด 33 คำสั่ง สำหรับขนาดการลงทะเบียนโดยพลการn(หลังจากกำหนดค่าคงที่นั้น) จะใช้O(n)เวลาไม่นาน2n+1คำแนะนำอย่างมาก

ตรรกะบางอย่าง

จำนวนคี่ใด ๆ ที่nสามารถเข้าถึงได้ภายใน 31 ขั้นตอน: ทำy+=x, รับx,y = 1,1และจากนั้นให้เพิ่มเป็นสองเท่าxด้วยx+=x(สำหรับการเพิ่มเป็นสองเท่าแรกให้ทำx+=yเนื่องจากxเป็นเลขคี่ที่จะเริ่มต้นด้วย) xจะไปถึงพลังทั้งหมดของ 2 ด้วยวิธีนี้ (มันเป็นเพียงกะซ้าย) และคุณสามารถตั้งค่าบิตใด ๆyให้เป็น 1 ได้โดยเพิ่มกำลังที่สอดคล้องกันเป็น 2 เนื่องจากเราใช้รีจิสเตอร์ 16 บิตและแต่ละบิตยกเว้น สำหรับครั้งแรกใช้เวลาหนึ่งในการเข้าถึงและเป็นสองเท่าy+=xในการตั้งค่าเราได้รับสูงสุด 31 ตัวเลือก

เลขคู่ใด ๆnเป็นเพียงกำลังบางส่วนของ 2 เรียกว่าaคูณจำนวนคี่เรียกว่าm; เช่นหรือเท่ากันn = 2^a * m n = m << aใช้กระบวนการข้างต้นเพื่อรับmจากนั้นรีเซ็ตxโดยเลื่อนไปทางซ้ายจนกว่าจะเป็น 0 ทำการx+=yตั้งค่าx = mแล้วทำต่อไปเป็นสองเท่าxในครั้งแรกที่ใช้งานx+=yและใช้งานในภายหลังx+=xและต่อมาใช้

สิ่งที่aเป็นก็จะใช้เวลา16-aกะxที่จะได้รับy=mและเพิ่มเติมการเปลี่ยนแปลงการตั้งค่าใหม่a จะมีการเปลี่ยนแปลงx=0อีกครั้งหลังจากนั้น ดังนั้นจึงใช้กะทั้งหมด มีถึงบิตที่จะต้องมีการตั้งค่าที่จะได้รับและแต่ละคนจะใช้เวลาหนึ่ง ในที่สุดเราต้องการขั้นตอนพิเศษเมื่อตั้งค่าเป็น maxx=m16+a16-amy+=xx=0x+=yตั้งค่าให้เมตรดังนั้นจึงต้องใช้เวลาไม่เกิน 33 ขั้นตอนในการรับหมายเลขคู่

แน่นอนว่าคุณสามารถพูดคุยเรื่องนี้กับการลงทะเบียนขนาดใดก็ได้ซึ่งในกรณีนี้จะใช้เวลามากที่สุด2n-1และเป็น2n+1ops สำหรับคี่และคู่nจำนวนเต็มตามลำดับ

optimality

อัลกอริทึมนี้สร้างโปรแกรมที่ใกล้จะเหมาะสมที่สุด (เช่นภายใน2n+2ถ้าnเป็นจำนวนขั้นต่ำ) สำหรับจำนวนคี่ สำหรับเลขคี่ที่กำหนดnถ้าmบิต TH เป็นผู้นำ 1 แล้วโปรแกรมใด ๆ ใช้เวลาอย่างน้อยmขั้นตอนที่จะได้รับx=nหรือy=nเนื่องจากการดำเนินการซึ่งจะเป็นการเพิ่มค่าจิที่เร็วที่สุดคือx+=xหรือy+=y(เช่น doublings) และจะใช้เวลาmdoublings ที่จะได้รับmบิต TH จาก 1. ตั้งแต่ขั้นตอนวิธีการนี้จะใช้เวลาที่มากที่สุด2mขั้นตอน (สองที่มากที่สุดต่อการเสแสร้งหนึ่งสำหรับการเปลี่ยนแปลงและเป็นหนึ่งในy+=x ) เลขคี่ใด ๆ ที่เป็นตัวแทนใกล้ได้อย่างดีที่สุด

แม้ตัวเลขจะไม่ค่อยดีนักเนื่องจากมันใช้ 16 ops เพื่อรีเซ็ต xก่อนสิ่งอื่นเสมอและ 8 ตัวอย่างเช่นสามารถเข้าถึงได้ภายใน 5 ขั้นตอน

ที่น่าสนใจอัลกอริทึมด้านบนไม่เคยใช้y+=yเลยเพราะyมันแปลกเสมอ ในกรณีนี้จริง ๆ แล้วมันอาจค้นหาโปรแกรมที่สั้นที่สุดสำหรับชุดที่ จำกัด ของการดำเนินการเพียง 3

การทดสอบ

# Do an exhaustive breadth-first search to find the shortest program for
# each valid input
def bfs():
    d = {(0,1):0}
    k = 0xFFFF
    s = set(range(k+1))
    current = [(0,1)]
    nexts = []
    def add(pt, dist, n):
        if pt in d: return
        d[pt] = dist
        s.difference_update(pt)
        n.append(pt)
    i = 0
    while len(s) > 0:
        i += 1
        for p in current:
            x,y = p
            add((x,x+y&k), i, nexts)
            add((y,x+y&k), i, nexts)
            if y%2 == 0: add(tuple(sorted((x,y+y&k))), i, nexts)
            if x%2 == 0: add(tuple(sorted((x+x&k,y))), i, nexts)
        current = nexts
        nexts = []
        print(len(d),len(s))

# Mine (@rationalis)
def S(n):
    b,c,e=16,'x+=x\n','x+=y\n';s=d='y+=x\n';a=i=0
    if n<2:return ''
    while~n&1:n>>=1;a+=1
    while n:n>>=1;s+=[e,c][i]+d*(n&1);i=1;b-=1
    while a:s+=[c,c*b+e*2][i];i=0;a-=1
    return s

# @CChak's approach
def U(i):
    if i<1:return ''
    return U(i//2)+'y+=y\n' if i%4==0 else U(i-1)+'y+=x\n'

# Use mine on odd numbers and @CChak's on even numbers
def V(i):
    return S(i) if i % 2 == 1 else U(i)

# Simulate a program in the hypothetical machine language
def T(s):
    x,y = 1,0
    for l in s.split():
        if l == 'x+=x':
            if x % 2 == 1: return 1,0
            x += x
        elif l == 'y+=y':
            if y % 2 == 1: return 1,0
            y += y
        elif l == 'x+=y': x += y
        elif l == 'y+=x': y += x
        x %= 1<<16
        y %= 1<<16
    return x,y

# Test a solution on all values 0 to 65535 inclusive
# Max op limit only for my own solution
def test(f):
    max_ops = 33 if f==S else 1000
    for i in range(1<<16):
        s = f(i); t = T(s)
        if i not in t or len(s)//5 > max_ops:
            print(s,i,t)
            break

# Compare two solutions
def test2(f,g):
    lf = [len(f(i)) for i in range(2,1<<16)]
    lg = [len(g(i)) for i in range(2,1<<16)]
    l = [lf[i]/lg[i] for i in range(len(lf))]
    print(sum(l)/len(l))
    print(sum(lf)/sum(lg))

# Test by default if script is executed
def main():
    test()

if __name__ == '__main__':
    main()

ฉันเขียนการทดสอบอย่างง่าย ๆ เพื่อตรวจสอบว่าโซลูชันของฉันให้ผลลัพธ์ที่ถูกต้องและไม่ผ่านไป 33 ขั้นตอนสำหรับอินพุตที่ถูกต้องทั้งหมด ( 0 <= n < 65536)

นอกจากนี้ฉันพยายามทำการวิเคราะห์เชิงประจักษ์เพื่อเปรียบเทียบผลลัพธ์ของโซลูชันกับผลลัพธ์ที่ดีที่สุด - อย่างไรก็ตามปรากฎว่าการค้นหาความกว้างแรกนั้นไม่มีประสิทธิภาพเกินกว่าที่จะรับความยาวเอาต์พุตขั้นต่ำสำหรับอินพุตที่ถูกต้องnทั้งหมด ตัวอย่างเช่นการใช้ BFS เพื่อค้นหาผลลัพธ์สำหรับn = 65535จะไม่ยุติในระยะเวลาที่เหมาะสม อย่างไรก็ตามฉันทิ้งไว้bfs()และเปิดรับข้อเสนอแนะ

อย่างไรก็ตามฉันทดสอบโซลูชันของตัวเองกับ @ CChak (นำไปใช้ใน Python ที่นี่ด้วยU) ฉันคาดหวังว่าเหมืองของฉันจะแย่ลงเนื่องจากมันไม่มีประสิทธิภาพอย่างมากสำหรับตัวเลขที่เล็กกว่า แต่โดยเฉลี่ยในทั้งสองวิธีทำให้เหมืองของฉันมีความยาวเฉลี่ย 10.8% ถึง 12.3% ฉันคิดว่านี่อาจเป็นเพราะประสิทธิภาพที่ดีขึ้นจากการแก้ปัญหาของฉันเองกับตัวเลขคี่ดังนั้นVใช้ทุ่นเลขคี่และ @ CChak เป็นเลขคู่ แต่Vอยู่ในระหว่าง (สั้นกว่าประมาณ 10 U% นานกว่าประมาณ 3% S)


1
ตรรกะค่อนข้างมากใน 201 ไบต์!
Anatolyg

@analtolyg ฉันจะพูดอะไรได้ฉันชอบคณิตศาสตร์และเล่นซอนิด ๆ ฉันอาจตรวจสอบวิธีการอื่น ๆ เนื่องจากการแก้ปัญหาจำนวนแม้มีห้องพักสำหรับการปรับปรุง
เหตุผล

โอ้โหฉันไม่เคยรู้เลยว่าx,y='xy'เป็นไปได้จนกระทั่งตอนนี้ น่าเสียดายที่ฉันไม่สามารถคิดถึงวิธีการเขียนใหม่c*b+e*2อย่างรัดกุมด้วย%การจัดรูปแบบ
เหตุผล

อ่าฉันไม่ทราบว่าคุณใช้ที่อื่น มันเป็นแค่ฉันหรือS(2)เอาท์พุทยาวจริงๆเหรอ?
Sp3000

น่าเสียดายที่โซลูชันของฉันทุกเลขคู่ใช้เวลาอย่างน้อย 19 ขั้นตอน ( S(2)เป็นเลขที่สั้นที่สุดที่ 19) ฉันไม่ได้ติดตามxและyชัดเจนถึงแม้ว่าจะxถึง 2 หลังจากขั้นตอนที่สองมันก็ยังคงรีเซ็ตxเป็น 0 ฉันยังรู้สึกว่าต้องมีทางออกที่ดีกว่า แต่ ณ ตอนนี้ฉันยังนึกไม่ออก หนึ่ง.
เหตุผล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.