То, как записать сам воспроизводящий код (печатает источник на должностном лице)?

Самый простой способ избавиться от этого - это очень хорошо работает -

  1. Не используйте document.open ().
  2. Вместо этого используйте этот документ. .location.href = location; где местоположение - загружаемый url

Пример:

<script>
function loadUrl(location)
{
this.document.location.href = location;
}</script>

<div onclick="loadUrl('company_page.jsp')">Abc</div>

Это работает очень хорошо. Приветствия

33
задан Thomas Owens 1 October 2008 в 19:55
поделиться

8 ответов

Кроме cheatingВ№ нет никакого различия между скомпилированными и интерпретируемыми языками.

универсальный доступ к quines является довольно свободным. Во-первых, независимо от того, что программа похожа, в какой-то момент она должна распечатать что-то:

print ...

Однако, что это должно распечатать? Самостоятельно. Таким образом, это должно распечатать команду "печати":

print "print ..."

, Что это должно распечатать затем? Ну, тем временем программа выросла, таким образом, она должна распечатать строку, запускающуюся с "печати", также:

print "print \"print ...\""

Теперь программа выросла снова, таким образом, существует снова больше для печати:

print "print \"print \\\"...\\\"\""

И так далее. С каждым добавленным кодом существует больше кода для печати. Этот подход нигде не добирается, но он показывает интересный шаблон: строка "печать \"" повторяется много раз. Было бы хорошо поместить повторяющуюся часть в переменную:

a = "print \""
print a

Однако программа, просто измененная, таким образом, мы должны скорректировать a:

a = "a = ...\nprint a"
print a

, Когда мы теперь пытаемся заполнить "...", мы сталкиваемся с теми же проблемами как прежде. В конечном счете мы хотим записать что-то вроде этого:

a = "a = " + (quoted contents of a) + "\nprint a"
print a

, Но это не возможно, потому что, даже если у нас была такая функция quoted() для заключения в кавычки, существует все еще проблема, которую мы определяем a с точки зрения себя:

a = "a = " + quoted(a) + "\nprint a"
print a

, Таким образом, единственная вещь, которую мы можем сделать, помещает заполнителя в [1 113]:

a = "a = @\nprint a"
print a

И это - целый прием! Что-либо еще теперь ясно. Просто замените заполнителя заключенным в кавычки содержанием [1 114]:

a = "a = @\nprint a"
print a.replace("@", quoted(a))

, Так как мы изменили код, мы должны скорректировать строку:

a = "a = @\nprint a.replace(\"@\", quoted(a))"
print a.replace("@", quoted(a))

И вот именно! Все quines на всех языках прокладывают себе путь (кроме обмана).

ну, необходимо удостовериться, чтобы Вы заменили только первое вхождение заполнителя. И если Вы используете держателя второго места, можно постараться не должными быть заключить строку в кавычки.

, Но это - незначительные проблемы и легкий решить. Если факт, реализация [1 115] и replace() являются единственными деталями, по которым действительно отличаются различные quines.

<час>

В№, заставляя программу считать ее исходный файл

54
ответ дан 27 November 2019 в 18:08
поделиться

Существует несколько различных стратегий к записи quines. Очевидный должен просто написать код, который открывает код и распечатывает его. Но более интересные включают функции языка, которые допускают самовстраивание, как %s-стиль printf функция на многих языках. Необходимо выяснить, как встроить что-то так, чтобы это закончило тем, что разрешило к запросу быть встроенным. Я подозреваю, как палиндромы, большой метод проб и ошибок включен.

9
ответ дан 27 November 2019 в 18:08
поделиться

Также Вы могли учиться, как Базовая военная игра работает. Это был бы хороший пример, я думаю.

2
ответ дан 27 November 2019 в 18:08
поделиться

Обычный подход (когда Вы не можете обмануть*) должен записать что-то, что кодирует его источник в строковой константе, затем распечатывает ту константу дважды: Однажды как строковый литерал, и однажды как код. Это двигается "каждый раз, когда я пишу строку кода, я должен записать другому для распечатывания ее!" проблема.

'Обман' включает: - Используя интерпретируемый язык и просто загрузку источника и печать его - файлы 0 байтов длиной, которые являются правильными на некоторых языках, такими как C.

1
ответ дан 27 November 2019 в 18:08
поделиться

Одна идея думать о кодировании и как дать чему-то двойное значение так, чтобы это могло использоваться для вывода чего-то в нескольких формах. Существует также протест, что этот тип проблемы идет с ограничениями, чтобы мешать, поскольку без любых правил кроме программы производит себя, пустая программа является решением.

0
ответ дан 27 November 2019 в 18:08
поделиться

Для забавы я придумал один в Схеме, которой я довольно гордился в течение приблизительно 5 минут, пока я не обнаружил, был обнаружен прежде. Так или иначе существует небольшая модификация к "правилам" игры лучше значить дуальность данных и кода в Lisp: вместо того, чтобы распечатать источник программы, это - S-выражение, которое возвращает себя:

((lambda (x) (list x `',x)) '(lambda (x) (list x `',x)))

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

1
ответ дан 27 November 2019 в 18:08
поделиться

В рубине:

помещает File.read (_ _ ФАЙЛ _ _)

-2
ответ дан 27 November 2019 в 18:08
поделиться

Можно найти довольно много решений этого здесь: http://forums.thedailywtf.com/forums/p/5232/147528.aspx

0
ответ дан 27 November 2019 в 18:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: