Jest to prosta metoda szyfrowania, która wykorzystuje cyfry PI do kodowania wiadomości, metoda jest prosta:
Klucz jest tylko dodatnią liczbą całkowitą, która wskazuje, gdzie zaczyna się okno:
Biorąc pod uwagę ciąg do zaszyfrowania, zawierający tylko małe litery, bez spacji, bierzesz jego długość, a następnie znajdujesz N-tą cyfrę PI, a następnie przesuwasz każdą literę w prawo o kwotę wskazaną przez cyfrę.
Na przykład, jeśli klucz jest 2
i chcę zakodować house
, wybieram okno z 5 cyframi z drugiego: 14159
i wtedy staje się:
h -> i
o -> s
u -> v
s -> x
e -> n
a.- Twój program / funkcja / algorytm otrzyma dwa parametry, ciąg złożony tylko z małych liter bez spacji i klucz, który będzie tylko dodatnią liczbą całkowitą od 1 (1 odnosi się do 3) do 1000, co może być więcej lub mniej, ponieważ nie jestem pewien, ile czasu zajmuje obliczenie PI z tą dokładnością, ponieważ:
b. - Musisz samodzielnie obliczyć PI w kodzie, oto fajna strona do porównania z: Dzień Pi . Dane wejściowe nigdy nie powinny wymagać obliczenia PI poza cyfrą 1000, co oznacza, że długość (komunikat) + klawisz <= 1000.
Przez obliczanie Pi mam na myśli nie kodowanie go w kodzie (głupie jak na golfa kodu), ani używanie żadnej wbudowanej stałej w kodzie, ani żadnej tożsamości trygonometrycznej (2 * acos (0)), ani żadnych odnośników do stron internetowych.
c. - Wynikiem będzie tylko zaszyfrowany ciąg.
To pytanie do kodu golfowego, wygrywa krótszy kod!
Zwycięską odpowiedź przyjmuję 14 lipca 2014 r.
ArcCos(-1)
?Odpowiedzi:
CJam - 51
Przykładowe dane wejściowe:
Wynik:
Działa to dla (długość łańcucha) + klucz <= 2000, ale jest dość powolny dla interpretera online (wciąż szybki z interpreterem Java).
Oto wersja, która działa do 200 i możesz spróbować na http://cjam.aditsu.net/, nie czekając zbyt długo:
źródło
Python - 370
Ok, fajnie, w końcu udało mi się pracować z pi dzięki link1 i link2 .
Przykładowe dane wyjściowe:
i kolejny:
źródło
JavaScript - 167
173176Dzięki Michaelowi za sprytną reprezentację potęg 16.
Może to obliczyć PI do 16-tej cyfry.
Przypadek testowy:
źródło
m=1
im<<=4
zamiastm='0x1'
im+=0
? Oszczędza 3 bajty.Python -
321304288285Większość wersji gry w golfa jest łatwa do odczytania i zrozumienia. Ostatnia linia nie jest opisana poniżej:
EDYCJA 1: uprościła moją arytmetykę modułu.
EDYCJA 2: przebudowano formułę BBP.
źródło
Haskell - 265
267bajty (bez IO)p
jest golfową wersją algorytmu, którą można znaleźć na stronie http://rosettacode.org/wiki/Pi#Haskelle
jest funkcją kodowania:Nie zapętla się, jeśli indeks znajduje się poza małym alfabetem. Oznacza to, że niektóre inne znaki mogą poślizgnąć się w zakodowanym ciągu:
Niestety przesunięcie zajmuje więcej sekund niż
10 000
obliczenie wyniku. Na szczęście przy wielokrotnym użyciu tego samego przesunięcia cyfry należy obliczać tylko za pierwszym razem.Bonus - dekodowanie
Ponownie, jeśli testujemy
isvxn
:źródło
d 2 "isvsn"
powinno byćd 2 "isvxn"
CoffeeScript - 148 znaków / bajtów
Mój pierwszy w historii Code Golf
Niestety nie obsługuje owijania (więc az skończyłoby się interpunkcją)
Demo na CSSDeck
Dzwoni z:
źródło