Schreiben Sie ein Programm, um alle Vorkommen von "force" durch "first" und alle Vorkommen von "first" durch "force" zu ersetzen, wobei der ursprüngliche Fall für alle Zeichenpositionen beibehalten wird:
"ForcefoRcefOrcE" -> "FirstfiRstfIrsT"
"FirstfiRstfIrsT" -> "ForcefoRcefOrcE"
Der Rest der Zeichenfolge muss unverändert bleiben. Wenn Sie Ihr Programm also zweimal ausführen, wird die ursprüngliche Zeichenfolge zurückgegeben:
"thirst of forces" -> "thirst of firsts" -> "thirst of forces"
Ihr Programm sollte mit jeder Anfangszeichenfolge funktionieren. Als Hinweis sollten Sie keine magischen Zeichen als Zwischendarstellung verwenden, denn wenn Sie einen Ersatz mit drei Durchgängen ( "force" -> "zzzzz", "first" -> "force", "zzzzz" -> "first"
) versuchen , schlägt dies bei Zeichenfolgen mit fehl "zzzzz"
.
Sie sollten in Ihrer Programmiersprache alle Zeichen unterstützen, die in einer Definition eines Strings zulässig sind (in den meisten Fällen Unicode). Beispiel mit JSON-Darstellung für nicht druckbare Zeichen (\ u + 4 Ziffern):
"\u0000\u0001\u0002\u0003the Force of the firsT"
|
V
"\u0000\u0001\u0002\u0003the First of the forcE"
[Ff]
nicht da ist, darfst du das Wort nicht ersetzen.Antworten:
Retina , 33 Bytes
Probieren Sie es online!
Bearbeiten: 5 Bytes dank @MartinEnder für den Hinweis darauf, was
Ro
funktioniert , gespeichert .quelle
Ro
.R
die Auswirkung auf die Reichweiten geachtet habe . Ich hätte zum Beispiel nie gemerkt, dass diesRE
äquivalent ist,86420
wenn Sie nicht darauf hingewiesen hätten.JavaScript (ES6),
93,88ByteBearbeiten: 5 Bytes durch Optimierung der unveränderten Groß- und Kleinschreibung gespeichert.
quelle
APL (Dyalog) , 61 Bytes
Benötigt,
⎕IO←0
was auf vielen Systemen Standard ist. Kann mit dem Unicode-Symbol statt vier Zeichen kürzer sein .⍠
⎕OPT
Probieren Sie es online!
quelle
PHP, 88 Bytes
Online-Versionen
PHP, 110 Bytes
quelle
$t[0]^first^force
stattstrtr()
.Perl 5 , 52 Bytes
51 Byte Code +
-p
Flag.Probieren Sie es online!
Nichts zu verrückt los. Suchen Sie nach Vorkommen von
force
undfirst
ohne Berücksichtigung der Groß- / Kleinschreibung (s%force|first%%gi
) und transkribieren Sie dann die Zeichen, die konvertiert werden sollen.quelle
CJam, 66 Bytes
Durchläuft in jedem Fall die Variation von "first" und "force" und versucht, sich darauf aufzuspalten. Wenn dies möglich ist, wird es mit den umgekehrten Worten wieder verbunden.
Pseudocode:
quelle
f
ist das relevant, um einen Wechselthirst
inthorce
oderdivorce
in zu vermeidendivirst
?Java 7,
318310 BytesOk, das war ziemlich schwer in Java.
Erläuterung:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
c(c("..."))
!Jelly ,
3736 BytesGibt es eine Möglichkeit, stattdessen eine Reduzierung über Slices der Länge 5 zu verwenden?
Probieren Sie es online!
Wie?
quelle
MATL , 47 Bytes
Probieren Sie es online!
Dies verwendet negative Werte als Zwischenschritt und nimmt nach den beiden Durchgängen den absoluten Wert an.
quelle
Pyth ,
3635 BytesProbieren Sie es online!
Pyth ist nicht besonders gut bei Saitenmanipulationen.
quelle
Flex (Lexer), 72 Bytes
Kompilieren und ausführen:
quelle
first.l:3: EOF encountered inside an action
(Oh, egal, am Ende ist ein Zeilenumbruch erforderlich)ld: library not found for -lfl
(oh egal, das Kommando istgcc lex.yy.c -ll
auf macOS)Python 2, 171 Bytes
Ich wollte versuchen, dies mit eingebauten Funktionen zu tun, aber es kann die chaotische Methode mit all dem Aufteilen und Zippen nicht übertreffen.
Ich denke, es ist ziemlich klar, was ich hier mache. Teilen Sie die Zeichenfolge bei Instanzen von first und force auf (ohne Berücksichtigung der Groß- und Kleinschreibung), ersetzen Sie diese Instanzen durch Versionen, die mit str.translate übersetzt wurden, und fügen Sie sie wieder zu einer Zeichenfolge zusammen.
Probieren Sie es online!
quelle
Python 2.7,
173165 Bytes8 Bytes von Quintopia gespeichert
Dieser wurde eklig:
Probieren Sie es online aus
Schritt für Schritt zerlegen:
S.lower().split("force")
: nimm den String, füge ihn in Kleinbuchstaben ein und teile ihn in durch getrennte Teilstrings auf"force"
s.replace("first","force")for s in <STEP 1>
: Ersetze alle"first"
durch"force"
_`.join("first".join(<STEP 2>)`[2::5]`_
: Ersetze all"force"
's mit,"first"
indem du die"force"
abgegrenzten Teilstrings mit neu kombinierst"first"
und wieder zu einer einzelnen Zeichenkette zusammenfügstzip(<STEP 3>,[(2,1)[l.isupper()]for l in S])
: zip jedes Zeichen der ersetzten Phrase mit Groß- / Kleinschreibung der Originalzeichenfolge (2 für Kleinbuchstaben, 1 für Großbuchstaben)_`[(t[0],t[0].upper())[t[1]==1]for t in <STEP 4>]`[2::5]`_
: Originalgehäuse wiederherstellen, Liste in Zeichenfolge konvertieren (Unterstriche hinzugefügt, um die richtigen Häkchen zu setzen)quelle
C (clang) ,
201183226214 BytesHatte ein paar Bugs ... Muss noch ziemlich viel runtergolfen werden
(12 dank ceilingcat gespeichert)
Probieren Sie es online!
quelle
C # 273 Bytes
Probieren Sie es online!
Direkte Portierung der Java-Antwort von Kevin Cruijssen , die sich herausstellt, wenn es darum geht, das Zeichen in einer Zeichenfolge bei einem bestimmten Index abzurufen. C # ist viel golfiger als Java (
s[i++]
statts.charAt(i++)
).quelle
Japt , 41 Bytes
Probieren Sie es online!
Dies wäre erheblich kürzer, wenn Japt eine vernünftige Transliterationsfunktion hätte ...
Alternative Version:
Probieren Sie es online!
quelle
C #, 235 Zeichen
quelle
Ruby , 55 Bytes
Probieren Sie es online!
quelle
Java, 382 Bytes nicht kompetent
Versuchen Sie es online
quelle
"The first, force,|first'forced!"
? Außerdem können Sie Ihren aktuellen Code ein wenig Golf spielen:if(w.equalsIgnoreCase("force")|w.equalsIgnoreCase("first"))
->,z
nachString s=""
undz=w.toLowerCase();if(z.equals("force")|z.equals("first"))
. Auch'O'
kann79
,'C'
kann sein67
und'E'
kann sein69
. Und dieif
else
können durch eine große ternäre ersetzt werden, wenn-sonst, da beide dies tuns+=
.non competent
im Titel hinzugefügtC # (269 Bytes)
Noch eine C # -Lösung, nur die zweitkleinste, weil ich zwei Variablen deklariert habe und daher keine Lambda-Syntax verwenden kann. na ja, ich hatte spaß :)
Erläuterung:
schalte die ursprüngliche Saite hoch und teile sie dann auf "FORCE" und "FIRST".
Fassen Sie die Ergebnisse zusammen und suchen Sie bei jeder Aufteilung die aus fünf Zeichen bestehende Teilzeichenfolge, die zum Aufteilen der ursprünglichen Zeichenfolge verwendet wurde, wobei Sie die bisherige Länge der zu aggregierenden Zeichenfolge verwenden. wenn es "Kraft" war, mach es "zuerst" und umgekehrt
quelle