Viết một Quine bằng tiếng Anh


41

Viết một quine bao gồm các từ tiếng Anh thực sự cách nhau bởi các khoảng trống. Một "từ" được định nghĩa là một chuỗi chỉ chứa các chữ cái viết thường và chữ hoa ( /[a-zA-Z]+/trong regex). Để là "thực", từ của bạn phải được từ điển Scrabble chính thức công nhận .

Tôi đang sử dụng từ điển Scrabble vì nó đưa ra câu trả lời dứt khoát về những gì là và không hợp lệ. Có quá nhiều vùng màu xám với một từ điển bình thường. Lưu ý rằng "A" và "I" (không đề cập đến "quine") không phải là những từ viết nguệch ngoạc hợp lệ.

Vì việc viết một quine chỉ sử dụng các chữ cái và khoảng trắng là gần như không thể trong hầu hết các ngôn ngữ lập trình, bạn có tùy chọn thay thế các khoảng trắng đơn giữa các từ bằng một ký tự bạn chọn. Bạn cũng có tùy chọn để thêm các ký tự vào phía trước của từ đầu tiên và cuối của từ cuối cùng. Các ký tự được thêm này có thể là bất cứ thứ gì (bao gồm cả dòng mới và không phải ASCII) ngoại trừ các chữ cái (az, AZ) . Có một hình phạt cho việc thêm chúng mặc dù (xem Ghi điểm.)

Chi tiết

  • Như thường lệ, các quines có thể không đọc hoặc truy cập mã nguồn của riêng họ. (Tôi muốn nói rằng lệnh Q của HQ9 + vi phạm điều này.)
  • Đầu ra nên đi đến thiết bị xuất chuẩn hoặc một sự thay thế tương tự. Không có đầu vào.
  • Các từ không cần phải viết hoa chính xác. Họ có thể có mũ và chữ thường ở bất cứ đâu. Trình tự các từ không cần có ý nghĩa gì.
  • Không có từ nào có thể được sử dụng hơn 3 lần trong chương trình của bạn. Các từ được viết hoa khác nhau vẫn là cùng một từ (ví dụ: 'DOG', 'dog' và 'dOg' đều là cùng một từ).
  • Sử dụng ngôn ngữ như PHP hoặc HTML mà có thể chỉ là con mèo ra khỏi nội dung của họ được coi là một kẽ hở tầm thường và không được phép.
  • Chương trình phải chứa ít nhất một từ.

Chấm điểm

Điểm của bạn là số lượng "từ thực" trong chương trình của bạn cộng với các hình phạt sau:

  • +1 cho mọi không gian được thay thế bằng một ký tự khác
  • n n cho mỗi n ký tự bạn đã thêm trước từ đầu tiên (vâng, đó là n với sức mạnh n)
  • n n cho mỗi n ký tự bạn đã thêm sau từ cuối cùng

Ví dụ, chương trình

We all LIKE PROgraMmING

sẽ đạt 4 điểm vì nó chứa 4 từ; không có ký tự nào được thêm hoặc thay thế bất kỳ khoảng trắng nào. Tất nhiên là đầu ra We all LIKE PROgraMmING.

Chương trình

!We@all LIKE#PROgraMmING- =

sẽ đạt điểm 4 + 2 + 1 + 27 = 34; 4 cho các từ, 2 cho các khoảng trắng được thay thế, 1 cho !ở phía trước và 27 cho - =ở cuối. Tất nhiên là đầu ra !We@all LIKE#PROgraMmING- =.

Điểm thấp nhất sẽ thắng. Tiebreaker đi đến câu trả lời với số điểm phạt ít nhất. Nếu vẫn còn một ràng buộc, câu trả lời được bình chọn cao nhất sẽ thắng.


1
Có phải từ điển đó cũng tồn tại như một danh sách? Điều đó sẽ hữu ích hơn rất nhiều để duyệt qua hơn là phải kiểm tra từng từ riêng lẻ.
Martin Ender

