Ich bin sicher , dass die meisten, wenn nicht alle, Sie haben über diese kommen zu einem bestimmten Zeitpunkt oder ein anderes:
Nach einer Recherche bei Cmabrigde Uinervtisy sollte es nicht anders sein, als es zu tun, und es sollte am Anfang und am Ende sein. Das Rset kann ein Toatl mses sein und Sie können es mit Porbelm raed. Tihs ist bcuseae die huamn mnid deos nicht raed ervey lteter von istlef, aber das wrod als ein wlohe.
Erstellen Sie ein Programm, das eine beliebige Textmenge eingibt. Verwenden Sie zu Testzwecken die unverschlüsselte Version des obigen Textes, die Sie unten finden.
Das Programm muss dann die Buchstaben jedes Wortes mit einer Länge von 4 oder mehr Buchstaben zufällig transponieren, mit Ausnahme des ersten und letzten Buchstabens jedes Wortes.
Alle anderen Formatierungen müssen unverändert bleiben (Groß- und Kleinschreibung, Satzzeichen usw.).
Testtext:
Laut einem Forscher der Universität Cambridge spielt es keine Rolle, in welcher Reihenfolge die Buchstaben in einem Wort stehen. Wichtig ist nur, dass der erste und der letzte Buchstabe an der richtigen Stelle stehen. Der Rest kann ein totales Durcheinander sein und man kann es immer noch ohne Probleme lesen. Dies liegt daran, dass der menschliche Verstand nicht jeden Buchstaben für sich liest, sondern das Wort als Ganzes.
Wie immer ist dies ein Code-Golf. Kürzester Code gewinnt.
rscheearch
in Ihrem Beispieltext nicht richtig .don't
in der gleichen Position bleiben? Die Spezifikation sagt,All other formatting must remain the same (capitalization and punctuation, etc.).
aber ich bin nicht sicher, wie das hier funktioniert ...Antworten:
Rubin -
5048 Zeichen plus-p
Befehlszeilenparameter.Danke @primo für -2 Zeichen.
Prüfung
quelle
\K
Look-Behind-Behauptung mit der Breite Null? Auch ist die innerste Gruppierung unnötig, indem$&
statt$1
.$&
Tipp :)codegolf
Skript[*$&.chars]
=>$&.chars
, wodurch 3 Bytes eingespart werden.Python, 118
Python ist für solche Dinge furchtbar umständlich!
Bonus
Ich habe einige andere Dinge ausprobiert, die ich für klug hielt, aber Sie müssen alle möglichen Dinge importieren, und viele Methoden haben keine Rückgabewerte, sondern müssen separat als eigene Anweisung aufgerufen werden. Das Schlimmste ist, wenn Sie die Zeichenfolge in eine Liste konvertieren und dann
join
wieder in eine Zeichenfolge umwandeln müssen .Wie auch immer, hier sind einige Dinge, die ich ausprobiert habe:
Regex! Permutationen! Sie können eine Partition einer Liste nicht direkt mischen undshuffle
kehren zurückNone
, yay!quelle
PHP 84 Bytes
Verwenden Sie eine Regex, um Wörter mit mindestens
4 bis3 Buchstaben zu erfassen † und die inneren Zeichen zu mischen. Dieser Code kann auch Eingaben mit mehreren Zeilen verarbeiten.Wenn nur eine Eingabezeile erforderlich ist (wie im Beispiel), kann diese auf 68 Byte reduziert werden
† Es gibt nur einen Buchstaben in der Mitte, es spielt also keine Rolle, ob Sie ihn mischen.
quelle
J (48)
Erläuterung:
1!:1[3
: Liest alle Eingaben von stdinrxapply
: Wenden Sie die angegebene Funktion auf die Teile der Eingabe an, die dem regulären Ausdruck entsprechen({~?~@#)
: ein Verbzug, der seine Eingabe mischt:#
zählt die Länge, dies wird auf beide Seiten angewendet,?
um N verschiedene Zahlen von 0 bis N zu geben,{
und wählt dann die Elemente an diesen Indizes aus dem Eingabearray aus.('\w(\w+)\w';,1)
: benutze diesen regulären Ausdruck, aber benutze nur den Wert aus der ersten Gruppe[1!:2&4
: Sende unformatierte Ausgabe an stdout''[
: Formatierte Ausgabe unterdrücken. Dies ist notwendig, da sonst nur der Teil der Ausgabe ausgegeben wird, der auf eine Terminalleitung passt und dann mit endet...
.quelle
Retina , 10 Bytes
Probieren Sie es online!
Hey, diese alte Herausforderung wurde für die neue Retina gemacht!
Erläuterung
\B\w+\B
Stellt Gruppen von Buchstaben zwischen nicht begrenzten Zeichen dar, d. h. Gruppen von Buchstaben, die kein Wort beginnen oder enden. Da reguläre Ausdrücke gierig sind, werden alle Buchstaben eines Wortes mit Ausnahme des ersten und des letzten übereinstimmen.V
ist die "umgekehrte" Phase, die die Reihenfolge der Zeichen in jeder Übereinstimmung der Regex umkehrt. Mit der?
Option verschlüsselt es sie stattdessen.quelle
APL 107
Leider unterstützt mein APL-Interpreter keine regulären Ausdrücke. Hier ist eine Home-Roll-Version, in der der zu verschlüsselnde Text in der Variablen t gespeichert ist:
Im Wesentlichen unterteilt der Code den Text in Wörter, die nur auf den Buchstaben des Alphabets basieren, und dann in die Buchstaben zwischen dem ersten und dem letzten Buchstaben dieser Wörter. Diese Buchstaben werden dann verschlüsselt und die gesamte Zeichenkette wieder zusammengesetzt.
quelle
APL,
5849Ich glaube, das funktioniert in IBM APL2 (ich habe keine IBM APL)
Wenn nicht, fügen Sie in Dyalog APL Folgendes hinzu:
Das fügt 6 Zeichen hinzu
Dies setzt voraus, dass die einzigen Nicht-Wort-Zeichen Leerzeichen, Komma und Punkt sind.
quelle
VBA, 351
373/409Alternative (größere) Methode:
Beide Methoden ändern den Wert der Variablen, die an den übergebenen Wert übergeben wird
Sub
. dhwird so etwas ausgeben:
Dadurch wird auch die Interpunktion in der Wortmitte zufällig ausgewählt, sodass die Spezifikation möglicherweise nicht zu 100% passt.
quelle
APL NARS 172 Zeichen
13 + 17 + 18 + 44 + 41 + 8 + 17 + 5 + 9 = 172; Diese Funktion g () hat eine Eingabe als Zeichenkette; hat die Ausgabe als String. Ich füge den Eingabebefehl hinzu, weil ich nicht weiß, wie \ 'in eine Zeichenfolge in Anführungszeichen eingefügt wird. Kommentiert
Ergebnis
quelle
PHP 7.1, nicht konkurrierend, 80 Bytes
Nimmt Eingaben von Befehlszeilenargumenten entgegen. Laufen Sie mit
-nr
. (wird offensichtlich an der Interpunktion scheitern)quelle
PHP, 94 + 1 Bytes
+1 für
-R
FlaggeRohreingang durch
php -nR '<code>'
.Anmerkung:
preg_replace_callback
kam zu PHP in 4.0.5; Verschlüsse wurden in PHP 5.3 eingeführt;Das erfordert PHP 5.3 oder höher.
Leider wird die Übereinstimmung immer als Array gesendet, auch wenn es keine Sub-Patterns gibt,
daher kann ich sie nicht einfach
str_shuffle
als Callback verwenden, wodurch 29 Bytes eingespart würden.quelle
JavaScript,
7667 BytesDanke an Arnauld für -9 Bytes.
Probieren Sie es online!
Ungolfed
quelle
/\B\w+\B/g
. (Aber für die Kopfgeld, beachten Sie, dass die Codelänge nicht wichtig ist. )R 179
Mit der Funktion, die ich für die zufälligen Buchstaben in einem Wortproblem geschrieben habe :
Eingang:
Lösung:
Ergebnis:
quelle
Pyth, 23 Bytes
Nicht konkurrierend, da Pyth hergestellt wurde, nachdem diese Herausforderung veröffentlicht wurde.
Probieren Sie es online aus
quelle
Japt , 32 Bytes
Probieren Sie es online!
quelle
Java,
1557834 Bytes Danke an @JoKing für die Tipps.Ein bisschen zu spät zum Wettbewerb. Ich habe vergessen, dass ich mit diesem Problem angefangen habe.
Golf gespielt
Nicht golfen
quelle
Sidef ,
8985 BytesSperren (anonym aufrufbar):
Ausgabe, wenn verwendet wie
{ ... }('..')
:Etwas ungolfed
quelle