Bốn trục xoắn ốc


9

Lấy các số 0, 1, 2, 3, 4, ...và sắp xếp chúng theo hình xoắn ốc theo chiều kim đồng hồ, bắt đầu đi xuống, viết từng chữ số vào ô vuông riêng của nó.

Sau đó, đưa ra một trong bốn ký tự ASCII riêng biệt và nhất quán (lựa chọn của bạn) đại diện cho một trục và một số nguyên đầu vào n, xuất ra các số hạng đầu tiên ncủa chuỗi được mô tả bằng cách chọn các hình vuông dọc theo trục tương ứng.

Ví dụ, bên dưới là hình xoắn ốc được sắp xếp lên đến giữa chừng 29. Giả sử chúng ta sử dụng u / d / l / rcho bốn nhân vật của mình, đại diện up / down / left / right. Sau đó, được đưa ra ulàm đầu vào, chúng tôi đầu ra 0, 5, 1, 4 ...(trục y dương) cho đến số hạng nthứ. Thay lvào đó, nếu chúng ta được đưa ra làm đầu vào, thì nó sẽ 0, 3, 1, 1 ...lên đến nthuật ngữ thứ.

  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

Đây là các trình tự trên OEIS:

Ví dụ

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]

Quy tắc

  • Nếu có thể, bạn có thể giả sử rằng đầu vào / đầu ra sẽ phù hợp với loại Số nguyên gốc của ngôn ngữ của bạn.
  • Nếu bạn đang sử dụng số nguyên để biểu diễn bốn trục, bạn có thể sử dụng số nguyên âm mà không vi phạm quy tắc.
  • Đầu vào và đầu ra có thể được cung cấp bởi bất kỳ phương pháp thuận tiện .
  • Hoặc là một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là để áp dụng tất cả các quy tắc chơi gôn thông thường và mã ngắn nhất (tính bằng byte) sẽ thắng.

Chúng ta có thể lấy số nguyên âm cho một vài hướng?
mbomb007

@ mbomb007 Chắc chắn, điều đó sẽ ổn thôi.
admBorkBork

Có vẻ không thực tế lắm, nhưng chúng ta có thể trả về một số nguyên có các chữ số bắt buộc ngoại trừ số 0 đứng đầu không (có thể được ngụ ý nào không)?
Erik the Outgolfer

@AdmBorkBork Về cơ bản tôi không có giải pháp như vậy trong đầu, chỉ nghĩ để hỏi. :)
Erik the Outgolfer

Một thách thức được đánh giá bởi đầu ra. Vì vậy, nếu không bao gồm số 0, tôi nghĩ điều đó sẽ sai, vì bạn đã tính sai nếu số 0 bị loại trừ cho đầu ra chuỗi. Python có thể xuất các số nguyên với các số 0 đứng đầu, vậy tại sao không phải là các ngôn ngữ khác.
mbomb007

Câu trả lời:


5

Python 2 , 94 89 84 83 74 72 70 byte

Tôi đã sử dụng WolframAlpha và xác định rằng giới hạn trên của 5 n > 4n 2 + 3n dường như là đủ. Nó có thể được thay đổi thành 9 n miễn phí. Để thử đầu vào lớn hơn, sử dụng 9*n*nthay vì 5**nđể hết bộ nhớ.

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

Hãy thử trực tuyến!

Các đầu vào cho các hướng là:

  • 3: đúng
  • -3: xuống
  • -chỉ còn 1
  • 1: lên

Đã lưu 14 byte nhờ Rod
Lưu 2 byte nhờ Jonathan Allan



1

Thạch ,  19  18 byte

Sử dụng mẹo 5 n từ câu trả lời Python của mbomb007

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

Một liên kết dyadic lấy nbên trái dvà số nguyên từ:[-3,-1,1,3]:[v,<,^,>]

Hãy thử trực tuyến!

Một thay thế 20 byte vừa nhanh hơn nhiều vừa không tách biệt cho n nhỏ như vậy là:

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

Hãy thử trực tuyến!

Làm sao?

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

sẽ hoạt động với số lượng đáng kể (như +1000)

JavaScript (Node.js) , 104 byte

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]

Hãy thử trực tuyến!

Giải trình

  • 3: đúng
  • -3: xuống (-3 là hợp pháp theo nhận xét)
  • -chỉ còn 1
  • 1: lên (như @ mbomb007)

Chữ số thứ n của hằng số Champernowne

Giới thiệu

Phương pháp kém hiệu quả hơn (không hoạt động cho hơn 1000)

JavaScript (Node.js) , 81 byte

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

Hãy thử trực tuyến!


0

Stax , 13 byte

â╞ê←τ"(]]⌐┘?N

Chạy và gỡ lỗi nó

Nó nhận đầu vào với hướng, tiếp theo là đếm. Phải, lên, trái, và xuống là 1, 3, 5, và 7tương ứng. Phải mất một phút để chạy ba trường hợp thử nghiệm được cung cấp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.