Motivation
Bei dieser Herausforderung bestand Ihre Aufgabe darin, zwei Zeichenfolgen zu multiplizieren. Auf diese Weise können Sie natürlich die Quadratwurzel einer Zeichenfolge ziehen.
Wie funktioniert es?
Wenn Sie beispielsweise eine Zeichenfolge pub
angeben, müssen Sie zunächst den ASCII-Code für jedes Zeichen ermitteln:
"pub" -> [112, 117, 98]
Als nächstes ordnen Sie diese Codes dem Bereich zu, [0..94]
indem Sie 32
jeden Wert subtrahieren :
[112, 117, 98] -> [80, 85, 66]
Jetzt müssen Sie für jeden Wert sein Wurzelmodul finden 95
(z. B. 40*40 % 95 = 80
könnten Sie auch auswählen 55
):
[80, 85, 66] -> [40, 35, 16]
Und schließlich ordnen Sie es wieder dem Bereich zu [32..126]
und wandeln es wieder in eine Zeichenfolge um:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
In der Tat, "HC0" ⊗ "HC0" = "pub"
wie Sie mit einer Lösung aus der anderen Herausforderung hier überprüfen können .
Diejenigen, die mit modularer Arithmetik vertraut sind, haben wahrscheinlich bemerkt, dass das Quadratwurzel-Modulo 95
nicht immer existiert, zum Beispiel gibt es keine Wurzel für 2
. In einem solchen Fall ist die Quadratwurzel eines Strings nicht definiert und Ihr Programm / Ihre Funktion kann abstürzen, eine Endlosschleife ausführen usw.
Im Folgenden finden Sie eine Liste der Zeichen mit einer Quadratwurzel (die erste ist ein Leerzeichen):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Regeln
- Sie schreiben ein Programm / eine Funktion, die eine Zeichenfolge (oder eine Liste von Zeichen) als Argument verwendet und eine Quadratwurzel zurückgibt, falls sie existiert
- Sie können davon ausgehen, dass die Eingabe immer eine Quadratwurzel hat
- Die Eingabe kann aus einer leeren Zeichenfolge bestehen
- Die Eingabe liegt im druckbaren Bereich (
[32..126]
) - Die Ausgabe wird entweder an die Konsole ausgegeben oder Sie geben eine Zeichenfolge zurück, wenn die Quadratwurzel vorhanden ist
- Falls die Quadratwurzel nicht existiert, bleibt das Verhalten Ihres Programms / Ihrer Funktion undefiniert
- Wenn Sie sich dafür entscheiden, den Stamm auf der Konsole zu drucken, sind nachgestellte Zeilenumbrüche oder Leerzeichen in Ordnung
Testfälle
Beachten Sie, dass dies nicht unbedingt die einzigen Lösungen sind:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(das ist der druckbare Bereich), das ist ein Tippfehler - tut mir leid.