Bei einem nicht leeren rechteckigen Array von Ganzzahlen von 0
bis 9
wird die Anzahl der Zellen ausgegeben, die 8
einen Nachbarn haben oder nicht 8
. Unter Nachbarn wird hier der Moore-Sinn verstanden , also auch Diagonalen. Jede Zelle hat also 8
Nachbarn, mit Ausnahme der Zellen an den Rändern des Arrays.
Zum Beispiel angesichts der Eingabe
8 4 5 6 5
9 3 8 4 8
0 8 6 1 5
6 7 9 8 2
8 8 7 4 2
die Ausgabe sollte sein 3
. Die drei qualifizierenden Zellen wären die folgenden, mit einem Sternchen gekennzeichneten (es sollte jedoch nur die Anzahl solcher Einträge ausgegeben werden):
* 4 5 6 5
9 3 8 4 *
0 8 6 1 5
6 7 9 * 2
8 8 7 4 2
Zusätzliche Regeln
Sie können optional zwei Zahlen verwenden, um die Größe des Arrays als zusätzliche Eingabe zu definieren.
Die Eingabe kann auf jede vernünftige Weise erfolgen . Das Format ist wie gewohnt flexibel. Beispielsweise kann es sich um ein 2D-Zeichenfeld oder eine Liste mit Zahlenlisten oder eine flache Liste handeln.
Programme oder Funktionen sind in jeder Programmiersprache zulässig . Standardlücken sind verboten.
Kürzester Code in Bytes gewinnt.
Testfälle
Eingang:
8 4 5 6 5 9 3 8 4 8 0 8 6 1 5 6 7 9 8 2 8 8 7 4 2
Ausgabe:
3
Eingang
8 8 2 3
Ausgabe:
0
Eingang:
5 3 4 2 5 2
Ausgabe:
0
Eingang:
5 8 3 8
Ausgabe:
2
Eingang:
8 0 8
Ausgang:
2
.Eingang:
4 2 8 5 2 6 1 8 8 5 5 8
Ausgabe:
1
Eingang:
4 5 4 3 8 1 8 2 8 2 7 7 8 3 9 3 9 8 7 8 5 4 2 8 4 5 0 2 1 8 6 9 1 5 4 3 4 5 6 1
Ausgabe
3
.Eingang:
8
Ausgabe:
1
Eingang:
8 5 8 1 6 8 7 7 9 9 2 8 2 7 8 3 2 8 4 9 7 3 2 7 9 2 9 7 1 9 5 6 6 9 8 7 3 1 5 2 1 9 9 7 1 8 8 2 3 5 6 8 1 4 7 5
Ausgang:
4
.Eingang:
8 1 8 2 5 7 8 0 1
Ausgang:
3
.
Eingaben im MATLAB-Format:
[8 4 5 6 5; 9 3 8 4 8; 0 8 6 1 5; 6 7 9 8 2; 8 8 7 4 2]
[8 8; 2 3]
[5 3 4; 2 5 2]
[5 8 3 8]
[8; 0; 8]
[4 2 8 5; 2 6 1 8; 8 5 5 8]
[4 5 4 3 8 1 8 2; 8 2 7 7 8 3 9 3; 9 8 7 8 5 4 2 8; 4 5 0 2 1 8 6 9; 1 5 4 3 4 5 6 1]
[8]
[8 5 8 1 6 8 7 7; 9 9 2 8 2 7 8 3; 2 8 4 9 7 3 2 7; 9 2 9 7 1 9 5 6; 6 9 8 7 3 1 5 2; 1 9 9 7 1 8 8 2; 3 5 6 8 1 4 7 5]
[8 1 8; 2 5 7; 8 0 1]
Eingaben im Python-Format:
[[8, 4, 5, 6, 5], [9, 3, 8, 4, 8], [0, 8, 6, 1, 5], [6, 7, 9, 8, 2], [8, 8, 7, 4, 2]]
[[8, 8], [2, 3]]
[[5, 3, 4], [2, 5, 2]]
[[5, 8, 3, 8]]
[[8], [0], [8]]
[[4, 2, 8, 5], [2, 6, 1, 8], [8, 5, 5, 8]]
[[4, 5, 4, 3, 8, 1, 8, 2], [8, 2, 7, 7, 8, 3, 9, 3], [9, 8, 7, 8, 5, 4, 2, 8], [4, 5, 0, 2, 1, 8, 6, 9], [1, 5, 4, 3, 4, 5, 6, 1]]
[[8]]
[[8, 5, 8, 1, 6, 8, 7, 7], [9, 9, 2, 8, 2, 7, 8, 3], [2, 8, 4, 9, 7, 3, 2, 7], [9, 2, 9, 7, 1, 9, 5, 6], [6, 9, 8, 7, 3, 1, 5, 2], [1, 9, 9, 7, 1, 8, 8, 2], [3, 5, 6, 8, 1, 4, 7, 5]]
[[8, 1, 8], [2, 5, 7], [8, 0, 1]]
Ausgänge:
3, 0, 0, 2, 2, 1, 3, 1, 4, 3
quelle
Antworten:
MATL ,
211710 BytesProbieren Sie es online!
Vielen Dank an Luis Mendo für die Hilfe im Chat und für die Anregung der 2D-Faltung.
Erläuterung:
quelle
R ,
117 6359 BytesProbieren Sie es online!
dist
berechnet Abstände (Standard ist Euklidisch) zwischen Zeilen einer Matrix.which
mit zweitem Argument werdenTRUE
die Koordinaten zurückgegeben, bei denen das Prädikat wahr ist.Koordinaten sind Nachbarn, wenn der Abstand zwischen ihnen nicht mehr als die Quadratwurzel von 2 ist, sondern die innere
<2
ist gut genug, weil der mögliche Abstand vonsqrt(2)
ro springt2
.quelle
colSums()^2<=2
funktioniert.sqrt(2)
Sprünge zu2
(zBsort(c(dist(expand.grid(1:6,1:6))), decreasing = TRUE))
) also waren wir dort zu schlau.APL (Dyalog Classic) ,
292825 BytesProbieren Sie es online!
quelle
1
(außer nicht explizit festgelegt). Das macht Sinn.Jelly ,
18-15BytesProbieren Sie es online!
Wie es funktioniert
Vorherige Lösung, 18 Bytes
Probieren Sie es online!
Wollte einen anderen Ansatz teilen, obwohl dies 1 Byte länger ist als die Lösung von Jonathan Allan .
Wie es funktioniert
quelle
JavaScript (Node.js) ,
88-85ByteProbieren Sie es online!
Danke Arnauld für 2 Bytes
quelle
J ,
43, 4037 Bytes-3 Bytes dank Bubbler
Probieren Sie es online!
Erläuterung:
Der erste Teil des Algorithmus stellt sicher, dass wir ein 3x3-Schiebefenster auf die Eingabe anwenden können. Dies wird erreicht, indem eine Reihe von Nullen und eine Drehung um 90 Grad vorangestellt werden, die viermal wiederholt wird.
quelle
@:
und bewegen|.
. Beachten Sie, dass@
anstelle von@:
nicht funktioniert.Retina 0.8.2 , 84 Bytes
Probieren Sie es online! Erläuterung:
Umbrechen Sie jede Zeile in Nicht-
8
Zeichen, so dass alle8
s mindestens ein Zeichen auf jeder Seite haben.Dies ist die letzte Stufe, daher ist das Zählen von Übereinstimmungen impliziert. Der
m
Modifikator bewirkt, dass die Zeichen^
und$
am Anfang oder Ende einer Zeile übereinstimmen.Entspricht keinem Zeichen direkt nach einer 8 oder ...
... ein Zeichen unter einer 8; das
(?(1).)^(?<-1>.)*
entspricht der gleichen Spalte wie¶(.)*
in der nächsten Zeile, aber das.?.?
erlaubt8
, dass 1 links oder rechts vom Zeichen nach dem.
in der nächsten Zeile steht.Spiel
8
s.Ordne keine 8 unmittelbar vor einer 8 zu, oder ...
... ein Zeichen mit einer 8 in der Zeile darunter; Auch hier
(?<-2>.)*$(?(2).)
stimmt der Wert mit der Spalte(.)*¶
in der vorherigen Zeile überein , jedoch darf der.?.?
Wert8
1 links oder rechts8
vor dem.
Wert in der vorherigen Zeile stehen.quelle
Gelee , 17 Bytes
Probieren Sie es online! Oder schauen Sie sich die Testsuite an .
Wie?
quelle
J, 42 Bytes
Probieren Sie es online!
Erläuterung
Der High-Level-Ansatz ähnelt dem in der klassischen APL-Lösung für das Spiel des Lebens verwendeten: https://www.youtube.com/watch?v=a9xAKttWgP4 .
In dieser Lösung verschieben wir unsere Matrix in die 8 möglichen Nachbarrichtungen, erstellen 8 Duplikate der Eingabe, stapeln sie und addieren dann die "Ebenen", um die Anzahl unserer Nachbarn zu ermitteln.
Hier verwenden wir einen "Multiplizieren mit Unendlich" -Trick, um die Lösung für dieses Problem anzupassen.
quelle
~
und zu entfernen>
Java 8,
181157156 Bytes-24 Bytes dank @ OlivierGrégoire .
Nimmt die Dimensionen als zusätzliche Parameter
R
(Anzahl der Zeilen) undC
(Anzahl der Spalten).Die Zellen werden ähnlich wie in meinem Fritteusensimulator überprüft Antwort .
Probieren Sie es online aus.
Erläuterung:
quelle
Python 2 , 130 Bytes
Probieren Sie es online!
quelle
Powershell, 121 Bytes
Weniger Golf-Testskript:
Ausgabe:
Erläuterung:
Zunächst berechnet das Skript die Länge der ersten Zeichenfolge.
Zweitens wird den Zeichenfolgen ein zusätzlicher Rahmen hinzugefügt. Augmended-
Reality-String gefällt:stellt die mehrzeilige Zeichenfolge dar:
Anmerkung 1: Die Anzahl
=
ist ausreichend für eine Zeichenkette beliebiger Länge.Anmerkung 2: eine große Anzahl von
=
wirkt sich nicht auf die Suche nach Acht aus.Als nächstes
(?<=[^8]{3}.{$l}[^8])8(?=[^8].{$l}[^8]{3})
sucht der reguläre Ausdruck nach der Ziffer8
mit den vorhergehenden Nicht-Achteln(?<=[^8]{3}.{$l}[^8])
und den folgenden Nicht-Achteln(?=[^8].{$l}[^8]{3})
:Schließlich wird die Anzahl der Übereinstimmungen als Ergebnis zurückgegeben.
quelle
Gelee , 12 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6), 106 Byte
Probieren Sie es online!
Bitweiser Ansatz, 110 Bytes
Probieren Sie es online!
quelle
[[7]]
Clojure ,
227198 BytesAutsch. Auf keinen Fall die kürzeste hier. 54 Bytes in Klammern sind Killer. Ich bin trotzdem relativ zufrieden damit.
-29 Bytes durch eine Hilfsfunktion zu schaffen , die einen Bereich erzeugt , da ich das zweimal tun wurde der Wechsel
reduce
zu einem(count (filter
Setup geändert und das Threading-Makro nach dem Golfen entfernt hat.Woher
test-cases
ist ein Array, das alle "Python-Testfälle" enthält?Probieren Sie es online!
quelle