Geobitsianische Sprache ist eine neue Perversion des Englischen, bei der ein Wort in Segmente unterteilt wird, die jeweils mit einem anderen Buchstaben beginnen müssen. Jedes Mal, wenn einer dieser Anfangsbuchstaben in einer anderen Zeichenfolge erscheint, wird er durch das gesamte entsprechende Segment ersetzt, wobei die Großschreibung beibehalten wird.
Dieser Vorgang wird als Geobitsizing bezeichnet .
Zum Beispiel könnte man in das Wort " Geobits " geo bits
und in das Unsinnsgedicht einbrechen
Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy
wäre damit geobitsized als
Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy
denn jeder g
wird geo
, jeder G
(obwohl es keine gibt) wird Geo
, jeder b
wird bits
und jeder B
wird Bits
.
Beachten Sie, dass jede Ersetzung in Bezug auf die ursprüngliche Zeichenfolge ausgeführt wird, nicht in Bezug auf einen Zwischenschritt. zB wenn geo
gewesen war gbo
stattdessen die b
‚s erstellt würde nicht ersetzt bits
.
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die Geobitsianische Sprache erzeugen kann.
Nehmen Sie eine einzeilige Zeichenfolge aus Kleinbuchstaben (az) und Leerzeichen auf. Dies ist das Wort, das als Geobitsizing-Argument verwendet wird, wobei die Leerzeichen die Segmente trennen. Sie können annehmen:
- Segmente werden nicht leer sein. Leerzeichen werden also weder einander benachbart noch am Anfang oder Ende der Zeichenfolge stehen.
- Jedes Segment beginnt mit einem anderen Buchstaben. Es können also nicht mehr als 26 sein.
Zum Beispiel sind einige gültige segmentierten Strings Sie unterstützen müssen geo bits
, butt ner
, alex
, und do o r k nob
(Einzelbuchstaben - Segmente haben keine Wirkung , sondern sind gültig). Aber geo
, butt ner
, Alex
, und do o r k n ob
sind ungültig.
Ihr Programm oder Ihre Funktion muss auch eine andere beliebige Zeichenfolge aufnehmen, um das Geobitsizing anzuwenden und die resultierende geobitsische Sprache zu drucken oder zurückzugeben.
Sie können davon ausgehen, dass diese Zeichenfolge nur Zeilenumbrüche und druckbare ASCII-Zeichen enthält.
Denken Sie daran, dass die Groß- und Kleinschreibung von der Eingabe bis zur Ausgabe beibehalten werden muss.
Hier sind einige weitere Beispiele, no pro gr am m ing
die das Geobitsizing-Argument verwenden:
[empty string]
→ [empty string]
i
→ ing
I
→ Ing
Mmmm, mmm... MmmmMMM: m&m!
→ Mmmm, mmm... MmmmMMM: m&m!
(keine Änderung)
People think bananas are great, don't you?
→ Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?
Pet a Puppy
Google Wikipedia
↓
Proet am Prouproproy
Groogrle Wingkingproedingam
Beachten Sie, dass die Ergebnisse unabhängig von der Anordnung des Arguments identisch sein sollten, z. B. ing pro m no am gr
dieselben Ergebnisse wie oben liefern sollten.
Der kürzeste Code in Bytes gewinnt.
["no", "pro", "gr", "am", "m", "ing"]
\\b${l}(\\S+)
obwohl das 5 Bytes kostet.abra cadabra
,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
soll , dass alle Grenzfälle abdecken, und es gibt viele von ihnen , wenn man versucht , reguläre Ausdrücke zu verwenden ...Antworten:
Jelly , 18 Bytes
Probieren Sie es online!
Alternative Version, 15 Bytes (nicht konkurrierend)
Jellys Titel-Case-Funktion hatte einen Fehler; Das erste Wort wurde nicht groß geschrieben. Das wurde behoben, daher funktioniert das Folgende jetzt.
Dieser Code verhält sich wie in der Konkurrenzversion, mit der Ausnahme, dass
Œt
(Groß- und Kleinschreibung) die bedingte Großschreibung von ersetztŒu1¦€
.Wie es funktioniert
quelle
Python 3, 71 Bytes
Teste es auf Ideone .
Wie es funktioniert
In Python 3 verwendet die integrierte Funktion
str.translate
eine Zeichenfolge und ein Wörterbuch und ersetzt jedes Zeichen in der Zeichenfolge, dessen Codepunkt ein Schlüssel dieses Wörterbuchs ist, durch den entsprechenden Wert. Dies kann eine Zeichenfolge, eine Ganzzahl oder Keine sein (entspricht der Zeichenfolge) leerer String).Durch Konvertieren der Wortfolge w in Groß- und Kleinschreibung (dh Großschreibung des ersten Buchstabens jedes Wortes) und Anhängen an das Ergebnis von
w+' '
wird eine Folge von durch Leerzeichen getrennten Wörtern mit Klein- und Großbuchstaben (erster Buchstabe) erstellt. Teilt sich ohne ein zweites Argumentstr.split
mit Leerzeichen, so(w+' '+w.title()).split()
wird die Liste aller Wörter erstellt.Schließlich
{ord(t[0]):t for t in...}
verwandelt das Wörterbuchverständnis jedes Wort t in einen Wörterbucheintrag mit Schlüsselord(t[0])
(Codepunkt des ersten Buchstabens) und Wert t ,str.translate
um die beabsichtigten Substitutionen durchzuführen.quelle
Python,
126999581 BytesVielen Dank an Dennis:
Edit1: muss nicht an ein temporäres angehängt werden
Edit2:
S
kann Großbuchstaben enthalten ...Edit3: Dupliziere G nicht
Edit4: etwas mehr komprimiert und in eine Zeile geschoben
Edit5: mit unbenanntem Lambda und
j=join' '
quelle
Pyth, 19 Bytes
Probieren Sie es online!
quelle
Vim, 46 Tastenanschläge
Hässlich und Hacky.
quelle
Netzhaut , 36 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
quelle
Pyth,
1816Probieren Sie es hier aus
Definiert eine Funktion
g
, die das Geobitsising durchführt. Als Programm wäre dies etwas kürzer, wenn der zweite String einzeilig wäre, aber eine mehrzeilige Eingabe ist es nicht wert:Die allgemeine Idee dabei war, die Geobitsian-Zeichenfolge als Groß- / Kleinschreibung zu bezeichnen und an die ursprüngliche Zeichenfolge anzuhängen. Teilen Sie dies in Leerzeichen auf und ordnen Sie für jede Zeichenfolge den ersten Buchstaben der entsprechenden Zeichenfolge zu. Auf diese Weise
X
wird der erste Buchstabe jedes Wortes in das vollständige Wort umgewandelt.quelle
Python 2,
83-78BytesTeste es auf Ideone .
Wie es funktioniert
Wir iterieren über alle Zeichen c in der Zeichenfolge s .
Wir stellen der Wortfolge w ein Leerzeichen voran und suchen dann nach einem Vorkommen von c in Kleinbuchstaben , dem ein Leerzeichen vorausgeht.
Wenn ein solches Vorkommen vorliegt,
find
wird der Index des Leerzeichens in der Zeichenfolge zurückgegeben' '+w
, der mit dem Index von c in w übereinstimmt .w[...:]
gibt also den Schwanz von w zurück , beginnend mit dem Wort mit dem ersten Buchstaben c .split()
Teilt den Schwanz in Leerzeichen,[0]
wählt den ersten Teil (das Wort) aus und[1:]
entfernt den ersten Buchstaben.Nach dem Voranstellen von c vor dem vorherigen Ergebnis erhalten wir das Wort mit der korrekten Schreibweise , das mit c beginnt .
Wenn kein Wort mit c beginnt ,
find
wird -1 zurückgegeben .Somit
w[...:]
ergibt das letzte Zeichen von w ,split()
wickelt es in einer Anordnung,[0]
rückgängig macht die Umhüllung, und[1:]
entfernt das einzig Zeichen aus der Zeichenfolge.Nachdem wir c vorangestellt haben , erhalten wir den Singleton-String, dessen Zeichen c ist , sodass die gesamte Operation ein No-Op ist.
Schließlich
''.join
verkettet alle resultierenden Strings, die Geobitsized Version der Rückkehr s .quelle
Julia,
7268 BytesProbieren Sie es online!
quelle
CJam, 19 Bytes
Teste es hier.
Erläuterung
quelle
JavaScript ES6,
676370 BytesTesten Sie dies in Firefox. Fehler machen dies länger als ich möchte
Erläuterung
quelle
f("abracadabra")("1Dbw")
kehrt zurück"1abracadabraDbracadabrababracadabrawbracadabra"
.Ruby,
656058 BytesProbieren Sie es online!
quelle