Давний Люркер, первый постер. Так что здесь идет.
На странице Википедии о квине говорится, что «квин считается« обманщиком », если она смотрит на собственный исходный код». Ваша задача состоит в том, чтобы создать одну из этих «обманных лозунгов», которая читает собственный исходный код.
Это код-гольф , поэтому выигрывает самый короткий код в байтах - на каждом языке . Это означает, что 5-байтовый скрипт Pyth не побеждает 21-байтовый скрипт Python, а 15-байтовый скрипт Python.
Вы должны использовать файловый ввод / вывод для чтения исходного кода, поэтому следующий код JavaScript, взятый с официальной страницы Википедии, недопустим:
function a() {
document.write(a, "a()");
}
a()
Он должен получить доступ к исходному коду файла на диске .
Вам не разрешено указывать имя файла. Вы должны заставить его обнаруживать само имя файла.
Всем понятно? Идти!
Ответы:
Зш , 4 байта
В оболочку Z встроены функции кошачьих. Четвертый символ - перевод строки.
Попробуйте онлайн!
Код никак не зависит от имени файла; это работает, даже если имя файла содержит специальный символ, такой как пробелы или переводы строки.
Тестовый забег
источник
feline functionalities
:)Баш, 6 байт
В основном.
источник
cat
не добавляет символ новой строки (по крайней мере, в моей системе).cat
печатает содержимое предоставленного файла байт за байт.cat
решением, а неbash
решением? И кошка на самом деле не-e
?Исполняемый загрузчик UNIX, 10 байт
Если вы не заботитесь о спаме при стандартной ошибке, вы можете сделать его на один байт короче:
источник
cat
. И я думаю, что если вы хотите быть очень конкретным,cat
программа просто печатает сама себя и совместима с любым существующим форматом файла :)sudo install /bin/cat /c
. Знаешь, на всякий случай/bin
не в корневой файловой системе. Должен иметь этоcat
в однопользовательском ...С, 52
Конечно, это читает исходный код, а не скомпилированную программу - я предполагаю, что это в спецификации.
источник
printf
вместо того,puts
чтобы избежать завершающей новой строки.puts
можно использовать, вам просто нужноread
меньше символов.PHP, 21 байт
file
читает файл построчно в массив, и файл имеет только одну строку. Это экономит байт по сравнению сreadfile(__FILE__)
.источник
readfile
тоже 21<?readfile(__FILE__);
.<?=
Perl, 15 байт
Сохранено 3 байта благодаря @ ThisSuitIsBlackNot !
источник
open 0;print<0>
0
предполагает$0
?perldoc -f open
: «В качестве ярлыка вызов с одним аргументом берет имя файла из глобальной скалярной переменной с тем же именем, что и дескриптор файла:$ARTICLE = 100; open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
»Perl 6, 20 байт
Я не работал с Perl 6 очень долго, поэтому я не уверен, есть ли какие-то хитрости, чтобы сделать это короче.
источник
osascript (AppleScript из командной строки),
403332 байтаВыполнение в файле с именем
osascript a
.Получает первый абзац (строку) файла и печатает его в STDOUT с завершающим символом новой строки, следовательно, новой строкой в коде.
источник
read path to me
кажется, работает на меня. El Cap.Python 2, 32 байта
В конце файла новая строка.
Python 3, 33 байта
В конце файла новая строка.
Спасибо feersum за обнаружение проблемы и ее поставку
__file__
, Loovjo за новый подход к решению Python 2, который сэкономил 17 байтов, и Skyler за решение, которое сохранило еще один байт и работал как в Python 2, так и в 3 (ожидая,print
что это будет функция в Python 3)!Ссылка на документ для
readline
источник
end
параметра.print
?print(open(__file__).readline())
сопровождаться переводом строки.Batch,
98 байтСохранено байт благодаря @ Джошуа
источник
Python 2.7, 30 байт
Изменить: Просто чтобы быть ясно, код выше должен иметь новую строку в конце как 30-й байт. Я недостаточно знаком с уценкой, чтобы понять, как отобразить ее в блоке кода.
Я использую тот же трюк здесь, что и в моем C-представлении. Это читает весь исходный файл, за исключением завершающего символа новой строки, чтобы учесть дополнительный символ новой строки, который
print
будет добавлен к выводу.источник
print
не будет лишним.Java,
212196 байт (171 байт с сомнительными правилами жесткого кодирования)Спасибо @Cruncher за сокращение на ~ 15 байт!
Я не сомневаюсь, что это можно сыграть в гольф.
Или другой метод, используя статический метод (и имя класса), я получаю 171 байт. Я не уверен, что это квалифицируется как жестко закодированное.
Использует конструктор, чтобы получить имя класса нестатическим методом. Использование статического метода (
A.class.getName()
) было действительно жестко запрограммировано, поэтому я использовал «правильный» способ. ИспользуяA.class.getName()
, этот код сокращается до 171 байта.Читаемые версии:
Используя конструктор и
this.getClass()
:Используя статический метод
A.class.getName()
:Захватывает все байты файла одновременно и выводит его в STDOUT. Довольно просто.
источник
A.class.getName()
?AutoIt, 34 байта
Выводит себя в буфер обмена:
источник
Руби, 14
источник
.
чтобы избежать скобокGo,
111105 байтМой первый код-гольф в Go - я думаю, здесь можно использовать только несколько трюков.
источник
PowerShell,
39363125 байтПримерно так крепко, как я могу это получить:
gc $MyInvocation.MyCommand.Path | oh
Поддержанный популярным спросом это было изменено на:
печатает на текущий стандартный вывод
оболочки.источник
gc $MyInvocation.MyCommand.Path
достаточно. Он автоматически распечатает его.gc
это псевдоним, и он собирался использоватьcat
, так что у вас там все равно есть байт.gc $PSCommandPath
для 17 байтов. Проблема, которую я вижу, состоит в том, что это выплевывает новую строку (которой нет в источнике). Сейчас двусмысленно, если завершающий перевод новой строки в порядке или нет ... в зависимости от того, как это правило, нам может понадобиться что-то хитрое, например,gc $PSCommandPath|write-host -n
для 31 байта.Рубин, 15 байт
Источник: https://stackoverflow.com/questions/2474861/shortest-ruby-quine
источник
C, 49 байтов
Изменить: чтобы уточнить, 49-й байт является новой строкой.
Это читает исходный код минус перевод строки в конце, чтобы учесть перевод строки, который
puts
будет добавлен в конец вывода.источник
int main() {*0;}
может работать даже на существующих компиляторах, поскольку он содержит неопределенное поведение. Точно так же решение xsot может работать на существующих компиляторах, поскольку оно содержит неопределенное поведение. Ни один из них не может решить проблему. (Хотя, по общему признанию, xsot's, скорее всего , так и сделает, он может так же легко потерпеть крах). Мой фактический аргумент заключается в том, что мы должны разрешать решения, которые зависят от реализации или неопределенного поведения, но не от неопределенного поведения.Mathematica, 16 байтов
Запустите его в режиме сценария .
источник
Pyth, 25 байт
Это читает его имя файла. По сути, он ищет argv, открывает файл, соответствующий его последнему аргументу, и печатает его первую строку.
источник
h'$__file__$
?NameError: name '__file__' is not defined
. Pyth компилируется в Python, а затем выполняется результирующая строка. Так что я не ожидал, что это сработает.Go, 133 байта
источник
r"runtime"
.> <> , 13 байт
Проверено как на онлайн, так и на оффлайн переводчиках. Эта
g
команда наиболее близка к возможности чтения из исходного файла, и если она не учитывается для этой задачи, я отмечу мою запись как не конкурирующую; Я полагаю, что это обычно считается "изменой" для муки.Попробуйте онлайн.
источник
Haskell, 63 байта
Для науки!
источник
runhaskell
командой. Очень круто, хотя> <> , 31 байт
Отказ от ответственности: в> <> нет файлового ввода-вывода, однако я подумал, что было бы интересно продемонстрировать его кодовое пространство ввода-вывода, унаследованное от Befunge, одного из языков, который вдохновил> <>.
Само читающий Куайн, который я сделал некоторое время назад, вы можете попробовать здесь .
Я только что увидел, что есть более короткая> <> само читающая куина . Хотя он явно лучше в стандартах кода-гольфа, я хотел бы отметить, что он имеет жестко закодированную длину кода, в то время как мой будет копировать дополнительные строки или столбцы кода (при условии, что они не нарушают исходный код).
источник
F #, 54 байта
Использование:
источник
Perl 5,
1513 байтБлагодарим Bash за то, что вдохновили:
РЕДАКТИРОВАТЬ: не нужно точку с запятой или первый пробел.
источник
cat
присутствующий и находящийся в$PATH
. Но если он присутствует, его можно считать просто доступной командойperl
, так почему бы и нет.Node.js,
6663 байтаНе использует
console.log
, что добавляет новую строку.источник
p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))
console.log(require('fs').readFileSync(process.argv[1]))\n
для 57 байтов?test.js
. Допустимо вызывать его, запустивnode test
, что приведет к ошибке.C, 31 байт
Решение bash такое короткое, так почему бы не использовать на нем решение C?
источник
Haskell , 49 байтов
Попробуйте онлайн!
(GHC) Haskell имеет расширение для использования препроцессора C (обычно используется для переносимости между версиями и архитектурами.) Надеюсь, это самоочевидно.
источник
HTML с JavaScript, 115 байт (на самом деле не считается)
Это считается? Я не против, было весело :)
Технически это не открывает файл. Это также правильно сформированный документ HTML5. XMLSerializer был единственным инструментом, который также возвращал часть DOCTYPE, но не является стандартным. Тем не менее, он работает на Chrome и Firefox, и я держу пари, что другие браузеры.
И в качестве бонуса:
JavaScript, 41 байт
источник