pengantar
Perhatikan contoh berikut:
CODE
+ GOLF
——————
GREAT
Ini adalah persamaan di mana setiap huruf mewakili angka desimal dan kata-kata mewakili angka alami (huruf yang sama mewakili angka yang sama dan huruf yang berbeda mewakili angka yang berbeda). Tugasnya adalah mencocokkan setiap huruf dengan nilai digitnya sehingga persamaannya benar. Salah satu solusi untuk persamaan di atas adalah:
9265
+ 1278
——————
10543
Tugas Anda
Tugas Anda adalah menulis program atau fungsi yang dapat menyelesaikan persamaan seperti yang terlihat di atas.
Memasukkan
Input adalah string dalam format berikut:
[A-Z]+\+[A-Z]+=[A-Z]+
Contoh:
CODE+GOLF=GREAT
AA+BB=CC
Spasi dihilangkan dan hanya huruf antara kapital A dan Z yang akan digunakan (tidak ada huruf khusus atau kecil).
String ini dapat dibaca dari input standar, dari file, atau sebagai parameter fungsi.
Keluaran
Anda memiliki dua opsi berikut untuk format output:
- persamaan asli dengan digit tersubstitusi
- daftar surat dan nilainya
Jika ada beberapa solusi, salah satu (tetapi hanya satu) di antaranya harus dikembalikan. Jika tidak ada solusi, program harus mengembalikan string kosong atau nol. Output dapat dikembalikan sebagai string, dapat ditulis ke output standar atau file.
Contoh:
9265+1278=10543
A=1 B=2 C=3
(Anda dapat menggunakan pembatas apa pun)
Aturan
- Untuk mempermudah, angka diterima untuk memulai dengan 0, tetapi Anda dapat menangani angka dengan memimpin 0 sebagai solusi yang tidak valid, terserah Anda
- Huruf yang sama mewakili angka yang sama dan huruf yang berbeda mewakili angka yang berbeda
- Anda dapat menggunakan bahasa apa pun dan perpustakaan standar bahasa yang dipilih (tidak ada lib eksternal)
- Anda tidak dapat terhubung ke sumber daya apa pun di internet (mengapa Anda mau?)
- Ini adalah tugas kode golf, kode terpendek menang. Karakter spasi putih berturut-turut dihitung sebagai satu karakter. (Jadi setiap program yang ditulis di spasi putih otomatis menang)
Saya punya solusi yang agak meretas menggunakan 179 karakter. Jika ada sesuatu yang tidak jelas, silakan tanyakan di komentar saya.
sumber
If there are no solutions, the program should return an empty string or null.
Loop tak terbatas masih menghasilkan apa-apa ... boleh saya?Jawaban:
Python - 48 karakter
Menyalahgunakan aturan spasi putih.
Pertama saya mengonversi setiap karakter dalam jawaban CesiumLifeJacket ke nilai ASCII-nya (saya bisa saja menulis sendiri tetapi saya malas, dan toh itu tidak akan mempengaruhi skor akhir). String panjang dalam solusi saya adalah satu ruang untuk masing-masing nilai ASCII tersebut, dan tab yang memisahkannya. Pisahkan pada tab, temukan panjangnya, konversikan kembali ke karakter dan jalankan.
SE mengonversi masing-masing tab menjadi 4 spasi, jadi copypasting tidak akan berfungsi. Anda hanya harus percaya padaku :)
sumber
Ruby 2.0, 122 karakter
Pengocokan kasar + eval!
Ini belum memenuhi kriteria untuk mengembalikan string kosong / kosong ketika tidak ada solusi; itu hanya loop tak terhingga.Jika tidak dapat menemukan hasil setelah ~ 300 juta iterasi, itu akan mengembalikan nol. Cukup dekat?Ia menemukan semua huruf unik dalam input, kemudian berulang kali mengocok angka 0-9 dan mencoba mencocokkannya dengan huruf sampai menemukan konfigurasi yang berfungsi.
Kode disajikan sebagai fungsi yang disebut
f
yang mengembalikan string dengan angka yang diganti, seperti dalam Opsi Output 1 di atas. Contoh penggunaan:Waktu berjalan untuk
CODE+GOLF=GREAT
contoh pada mesin saya bervariasi dari seketika hingga sekitar 6 detik - tergantung pada seberapa beruntungnya Anda dengan shuffles!Saya khususnya tidak senang dengan
gsub(/\b0/,'')
bit untuk menghapus angka nol di depan tetapi itu adalah satu-satunya hal yang dapat saya pikirkan untuk mencegaheval
menafsirkan angka sebagai int oktal.( BONUS : Karena menggunakan eval, ia berfungsi untuk ekspresi Ruby yang sewenang-wenang dan bukan hanya penambahan!)
sumber
permutation
, tetapi seperti yang Anda katakan, saya terutama berkaitan dengan panjang kode.LiveScript (179 karakter)
Ini memiliki waktu berjalan yang deterministik dan relatif cepat dan bekerja dengan operator lain (+, -, *) juga.
sumber
Python,
256213 karakterWaktu berjalan yang mengerikan, akan mencoba untuk meningkatkan lebih lanjut:
sumber
JavaScript 138
Bruteforce acak.
Dapat memakan waktu cukup lama (bidikan terbaik saya
CODE+GOLF=GREAT
adalah 3 detik, 3 menit terburuk saya).Cobalah dengan ekspresi sederhana seperti
A+B=C
sumber
Haskell, 222
Paksaan. Mencoba setiap pencocokan yang mungkin sampai menemukan satu, atau setelah selesai mencoba semuanya. Saya memperluas aturan output: mencetak sesuatu seperti
[[('C','3'),('O','8'),('D','6'),('E','7'),('G','0'),('L','5'),('F','2'),('R','4'),('A','1'),('T','9')]]
untuk solusinya, dan jika tidak ada, cetak[]
. Beri tahu saya jika saya perlu mengubah ini.sumber
CJam - 17
Total 975 karakter, tetapi 960 di antaranya adalah spasi putih dalam 2 urutan, sehingga yang dihitung sebagai 2 karakter, dan bersama-sama dengan 15 lainnya, kita mendapatkan 17.
975 mungkin tampak seperti banyak, tetapi perhatikan bahwa solusi python undergroundmonorail memiliki 18862 karakter, mereka Hanya satu baris :)
Anda dapat menjalankannya di http://cjam.aditsu.net/ untuk kata-kata singkat, tetapi Anda mungkin harus menggunakan penerjemah java untuk yang lebih panjang. Dengan java di laptop saya,
SEND+MORE=MONEY
berjalan dalam 30-40 detik danCODE+GOLF=GREAT
dalam hampir 3 menit. Itu tidak menerima angka yang dimulai dengan 0 (karena itu tidak keren).Berikut adalah program yang menghasilkan program di atas (juga membantu jika StackExchange tidak menampilkan spasi putih dengan benar):
11 baris pertama berisi program asli (tidak benar-benar golf) dalam sebuah string, dan baris terakhir melakukan konversi dan menambahkan bagian decoding.
sumber
Powershell, 137 byte
port LiveScript
Script tes tidak digabungkan:
Keluaran:
sumber
PHP,
118113 bytemencetak angka di bawah huruf dan keluar dari program; loop tanpa batas jika tidak terpecahkan. Jalankan sebagai pipa dengan
-nr
.kerusakan
sumber
PHP, 145 byte
fungsi rekursif, mencetak persamaan terpecahkan dan keluar dari program; kembali
NULL
saat tidak terpecahkan.Cobalah online
kerusakan
sumber