Otrzymujesz macierz liczb całkowitych n -m-m , gdzie n, m> 3 . Twoim zadaniem jest znalezienie podmacierzy 3 na 3 o najniższej średniej i wygenerowanie tej wartości.
Zasady i wyjaśnienia:
- Liczby całkowite będą nieujemne
- Opcjonalny format wejściowy i wyjściowy
- Dane wyjściowe muszą być dokładne z dokładnością do co najmniej 2 miejsc po przecinku (jeśli nie jest liczbą całkowitą)
- Podmacierze muszą składać się z kolejnych wierszy i kolumn
Przypadki testowe:
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
Minimum mean: 14
100 65 2 93
3 11 31 89
93 15 95 65
77 96 72 34
Minimum mean: 46.111
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
Minimum mean: 1
4 0 0 5 4
4 5 8 4 1
1 4 9 3 1
0 0 1 3 9
0 3 2 4 8
4 9 5 9 6
1 8 7 2 7
2 1 3 7 9
Minimum mean: 2.2222
To jest golf golfowy, więc wygrywa najkrótszy kod w każdym języku. Zachęcam ludzi do publikowania odpowiedzi w językach, które są już używane, nawet jeśli nie są one krótsze niż pierwszy.
Odpowiedzi:
Oktawa, 30 bajtów
Wypróbuj online!
źródło
Galaretka ,
119 bajtówZaoszczędzono 2 bajty dzięki @ Dennis .
Wypróbuj online!
Wyjaśnienie
źródło
+3\⁺€F÷9Ṃ
oszczędza kilka bajtów.+3\
najpierw, a duplikat jako+3\€
? Nie spodziewałem się, że tak się stanie\
wyskakuje3
i+
przesuwa szybkie łącze+3\
,⁺
wyskakuje szybkie łącze i przesuwa dwie kopie, a następnie€
wyskakuje najwyższą kopię i przesyła wersję mapowania.Oktawa, 38 bajtów
źródło
MATL ,
139 bajtówPort odpowiedzi @ rahnema1 .
Wypróbuj online!
Jak to działa
Rozważ wejście
jako przykład.
źródło
Mathematica,
3735 bajtówDzięki @MartinEnder za 2 bajty!
Wyjaśnienie
źródło
Python 2 ,
93818079 bajtówWypróbuj online!
Jak to działa
f jest funkcją rekurencyjną, która pobiera listę krotek (lub dowolną inną iterowalną dwuwymiarową iterowalną reprezentującą macierz M ) i rekurencyjnie oblicza minimum średniej podmacierzy 3 × 3 w lewym górnym rogu i f stosuje rekurencyjnie do M bez pierwszy wiersz i M bez pierwszej kolumny.
f(M)
wykonuje następujące czynności.Jeśli M ma mniej niż trzy wiersze,
M[2:]
jest pustą listą, która zwraca f .Zauważ, że ponieważ n> 3 w pierwszym uruchomieniu, inicjał nie może zwrócić pustej listy.
Jeśli M ma trzy wiersze lub więcej,
M[2:]
jest niepuste, a zatem zgodne z prawdą, więc kod po prawej stronieand
zostanie wykonany, zwracając minimum trzy następujące wartości.M[:3]
zwraca pierwsze trzy wiersze M ,zip(*...)
transponuje wiersze i kolumny (uzyskując listę krotek),sum(...,())
konkatenuje wszystkie krotki (działa to, ponieważ+
jest konkatenacją) isum(...)/9
oblicza średnią z wynikowej listy dziewięciu liczb całkowitych.rekurencyjnie stosuje f do M z usuniętym pierwszym rzędem.
transponuje wiersze i kolumny, usuwa pierwszy wiersz wyniku (więc pierwsza kolumna M i rekurencyjnie stosuje f do wyniku.
Zauważ, że poprzednio usunięta warstwa w wywołaniu rekurencyjnym zawsze będzie wierszem, więc testuj, czy M ma wystarczającą liczbę wierszy, zawsze będzie wystarczające.
Wreszcie można się spodziewać, że powrót niektórych rekurencyjnych połączeń
[]
będzie problemem. Jednak w Pythonie 2 , za każdym razem, gdy n jest liczbą, a A jest iterowalną, porównanien < A
zwraca True , więc obliczenie minimum jednej lub więcej liczb i jednej lub więcej iteracji zawsze zwróci najniższą liczbę.źródło
J , 21 bajtów
Wypróbuj online!
Właściwym sposobem działania na podtablicach w J jest użycie trzeciej (
_3
) formy cięcia,;.
gdziex (u;._3) y
oznacza zastosowanie czasownikau
na każdej pełnej podtablicy rozmiarux
tablicyy
. Rozwiązanie, które wymaga tylko 1 bajtu więcej, ale będzie znacznie wydajniejsze na większych tablicach.Wypróbuj online!
Wyjaśnienie
źródło
[]
wyglądają, że są do siebie dopasowane, ale tak naprawdę nie są.[
lub|
:)Galaretka , 18 lat bajtów
Brakowało trik, stosowany przez mil na ich odpowiedź , z użyciem n-mądry kumulują zmniejszyć dodania - cała pierwsza linia może być zastąpiony
+3\
przez 11.Wypróbuj online!
Przechodzi przez wszystkie sąsiednie podlisty, filtry, aby zachować tylko te o długości 3 i sumy (które wektoryzuje), a następnie powtarza się dla każdej wynikowej listy, aby uzyskać sumy wszystkich podmacierzy 3 na 3, a na koniec spłaszcza je w jedną listę, przyjmuje minimum i dzieli przez 9 (liczba elementów tworzących tę minimalną sumę).
źródło
Pyth, 19 bajtów
Program, który pobiera dane z listy list i drukuje wynik.
Zestaw testowy
Jak to działa
[Wyjaśnienie nastąpi później]
źródło
Python 3 ,
111103 bajtówWypróbuj online!
źródło
Python 2, 96 bajtów
Przypadki testowe w Repl.it
Nienazwana funkcja zajmująca listę list,
a
- wiersze macierzy.Funkcja pomocnika
h
przesuwa się przez trzy sąsiednie wycinki i odwzorowuje funkcję sumy na transpozycję,zip(*s)
każdego z nich. Powoduje to zsumowanie wszystkich wysokości trzech plasterków pojedynczych kolumn.Nienazwana funkcja wywołuje funkcję pomocnika, transponuje i ponownie wywołuje funkcję pomocnika w wyniku, a następnie znajduje minimum każdego z nich i minimum wyniku, które następnie dzieli,
9.
aby uzyskać średnią.źródło
JavaScript (ES6),
1079896 bajtówFunkcja, która oblicza sumy trojaczków nad wierszami, a następnie wywołuje się, aby zrobić to samo w kolumnach, śledząc minimalną wartość
M
.JS jest trochę gadatliwy dla tego rodzaju rzeczy i nie ma natywnego
zip()
metody. Zajęło mi sporo czasu, aby zaoszczędzić zaledwie kilkanaście bajtów dzięki bardziej naiwnemu podejściu. (Jednak prawdopodobnie istnieje krótsza metoda).Wersja nierekurencyjna, 103 bajty
Zapisano 2 bajty za pomocą Neila
Przypadki testowe
Pokaż fragment kodu
źródło
(a,b=a.map(g=a=>a.slice(2).map((e,i)=>a[i]+a[i+1]+e)))=>eval(`Math.min(${b[0].map((_,i)=>g(b.map(a=>a[i])))})`)/9
m=>m.map((r,y)=>r.map((v,x)=>[..."12345678"].map(i=>v+=(m[y+i/3|0]||[])[x+i%3])&&(M=v<M?v:M)),M=1/0)&&M/9
, chociaż myślę, że moja pierwsza próba była większa.m=>m.map((r,y)=>y>1&&r.map((v,x)=>[..."12345678"].map(i=>v+=m[y-i%3][x+i/3|0])&&(M=v<M?v:M)),M=1/0)&&M/9
.m=>m.map((r,y)=>y>1?r.map((v,x)=>[..."12345678"].map(i=>v+=m[y-i%3][x+i/3|0])&&(M=v<M?v:M)):M=1/0)&&M/9
05AB1E ,
2116 bajtówWypróbuj online!
Wyjaśnienie
źródło
Haskell , 87 bajtów
Wypróbuj online!
źródło