Geben Sie bei einer Position mit einer Reihe von Türmen und / oder leeren Feldern aus, wie viele verschiedene Turmbewegungen möglich sind. Ein Turm kann sich nach links oder rechts zu einem leeren Feld bewegen, aber nicht zu einem, bei dem ein anderer Turm überfahren werden muss. Wenn sich ein Turm bewegt, bleiben die anderen Türme an Ort und Stelle.
Zum Beispiel sind von dieser Position aus 6 Züge möglich:
.R..RRR.
- Der erste Turm (ganz links) kann 1 Feld nach links oder 1 oder 2 Felder nach rechts bewegen (3 Züge).
- Der nächste Turm kann nur 1 oder 2 Felder nach links ziehen (2 Züge)
- Der dritte Turm kann sich überhaupt nicht bewegen, da er zwischen zwei anderen Türmen eingeklemmt ist (0 Züge)
- Der letzte Turm kann nur 1 Feld nach rechts bewegen (1 Zug)
Beachten Sie, dass eine Position möglicherweise überhaupt keine Türme oder gar keine Leerstellen hat.
Eingabe: Eine nicht leere Liste (Zeichenfolge, Array usw.) von Türmen und Leerzeichen. Sie können sie als True
/ False
, 1
/ 0
, 'R'
/ '.'
oder als zwei konsistente, unterschiedliche Einzelbytezeichen oder einstellige Zahlen Ihrer Wahl darstellen. Es liegt an Ihnen, welcher Turm und welcher leere Raum gemeint ist.
Ausgabe: Eine nicht negative Ganzzahl. Ganzzahlige Posen sind auch in Ordnung.
Testfälle
Die Ausgabe ist die Zahl auf der linken Seite.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Für weitere Testfälle sind hier alle Eingaben bis Länge 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR
Python 3 ,
3029 BytesProbieren Sie es online!
-1 Byte dank @JoKing
Die Funktion verwendet eine Python-Byte-Zeichenfolge als Eingabe. Jeder leere Raum wird als Tabulator und jeder Turm als Byte
b'\x00'
mit Wert codiert0
.Die Berechnung entspricht
lambda s:(s+s).strip().count(b'\t')
einer niedrigeren Bytezahl.quelle
JavaScript (ES6),
3833 Bytes5 Bytes gespart dank @JoKing
Übernimmt die Eingabe als Zeichenfolge. Erwartet ein Leerzeichen für ein leeres Feld und ein beliebiges anderes Zeichen für einen Turm.
Probieren Sie es online!
Kommentiert
Python 2 ,
4033 Bytes7 Bytes gespart dank @Grimy
Probieren Sie es online!
quelle
count
anstelle vonsplit
( TIO )Japt , 5 Bytes
Versuch es
quelle
Perl 6 , 16 Bytes
Probieren Sie es online!
Ein regulärer Ausdruck, der allen vollständigen Vorkommen von Türmen gefolgt von Leerzeichen oder Leerzeichen gefolgt von einem Turm entspricht und die Anzahl der Übereinstimmungen zurückgibt.
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
quelle
Retina ,
2315 BytesVerdoppeln Sie die Anzahl der Felder zwischen den Türmen, greifen Sie mit mindestens einem Turm zu und zählen Sie dann die Anzahl der Felder.
Probieren Sie es online!
Obwohl das Programm Leerzeichen anstelle von Punkten verwendet, habe ich Präfix-Code hinzugefügt, damit die bereitgestellten Testfälle einfach eingefügt und verwendet werden können.
Ich hatte gehofft, ich könnte überlappende Übereinstimmungen mit verwenden
(?<=R.*) | (?=.*R)
, aber Überlappungen sind nicht so aggressiv. Es müsste alle möglichen Wege zählen, auf denen eine Übereinstimmung erzielt werden kann, um mit dieser Methode das richtige Ergebnis zu erhalten.quelle
.R.R.R.
obwohl das Ändern der ersten ZeileR.+R
helfen könnte?Gelee , 6 Bytes
Probieren Sie es online!
Ein monadischer Link, der eine Liste
0
für Turm und1
Raum erstellt und eine Ganzzahl mit der Anzahl der Züge zurückgibt. Der TIO-Link nimmt die eingefügte Liste der in der Frage angegebenen möglichen Boards, konvertiert in das richtige Format und gibt dann die berechneten und korrekten Antworten aus.Erläuterung
quelle
Japt , 6 Bytes
Räume für Räume, jedes andere Zeichen für Türme.
Versuch es
quelle
Schnecken, 7 Bytes
Zumindest schlägt es Retina :)
Probieren Sie es online!
quelle
Gelee , 5 Bytes
Probieren Sie es online!
-1 Danke an Jonathan Allan .
0
stellen einen Turm dar,1
stellt einen leeren Raum dar.quelle
Ẉ
Sie die fünf erhalten:ḲẈ+ƝS
Ẉ
aberṣ0
stattdessen verwendet ...Stax ,
765 BytesFühren Sie es aus und debuggen Sie es
Verwenden Sie die Tabulatortaste für ein leeres Quadrat und ein anderes Zeichen für einen Turm.
quelle
C (clang) , 57 Bytes
Probieren Sie es online!
Mir ist aufgefallen, dass es bei leeren Listen nicht funktioniert hat. Jetzt funktioniert es! Plus sparte einige Bytes!
1 = Turm. 0 = Leerzeichen.
für (.. i + = n ++? - i: 1) // zählt Leerzeichen oder setzt zusätzliche Züge zurück => i = - ~ i ! * n ++ (@ceilingcat)
o + = * n? r = 1, i: r; // fügt der Ausgabe -i- (zusätzliche Züge) hinzu, wenn ein Turm getroffen wird, und setzt -r- (Turm getroffen), -i- wird für einen inkrementellen Satz gelöscht.
fügt -r- für jedes Feld hinzu (Turm erfüllt garantiert)
quelle
Haskell , 36 Bytes
Probieren Sie es online!
Verwendet 1 für leeren Raum, 0 für Turm. Zählt die Anzahl der Einsen, die nicht in einem Anfangsblock von Einsen enthalten sind, und addiert diese zum Ergebnis für die umgekehrte Zeichenfolge.
quelle
Haskell , 33 Bytes
Probieren Sie es online!
Anonyme Funktion, die Eingaben als Liste von 1 (Leerzeichen) und 0 (Türme) akzeptiert. Dadurch werden Leerzeichen vom Anfang und Ende der Liste entfernt, die beiden Versionen der Liste verkettet und summiert.
Dies verwendet GHC 8.4.1 oder höher, um auf den
<>
Operator zuzugreifen, ohne ihn zu importieren.quelle
Python 2 , 59 Bytes
Probieren Sie es online!
quelle
Japt , 6 Bytes
Probieren Sie es online aus
quelle
Wolfram Language (Mathematica) ,
4338 BytesProbieren Sie es online!
Port of Neils Retina-Lösung . Verwendet 1 für Leerzeichen und 0 für Türme.
quelle
Haskell ,
685854 BytesProbieren Sie es online!
quelle
Rot , 46 Bytes
Probieren Sie es online!
Nur eine rote Portierung der JavaScript / Python-Lösungen von Arnauld . Nimmt ein Leerzeichen als leeres Quadrat.
quelle
Java 11,
3532 BytesPort von @Joels Python 3 Antwort .
-3 Bytes danke auch an @Joel .
Verwendet NULL-Bytes (
\0
) für Türme und Tabulatoren (\t
) für Leerzeichen.Probieren Sie es online aus.
Ich habe versucht,
s->(s+s).trim().chars().sum()/9
zunächst als 31-Byte-Zeichen zu verwenden, aber das funktioniert nicht, weil dasString#trim
eingebaute Zeichen nicht nur führende und nachfolgende Leerzeichen / Tabulatoren / Zeilenumbrüche entfernt, sondern auch alle anderen Bytes, die kleiner oder gleichU+0020
(Unicode 32; ein Leerzeichen) sind. Daher werden auch die NULL-Bytes entfernt.Vielen Dank an Joel , der mir das neue Java 11+
String#strip
-Erstellungsprogramm (das ich vergessen habe, dass es hinzugefügt wurde) als Alternative empfohlen hat . Dieser entfernt auch nachfolgende / führende Teile, in diesem Fall jedoch nur Leerzeichen , sodass die NULL-Bytes erhalten bleiben.Erläuterung:
quelle
String.strip()
nur Leerzeichen entfernt werden: 32 BytesPerl 5
-MList::Util=sum -pF/R/
, 40 BytesProbieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 27 Byte
Dank @someone ein Byte gespeichert
Probieren Sie es online!
quelle
Stax ,
76 Bytes-1 Byte dank rekursiv
Führen Sie es aus und debuggen Sie es
quelle
v
, wodurch Sie ein Byte sparen.Befunge-98 (PyFunge) , 73 Bytes
Probieren Sie es online!
quelle
C ,
1831561511379691 BytesDanke an ceilingcat für 91 Bytes.
R ist ein Turm, alles andere ist ein Raum.
TIO
quelle
82
oder'R'
es kürzer ist benutzee+e*d
alse*(1+d)
,e=0,d=1;else e++; can be changed to
e = -1, d = 1; e ++;, and
b [a] `undb[++a]
kann durch*b
und ersetzt werden*++b
Pyth , 7 Bytes
Probieren Sie es online!
Nimmt eine Zeichenfolge
R
für Türme,(Leerzeichen) für Leerzeichen
quelle
x86-64 - 26 Bytes
Die Eingabe ist ein Array mit bis zu 32 Bits und einer Ganzzahl, die die Anzahl der Quadrate darstellt, wobei 1 für den Turm und 0 für leer steht.
Kopiert die Bits so, dass sie links davon hinzugefügt werden, und entfernt die nachfolgenden Nullbits. Ermittelt dann die Anzahl der führenden Nullbits und subtrahiert sie von der Gesamtzahl der Nullbits.
x86-64-Maschinencode - 22 Byte - nur Schachränge mit regulärer Länge.
Die Eingabe ist eine 32-Bit-Ganzzahl, wobei das niederwertigste Byte aus 8 Bits besteht, die die Türme darstellen. 1 ist ein Turm, 0 ist leer.
Kopiert die Bits in das nächste signifikante Byte und entfernt die nachfolgenden Nullbits. Ermittelt dann die Anzahl der führenden Nullbits und subtrahiert sie von der Gesamtzahl der Nullbits.
quelle