16
Shakespeare có ai không?
dwana


1
@JanDvorak Tôi không nghĩ vậy ... Thực tế là tôi không thể viết bất cứ điều gì như thế này không nên khiến người khác coi đây là một câu hỏi tồi, đó là một thách thức, mặc dù khá khó khăn, phải không?
rorlork

7
Tôi vẫn quan tâm đến một giải pháp Shakespeare.
John Dvorak

Câu trả lời:


25

golf, 8 từ + 8 ký hiệu = 20 16 (3?)

{four"words.written~twice"four}words.written~twice

Các từ chỉ là một phụ, lõi là một lõi quine nhỏ:

{".~"}.~

Sao y và đánh giá một chức năng chỉ nối các hướng dẫn để sao chép và đánh giá chính nó. Khi một chức năng được in, nó được xâu chuỗi tự động. Đây là quine nhỏ nhất làm một cái gì đó .

Hoặc chúng ta chỉ có thể sử dụng một hàm chữ không bao giờ được đánh giá. Nhưng cảm giác như gian lận ...

{whatever}

Bạn không cần nối. {a`b"x.y~z"c}x.y~z
Dennis

@Dennis Tôi thậm chí không cần kiểm tra trong trường hợp đó. Cảm ơn! Tôi cảm thấy mình cần phải hỏi OP điều gì đó ...
John Dvorak

8
@Cephalepad Tôi không đọc mã nguồn của riêng mình. Tôi chỉ đang đẩy một hàm lên ngăn xếp và bộ thực thi in nó ra cho tôi, hoàn toàn không biết thực tế là toàn bộ mã nguồn của tôi là một hàm theo nghĩa đen.
John Dvorak

1
Tôi nghĩ rằng điều {whatever}đó sẽ vi phạm quy tắc quá tầm thường ("Sử dụng các ngôn ngữ như PHP hoặc HTML có thể loại bỏ nội dung của chúng được coi là một lỗ hổng tầm thường và không được phép.")
Claudiu

1
@Claudiu đó là một quy tắc chống lại ngôn ngữ, không phải giải pháp. Đó là lý do tại sao tôi hỏi.
John Dvorak

54

> <> , 25 từ + (22 + 1 1 + 1 1 ) thêm = 57 49

Trời ơi, não tôi.

'brr3deep*clap6beep+orb5flap*leap4deep+clap5beep5flap*leap9deep9clap*beep+flap0placed apple alp0leap=clip?lob8blip*flip0clip.

Vì quy tắc nêu rõ "Không có đầu vào.", Để chương trình này hoạt động, bạn sẽ cần đặt một tệp trống.

Ồ và vâng, brrlà một từ Scrabble hợp lệ, như là tsktskpfft.

Giải trình

Trước hết, các từ sau đây là no-ops:

deep clap beep flap leap clip blip flip

Điều này là do hai lý do:

  • abcdeflsố đẩy (10, 11, 12, 13, 14, 15 và chiều dài của ngăn xếp tương ứng). Ngoài ra, iđẩy -1 nếu EOF được đáp ứng, xem như không có đầu vào.
  • Các plệnh bật ba ký tự v,y,xvà những nơi vtại vị trí x,y.

Có,> <> cho phép bạn sửa đổi mã nguồn một cách nhanh chóng! Chúng tôi không thực sự sử dụng điều đó, vì chúng tôi chỉ cần pxuất hiện.

Nếu chúng ta thoát khỏi những no-op này, chúng ta sẽ nhận được:

'brr3*6+orb5*4+55*99*+0placed apple alp0=?lob8*0.

Trong một cách tương tự, laced appmột phần của placed applee alpmột phần của apple alpcũng không-ops, và rrcác brrchỉ đảo ngược chồng hai lần, mà chúng tôi cũng có thể loại bỏ:

'b3*6+orb5*4+55*99*+0pl0=?lob8*0.

Cuối cùng, một cái gì đó trông giống như một chương trình> <> thông thường! Ý tưởng là sử dụng tiêu chuẩn> <> quine, hoạt động như vậy:

  • Ban đầu 'bắt đầu phân tích chuỗi, đẩy mọi char gặp nhau cho đến khi chúng ta gặp một chuỗi khác'
  • Chúng tôi tiếp tục đẩy các ký tự cho đến cuối dòng, tại thời điểm đó chúng tôi quấn con trỏ lệnh trở lại điểm bắt đầu (vì> <> là hình xuyến)
  • Chúng tôi tiếp tục ban đầu 'một lần nữa và dừng phân tích chuỗi. Kết quả là chúng tôi đã đẩy từng char trong chương trình (trừ bản gốc ') lên stack.

Sau đó, những điều sau đây xảy ra:

b3*6+o                Print the initial ' quote (ASCII 39)
r                     Reverse the stack
b5*4+                 Push a ';' (ASCII 59)
55*99*+0p             Replace the 'l' of 'lob' with ';'

(print loop)
l0=?;                 If the stack is empty, terminate. Otherwise...
o                     Print the top of the stack
b8*0.                 Jump back to the beginning of the loop

"Không có từ nào có thể được sử dụng nhiều hơn 3 lần trong chương trình của bạn. Các từ được viết hoa khác nhau vẫn là cùng một từ (ví dụ: 'DOG', 'dog' và 'dOg' đều là cùng một từ)." Dù sao, bạn nhận được một upvote từ tôi, thưa ông.
rorlork

@rcrmn Tôi cứ thêm rất nhiều từ tôi hoàn toàn quên mất quy tắc đó! Đã sửa bây giờ, mặc dù tôi đã muốn tránh phải sử dụng i.
Sp3000

1
TIL "pa", "la" và "be" là những từ hợp lệ trong Scrabble
John Dvorak

20
Đọc to chương trình của bạn làm cho tôi tưởng tượng máy tính thẻ đục lỗ phải nghe như thế nào.
Sở thích của Calvin

10
Tôi nghĩ rằng bạn đã đánh cắp chương trình đó từ nguồn hệ điều hành của R2D2.
đã ngừng quay ngược chiều

21

, 1 từ

Tôi không bình thường vào esolang, nhưng cái này có vẻ hoàn hảo cho việc này. Tôi nghĩ rằng đây là một câu hỏi thực sự:

chicken

Đẩy 1 con gà lên chồng. Ngăn xếp sau đó được hiển thị.


1
Điều này (và câu trả lời Julia) trên không hợp lệ tầm thường. Bạn có thể giữ chúng ở đây nhưng không có lời hứa chấp nhận.
Sở thích của Calvin

@ Calvin'sHobbies Vì lợi ích của sự công bằng, tôi sẽ vui vẻ xóa cái này nếu bạn cảm thấy nó quá lố bịch - Cuộc gọi của bạn. Tôi đã làm việc trên một giải pháp applescript, nhưng đã thất vọng bởi quy tắc "Không từ nào có thể được sử dụng hơn 3 lần" mà dường như làm cho điều này đặc biệt khó khăn. Vì vậy, tôi đã đi đến thủ thuật rẻ tiền thay thế :-)
Chấn thương kỹ thuật số

@ Calvin'sHob sở thích: Tôi là tác giả của bài nộp Julia. Tôi đồng ý với việc xóa bài đăng của tôi nếu bạn cảm thấy nó quá giới hạn. Tôi cũng đã làm R. Điều đó có quá gần không?
Alex A.

@Alex và DT: Tùy các bạn. Tôi có lẽ sẽ không chấp nhận câu trả lời nhưng tôi không phiền họ ở đây. Tôi vẫn hơi khó chịu với câu trả lời R, mặc dù ý tưởng này khá giống với câu trả lời của Julia ...
Sở thích của Calvin

12

R, 2 từ + 1 thay thế + 1¹ trailing = 4

Các đối tượng không được gán cho bất cứ thứ gì chỉ được in ra thiết bị xuất chuẩn. Vì một biểu thức là một đối tượng, đoạn mã sau sẽ tự in:

expression(puppy)

Bài dự thi trước, 5 điểm:

function(hello)hello

Bạn đã được truyền cảm hứng bởi giải pháp 3 điểm gian lận của tôi, phải không? ;-)
John Dvorak

1
@JanDvorak: Tôi thực sự đã không thấy điều đó trước khi tôi đăng bài này, nhưng bây giờ nó là một nguồn cảm hứng hồi tưởng.
Alex A.

12

Python 2, 58 = 37 từ + 21 dấu chấm câu

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash and%rif reload else fire;exec prog"or English;ramming=None or"ramming"if license else pirate;print fear%puzzle+ramming'if reload else fire;exec programming

Với một số dòng mới được thêm vào:

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash
and%rif reload else fire;exec prog"or English;ramming=None or
"ramming"if license else pirate;print fear%puzzle+ramming'
if reload else fire;exec programming

Ba hạn chế sử dụng cho mỗi từ là điều khiến bài viết này trở nên khó viết. Tôi muốn sử dụng chuỗi với tất cả mã hơn 3 lần và mỗi chuỗi phải được cách ly với các if else and ortoán tử mà tôi chỉ có nguồn cung hạn chế.


@ user23013 Rất tiếc, quên thay thế bằng một định danh ngẫu nhiên.
frageum

7

Julia, 1 từ + 1¹ trước = 2

Julia có các đối tượng được gọi là biểu tượng được xác định bằng cách sử dụng trước :. Giống như giải pháp R của tôi, điều này chỉ in khi gửi.

:puppy

5

Dòng lệnh DOS, 10

& was unexpected at this time.

Lỗi quine, không bị cấm dường như


1
Mã này không "mã hóa" bất kỳ phần nào của mã. Xem định nghĩa của chúng tôi cho một quine
MilkyWay90

@ MilkyWay90 Sử dụng định nghĩa &mã hóa toàn bộ mã và ngừng xuất
l4m2

Ồ, bạn có thể chỉnh sửa câu trả lời để tôi có thể xóa downvote của mình không
MilkyWay90

1
Câu trả lời thú vị loopholey ... là &một từ, mặc dù?
Chương trình Redwolf

@RedwolfPrograms không, nhưng & là hai biểu tượng. 5 (từ) + 1 (theo dõi) + 2 ^ 2 hàng đầu = 10.
Draco18s

3

Bùa mê , Điểm 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

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

Từ: hot ox not knot(4)
Thay thế: 3 4 +(3)
Trước: "(1)
Sau: @(1)

Tất cả các nhân vật GNOQWghtxzđều không hoạt động trong Runic (cũng như không gian và thời gian, nhưng nhiều không gian hơn không giúp ghi điểm). Bao gồm Xkcần thiết cho chức năng, điều này cung cấp danh sách từ có sẵn sau đây:

5 Letter Word(s)
  thong
4 Letter Word(s)
  gong goth gowk gown hogg hong honk howk knot know nogg nowt tong town wonk wont zonk
3 Letter Word(s)
  got gox hog hon hot how nog noh not now nth own tho tog ton tow two who wok won wot
2 Letter Word(s)
  go ho no oh on ow ox to wo

Tôi đã chọn anh đào dựa trên nhu cầu của không gian mà nó đang đi vào và làm cho nó nghe thật buồn cười.

Xóa tất cả các ký tự NOP sẽ đưa ra câu hỏi sau:

"3X4+k@

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


0

Huh? - 1 từ + 1 ** 1/1 ^ 1 = 1 char sau từ = 2 tổng số điểm.

Ouch!

Ouch! là một quine hợp lệ trong huh?

Chạy nó như thế pythuhn.py Ouch!, và không thể có một tệp có tên Ouch!trong thư mục hiện tạ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.