Chciałem oszukać przyjaciela, dając mu quine, która prawie działała, ale stała się niechlujna i niechlujna.
Utwórz program, który po uruchomieniu wyświetli program, ale bez jednego znaku. Można dodać lub usunąć jeden znak lub oba (jeden znak się zmienia). Ale tylko jedna postać.
Twój wynik to (length of your program) / floor(sqrt(number of times the program almost quines))
(Gdzie / 0
jest nieskończoność)
number of times the program almost quines
to ile razy twój program działa, zmieniając tylko jeden znak na standardowym wyjściu. Twój program może nie akceptować danych wejściowych. Może również nie drukować programu, który już wydrukował.
Możesz też nie dodać charakteru, które zostały wcześniej dodane przed lub usunąć znak z tego samego indeksu. Na przykład, jeśli dodałeś 1
wcześniej, a dodajesz 1
ponownie, to tam number of times the program almost quines
zatrzymują się. Jeśli usuniesz pierwszy znak, nie możesz ponownie usunąć pierwszego znaku. Jeśli zmieniłeś trzeci znak na a 2
, nie możesz dodać 2
ani usunąć trzeciego znaku.
Odpowiedzi:
CJam, 0,000884
Tutaj oznacza niedrukowalny znak o kodzie 128. Wypróbuj online.
Pomysł
Podejście to dołącza wszystkie znaki LUW (oryginalna specyfikacja) z punktami kodowymi między U + 4000000 a U + 7FFFFFFF do początkowo pustego ciągu następującego po bloku kodu.
Wybieramy UTF-8 , który koduje każdy z tych znaków za pomocą 6-bajtowego ciągu w następujący sposób:
Zatem możemy zakodować n-ty znak w tym zakresie, obliczając jego 6 najmniej znaczących cyfr w podstawie 64 i dodając 252 do najbardziej znaczących i 128 do pozostałych.
Punktacja
Jest
2 ** 31 = 2,147,483,648
6 bajtów UTF-8 znaków, a długość oryginalnego kodu wynosi 39, więc wynik to39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806
.Jak to działa
źródło
CJam, 46 bajtów, 65504 dodanych, 65505 del, wynik 0,127424
Sprawdź to tutaj.
Podstawową postacią jest standardowy uogólniony quine CJam. Aby powiedzieć „prawie quine”,
e#
na końcu bloku quine znajduje się komentarz , w którym mogę swobodnie dodawać znaki bez wpływu na kod. Zauważ, że komentarz początkowo zawiera jedną spację.Program kontynuuje dodawanie znaków na początku komentarza, zaczynając od,
!
a następnie przechodząc w kolejności wartości ASCII. Kody znaków CJam zawijają się po 2 16, więc w pewnym momencie doda to bajt zerowy. Gdy to nastąpi, program zaczyna usuwać bajty z końca komentarza (tak, że pozycja usuniętego znaku jest zawsze inna), aż komentarz będzie pusty.źródło
CJam, 19 bajtów, dodanie 65536, 0 del, wynik 0,074219
Prostsze jest lepsze.
źródło