Napisz program, który wygeneruje „prawdziwe” wyjście, jeśli dane wejściowe są zgodne z kodem źródłowym programu, i które wygeneruje „fałszywe” dane wyjściowe, jeśli dane wejściowe nie będą zgodne z kodem źródłowym programu.
Problem ten można opisać jako związany z quinesami, ponieważ program musi być w stanie w jakiś sposób obliczyć własny kod źródłowy w tym procesie.
To jest kod golfowy: obowiązują standardowe zasady. Twój program nie może uzyskiwać dostępu do żadnych plików specjalnych, takich jak plik własnego kodu źródłowego.
Edycja: Jeśli tak wybierzesz, wartość prawda / fałsz może zostać zastąpiona wartością prawda / fałsz lub 1/0.
Przykład
Jeśli kod źródłowy twojego programu to bhiofvewoibh46948732));:/)4
, to oto co twój program musi zrobić:
Wejście (standardowe wejście)
bhiofvewoibh46948732));:/)4
Wyjście (standardowe wyjście)
true
Wejście
(Anything other than your source code)
Wynik
false
code-golf
quine
decision-problem
PhiNotPi
źródło
źródło
true
/false
jest silnym wymogiem, czy też dopuszczalne są odmiany (True
/False
,1
/0
)?Odpowiedzi:
JavaScript: 26
Nie wiem, czy plik JavaScript naprawdę kwalifikuje się jako „program”.
źródło
.toString()
metodę w JavaScript .f=s=>s=='f='+f
JavaScript ES6, 9 znaków
Jest to jedyny (golfowy) sposób na zrobienie tego w JS. ES6 sprawia, że zajmuje mniej znaków
Uruchom to w najnowszej konsoli internetowej Firefox:
Przykładowe użycie:
źródło
f=x=>f==x
i niex=>f==x
, podczas gdy wersja Denys Séguret rzeczywiście sprawdza całe źródło.f=x=>f==x
function f()
f.toSource()
"x=>f==x"
(w zasadzie oceń kod w konsoli, a następnie oceńf.toSource()
w przeglądarce obsługującej tę metodę.x=>f==x
) EDYCJA: nevermind, f odwołuje się wewnątrz funkcjiHaskell, 72 znaki
Uwaga: na końcu skryptu nie ma znaku końca linii.
źródło
GolfScript, 11 znaków
Bez
=
tego kod ten byłby quine, która generuje własny kod źródłowy jako ciąg znaków.=
Czyni go porównać ten ciąg do jego wejścia i wyjścia1
, jeśli mecz, a0
jeśli oni nie. Zauważ, że porównanie jest dokładne - w szczególności końcowy znak nowej linii na końcu danych wejściowych spowoduje, że się nie powiedzie.Wyjaśnienie:
{ }
jest dosłowny blok kodu w GolfScript;.
duplikuje ten blok kodu i~
wykonuje drugą kopię (pozostawiając pierwszą na stosie);`
uszeregowuje blok kodu i".~"
dodaje.~
do niego znak + ;=
porównuje powstały ciąg z danymi wejściowymi (które są wypychane na stos jako ciąg przez interpreter GolfScript przed uruchomieniem programu) i zwraca,1
jeśli pasują, a0
jeśli nie.źródło
Perl,
nieskończoność4138 znakówAktualizacja: program nie kończy się na nowej linii, co oznacza, że będzie działał poprawnie na plikach wieloliniowych. Musisz wprowadzić dane wejściowe ze STDIN bez naciskania Enter. W systemie Windows mogłem to zrobić tylko czytając z pliku.
Oryginalne rozwiązanie:
źródło
(cat id.pl; echo foo)|perl id.pl
> <> , 68 bajtów
Ryby uwielbiają kupować ryby. Teraz wiemy, że mogą odróżnić swoje od swoich przyjaciół ”.
Możesz spróbować online !
źródło
1
dla dowolnego prefiksu koduPython 2, 55
Przetestowany:
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
->True
(anything else)
->False
źródło
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
.raw_input()
z__import__('sys').stdin.read()
.print raw_input()==open(__file__).read()
? Ma tylko 40 bajtów, wykorzystuje twojeraw_input()
podejście, ale czyta swój kod.Your program must not access any special files, such as the file of its own source code.
JavaScript ES6,
1614 bajtówMinus dwa bajty dzięki Neilowi.
31 bajtów, jeśli musimy wprowadzić dane przez monit.
38 bajtów, jeśli musimy generować przez alert.
Jest to właściwy sposób, aby to zrobić, ponieważ odpowiedź Optymalizatora nie akceptuje całego kodu źródłowego.
źródło
'$='+$
.;$()
ponieważ wywołanie funkcji jest częścią quine. Oznacza to również, że musisz przełączyć sięprompt
na konto, aby uzyskać dane wejściowe.$=_=>prompt()==`$=${$};$()`;$()
Node.js: 54
Testujesz go, zapisując go w pliku
f.js
(dokładna nazwa nie ma znaczenia) i używając(który zwraca false) lub
(które wyjścia prawda)
Stworzyłem też inną wersję opartą na eval:
Teraz ma 72 znaki, postaram się to skrócić, kiedy będę miał czas.
źródło
Smalltalk (dialekt Pharo 2.0)
Zaimplementuj tę metodę 41 znaków w String (brzydkie formatowanie dla golfa kodowego):
Następnie oceń to w obszarze roboczym (printIt tradycyjnym sposobem Smalltalk)
Dane wejściowe nie są odczytywane ze standardowego wejścia, to tylko ciąg znaków, na który wysyłamy komunikat (co jeszcze program może być w języku Smalltalk?):
Ale oszukujemy, sourceCode czyta jakiś plik źródłowy ...
Oto wariant z 51 znakami, który nie:
I przetestuj za pomocą:
Jeśli ciąg znaków w obszarze roboczym nie jest uważany za prawidłowe dane wejściowe, zobaczmy, jak używać niektórych okien dialogowych w 116 znakach.
Po prostu oceń to zdanie:
Ponieważ format dekompilacji obejmuje CR i TAB, zmieniamy to za pomocąSeparatorsCompacted.
Następnie pomijamy pierwsze 7 znaków: „doIt ^”
Wreszcie wariant 105 znaków przy użyciu stdin, po prostu zinterpretuj to zdanie z wiersza poleceń, aby poczuć się bardziej popularny:
źródło
flex - 312 znaków
Prawdopodobnie można go skrócić, ale działa z wejściem wieloliniowym (konieczne, ponieważ kod źródłowy składa się z wielu linii), a nawet dla danych wejściowych zawierających program jako podłańcuch. Wydaje się, że wiele odpowiedzi jak dotąd zawodzi na jednym lub obu z nich.
Kompiluj polecenie:
flex id.l && gcc -lfl lex.yy.c
źródło
D (133 znaki)
źródło
JavaScript (V8), 35
zadzwoni
i()
i poprosi o wprowadzenie danychźródło
+[]
Powinno być dobrowolne jak JS będzie auto-go typu castGolfScript - 26
Inspirowany http://esolangs.org/wiki/GolfScript#Examples
Inna wersja:
Szkoda, że
\
jest zarówno zamiana, jak i ucieczka ...źródło
Python 2, 47 bajtów
Prosty quine z dodanym czekiem.
źródło
print
jest funkcją Python 3. Trzeba to zrobićprint(_%%_==input())';print(_%_==input())
lub zmienić na Python 2.CJam , 12 bajtów
Wypróbuj online!
Wyjaśnienie
To po prostu używa standardowej ramy quine CJam.
Co robi blok:
źródło
Tcl, 111 znaków
źródło
Perl, 52 znaki
źródło
Python, 187 bajtów
Uważaj, aby nie dodać nowego wiersza na końcu. Ktoś z lepszym Python-fu może go skrócić.
źródło
C=chr
aby usunąć kilka bajtów. Skróć także nazwę zmiennejcode
.Łuska , 11 bajtów
Wypróbuj online!
Wyjaśnienie
Wyjaśnienie używa
¨
do rozgraniczenia ciągów (aby uniknąć nieczytelnego ucieczki):Usuwając funkcję
=
, możesz sprawdzić , czy rzeczywiście będzie pasować tylko do samego źródła.źródło
> <> , 24 bajty
Wypróbuj online!
Zawijanie literału ciągu znaków, a następnie sprawdzanie, czy dane wejściowe są identyczne ze stosem, z ostatecznym sprawdzeniem, czy nie ma już danych wejściowych.
źródło
Galaretka , 10 bajtów
Wypróbuj online!
źródło
05AB1E , 15 bajtów
Zmienia domyślny quine
0"D34çý"D34çý
przez dodanieQ
(sprawdź równość z niejawnym wejściem)Wypróbuj online.
Wyjaśnienie:
Fajna 15 bajtów alternatywa dostarczona przez @Grimy :
Wypróbuj online.
Wyjaśnienie:
źródło
187745012D27BJQ
jest remis.C -
186176 znakówJedna wkładka:
Z białymi znakami (pamiętaj, że powoduje to uszkodzenie programu):
źródło
Python 2 , 40 bajtów
Wypróbuj online!
źródło
Stax , 26 bajtów
Uruchom i debuguj
źródło
q, 8 bajtów
Zwraca wartość logiczną na wejściu pasującą do samoreferencyjnego .zs
źródło
Runiczny , 11 bajtów
Wypróbuj online!
TIO zostało zaktualizowane i nie ma już problemu z odczytem danych wejściowych (i nie wymaga już spacji końcowych).
Wyjaśnienie
Rozwiązanie JoKing:
Wyjaśnienie
źródło
r
ewersu"
po lewej stronie jest jedynym miejscem, do którego naprawdę może się udać, ponieważ posiadanie go gdzie indziej komplikuje sprawy. (Ale teraz musiałem uruchomić go w moim debuggerze, aby zobaczyć, co robi ...)R , 54 bajty
Wypróbuj online!
body
pobiera treść funkcji (trochę ją dzieli, więcbody(f)[3]
to wszystko odpaste0
początku). Co ciekawe, ponowniebody
formatuje kod, dodając spacje po przecinkach itp. Jest to zatem rzadki przypadek odpowiedzi R golfa ze spacją po przecinku.Działa
body(f)
to, ponieważ jest obiektem typulanguage
i istniejeas.character
metoda dla tego typu. Z drugiej strony,f
iargs(f)
są typuclosure
, i nie mogę być konwertowany na typ postaci, o ile wiem. Nie pytaj mnie, jaki jest typ języka…źródło
PowerShell, 28 bajtów
Bardzo podobny do tej odpowiedzi JavaScript , używa dostawcy funkcji .
Przykład
źródło