Raja Roma Kuno mengalami kesulitan menentukan apakah kotak ajaib itu valid atau tidak, karena kotak ajaib yang dia periksa tidak termasuk pemisah di antara angka-angkanya. Dia telah menyewa seorang insinyur perangkat lunak untuk membantunya menentukan apakah kotak ajaib itu valid atau tidak.
Deskripsi Input
Input masuk pada argumen STDIN atau baris perintah. Anda tidak dapat memiliki input yang diinisialisasi dalam variabel (mis. "Program ini mengharapkan input dalam variabel x
"). Input dalam format berikut:
<top>,<middle>,<bottom>
Masing-masing <top>
, <middle>
dan <bottom>
merupakan string yang akan hanya pernah berisi karakter huruf besar I
, V
dan X
. Itu tidak akan berisi spasi atau karakter lain. Setiap string mewakili tiga angka Romawi, sehingga menghasilkan matriks angka 3x3. Namun, angka-angka Romawi ini mungkin (tetapi tidak harus) ambigu . Izinkan saya menggambarkan ini dengan sebuah contoh. Pertimbangkan contoh baris berikut dari tiga angka Romawi, tanpa spasi di antara setiap angka:
IVIIIIX
Karena tidak ada spasi di antara huruf-huruf, ada dua kemungkinan nomor di sini:
- 1, 8, 9 (
I VIII IX
) - 4, 3, 9 (
IV III IX
)
Ketika Anda menganggap bahwa ketiga baris matriks dapat bersifat ambivalen, ada potensi untuk ada banyak matriks 3x3 berbeda dari satu input.
Perhatikan bahwa urutan seperti 1, 7, 1, 9 ( I VII I IX
) tidak dimungkinkan karena setiap baris akan selalu mewakili tiga angka Romawi. Perhatikan juga bahwa angka Romawi harus valid, sehingga urutan seperti 1, 7, 8 ( I VII IIX
) juga tidak mungkin.
Deskripsi Output
Keluaran:
- Bilangan bulat
A
, di manaA
jumlah matriks 3x3 unik yang dapat dibentuk dari input yang ambisius, dan: - Nilai kebenaran jika salah satu dari matriks 3x3 unik membentuk kotak ajaib, atau:
- Nilai palsu jika tidak ada matriks 3x3 unik yang membentuk kotak ajaib.
Nilai kebenaran dan kepalsuan harus konsisten. Mereka dipisahkan oleh koma.
Diperlukan beberapa penjelasan tentang apa yang dianggap unik. Selama sebuah matriks tidak memiliki angka yang persis sama dalam posisi yang sama persis dengan matriks yang ditemukan sebelumnya, ia dihitung sebagai unik. Ini berarti bahwa refleksi, dll. Dari matriks yang ditemukan sebelumnya dihitung sebagai unik.
Contoh Input dan Output
Dalam contoh-contoh ini, saya gunakan true
sebagai nilai kebenaran saya dan false
sebagai nilai palsu saya.
Input: VIIIIVI,IIIVVII,IVIXII
Output: 24,true
(Segitiga ajaib adalah 8-1-6, 3-5-7, 4-9-2.)
Input: IIIXVIII,IVIII,VIIII
Keluaran:210,false
Ekstra
- Anda tidak diperbolehkan menggunakan fungsi konversi Angka Romawi bawaan jika bahasa pilihan Anda memilikinya.
sumber
Jawaban:
Perl, 219
237Jeda baris ditambahkan untuk kejelasan.
Ujilah aku .
sumber
Prolog - 686
Tidak disatukan
Tentu saja,
p
dapat juga didefinisikan sebagai:Dalam hal ini, lingkungan akan mengatakan 'Ya' atau 'Tidak' setelah menulis jumlah kotak.
Contoh
Menggunakan gerhana .
Contoh hasil untuk yang kedua ditempelkan di sini .
sumber
Python, 442 karakter
Kode pertama kali dibuat
N
yang merupakan pemetaan dari string angka romawi ke nilainya untuk semua angka yang mungkin kita butuhkan. Pisahkan setiap baris menjadi tiga dengan segala cara yang mungkin dan periksa yang mana dari triples yang dihasilkan semuanya memiliki pemetaanN
. Finalany
melihat apakah kombinasi adalah kotak ajaib.sumber
Haskell,
451429423 bytePemakaian:
Sekitar 70 byte hanya untuk mendapatkan format input dan output yang benar.
Fungsi
r
mengubah angka romawi (diberikan sebagai string) ke integer (jika bukan angka romawi0
yang dikembalikan).s
membagi string angka romawi menjadi 3 substring dan membuat triples tersebut dengan angka romawi yang valid dan mengubahnya melaluir
bilangan bulat.e
memeriksa apakah semua bilangan bulat dari daftar tiga elemen sama.p
mengambil tiga string angka romawi, membaginya melaluis
daftar bilangan bulat, menggabungkan satu bilangan bulat dari setiap daftar menjadi tiga kali lipat dan menyimpannya dengan jumlah yang sama di semua arah.f
menghitung jumlah matriks yang valid dan memeriksa apakahp
mengembalikan daftar kosong (tidak ada solusi yang valid) atau tidak (ada solusi yang valid). Fungsi utamai
membaca input dari STDIN, mengubahnya menjadi daftar string (q
membantu dengan mengganti,
dengan\n
) dan panggilanp
.sumber
R,
489474464Ini menjadi jauh lebih besar dari yang saya inginkan, tetapi saya curiga saya bisa menurunkannya sedikit.
Ini menggunakan metode brute force, dengan menghitung semua kemungkinan kombinasi Angka Romawi dan angka yang sesuai.
Setelah itu selesai membandingkan input ke daftar Angka Romawi dan mendapatkan kemungkinan digit.
Dari sana ia melewati setiap matriks angka dan menguji untuk kotak ajaib, akhirnya menghasilkan hasilnya.
Uji Coba. Ia menunggu input yang pernah disisipkan ke dalam RGui.
sumber