Szesnaście stosów sera układa się na kwadracie 4x4. Są oznaczone od do . Najmniejszy stos to a największy .
Głodna mysz jest tak głodna, że zawsze trafia prosto na największy stos (tj. ) i zjada ją od razu.
Następnie trafia na największy sąsiedni stos i szybko go zjada. (Tak ... Jest naprawdę głodny.) I tak dalej, dopóki nie będzie już stosu sąsiadów.
Stos może mieć do 8 sąsiadów (poziomo, pionowo i po przekątnej). Nie ma żadnego zawijania.
Przykład
Zaczynamy od następujących stosów sera:
Głodna Mysz najpierw zjada , a następnie największy stos sąsiadów, którym jest .
Następne ruchy to , , , , , , , , i w dokładnie takiej kolejności.
Wokół Głodnej Myszy nie ma już sera, więc się tam zatrzymuje.
Wyzwanie
Biorąc pod uwagę początkową konfigurację sera, kod musi wydrukować lub zwrócić sumę pozostałych stosów, gdy głodna mysz przestanie je jeść.
W powyższym przykładzie oczekiwana odpowiedź to .
Zasady
- Ponieważ rozmiar macierzy wejściowej jest stały, możesz wziąć ją jako macierz 2D lub jednowymiarową.
- Każda wartość od do gwarantuje pojawienie się dokładnie raz.
- To jest golf golfowy .
Przypadki testowe
[ [ 4, 3, 2, 1], [ 5, 6, 7, 8], [12, 11, 10, 9], [13, 14, 15, 16] ] --> 0
[ [ 8, 1, 9, 14], [11, 6, 5, 16], [13, 15, 2, 7], [10, 3, 12, 4] ] --> 0
[ [ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16] ] --> 1
[ [10, 15, 14, 11], [ 9, 3, 1, 7], [13, 5, 12, 6], [ 2, 8, 4, 16] ] --> 3
[ [ 3, 7, 10, 5], [ 6, 8, 12, 13], [15, 9, 11, 4], [14, 1, 16, 2] ] --> 12
[ [ 8, 9, 3, 6], [13, 11, 7, 15], [12, 10, 16, 2], [ 4, 14, 1, 5] ] --> 34
[ [ 8, 11, 12, 9], [14, 5, 10, 16], [ 7, 3, 1, 6], [13, 4, 2, 15] ] --> 51
[ [13, 14, 1, 2], [16, 15, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12] ] --> 78
[ [ 9, 10, 11, 12], [ 1, 2, 4, 13], [ 7, 8, 5, 14], [ 3, 16, 6, 15] ] --> 102
[ [ 9, 10, 11, 12], [ 1, 2, 7, 13], [ 6, 16, 4, 14], [ 3, 8, 5, 15] ] --> 103
[[9, 10, 11, 12], [1, 2, 7, 13], [6, 16, 4, 14], [3, 8, 5, 15]]
Odpowiedzi:
Python 2 ,
133130 bajtówWypróbuj online!
Pobiera spłaszczoną listę 16 elementów.
Jak to działa
źródło
a[i+x]for x in[-6,-5,-4,-1,1,4,5,6]
można skrócića[i+j+j/3*2-6]for j in range(9)
(wpis zerowy jest nieszkodliwy). Python 3 z pewnością może działać krócej, zapisując na stałe bajtowanie o długości 8, ale ogólnie Python 2 może być lepszy.a=[0]*5
for r in input():a=r+[0]+a
. Być może istnieje jeszcze krótsze rozwiązanie do krojenia ciągów, które nie wymaga iteracji.Python 2 , 111 bajtów
Wypróbuj online!
Metody i przypadki testowe zaadaptowane z Bubbler . Pobiera płaską listę na STDIN.
Kod sprawdza, czy dwa płaskie wskaźniki
i
ij
reprezentują dotykające się komórki, sprawdzając, czy zarówno różnica wierszy, jaki/4-j/4
i różnicai%4-j%4
między kolumnami mieszczą się dokładnie w przedziale od -2 do 2. Pierwsze przejście zamiast tego automatycznie sprawdza się pomyślnie, aby znaleźć największy wpis bez uwzględnienia przylegania.źródło
MATL ,
504947 bajtówDane wejściowe to macierz, używana
;
jako separator wierszy.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
PHP,
177 174171 bajtówUruchom
-nr
, podaj elementy macierzy jako argumenty lub wypróbuj online .źródło
JavaScript, 122 bajty
Zrobiłem kilka błędnych zwrotów na tym i teraz zabrakło mi czasu na dalszą grę w golfa, ale przynajmniej działa. Wrócę jutro (lub, znając mnie, wieczorem w pociągu do domu!), Jeśli uda mi się znaleźć minutę.
Wypróbuj online
źródło
flatMap()
: pR ,
128124123112110 bajtówWypróbuj online!
Tworzy matrycę 4x4 (która pomogła mi w wizualizacji rzeczy), uzupełnia ją zerami, a następnie zaczyna od 16 i wyszukuje otaczające „stosy” następnej największej itd.
Po zakończeniu generuje ostrzeżenie, ale nie ma znaczenia i nie zmienia wyniku.
EDYCJA: -4 bajty poprzez kompresję inicjalizacji macierzy do 1 linii.
EDYCJA: -1 dzięki Robertowi Hackenowi
EDYCJA: -13 bajtów łączących sugestie Giuseppe i Robin Ryder.
źródło
r==16
dlar>15
.which
.m
logikę zamiast liczby całkowitej, a zatem wystarczy zadzwonićwhich
tylko raz zamiast dwa razy.X%o%Y
to alias dlaouter(X,Y,'*')
.outer
jest jedną z najbardziej przydatnych funkcji, ponieważ może działać jako funkcja „broadcast” Octave / MATLAB / MATL z aribtrarnymi (wektoryzowanymi) operatorami. Zobacz tutaj ; Przydaje się także w rzadkich przypadkach, dokronecker
których prowadzi link na tej stronie.Węgiel drzewny , 47 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Konwertuj liczby wejściowe na znaki alfabetyczne (A = 0 .. Q = 16) i wydrukuj je jako siatkę 4x4.
Zacznij od zjedzenia Q, tj. 16.
Powtarzaj, dopóki jest coś do jedzenia.
Znajdź, gdzie jest stos. Jest to widok liniowy w kolejności rzędów głównych.
Konwertuj na współrzędne i przeskocz do tego miejsca.
Znajdź największy sąsiadujący stos.
Zjedz aktualny stos.
Konwertuj stosy z powrotem na liczby całkowite i weź sumę.
Wyczyść płótno i wydrukuj wynik.
źródło
PowerShell,
143141136130122121 bajtówSkrypt testu mniej golfowego:
Wynik:
Wyjaśnienie:
Najpierw dodaj górną i dolną granicę 0 i utwórz tablicę jednowymiarową:
Powershell zwraca,
$null
jeśli spróbujesz uzyskać wartość za końcem tablicy.Po drugie , pętla
biggest neighbor pile
rozpoczęła się od 16 do wartości niezerowych. I unieważnij (Głodna Mysz je).Po trzecie , suma pozostałych stosów.
źródło
SAS,
236219 bajtówWprowadzanie na kartach dziurkowanych, po jednej linii na siatkę (oddzielone spacjami), wydruk na dzienniku.
To wyzwanie jest nieco skomplikowane ze względu na pewne ograniczenia tablic w SAS:
Aktualizacje:
infile cards;
oświadczenie (-13)a:
zamiast definicji tablicya1-a16
(-4)Gra w golfa:
Nie golfowany:
źródło
Haskell , 163 bajty
Wypróbuj online!
f
Funkcja przyjmuje wejście jako listę 4 listami 4 liczb całkowitych.Nieco golfa
źródło
JavaScript (ES7), 97 bajtów
Pobiera dane wejściowe jako spłaszczoną tablicę.
Wypróbuj online!
Skomentował
źródło
APL (Dyalog Unicode) ,
4241 bajtów SBCSWypróbuj online!
źródło
Java 10,
272248 bajtówKomórki są sprawdzane tak samo jak w mojej odpowiedzi na wyzwanie Wszystkie pojedyncze ósemki .
-24 bajty dzięki @ OlivierGrégoire .
Wypróbuj online.
Wyjaśnienie:
źródło
int r,c,R=4,M=1,x,y,X,Y;for(r=c=X=Y=0;
, więc dziękuję. :)J, 82 bajty
Wypróbuj online!
Planuję golfa to bardziej jutro, a może napisać więcej J-owski rozwiązanie podobne do tego jednego , ale pomyślałem, że spróbuję spłaszczoną podejście, ponieważ nie zrobił wcześniej.
źródło
]
w lewog
?Czerwony , 277 bajtów
Wypróbuj online!
To naprawdę długie rozwiązanie i nie jestem z niego zadowolony, ale tyle czasu poświęciłem na jego naprawę w TIO (najwyraźniej istnieje wiele różnic między stabilnymi wersjami Reda dla Win i Linuksa), więc i tak to opublikuję ...
Bardziej czytelny:
źródło
Galaretka ,
31 3029 bajtówPonieważ metoda jest zbyt wolna, aby uruchomić ją w ciągu 60. roku życia, mysz zaczyna od
16
niej9
i ogranicza jej zdolność do tego, że jest w stanie jeść tylko9
mniej. Wypróbuj online! (a więc tutaj je9, 2, 7, 4, 8, 6, 3
odejście97
).W jaki sposób?
źródło
Nie moja najlepsza praca. Należy wprowadzić pewne zdecydowane ulepszenia, niektóre prawdopodobnie fundamentalne w stosunku do zastosowanego algorytmu - jestem pewien, że można go ulepszyć za pomocą tylko
int[]
, ale nie mogłem wymyślić, jak w ten sposób skutecznie wyliczyć sąsiadów. Chciałbym zobaczyć rozwiązanie PowerShell, które wykorzystuje tylko jednowymiarową tablicę!PowerShell Core , 348 bajtów
Wypróbuj online!
Bardziej czytelna wersja:
źródło
(array|sort)[-1]
zamiastMeasure -max
działać w PSv5, ale uzyskiwałem nieprawidłowe wyniki w rdzeniu. Nie mam pojęcia dlaczego.(0..10|sort)[-1]
ale zwraca 10 na PSv5, ale 9 na PS Core. Jest tak, ponieważ traktuje to w kolejności leksykograficznej zamiast numerycznej. Szkoda, że.C (gcc), 250 bajtów
Wypróbuj online!
Uwaga: To przesłanie modyfikuje tablicę wejściową.
s()
to funkcja do wywołania z argumentem zmiennejint[16]
(która jest taka sama w pamięci jak anint[4][4]
, cog()
interpretuje ją jako).s()
znajduje lokalizację16
tablicy, a następnie przekazuje tę informację dog
, która jest funkcją rekurencyjną, która przyjmuje lokalizację, ustawia liczbę w tej lokalizacji na 0, a następnie:Jeśli obok niego znajduje się liczba dodatnia, powtórz z lokalizacją największej liczby sąsiedniej
W przeciwnym razie zwróć sumę liczb z tablicy.
źródło
s(int*a){for(i=0;a[i]<16;++i);return g(a,i%4,i/4);}
Wolfram Language (Mathematica) , 149 bajtów
Wypróbuj online!
źródło
Dodaj ++ , 281 bajtów
Wypróbuj online!
O, to jest skomplikowane.
Sprawdź wszystkie przypadki testowe
Jak to działa
Do tego wyjaśnienia użyjemy danych wejściowych
To implementuje dwie funkcje pomocnicze:
Wreszcie wyjście t , tzn. Pozostałe niezebrane wartości.
źródło
C # (.NET Core) , 258 bajtów
Bez LINQ. Korzystanie z System.Collections.Generic służy do formatowania po - funkcja tego nie wymaga.
Wypróbuj online!
źródło
Perl 6 ,
151136126125119 bajtówSuper odrapane rozwiązanie. Pobiera dane wejściowe jako spłaszczoną tablicę.
Wypróbuj online!
źródło
Perl 5
-MList::Util=sum -p
, 137 bajtówWypróbuj online!
źródło
K (ngn / k) , 49 bajtów
Wypróbuj online!
input (
x
) jest tablicą 1d(+!4 4)!x
słownik, który odwzorowuje pary współrzędnych na wartościx
h::
przypisać do zmiennej globalnejh
*>
klucz odpowiadający wartości maksymalnej{
}\
powtarzaj do zbieżności, zbierając wartości pośrednie na liścieh[,x]:0
wyzeruj bieżącą pozycję+x+0,'1-!3 3
pozycje sąsiadów(
)#h
odfiltruj jeh
jako mniejszy słownik*>
który sąsiad ma maksymalną wartość? staje się bieżącą pozycją dla nowej iteracji+/h
na koniec zwróć sumęh
pozostałych wartościźródło
Wolfram Language (Mathematica) ,
124115 bajtówWypróbuj online!
To zajmuje tablicę 2D, wstawia ją z każdej strony, a następnie natychmiast spłaszcza, abyśmy nie musieli wydawać bajtów na indeksowanie. Jedynym kosztem tego jest
Join@@
spłaszczenie. Następnie postępuje jak poniżej.Wersja 124-bajtowa dla tablicy 2D: Wypróbuj online!
Głównie moja własna praca, nieco wywodząca się ze 149-bajtowej odpowiedzi J42161217 .
Nie golfowany:
źródło