Odwrotne cytaty-quine

29

Perspektywa tego wyzwania jest:

  • Jeśli twój program działa normalnie, "należy wydrukować cały kod ze znaków mowy ( - podwójne cudzysłowy).
  • Jeśli twój program jest owinięty podwójnymi cudzysłowami (z kolei odwracając znaki mowy), należy wydrukować kod, który zwykle nie jest w cudzysłowach.

Na przykład:

Powiedzmy, że masz następujący kod:

fancyStuff("myCode"); "I like".isGreat();

Gdybym go uruchomił, oczekiwałbym wyniku:

myCode
I like

Gdybym jednak zawinął go w cytaty, otrzymałbym:

"fancyStuff("myCode"); "I like".isGreat();"

Po uruchomieniu tego kodu oczekiwane dane wyjściowe to:

fancyStuff(
); 
.isGreat();

Oczywiście powyższy przykład nie jest odpowiedzią funkcjonalną w żadnym języku. Twoim zadaniem jest napisanie kodu, który działa w ten sposób.

Zasady

  • Obowiązują standardowe luki.
  • Wartości drukowane, zarówno w formie cytowanej, jak i niecytowanej, muszą być niepuste lub składać się wyłącznie z białych znaków. Oznacza to również, że wszystkie programy muszą zawierać co najmniej jeden zestaw cytatów.
  • Dopuszczalne jest jednak końcowe / poprzedzające białe znaki.
  • Bez patrzenia na własny kod, wymagane nazwy plików itp.
  • Niedopasowane cytaty są niedozwolone
  • Jeśli istnieje wiele ciągów, można je wydrukować jako znaki nowej linii (jak w przykładzie) lub w inny sposób czytelny dla człowieka - bez tablic i obiektów
  • To jest , więc wygrywa najkrótsza odpowiedź w bajtach.
Geza Kerecsenyi
źródło
Czy dozwolone są niedopasowane oferty, a jeśli tak, to w jaki sposób należy je traktować?
negatywne siedem
3
@GezaKerecsenyi Więc czy wymagany jest separator, czy możemy po prostu połączyć łańcuchy?
Erik the Outgolfer
9
W jaki sposób tablica nie jest formatem czytelnym dla człowieka?
Wheat Wizard
4
Czy ciągi muszą być wyprowadzane w tej samej kolejności, w jakiej występują w naszym kodzie?
Kudłaty
1
Myślę, że byłoby to nieco bardziej skomplikowane, gdybyś musiał wydrukować wszystko, co nie było w cytatach
Jo King

Odpowiedzi:

28

Python 2 , 20 bajtów

print";print'print'"

-7 bajtów dzięki tsh

Wypróbuj online!


Stara odpowiedź:

Python 2 , 27 bajtów

'';print";print 2*"'';print

Wypróbuj online!

Ciąg myśli za tą odpowiedzią:

Zacznij od prostego wydruku, ponieważ musimy coś wydrukować .

print"a"

Musimy również wydrukować coś w odwróconej obudowie, tj. wydrukować w cudzysłowie.

print"print"

Nie odwrócona obudowa jest w tym momencie całkiem dobra. Skupmy się na odwróconej sprawie. Teraz zaczynamy od łańcucha print, po którym nie może nastąpić od razu instrukcja print. Naprawmy to za pomocą średnika.

print";print"

Dobry towar. Tyle że odwrócony kod nic tak naprawdę nie drukuje. Będziemy musieli wydrukować printna początku, ponieważ kończy się na cytatach, ale także wydrukować wszystko, co nastąpi po drugim cytacie, ponieważ kończy się również na cytatach. Oczywistym sposobem jest dodanie printi pomnożenie ostatniego ciągu przez 2.

print";print 2*"print

Teraz odwrócony kod działa dobrze, choć musimy uważać na to, że sekcja przed pierwszym cytatem i sekcja po drugim cytacie muszą pozostać takie same podczas przyszłych zmian. Jeśli chodzi o kod nieodwrócony, generuje błąd składniowy - po raz kolejny musimy wprowadzić średnik do oddzielnych wyrażeń.

;print";print 2*";print

Pythonowi nie podoba się wygląd tego samotnego średnika, więc musimy zaspokoić głód węża dwoma takimi samymi wyrażeniami braku op, wstawionymi przed pierwszym średnikiem i ostatnim średnikiem. Większość wyrażeń będzie działać poprawnie w pierwszym przypadku, ale w drugim przypadku musi następować print";print 2*"w nieodwróconym kodzie bez zepsucia czegokolwiek. Możemy użyć '', który po prostu łączy się z poprzednim ciągiem.

'';print";print 2*"'';print
ujemna siódemka
źródło
5
print(";print('print()');")ma również 27 bajtów, a także Python 3.
tsh
2
@tsh Ten kod ujawnia 20-bajtowe rozwiązanie Python 2, które powinno być oczywiste z perspektywy czasu, bardzo dobrze!
negatywne siedem
19

