Diberikan daftar ekspresi matematika yang semuanya benar dan terdiri dari perhitungan sisa modulo dengan dua angka dan hasilnya, tugas Anda adalah menghasilkan n
angka pertama yang benar untuk semua pernyataan dalam daftar.
Sebagai contoh:
[m % 3 = 0, m % 4 = 1, m % 5 = 3]
, di mana% adalah operator modulo.
Untuk n
= 3, 3 angka pertama (dihitung dari 0) yang sesuai dengan urutannya 33, 93, 153
, sehingga hasilnya adalah (format terserah Anda).
Aturan / IO
- Anda mengambil angka positif
n
dan daftar kebenaran. Tentu saja, hal-hal yang perlu Anda ambil hanyalah RHS dari operasi modulo dan hasilnya. n
dan angka-angka dalam daftar kebenaran akan selalu berada dalam kisaran 1 -> 2 ^ 31-1 , dan begitu pula hasilnya.- Anda mengambil input dalam bentuk apa pun yang mudah dan keluaran dalam bentuk apa pun yang mudah. Sebagai contoh, masukan:
3 [3 0, 4 1, 5 3]
dan output:33 93 153
. - Dijamin bahwa solusinya secara matematis dimungkinkan.
- Sumber input dapat berasal dari file, parameter fungsi, stdin, dll ... Hal yang sama berlaku untuk output.
- Tidak ada celah.
- Ini adalah kode-golf, sehingga jumlah byte terendah menang.
Testcases
# Input in the form <n>, <(d r), (d2 r2), ...>
# where <d> = RHS of the modulo expression and <r> the result of the expression. Output in the next line.
5, (3 2), (4 1), (5 3)
53 113 173 233 293
3, (8, 0), (13, 3), (14, 8)
120 848 1576
Implementasi referensi dalam pseudo-code
n = (an integer from stdin)
truths = (value pairs from stdin)
counter = 0
while n != 0 {
if matches_criterias(counter, truths) {
print counter
n -= 1
}
counter += 1
}
0
hasil yang valid?Jawaban:
Jelly , 7 byte
Ini adalah program lengkap. Argumennya adalah pembagi, moduli target, dan sejumlah solusi, dalam urutan itu.
Cobalah online!
Bagaimana itu bekerja
sumber
Perl 6 , 33 byte
Cobalah
Inputnya adalah
( number-of-values, list-of-divisors, list-of-remainders )
Diperluas:
sumber
JavaScript (ES6),
7168 byteFungsi rekursif sederhana. Gunakan dengan menjelajah array pertama dan
n
kedua, seperti:sumber
JavaScript (ES6),
747069 byteMengambil input sebagai integer
n
dan sebuah arraya
dari[modulo, remainder]
array dengan currying sintaks(n)(a)
.Uji kasus
Tampilkan cuplikan kode
sumber
Haskell, 47 byte
Contoh penggunaan:
3 # [(8,0),(13,3),(14,8)]
->[120,848,1576]
.sumber
Python, 67 byte
sumber
range(2**31)
. Juga sangat bagus. Saya datang dengan jawaban ini secara mandiri.JavaScript (ES6),
7270 byteTelusuri array kondisi terlebih dahulu dan jumlah hasil kedua. Sunting: Disimpan 2 byte dengan tidak menangani case nol.
sumber
Mathematica, 42 byte
Fungsi yang tidak disebutkan namanya, mengembalikan daftar bilangan bulat positif, dan mengambil tiga input: daftar moduli, daftar sisa, dan jumlah
n
bilangan bulat untuk kembali. Sebagai contoh, test case kedua dipanggil olehdan kembali
{120, 848, 1576}
.Builtin
#2~ChineseRemainder~#
memberikan solusi non-negatif terkecil; untuk mendapatkan semua solusi yang diinginkan, kami menambahkan nomor iniRange[0,#3-1]LCM@@#
, yang merupakann
kelipatan non-negatif pertama dari kelipatan paling umum dari semua moduli.Mathematica tidak memiliki daftar tak terbatas yang malas dievaluasi sejauh yang saya tahu, jadi implementasi ini lebih pendek daripada apa pun yang saya temukan yang menguji bilangan bulat negatif satu per satu — bahkan dengan panjang nama fungsi
ChineseRemainder
, dan meskipun tes sepertiMod[k,{8,13,14}]=={0,3,8}
berfungsi dengan sempurna baik.sumber
PHP, 97 byte
jawaban terpanjang sejauh ini. Tapi saya senang saya bisa mendapatkannya di bawah 100.
mengambil input dari argumen baris perintah yang terpisah,
mencetak pertandingan yang dipisahkan dan dibuntuti oleh garis bawah.
Loop tidak pernah putus; hampir tidak cocok untuk penguji online.
Jalankan seperti
php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...
.kerusakan
catatan
$argc==count($argv)
. Untuk tiga pasangan ada 8 argumen: nama file$argv[0]
,n
=$argv[1]
danmodulo
/result
pasangan di atas itu.$v=2
bertambah 3 kali memberi5
>$argc/2
.Tambahkan satu byte untuk jalan keluar yang bersih: Ganti
&&$a[1]-->0?print$k._
dengan?$a[1]--?print$k._:die
.sumber
Pyth -
1413 byteCobalah online di sini .
sumber
SmileBASIC, 102 byte
Ini adalah pertama kalinya saya menggunakan
ON
SB. Alasan saya menggunakannya di sini bukanIF F GOTO@L
karena saya bisa meletakkannya?T
di baris yang sama, menghemat 1 byte.sumber
Python, 59 byte
m
adalah daftar ekspresi dalam bentuk string seperti["i % 4 == 1", ...]
Cobalah online (dengan rentang yang lebih pendek, sehingga benar-benar akan selesai)
sumber
PHP, 91 Bytes
Ambil daftar sebagai array asosiatif
Cobalah online!
sumber