Ini adalah pertanyaan pertama saya di sini, jadi saran apa pun di komentar akan dihargai! Terima kasih;)
pengantar
Salah satu strategi yang sangat umum untuk game 2048 adalah tidak pernah menggesek . Ini menempatkan semua angka besar di atas, dan yang lebih rendah di bawah. Jadi, jika Anda menerapkan strategi ini dengan benar, papan Anda akan selalu cocok dengan pola berikut:
Pola untuk memeriksa / Tugas Anda
Kiriman Anda harus berupa program penuh atau fungsi yang mengembalikan nilai kebenaran jika papan dapat digambarkan seperti ini: Turun setiap kolom papan, angka pertama harus yang tertinggi dari kolom, angka kedua harus kurang dari atau sama dengan angka pertama, dll. Papan 2048 yang baik didefinisikan sebagai papan di mana angka tertinggi semuanya ada di atas. Ini adalah kode-golf , sehingga Kode terpendek per bahasa (dalam byte) menang.
I / O
Input dapat diambil dengan cara apa pun yang sesuai, misalnya array 4 array, masing-masing berisi 4 angka, atau array 16 angka. Secara total, itu akan selalu 16 angka, mewakili papan 4x4 Output harus nilai kebenaran input adalah "papan 2048 baik", dan nilai palsu sebaliknya.
Contohnya
Benar:
|-------------------|
| 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 | | | |
|-------------------|
Catatan
Lihatlah kasus uji falsy ke-2: Ketika ada nilai kosong (atau 0) di suatu tempat dan bahkan ketika itu diikuti oleh nilai yang lebih tinggi dari angka bukan nol terakhir, ini harus palsu, karena nilai berikutnya setelah nol akan lebih tinggi dari 0 itu sendiri, yang membuatnya tidak valid.
Semoga berhasil!
Jawaban:
Haskell , 21 byte
Cobalah online!
Mengambil daftar kolom, dengan spasi kosong 0.
sumber
[[16,8,4,0],[16,0,4,4],[16,4,4,4],[16,4,4,4]]
.05AB1E , 4 byte
Cobalah online!
Sama seperti dua jawaban saya yang lain. Saya berjanji ini yang terakhir sampai yang lain menjawab :)
sumber
APL (Dyalog) ,
74 byteMengambil 4-by-4 matrix, menggunakan 0 untuk blank, sebagai argumen.
Cobalah online!
⌊⍀
adalah minimum kumulatif vertikal≡
sama dengan⊢
argumen yang tidak dimodifikasi?sumber
Jelly , 4 byte
Cobalah online!
Input sebagai array kolom. Bekerja dengan kisi berukuran sewenang-wenang.
sumber
0
daripada1
.ḟ0
tidak berhasilR (+ pryr), 23 byte
Yang mengevaluasi fungsi
Yang mengambil matriks sebagai input:
Ketika diberi matriks,
diff
secara otomatis menghitung perbedaan dalam baris (yang mengejutkan. Saya tidak tahu fitur ini sampai saya mencobanya untuk tantangan ini).Tidak satu pun dari nilai-nilai ini bisa 1 atau lebih tinggi di papan yang baik, jadi kami menguji
<1
dan melihat apakahall
nilai-nilai matriks sesuai.sumber
JavaScript, 37 byte
Sebut saja seperti ini:
Diuji pada Firefox, Chrome, JavaScript Shell, dan, Node.js.
sumber
''+
)sort
adalah metode yang dapat diubah, yang akan mengubah array. Konversi pertama ke string akan menyimpan salinan array. konversi ke string juga membuat operasi yang sama berfungsi dengan nilai (string) alih-alih referensi.Python 3 , 42 byte
Cobalah online!
Algoritma yang sama dengan jawaban Jelly saya
sumber
C # (.NET Core) , 71 byte
Cobalah online!
Cara BORING. Diharapkan input diratakan menjadi array linier.
Cara lain yang dilarang secara eksplisit:
Cobalah online!
Melempar IndexOutOfBoundsException untuk menunjukkan true, berakhir secara normal untuk menunjukkan false. Saya mencoba versi yang menyertakan konversi dari pengecualian / tidak terkecuali ke true / false, tetapi berakhir selama versi biasa.
sumber
JavaScript,
34, 32 bytePanggil dengan memasukkan larik tunggal yang berisi kolom pertama, diikuti oleh ke-2, ke-3, dan ke-4.
Membandingkan setiap angka dengan angka sebelumnya kecuali untuk angka pertama dari setiap kolom dan mengembalikan true jika semuanya benar.
Uji
Sunting: disimpan 2 byte berkat tsh
sumber
v=>!v.some((x,i)=>i%4&&x>v[i-1])
Haskell , 28 byte
Ada juga
dengan 15 byte tetapi membutuhkan
import Data.List
saat bekerja dengan Prelude saja. Kalau tidak,dengan 25 byte bekerja di GHCI.
sumber
Gaia ,
36 byte+3 byte karena ternyata saya tidak tahu bagaimana bahasa saya berfungsi
Ini adalah fungsi yang menerima daftar kolom dan meninggalkan hasilnya di tumpukan.
Beberapa solusi 6 byte lainnya ada termasuk
0+¦o¦ẏ
danọ¦_ẏ¦ỵ
.Cobalah online!
Penjelasan
sumber
TI-BASIC, 25 byte
Mengambil input sebagai matriks 4x4 di Ans.
Penjelasan
sumber
Haskell , 41 byte
Cobalah online!
Menentukan fungsi point-free
all f
, di manaf
menentukan apakah daftar diurutkan.sumber
f
sebagaif(a:b:c)=a>=b&&f(b:c)
JavaScript (ES6), 42 byte
Mengambil array kolom; mengembalikan nomor (kebenaran) atau
false
.JavaScript (ES6),
5447 bytePercobaan pertama. Mengambil array kolom; mengembalikan
true
ataufalse
.sumber
MATL , 4 byte
Cobalah online!
Input sebagai array baris, terbalik.
sumber
Swift 4 ,
8477 byteCobalah online!
sumber
Dyalog APL,
211915 byteCobalah online! (dimodifikasi sehingga akan berjalan di tryapl)
Mengambil input sebagai array 2D.
Bagaimana?
⎕
memasukkan⍉
mengubah urutan↓
2D array => 1D vektor 1D vektor{ ... }¨
terapkan ini untuk setiap anggota (argumen⍵
):⍵[⍒⍵]
⍵
diurutkan menurun⍵≡
kesetaraan dengan⍵
∧/
apakah setiap elemen1
.sumber
Japt , 7 byte
Mencoba beberapa metode yang berbeda untuk yang satu ini tetapi, pada akhirnya, yang terpendek yang dapat saya hasilkan akhirnya menjadi port dari solusi JS tsh.
Mengambil array kolom sebagai input. Sel kosong dapat
0
atau dihilangkan jika tidak ada angka lain dalam kolom.Menguji
Penjelasan
Input array secara implisit
U
.Prepend
U
dengan string kosong, mengonversi array menjadi string.Periksa kesetaraan, yang melemparkan sisi kanan ke string juga.
Peta berakhir
U
.Sortir (
n
) berdasarkan<=
.Keluarkan hasil boolean secara tersirat.
sumber
U
. Anda bisa melakukannyann
di akhir juga;)U
berhasil dalam kasus ini, @ ETHproduksi; Saya pikir itu hanya akan berfungsi jika variabel adalah satu - satunya hal di sebelah kiri==
. Saya harus mengingatnya untuk penggunaan di masa depan.Clojure, 30 byte
coba online
sumber
Java 8, 69 byte
Nah, pada tulisan ini, ini mengalahkan solusi Swift, jadi begitulah! Benar-benar mudah. Input adalah array array integer, array dalam menjadi kolom papan (kuadrat atas terlebih dahulu). Diputar ke
Function<int[][], Boolean>
.sumber
MY ,
666220 byte (tidak bersaing)Cobalah online!
Alasan ini tidak bersaing adalah karena saya baru-baru ini menerapkan
8E (≡)
, yang setara dengan APL≡
.Bagaimana?
ω⍉
Argumen baris perintah pertama ditransformasikanω⍉
Argumen baris perintah pertama ditransformasikanA6ǵ'
pushchr(0x6A)
(⍖
dalam codepage, yang jenisnya turun)ƒ
sebagai fungsi, bukan string⇹
dorong fungsi yang memetakan fungsi yang muncul di setiap argumen(
menerapkanE8ǵ'ƒ⇹(
hal yang sama, kecuali denganchr(0x8E)
, yang merupakan perintah pertandingan (≡
).Π
produk←
output tanpa baris baruYa, banyak simbol MY persis sama atau mirip dengan APL. Penjelasannya adalah bahwa mereka datang ke pikiran ketika saya menginginkan perintah 1 karakter. (Saya tidak tahu mengapa saya tidak menggunakan T untuk merefleksikan)
sumber
Mathematica, 27 byte
t=Thread;-t[Sort/@-t@#]==#&
Penjelasan:
Thread
adalah operasi umum seperti-transpose aneh yang terjadi untuk mengambil transpose ketika diberi matriks .t=Thread;
izinkan saya menggunakant
dua kali alih-alihThread
dua kali untuk menghemat byte.Sort
mengurutkan daftar (dalam urutan meningkat).Sort\@
memetakanSort
fungsi ke setiap elemen daftar secara individual; ketika diterapkan pada sebuah matriks, itu mengurutkan baris.t@#
menerapkan fungsi transpos ke input#
fungsi utama.-
mengambil yang negatif dari semua entri sehingga menyortir baris dari matriks yang ditransformasikan (kolom aslinya) mengurutkannya dengan cara yang diinginkan.-t[...]
membatalkan yang negatif dan yang transpos, sehingga yang benar-benar kami lakukan adalah mengurutkan kolom terbesar ke terkecil.==#
menguji untuk melihat apakah matriks yang diurutkan kolom ini sama dengan input asli.&
mengakhiri fungsi anonim dengan input yang#
kami tentukan.Anda dapat mencobanya secara online di kotak pasir Wolfram Cloud dengan menempelkan kode seperti berikut ini dan mengeklik Gear -> "Evaluate cell" atau menekan Shift + Enter atau numpad Enter:
Atau untuk semua kasus uji:
sumber