Trở lại Quine


12

Thách thức ở đây là đơn giản, và hoàn toàn không phải về số lượng byte. Công việc của bạn là xuất ra 50 ký tự đầu tiên của mã nguồn của quine trước đó, được nối với 50 ký tự đầu tiên của bạn bắt đầu bằng 50 ký tự tôi đã đặt bên dưới:

abcdefghijklmnopqrstuvwxyzACDEFGHIJKLMNOPQRSTUVWXY

Vì vậy, hãy lấy một ví dụ ở đây, nếu bạn trả lời trong 05AB1E, một giải pháp đơn giản là xuất ra 50 byte đầu tiên sẽ là:

ži50£

Điều đó có nghĩa là bạn cần xuất ra:

abcdefghijklmnopqrstuvwxyzACDEFGHIJKLMNOPQRSTUVWXYži50£

Nếu chương trình của bạn ngắn hơn, chỉ cần sử dụng các x < 50ký tự đầu tiên . Nếu chương trình của bạn dài hơn chỉ nối 50 ký tự đầu tiên, kết thúc ở ký tự thứ 50. Người tiếp theo sau đó sẽ phải xuất 50 ký tự đầu tiên của câu hỏi của bạn được nối với mã riêng của họ.

Mã của bạn có thể có kích thước bất kỳ, nhưng bạn chỉ nên xuất 50 ký tự đầu tiên của mã được nối vào cuối 50 byte đầu tiên của mã câu trả lời trước đó.


Những hạn chế:

Điều này sử dụng định nghĩa của một quine thích hợp , và ngoài ra, những điều sau đây:

  • Bình luận không được phép, hoàn toàn.
  • TRẢ LỜI ĐẾN PHẦN NÀY, NÓ CÓ THỂ ĐÁNH GIÁ NẾU AROOIVE LOOPHOLES ARISE

Làm thế nào để gửi một chuỗi trả lời:

  1. Đăng một giữ chỗ:
    • Đề cập đến số câu trả lời của bạn và ngôn ngữ bạn sẽ sử dụng.
  2. Sắp xếp theo ngày, nếu bạn nhận thấy người khác đã đăng một trình giữ chỗ 1 mili giây trước bạn:
    • Xóa của bạn, chờ cơ hội tiếp theo, xin lỗi.
  3. Nếu bạn đã đảm bảo vị trí tiếp theo, XIN VUI LÒNG TRẢ LỜI TRONG 6 GIỜ :
    • Nếu bạn không thể trả lời, hãy xóa không gian dành riêng của bạn.
  4. NẾU không gian đã bị tắc nghẽn trong hơn 6 giờ.
    • Bình chọn để xóa không gian dành riêng, tôi sẽ xử lý nó.

Định dạng bài viết của bạn:

#[Answer #]:[Character Count] Characters, [Language Used]

{TIO MARKDOWN}

{LINE_SEPARATOR="---"}

{ADDITIONAL EXPLANATION OR INFORMATION}

Một số lưu ý cụ thể (Quan trọng đối với tính dễ cạnh tranh):

  • Nếu người trước bạn đã bao gồm các dòng mới hoặc các ký tự không phải ASCII trong nguồn của họ, bạn có thể TẠO họ. Điều này có nghĩa là x="a\nb"trở thành ab, ở đâu x[0]=a;x[1]=b;.
    • Bạn phải nêu đột biến bạn đã áp dụng cho nguồn trước đó.
  • Tất cả các ký tự được tính là một ký tự, mặc dù mã trang hoặc mã hóa ngôn ngữ. Vui lòng không sử dụng đếm byte, sử dụng đếm ký tự.

Câu trả lời được chấp nhận sẽ là 50thcâu trả lời, chỉ vì; Ý tôi là, đó là SE.


Tại sao ý kiến ​​bị cấm? Ngoài ra, thay vì xác định lại byte thành ký tự, tại sao không chỉ sử dụng ký tự?
Máy

