Ini terinspirasi oleh masalah matematika yang saya lihat di suatu tempat di internet tetapi tidak ingat di mana (PEMBARUAN: Masalah aslinya ditemukan pada subreddit teka-teki matematika dengan bukti asalkan itu mungkin, juga lihat posting Math SE ini ), meminta bukti jika proses berikut ini memungkinkan untuk setiap pasangan bilangan bulat sewenang-wenang (dari apa yang saya ingat, itu mungkin untuk setiap pasangan yang diberikan):
Diberikan sepasang bilangan bulat, j dan k, gandakan salah satunya dan tambahkan satu ke yang lain, menghasilkan sepasang bilangan bulat baru, yaitu, (j, k) -> (j + 1, k * 2) atau (j * 2, k +1). Kemudian ulangi proses ini dengan bilangan bulat tersebut, dengan tujuan agar pasangan bilangan bulat sama.
Contoh-contoh yang diberikan ini belum tentu optimal tetapi menunjukkan bagaimana proses ini dapat dilakukan pada bilangan bulat apa pun, positif, negatif atau nol:
(2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(5, 6) -> (6, 12) -> (7, 24) -> (14, 25) -> (28, 26) -> (56, 27) -> (112, 28) -> (113, 56) -> (226, 57) -> (227, 114) -> (228, 228)
(0, 2) -> (1, 4) -> (2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(-4, 0) -> (-3, 0) -> (-2, 0) -> (-1, 0) -> (0, 0)
(3, -1) -> (6, 0) -> (12, 1) -> (13, 2) -> (14, 4) -> (15, 8) -> (16, 16)
(-4, -3) -> (-8, -2) -> (-16, -1) -> (-32, 0) -> (-31, 0) -> ... -> (0, 0)
Tantangan
Buat program yang diberi dua bilangan bulat, mengeluarkan daftar langkah-langkah yang diperlukan untuk membuat bilangan bulat itu sama dengan secara berulang menambah satu dan menggandakan yang lainnya
Spesifikasi
- Solusi tidak harus optimal tetapi harus diselesaikan dalam jumlah langkah terbatas untuk setiap pasangan yang sewenang-wenang
Input harus berupa dua bilangan bulat
Output dapat berupa output yang masuk akal yang dengan jelas menunjukkan bilangan bulat yang dihasilkan dari setiap langkah, misalnya:
- string dengan dua pembatas yang berbeda (simbol apa saja, spasi putih, dll), satu untuk setiap bilangan bulat dalam satu pasangan dan satu untuk setiap pasangan
- mis. input j, k: 2, 5 -> output: 3,10; 6,11; 12,12
- daftar daftar bilangan bulat
- mis. input j, k: 2, 5 -> output: [[3, 10], [6, 11], [12, 12]]
- string dengan dua pembatas yang berbeda (simbol apa saja, spasi putih, dll), satu untuk setiap bilangan bulat dalam satu pasangan dan satu untuk setiap pasangan
Jika input adalah pasangan angka yang sama, Anda dapat mengeluarkan apa saja asalkan konsisten dengan jawaban nontrivial lainnya
- sebagai contoh
- jika input [2, 5] memiliki output [[3, 10], [6, 11], [12, 12]], yang tidak termasuk pasangan input, maka input [4, 4] seharusnya tidak menghasilkan apa-apa.
- jika input [2, 5] memiliki output [[2, 5], [3, 10], [6, 11], [12, 12]], yang mencakup pasangan input, maka input [4, 4] harus output [[4, 4]].
- sebagai contoh
Metode IO standar berlaku dan lubang standar dilarang
Ini adalah kode golf sehingga jawaban terpendek dalam byte menang
[(12,12),(6,11),(3,10),(2,5)]
untuk input (2,5)
?