Bei einer Reihe von Zahlen mit length >=3
undlength % 3 == 0
[1, 2, 3, 4, ...]
Sie werden es in Sub-Arrays der Länge 3 aufteilen
[[1, 2, 3], [4, 5, ...], [...
Und ein Array mit zurückgeben
- [0] => Die Anzahl der Fälle im Unterarray, in denen alle Zahlen gleich sind
- [1] => Falls nicht alle Zahlen im Sub-Array gleich sind, die Anzahl der Fälle im Sub-Array, in denen nur 2 Zahlen gleich sind
Beispiel- und Testfälle:
- Eingabe:
[2, 4, 2, 5, 5, 5, 4, 2, 1, 3, 3, 1]
Ausgabe[1, 2]
Das ist weil
[[2, 4, 2], [5, 5, 5], [4, 2, 1], [3, 3, 1]]
^ ^ ^ ^ ^ ^ ^
equal all equal equal
also 2 equal
und 1all equal
[3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3] => [1, 3]
[3,3,3,4,4,4,5,5,5,6,6,6,5,4,3] => [4, 0]
[3,4,5,6,7,8,9,8,7,6,5,4,3,2,1] => [0, 0]
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
PD: Entschuldigung für mein Englisch.
code-golf
array-manipulation
Luis Felipe De Jesus Munoz
quelle
quelle
Antworten:
Oktave ,
605250 BytesProbieren Sie es online!
8 Bytes gespart dank Luis!
Erläuterung:
Formt die Eingabe in eine Matrix mit 3 Zeilen und der entsprechenden Anzahl von Spalten um. Anschließend werden die einzelnen Spalten sortiert und der Unterschied zwischen den Elementen in verschiedenen Zeilen berechnet. Dies ergibt eine Matrix mit zwei Zeilen, wobei identische Zahlen eine Null und verschiedene Zahlen eine positive Zahl haben. Dies wird negiert, so dass alle gleichen Elemente gleich
1
und alle ungleich sind0
. Wir haben dann jede dieser Spalten summieren, uns eine der drei Alternativen geben:0 = All elements are unequal
,1 = Two elements are equal
und2 = All elements are equal
. Wir überprüfen dann, wie viele>1
und wie viele genau sind==1
.quelle
JavaScript (ES6), 70 Byte
Probieren Sie es online!
Wie?
Wir extrahieren rekursiv jedes Triplett [a, b, c] aus dem Eingabearray und aktualisieren zwei Zähler t (Drei-von-einer-Art) und p (Paar) unter Verwendung der folgenden Formel:
Es gibt 5 mögliche Fälle, die im Folgenden beschrieben werden, von "alle gleich" bis "alle verschieden".
quelle
[0]
und[1]
Indizes haben kann "Hinweis:[0]
[1]
[2]
Gibt ein 3-Elemente-Array mit und die entsprechenden Werte und einen Dummy-Wert (die Anzahl der 3-Listen ohne gemeinsame Elemente) zurück. Dies gilt gemäß die aktuellen Regeln. " codegolf.stackexchange.com/a/166082/31257 62 Bytesa=>a.map(_=>++r[--new Set(a.slice(i,i+=3)).size],r=[i=0,i])&&r
Pyth,
13141211 BytesProbieren Sie es hier aus
Erläuterung
quelle
05AB1E , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
ok ,
1716 bytesProbieren Sie es online!
Für k , ist die 17 - Byte - Version:
+/(1 2=#=:)'0N 3#
.quelle
0N 3
->0N3
(dank einer parsing seltsamkeit in ok)R , 70 Bytes
Probieren Sie es online!
Vorherige Versionen :
R 82 Bytes
Probieren Sie es online!
R 93 Bytes
Probieren Sie es online!
quelle
a=!1:2
etwas kürzer.seq(0,a=v)
statt0:(length(v)-1)
;) Leider weiß ich nicht , Oktave , damit ich nicht so leicht , dass die Antwort lesen ...apply
ing,unique
aber es schlägt für den dritten Testfall fehl. Ihrby
Ansatz ist sichererJava (JDK 10) , 116 Byte
Probieren Sie es online!
Hinweis: gibt eine 3-Elemente - Array mit
[0]
und[1]
tH geeignete Werte zurückkehrt, und[2]
einen Dummy - Wert zurückkehrt (die Anzahl der 3-Listen ohne Elemente gemeinsam). Dies gilt in vollem Umfang nach den aktuellen Regeln.quelle
PowerShell , 106 Byte
Probieren Sie es online!
Genau das, was es verspricht. Schleifen über Eingang
$a
. Jede Iteration löst sich$x,$y,$z
als die nächsten drei Elemente ab. Prüftif
, ob sie alle gleich sind und wenn ja, inkrementiert$i
.Else
, erhöht sich,$j
wenn mindestens ein Paar gleich ist. Sobald die Schleife abgeschlossen ist, wird ausgegeben$i
und$j
als Ganzzahl ausgegeben .Also ... viele ... Dollar ...
quelle
Retina 0.8.2 , 68 Bytes
Probieren Sie es online! Link enthält Testfälle mit Header zum Konvertieren in das gewünschte Format mit einem Wert pro Zeile. Erläuterung:
Sammeln Sie drei Werte in jeder Zeile mit Trennzeichen und duplizieren Sie den ersten am Ende.
Zählen Sie die Anzahl der Duplikatpaare.
Zähle die Anzahl von
3
s und1
s.quelle
Gelee ,
98 Bytes-1 danke an Dennis (benutze einen neuen Alias für
L€
,Ẉ
)Probieren Sie es online!
quelle
Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Common Lisp, 113 Bytes
Probieren Sie es online!
Verwendet die Tatsache, dass in Common Lisp
(= x y z)
true ergibt, wenn alle drei Elemente gleich sind, und(/= x y z)
true ergibt, wenn kein Zahlenpaar gleich ist.quelle
Japt,
1413 BytesVersuch es
Erläuterung
quelle
Python 2 ,
777265 BytesProbieren Sie es online!
7 Bytes gespeichert durch einen cleveren Trick von xnor
quelle
zip(*[iter(a)]*3)
.Netzhaut , 23 Bytes
Probieren Sie es online!
Erläuterung
Teilen Sie die Eingabe ab der (0-basierten) 2. Stelle an jeder 3. Stelle auf, dh teilen Sie die Eingabe in Dreiergruppen auf.
%
Zählen Sie in jeder Zeile ( ) die Anzahl (C
) der eindeutigen (q
) Werte (\S+
).Zählen Sie die Anzahl der
1
s und drucken Sie sie mit einem nachgestellten Zeilenvorschub (\
), aber im Probelauf ( ),*
damit wir das vorherige Ergebnis nicht verlieren.Zählen Sie die Anzahl der
2
s (und drucken Sie sie automatisch aus).quelle
J ,
16-15Bytes-1 Byte danke an Cole!
Probieren Sie es online!
Ziemlich der gleiche Ansatz wie bei den meisten Lösungen.
Erläuterung:
quelle
#@~.
->#@=
Japt ,
2419 BytesProbieren Sie es online!
quelle
Stax , 14 Bytes
Führen Sie es aus und debuggen Sie es
quelle
[3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3]
Ausgänge[2,3]
stattdessen[1,3]
[3,3,3,4,4,4,5,5,5,6,6,6,5,4,3]
Ausgänge[1,0]
stattdessen[4,0]
[3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]
Ausgänge[5,0]
stattdessen[0,0]
[1,1,1]
. Wenn Sie2(
stattdessen verwenden1T
, wird das Pad immer exakt auf Größe 2Haskell , 90 Bytes
Probieren Sie es online!
Sieht etwas umständlich aus ...
quelle
Wolfram-Sprache (Mathematica) , 49 Bytes
Zwei Bytes gespart dank Martin Ender.
Probieren Sie es online!
quelle
Elixier , 92 Bytes
Teilen Sie die Liste zunächst in die Länge 3 auf
chunk(a,3)
Zweitens konvertiert es die Länge jedes Elements, und zwar einheitlich.
map chunk(a,3),&(length uniq&1)
.Schließlich wird ein Array zurückgegeben, das aus der Häufigkeit, mit der die resultierende Liste eins ist,
count(c,&(&1==1))
und der Häufigkeit, mit der die resultierende Liste zwei ist, bestehtcount(c,&(&1==2))
.Probieren Sie es online!
quelle
Prolog (SWI) , 80 Bytes
Probieren Sie es online!
quelle
Tcl , 111 Bytes
Probieren Sie es online!
Tcl , 112 Bytes
Probieren Sie es online!
Tcl , 114 Bytes
Probieren Sie es online!
quelle
Ruby , 59 Bytes
Probieren Sie es online!
quelle
Tcl , 98 Bytes
Probieren Sie es online!
mit
-unique
Option deslsort
Befehls. Ich habe1
und2
meine Variablen aus Bequemlichkeitsgründen benannt, es scheint ziemlich ungewöhnlich zu sein, sie zu codierenset 1 0
:)quelle
C # (Visual C # Interactive Compiler) , 108 Byte
Probieren Sie es online!
Weniger golfen ...
quelle