Cho N, phần tử đầu ra thứ n của ['A', 'B', 'AB', 'C', 'D', 'CD', 'ABCD', 'E', Lỗi]?


12

Hãy xem xét danh sách sau đây:

expected = [
'A',
'B',
'AB',
'C',
'D',
'CD',
'ABCD',
'E',
'F',
'EF',
'G',
'H',
'GH',
'EFGH',
'ABCDEFGH',
'I',
'J',
'IJ',
'K',
'L',
'KL',
'IJKL',
'M',
'N',
'MN',
'O',
'P',
'OP',
'MNOP',
'IJKLMNOP',
'ABCDEFGHIJKLMNOP',
...
]

Đây là một cách để xem xét nó - bạn đang học cách viết các ký tự Trung Quốc và muốn học các khối ngày càng lớn của chúng, luyện tập chúng khi bạn đi. Bạn bắt đầu với A, sau đó đi với B, sau đó đã có một chuỗi là một cặp hai để bạn kết hợp nó. Sau đó, bạn đi với C và D, tạo một cặp khác, thực hành nó. Sau đó bạn tập lại: ABCD. Sau đó, tương tự với E lên đến H, sau đó diễn tập: ABCDEFGH. Danh sách là vô hạn.

Mục tiêu là tạo và in ra một phần tử thứ n của danh sách này, các chỉ mục tăng từ 0. Giả sử rằng sau 'Z', bạn lại nhận được 'A'.

Các tiêu chí chiến thắng là chiều dài mã nguồn.


3
Không chắc chắn tôi nhận được nó, khi nào BChay CDEF? Điều gì quyết định những gì chúng ta ghép và những gì chúng ta không? Làm thế nào là vô hạn nếu nó bắt đầu Alại sau đó Z(ý bạn là vào một lúc nào đó sau khi ABCDEFGHIJKLMNOPQRSTUVWXZchúng ta có ABCDEFGHIJKLMNOPQRSTUVWXZABhoặc một cái gì đó?)
Jonathan Allan

5
Trường hợp thử nghiệm cho các chữ cái bao quanh được đánh giá cao ( x,y,z,a,b...).
Stewie Griffin

7
Tôi thực sự khuyên bạn nên sử dụng Sandbox trong tương lai để cải thiện thử thách của mình. Ở đó, bạn sẽ nhận được phản hồi từ người dùng đồng nghiệp để đảm bảo thử thách của bạn phù hợp với trang web PPCG chính! Cá nhân, tôi sẽ để lại một bài đăng trong Sandbox trong ít nhất 2 ngày để mọi người có cơ hội xem bài đăng.
JungHwan Min

2
@JungHwanMin: không ổn để in danh sách vô hạn. Tôi sẽ trả lại một danh sách các số nguyên.
d33tah

4
"Tôi sẽ trả lại danh sách các số nguyên" nghĩa là gì? Là đầu ra của một danh sách các số nguyên có thể chấp nhận hay không? Nếu vậy thì sao "Giả sử rằng sau 'Z', bạn lại nhận được 'A' - đây có phải là trường hợp với định dạng đầu ra này không (sau i + 25 chúng ta lại nhận được i)? (Đồng thời cập nhật bài đăng với thông tin liên quan - không để lại thông số kỹ thuật trong phần bình luận.)
Jonathan Allan

Câu trả lời:


8

Python 2, 53 byte

x,y=0,1
exec"x^=y-x;y+=x/y;"*input()
print range(x,y)

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

Tương tự như việc xây dựng này với sự chuyển đổi x = u-v,y = u


Thật là một sự đơn giản hóa tốt đẹp! Câu lệnh đầu tiên có thể x^=y-xcho -1 byte.
xnor

@xnor ồ đúng rồi, tôi thật ngốc
KSab 21/07/18

6

JavaScript (ES6), 59 byte

Chúng ta có thể lưu 2 byte bằng cách tạo chuỗi 1 được lập chỉ mục và sử dụng đơn giản hóa tương tự như chuỗi được sử dụng bởi KSab :

n=>(x=g=y=>n?g(y+=y==(x^=y-x),n--):x<y?[x++,...g(y)]:[])(1)

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


JavaScript (ES6), 61 byte

Trả về một danh sách các số nguyên không gói.

n=>(g=v=>n?g(u&-u^v?v*2:!!u++,n--):v?[u-v,...g(v-1)]:[])(u=1)

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

Dựa trên một công trình của Donald Knuth. Mục OEIS liên quan: A182105 .

Làm sao?

Đây là một chức năng đệ quy hai giai đoạn.

(bạnn,vn)(bạn1,v1)= =(1,1)

(bạnn+1,vn+1)= ={(bạnn+1,1),nếu (bạnn-bạnn)= =vn(bạnn,2vn),nếu không thì

[bạnn-vn,bạnn-vn+1,Giáo dục,bạnn]


JavaScript (ES6), 97 byte

Trả về gói chữ hoa.

n=>(s=i='',g=v=>(s+=String.fromCharCode(65+i++%26),n--)?g(u&-u^v?v*2:!!u++):s.substr(u-v,v))(u=1)

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

Hoặc 91 byte bằng chữ thường.



2

Ngôn ngữ Wolfram (Mathicala) , 80 71 byte

Range@#2+#-#2&@@Nest[If[#~BitAnd~-#==#2,{#+1,1},{#,2#2}]&@@#&,{1,1},#]&

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

Trả về một danh sách các số nguyên thay vì một chuỗi các bảng chữ cái. Chỉ số 0.

Sử dụng OEIS A182105 , nhờ @Arnauld.

In danh sách vô thời hạn, 54 byte

Do[j=Range@i;#∣i&&Print@j[[-#;;]]&/@(2^j/2),{i,∞}]

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

1 chỉ mục. Phiên bản TIO limthay vì để tránh sự cố.




1

Than , 45 42 35 byte

FN⊞υ⎇∧›Lυ¹⁼L§υ±¹L§υ±²⁺⊟υ⊟υ§αL⭆υκ⮌⊟υ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. 1 chỉ mục. Tôi không thể tìm thấy một công thức đơn giản để tạo ra kết quả vì vậy tôi chỉ cần làm theo quy trình được đưa ra trong câu hỏi. Giải trình:

FN

Lặp lại số nlần đã cho.

⊞υ

Đẩy phần tử tiếp theo vào mảng trống được xác định trước u, được tính là ...

⎇∧›Lυ¹⁼L§υ±¹L§υ±²

... nếu có nhiều hơn một phần tử trong uvà hai phần tử cuối cùng có cùng độ dài ...

⁺⊟υ⊟υ

... sau đó nối phần tử áp chót vào phần tử cuối cùng (tạo kết quả theo thứ tự ngược lại) ...

§αL⭆υκ

... nếu không thì có thể tìm thấy chữ cái tiếp theo bằng cách đếm xem có bao nhiêu chữ cái chúng ta đã thêm cho đến nay và lập chỉ mục theo chu kỳ vào bảng chữ cái viết hoa được xác định trước. (Lấy tổng chiều dài hoặc độ dài của tổng không thành công khi danh sách trống và ánh xạ danh sách vào chuỗi sẽ lưu hai byte qua danh sách đặc biệt trong danh sách trống.)

⮌⊟υ

Lấy phần tử cuối cùng của u, đó là nphần tử thứ ngược của danh sách mong muốn và ngầm in ngược lại.

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.