Podano tablicę liczb za pomocą length >=3
ilength % 3 == 0
[1, 2, 3, 4, ...]
Podzielisz go na pod-tablice o długości 3
[[1, 2, 3], [4, 5, ...], [...
I zwróć tablicę za pomocą
- [0] => Liczba obserwacji w pod-macierzy, w której wszystkie liczby są równe
- [1] => W przypadku, gdy wszystkie liczby w pod-macierzy nie są równe, liczba przypadków w pod-macierzy, w której tylko 2 liczby są równe
Przykłady i przypadki testowe:
- Wejście:
[2, 4, 2, 5, 5, 5, 4, 2, 1, 3, 3, 1]
wyjście[1, 2]
To dlatego, że
[[2, 4, 2], [5, 5, 5], [4, 2, 1], [3, 3, 1]]
^ ^ ^ ^ ^ ^ ^
equal all equal equal
więc 2 equal
i 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]
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
PD: Przepraszam za mój angielski.
code-golf
array-manipulation
Luis Felipe De Jesus Munoz
źródło
źródło
Odpowiedzi:
Oktawa ,
605250 bajtówWypróbuj online!
Zaoszczędź 8 bajtów dzięki Luisowi!
Wyjaśnienie:
Przekształca dane wejściowe w macierz z 3 wierszami i odpowiednią ilością kolumn. Następnie sortuje każdą z kolumn i oblicza różnicę między elementami w różnych wierszach. Daje to macierz z dwoma rzędami, w których identyczne liczby będą miały zero, a różne liczby będą miały liczbę dodatnią. Jest to negowane, tak że wszystkie równe elementy są
1
i wszystkie są nierówne0
. Następnie sumują każdej z tych kolumn, dając nam jedną z trzech możliwości:0 = All elements are unequal
,1 = Two elements are equal
i2 = All elements are equal
. Następnie sprawdzamy, ile ich jest>1
i ile dokładnie==1
.źródło
JavaScript (ES6), 70 bajtów
Wypróbuj online!
W jaki sposób?
Rekurencyjnie wyodrębniamy każdą tryplet [a, b, c] z tablicy wejściowej i aktualizujemy dwa liczniki t (trójka) i p (para), stosując następujący wzór:
Istnieje 5 możliwych przypadków, które są wyszczególnione poniżej, od „wszystkich równych” do „wszystkich odrębnych”.
źródło
[0]
i[1]
indeksuje "Uwaga: zwraca tablicę 3-elementową z[0]
i[1]
zwracając odpowiednie wartości oraz[2]
zwracając wartość fikcyjną (liczbę 3 list bez wspólnych elementów). Jest to całkowicie poprawne zgodnie z obecne zasady ”. codegolf.stackexchange.com/a/166082/31257 62 bajtya=>a.map(_=>++r[--new Set(a.slice(i,i+=3)).size],r=[i=0,i])&&r
Pyth,
13141211 bajtówWypróbuj tutaj
Wyjaśnienie
źródło
05AB1E , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
ok ,
1716 bajtówWypróbuj online!
Dla k , wersja 17 bajtów wynosi:
+/(1 2=#=:)'0N 3#
.źródło
0N 3
->0N3
(dzięki parsowaniu osobliwości w OK)R , 70 bajtów
Wypróbuj online!
Poprzednie wersje :
R , 82 bajty
Wypróbuj online!
R , 93 bajty
Wypróbuj online!
źródło
a=!1:2
jest nieco krótsze.seq(0,a=v)
zamiast tego zaoszczędziłem 5 innych bajtów0:(length(v)-1)
;) Niestety nie znam oktawy, więc nie mogę łatwo odczytać tej odpowiedzi ...apply
INGunique
ale nie dla trzeciego przypadku testowego. Twojeby
podejście jest bezpieczniejszeJava (JDK 10) , 116 bajtów
Wypróbuj online!
Uwaga: zwraca się układ 3-elementy z
[0]
i[1]
powrocie th odpowiednie wartości i[2]
zwracania wartości obojętne (numer 3 listach bez elementów wspólnych). Jest to całkowicie ważne zgodnie z obowiązującymi przepisami.źródło
PowerShell , 106 bajtów
Wypróbuj online!
Dokładnie to, co jest napisane na puszce. Pętle nad wejściem
$a
. Każda iteracja złuszcza się$x,$y,$z
jako kolejne trzy elementy. Testyif
są równe, a jeśli tak, przyrosty$i
.Else
, zwiększa,$j
jeśli co najmniej jedna para jest równa. Po zakończeniu pętli, wyjście$i
i$j
jako liczby całkowite.Więc ... wiele ... dolarów ...
źródło
Retina 0.8.2 , 68 bajtów
Wypróbuj online! Link zawiera przypadki testowe z nagłówkiem do konwersji na pożądany format jednej wartości na linię. Wyjaśnienie:
Zbierz trzy wartości w każdym wierszu z separatorami i zduplikuj pierwszą na końcu.
Policz liczbę par duplikatów.
Policzyć
3
s i1
s.źródło
Galaretka ,
98 bajtów-1 dzięki Dennisowi (użyj nowego aliasu dla
L€
,Ẉ
)Wypróbuj online!
źródło
Stax , 8 bajtów
Uruchom i debuguj
źródło
Common Lisp, 113 bajtów
Wypróbuj online!
Wykorzystano fakt, że w Common Lisp
(= x y z)
daje wartość true, jeśli wszystkie trzy elementy są równe, i(/= x y z)
daje wartość true, jeśli żadna para liczb nie jest równa.źródło
Japt,
1413 bajtówSpróbuj
Wyjaśnienie
źródło
Python 2 ,
777265 bajtówWypróbuj online!
7 bajtów zapisanych dzięki sprytnej sztuczce xnor
źródło
zip(*[iter(a)]*3)
.Siatkówka , 23 bajty
Wypróbuj online!
Wyjaśnienie
Podziel dane wejściowe co 3 spacje, zaczynając od (opartej na 0) drugiej, tzn. Podziel dane wejściowe na trzyosobowe grupy.
W każdym wierszu (
%
) policz liczbę (C
) unikalnych (q
) wartości (\S+
).Policz liczbę
1
s i wydrukuj je za pomocą końcowego linefeed (\
), ale zrób to w suchym biegu (*
), aby nie stracić poprzedniego wyniku.Policz liczbę
2
s (i wydrukuj je automatycznie).źródło
J ,
1615 bajtów-1 bajt dzięki Cole!
Wypróbuj online!
Prawie takie samo podejście jak większość rozwiązań.
Wyjaśnienie:
źródło
#@~.
->#@=
Japt ,
2419 bajtówWypróbuj online!
źródło
Stax , 14 bajtów
Uruchom i debuguj
źródło
[3,5,6,5,5,7,6,6,8,7,7,7,3,4,2,4,4,3]
Wyjścia[2,3]
zamiast[1,3]
[3,3,3,4,4,4,5,5,5,6,6,6,5,4,3]
Wyjścia[1,0]
zamiast[4,0]
[3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]
Wyjścia[5,0]
zamiast[0,0]
[1,1,1]
. Jeśli użyjesz2(
zamiast1T
tego zawsze przycina / pad do dokładnie rozmiaru 2.Haskell , 90 bajtów
Wypróbuj online!
Wygląda trochę niezręcznie ...
źródło
Wolfram Language (Mathematica) , 49 bajtów
Zaoszczędzono dwa bajty dzięki Martinowi Enderowi.
Wypróbuj online!
źródło
Eliksir , 92 bajty
Najpierw dzieli listę na długość 3
chunk(a,3)
Po drugie, konwertuje znalezione długości każdego elementu, zunifikowane;
map chunk(a,3),&(length uniq&1)
.Na koniec zwraca tablicę składającą się z liczby przypadków, gdy wynikowa lista jest równa jeden,
count(c,&(&1==1))
oraz liczby razy, gdy wynikowa lista jest równa dwacount(c,&(&1==2))
.Wypróbuj online!
źródło
Prolog (SWI) , 80 bajtów
Wypróbuj online!
źródło
Tcl , 111 bajtów
Wypróbuj online!
Tcl , 112 bajtów
Wypróbuj online!
Tcl , 114 bajtów
Wypróbuj online!
źródło
Ruby , 59 bajtów
Wypróbuj online!
źródło
Tcl , 98 bajtów
Wypróbuj online!
za pomocą
-unique
opcjilsort
polecenia. Dla wygody wymieniłem nazwy1
i2
zmienne, choć kodowanie wydaje się dość niezwykłeset 1 0
:)źródło
C # (interaktywny kompilator Visual C #) , 108 bajtów
Wypróbuj online!
Mniej golfa ...
źródło