pengantar
Ini adalah salah satu teka-teki matematika favorit saya.
Diberi angka (katakanlah 3) dan berapa kali menggunakan angka itu (katakanlah 5), hasilkan 10 ekspresi yang menghasilkan 1, 2, 3, 4, 5, 6, 7, 8, 9 dan 10 menggunakan just +, -, ×, ÷, ^ dan √ (root) (tanda kurung diperbolehkan untuk operasi grup).
Sebagai contoh:
(3^3 + 3)/(3 + 3) = (33 - 3)/(3 + 3) = 3 + 3/3 + 3/3 = 5
Perhatikan bahwa semua di atas menggunakan lima 3 dan operasi matematika dan hasil ke 5. Anda juga dapat menggunakan 3 sebelum √ untuk menunjukkan akar pangkat tiga. Hal yang sama berlaku untuk menggunakan 4 sebelum √ untuk menunjukkan akar keempat.
Juga perhatikan bahwa dua 3 dapat digunakan untuk membentuk 33, atau tiga 3 dapat digunakan untuk membentuk 333 dan seterusnya.
Tantangan
- Anda akan diberi dua angka (keduanya mulai dari 1 hingga 5) sebagai argumen fungsi, STDIN atau argumen baris perintah.
- Angka pertama menunjukkan digit mana yang digunakan dan angka kedua menunjukkan berapa kali digit itu digunakan dalam ekspresi.
- Program Anda harus menampilkan array ukuran 10 (atau 10 angka yang dipisahkan spasi) di mana setiap elemen menunjukkan apakah ekspresi matematika (hanya menggunakan operator yang diizinkan) yang menghasilkan
(index + 1)
angka tersebut mungkin atau tidak menggunakan nilai kebenaran / kepalsuan.
Misalnya, jika inputnya adalah
1 3
Maka output seharusnya
[1, 1, 1, 0, 0, 0, 0, 0, 0, 1]
karena hanya 1, 2, 3 dan 10 yang dapat diekspresikan menggunakan tiga 1.
Skor
- Ini adalah kode-golf sehingga panjang kode minimum dalam byte menang.
Bonus
Cetak-em-semua [−50]
Kurangi 50 dari skor Anda jika elemen array output sama dengan jumlah total kombinasi yang masuk akal untuk mendapatkan (index + 1)
nilai alih-alih nilai jujur atau palsu.
Sebagai contoh, jika hanya ada 3 kemungkinan kombinasi dari lima 3 yang menghasilkan 5, maka entri ke- 4 larik keluaran haruslah 3.
Matematika Ekstrim [−100]
Kurangi 100 dari skor Anda jika elemen array output mengandung setidaknya satu dari ekspresi aktual yang menghasilkan (index + 1)
nilai.
Misalnya, jika menggunakan lima 3, entri ke- 4 larik keluaran dapat berupa (3^3 + 3)/(3 + 3)
, (33 - 3)/(3 + 3)
atau3 + 3/3 + 3/3
Berlebihan [−200]
Kurangi 200 dari skor Anda jika elemen array keluaran berisi semua kemungkinan kombinasi (dipisahkan oleh |
). Bonus ini ditambahkan di atas bonus Matematika Ekstrim , sehingga Anda mendapatkan total −300.
Misalnya, jika menggunakan lima 3, elemen ke- 4 larik keluaran harus(3^3 + 3)/(3 + 3)|(33 - 3)/(3 + 3)|3 + 3/3 + 3/3
Catatan: Setiap dua ekspresi untuk mencapai hasil yang sama harus berbeda secara logis dengan pendekatan yang berbeda di keduanya.
Misalnya, untuk mendapatkan 5 menggunakan lima 3, 3 + 3/3 + 3/3
sama 3/3 + 3 + 3/3
atau 3/3 + 3/3 + 3
karena pendekatan yang sama diambil untuk masing-masing. (3^3 + 3)/(3 + 3)
dan (33 - 3)/(3 + 3)
berbeda, karena 30 dalam pembilang dicapai melalui pendekatan yang berbeda.
UPDATE : Setelah melalui semua jawaban, ditemukan bahwa semua jawaban memiliki ketidaksempurnaan karena kasus tepi unary -
dan √. Dengan demikian, melewatkan kasus tepi itu dianggap oke sejauh kelengkapan jawaban terlibat.
Ini adalah pertanyaan yang sulit, tetapi yang agak menarik.
Selamat bermain golf!
1
s?