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 cipher
mit 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 Ziffer5
der (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 length
und Zeichenfolge word_to_encipher
einen Zufallsgenerator aus verschlüsselte Zeichenfolge wie oben beschrieben.
Sie haben nur die angegebenen chiffrieren length
und 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
length
Wert im Bereich liegt[3,9]
. - Sie können davon ausgehen, dass das
word_to_encipher
nur 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
(oder0
wenn sie mit 0 indiziert ist) wird niemals in der Ausgabe vorhanden sein. Esb1ndh
ist also keine gültige Gruppe, um das Zeichen 'b' zu verschlüsseln. Jedochb4tbw
gilt, wo die4
chiffriert dieb
an der 4. (1-indizierte) Position und die anderen Zeichenb
,t
,w
zufällig sind (die zufällig auch ein enthältb
). Andere mögliche gültige Gruppen vonlength
5 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
, babbk
alle gleich? Ist das auch b1akk
gültig?
b1akk
wü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.