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.Antworten:
sh + coreutils, 58 Bytes
Probieren Sie es online!
Die modulare Quadratwurzel ist normalerweise nicht eindeutig. Wir haben 2 oder 4 Auswahlmöglichkeiten für jeden Charakter außer
. Wir brauchen nicht zu übersetzen
,
!
,4
,l
da jeder bereits eine Quadratwurzel von selbst. Für die restlichen Zeichen wählen wir Bilder aus, die für die Shell oder nicht maskiert werden müssentr
.quelle
Python 3,
5756 Bytestranslate
verwendet eine Zuordnung von "Unicode-Ordnungszahlen zu Unicode-Ordnungszahlen". Wir brauchen also keinechr
/ord
Umbauten. Hinweis: Es stürzt nicht ab, wenn das Zeichen keine Wurzel hat.1 Byte dank @ jonathan-allan gespeichert
Der Wert der Zuordnung ist die größte Wurzel im Bereich 0..94 des Schlüssels. Um die geringste Wurzel zu haben (wie in den Beispielen), verwenden Sie:
(61 Bytes)
quelle
32
und entfernenfor
.Python 2 , 80 Bytes
Probieren Sie es online!
Löst IndexError aus, wenn kein Root existiert.
quelle
Japt ,
1615 BytesProbieren Sie es online!
Durch Betrachten der 05AB1E-Antwort wurde ein Byte gespeichert (mit
L
= 100 anstelle von95
). Jetzt ist Japt das kürzeste, ein recht seltenes Ereignis :-DErläuterung
quelle
Mathematica, 94 Bytes
Probieren Sie es online!
quelle
Jelly ,
181716 BytesProbieren Sie es online! (kommt mit Fußzeile der Testsuite)
2 Bytes durch vollständiges Umschreiben gespart.
Auch das erste Mal habe ich Verwendung für gefunden}
.Erläuterung
Der Code berechnet zuerst alle quadratischen Zeichen und ordnet sie dann ihren jeweiligen Quadratwurzeln zu.
quelle
95Ḷ²%95+32iЀO+31Ọ
ist im Grunde das, was meine Japt-Antwort tut, obwohl Ihre Lösung zwei Bytes kürzer ist ...JavaScript, 82 Byte
Zusammenarbeit mit @ETHproductions
Ein- und Ausgabe erfolgen in Form eines char-Arrays.
Testschnipsel
Code-Snippet anzeigen
quelle
05AB1E , 17 Bytes
Der Algorithmus ist der Antwort von Jelly und Japt sehr ähnlich (hatte vorher etwas anderes, aber das brachte mich nur auf 19 Bytes)
Erläuterung
Probieren Sie es online!
quelle
Mathematica, 60 Bytes
Anonyme Funktion. Nimmt einen String als Eingabe und gibt einen String als Ausgabe zurück. Fehler bei ungültiger Eingabe.
quelle
Perl 6 , 53 Bytes
Probieren Sie es online!
quelle
Mathematica 82 Bytes
Verwendung der Fähigkeit von Solve, modulare Arithmetik durchzuführen.
quelle