Viết một bộ đếm nhị phân trong quine


10

Viết hai đoạn mã, chúng ta sẽ gọi s_zero và s_one.

Chương trình (l, n) bao gồm l bản sao của s_zero và s_one tương ứng với các chữ số của n trong nhị phân, được đệm bằng s_zero ở bên trái.

Ví dụ: nếu s_zero = foovà s_one = barthì
Chương trình (4, 0) = foofoofoofoo
Chương trình (4, 1) = foofoofoobar
Chương trình (4, 2) = foofoobarfoo
vv

Chương trình (l, n) phải in nguồn của Chương trình (l, (n + 1) mod (2 ^ l)) để chuẩn ra. Trong ví dụ trên, foobarfoofoophải in foobarfoobarkhi thực thi.

Điểm của bạn là tổng độ dài của các đoạn s_zero và s_one


Gần trùng lặp với codegolf.stackexchange.com/questions/35974/ từ - tính toán được thực hiện bằng cách trích dẫn chương trình với 2 khối mã khác nhau.
frageum

Chương trình có thể đọc mã nguồn của riêng mình không?
Doorknob

2
@feersum Tôi không đồng ý. Điều này dễ dàng hơn nhiều, đặc biệt, bạn không cần phải xác định ngắt dòng. Hơn nữa, tôi nghĩ rằng nhiệm vụ sẽ tạo ra sự khác biệt, nếu không, mọi thách thức về quine tổng quát sẽ là một bản sao của thử thách quine cơ bản.
Martin Ender

Ưu điểm của nhiệm vụ đơn giản là nó khuyến khích sự cạnh tranh để tạo ra những câu trả lời ngắn gây sốc cho đến nay - tôi hy vọng rằng điều đó chứng minh thách thức này là khác nhau!
QuadmasterXLII

1
Có lẽ đáng lưu ý rằng s_zero và s_one phải khác nhau. Nếu không, tôi có nhiều giải pháp với điểm 2 * n.
Randomra

Câu trả lời:


6

CJam, 29 + 29 = 58 byte

Mã 0:

0{"_~"]]z(3\+2b(2b2>a\+z~[}_~

Mã 1:

1{"_~"]]z(3\+2b(2b2>a\+z~[}_~

Giải trình

0                       " Push the current bit. ";
{"_~"                   " The basic quine structure. ";
    ]                   " Make an array of the current bit, the function and _~.
                          That is the code fragment itself. ";
    ]                   " Make an array of all code fragments in the stack. ";
    z(                  " Extract the array of the bits. ";
    3\+2b(2b2>          " Convert from base 2, decrease by one and convert back,
                          keeping the length. ";
    a\+z                " Put the bits back to the original position. ";
    ~                   " Dump the array of code fragments back into the stack. ";
    [                   " Mark the beginning position of the array of the next code fragment. ";
}_~

2
mỗi lần ...
Trình tối ưu hóa

3

CJam, 47 + 47 = 94 byte

Mã 0:

{`"_~"+]:+T2*0+:T)\AsSerS/_,(@2Y$#+2bU@->]zs}_~

Mã 1:

{`"_~"+]:+T2*1+:T)\AsSerS/_,(@2Y$#+2bU@->]zs}_~

Xin lỗi cho khám phá.

Tôi chắc chắn rằng tôi vẫn có thể cạo một vài byte ở đó. Tôi sẽ thêm một lời giải thích một khi tôi quyết định rằng tôi không thể bận tâm đến việc đánh gôn thêm nữa.

Kiểm tra nó ở đây.



1

GolfScript, 37 + 37 = 74 byte

0{`".~"+:q;]-2%1\{1$^.@&q@}%\;-1%~}.~
1{`".~"+:q;]-2%1\{1$^.@&q@}%\;-1%~}.~

Không hoàn toàn ngắn như giải pháp CJam của user23013 , nhưng tôi nghĩ rằng dù sao tôi cũng sẽ đăng bài này, nếu chỉ để (tăng nhẹ) sự đa dạng của các ngôn ngữ được sử dụng.

Giải pháp của tôi không trực tiếp dựa trên bất kỳ giải pháp hiện có nào (và thực tế, tôi đã không kiểm tra chúng một cách chi tiết, vì tôi vẫn không đọc tốt về CJam), nhưng tất cả chúng đều có các biến thể của cấu trúc quine cơ bản giống nhau ( {".~"}.~trong GolfScript, {"_~"}_~ở CJam). Điều đó thực sự không đáng ngạc nhiên lắm, vì dường như đây là một trong những cách hiệu quả nhất để viết một câu hỏi với một trọng tải tùy ý trong các ngôn ngữ này.

Có một số phần của mã này tôi không thực sự thích và tôi nghi ngờ có thể chơi golf này hơn nữa, nhưng tôi đã dành quá nhiều thời gian cho việc này.

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.