Tugas
Tentukan mod-fold sebagai fungsi dari bentuk f (x) = x% a 1 % a 2 % ...% a k , di mana a i adalah bilangan bulat positif dan k ≥ 0 . (Di sini, % adalah operator modulo asosiatif kiri.)
Diberikan daftar n bilangan bulat y 0 ,…, y n − 1 , tentukan apakah ada mod-fold f sehingga masing-masing y i = f (i) .
Anda dapat memilih dan memperbaiki dua output Y dan N untuk fungsi / program Anda. Jika ada huruf f seperti itu , Anda harus selalu mengembalikan / mencetak dengan tepat Y ; jika tidak, Anda harus selalu kembali / mencetak persis N . (Ini bisa menjadi true
/ false
, atau 1
/ 0
, atau false
/ true
, dll.) Sebutkan ini dalam jawaban Anda.
Pengajuan terpendek dalam byte menang.
Contoh
Tentukan f (x) = x% 7% 3 . Nilai-nilainya mulai:
| x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ...
| f(x) | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | ...
Dengan demikian, diberikan 0 1 2 0 1 2 0 0 1 2
sebagai masukan untuk solusi kami, kami akan mencetak Y , karena hal ini f menghasilkan urutan itu. Namun, diberikan 0 1 0 1 2
sebagai input, kita akan mencetak N , karena tidak ada f yang menghasilkan urutan itu.
Uji kasus
Rumus yang diberikan ketika output adalah Y hanya untuk referensi; Anda tidak boleh mencetaknya.
0 1 2 3 4 5 Y (x)
1 N
0 0 0 Y (x%1)
0 1 2 0 1 2 0 0 1 2 Y (x%7%3)
0 0 1 N
0 1 2 3 4 5 6 0 0 1 2 Y (x%8%7)
0 1 2 0 1 2 0 1 2 3 N
0 2 1 0 2 1 0 2 1 N
0 1 0 0 0 1 0 0 0 0 1 Y (x%9%4%3%2)
Jawaban:
Pyth, 14 byte
Pengembalian
True/False
. Cobalah online: Demonstrasi atau Test SuitePenjelasan:
Pyth, 11 byte
Berdasarkan ide @ ferrsum . Saya benar-benar berpikir tentang menggunakan indeks nol untuk generasi subset, tetapi tidak menyadari, bahwa semua indeks nol harus sudah menjadi solusi.
sumber
Python 3,
239218 byteFungsi anonim yang mengambil input dari daftar
z
dan mengembalikanTrue
atauFalse
untukY
danN
.Ini menggunakan metode yang mirip dengan jawaban @Jakube , dan meskipun pada dasarnya adalah kekuatan kasar, berjalan sangat cepat.
Cobalah di Ideone
sumber
Python 2, 69 byte
Penggunaan
True
/False
.Jawaban untuk apa yang mencirikan seri mod-lipat ternyata kurang menarik daripada yang tampak pada awalnya. Ini adalah serangkaian bentuk 0, 1, ..., M - 1, 0, 1, ... x 1 , 0, 1, ..., x 2 , ... sedemikian rupa sehingga untuk semua i, 0 <= x i <M. Urutan seperti itu dapat diproduksi oleh rantai mod semua indeks (berbasis 0) dari nol dalam array, tidak termasuk yang pertama.
sumber
Jelly ,
191514 byteMengembalikan 1 untuk truey, 0 untuk falsy. Cobalah online!
Algoritma ini adalah O (n n ) , di mana n adalah panjang daftar, membuatnya terlalu lambat dan intensif memori untuk sebagian besar kasus uji.
Versi yang dimodifikasi - yang menggantikan yang kedua
L
dengan a5
- dapat digunakan untuk memverifikasi semua kasus uji . Perhatikan bahwa versi modifikasi ini tidak akan berfungsi untuk daftar panjang yang sewenang-wenang.Bagaimana itu bekerja
sumber
JavaScript (ES6),
98byteDisimpan 48 byte dengan beralih ke penemuan @ Feersum. Nilai apa pun yang diberikan
n
dalam array adalah nol, dalam hal ini prediksi berikutnyap
adalah 1, atau sama dengan prediksi berikutnya, di mana casep
bertambah. Kami juga mengukur panjangl
dari urutan awal dengan membandingkanp
untuki
, sebagain
keharusan selalu kurang daril
setiap saat.sumber
Python 2,
10399 byteMencetak 1 untuk truey dan 0 untuk falsy. Uji di Ideone .
sumber