To jest policjant. Robber post jest tutaj .
Twoim zadaniem jest, aby wejście całkowitą N i wysyłać Pn cyfrowy w sekwencji OEIS A002942 .
Sekwencja składa się z kwadratowych liczb zapisanych wstecz:
1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...
Zauważ, że zera wiodące są usuwane ( 100 zmienia się na 1 , a nie 001 ). Łączenie tego w ciąg (lub jedną długą liczbę daje):
1496152639446181121441
Wyrzucisz N - tą cyfrę w tym ciągu / numerze. Możesz wybrać N jako 0 lub 1 indeks (proszę podać, który wybierzesz).
Przypadki testowe (indeksowane 1):
N = 1, ==> 1
N = 5, ==> 1
N = 17, ==> 1 <- Important test case! It's not zero.
N = 20, ==> 4
N = 78, ==> 0
N = 100, ==> 4
Twój kod powinien działać dla liczb do N = 2 ^ 15 (chyba że twój język domyślnie nie obsługuje 32-bitowych liczb całkowitych, w którym to przypadku N może być niższy).
Gliny:
Musisz napisać dwie funkcje / programy w tym samym języku, które robią to samo. Musisz opublikować jedną z funkcji / programów, a także odległość Levenshteina między dwiema napisanymi funkcjami / programami. Odległość Levenshteina mierzona jest w znakach (więc dodanie dwubajtowego znaku da LD = 1).
Ujawniony kod nie może być dłuższy niż oryginalne rozwiązanie (ale może mieć ten sam rozmiar). Rabusie spróbują napisać kod z dokładną podaną odległością Levenshteina (może się różnić od nieujawnionego kodu, o ile działa).
Zwycięzcą zostanie zgłoszenie bez krakowania, które ma najniższą odległość Levenshteina.
Tutaj możesz sprawdzić odległość Levenshtein!
Jeśli Twoje zgłoszenie pozostanie bez krakowania przez 7 dni, możesz ujawnić alternatywny kod, który napisałeś i oznaczyć go jako bezpieczny.
źródło
Odpowiedzi:
Haskell , LD = 13, pęknięty
Wypróbuj online!
Dokładnie sprawdziłem, czy wiodące zera są przycięte;)
Wyjaśnienie:
źródło
cQuents 0 , LD = 1, Cracked
Wypróbuj online!
Myślałem, że to nie działa dla zer wiodących, ale tak naprawdę działa - funkcja odwrotna w cQuents jest zakodowana jako
int(reversed(str(n)))
.Wyjaśnienie
źródło
JavaScript (ES6), LD = 103 ( pęknięty )
Korzystanie z tak dużego dystansu Levenshteina nie jest prawdopodobnie najlepszą strategią, ale i tak spróbujmy.
Przypadki testowe
Pokaż fragment kodu
Zamierzone rozwiązanie
Zakodowana część:
źródło
+
zapewnia, że odwrócony ciąg jest wymuszany na liczbę.Python 2, 104 bajty, LD = 21 Niepoprawny AND Cracked
PS Czy dozwolona jest nieograniczona ilość białych znaków i komentarzy? Jeśli tak, nie będzie to trudne do złamania.źródło
\n
s (około 50)6502 kod maszynowy (C64), LD = 1 ( pęknięty )
Demo online , użycie:
sys49152,n
gdzien
jest wejście indeksowane 0.W ostatnim przypadku testowym potrzebujesz trochę cierpliwości, ponieważ ta kiepska maszyna musi wykonać miliony przesunięć bitowych i dodatków, aby przedstawić ci wynik;)
Językiem jest tutaj kod maszynowy, więc LD jest mierzone w tym formacie - niemniej jednak, aby dać coś na początek, oto program w
ca65
źródle asemblera:... a oto skrypt linkera dla
ld65
:źródło
Perl 5 , 59 + 1 (
-a
) = 60 bajtów, LD = 55Wypróbuj online!
źródło
Java 8, (177 bajtów) LD = 92 ( Pęknięty przez @Arnauld )
( Użyłem tego internetowego kalkulatora LD ).
Prawdopodobnie nie jest to zbyt trudne, jeśli po prostu grasz w golfa. :)
Wyjaśnienie:
Wypróbuj tutaj.
źródło
n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}
( 118 bajtów, 92 LD )Oktawa , LD = 63, pęknięty
Wypróbuj online!
Przesłanie to 77 bajtów, więc musisz trochę podstawić =)
źródło
Kod maszynowy 6502 (C64), LD = 1, bezpieczny
Demo online , użycie:
sys49152,n
gdzien
jest wejście indeksowane 0.Zamierzone rozwiązanie: (diff)
30
(Opcodebmi
) jest zastąpiony przez90
(opcodebcc
). Odpowiada to następującej części źródła asemblera:Działa, ponieważ ten kod sprawdza, czy liczba jest mniejsza niż 8.
cmp
Instrukcja wykonuje odejmowanie, ustawiając odpowiednio flagi. Tak więc, jeśli akumulator ma liczbę mniejszą niż 8, to przepełnia się, usuwając flagę carry, dlatego rzeczywiście jest odpowiednia instrukcja rozgałęzieniabcc
.bmi
(rozgałęzienie, gdy jest ujemne), tak jak w oryginalnym kodzie, również tutaj działa, ponieważ porównywane liczby są wystarczająco małe, więc wynik odejmowania kończy się w ujemnym zakresie ($80-$ff
), gdy wystąpi niedopełnienie.Demo online
To jest ulepszona / skompaktowana wersja mojego poprzedniego zgłoszenia . Oprócz kilku innych sztuczek mających na celu zmniejszenie rozmiaru, usuwa niepotrzebny kod, który był zawarty i pozwalał na rodzaj „prostego” *) pęknięcia. Podsumowując, rozmiar jest zmniejszony o 16 bajtów. Tym razem znalezienie odpowiedniego programu z LD 1 powinno być nieco trudniejsze :)
*) prawdopodobnie nadal sporo pracy do znalezienia, oczywiście :)
Ponownie, oto jest
ca65
źródło asemblera, które pomaga w rozpoczęciu pracy z kodem:... a oto skrypt linkera dla
ld65
:źródło
Lua: LD = 1, pęknięty
Żadnych fantazyjnych sztuczek tutaj :)
źródło
Mathematica, LD = 43 pęknięty
Wypróbuj online!
źródło
PHP, LD = 35 ( pęknięty )
1-indeksowany
Wypróbuj online!
źródło
Python 3: LD = 9 | Pęknięty
Ten powinien być dość (bardzo) łatwy do zdobycia: P
źródło
.lstrip("0")
część można po prostu skopiować.C ++, LD = 159
Indeksowane 0, wejście
argv[1]
, skompilowane na GCC 7.2.0źródło
Groovy , 61 bajtów (LD = 23)
Wypróbuj online!
źródło