Lustro quine (lub boli mnie głowa)


32

Czytałem Wydrukuj kod wstecz - quine wstecz I pomyślałem, że może to być bardziej interesujące, jeśli twój kod wstecz jest również wykonywalny . To wyzwanie będzie miało wszystkie zasady i wymagania drugiego, ale musi również być poprawnym źródłem po odwróceniu (w tym samym lub innym języku i nadal drukować swoje źródło wstecz.

Obowiązują wszystkie zasady i punktacja z odwrotnego wyzwania quine, więc wszystkie odpowiedzi na to pytanie odpowiedzą na to jedno (ale też nie punktują).

Edytować:

Na żądanie wszystkie reguły zostały skopiowane tutaj.

Zasady:

  • napisz program p, który po uruchomieniu tworzy wynik p ', gdzie p' jest p odwrotnie, a p 'po wykonaniu tworzy p.
  • Brak korzystania z innych plików (np. reverse.txt)
  • Minimalna długość kodu to dwa znaki.
  • Twój program nie może być palindromem.

Punktacja:

  • +50, jeśli używasz ściągania danych z Internetu.
  • +25, jeśli czytasz swój własny kod źródłowy.
  • +1 punkt za postać.
  • Najniższy wynik wygrywa.

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
Andrew Larsson,

Mówię tylko, że będziesz w stanie wykonać dane wyjściowe wykonując dane wyjściowe wykonując dane wyjściowe [...] wykonując dane wyjściowe p (tak samo jak każda kolejna próba z wyjątkiem poprzedniej).
Andrew Larsson,

@AndrewLarsson Rzeczywiście, chociaż dowód koncepcji, którą buduję p, będzie napisany w c i p 'w perlu.
hildred

Och, byłoby fajnie!
Andrew Larsson,

1
Tak, widziałem to za późno. Nie duplikat.
Johannes Kuhn

Odpowiedzi:


22

GolfScript, 46 znaków

0{`".~#"+.-1%+\.!@@}.~##~.}@@!.\+%1-.+"#~."`{1

To brzydkie, ale działa. Dane wyjściowe są równe odwróconemu kodowi i są również poprawnym programem GolfScript, który ponownie wyświetla oryginalny kod.

OK, pozwól mi wyjaśnić, jak to zbudowałem. Najpierw zacząłem od quinu {".~"}.~i zmodyfikowałem go, tak jak w tej odpowiedzi, aby się odwrócić. Aby wynik był sam w sobie wykonywalną wersją, stworzyłem kopię kodu przed jego odwróceniem i umieściłem #na końcu kodu, dzięki czemu odwrócona wersja na końcu stała się tylko komentarzem. W ten sposób otrzymujemy palindromiczny quine:

{`".~#"+.-1%}.~##~.}%1-.+"#~."`{

Jednak zgodnie z regułami palindromy nie są dozwolone, więc musiałem jakoś złamać symetrię. Pomyślałem najprostszym sposobem byłoby obejmują 0(co samo w sobie jest Quine w GolfScript) w kodzie i przerzucić go 1z !po utworzeniu odwróconej kopii. Większość pozostałej złożoności to po prostu brzydka manipulacja stosami, aby uzyskać wszystko we właściwej kolejności.


Czy jest również odwrócony, czy jest to inny język?
hildred

Tak, to GolfScript na dwa sposoby. Rzeczywiście, z wyjątkiem 0i 1na początku i na końcu, reszta kodu jest palindromem.
Ilmari Karonen,

9
Łał. Okej, nie czuję się już wystarczająco mądry na to SE :(
Cruncher

21

Perl i C 6478 1955

#!/usr/bin/perl -i//
$_=<<'rahc';eval $_; #//
print scalar reverse "#!/usr/bin/perl -i//\n\$_=<<'rahc';eval \$_; #//\n${_}rahc\n" #//
__END__
__END__ enifed#
};)"{ = ][cn\rahcn\n\"(p
};)'n\'( rahctup) 1 == 21%b ( fi
;)d(p;)]1-b[c,",d%",)d(foezis,d( ftnirpns{)b--;b;)c(foezis=b( rof
;)c(p;]9[d rahc;b tni{)(niam diov
}};)]1-b[c(rahctup )]1-b[c(fi{)b--;b;)c(nelrts=b(rof;b tni{)c*rahc(p diov
>h.gnirts< edulcni#
>h.oidts< edulcni#
;}
,0
,53,33,74,711,511,411,74,89,501,011,74,211
,101,411,801,23,54,501,74,74,01,63,59,16
,06,06,93,411,79,401,99,93,95,101,811,79
,801,23,63,59,95,23,53,74,74,01,211,411
,501,011,611,23,511,99,79,801,79,411,23,411
,101,811,101,411,511,101,23,43,53,33,74,711
,511,411,74,89,501,011,74,211,101,411,801,23
,54,501,74,74,29,011,29,63,59,16,06,06
,93,411,79,401,99,93,95,101,811,79,801,23
,29,63,59,95,23,53,74,74,29,011,63,321
,59,521,411,79,401,99,29,011,43,23,53,74
,74,01,59,59,96,87,86,59,59,01,59,59
,96,87,86,59,59,23,101,011,501,201,101,001
,53,01,521,95,14,43,321,23,16,23,39,19
,99,011,29,411,79,401,99,011,29,011,29,43
,04,211,01,521,95,14,93,011,29,93,04,23
,411,79,401,99,611,711,211,14,23,94,23,16
,16,23,05,94,73,89,23,04,23,201,501,01
,95,14,001,04,211,95,14,39,94,54,89,19
,99,44,43,44,001,73,43,44,14,001,04,201
,111,101,221,501,511,44,001,04,23,201,611,011
,501,411,211,011,511,321,14,89,54,54,95,89
,95,14,99,04,201,111,101,221,501,511,16,89
,04,23,411,111,201,01,95,14,99,04,211,95
,39,75,19,001,23,411,79,401,99,95,89,23
,611,011,501,321,14,04,011,501,79,901,23,001
,501,111,811,01,521,521,95,14,39,94,54,89
,19,99,04,411,79,401,99,611,711,211,23,14
,39,94,54,89,19,99,04,201,501,321,14,89
,54,54,95,89,95,14,99,04,011,101,801,411
,611,511,16,89,04,411,111,201,95,89,23,611
,011,501,321,14,99,24,411,79,401,99,04,211
,23,001,501,111,811,01,26,401,64,301,011,501
,411,611,511,06,23,101,001,711,801,99,011,501
,53,01,26,401,64,111,501,001,611,511,06,23
,101,001,711,801,99,011,501,53,01,95,521,01
{ = ][c
rahc

Edytować:

Krótkie wyjaśnienie: z perla dwie interesujące linie to druga i trzecia. Drugi wiersz zawiera dwie instrukcje, z których pierwsza odczytuje resztę dokumentu w ciągu. Drugi sprawdza ciąg. Trzecia linia drukuje wszystko do tyłu. wszystko inne zostaje zignorowane. od strony c masz tablicę, która ma program jako ciąg, który jest drukowany jako tablica i ciąg, a reszta to komentarz.


1
wat. : O Moja głowa eksplodowała. Ale liczę 6536 znaków w tym ...
Klamka

Co ... jak ... 0_0
Facet z

@DoorknobofSnow Policzyłem niewłaściwą wersję. Ale tutaj jest krótsza wersja.
hildred

To jest niesamowite! Myślę, że Haskell / C może być kolejną wykonalną kombinacją.
theonlygusti

@ thehelylygusti, jeśli go opublikujesz i będę mógł go skompilować, będę go głosować.
Hildred

8

Ruby 145

DATA.read.tap {| a | wstawia a.reverse, a.tr ("\ x79 \ x59", "\ x59 \ x79")}
: y
__KONIEC__
__DNE__
Y:
}) „97x \ 95x \”, „95x \ 97x \” (rt.a, esrever.a stup | a | {pat.daer.ATAD

Główna idea jest prosta: po prostu umieść pierwszą połowę kodu źródłowego wstecz, za __END__którą można odczytać za pomocą DATAruby. Następnie wystarczy wydrukować odwrotną stronę tych danych, a następnie wydrukować dane i odzyskać oryginalny kod źródłowy

Problem polega na tym, że staje się to palindromem (zauważ, że pierwsza linia potrzebuje linii końcowej), więc musimy przełamać symetrię. Właśnie dodałem symbol :ydo kodu i trochę kodu, który przekształci ten symbol między małe i wielkie litery między uruchomieniami, tym samym powracając do pierwotnego stanu po dwóch uruchomieniach.

Test pierwszy: można je wykonać

$ ruby rq2.rb > rq2t.rb
$ ruby rq2t.rb > rq2tt.rb

Test drugi: wynik dwóch przebiegów zwróci oryginalne źródło

$ diff rq2.rb rq2tt.rb
$

Test trzeci: kod nie jest palindromem (środkowy bieg jest inny)

$ diff rq2.rb rq2t.rb
3c3
< :y
---
> :Y
6c6
< Y:
---
> y:

4

> <>, 21 19 bajtów

'rd3*70.r l?!;o90.<

Wypróbuj tutaj!

Dla wygody korzysta z interpretera *> <>, ale jest to poprawny kod> <>.


Jeśli błąd jest dozwolony, można to zrobić w 16 bajtach:

'd3*}70.!r  !|o|

Wypróbuj tutaj!


@JoKing dziękuję! Była siódma rano i byłam zbyt zmęczona, żeby to złożyć. Zmienię to za kilka godzin.
Discordian

4

Gol> <> , 11 bajtów

":5-}H}+5:'

Odcięty cały bajt! prawie jest palindromem, ale technicznie nie jest to spowodowane „+” i „-”, haha!

Wypróbuj online!

Dwa poniżej nie działają, a przynajmniej nie spełniają specyfikacji wyzwania, ale powyższy kod działa.

nieco młodsza wersja, 12 bajtów

"r2ssrH}+5:'

Grał w bajt po prostu, używając podwójnego cudzysłowu i zwiększając go o 5! A ta nowa wersja mniej przypomina palindrom.

Wypróbuj online!

starsza wersja, 13 bajtów

"r2ssrHrss7r'

Wystąpił problem z poprzednim, który zauważył JoKing, dziękuję za to, teraz działa, ale przy cenie 4 dodatkowych bajtów ...

Wypróbuj online!


1

Pomoc, WarDoq! (27 bajtów)

Dodano 25 bajtów z powodu odczytu kodu źródłowego.

<space>q

Jak to działa:
<space>- komentarz kończący się znakiem spacji
q- drukuj kod źródłowy odwrócony (q „spacja”)

Wywrócony:

q<space>

Jak to działa:
q- drukuj kod źródłowy odwrócony (na razie q)
<space>- komentarz kończący się na spacji i dodaj znak na początku polecenia q (tworząc „spację” q)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.