2010-03-19 2 views
16

Только что закончил чтение этого блог: http://www.skorks.com/2010/03/an-interview-question-that-prints-out-its-own-source-code-in-ruby/Кратчайшего Рубин Куайн

В ней автор утверждает случай для использования Куайна как вопрос интервью. Я не уверен, что согласен, но это не тот вопрос.

Он продолжает строительство короны в Ruby и реорганизует его, чтобы сделать его короче. Затем он бросает вызов читателю, чтобы попытаться сделать его еще короче.

я играл с ним на некоторое время и придумал следующее:

s="s=;puts s[0,2]+34.chr+s+34.chr+s[2,36]";puts s[0,2]+34.chr+s+34.chr+s[2,36] 

Это первый раз, когда я попытался Куайн, и я не могу понять, как сделать его короче любой ,

Какова самая короткая Ruby quine, которую вы можете придумать? Пожалуйста, напишите объяснение, если это требует его реализация.

+2

Если вам интересно, Куайн это программа, которая при запуске выводит это собственный исходный код. http://en.wikipedia.org/wiki/Quine_(computing) – AaronThomson

+6

Это мой самый короткий Quine: –

+0

Возможно, я должен был сказать «кратчайший, нетривиальный quine»? – AaronThomson

ответ

19

К сожалению, RubyGarden больше не существует. Вот несколько ссылок, чтобы сделать для него (один Кевин отправил не самый короткий один больше, кстати):

The first quines in Ruby

s="s=%c%s%c; printf s,34,s,34,10%c"; printf s,34,s,34,10 

ruby quine slightly smaller than python quine

_="_=%p;puts _%%_";puts _%_ 

shortest nozero [sic!] ruby quine

puts <<2*2,2 
puts <<2*2,2 
2 
+0

Спасибо, это именно то, что я искал. Можете ли вы объяснить синтаксис последнего? – AaronThomson

+0

На самом деле это объясняется на второй странице связанного выше потока. Цитата: «puts << 2» - распечатайте весь текст после этого утверждения, пока вы не дойдете до строки «2» до . .... «* 2» - напечатать эту строку дважды .... «, 2» - и затем распечатать значение 2 Второй «puts << 2 * 2,2» - это просто текст и конечным «2» является разделитель . –

+0

Он также работает на Perl! http://pastebin.com/0YVrr4wN –

2
$><<open($0).read 

17 байт, если у вас нет задней строки новой строки.

EDIT: oh, wait, чтение собственного исходного файла обманывает.

4

Еще короче:

$><<IO.read($0) 

15 символов, не включая символ новой строки

+8

Не quine: http://en.wikipedia.org/wiki/Quine_(computing)#.22Cheating.22_quines – johncorser

 Смежные вопросы

  • Нет связанных вопросов^_^