Quine Nesting Nga


18

Một con búp bê làm tổ của Nga, thường được gọi là búp bê Matryoshka , là một con búp bê chứa một phiên bản nhỏ hơn của chính nó, sau đó chứa một phiên bản nhỏ hơn của chính nó, chứa một phiên bản nhỏ hơn của chính nó, chứa một phiên bản nhỏ hơn của chính nó, chứa chứa một phiên bản nhỏ hơn của chính nó ... - cho đến cuối cùng, phiên bản cuối cùng trống rỗng. Một ví dụ:

Búp bê Matryoshka <3

Ngày nay, mục tiêu của bạn là mô phỏng truyền thống Nga này bằng cách viết một chương trình hoặc chức năng mà khi nó chứa N lần, nó sẽ tự in có chứa các bản sao N-1 của chính nó.

Ví dụ, chương trình búp bê abcdsẽ có chương trình N = 3 abababcdcdcd, chương trình này sẽ in chương trình N = 2, chương trình này sẽ in chương trình ababcdcdN = 1 ban đầu abcd, cuối cùng sẽ in N = 0, trống. Điều này về mặt lý thuyết sẽ làm việc cho bất kỳ giá trị hợp lý nào của N.

Quy tắc:

  • Đây là chương trình TIO để giúp tạo các chương trình búp bê dựa trên chương trình của bạn
  • Quy tắc chuẩn quine áp dụng
  • Áp dụng sơ hở tiêu chuẩn
  • 'Chứa' có nghĩa là trực tiếp ở trung tâm của phiên bản trước, vì vậy giải pháp của bạn phải có số byte chẵn dương. Một chương trình có độ dài 10 sẽ có một bản sao của bản gốc được chèn sau byte thứ năm, sau đó một bản khác sau byte thứ mười, v.v.
  • Một khoảng trắng duy nhất được phép trong đầu ra
  • Vì đây là , mục tiêu của bạn là làm cho chương trình N = 1 của bạn càng ngắn càng tốt.
  • Một lời giải thích về mã của bạn sẽ được đánh giá cao


Đối với Nkích thước mã được đo là gì?
flawr

@flawr N = 1 .....
Jo King


12
Hoạt hình đó có thực sự cần thiết không?!
Shaggy

Câu trả lời:



9

JavaScript, 36 32 byte

Tận dụng lợi thế của thực tế là Function.prototype.toString()không có đối số và do đó sẽ bỏ qua bất kỳ điều gì được truyền cho nó.

Một phần lấy cảm hứng từ giải pháp của user202729 .

f=_=>f.toString( ).slice(14,-16)

Thử nó

o.innerHTML=["<span>Five</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Four</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Three</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Two</span>",(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16))(),"<span>One</span>",(f=_=>f.toString( ).slice(14,-16))(),"<span>Thunderbirds Are Go!</span>"].join`\n`
span{font-weight:bold;font-size:16px;line-height:1.5em;text-transform:uppercase;}span:last-child{font-size:8px;}
<pre id=o></pre>


7

JavaScript (Node.js) , 46 byte

Chương trình đầy đủ. Như vậy console.loglà cần thiết.

Sử dụng một ý tưởng từ câu trả lời này để lưu một số byte.

l=console.log;   g=_=>{};l((''+g).slice(4,-1))

Hãy thử trực tuyến! Hãy thử trực tuyến hai lần! Hãy thử trực tuyến, ba lần!


Cách tiếp cận của tôi tương tự như cách sử dụng trong câu trả lời của Kevin Cruijssen , tìm một cấu trúc lồng nhau (một chức năng trong trường hợp này).


5

Thạch , 16 byte

Ṿḣ-9Ḋð}“““““““““

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

Nhân đôi: Hãy thử trực tuyến!

Tăng gấp ba: Hãy thử trực tuyến!


Jelly không có bất kỳ cấu trúc lồng nhau nào, nhưng chuỗi ký tự của nó được tự động kết thúc.


Ṿḣ-9Ḋ    First chain. (monadic)
Ṿ        Uneal. (to string)
 ḣ-9     Take the ead, ends at the -9'th character.
    Ḋ    equeue, remove the first character.

     ð             Terminate the first chain, start a new one.
      }            Convert the last monadic chain to a dyadic one.
       “““““““““   String literal.
                   This matches the pattern <dyad> <nilad>, so applies
                   the the corresponding rules. This way a link can take data
                   to the right of it.

Sẽ thử các cách tiếp cận khác nhau để xem chúng có thể ngắn hơn không.




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.