Wyzwanie: Zaimplementuj ROT-47 w kodzie, który działa zarówno jako on sam, jak i jako jego wersja ROT-47.
Punktacja:
Twój wynik jest obliczany jako odsetek wykorzystanych bajtów ROT-47 ogółem obu wersji programu podzielony przez całkowitą liczbę bajtów (wszystkich znaków) obu wersji .
Używany, ROT-47 kwalifikuje bajt jest dowolny znak, który będzie przekształcony przez ROT-47 szyfru, który nie jest częścią komentarzu lub ignorowane przez kompilator / interpreter. Na przykład, dowolny znak w programie typu „pieprzenie mózgu”, który nie +-<>[],.
jest uważany za używany bajt, a jakikolwiek znak w programie C, w tym i po nim //
lub wewnątrz, /* */
nie jest uważany za używany bajt. Wszystkie specjalne symbole w APL nie są uważane za używane, podobnie jak wszystkie znaki w programie Whitespace (przepraszam).
Więzi zostaną zerwane przez program z największą popularnością. Jeśli nadal jest remis, wygrywa najkrótszy program.
Przykład punktacji:
C: 62/64 = 96,875%
Zauważ, że w tym programie jest miejsce. Oczywiście ten program nie jest prawidłowym wpisem, ponieważ nawet się nie kompiluje, ale chciałem pokazać, jak działa ocenianie.
main(){printf("Hello World!");}
źródło
>2:?WXLAC:?E7WQw6==@ (@C=5PQXjN
kompiluje?Odpowiedzi:
Rubinowy, 100% (74 znaków)
Wejście na STDIN, wyjście na STDOUT.
Druga linia to pierwsza linia ROT-47'd. Dlatego gdy ROT-47ing całego programu, staje się:
Moja strategia tutaj opiera się na tym, że:
V
jest'
kiedy ROT-47'dj
jest;
kiedy ROT-47'dDlatego
Vj=...Vj;
zamienia się w';l...';
, co w zasadzie jest zakazemVj=...Vj;
można obsługiwać dowolny kod tak, jak można to zrobićVj=0;{INSERT ANY CODE};Vj;
, i stanie się to,'...';
gdy ROT-47'd. Musisz tylko uważać, aby nie używaćV
tego kodu, ponieważ spowoduje to jego uszkodzenie.Podobną logikę można zastosować odwrotnie, aby uzyskać drugą połowę (
jV
zamiastVj
)źródło
C - 54,6%
Po przetłumaczeniu ROT-47 otrzymujemy
Oba programy się kompilują, a ROT-47-tłumaczy pierwszy argument:
źródło
GolfScript, 120/120 bajtów = 100%
lub w ROT-47:
Brak komentarzy lub nadużyć ze względu na ciąg Niezdefiniowane polecenie
LiUUbamUUZadckYLfZfZhcTbbZNYNT
(które równa się reszcie kodu w ROT-47) nie działa, ale nadal jest wykonywane przez interpreter, więc uważam, że liczy się jako używane.To było w rzeczywistości dość łatwe wyzwanie w GolfScript. Główną trudnością było uniknięcie cyfry
1
, która jest odwzorowywana przez ROT-47 na polecenie GolfScript`
. Polecenia.
,-
,,
,\
,[
,/
,]
a^
także należało unikać, ale to było dość łatwo w tym przypadku, ponieważ zadanie nie wymagało budowy tablicy.Premia:
Oto quine z okresu 2 w języku GolfScript (tj. Program, który drukuje drugi program, który drukuje ponownie pierwszy program), w którym oba programy są wzajemnie transformacjami ROT-47:
Ten program sam wysyła kodowanie ROT-47, uzyskując inny program GolfScript:
który z kolei sam również wysyła kodowanie ROT-47, co ponownie daje poprzedni program. Tak więc ten program jest również obrotowym quine .
źródło
A
w pieprzeniu mózgu liczyłby się licznik, ale nie mianownik. Czy to to samo, czy inne?LiUUbamUUZadckYLfZfZhcTbbZNYNT
jest poprawnym identyfikatorem w GolfScript i zostanie wykonany jako polecenie. Nie jest to jednak jedna z wbudowanych komend ani program nie przypisuje znaczenia, więc domyślnie po prostu nic nie robi.python, 96,1% (?)
Zgodnie z Twoją definicją ciągi liczą się jako użyty kod?
źródło