Jika Anda sudah membaca buku Kontak oleh Carl Sagan, tantangan ini mungkin terasa asing bagi Anda.
Diberikan input dari seperangkat persamaan matematika yang terdiri dari angka, operator yang tidak dikenal, nomor lain, dan hasil, menyimpulkan operator mana yang mewakili penambahan, pengurangan, perkalian, atau pembagian.
Setiap persamaan input akan selalu terdiri dari
- bilangan bulat non-negatif
- salah satu surat
A
,B
,C
, atauD
- bilangan bulat non-negatif lainnya
- karakter
=
- bilangan bulat non-negatif akhir
digabungkan bersama. Misalnya, input yang mungkin adalah 1A2=3
, dari mana Anda dapat menyimpulkan yang A
mewakili penambahan. Setiap bilangan bulat akan memuaskan 0 ≤ x ≤ 1,000
.
Namun, tidak selalu sesederhana itu. Dimungkinkan adanya ambiguitas antara:
5A0=5
: penambahan / pengurangan1A1=1
: perkalian / pembagian0A5=0
: perkalian / pembagian2A2=4
: penambahan / perkalian4A2=2
: pengurangan / pembagian0A0=0
: penambahan / pengurangan / perkalian
dan seterusnya. Tantangannya adalah menggunakan kemampuan ini untuk mempersempit pilihan, dikombinasikan dengan proses eliminasi, untuk mengetahui apa yang diwakili oleh setiap huruf. (Akan selalu ada setidaknya satu persamaan input, dan akan selalu memungkinkan untuk secara tidak ambigu mencocokkan secara unik setiap huruf yang digunakan dalam input dengan satu operator.)
Sebagai contoh, katakanlah input adalah persamaan berikut:
0A0=0
: this mempersempit A ke penjumlahan, pengurangan, atau perkalian (tidak dapat dibagi dengan 0).10B0=10
: B harus berupa penambahan atau pengurangan.5C5=10
: C jelas merupakan penambahan, yang membuat pengurangan B, yang membuat perkalian A.
Oleh karena itu, output untuk persamaan input ini harus sesuai A
dengan *
, B
dengan -
, danC
dengan +
.
Input dapat diberikan sebagai string spasi-tunggal / koma-dibatasi atau array string, masing-masing mewakili satu persamaan. Output dapat berupa string tunggal ( "A*B-C+"
), array ( ["A*", "B-", "C+"]
), atau kamus / seperti array 2D ( {"A": "*", ...}
atau [["A", "*"], ...]
).
Anda dapat berasumsi bahwa angka tidak akan pernah dibagi dengan angka lain yang tidak dapat dibagi oleh (jadi, Anda tidak perlu khawatir tentang apakah pembagian harus floating point atau terpotong).
Karena ini adalah kode-golf , kode terpendek dalam byte akan menang.
Kasus uji:
In Out
-------------------------------
0A0=0 10B0=10 5C5=10 A*B-C+
100D100=10000 D*
4A2=2 4B2=2 0A0=0 A-B/
15A0=15 4B2=2 2C2=0 A+B/C-
1A1=1 0A0=0 A*
0A0=0 2A2=4 5B0=5 2B2=4 A*B+
2A2=4 0C0=0 5B0=5 5A0=5 A+B-C*
0A1000=0 4A2=2 A/