Einführung:
In einem Dokument, das ich als Kind zusammengestellt habe, sind viele verschiedene Chiffren gespeichert. Ich habe einige ausgewählt, die meiner Meinung nach am besten für Herausforderungen geeignet sind (nicht zu trivial und nicht zu schwierig), und sie in Herausforderungen umgewandelt. Die meisten von ihnen sind noch im Sandkasten und ich bin mir noch nicht sicher, ob ich sie alle oder nur einige veröffentlichen werde. Aber hier ist der erste von ihnen, der etwas anfängt von.
Eine Computer-Chiffre verschlüsselt den gegebenen Text in 'zufällige' Zeichengruppen einer gegebenen length . Wenn eine solche Gruppe eine Ziffer enthält, wird diese Ziffer verwendet, um das verschlüsselte Zeichen in eine eigene Gruppe einzuteilen. Wenn in der Gruppe keine Ziffer vorhanden ist, wird das erste Zeichen verwendet.
Angenommen, wir möchten den Text this is a computer ciphermit einer bestimmten Länge von verschlüsseln 5. Dies ist eine mögliche Ausgabe (Hinweis: Zahlen sind im folgenden Beispiel 1-indiziert):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Nehmen wir ein paar Gruppen als Beispiele, um zu erklären, wie die Gruppe entschlüsselt werden kann:
qu5dt: Diese Gruppe enthält eine Ziffer5der (1-indizierte) 5. Zeichen dieser Gruppe ist das Zeichen für den entschlüsselten Text verwendet wird , so:t.hprit: Keine Ziffern enthält diese Gruppe, so das erste Zeichen dieser Gruppe implizit für den entschlüsselten Text verwendet wird:h.osyw2: Diese Gruppe enthält eine Ziffer2, so dass die (1-indizierte) 2. Zeichen dieser Gruppe das Zeichen für den entschlüsselten Text verwendet wird:s.
Herausforderung:
Geben Sie bei einer bestimmten Ganzzahl lengthund Zeichenfolge word_to_enciphereinen Zufallsgenerator aus verschlüsselte Zeichenfolge wie oben beschrieben.
Sie haben nur die angegebenen chiffrieren lengthund word_to_encipher, so dass keine Notwendigkeit als auch eine Entschlüsselung Programm / Funktion zu erstellen. Ich könnte jedoch in Zukunft eine Teil-2-Herausforderung für die Entschlüsselung stellen.
Herausforderungsregeln:
- Sie können davon ausgehen, dass der
lengthWert im Bereich liegt[3,9]. - Sie können davon ausgehen, dass das
word_to_enciphernur Buchstaben enthält. - Sie können entweder Groß- oder Kleinbuchstaben verwenden (bitte geben Sie an, welche Sie in Ihrer Antwort verwendet haben).
- Ihre Ausgaben, jede Gruppe und die Positionen der Ziffern in einer Gruppe (falls vorhanden) sollten einheitlich zufällig sein . Alle zufälligen Buchstaben des Alphabets haben also die gleiche Wahrscheinlichkeit, vorzukommen. Die Position des verschlüsselten Buchstabens in jeder Gruppe hat die gleiche Wahrscheinlichkeit des Auftretens. und die Position der Ziffer hat die gleiche Chance aufzutreten (außer wenn es sich um das erste Zeichen handelt und keine Ziffer vorhanden ist; und es kann sich offensichtlich nicht an derselben Position wie das verschlüsselte Zeichen befinden).
- Sie können auch 0-indizierte Ziffern anstelle von 1-indizierten verwenden. Bitte geben Sie an, welche der beiden Antworten Sie verwendet haben.
- Die Ziffer
1(oder0wenn sie mit 0 indiziert ist) wird niemals in der Ausgabe vorhanden sein. Esb1ndhist also keine gültige Gruppe, um das Zeichen 'b' zu verschlüsseln. Jedochb4tbwgilt, wo die4chiffriert dieban der 4. (1-indizierte) Position und die anderen Zeichenb,t,wzufällig sind (die zufällig auch ein enthältb). Andere mögliche gültige Gruppen vonlength5 bis chiffrieren das Zeichen ‚b‘:abcd2,ab2de,babbk,hue5b, usw.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Input:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2, ab2de, babbkalle gleich? Ist das auch b1akkgültig?
b1akkwürde ich nein sagen. Wird es in der Herausforderungsbeschreibung bearbeiten, um zu verdeutlichen. Wenn das erste Zeichen das verschlüsselte ist, darf keine Ziffer vorhanden sein.
"a??"hat 676 mögliche Ergebnisse, aber "1a?", "?a1", "2?a", "?2a", hat only104 Ergebnisse. Wenn ich also versuche, aus all diesen 780 Ergebnissen ein Ergebnis auszuwählen, ist die Verteilung von "Position des verschlüsselten Buchstabens" 13: 1: 1, nicht 1: 1: 1. Und ich würde das als "einheitlich zufällig" betrachten.