Dies ist weitaus fortgeschrittener als das zufällige Anordnen von Buchstaben in einem Wort und die Cambridge-Umsetzung, da festgelegt ist, welche Buchstaben mit welchen Buchstaben ausgetauscht werden dürfen. Ein einfacher regulärer Ausdruck wird hier nicht ausreichen.
Es ist bekannt, dass ein Text noch gelesen werden kann, während die Innereien seiner Wörter verwürfelt wurden, solange der erste und letzte Buchstabe sowie die Gesamtkonturen konstant bleiben. Verwürfle jedes Wort mit einem druckbaren ASCII + Newline-Text nach den folgenden Regeln:
Das Scrambling muss (pseudo) zufällig sein.
Ein Wort ist eine Folge der lateinischen Buchstaben A bis Z.
Es werden immer nur Anfangsbuchstaben in Großbuchstaben geschrieben.
Der erste und der letzte Buchstabe müssen unangetastet bleiben.
Beim Verschlüsseln dürfen nur Buchstaben aus einer der folgenden Gruppen Plätze tauschen:
acemnorsuvwxz
bdfhkl
gpqy
it
j
(bleibt an Ort und Stelle)
Beispiel
Srcmable wrods während psrrnveieg ihre oeiltnus
Es ist allgemein bekannt, dass ein Text noch gelesen werden kann, während die Inrands seiner Wrods verschlüsselt wurden, solange ihre ersten und letzten Buchstaben sowie ihre übergeordneten Einträge nicht geändert werden können. Angesichts eines Patnirlbe Acsii + Nwnliee txet, samrclbe ecah Wort anoccdirg zu diesen relus:
Smncrbliag muss (pusedo) rondam sein.
Ein Wrod ist eine Rettung der lateinischen Chreratacs, A thurogh Z.
Nur die ersten Teilnehmer werden höher sein.
Die fisrt- und lsat-Lettres müssen uctoenhud bleiben.
Beim Garnclbimg dürfen nur Buchstaben mit einem der fwllnoiog-Guorps die Plaeke tauschen:
aneusvrowxmcz
bhkfdl
gqpy
it
j
(bleibt in plcae)Emxaple
t
soll kürzer sein alsh
obwohl viele leute es nicht so schreiben.t
aus Gruppe 2 zu entfernen ? Oder vielleichtt
in einer Gruppe 4 mit setzeni
?printable
/patnirlbe
Ist nicht gut lesbar. Ich denke deri
/t
Swap ist schuld. Hmm ...paintrlbe
Nein, das hat auch nicht geholfen. Dann ist es wahrscheinlich derpr
/pa
swap. Die Gliederung bleibt erhalten, aber ich denke, dass ich "pr" und "pa" als semantisch (?) 1 Buchstaben gelesen habe.prtnialbe
Ah ja. Das hat es geschafft. Ich bin mir nicht sicher, ob ich eine Lösung für den Algorithmus anbieten kann .Antworten:
Jelly ,
8074 Bytes-2 Bytes durch Verschieben von
czar + vex + mow + sun
nachczar + vexes + unmown
(das wiederholtee
s undn
s ist kein Problem)-1 Bytes
Tị
anstelle vonȦÐf
-1 Bytes
Œle€Øa
anstelle voni@€ØB>⁵
-2 Bytes durch ein wenig Umkonfigurieren des Layouts
Ein vollständiges Programm, das eine Zeichenliste (oder eine Python-formatierte Zeichenfolge) verwendet, die das Ergebnis der Verschlüsselung ausgibt.
Probieren Sie es online!
Eine Menge Schwierigkeiten für Jelly, wie es scheint (entweder das oder ich habe einen Trick verpasst, der bekanntermaßen passiert!). Dies wird sicherlich von Sprachen mit besserer String-Manipulation wie
Retina(keine zufällige Funktionalität) oder 05ab1e übertroffen .Wie?
quelle
czar + vex + mow + sun
‽acemnorsuvwxz
. Ich werde irgendwann auch kommentierten Code schreiben.PHP, 278 Bytes
Probieren Sie es online!
Erweitert
funktionen
array_combine
array_filter
array_keys
ksort
preg_replace_callback
Mischen
quelle
Pyth , 79 Bytes
wo
❤
ist U + 0018.Probieren Sie es online!
Stichprobe
Es ist wohlbekannt, dass ein Text immer noch geraubt werden kann, während die Irnanden seiner Wrods seraclbmd gewesen sind, solange ihre ersten und letzten Lettres plus ihre oaervll ontliues rmeain conntsat. Wenn Sie einen Text eingegeben haben, können Sie jeden Wrod-Acrncdiog wie folgt zusammenfassen:
Scamrlbing muss (puesdo) rnadom sein.
Ein Wort ist eine Abkürzung der lateinischen chraectars, A thuorgh Z.
Nur iaitinl lettres werden upaersce sein.
Der erste und der letzte Buchstabe bleiben unverändert.
Wenn Sie schwimmen, dürfen nur Buchstaben mit einem der folgenden Guorps Plecas enthalten:
amsuvrcnoxewz
bhfkdl
gpqy
it
j
(bleibt an Ort und Stelle)quelle
\pL
statt sparen[A-Za-z]
?\pL
?\w
genugJavaScript 176 Bytes
Methode:
RegExp iteriert über die Mitte jedes Wortes (
/\B(\w+)\B/g
) mit 1st Replace Fn.1. Ersetzen fn iteriert ein Array von RegExp's für jede Buchstabengruppe (
/[bdfkhl/g, /[gqpy]/g, etc..
).Jede Iteration erstellt ein temporäres Array von Zeichen des Wortzentrums, die in der aktuellen Buchstabengruppe erscheinen.
Jede Iteration verwendet dann RegExp der aktuellen Buchstabengruppe, um über die gesamte Wortmitte zu iterieren, wobei ein zweites Ersetzungs-Fn verwendet wird.
2nd replace fn spleißt das temporäre Array nach dem Zufallsprinzip, entfernt ein zufälliges Zeichen und gibt es zurück.
Demo:
Führen Sie es in JSFiddle aus: https://jsfiddle.net/CookieJon/bnpznb7r/
quelle
\pL(\pL+)\pL
nicht\B(\w+)\B
zu Ziffern und Unterstreichungs auszuschließen.b=>[...].map(...)&&b
spart ein weiteres Byte. Ich bin mir auch nicht sicher, ob dasi
nötig ist.t.replace(/[A-Za-z]([a-z]+)(?=[a-z])/g,(w,b)=>...w[0]+b...)
oder mehrere davon verwenden.C,
453, 356,369 Bytesungolf mit kommentaren
quelle
Python 3.6,
349340 BytesMit Tabulatoren eingerückt. Die Funktion heißt
A
. Es wird keine rohe Gewalt angewendet, die Laufzeit ist gemäß OP deterministisch.quelle
Mathematica 232 Bytes
Die Grundidee besteht darin, die Teilmengen zu permutieren, die den 4 verschiedenen Zeichengruppen entsprechen. Wahrscheinlich Raum für Verbesserungen.
quelle
C
306282 BytesProbieren Sie es online aus
Ungolfed:
quelle
JavaScript (ES6),
380327311294 Bytes(
298282265 Bytes ohne die Regeln)Vielen Dank an @Shaggy für die nützlichen Tipps!
Die Funktion f nimmt eine beliebige Zeichenfolge (ein einzelnes Wort, mehrere Wörter, mehrere Wörter mit Vorzeichen - was als Wortbruch interpretiert wird) und
eindurch Kommas getrenntesArrayvon "Regeln" beliebiger Länge auf.Bei Ihrer Frage wäre das eine Reihe von Regeln
["aneusvrowxmcz", "bhkfdl", "gqpy", "it"]
"aneusvrowxmcz,bhkfdl,gqpy,it"
Einige Buchstaben werden nicht gemischt, obwohl dies möglich ist, da Sie in Ihrer Frage angegeben haben, dass Buchstaben "Leerzeichen austauschen können". Wenn ich es falsch interpretiert habe, kann ich den Code so ändern, dass immer Buchstaben verschlüsselt werden, die den Regeln entsprechen.
Ich weiß, das ist eine enorme Menge an Bytes und es wird nicht mit Golfsprachen konkurrieren können, aber ich wollte es trotzdem versuchen, hoffe es gefällt dir :)
Vom Menschen lesbarer, nicht uglifizierter Code:
quelle
var
s undlet
s loswerden . 02) Sofern es sich nicht um eine rekursive Funktion handelt, müssen Sie die Variablendeklaration (f=
) nicht in Ihre Byteanzahl aufnehmen. 03) Verwenden Sie currying, wenn eine Funktion 2 Parameter hat (b=>d=>
statt(b,d)=>
) und rufen Sie Ihre Funktion mit auff(b)(d)
. 04) Sie haben diei
Flagge, müssen also nichtA-Z
in Ihre Regex aufgenommen werden. 05) Sie könnenindexOf
odersearch
für einen String verwenden, ohne ihn in ein Array aufzuteilen.Clojure,
326322324 BytesUpdate 1: ersetzt
(map(fn[[k v]]...)...)
durch(for[[k v]...]...)
Update 2: Regex korrigiert,
\pL
anstelle von\w
etc.Ich freue mich darauf, etwas kürzeres zu sehen. Frühere ungolfed Version mit ein paar Beispielläufen:
quelle
\pL+
und\PL+
anstatt\w+
und\W+
um Ziffern und Unterstriche auszuschließen.Perl 6 ,
241195 BytesEnthält +1 Byte für die
-p
Befehlszeilenoption.Ungolfed:
quelle
(\pL)(\pL+)(\pL)
anstatt(\w)(\w+)(\w)
Ziffern und Unterstreichungs auszuschließen.\pL
Enthält tatsächlich viele Zeichen außerhalb des zulässigen Bereichs der lateinischen Buchstaben AZ. Ich habe meinen Code aktualisiert, um die Anforderungen genauer wiederzugeben.\pL
ist allerdings<:L>
in Perl 6 geschrieben.C #,
438394380374 BytesSparen Sie 10 Bytes dank @ MartinEnder ♦.
Ärgerlicherweise
CaptureCollection
nicht umsetzbarIEnumerable<T>
und deswegen.Cast<Capture>()
wird das benötigt. Hoffentlich kann ich die Linq-Abfrage und dieforeach
Schleife kombinieren .Ich bin mir sicher, dass es eine Menge gibt, auf die man Golf spielen kann, aber ich habe lange genug gebraucht, um es zum Laufen zu bringen ...
Probieren Sie es online!
Formatiert / Vollversion:
quelle