Long-time lurker, plakat po raz pierwszy. No i proszę.
Na stronie Wikipedii dotyczącej quine napisano , że „quine jest uważane za„ oszustwo ”, jeśli patrzy na swój własny kod źródłowy”. Twoim zadaniem jest stworzenie jednego z tych „oszustów”, które będą czytały własny kod źródłowy.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach - w każdym języku . Oznacza to, że 5-bajtowy skrypt Pyth nie pobiłby 21-bajtowego skryptu Python - ale 15-bajtowy skrypt Python.
Aby odczytać kod źródłowy, musisz użyć pliku I / O, więc następujący kod JavaScript, pobrany z oficjalnej strony Wikipedii, jest nieprawidłowy:
function a() {
document.write(a, "a()");
}
a()
Musi uzyskać dostęp do kodu źródłowego pliku na dysku .
Nie możesz podać nazwy pliku. Musisz wykryć samą nazwę pliku.
Czy wszystko jasne? Iść!
Odpowiedzi:
Zsh , 4 bajty
Powłoka Z ma wbudowane funkcje kotów. Czwarty znak to linia.
Wypróbuj online!
Kod nie zależy w żaden sposób od nazwy pliku; działa, nawet jeśli nazwa pliku zawiera znaki specjalne, takie jak spacje lub znaki nowej linii.
Testowe uruchomienie
źródło
feline functionalities
:)Bash, 6 bajtów
Gruntownie.
źródło
cat
nie dołącza nowego wiersza (przynajmniej w moim systemie).cat
drukuje zawartość dostarczonego pliku bajt na bajt.cat
rozwiązanie zamiastbash
rozwiązania? I cat tak naprawdę nie kwalifikuje się jako język programowania-e
?Program ładujący wykonywalny UNIX, 10 bajtów
Jeśli nie obchodzi Cię spam związany ze standardowym błędem, możesz go skrócić o jeden bajt:
źródło
cat
. Sądzę, że jeśli chcesz być bardzo konkretny,cat
program po prostu drukuje się i jest kompatybilny z każdym istniejącym formatem pliku :)sudo install /bin/cat /c
. Wiesz, na wszelki wypadek/bin
nie w głównym systemie plików. Muszę to miećcat
w singleuser…C, 52
Oczywiście, to czyta kod źródłowy, a nie skompilowany program - zakładam, że jest to zgodne ze specyfikacją.
źródło
printf
zamiast,puts
aby uniknąć końcowego nowego wiersza.puts
można go użyć, wystarczy miećread
mniej znaków.PHP, 21 bajtów
file
czyta plik linia po linii do tablicy, a plik ma tylko jedną linię. To oszczędza bajt w porównaniu doreadfile(__FILE__)
.źródło
readfile
Jest też 21:<?readfile(__FILE__);
.<?=
Perl, 15 bajtów
Zaoszczędzono 3 bajty dzięki @ ThisSuitIsBlackNot !
źródło
open 0;print<0>
0
zakłada$0
?perldoc -f open
: „Jako skrót jednoargumentowe wywołanie pobiera nazwę pliku z globalnej zmiennej skalarnej o tej samej nazwie co uchwyt pliku:$ARTICLE = 100; open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
”Perl 6, 20 bajtów
Nie pracowałem bardzo długo z Perlem 6, więc nie jestem pewien, czy są jakieś sztuczki, które mogłyby go skrócić.
źródło
osascript (AppleScript z wiersza poleceń),
403332 bajtyWykonanie na pliku o nazwie z
osascript a
.Pobiera pierwszy akapit (linię) pliku i drukuje go do STDOUT ze znakiem nowej linii, a zatem nowej linii w kodzie.
źródło
read path to me
wydaje się działać dla mnie. El Cap.Python 2, 32 bajty
Na końcu pliku znajduje się nowa linia.
Python 3, 33 bajty
Na końcu pliku znajduje się nowa linia.
Dzięki feersum za złapanie problemu i dostarczenie
__file__
, Loovjo za nowe podejście do rozwiązania Python 2, które pozwoliło zaoszczędzić 17 bajtów, a Skyler za rozwiązanie, które pozwoliło zaoszczędzić kolejny bajt i działało zarówno w Pythonie 2, jak i 3 (w oczekiwaniuprint
na funkcję w Pythonie 3)!Link do dokumentu dla
readline
źródło
end
parametr.print
?print(open(__file__).readline())
następować nowa linia.Partia,
98 bajtówZapisano bajt dzięki @Joshua
źródło
Python 2.7, 30 bajtów
Edycja: Żeby było jasne, powyższy kod powinien mieć nowy wiersz na końcu jako 30 bajt. Nie znam wystarczająco znaczników, aby dowiedzieć się, jak wyświetlić go w bloku kodu.
Używam tutaj tej samej sztuczki, co w moim przesłaniu C. Odczytuje to cały plik źródłowy z wyłączeniem końcowego nowego wiersza, aby uwzględnić dodatkowy nowy wiersz, który
print
zostanie dołączony do wyniku.źródło
print
nie była obca.Java,
212196 bajtów (171 bajtów z wątpliwymi regułami kodowania twardego)Dzięki @Cruncher za skrócenie go o ~ 15 bajtów!
Nie mam wątpliwości, że można grać w golfa.
Lub inną metodą, używając metody statycznej (i nazwy klasy), otrzymuję 171 bajtów. Nie jestem jednak pewien, czy to kwalifikuje się jako zakodowane na stałe.
Używa konstruktora, aby uzyskać nazwę klasy metodą niestatyczną. Zastosowanie metody statycznej (
A.class.getName()
) było naprawdę mocno zakodowane, więc użyłem „właściwej” metody. Za pomocąA.class.getName()
tego kodu skraca się do 171 bajtów.Wersje czytelne:
Korzystanie z konstruktora i
this.getClass()
:Za pomocą metody statycznej
A.class.getName()
:Pobiera wszystkie bajty pliku na raz i wysyła je do STDOUT. Całkiem proste.
źródło
A.class.getName()
?AutoIt, 34 bajty
Wysyła się do schowka:
źródło
Ruby, 14 lat
źródło
.
aby uniknąć nawiasówIdź,
111105 bajtówMój pierwszy golf w Go w Go - chyba kilka sztuczek, których możesz tu użyć.
źródło
PowerShell,
39363125 bajtówO tak ciasno, jak tylko mogę:
gc $MyInvocation.MyCommand.Path | oh
W związku z popularnym żądaniem zmieniono to na:
wypisuje na bieżące standardowe wyjście
powłoki powłoki.źródło
gc $MyInvocation.MyCommand.Path
wystarczy. Automatycznie go wydrukuje.gc
był pseudonim i właśnie zamierzałem go użyćcat
, więc i tak miałeś na mnie bajt.gc $PSCommandPath
17 bajtów. Problem, jaki widzę, polega na tym, że wyrzuca to nowy wiersz (który nie istnieje w źródle). Teraz jest dwuznaczne, czy końcowe znaki nowej linii są w porządku, czy nie ... w zależności od tego, jak to rządzi, być może będziemy musieli zrobić coś trudnego, jakgc $PSCommandPath|write-host -n
na 31 bajtów.Rubin, 15 bajtów
Źródło: https://stackoverflow.com/questions/2474861/shortest-ruby-quine
źródło
C, 49 bajtów
Edycja: Aby wyjaśnić, 49 bajt jest znakiem nowej linii.
Odczytuje kod źródłowy minus nowy wiersz na końcu, aby uwzględnić nowy wiersz, który
puts
zostanie dołączony na końcu wyniku.źródło
int main() {*0;}
może działać nawet na istniejących kompilatorach, ponieważ zawiera niezdefiniowane zachowanie. Podobnie, rozwiązanie xsot może działać na istniejących kompilatorach, ponieważ zawiera niezdefiniowane zachowanie. Żadne z nich nie gwarantuje rozwiązania problemu. (Chociaż jest prawdopodobne, że xsot's to zrobi, równie łatwo może ulec awarii). Moim faktycznym argumentem jest to, że powinniśmy dopuścić rozwiązania zależne od zachowania zależnego od implementacji lub nieokreślonego, ale nie zachowania niezdefiniowanego.Mathematica, 16 bajtów
Uruchom go w trybie skryptowym .
źródło
Pyth, 25 bajtów
To czyta jego nazwę pliku. Zasadniczo wyszukuje argv, otwiera plik odpowiadający jego ostatniemu argumentowi i wypisuje swój pierwszy wiersz.
źródło
h'$__file__$
?NameError: name '__file__' is not defined
. Pyth jest kompilowany do Pythona, a następnie powstaje ciąg wynikowy. Więc nie spodziewałbym się, że to zadziała.Idź, 133 bajtów
źródło
r"runtime"
.> <> , 13 bajtów
Testowany zarówno na tłumaczach online, jak i offline.
g
Komenda znajduje się najbliżej jest w stanie odczytać z pliku źródłowego, a jeśli to się nie liczy dla celów tego wyzwania będę oznaczyć wpis zakaz konkurowania; Uważam, że normalnie uważa się to za „oszukiwanie” dla quines.Wypróbuj online.
źródło
Haskell, 63 bajty
Dla nauki!
źródło
runhaskell
poleceniem. Bardzo fajnie> <> , 31 bajtów
Oświadczenie: nie ma we / wy pliku w> <>, ale pomyślałem, że byłoby interesujące zaprezentowanie we / wy przestrzeni kodowej odziedziczonej po Befunge, jednym z języków, który zainspirował> <>.
Samouczące się Quine, które stworzyłem jakiś czas temu, możesz spróbować tutaj .
Właśnie widziałem, że jest krótszy samouczący się quine . Chociaż jest wyraźnie lepszy w standardach golfa kodowego, chciałbym zauważyć, że ma on zakodowaną długość kodu, podczas gdy moje kopiowałyby dodatkowe wiersze lub kolumny kodu (o ile nie łamią oryginalnego kodu).
źródło
F #, 54 bajtów
Stosowanie:
źródło
Perl 5,
1513 bajtówPodziękowania dla rozwiązania Bash za inspirację:
EDYCJA: Nie potrzebujesz średnika ani pierwszej spacji.
źródło
cat
obecnego i możliwego do znalezienia w$PATH
. Ale jeśli jest obecny, można przyjąć, że jest to po prostu polecenie dostępneperl
, więc dlaczego nie.Node.js,
6663 bajtówNie używa
console.log
, który dodaje nowy wiersz.źródło
p=process;p.stdout.write(require('fs').readFileSync(p.argv[1]))
console.log(require('fs').readFileSync(process.argv[1]))\n
za 57 bajtów?test.js
. Prawidłowe jest wywołanie go przez uruchomienienode test
, co spowoduje zgłoszenie błędu.C, 31 bajtów
Rozwiązanie bash jest tak krótkie, więc dlaczego nie oprzeć na nim rozwiązania C?
źródło
Haskell , 49 bajtów
Wypróbuj online!
(GHC) Haskell ma rozszerzenie do korzystania z preprocesora C (powszechnie używanego do przenoszenia między wersjami i architekturami.) Mam nadzieję, że to oczywiste.
źródło
HTML z JavaScript, 115 bajtów (tak naprawdę się nie liczy)
Czy to się liczy? Nie mam nic przeciwko, było fajnie :)
Technicznie nie otwiera pliku. Jest to również dobrze sformułowany dokument HTML5. XMLSerializer był jedynym narzędziem, które również zwróciło część DOCTYPE, ale jest niestandardowe. Mimo to działa na Chrome i Firefox, i założę się o inne przeglądarki.
I jako bonus:
JavaScript, 41 bajtów
źródło