Dies ist eine einfache Verschlüsselungsmethode, bei der PI-Ziffern zum Verschlüsseln einer Nachricht verwendet werden. Die Methode ist einfach:
Der Schlüssel ist nur eine positive Ganzzahl, die angibt, wo das Fenster dann beginnt:
Wenn Sie eine zu verschlüsselnde Zeichenfolge angeben, die nur Kleinbuchstaben und keine Leerzeichen enthält, nehmen Sie deren Länge, suchen Sie die n-te Ziffer von PI und verschieben Sie dann jeden Buchstaben um den durch die Ziffer angegebenen Betrag nach rechts.
Wenn zum Beispiel der Schlüssel ist 2
und ich verschlüsseln möchte house
, nehme ich ein Fenster mit 5 Stellen von der zweiten: 14159
und dann wird es:
h -> i
o -> s
u -> v
s -> x
e -> n
a.- Ihr Programm / Ihre Funktion / Ihr Algorithmus erhält zwei Parameter, eine Zeichenfolge, die nur aus Kleinbuchstaben ohne Leerzeichen besteht, und den Schlüssel, der nur eine positive ganze Zahl zwischen 1 (1 bezieht sich auf 3) und 1000 ist, die mehr sein kann oder weniger, da ich nicht ganz sicher bin, wie lange es dauert, PI mit dieser Genauigkeit zu berechnen, weil:
b.- Sie müssen PI selbst in Ihrem Code berechnen. Hier ist eine ordentliche Webseite zum Vergleich mit: Pi Day . Bei der Eingabe sollte der PI niemals über die 1000-stellige Zahl hinaus berechnet werden, dh Länge (Nachricht) + Taste <= 1000.
Mit Berechnung von Pi meine ich, dass es nicht in Ihrem Code harcodiert wird (albern für einen Codegolf), noch dass eine in Ihren Code eingebettete Konstante oder eine trigonometrische Identität (2 * acos (0)) oder eine Webreferenz verwendet wird.
c.- Die Ausgabe ist nur die verschlüsselte Zeichenfolge.
Dies ist eine Code Golf Frage, kürzere Code gewinnt!
Ich werde die Gewinnerantwort am 14. Juli 2014 annehmen.
ArcCos(-1)
?Antworten:
CJam - 51
Beispiel Eingabe:
Ausgabe:
Dies funktioniert für (Zeichenkettenlänge) + key <= 2000, ist jedoch für den Online-Interpreter recht langsam (mit dem Java-Interpreter immer noch schnell).
Hier ist eine Version, die bis zu 200 unterstützt. Sie können sie unter http://cjam.aditsu.net/ ausprobieren, ohne zu lange zu warten:
quelle
Python - 370
Ok, schön, dank link1 und link2 ist es endlich soweit .
Beispielausgabe:
und ein anderer:
quelle
JavaScript - 167
173176Vielen Dank an Michael für die clevere Darstellung der Potenzen von 16.
Dies kann PI bis zur 16. Stelle berechnen.
Der Testfall:
quelle
m=1
undm<<=4
anstelle vonm='0x1'
undm+=0
? Spart 3 Bytes.Python -
321304288285Der Großteil der Golfversion ist leicht zu lesen und zu verstehen. Die letzte Zeile ist unten ungolfed:
EDIT # 1: vereinfacht meine Modularithmetik.
EDIT # 2: Die BBP-Formel wurde überarbeitet.
quelle
Haskell - 265
267Bytes (kein IO)p
ist eine Golf-Version des Algorithmus, die unter http://rosettacode.org/wiki/Pi#Haskell zu finden iste
ist die Kodierungsfunktion:Es wird keine Schleife ausgeführt, wenn sich ein Index außerhalb des Kleinbuchstaben befindet. Dies bedeutet, dass einige andere Zeichen in der codierten Zeichenfolge vorkommen können:
Leider dauert es bei größeren Offsets als
10 000
der Berechnung der Ausgabe einige Sekunden . Glücklicherweise müssen bei mehrfacher Verwendung desselben Offsets die Ziffern nur beim ersten Mal berechnet werden.Bonus - Decodierung
Nochmals, wenn wir testen mit
isvxn
:quelle
d 2 "isvsn"
sollte seind 2 "isvxn"
CoffeeScript - 148 Zeichen / Byte
Mein allererster Code Golf
Leider unterstützt es kein Wrapping (also würde az am Ende Interpunktion sein)
Demo auf CSSDeck
Angerufen mit:
quelle