Baru-baru ini saya posting sebuah pertanyaan tentang game Diffy yang telah terjawab. Baiklah, pertanyaannya sangat sulit, tetapi saya ingin membuat pertanyaan yang lebih mudah tentang permainan Diffy sehingga kita bisa mendapatkan bola yang menggelinding.
Bagaimana Diffy bekerja
Disalin dari Find Diffy Games
Gim Diffy bekerja seperti berikut: Anda mulai dengan daftar bilangan bulat non-negatif, dalam contoh ini kita akan gunakan
3 4 5 8
Kemudian Anda mengambil perbedaan absolut antara angka-angka yang berdekatan
(8) 3 4 5 8
5 1 1 3
Lalu kamu ulangi. Anda ulangi sampai Anda menyadari bahwa Anda telah memasukkan satu lingkaran. Dan kemudian umumnya permainan dimulai dari awal lagi.
3 4 5 8
5 1 1 3
2 4 0 2
0 2 4 2
2 2 2 2
0 0 0 0
0 0 0 0
Kebanyakan gim berakhir dengan serangkaian nol semua, yang dianggap sebagai keadaan kalah, tetapi beberapa gim jarang terjebak dalam loop yang lebih besar.
Tugas
Mengingat keadaan awal permainan Diffy menentukan apakah permainan akhirnya mencapai keadaan nol semua. Anda harus menampilkan nilai Truthy atau Falsy untuk masing-masing dua negara. Yang sesuai dengan yang tidak masalah.
Tujuannya adalah untuk meminimalkan jumlah byte di sumber Anda.
sumber
1 1 0
periodik, begitu42 42 41
juga keadaannya.n
aneh, permainan tidak pergi ke nol kecuali semua angkanya sama. Jika panjangnya adalah kekuatan 2, selalu menjadi nol.n
elemen dan maksimumm
mengambil paling banyakn * bit_length(m)
langkah. Jadi,n*m
juga merupakan batas atas. Batas atas yang lebih kuat adalaht(n) * bit_length(m)
, di manat(n)
kekuatan terbesar 2 adalah faktorn
.Jawaban:
Pyth, 6 byte
Suite uji
Program ini sangat ramah tamah. 0 (falsy) berarti semua nol, yang lainnya (benar) berarti tidak semua nol.
Bagaimana itu bekerja:
sumber
Mathematica, 52 byte
Fungsi murni mengambil daftar bilangan bulat negatif sebagai masukan dan pengembalian
True
atauFalse
.Abs[#-RotateLeft@#]&
adalah fungsi yang mengeksekusi satu putaran permainan dify. (Secara teknis seharusnyaRotateRight
, tetapi jawaban pamungkas tidak terpengaruh, dan hei, byte gratis.) JadiNest[...,#,R]
jalankanR
putaran permainan diffy, dan kemudian1>Max@
mendeteksi apakah hasilnya semua nol.Bagaimana kita tahu berapa banyak putaran permainan yang
R
harus dilakukan? Jikam
merupakan nilai terbesar dalam input, perhatikan bahwa kami tidak akan pernah menghasilkan bilangan bulat yang lebih besar daripadam
berapa pun putaran yang kami lakukan. Jumlah total daftar panjangl
bilangan bulat tidak negatif yang dibatasi oleh semuam
adalah(m+1)^l
. Jadi jika kita melakukan(m+1)^l
putaran permainan dify, kita dijamin telah melihat daftar dua kali saat itu, dan dengan demikian akan berada di bagian periodik permainan. Khususnya, permainan berakhir di semua nol jika dan hanya jika hasil(m+1)^l
putaran permainan adalah daftar semua-nol. Ekspresi itulah yangMax[1+#]^Tr[1^#]
menghitung.sumber
Jelly , 13 byte
Output 0 (falsey) jika semua keadaan nol akan tercapai, jika tidak nilai kebenaran (bilangan bulat positif) dikembalikan.
Cobalah online!
Menggunakan pengamatan yang pertama kali dilakukan oleh Greg Martin bahwa angka-angka dalam array mungkin tidak pernah meninggalkan domain [0, m] di mana m adalah elemen maksimal dalam input, sehingga melakukan (m + 1) l putaran di mana l adalah panjang input akan cukup.
Bagaimana?
sumber
PHP, 144 Bytes
cetak 0 untuk semua nol dan semua nilai integer positif untuk true
Versi Online
Diperluas
sumber
array_push
? Tapi kenapa ?$_GET
sebagai input Anda harus menganggapnya berisi string.?0[0]=1&0[1]=1&0[2]=0
atau?0[]=1&0[]=1&0[]=0
array string tetapi ini tidak masalah. Tapi Anda benar saya bisa membuatnya lebih pendek dengan?0=1&1=1&2=0
mengapa tidak àrray_push` Saya yakin Anda atau Titus menemukan cara yang lebih baik untuk mempersingkat ini.array_push($e,$e[$c=0]);
sama persis dengan$e[]=$e[$c=0];
dan Anda bahkan sudah menggunakan sintaks ($r[]=$n
). Anda sudah menggunakanmax
sekarang jadi Anda juga harus menggantiend($r)
dengan$n
karena$n
selalu sama denganend($r)
ketika gema dieksekusi.R (3.3.1), 87 byte
Mengembalikan nol untuk permainan yang berakhir dengan semua nol, dan angka positif sebaliknya.
memanfaatkan fakta yang sama oleh Greg Martin dan menggunakan diff builtin untuk melakukan diff-ing
sumber
Röda , 80 byte
Cobalah online!
Tidak Disatukan:
sumber
05AB1E , 13 byte
Mengembalikan 1 jika berakhir dengan nol dan 0 sebaliknya.
Cobalah online!
Penjelasan
Gunakan batas atas putaran:
max(input)*len(input)
dijelaskan oleh xnor di bagian komentar.sumber
J, 22 byte
Mengembalikan
0
(yang secara efektiffalse
dalam J) untuk permainan degenerasi berakhir di semua nol. Mengembalikan1
(true
) jika iterasi ke-n berisi angka bukan-nol, di mana n sama dengan bilangan bulat terbesar dalam urutan asli dikalikan dengan panjang daftar. Lihat jawaban Greg Martin yang menjelaskan mengapa ini benar.Terjemahan:
*
>./
^:( )
#
dikalikan dengan*
nilai terbesar dalam daftar>./
:|&
dari(- )
dan1&|.
Contoh:
sumber
JavaScript (ES6),
95 9290 bytePenjelasan
Fungsi rekursif yang menyebut dirinya sendiri selama penghitung (yang dimulai pada nilai maksimum dalam daftar ditambah satu dengan kekuatan panjang daftar [
= (max + 1)**length
]) bukan nol. Pada setiap panggilan, penghitung dikurangi, dan ketika mencapai nol, semua elemen dalam daftar diperiksa terhadap nol. Jika semuanya sama dengan nol, program kembalitrue
, danfalse
sebaliknya.sumber
PHP,
123115mengambil input melalui HTTP get mis
?3&4&5&8
menyimpan beberapa byte.Mencetak 1 jika mencapai semua nol atau tidak sama sekali.
mengambil daftar argumen melalui baris perintah. Saya merasa ini bisa bermain golf lebih jauh (melihat @Titus).
sumber
Python 3.6, 101 byte
Mengambil tuple angka dan mengembalikan False jika berakhir dengan nol dan Benar jika itu loop.
sumber
JavaScript (ES6),
8483 byteKembali
true
untuk permainan yang berakhir dengan semua nol,false
jika tidak.Uji
Tampilkan cuplikan kode
sumber