@CalculatorFeline Tôi nghĩ rằng bạn có thể thực hiện một số lỗ hổng khá khập khiễng và không thú vị bằng cách sử dụng các nhận xét, nhưng đó chỉ là tôi. Giữ vị trí đầu tiên và chứng minh tôi sai với một nhận xét và tôi sẽ gỡ bỏ lệnh cấm.
Bạch tuộc ma thuật Urn

5
Bài đăng meta được liên kết xác định các quines thích hợp không chứa đề cập đến việc không có mã không còn tồn tại.
Ørjan Johansen

1
Làm thế nào để bạn xác định nhận xét? Bình luận không phải là một thuật ngữ được xác định rất tốt.
Đăng Rock Garf Hunter

1
Bạn dường như cũng trao đổi các ký tự thuật ngữ và byte, điều này hơi khó hiểu. Tôi không thực sự chắc chắn nếu đó là 50 ký tự hoặc byte đầu tiên.
Đăng Rock Garf Hunter

Câu trả lời:


7

1: 96 Nhân vật, Haskell

abcdefghijklmnopqrstuvwxyzACDEFGHIJKLMNOPQRSTUVWXY:z=['`'..'z']++'A':['C'..'Y']
main=putStr$z++z

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


Tôi đã cảm thấy ngớ ngẩn, và cưa không có gì cấm nhập đầu tiên bắt đầu với chính xác cùng 50 nhân vật như chuỗi ban đầu.

  • ['`'..'z']++'A':['C'..'Y']là một biểu thức đánh giá chuỗi ký tự đó, với một ký tự được `thêm vào trước.
  • Kết quả là mẫu phù hợp trên, làm cho biến abcdefghijklmnopqrstuvwxyzACDEFGHIJKLMNOPQRSTUVWXYbằng '`'zbằng 50 ký tự.
  • main=putStr$z+z sau đó thực hiện đầu ra thực tế.

Tôi thích cách thử thách này bắt đầu với a-zA-Z và bây giờ về cơ bản nó không còn là bảng chữ cái nữa. Cuộc gọi tốt trên chương trình 1.
Bạch tuộc ma thuật Urn

5

5:76 ký tự, biểu tượng cảm xúc

🏁🍇🍦a🔤s=:'"alert(eval(c="''abcdefghijklmnopqrstuvwxyzACD🔤😀🍪a🔤🏁🍇🍦a❌🔤🔤🔪a 0 45🍪🍉

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


Giải trình:

🏁🍇		👴 start
  🍦 a 🔤...🔤	👴 define variable a as that string
  😀    	👴 print:
    🍪		👴 combine those strings:
      a		👴 a, and:
      🔤🏁🍇🍦a❌🔤🔤	👴 string literal. the ❌🔤 works like \"
      🔪a 0 45	👴 between indexes 0 and 45 of a
    🍪
🍉		👴 end

1
Bảng chữ cái đang dần biến mất: O.
Bạch tuộc ma thuật Urn

Gợi ý định dạng: Sử dụng <pre><code></code></pre>, sau đó bạn có thể sử dụng &#9;cho các tab, căn chỉnh như dự định ngay cả với các ký tự có chiều rộng thay đổi như biểu tượng cảm xúc. BTW, tôi đã suy nghĩ về cách tạo ra một câu đố trong Biểu tượng cảm xúc và sau đó tôi cuộn xuống ...
NieDzejkob

@NieDzejkob ý kiến ​​hay, cảm ơn.
betseg

@betseg nó hơi bị tắt ở một vài nơi đối với tôi, nhưng dù sao cũng dễ đọc hơn. Vui mừng bạn thích nó
NieDzejkob

@NieDzejkob một vài? với phông chữ của tôi, chỉ có lệnh của chuỗi ký tự tắt vì nó dài, còn nơi nào khác ở cuối của bạn?
betseg

4

2: 119 Ký tự, Javascript

alert(eval(c="'abcdefghijklmnopqrstuvwxyzACDEFGHIJKLMNOPQRSTUVWXY'+`alert(eval(c=${JSON.stringify(c).substr(0,37)}`"))

Dùng thử trực tuyến (sử dụng console.logthay vì alertđầu ra)

Dựa trên quine JS này.

Phiên bản cũ (đọc mã nguồn):

