Einführung
Für die Zwecke dieser Herausforderung definieren wir die Nachbarn eines Elements in einer quadratischen Matrix (so dass ) als alle Einträge von , die unmittelbar diagonal, horizontal oder vertikal an angrenzen (dh sie "umgeben" , ohne sich zu wickeln).
Für Pedanten eine formale Definition der Nachbarn von für eineMatixist (0-indiziert):
Nehmen wir an, das Element am Index lebt in Feindseligkeit, wenn es allen seinen Nachbarn gemeinsam ist ). Leider kann dieser arme Eingang nicht einmal eine Tasse Zucker von seinen unhöflichen Anwohnern in der Nähe ausleihen ...
Aufgabe
Genug Geschichten: Geben Sie bei einer quadratischen Matrix positiver Ganzzahlen eine der folgenden Optionen aus:
- Eine flache Liste von Elementen (dedupliziert oder nicht), die alle Einträge angeben, die einige Indizes in belegen so dass die Nachbarn feindlich sind.M N i ,
- Eine boolesche Matrix mit s an Positionen, an denen die Nachbarn feindlich eingestellt sind, und ansonsten (Sie können anstelle von und andere konsistente Werte wählen ).0 0 1
- Die Liste der Indexpaare , die feindliche Nachbarschaften darstellen.
Referenzimplementierung in Physica - unterstützt die Python- Syntax auch für E / A. Sie können Eingaben und Ausgaben über jede Standardmethode und in jedem vernünftigen Format vornehmen, wobei zu beachten ist, dass diese Lücken standardmäßig verboten sind. Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes (in jeder Sprache)!
Darüber hinaus können Sie auch die Matrixgröße als Eingabe und zusätzlich die Matrix als flache Liste verwenden, da sie immer quadratisch ist.
Beispiel
Betrachten Sie die folgende Matrix:
Die entsprechenden Nachbarn jedes Elements sind:
i j – E -> Neighbours | All coprime to E?
|
0 0 – 64 -> {10; 27; 22} | False
0 1 – 10 -> {64; 14; 27; 22; 32} | False
0 2 – 14 -> {10; 22; 32} | False
1 0 – 27 -> {64; 10; 22; 53; 58} | True
1 1 – 22 -> {64; 10; 14; 27; 32; 53; 58; 36} | False
1 2 – 32 -> {10; 14; 22; 58; 36} | False
2 0 – 53 -> {27; 22; 58} | True
2 1 – 58 -> {27; 22; 32; 53; 36} | False
2 2 – 36 -> {22; 32; 58} | False
Und daher muss die Ausgabe eine der folgenden sein:
{27; 53}
{{0; 0; 0}; {1; 0; 0}; {1; 0; 0}}
{(1; 0); (2; 0)}
Testfälle
Input –> Version 1 | Version 2 | Version 3
[[36, 94], [24, 69]] ->
[]
[[0, 0], [0, 0]]
[]
[[38, 77, 11], [17, 51, 32], [66, 78, 19]] –>
[38, 19]
[[1, 0, 0], [0, 0, 0], [0, 0, 1]]
[(0, 0), (2, 2)]
[[64, 10, 14], [27, 22, 32], [53, 58, 36]] ->
[27, 53]
[[0, 0, 0], [1, 0, 0], [1, 0, 0]]
[(1, 0), (2, 0)]
[[9, 9, 9], [9, 3, 9], [9, 9, 9]] ->
[]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]] ->
[1, 1, 1, 1, 1, 1, 1, 1, 1] or [1]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[[35, 85, 30, 71], [10, 54, 55, 73], [80, 78, 47, 2], [33, 68, 62, 29]] ->
[71, 73, 47, 29]
[[0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]
[(0, 3), (1, 3), (2, 2), (3, 3)]
quelle
Antworten:
APL (Dyalog) , 17 Bytes
Probieren Sie es online aus! (Dank an ngn für die Übersetzung der Testfälle in APL)
Kurze Erklärung
(×/∘,↓)⌺3 3
erhält das Produkt jedes Elements mit seinen Nachbarn.Dann dividiere ich durch das Argument
÷⊢
, so dass jeder Eintrag in der Matrix dem Produkt seiner Nachbarn zugeordnet wurde.Schließlich nehme ich die gcd des Arguments mit dieser Matrix
⊢∨
und überprüfe die Gleichheit mit 1,1=
Beachten Sie, dass dies wie bei der Antwort von ngn bei einigen Eingaben aufgrund eines Fehlers im Interpreter fehlschlägt.
quelle
JavaScript (ES6), 121 Byte
Gibt eine Matrix von Booleschen Werten zurück, wobei false feindlich bedeutet.
Probieren Sie es online aus!
Wie?
Die Methode zur Isolierung der 8 Nachbarn jeder Zelle ähnelt der hier beschriebenen .
Kommentiert
quelle
MATL , 22 Bytes
Eingabe ist eine Matrix. Ausgabe sind alle Zahlen mit feindlichen Nachbarn.
Probieren Sie es online aus! Oder überprüfen Sie alle Testfälle .
Erklärung mit Beispiel
Betrachten Sie die Eingabe
[38, 77, 11; 17, 51, 32; 66, 78, 19]
als Beispiel. Der Stapelinhalt wird von unten nach oben angezeigt.quelle
APL (Dyalog Classic) ,
2322 Bytes-1 Byte dank @ H.PWiz
Probieren Sie es online aus!
unterstützt keine Matrizen kleiner als 3x3 aufgrund eines Fehlers im Interpreter
quelle
(⊃∨⊢)
->∨∘⊂⍨
Ich denkeGelee , 24 Bytes
Hmm, scheint lang.
Ein monadischer Link, der eine Liste von Listen positiver Ganzzahlen akzeptiert, die eine Liste aller Werte zurückgibt, die sich in feindlichen Nachbarschaften befinden (Version 1 ohne Deduplizierung).
Probieren Sie es online aus! Oder sehen Sie sich eine Testsuite an .
Wie?
quelle
Python 2 ,
182177166 BytesProbieren Sie es online aus!
Gibt eine Liste von Listen mit True / False-Einträgen aus.
quelle
Haskell , 95 Bytes
Probieren Sie es online aus!
Die Funktion verwendet
?
die Matrixm
als Liste von Listen und die Matrixgrößen
. es gibt die Liste der Einträge in Feindseligkeit zurück .quelle