Inspiriert von dieser Herausforderung .
Tor:
Bei einer vorkonfigurierten Schalttafel und einer Liste von Indizes müssen die Schalter an den angegebenen Indizes invertiert werden.
Eine Schalttafel besteht aus einer Anzahl von Schaltern ( v
oder Schaltern ^
) -
, die in Reihen unterschiedlicher Länge angeordnet sind. Hier ist ein Beispiel für eine Telefonzentrale:
-v-^-v-
-^-v-
-v-^-v-
Um einen Schalter zu invertieren / umzudrehen, müssen Sie ihn von v
auf ^
oder von ^
auf ändern v
.
Die Schalter sind von links nach rechts und von oben nach unten indiziert. Im obigen Beispiel v
wäre beispielsweise der letzte in der ersten Reihe an Position 3 und der ^
in der mittleren Reihe an Position 4 (mit 1-Indexierung).
Eingang:
- Eine Zeichenfolge (oder eine Liste von Zeichenfolgen), die die Telefonzentrale darstellt. Es ist garantiert, dass es zum regulären Ausdruck passt
((-[v^])+-)(\n(-[v^])+-)*
. - Eine möglicherweise leere Liste von Zahlen, die Indizes darstellen, kann mit 0 oder 1 (oder einer beliebigen Zahl, wenn Sie möchten) indiziert sein. Dies sind die Schalter, die umgedreht werden müssen.
Ausgabe:
- Eine Schalttafel in der gleichen Form wie der Eingang, wobei die angegebenen Schalter invertiert sind. Alle nicht angegebenen Schalter sollten ihren ursprünglichen Zustand beibehalten.
Regeln:
- Eingaben werden immer korrekt formatiert und keine angegebenen Indizes sind außerhalb der Grenzen.
- Die Liste der Indizes wird sortiert und enthält keine Duplikate.
- Geben Sie in Ihrer Antwort an, welche Indizierung Sie verwenden, sei es 0, 1 oder eine beliebige.
- Das nachgestellte Leerzeichen ist in Ordnung, solange die Ausgabe wie die Eingabe aussieht.
- Das ist Code-Golf, also gewinnt der kürzeste Code.
Beispiele:
#Using 1-indexing
input: #Empty Case
[],
-v-^-v-
output:
-v-^-v-
input: #Single switch
[1],
-v-
output:
-^-
input: #Skip a line
[3,5],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-v-
-v-^-
input: #Flip one in each line + number wrap
[3,4,6],
-^-v-v-
-v-
-^-^-
output:
-^-v-^-
-^-
-^-v-
input: #Flip 'em all
[1,2,3,4,5,6],
-^-v-v-
-v-
-^-^-
output:
-v-^-^-
-^-
-v-v-
>"-"
: Da die Eingabe-Zeichenfolge mit Sicherheit beginnt-
, können Sie stattdessen anhand des verwendeten Parameters / Arguments / Variablennamens prüfen.Antworten:
Vim,
60, 46, 38, 37 Bytes / Tastenanschläge<esc>
und<C-r>
sind beide 1 Byte / Tastendruck. Byte-ZählerTestfall 1 (ausführlicher Modus)
Testfall 2 (ausführlicher Modus)
Vielen Dank an Grimy für die Ideen, die zu einer Reduzierung von 22 Bytes geführt haben :)
quelle
:s/\%V./\='v^'[submatch(0)=='v']
seincl<C-R>='v^'['<C-R>"'=='v']
für -13 Bytes? (Jedes <CR> ist nur ein Byte).s == cl
so-14
insgesamt.s^v!<Esc>?\<C-R>"<CR>xhf!x
oders<CR>^v<Esc>:s/\V<C-R>"<CR>kgJ
.-
, dass es von einem gefolgt wird , also funktioniert es tatsächlich! Duh.JavaScript,
6359 BytesProbieren Sie es online!
4 Bytes dank Arnauld gespeichert .
quelle
K (oK) ,
3127 BytesLösung:
Probieren Sie es online!
Erläuterung:
Schnelle Antwort, werde versuchen, Golf zu spielen. 0-indiziert.
Anmerkungen:
>93
Trickquelle
Python 3 ,
140134103 Bytes(-30 dank DJMcMayhem ♦, -1 dank Black Owl Kai)
Probieren Sie es online!
Oof, zweiter Versuch überhaupt etwas zu golfen. Dies verwendet nur eine ziemlich unkomplizierte Schleife über den String,
x
um den aktuellen Schalterindex zu verfolgen. Verwendet 1-Indizierung.Ungolfed:
quelle
Gelee , 12 Bytes
Ein vollständiges Programm, das eine Zeichenfolge und eine Liste von Ganzzahlen akzeptiert, die das Ergebnis ausgeben.
Probieren Sie es online!
Wie?
quelle
Python 3.8 (Vorabversion) ,
80,78,77,71, 70 Bytes-1 Byte, danke an @Shaggy
Probieren Sie es online!
quelle
c>s
Speichert ein Byte.Perl 6 , 31 Bytes
Probieren Sie es online!
(-2 Bytes dank Jo King)
Der Substitutionsoperator von Perl 6 verwendet
S
praktischerweise einnth
Adverb, das nicht nur einen einzelnen Index akzeptiert, an dem die Ersetzung vorgenommen werden soll, sondern eine Liste von diesen, genau wie hier benötigt.Die Ersetzung ist
$/ ~^ '('
, wo$/
der übereinstimmende Text ist (entwederv
oder^
),~^
ist der stringwise Exklusiv-ODER - Operator und(
das Zeichen , die Bits drehenv
in^
und umgekehrt.quelle
MATL , 29 Bytes
Probieren Sie es online!Oder überprüfen Sie alle Textfälle .
Die Eingabe ist ein Zellenarray von Zeichenfolgen und ein Zeilenvektor von Zahlen mit 1-basierter Indizierung. Die Ausgabe wird mit Leerzeichen rechts aufgefüllt.
quelle
Python 2 ,
1059791 BytesProbieren Sie es online!
6 Bytes gespeichert durch
Stehlenmit Rins Fourier - Transformation ‚sc>'-'
stattc in'^v'
.0
-indexiert.quelle
Jelly , 14 Bytes
Probieren Sie es online!
Volles Programm.
Das fühlt sich zu lang an ...
quelle
”-
den Namen des ersten Arguments (³
?) Eingeben, das garantiert mit a beginnt-
?>
vektorisiert. Sie können sehen, dass es nicht funktioniert .³
,⁴
,⁵
,⁶
und⁷
, für den ersten bis fünften CLAs sind. Sie können die Atoms- Seite lesen , um herauszufinden, ob eine bestimmte integrierte Funktion vorhanden ist.Stax , 13 Bytes
Führen Sie es aus und debuggen Sie es
Dies verwendet 0-basierte Indizes.
[v^]
.40
. Das istxor('v', '^')
.quelle
Sauber , 93 Bytes
Probieren Sie es online!
Definiert die Funktion,
$ :: [Int] -> [Char] -> [Char]
die eine mit Nullen indizierte Liste von Indizes verwendet und eine Funktion zurückgibt, die die Zeichenfolge verwendet und die geänderte Zeichenfolge zurückgibt.quelle
JavaScript (Node.js) ,
1019893917767 ByteProbieren Sie es online!
10 Bytes, danke an Vorschläge von Shaggy .
Port meiner Python-Antwort . Nicht gewohnt, Javascript zu spielen!
quelle
V , 20 Bytes
Probieren Sie es online!
Verwendet einige neue Funktionen, zum Beispiel
Ñ
die unglaublich nützlich sind.quelle
JavaScript, 111 Bytes
Code
Übernimmt Eingaben im Format f (x) (y), wobei x die Indizes und y die Schalttafel ist. Indizes sind 0 indiziert
Probieren Sie es online!
Erläuterung
Für jeden Index
Konstruieren Sie den regulären Ausdruck, der den Index + 1 "^" oder "v" findet.
füge es in eine Zeichenkette ein, um es durch das entgegengesetzte Symbol "v" <-> "^" zu ersetzen
Werten Sie dann den String als Funktion aus
Geben Sie die Schalttafel zurück, nachdem Sie die Indizes zum Wechseln durchlaufen haben
quelle
Gelee , 17 Bytes
Probieren Sie es online!
Ein vollständiges Programm, das die Indizes als erstes und den String als zweites Argument verwendet. Druckt die Ausgabe mit umgedrehten Schaltern.
quelle
Retina 0.8.2 ,
6662 BytesProbieren Sie es online! Link enthält Testfall. 1-indiziert. Erläuterung:
Wandle die eingegebenen Zahlen in unäre um.
Transkribieren Sie zwischen
v
und^
alle Zeichen mit der Eigenschaft, dass die Anzahl vonv
s und^
s bis jetzt (einschließlich) einer der eingegebenen Zahlen entspricht.Löschen Sie die eingegebenen Nummern.
quelle
Holzkohle , 23 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. 0-indiziert. Erläuterung:
quelle
Ruby , 56 Bytes
1-indiziert.
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 73 Byte
Probieren Sie es online!
quelle
Japt , 15 Bytes
Versuch es
quelle
Japt ,
1614 BytesVersuch es
quelle
:D
)