Ein 8x8-Schachbrett soll durch zwei verschiedene Werte dargestellt werden, wobei ein Wert ein leeres Quadrat und der andere eine Dame ist. In den folgenden Beispielen verwende ich 0en als leere Felder und 1en als Damen. Beispielsweise:
ist gegeben durch
1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1
Betrachten Sie die Anzahl der angreifenden Königinnenpaare, die mindestens ein Quadrat entfernt sind (zur Erinnerung: Königinnen greifen orthogonal und diagonal an). Im obigen Beispiel zeigt das folgende unglaubliche hässliche Diagramm alle diese Paare als Pfeile.
Es wurden oben 43 Paare gefunden, die den folgenden Testfall ergeben:
Input:
1 0 1 1 1 0 0 0
1 0 1 0 1 0 1 1
1 0 1 0 1 1 0 1
0 1 0 1 0 1 0 0
0 1 1 0 0 1 0 1
1 0 0 0 1 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 1
Output: 43
Herausforderung
Schreiben Sie ein Programm, das bei einem Board-Status, der durch zwei unterschiedliche Werte dargestellt wird, die Anzahl der Königinnenpaare ausgibt, die sich gegenseitig mit mindestens einem Quadrat dazwischen angreifen.
- Sie können in einem beliebigen Format eingeben, das am bequemsten ist und zwei Werte zur Darstellung der leeren Quadrate und Damen verwendet, z. B. eine Zeichenfolge von 64 "." S für leere Quadrate und "Q" s für Damen in Zeilen von unten nach oben (8x8) Matrix von Booleschen Werten, eine Liste mit ganzen Zahlen 0 und 1 usw., sofern dies in Ihrer Lösung erläutert wird
- Die Ausgabe ist eine Ganzzahl
- Es gelten Standard-E / A-Methoden und Standard-Regelungslücken sind verboten
- Dies ist Codegolf, also gewinnt die kürzeste Antwort in Bytes
Testfälle:
Verwenden des 0- und 1-Formats, wobei 0 leere Felder und 1 Damen sind:
Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 0
Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 0
Input:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Output: 1
Input:
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0
0 0 0 0 1 0 1 0
0 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0
0 0 0 0 0 0 0 0
Output: 10
Input:
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 4
Input:
1 1 0 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
Output: 11
quelle
Antworten:
Python 2 , 105 Bytes
Probieren Sie es online!
Erläuterung
Wir nehmen die Eingabe als Zeichenfolge von 64 Zeichen
'0'
oder'1'
. Mit Hilfe von Stufenscheiben werfen wir von jeder Königin, der wir begegnen, vier "Sichtlinien". Wenn zum Beispiel i = 10 und d = 7 , wird die Dame als ♥ markiert und die Kacheln mitb[i+d::d]
█ ausgewählt:Es ist klar, dass wir nicht wirklich wollen, dass sich die Vision so um das Board dreht. Also berechnen wir, wie weit der Rand des Brettes in jeder Richtung entfernt ist, und betrachten die Kacheln bei
b[i+d::d][:…]
.Für jedes Kachel-Richtungs-Paar zählen wir:
Dies wird immer dann fehlschlagen, wenn
c
ist keine Königin; oderfind
gibt 0 zurück). oderfind
gibt −1 zurück).Jedes Königinnenpaar wird nur einmal überprüft, da die Strahlen immer in Lesereihenfolge vorwärts geworfen werden, von einer "früheren" Königin zu einer "späteren".
quelle
JavaScript (ES7), 86 Byte
Nimmt Eingaben als ein Array von 64 Ganzzahlen mit 254 für eine Dame und 0 für ein leeres Quadrat.
Probieren Sie es online!
Diese Version missbraucht den arithmetischen Unterlauf, um eine Stoppbedingung im rekursiven Teil zu erhalten.
JavaScript (ES7), 89 Byte
Nimmt Eingaben als ein Array von 64 Bit an.
Probieren Sie es online!
Wie?
Wir rufen rekursiv eine benannte Rückruffunktion auf
map()
, um durch die Quadrate in einer bestimmten Richtung zu gehen. Obwohl wir den Inhalt des dritten Parameters des Rückrufs (das Arraymap()
wurde aufgerufen) nicht wirklich benötigen , verwenden wir ihn indirekt, um zu wissen, ob es sich um die erste Iteration handelt oder nicht.Dies ist die x- Variable im Code.
quelle
Schnecken , 14 Bytes
Probieren Sie es online!
Die Eingabe erfolgt im Format 0/1 ohne Leerzeichen innerhalb von Zeilen.
Snails wurde für eine 2D-Pattern-Matching-Language-Design-PPCG-Herausforderung erstellt . Am wichtigsten ist jedoch, dass standardmäßig die Anzahl der gefundenen Übereinstimmungen ausgegeben wird, was für diese Herausforderung perfekt ist.
A
Legt die Option "Alle Pfade" fest, sodass jedes dieser Paare eine Übereinstimmung generiert, wenn sich eine Dame in mehreren Paaren befindet.rdaa7
Stellt die Übereinstimmungsrichtung auf S, SE, E und NE ein. Das Einstellen in alle Richtungen (z
) würde zu Doppelzählungen führen.\1\0+\1
entspricht a1
, dann einem oder mehreren0
s, dann einem anderen1
.quelle
APL (Dyalog Classic) ,
413932 BytesProbieren Sie es online!
≠⍨
ist "nicht gleich sich selbst" - eine 8x8 All-Null-Matrix⊢,≠⍨,⌽,≠⍨
- Wenn die ursprüngliche Matrix istABC...
, gibt dieser Ausdruck Folgendes zurück:8 31⍴
Formt es von 8x32 auf 8x31 um und verwendet die Elemente in der Reihenfolge der Zeilenmotive:⊢,⍉,
Stellt die ursprüngliche Matrix und ihre Transponierung voran (zusätzliche Leerzeichen für mehr Klarheit):2<⌿0⍪
Fügt 0s oben hinzu und vergleicht<
jedes Element mit dem Element darunter, sodass wir in jeder vertikalen Gruppe von 1s eine 1 für die führende 1 erhalten und überall sonst 0s+⌿-⌈⌿
Die Summen pro Spalte minus die Maxima pro Spalte - wir berechnen die Anzahl der Lücken zwischen den 1-Gruppen in jeder Spalte, 0, wenn es keine gibt+/
Summequelle
Jelly ,
22 bis20 BytesProbieren Sie es online!
quelle
Retina 0.8.2 ,
6058 BytesProbieren Sie es online! Nimmt die Eingabe als 8 durch Kommas getrennte 8-stellige Binärzeichenfolgen an, aber der Header konvertiert das bereitgestellte Format für Sie. Erläuterung:
Erstellen Sie alle Teilzeichenfolgen des Boards, beginnend mit einer Dame. Fügen Sie jedem Teilstring einen Markierungswert hinzu. Bearbeiten: 2 Bytes wurden gespeichert, indem einige Müllstrings zurückgelassen wurden. diese werden effektiv ignoriert.
Teilen Sie jeden Marker in einen inklusiven Bereich auf und addieren Sie 7 zu den Nicht-Null-Elementen.
Löschen Sie jede Zeichenfolge, die der Länge des Markers entspricht. Dies entspricht dem Finden jedes Ost-, Südwest-, Süd- oder Südoststrahls von jeder Königin.
Zähle alle Strahlen, die durch mindestens ein leeres Feld gehen, bevor du eine andere Königin triffst.
quelle
JavaScript (ES6) + SnakeEx , 38 Byte
Übernimmt Eingaben in das Formular
'10111000\n10101011\n10101101\n01010100\n01100101\n10001000\n01000111\n01110101'
. Es stellt sich heraus, dass SnakeEx auch außerhalb seiner ursprünglichen Herausforderung verwendet werden kann!quelle
K (ngn / k) , 45 Bytes
Probieren Sie es online!
quelle