สี่แกนหมุนวน


9

นำตัวเลข0, 1, 2, 3, 4, ...และจัดเรียงเป็นเกลียวตามเข็มนาฬิกาเริ่มต้นลงเขียนตัวเลขแต่ละหลักในตารางแยกของตัวเอง

จากนั้นหนึ่งในสี่ของอักขระ ASCII ที่แตกต่างและสอดคล้องกัน (ตัวเลือกของคุณ) แทนแกนและจำนวนเต็มอินnพุทเอาท์พุทnคำแรกของลำดับที่อธิบายโดยเลือกสี่เหลี่ยมตามแกนที่สอดคล้องกัน

29ตัวอย่างด้านล่างเป็นได้จัดขึ้นเป็นเกลียวไปได้ครึ่งทาง สมมติว่าเราใช้เวลาสี่ตัวละครของเราเป็นตัวแทนu / d / l / r up / down / left / rightจากนั้นuในฐานะอินพุตเราจะส่งออก0, 5, 1, 4 ...(แกน y บวก) จนถึงnเทอมที่ หากเราได้รับlเป็นข้อมูลแทนแล้วมันจะ0, 3, 1, 1 ...ขึ้นอยู่กับnเทอมนั้น

  2---3---2---4---2---5---2
  |                       |
  2   1---3---1---4---1   6
  |   |               |   |
  2   2   4---5---6   5   2
  |   |   |       |   |   |
  1   1   3   0   7   1   7
  |   |   |   |   |   |   |
  2   1   2---1   8   6   2
  |   |           |   |   |
  0   1---0---1---9   1   8
  |                   |   |
  2---9---1---8---1---7   2

นี่คือลำดับบน OEIS:

ตัวอย่าง

d 19
[0, 1, 1, 8, 3, 7, 6, 2, 1, 5, 1, 1, 6, 2, 2, 1, 3, 4, 0]

r 72
[0, 7, 1, 7, 4, 2, 8, 1, 1, 3, 1, 2, 0, 2, 3, 1, 3, 4, 6, 5, 5, 5, 7, 7, 8, 8, 9, 6, 8, 1, 1, 1, 2, 3, 1, 8, 0, 6, 1, 7, 0, 9, 2, 8, 4, 3, 2, 1, 1, 7, 2, 6, 2, 1, 3, 3, 5, 5, 3, 2, 2, 0, 4, 3, 2, 5, 4, 6, 5, 0, 5, 1]

u 1
[0]

กฎระเบียบ

  • หากสามารถทำได้คุณสามารถสมมติว่าอินพุต / เอาต์พุตจะพอดีกับภาษาของคุณ Integer
  • หากคุณใช้จำนวนเต็มเพื่อแทนสี่แกนคุณสามารถใช้จำนวนเต็มลบโดยไม่ทำผิดกฎ
  • อินพุตและเอาต์พุตจะได้รับโดยวิธีการที่สะดวกใด
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือ ดังนั้นกฎการเล่นกอล์ฟตามปกติทั้งหมดจึงนำมาใช้และรหัสที่สั้นที่สุด (เป็นไบต์) จะชนะ

เราสามารถหาจำนวนเต็มลบสำหรับสองทิศทางได้ไหม?
mbomb007

@ mbomb007 แน่นอนว่าจะเป็นไร
AdmBorkBork

ดูเหมือนจะใช้ไม่ได้จริง แต่เราสามารถส่งคืนจำนวนเต็มที่มีตัวเลขที่ต้องการได้ยกเว้นศูนย์นำหน้า (ซึ่งจะบอกเป็นนัย)
Erik the Outgolfer

@AdmBorkBork โดยทั่วไปฉันไม่มีวิธีแก้ปัญหาเช่นนี้ :)
Erik the Outgolfer

ความท้าทายถูกตัดสินโดยผลลัพธ์ ดังนั้นหากไม่มีการรวมศูนย์ฉันคิดว่ามันจะผิดเพราะคุณจะนับว่าผิดถ้าไม่มีการรวมศูนย์สำหรับเอาต์พุตสตริง Python สามารถส่งออกจำนวนเต็มด้วยศูนย์นำหน้าดังนั้นทำไมจึงไม่ใช้ภาษาอื่น
mbomb007

คำตอบ:


5

Python 2 , 94 89 84 83 74 72 70 ไบต์

ฉันใช้ WolframAlpha และพิจารณาว่าขอบเขตบนของ 5 n > 4n 2 + 3n ดูเหมือนจะเพียงพอ สามารถเปลี่ยนเป็น9n ได้โดยไม่มีค่าใช้จ่าย สำหรับการลองอินพุตที่ใหญ่กว่าให้ใช้9*n*nแทน5**nเพื่อหลีกเลี่ยงหน่วยความจำไม่เพียงพอ

lambda d,n:["".join(map(str,range(5**n)))[x*(4*x+d)]for x in range(n)]

ลองออนไลน์!

อินพุตสำหรับทิศทางคือ:

  • 3: ถูกต้อง
  • -3: ลง
  • -1: เหลือ
  • 1: ขึ้นไป

บันทึกไปแล้ว 14 ไบต์ขอบคุณRod
บันทึกแล้ว 2 ไบต์ขอบคุณJonathan Allan



1

เยลลี่ ,  19  18 ไบต์

ใช้เคล็ดลับ5 nจากคำตอบ Python ของ mbomb007

4,0jḅɗ@€ị5*D€FʋṖ0;

ลิงก์ dyadic ที่nอยู่ทางซ้ายและdและจำนวนเต็มจาก:[-3,-1,1,3]:[v,<,^,>]

ลองออนไลน์!

ทางเลือก 20 ไบต์ที่เร็วกว่ามากและไม่ได้แยก segfault สำหรับ n ขนาดเล็กเช่น:

²×5D€ƲFị@4,0jḅɗ@€Ṗ0;

ลองออนไลน์!

อย่างไร?

4,0jḅɗ@€ị5*D€FʋṖ0; - Link: integer, n; integer, d
     ɗ@€           - last three links as a dyad with sw@pped arguments for €ach (of implicit range [1,n])
4,0                -   literal list [4,0]
   j               -   join with d = [4,d,0]
    ḅ              -   convert from base n = 4*n^2+d*n+0
        ị          - index into...
              ʋ    - last four links as a monad:
         5         -   five
          *        -   exponentiate = 5^n
           D€      -   decimal list of each (in implicit range [1,5^n])
            F      -   flatten into a single list of the digits
               Ṗ   - pop (drop the final element)
                0; - prepend a zero

1

จะทำงานได้เป็นจำนวนมาก n (เช่น +1000)

JavaScript (Node.js) , 104 ไบต์

f=(d,n)=>--n?[...f(d,n),C(n*(4*n+d))]:[0]
C=(n,N=i=0)=>n>N?C(n-N,(p=10**i)*9*++i):+((p+--n/i|0)+"")[n%i]

ลองออนไลน์!

คำอธิบาย

  • 3: ถูกต้อง
  • -3: down (-3 เป็น legit ตามความคิดเห็น)
  • -1: เหลือ
  • 1: up (เช่น @ mbomb007)

ตัวเลขหลักของค่าคงที่ของ Champernowne

________________________________________________________

วิธีที่มีประสิทธิภาพน้อยกว่า (จะไม่ทำงาน 1,000+)

JavaScript (Node.js) , 81 ไบต์

f=(d,n)=>eval(`for(r=[],s=i=I="";I<n;)(s+=i++)[u=I*(4*I+d)]&&r.push(s[I++,u]),r`)

ลองออนไลน์!


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