Wyzwanie
Biorąc pod uwagę siatkę liczb (10 <= N <= 99) Zwróć liczbę z najwyższą sumą czterech liczb sąsiadujących z nią; to są liczby powyżej, poniżej, po prawej i lewej stronie liczby, ale nie sama.
- Sama liczba się nie liczy, tylko jej czterej sąsiedzi.
- Liczbę na krawędzi należy traktować tak, jakby brakująca liczba to 0.
- Zaprojektuję test, aby uniknąć powiązań.
- Liczby się nie powtarzają.
- To jest golf golfowy .
Przykład
Dany
56 98 32 96
12 64 45 31
94 18 83 71
Powrót
18
Prawdziwy test
Dany
98 95 67 66 57 16 40 94 84 37
87 14 19 34 83 99 97 78 50 36
18 44 29 47 21 86 24 15 91 61
60 41 51 26 10 58 11 62 55 71
42 85 56 12 46 81 93 65 49 77
89 13 74 39 54 76 92 33 82 90
96 88 70 79 80 28 25 20 75 68
38 63 17 72 53 48 73 30 45 69
64 35 32 31 23 43 22 52 27 59
Powrót
13
Dany
82 43 79 81 94 36 17 64 58
24 52 13 87 70 18 28 61 69
16 99 75 21 50 44 89 90 51
49 80 63 31 54 65 41 55 38
67 91 76 78 23 86 83 14 73
46 68 62 77 34 48 20 74 10
33 35 26 97 59 66 25 37 32
12 92 84 27 85 56 22 40 45
96 15 98 53 39 30 88 71 29
60 42 11 57 95 19 93 72 47
Powrót
15
Odpowiedzi:
MATL ,
20151312 bajtówZaoszczędzono 5 bajtów dzięki Emignie, 2 dzięki Giuseppe i kolejne dzięki Luisowi Mendo.
Wypróbuj online!
Wyjaśnienie
źródło
APL (Dyalog Unicode) ,
3127262423 bajtów SBCS-2 dzięki szarlatanowi Krów. -1 dzięki ngn.
Anonimowa ukryta funkcja prefiksu. Jako argument przyjmuje macierz. Przyjmuje się
⎕IO
( I ndex O rigin)0
, co jest domyślne w wielu systemach.Wypróbuj online!
,
ravel (spłaszcz) wejście{
… Wybierz}⊃
element z tego zgodnie z wynikiem następującej funkcji:⊢⍵
podać argument (oddziela się3 3
od⍵
)…
⌺3 3
Zastosuj następującą funkcję do każdej dzielnicy 3 na 3:⊢∘,
zignoruj informacje o krawędzi na rzecz zrujnowanej (spłaszczonej) dzielnicy(
…)
Zastosuj następującą milczącą funkcję do tych-/
suma przemienna (lit. minus asocjatywna minus redukcja)+/-
odejmij to od sumy (daje to sumę każdego innego elementu),
ravel (spłaszcz) to (suma sąsiedztwa)⍒
tworzyć indeksy, które by to sortowały⊃
wybierz pierwszy (tj. indeks najwyższej sumy)źródło
{⊃⍒,{+/1↓⍉4 2⍴⍵}⌺3 3⊢⍵}⊃,
jest Edytuj: lub nawet{⊃⍒,{⊢/+⌿4 2⍴⍵}⌺3 3⊢⍵}⊃,
{⊃⍒,(+/--/)⊢∘,⌺3 3⊢⍵}⊃,
Galaretka , 22 bajty
Wypróbuj online!
Brak wbudowanych splotów takich jak MATL i DyalogZapominanie języka ma wbudowane splotowe (dziękuję @dylnan) boli, ale możemy sobie poradzić bez nich, częściowo dziękiŒM
iœị
. Po pierwsze, funkcja pomocnicza do obliczania sąsiadów tylko w jednym kierunku, która przypadkowo transponuje dane wejściowe:Wizualnie obliczenia są następujące:
Interpretacja: komórka (x, y) tego wyniku jest sumą poziomych sąsiadów komórki (y, x). (Na przykład tutaj widzimy, że f (A) [2,3] = 16 = 7 + 9 = A [3,1] + A [3,3] .)
Następnie główna funkcja:
źródło
æc
?Galaretka , 18 bajtów
Wypróbuj online!
Funkcja pomocnika wyszukuje sąsiadów każdego elementu w każdym rzędzie. Główna funkcja robi to z wierszami, a następnie kolumny znajdują element, który ma maksymalną sumę sąsiedztwa.
źródło
Wolfram Language (Mathematica) , 58 bajtów
Wypróbuj online!
źródło
Python 2 , 127 bajtów
Wypróbuj online!
źródło
Szablon , 1 + 10 = 11 bajtów (niekonkurencyjny)
Opcja wiersza polecenia:
1
oblicz 1 generacjęWypróbuj online!
y
z spłaszczonego oryginalnego wejścia⊃⍨
wybierz⊃
pierwszy⍒
w malejącej kolejności,
spłaszczonego+/
sumyN
dzielnic von neumanN bez jaźniźródło
y
do języka, gdy zobaczyłem, że potrzebuje łatwiejszego dostępu do oryginalnych danych wejściowych. Wcześniej trzeba było pisać(,⍎'input')
zamiasty
.JavaScript (ES6), 94 bajty
Wypróbuj online!
W jaki sposób?
Zamiast szukać maksimum sumy 4 sąsiadów, szukamy minimalnej m sumy s ich jeden-dopełnień. To pozwala nam przetwarzać niezdefiniowane wartości tak jak zera, ponieważ:
Wewnętrzna mapy () jest napisane w taki sposób, który nie zmienia zawartości rzędu R . Dlatego możemy zapisać jego wynik w p , aby przetestować najlepszych sąsiadów w następnej iteracji.
Używamy:
~r[x-1]
dla lewej komórki~r[x+1]
dla właściwej komórki~p[x]
dla górnej komórki~(a[y+1]||0)[x]
dla dolnej komórkiźródło
K (ngn / k) ,
4340 bajtówWypróbuj online!
źródło
Java 8, 187 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
JavaScript ES6, 170 bajtów
źródło