To jest moje pierwsze pytanie tutaj, więc wszelkie sugestie w komentarzach będą mile widziane! Dzięki ;)
Wprowadzenie
Jednym z bardzo wspólna strategia dla 2048 gry jest nigdy przesuwając w dół . To umieszcza wszystkie duże liczby na górze, a dolne na dole. Tak więc, jeśli zastosujesz tę strategię poprawnie, twoja plansza zawsze będzie pasować do następującego wzoru:
Wzór do sprawdzenia / Twoje zadanie
Twoje zgłoszenie powinno być albo pełnym programem, albo funkcją, która zwraca prawdziwą wartość, jeśli tablica może być opisana w następujący sposób: schodząc w dół każdej kolumny tablicy, pierwsza liczba powinna być najwyższa z kolumny, druga liczba powinna być mniejsza równa lub równa pierwszej liczbie itp. Dobra plansza 2048 jest definiowana jako plansza, na której najwyższe liczby znajdują się na górze. To jest golf golfowy , więc wygrywa najkrótszy kod na język (w bajtach).
I / O
Dane wejściowe można pobierać w dowolny odpowiedni sposób, na przykład tablicę 4 tablic, z których każda zawiera 4 liczby lub tablicę 16 liczb. W sumie zawsze będzie to 16 liczb, reprezentujących tablicę 4x4 . Wyjście powinno być prawdziwą wartością wejściową jest „dobra tablica 2048”, a w przeciwnym razie wartość fałsz.
Przykłady
Prawda:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 8 |
|-------------------|
| 4 | | 32 | 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 128| 32 | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Falsy:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 16 |
|-------------------|
| 32 | | 128| 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 32| | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Uwaga
Spójrz na drugi przypadek testu fałszowania: gdy gdzieś jest pusta wartość (lub zero), a nawet jeśli po niej następuje wartość wyższa niż ostatnia niezerowa liczba, powinno to być fałszowanie, ponieważ następna wartość po zero byłoby wyższe niż samo zero, co powoduje, że jest ono nieprawidłowe.
Powodzenia!
Odpowiedzi:
Haskell , 21 bajtów
Wypróbuj online!
Pobiera listę kolumn, z pustymi spacjami jako 0.
źródło
[[16,8,4,0],[16,0,4,4],[16,4,4,4],[16,4,4,4]]
.05AB1E , 4 bajty
Wypróbuj online!
Tak samo jak moje pozostałe dwie odpowiedzi. Obiecuję, że to mój ostatni, dopóki inni nie odpowiedzą :)
źródło
APL (Dyalog) ,
74 bajtówPrzyjmuje macierz 4 na 4, używając 0 jako spacji jako argumentu.
Wypróbuj online!
⌊⍀
to pionowe skumulowane minimum≡
identyczny z⊢
niezmodyfikowany argument?źródło
Galaretka , 4 bajty
Wypróbuj online!
Dane wejściowe jako tablica kolumn. Współpracuje z siatkami o dowolnej wielkości.
źródło
0
zamiast1
.ḟ0
nie działaR (+ pryr), 23 bajty
Który ocenia się na funkcję
Który przyjmuje macierz jako dane wejściowe:
Po otrzymaniu matrycy
diff
automatycznie oblicza różnice w wierszach (zaskakujące. Nie znałem tej funkcji, dopóki nie wypróbowałem jej w tym wyzwaniu).Żadna z tych wartości nie może wynosić 1 lub więcej na dobrej płycie, więc testujemy
<1
i sprawdzamy, czyall
wartości macierzy są zgodne.źródło
JavaScript, 37 bajtów
Nazwij to tak:
Testowane na Firefox, Chrome, JavaScript Shell i Node.js.
źródło
''+
)sort
to zmienna metoda, która zmutuje tablicę. pierwsza konwersja na ciąg spowoduje zapisanie kopii tablicy. przekonwertowanie na ciąg powoduje również, że równa operacja działa według wartości (ciąg) zamiast odwołania.Python 3 , 42 bajty
Wypróbuj online!
Ten sam algorytm jak moja odpowiedź na galaretkę
źródło
C # (.NET Core) , 71 bajtów
Wypróbuj online!
NUDNY sposób. Oczekuje, że dane wejściowe zostaną spłaszczone do tablicy liniowej.
Alternatywnie wyraźnie zabroniony sposób:
Wypróbuj online!
Zgłasza wyjątek IndexOutOfBoundsException, aby wskazać wartość true, kończy się normalnie, wskazując wartość false. Próbowałem wersji zawierającej konwersję z wyjątku / brak wyjątku na prawda / fałsz, ale skończyło się tak długo, jak zwykła wersja.
źródło
JavaScript,
34, 32 bajtyWywołaj, przekazując jedną tablicę zawierającą pierwszą kolumnę, a następnie drugą, trzecią i czwartą.
Porównuje każdą liczbę z poprzednim numerem z wyjątkiem pierwszej liczby w każdej kolumnie i zwraca true, jeśli wszystkie są prawdziwe.
Test
Edycja: zapisane 2 bajty dzięki tsh
źródło
v=>!v.some((x,i)=>i%4&&x>v[i-1])
Haskell , 28 bajtów
Jest także
15 bajtów, ale wymaga
import Data.List
to tylko pracy z Preludium. Alternatywnie,z 25 bajtami działa w GHCI.
źródło
Gaia ,
36 bajtów+3 bajty, ponieważ najwyraźniej nie wiedziałem, jak działa mój język
Jest to funkcja przyjmująca listę kolumn i pozostawiająca wynik na stosie.
Istnieje kilka innych 6-bajtowych rozwiązań, w tym
0+¦o¦ẏ
iọ¦_ẏ¦ỵ
.Wypróbuj online!
Wyjaśnienie
źródło
TI-BASIC, 25 bajtów
Pobiera dane wejściowe jako macierz 4x4 w Ans.
Wyjaśnienie
źródło
Haskell , 41 bajtów
Wypróbuj online!
Definiuje funkcję bez punktów
all f
, w którejf
określa, czy lista jest sortowana.źródło
f
jakof(a:b:c)=a>=b&&f(b:c)
JavaScript (ES6), 42 bajty
Pobiera tablicę kolumn; zwraca (prawdę) liczbę lub
false
.JavaScript (ES6),
5447 bajtówPierwsze podejscie. Pobiera tablicę kolumn; zwraca
true
lubfalse
.źródło
MATL , 4 bajty
Wypróbuj online!
Dane wejściowe jako tablica wierszy do góry nogami.
źródło
Swift 4 ,
8477 bajtówWypróbuj online!
źródło
Dyalog APL,
211915 bajtówWypróbuj online! (zmodyfikowany, aby działał w tryapl)
Pobiera dane wejściowe jako tablicę 2D.
W jaki sposób?
⎕
wkład⍉
transponować↓
Tablica 2D => wektor 1D wektorów 1D{ ... }¨
zastosuj to do każdego członka (argumentu⍵
):⍵[⍒⍵]
⍵
posortowane malejąco⍵≡
równość z⍵
∧/
czy każdy element jest1
.źródło
Japt , 7 bajtów
Wypróbowałem kilka różnych metod dla tego, ale ostatecznie najkrótsza, jaką mogłem wymyślić, okazała się być portem rozwiązania JS tsh.
Pobiera tablicę kolumn jako dane wejściowe. Puste komórki można
0
pominąć, jeśli w kolumnie nie ma innych liczb.Sprawdź to
Wyjaśnienie
Domniemane wejście tablicy
U
.Przygotuj
U
z pustym ciągiem, konwertując tablicę na ciąg.Sprawdź równość, która również rzutuje prawą stronę na sznurek.
Mapa nad
U
.Sortuj (
n
) według<=
.Wynik niejawnie wyprowadza wynik boolowski.
źródło
U
. Możesz też zrobićnn
na końcu;)U
, gdy zauważyłem, że pominięcie drugiego działało w tym przypadku, @ETHproductions; Myślałem, że zadziała tylko wtedy, gdy zmienna będzie jedyną rzeczą po lewej stronie==
. Będę musiał pamiętać o tym w przyszłości.Clojure, 30 bajtów
spróbuj online
źródło
Java 8, 69 bajtów
Cóż, w chwili pisania tego bije to rozwiązanie Swift, więc jest! Zupełnie proste. Dane wejściowe to tablica tablic liczb całkowitych, przy czym tablice wewnętrzne to kolumny tablicy (najpierw górne kwadraty). Przesyłaj do
Function<int[][], Boolean>
.źródło
MY ,
666220 bajtów (niekonkurencyjny)Wypróbuj online!
Powodem, dla którego nie jest konkurencyjny, jest to, że niedawno wdrożyłem
8E (≡)
, co jest równoważne APL≡
.W jaki sposób?
ω⍉
Transponowano pierwszy argument wiersza poleceńω⍉
Transponowano pierwszy argument wiersza poleceńA6ǵ'
pushchr(0x6A)
(⍖
na stronie kodowej, która sortuje malejąco)ƒ
jako funkcja, a nie ciąg⇹
przesuń funkcję, która mapuje wyskakującą funkcję nad każdym argumentem(
zastosowaćE8ǵ'ƒ⇹(
to samo, z wyjątkiem withchr(0x8E)
, czyli komendy match (≡
).Π
produkt←
wyjście bez nowej liniiTak, wiele symboli MY jest dokładnie takich samych lub podobnych do APL-ów. Wyjaśnienie jest takie, że przyszło im na myśl, gdy chciałem polecenia 1-znakowego. (Nie wiem, dlaczego nie użyłem T do transpozycji)
źródło
Mathematica, 27 bajtów
t=Thread;-t[Sort/@-t@#]==#&
Wyjaśnienie:
Thread
jest dziwną ogólną operacją podobną do transpozycji, która akceptuje transpozycję po otrzymaniu matrycy .t=Thread;
pozwala mi użyćt
dwa razy zamiastThread
dwa razy, aby zapisać bajty.Sort
sortuje listę (w kolejności rosnącej).Sort\@
mapujeSort
funkcję do każdego elementu listy indywidualnie; po zastosowaniu do matrycy sortuje wiersze.t@#
stosuje funkcję transpozycji na wejściu#
funkcji głównej.-
przyjmuje negatyw wszystkich wpisów, dzięki czemu sortowanie wierszy transponowanej macierzy (kolumny oryginału) sortuje je w pożądany sposób.-t[...]
cofa negację i transpozycję, więc wszystko, co naprawdę zrobiliśmy, to posortowanie kolumn od największych do najmniejszych.==#
sprawdza, czy ta nowa macierz posortowana według kolumn jest równa oryginalnej wartości wejściowej.&
kończy anonimową funkcję#
zdefiniowanym przez nas wejściem .Możesz wypróbować go online w piaskownicy Wolfram Cloud , wklejając poniższy kod i klikając Gear -> „Oceń komórkę” lub naciskając Shift + Enter lub Enter na klawiaturze numerycznej:
Lub dla wszystkich przypadków testowych:
źródło