CSS, 66 bajtów

body:after{content:"{}body:after{content:'body:after{content:}'}"}

"body:after{content:"{}body:after{content:'body:after{content:}'}"}"

CSS nie może rozwiązać zbyt wielu pytań ...

tsh
źródło
Wydaje się, że body:afterdziała również w niektórych implementacjach?
Shieru Asakoto
@ShieruAsakoto Masz rację. :afterjest dostępny w większości przeglądarek z powodu kompatybilności wstecznej
tsh
@Shaggy Ale trudno jest zdefiniować, jak działa „zawijanie kodu źródłowego cudzysłowami”, jeśli zarówno HTML, jak i CSS.
tsh
@tsh W porządku - nie podałem w regulaminie wielu plików, ponieważ nie spodziewałem się tak wyjątkowej odpowiedzi!
Geza Kerecsenyi
10

HQ9 + [patrz uwagi poniżej] , 1016 bajtów

"Witaj świecie""""""""""""""""""""""""""""""""""""""""""""""" „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „„ ”„ „” „„ ”„ ”„ „” „” „” „” „” „” „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „” „„ ”„ „” „” „” „”„” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „” „„ ”„ „” „” „” „”„” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „” „„ ”„ „” „” „” „”„” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „” „„ ”„ „” „” „” „”„” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „” „„ ”„ „” „” „” „”„” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „” „” „” „„ ”„ „” „„ ”„ ”„ ”„ ”„ „” „„ ”„ „” „” „” „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „” „„ ”„ „” „” „” „”„” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „„ ”„ „” „„ ”„ ”„ „” „” „” „” „” „” „” „„ ”„ ”„ „” „” „„ ”„ „” „” „” „„ ”„ „” „„ ”„ ”„ „” „” „” „” „” „” """"""""""""""""""""""""""""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """""""""""""""""""""""""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """""""""""""""""""""""""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """"""""""""""""""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """"""""""""""""""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” „” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """"""""""""""""""""""""""""""""""""""Witaj świecie„” „” „” „” „„ ”„ ”„ ”„ „” „” „” „„ ”„ „” „„ ”„ „” """"""""""""""""""""""""""""""""""""""Witaj świecie"""""""""""""""""""""""""""""""""""Witaj świecie"""""""""""""""""""""""""""""""""""Witaj świecie

Użyj implementacji na https://esolangs.org/w/index.php?title=HQ9%2B&oldid=59995 i skompiluj interpreter z MinGW GCC 5.3.0 w systemie Windows. Nie jestem pewien, czy działa z inną wersją kompilatora, ponieważ do zakończenia programu wymagane jest niezdefiniowane zachowanie C. Bufor ma długość 1000 bajtów. I kod źródłowy większy niż 1000 bajtów załatwia sprawę. Nie jestem pewien, jak to się stało.

tsh
źródło
7
Być może jest to najdłuższa odpowiedź HQ9 + na tej stronie. (?)
tsh
1
„nieokreślone zachowanie C jest wymagane do zakończenia programu” Niezdefiniowane zachowanie jest niezdefiniowane : może zrobić wszystko.
Solomon Ucko
Zgodnie ze stroną 4 normy C18 : „Możliwe niezdefiniowane zachowanie obejmuje całkowicie ignorowanie sytuacji z nieprzewidzianymi wynikami, zachowanie podczas tłumaczenia lub wykonywania programu w udokumentowany sposób charakterystyczny dla środowiska (z wydaniem komunikatu diagnostycznego lub bez niego ), aby zakończyć tłumaczenie lub wykonanie (z wydaniem komunikatu diagnostycznego). ”
Solomon Ucko
@ SolomonUcko Ale definiujemy język przez jego kompilator / tłumacz na tej stronie. Odpowiedź jest w porządku, o ile przynajmniej jeden kompilator / tłumacz może uzyskać poprawny wynik.
tsh
9

05AB1E , 4 bajty

"A"§

Wyjścia konkatenowane bez separatora.

Wypróbuj online lub wypróbuj online z otaczającymi cytatami .

Wyjaśnienie:

        # Program without surrounding quotes will output string "A"
"A"     # Push "A" to the stack
   §    # Cast it to a string
        # (output the top of the stack implicitly as result)

        # Program with surrounding quotes will output string "§"
""      # Push an empty string to the stack
  A     # Push the alphabet to the stack: "abcdefghijklmnopqrstuvwxyz"
   "§"  # Push "§" to the stack
        # (output the top of the stack implicitly as result)
Kevin Cruijssen
źródło
Niestety narusza to zasadę nr 2. Chociaż w kodzie może być kilka pustych cudzysłowów, musi istnieć co najmniej jeden niepusty w postaci otoczonej i niezaokrąglonej.
Geza Kerecsenyi
@GezaKerecsenyi Ups, przeczytaj część „ zarówno w formie cytowanej, jak i niecytowanej ”. Powinien zostać teraz naprawiony.
Kevin Cruijssen
6

Japt , 4 bajty

"P"s

Wypróbuj to bez cudzysłowu lub cytowania

Pjest zmienną Japt dla pustego łańcucha, a smetoda wycina łańcuch - bez żadnych argumentów nic nie robi.


Lub jeszcze trochę mniej trywialne:

"+"u

Wypróbuj to bez cudzysłowu lub cytowania

Pierwszy zawiera duże litery, +a drugi dołącza udo pustego ciągu.

Kudłaty
źródło
3
Zauważ, że 4 jest minimalnym wynikiem dla tego pytania, ponieważ mniej narusza ograniczenia.
Jo King
5

C # (interaktywny kompilator Visual C #) , 113 112 107 70 64 bajtów

Write(".f();static void f(this string s){Write(s+')'+';');}//");

Zaoszczędzono 5 bajtów dzięki @negative seven

Nie cytowany i cytowany

Po chwili zdałem sobie sprawę, że moje rozwiązanie jest zbyt skomplikowane. Najnowszy program pokazany tutaj po prostu ukrywa resztę programu w komentarzu, aby uniknąć błędów, gdy jest zawinięty w cudzysłów.

Po zapakowaniu w cudzysłów Write(jest przekazywany do metody rozszerzenia, która drukuje go wraz z );.

Wcielenie ignorancji
źródło
Split()-> Trim()i var a->_
negatywne siedem
1
@negativeseven Dzięki, nigdy bym nie pomyślał o użyciu odrzucenia!
Embodiment of Ignorance
1
@negativeseven Właściwie moje rozwiązanie nie musiało być nawet tak skomplikowane, spójrz na moją najnowszą edycję
Embodiment of Ignorance
64 bajty przy użyciu metody rozszerzenia. Dość zaskoczony, że tak dobrze się spisało!
negatywne siedem
1
@negativeseven Thanks! I podsunąłeś mi pomysł na drugą część wyzwania: uchwyciłem zewnętrzną część zmiennej, a następnie użyłem Removei Insertna niej, teraz mogę po prostu użyć metody rozszerzenia!
Embodiment of Ignorance
4

Perl 6 , 11 bajtów

say ".say~"

Wypróbuj online!

Drukuje .say~z końcowym znakiem nowej linii. Wydaje się to zbyt łatwe. Czy coś brakuje?

Po zapakowaniu w cudzysłów tworzy sayspację i znak nowej linii.

Jo King
źródło
2
Nie wydaje mi się Po prostu p6, powiedzmy (ha) powiedz $ foo i $ foo.say, co znacznie ułatwia.
user0721090601
4

Foo , 4 bajty

"P"s

Wypróbuj online! Działa również w Japt.

5 bajtów (UTF-8)

"A"§

Wypróbuj online! Działa również w 05AB1E.

9 bajtów

"!""$;"$;

Wypróbuj online! Działa także w Runicznych Zaklęciach.

11 bajtów

say ".say~"

Wypróbuj online! Działa również w Perlu 6.

20 bajtów

print";print'print'"

Wypróbuj online! Działa również w Python 2.

69 bajtów

body::after{content:"{}body::after{content:'body::after{content:}'}"}

Wypróbuj online! Działa również w CSS.

Hmm ... Foo to bardzo elastyczny język.

jimmy23013
źródło
Hmm ... Foo jest językiem , który można bardzo łatwo dostosować. ” Dla każdego, kto nie zna Foo: wszystko w podwójnych cudzysłowach jest wyprowadzane, a wszystko inne (z wyjątkiem kilku innych wbudowanych znaków) nie działa. „ Idealny język do pracy ” to mało powiedziane. ;)
Kevin Cruijssen
2
Więc, po prostu, oderwasz każde inne rozwiązanie tego wyzwania ?!
Kudłaty
@Shaggy Językiem jest Foo. Prawie wszystko z co najmniej parą cudzysłowów i oczekiwanymi niepustymi danymi wyjściowymi działa w Foo w tym wyzwaniu. Więc "a"b 1"2"działa również w Foo. Jedyną odpowiedzią w tym wyzwaniu, która nie jest jak dotąd poliglotą Foo, jest w HQ9 +, ponieważ interpreter Foo ma również problem przepełnienia.
jimmy23013
4

> <> , 18 9 bajtów

"|o<"r>o|

-9 bajtów dzięki Jo King

Wypróbuj online! ( cytowany )

Wyjaśnienie

"|o<"r>o|
"|o<"     Pushes the quoted characters onto the stack
     r    Reverses the stack
      >o| Outputs all characters on stack & errors
""|o<"r>o|"
""          No-op
  |         Reverses the IP direction
     "r>o|" Pushes the quoted characters onto the stack (backwards)
  |o<       Outputs all characters on stack & errors
tjjfvi
źródło
5
Witamy w Code Golf!
Stephen
@Stephen Thanks!
tjjfvi
2

Runiczne Zaklęcia , 9 bajtów

"!""$;"$;

Wypróbuj online! i""!""$;"$;"

Od Kevina Cruijssena, który zasadniczo naprawił moją pierwszą próbę, wykorzystując to, co zrobiłem w drugiej.

Schodząc w dół „fungoidy nigdy nie dorównywały cytatom„ gięcie reguł ”jest coś w tym, co nie powinno być OK”, wspomniałem w swoim własnym komentarzu:

7 bajtów

0".""$;

Wypróbuj online! i"0".""$;"

W normalnych okolicznościach program ten wykonuje się jako 0".""$;0".""$;wypychanie liczby całkowitej 0, następnie ciąg ., konkatenuje $;0, NOP, łączy pusty ciąg, drukuje górę stosu (ciąg .$;0) i kończy. Zawijanie go w cudzysłów powoduje, że "0".""$;"popycha ciąg 0, NOP, konkatenuje pusty ciąg, drukuje górę stosu i kończy (renderując poprzednio niezadrukowaną liczbę całkowitą 0w postaci ciągu). Ostatni "pozostaje niewykonany (i nie jest częścią oryginału programu).

Grzyby nie mają literałów łańcuchowych, mają polecenie, które przełącza tryb „czytaj własne źródło jako łańcuch”, a pewna forma „wskaźnika instrukcji osiągnęła granicę źródłową” (zwykle zawijanie krawędzi), więc ten sam kod źródłowy -positional-byte działa zarówno jako instrukcja „łańcucha początkowego”, jak i „łańcucha końcowego”, tworząc literał ciągu całego wiersza / kolumny (z wyłączeniem "samego).

Draco18s
źródło
Super szybka odpowiedź! Zastanawiam się tylko, czy źle zrozumiałem twoje przesłanie, ale dla mnie nie drukuje to $;na końcu w cytowanej wersji.
Geza Kerecsenyi
Uświadomiłem sobie, że po ponownym przeczytaniu próbuję się zorientować, czy runiczny może kiedykolwiek wykonać ten kawałek. Zaczynam teraz sprawdzać „niesparowane” cytaty; np. "$;i ""$;"(Runiczne cytaty łączą się w pary).
Draco18s,
@GezaKerecsenyi Daj mi znać, jeśli mój zaktualizowany program narusza jakiekolwiek reguły.
Draco18s
Umm .. Jak to jest ważne? Twój program bez danych wyjściowych z cudzysłowami !.(co jest poprawne), ale czy Twój program nie powinien generować cudzysłowów 0$;? PS: W ogóle nie znam Zaklęć Runicznych, ale potencjalna poprawka oparta na twoim obecnym układzie, która moim zdaniem jest poprawna, byłaby 0"!""$;"$;(które wyjścia!$; są takie, jakie są, lub wyjścia,0$; jeśli są otoczone cudzysłowami). EDYCJA: Właściwie myślę, że możesz upuścić 0wyjście !$;i $;.
Kevin Cruijssen
1
@KevinCruijssen $to „print top of stack” i ;kończy się. Ale w zasadzie masz prawidłową odpowiedź.
Draco18s
0

Japt , 4 bajty

"P"u

Bez cudzysłowu konwertuje ciąg Pna wielkie litery. Cytowany, drukujeu .

Spróbuj

Japt , 4 bajty

"P"w

Bez cudzysłowu odwraca ciąg P. Cytowany, drukujew .

Spróbuj

Wcielenie ignorancji
źródło
Ahem!
Kudłaty
@Shaggy Nasze rozwiązania są nieco inne, istnieje wiele różnych rozwiązań tego wyzwania
Embodiment of Ignorance
Użyj Qzamiast P, to więcej meta! ;)
Kudłaty
0

R, 16 bajtów

 ";print(";");" 

Zauważ, że powyższy kod nie jest zawinięty w dodatkowe znaki cudzysłowu i ma zarówno spacje początkowe, jak i końcowe.

Wypróbuj (wersja bez opakowania)

James Otto
źródło
Możesz dodać notatkę, że połączony program jest wersją nienapakowaną.
Jonathan Frech
Dodałbym też notatkę o wiodących i końcowych spacjach. Trudno zauważyć inaczej.
mbomb007
Edytowane, dziękuję za sugestie!
James Otto
0

AppleScript, 9 bajtów

return"&"

Wyjaśnił:

return"&"    -- returns "&"

Zacytowany:

"return"&""  -- implied return of the string "return" concatenated with ""
kamienny pajęczak
źródło