f=_=>`abcdefghijklmnopqrstuvwxyzACDEFGHIJKLMNOPQRSTUVWXYf=${(f+"").substr(0,48)}`;alert(f())

Dựa trên quine JS này


Đây không phải là một quine thích hợp như hàm tham chiếu chính nó.
Shaggy

@Shaggy Tôi đã thêm một hợp lệ
SuperStormer

1
@Shaggy Các hàm tự tham chiếu có giá trị theo định nghĩa của chúng tôi.
ATaco

3

8: 70 ký tự, Stax

"v->{String t=`"⛽as=:'\`"alert(eval(c=\`"''abcdefghijk"c'".`"R34|S50(+

Chạy và gỡ lỗi trực tuyến

Giải trình

"..."c'".`"R34|S50(+
"..."                   The string from last output
     c'".`"R            Escape all double quotes
            34|S        Surround with double quotes
                50(     Take the first 50 characters
                   +    Append to the string from last output
                        Implicit output

2

3:56 Nhân vật, SOGL

"alert(eval(c="'abcdefghijklmnopqrstuvwxyzACDEFGHIJ”1#Οj

Hãy thử nó ở đây!

Giải trình:

"...”      push the first 50 bytes of the previous answer
     1#Ο   wrap a quote around with that
        j  take the last letter off, as my answer has one more byte for the starting quote.

Câu trả lời Javascript có một trích dẫn trong đó, vì vậy tôi đã phải thêm một trích dẫn bắt đầu, nhưng vì đây không phải là môn đánh gôn, nên nó không thành vấn đề.



2

7: 137 ký tự, Java 8

v->{String t="⛽as=:'\"alert(eval(c=\"''abcdefghijklmnopqrstuvwxyzA";return t+("v->{String t=\""+t.replace("\"","\\\"")).substring(0,50);}

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

Giải trình:

v->{        // Method with empty unused parameter and String return-type
  String t="⛽as=:'\"alert(eval(c=\"''abcdefghijklmnopqrstuvwxyzA";
            //  String containing the first 50 characters of the previous answer
  return t  //  Return those first 50 characters
   +"v->{String t=\""+t.replace("\"","\\\"")).substring(0,50);}
            //  Concatted with the first 50 characters of my answer
            //  with correct escape-slashes

Aha! Tôi cho rằng Emoji đã giết chết thử thách này mãi mãi. Đẹp một.
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Bây giờ tôi chỉ chú ý đến quy tắc của bạn về " Nếu người trước bạn đã bao gồm các dòng mới hoặc các ký tự không phải ASCII trong nguồn của họ, bạn có thể TẠO chúng. ", Vì vậy câu trả lời có thể loại bỏ Biểu tượng cảm xúc nếu họ muốn. Đối với câu trả lời của tôi, điều đó cũng không thành vấn đề, vì dù sao chúng ta cũng đang tính bằng ký tự thay vì byte.
Kevin Cruijssen

Điều đó và đó không phải là về số lượng nhân vật một cách trung thực, và vâng tôi đã quên quy tắc đó (hơn nữa là quên đi thử thách nói chung).
Bạch tuộc ma thuật Urn

Thành thật mà nói, hãy nghĩ về nó, đây thực sự không phải là một thử thách khó khăn phải không?
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Thật là tuyệt vời. Về cơ bản, bạn nhận được 50 ký tự đầu tiên của câu hỏi. Trong các quines Java thường được hình thành bằng cách đặt mã nguồn chưa được định dạng vào Chuỗi và sau đó định dạng / thoát chính xác các dấu ngoặc kép và dấu gạch chéo. Tuy nhiên, hàm lambda cơ bản trong Java 8 đã có 88 byte ( Thử trực tuyến ), do đó, trong Java, thách thức này ngắn hơn nhiều mà không cần sử dụng một quine đầy đủ. Tôi có thể tưởng tượng quine là cách tiếp cận tốt nhất trong hầu hết các ngôn ngữ, mặc dù.
Kevin Cruijssen

1

6: 70 ký tự, Biểu tượng cảm xúc

⛽as=:'"alert(eval(c="''abcdefghijklmnopqrstuvwxyzAC🚘👥💬⛽💬🔀👫💬0💬📥💬-1💬📥✂👫➡

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

Dường như không thể làm cho nó không xuất ra dòng mới. Nếu điều đó không ổn thì tôi sẽ xóa câu trả lời.

Giải trình:

⛽ ... 🚘	String literal
👥		Duplicate
💬⛽💬		Push ⛽ as a string
🔀		Swap the top two strings. Stack: [long literal] "⛽" [long literal]
👫		Concatenate.
💬0💬📥💬-1💬📥✂	Remove the last character
👫		Concatenate.
➡		Print.

Không nên ⛽🏁🍇🍦a🔤s=:'"alert(eval(c="''abcdefghijklmnopqrstuvwx🚘👥💬⛽💬🔀👫💬0💬📥💬-1💬📥✂👫➡thay thế? betseg 's Emojicode câu trả lời không bắt đầu bằng as=:'"alert(eval(c="''abcdefghijklmnopqrstuvwxyzACnhưng với 🏁🍇🍦a🔤s=:'"alert(eval(c="''abcdefghijklmnopqrstuvwxthay thế.
Kevin Cruijssen

@KevinCruijssenIf the person before you has included newlines or non-ASCII characters in their source, you may STRIP them.
NieDzejkob

Ah, tôi đã bỏ lỡ quy tắc đó .. Trong trường hợp đó tôi sẽ cập nhật câu trả lời của mình.
Kevin Cruijssen

Vì tò mò, tại sao bạn lại lột chúng? Để dễ dàng hơn cho câu trả lời trong tương lai? Bởi vì mã của bạn chạy hoàn hảo mà không tước biểu tượng cảm xúc của câu trả lời trước: Hãy thử ở đây .
Kevin Cruijssen

@KevinCruijssen Cách đây nửa năm. Tôi không nhớ.
NieDzejkob

1

12: 202 ký tự, Ruby

puts "21ipdgmtwkkke7ynvzpcnlzt7kl".to_i(36).to_s(7).gsub('0','>').gsub('1','+').gsub('2','-').gsub('3','<').gsub('4','[').gsub('5','.').gsub('6',']')+'puts "21ipdgmtwkkke7ynvzpcnlzt7kl".to_i(36).to_s(7'

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


Mã hóa năm mươi ký tự đầu tiên của câu trả lời trước trong cơ sở bảy

  • 0:>
  • 1: +
  • 2: -
  • 3: <
  • 4: [
  • 5 :.
  • 6:]

Sau đó chuyển đổi nó thành cơ sở 36 để nhận "21ipdgmtwkkke7ynvzpcnlzt7kl"


0

9: 55 ký tự, Jelly

“"v->{String t=`"as=:'\`"alert(eval(c=\`"''abcdefg”;”“;

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


Tôi đã loại bỏ ký tự không phải ASCII khỏi đầu ra vì điều đó được cho phép và Jelly đã bỏ qua nó.

Giải trình

Điều này bắt đầu bằng chuỗi ký tự của 50 ký tự đầu tiên (trừ ) của câu trả lời trước đó sau đó nối ký tự đó với nó ;”“sau đó nối thêm chuỗi ký tự gốc vào cuối cùng một lần nữa với cuối cùng ;. Vì một ký tự đã bị xóa 50 ký tự đầu tiên của mã nguồn của tôi là 49 từ câu trả lời trước với một ký tự phía trước cho phép chương trình này quá ngắn. (Có, tôi nhận ra đây không phải là nhưng tại sao không chơi gôn nếu bạn có thể?)


0

10: 116 Ký tự, Python 3

print('''“"v->{String t=`"as=:'\`"alert(eval(c=\`"''abcdefgprint(\'\'\'“"v->{String t=`"as=:'\`"alert(eval(c=\`"''')

Đơn giản chỉ cần in một chuỗi bao gồm 50 ký tự đầu tiên của câu trả lời 9, tiếp theo là 50 ký tự đầu tiên của nguồn riêng. Không cần sự thông minh giống như quine, vì các trích dẫn đã thoát ( \'\'\') xuất hiện sau ký tự thứ 50 và do đó không cần phải sao chép ở đầu ra.

Phương pháp này sẽ hoạt động với hầu hết mọi ngôn ngữ - bạn chỉ cần thoát khỏi bất kỳ ký tự trích dẫn nào xuất hiện trong câu trả lời trước. Theo đó, tôi không nghĩ có nhiều thử thách trong thử thách này.


0

11: 723 Nhân vật, Brainf ***

+[------->++<]>++.++.---------.+++++.++++++.+[--->+<]>+.-...-----.[----->++<]>++.--[++>---<]>-.---[-->+++<]>-.[->++<]>-.[--->++<]>+.[--->+<]>+++.--.---------.+++++.-------.-[--->+<]>--.---[->++++<]>.[-->+<]>+++.+++[-->+++<]>.[->+++<]>++.+[--->+<]>.--[--->+<]>--.+[-->+<]>+++.---.-[--->++<]>+.+[------>+<]>.++++.[->+++<]>++.+[--->+<]>.+++++++++++.-------.+++++++++++++.++.+[--->+<]>+.+[--->+<]>++.[--->+<]>-.[->+++<]>-.+++++++++++.[--->+<]>++++.+[--->+<]>.[--->++<]>-----.+[-->+++<]>-.++++.[->+++<]>++.[[-]<]++[------>+<]>.++[->++<]>+.-[-->+<]>.......---[-->+++<]>-.+[--->++<]>+..+[----->+<]>.++[-->+++<]>.[--->++<]>.+[--->++<]>+..+++.---..+++.-.........+.---.....+++.---......+++.---.++[->++<]>+.-[-->+<]>...---[-->+++<]>-.

Lột bỏ nhân vật không thể in . Hầu như hoàn toàn được tạo bởi Brainfuck Text Generator . Cũng có thể là lười biếng, phải không?

TIO

Print [print('''"v->{String t=`"as=:'\`"alert(eval(c=\`"] +[------->++<]>++.++.---------.+++++.++++++.+[--->+<]>+.-...-----------.++++++.[----->++<]>++.--[++>---<]>-.---[-->+++<]>-.[->++<]>-.[--->++<]>+.[--->+<]>+++.--.---------.+++++.-------.-[--->+<]>--.---[->++++<]>.[-->+<]>+++.+++[-->+++<]>.[->+++<]>++.+[--->+<]>.--[--->+<]>--.+[-->+<]>+++.---.-[--->++<]>+.+[------>+<]>.++++.[->+++<]>++.+[--->+<]>.+++++++++++.-------.+++++++++++++.++.+[--->+<]>+.+[--->+<]>++.[--->+<]>-.[->+++<]>-.+++++++++++.[--->+<]>++++.+[--->+<]>.[--->++<]>-----.+[-->+++<]>-.++++.[->+++<]>++.
Clear all cells to left until first empty cell [[-]<]
Print [+[------->++<]>++.++.---------.+++++.++++++.+[--->] ++[------>+<]>.++[->++<]>+.-[-->+<]>.......---[-->+++<]>-.+[--->++<]>+..+[----->+<]>.++[-->+++<]>.[--->++<]>.+[--->++<]>+..+++.---..+++.-.........+.---.....+++.---......+++.---.++[->++<]>+.-[-->+<]>...---[-->+++<]>-.

Bạn dường như in các ký tự thứ 2 đến 51 của câu trả lời Brainfuck của bạn thay vì 50 ký tự đầu tiên (nó thiếu ký tự đầu tiên >): Hãy thử trực tuyến. Ngoài ra, bạn có thể muốn bỏ ký tự, vì câu trả lời Brainfuck của bạn hiện đang xuất ra dưới dạng không thể in được ``.
Kevin Cruijssen

Lúc >đầu dường như là một sự bổ sung tình cờ, và tôi đã bỏ nhân vật này. Dựa trên các câu trả lời khác, tôi nghĩ điều đó có nghĩa là tôi chỉ cần in 49 ký tự đầu tiên.
Panda0nEarth
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.