Tugas Anda adalah menulis sebuah program (atau dua program terpisah) dalam bahasa apa pun yang:
- Dapat mengambil papan Sudoku yang lengkap sebagai input (dalam format logis apa pun) dan mengompresnya menjadi serangkaian karakter
- Dapat mengambil string terkompresi sebagai input dan mendekompresnya untuk mendapatkan papan Sudoku lengkap yang sama persis (output dalam format logis dari 9 baris)
Catatan: Gunakan aturan Sudoku untuk keuntungan Anda; itulah ide di balik tantangan ini.
Aturan Sudoku di Wikipedia
Aturan
- Hanya karakter ASCII yang dapat dicetak (32 - 126) yang diizinkan dalam output terkompresi (mis. Tidak ada karakter multibyte ).
- Anda dapat mengasumsikan bahwa input adalah papan Sudoku 3x3 yang valid (aturan normal, tidak ada variasi).
- Saya tidak akan memaksakan batas waktu, tetapi jangan membuat algoritma brute-force. Atau, pengirim harus dapat menguji pengiriman mereka sebelum memposting (Terima kasih Jan Dvorak).
Jika Anda memiliki pertanyaan atau masalah, Anda dapat meminta klarifikasi atau membuat saran di komentar.
Ketentuan Kemenangan
Nilai = jumlah dari jumlah karakter dari semua sepuluh kasus uji
Skor terendah menang.
Uji Kasus
Anda dapat menggunakan ini untuk menguji seberapa baik program Anda bekerja.
9 7 3 5 8 1 4 2 6
5 2 6 4 7 3 1 9 8
1 8 4 2 9 6 7 5 3
2 4 7 8 6 5 3 1 9
3 9 8 1 2 4 6 7 5
6 5 1 7 3 9 8 4 2
8 1 9 3 4 2 5 6 7
7 6 5 9 1 8 2 3 4
4 3 2 6 5 7 9 8 1
7 2 4 8 6 5 1 9 3
1 6 9 2 4 3 8 7 5
3 8 5 1 9 7 2 4 6
8 9 6 7 2 4 3 5 1
2 7 3 9 5 1 6 8 4
4 5 1 3 8 6 9 2 7
5 4 2 6 3 9 7 1 8
6 1 8 5 7 2 4 3 9
9 3 7 4 1 8 5 6 2
1 5 7 6 8 2 3 4 9
4 3 2 5 1 9 6 8 7
6 9 8 3 4 7 2 5 1
8 2 5 4 7 6 1 9 3
7 1 3 9 2 8 4 6 5
9 6 4 1 3 5 7 2 8
5 4 1 2 9 3 8 7 6
2 8 9 7 6 1 5 3 4
3 7 6 8 5 4 9 1 2
8 3 5 4 1 6 9 2 7
2 9 6 8 5 7 4 3 1
4 1 7 2 9 3 6 5 8
5 6 9 1 3 4 7 8 2
1 2 3 6 7 8 5 4 9
7 4 8 5 2 9 1 6 3
6 5 2 7 8 1 3 9 4
9 8 1 3 4 5 2 7 6
3 7 4 9 6 2 8 1 5
6 2 8 4 5 1 7 9 3
5 9 4 7 3 2 6 8 1
7 1 3 6 8 9 5 4 2
2 4 7 3 1 5 8 6 9
9 6 1 8 2 7 3 5 4
3 8 5 9 6 4 2 1 7
1 5 6 2 4 3 9 7 8
4 3 9 5 7 8 1 2 6
8 7 2 1 9 6 4 3 5
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 1 4 3 6 5 8 9 7
3 6 5 8 9 7 2 1 4
8 9 7 2 1 4 3 6 5
5 3 1 6 4 8 9 7 2
6 4 8 9 7 2 5 3 1
9 7 2 5 3 1 6 4 8
1 4 5 7 9 2 8 3 6
3 7 6 5 8 4 1 9 2
2 9 8 3 6 1 7 5 4
7 3 1 9 2 8 6 4 5
8 5 9 6 4 7 3 2 1
4 6 2 1 3 5 9 8 7
6 2 4 8 7 3 5 1 9
5 8 7 4 1 9 2 6 3
9 1 3 2 5 6 4 7 8
5 2 7 4 1 6 9 3 8
8 6 4 3 2 9 1 5 7
1 3 9 5 7 8 6 4 2
2 9 1 8 5 4 3 7 6
3 4 8 6 9 7 5 2 1
6 7 5 1 3 2 4 8 9
7 1 2 9 4 5 8 6 3
4 8 3 2 6 1 7 9 5
9 5 6 7 8 3 2 1 4
2 4 6 7 1 3 9 8 5
1 8 5 4 9 6 7 3 2
9 3 7 8 2 5 1 4 6
6 7 8 5 4 2 3 9 1
4 9 3 1 6 8 2 5 7
5 1 2 3 7 9 4 6 8
8 2 4 9 5 7 6 1 3
7 5 9 6 3 1 8 2 4
3 6 1 2 8 4 5 7 9
8 6 1 2 9 4 5 7 3
4 7 5 3 1 8 6 9 2
3 9 2 5 6 7 8 1 4
2 3 6 4 5 9 7 8 1
1 5 4 7 8 3 2 6 9
9 8 7 6 2 1 3 4 5
5 2 9 1 7 6 4 3 8
6 4 8 9 3 2 1 5 7
7 1 3 8 4 5 9 2 6
Kredit untuk http://www.opensky.ca/~jdhildeb/software/sudokugen/ untuk beberapa di antaranya
Jika Anda menemukan masalah dengan test case, tolong beri tahu saya.
code-challenge
compression
sudoku
kukac67
sumber
sumber
fudge
subrutin dalam jawaban kedua saya yang mendapatkan 12 poin). Tes yang lebih adil adalah mensyaratkan bahwa (a) solusi pengujian bekerja, (b) skor pada 1.000 grid Sudoku yang dihasilkan secara acak dan bagi jawaban dengan 100. Saya percaya yang terbaik yang dapat dilakukan dengan data acak adalah sekitar 110, berdasarkan pada 10 x log-base-95 (6670903752021072936960)Jawaban:
Haskell, 107 poin
Hasil uji kasus:
Kode ini tidak cantik, tetapi berfungsi. Dasar dari algoritma ini adalah bahwa sementara menghitung semua solusi akan memakan waktu terlalu lama, menghitung semua solusi dalam satu blok agak cepat - pada kenyataannya, itu lebih cepat daripada konversi berikutnya ke base95. Semuanya berjalan dalam hitungan detik di interpreter pada mesin kelas bawah saya. Program yang dikompilasi akan selesai segera.
Pengangkatan berat dilakukan oleh
solution2ix
fungsi, yang, untuk setiap blok 3x3, itu menghasilkan semua permutasi yang mungkin, tunduk pada kendala dari kiri dan dari atas, sampai ia menemukan yang ada dalam solusi yang dikodekan, hanya mengingat indeks permutasi tersebut. Kemudian menggabungkan indeks menggunakan beberapa bobot yang telah dihitung sebelumnya dan skema Horner.Di arah lain,
ix2solution
fungsi pertama-tama menguraikan indeks menjadi sembilan nilai. Kemudian untuk setiap blok ia mengindeks daftar permutasi yang mungkin dengan nilainya masing-masing, kemudian mengekstraksi kendala untuk blok berikutnya.assignments
adalah rekursi sederhana namun jelek yang tidak digerakkan menggunakan daftar monad. Ini menghasilkan daftar permutasi yang diberikan serangkaian kendala.Kekuatan sebenarnya berasal dari batas ketat pada panjang daftar permutasi:
9!
. Nilai ini tidak pernah digunakan kecuali untuk menemukan batas atas untuk panjang output.6*5*4*6!
adalah tujuh kali lebih buruk dari jumlah aktual yang ditemukan oleh penghitungan:12096
Produk dari semua batas ini adalah
71025136897117189570560
~ =95^11.5544
, yang berarti tidak ada kode yang lebih panjang dari 12 karakter dan hampir setengahnya harus 11 karakter atau kurang. Saya telah memutuskan untuk tidak membedakan antara string yang lebih pendek dan string yang sama dengan spasi. Spasi di tempat lain adalah signifikan.Batas teoritis efisiensi penyandian untuk kode bebas awalan - basis-95 logaritma
6670903752021072936960
- adalah11.035
, yang berarti bahwa bahkan algoritma yang optimal tidak dapat menghindari menghasilkan keluaran panjang-12, meskipun akan menghasilkannya hanya dalam 3,5% dari semua kasus. Mengizinkan panjang menjadi signifikan (atau setara, menambahkan spasi tambahan) memang menambahkan beberapa kode (1% dari jumlah total), tetapi tidak cukup untuk menghilangkan kebutuhan akan panjang-12 kode.sumber
Python, 130 poin
Algoritma ini bekerja dengan menyandikan setiap posisi di papan tulis, satu per satu, menjadi bilangan bulat besar. Untuk setiap posisi, itu menghitung nilai yang mungkin diberikan semua tugas yang dikodekan sejauh ini. Jadi jika [1,3,7,9] adalah nilai yang mungkin untuk posisi yang diberikan, dibutuhkan 2 bit untuk menyandikan pilihan.
Yang menyenangkan tentang skema ini adalah bahwa jika suatu posisi hanya memiliki satu pilihan yang tersisa, tidak perlu ruang untuk menyandikan.
Setelah kita memiliki bilangan bulat besar kita menuliskannya di basis 95.
Mungkin ada urutan pengkodean yang lebih baik daripada lexicographic, tapi saya belum banyak memikirkannya.
Encoder:
Dekoder:
Jalankan seperti ini:
sumber
perl - skor
115113103113Keluaran:
Keluaran:Tak satu pun dari garis-garis itu memiliki ruang terminating. Perhatikan bahwa baris pertama kosong.
Algoritma ini berfungsi sebagai berikut. Untuk kompres:
Mulai dengan string 'saat ini' kosong yang mewakili kisi Sudoku
Pertimbangkan untuk menambahkan masing-masing digit 1 .. 9 ke string itu, dan tentukan yang mana yang layak.
Dapatkan digit berikutnya dari kotak jawaban (dan tambahkan ke saat ini)
Jika hanya satu yang layak, tidak ada yang dikodekan
Jika lebih dari satu layak, hitung jumlah opsi yang layak, urutkan, dan kode angka itu sebagai indeks ke dalam array yang diurutkan. Catat digit dan angka yang layak sebagai 2-tuple dalam array.
Ketika semua selesai, kode masing-masing 2-tupel (dalam urutan terbalik) dalam nomor berbasis variabel yang disimpan sebagai bigint.
Ekspresikan bigint di base 95.
Untuk memecahkan kode:
Mulai dengan string 'saat ini' kosong yang mewakili kisi Sudoku
Decode nomor base95 ke bigint
Pertimbangkan untuk menambahkan masing-masing digit 1 .. 9 ke string itu, dan tentukan yang mana yang layak.
Jika hanya satu yang layak, tidak ada yang dikodekan; tambahkan pilihan itu ke kisi
Jika lebih dari satu layak, hitung jumlah opsi yang layak, urutkan, dan kode angka itu sebagai indeks ke dalam array yang diurutkan.
Dekode bigint-basis variabel menggunakan jumlah opsi yang layak sebagai basis, dan modulus sebagai indeks ke dalam array, dan output digit itu sebagai nilai sel.
Untuk menentukan jumlah opsi yang layak, Game :: Sudoku :: Solver digunakan. Itu terutama untuk kejelasan karena ada 3 baris pemecah Sudoku di situs ini.
Untuk melakukan semua 10 mengambil 8 detik di laptop saya.
The
fudge
operasi macam array berbeda untuk mencapai nilai minimal untuk uji kasus. Seperti yang didokumentasikan, ini adalah fudge. Fudge mengurangi skor dari 115 menjadi 103. Ini buatan tangan untuk memastikan bahwa kode bigint untuk tes pertama adalah 0. Skor terburuk untuk setiap sudoku adalah 12 memberikan skor 120. Dengan demikian saya tidak berpikir ini penting sebagai hard-coding; melainkan mengoptimalkan untuk data uji. Untuk melihatnya bekerja tanpa ini, perubahansort fudge
dalamsort
di kedua tempat.Kode berikut:
sumber
CJam, 309 byte
Ini hanyalah solusi dasar cepat. Maaf saya melakukan ini dalam bahasa golf, tapi itu sebenarnya cara paling sederhana untuk melakukannya. Saya akan menambahkan penjelasan tentang kode yang sebenarnya besok, tetapi saya telah menjabarkan algoritme di bawah ini.
Encoder
Dekoder
Uji di sini.
Input dari encoder (pada STDIN) dan output dari decoder (pada STDOUT) adalah dalam bentuk array CJam bersarang. Misalnya
10 output tes adalah:
Algoritma ini sangat sederhana:
sumber
Python 2.7, 107 karakter total
Enumerasi brute-force TL; DR dari kotak 3x3 dengan kendala atas + kiri
kasus uji:
fungsi pembantu untuk mencetak sudoku
menghasilkan semua kotak yang mungkin diberikan kendala di atas dan ke kiri
lihat komentar kode untuk lebih jelasnya
ekstrak semua kotak dari papan sudoku sebagai tupel
lihat komentar kode untuk lebih jelasnya
mengubah kotak kembali ke papan sudoku
pada dasarnya kebalikan dari fungsi di atas
kuadrat yang tersisa, mengembalikan batasan
lihat komentar kode untuk lebih jelasnya
diberikan kotak di atas, mengembalikan batasan
lihat komentar kode untuk lebih jelasnya
membuat string
ini adalah daftar dependensi hardcoded untuk setiap kotak
lihat komentar kode untuk lebih jelasnya
ini adalah daftar jumlah maksimum opsi yang mungkin untuk setiap kotak
lihat komentar kode untuk lebih jelasnya
ini menggabungkan fungsi-fungsi di atas dan mengonversi papan ke daftar bilangan bulat
dan kembali ke papan
oke itu saja fungsinya
untuk setiap papan, buat tali dan cetaklah
sekarang cetak total panjang semua string
dan un-stringify, untuk membuktikan itu bukan kompresi satu arah
keluaran:
sumber
Mathematica, skor:
1309Memperbarui:
Setelah jawaban ini diposting, itu menginspirasi celah baru yang lebih dekat: "Mengoptimalkan untuk kasus uji yang diberikan" . Namun saya akan meninggalkan jawaban ini apa adanya, sebagai contoh celah. Jangan ragu untuk downvote. Saya tidak akan terluka.
Ini mengkodekan sel pada suatu waktu dalam urutan raster, dan untuk setiap sel mengesampingkan nilainya untuk sel berikutnya menggunakan aturan dasar Sudoku. Jadi, misalnya, ketika sel dikodekan dan hanya memiliki empat kemungkinan, maka basis 4 digit ditambahkan ke bilangan bulat besar. Ini juga mengkodekan kasus uji secara langsung sebagai bilangan bulat kecil, masih dengan benar mengompresi dan mendekompresi semua papan Sudoku yang valid dengan panjang rata-rata terkompresi ~ 12,5 karakter, 1,5 lebih dari 11.035 optimal, dengan kode yang relatif sederhana dan tidak diperlukan pemecah Sudoku.
Kasus uji yang dikodekan:
Ini tidak menghasilkan pengkodean sempurna (rata-rata ~ 11), karena aturan dasar tidak mengesampingkan beberapa pilihan yang sebenarnya tidak ada solusi. Performanya bisa dibuat sempurna (mis. Integer besar akan selalu kurang dari jumlah papan Sudoku yang mungkin) dengan memeriksa untuk melihat apakah tidak ada solusi untuk beberapa pilihan saat ini menggunakan pemecah Sudoku, dan menghilangkannya juga.
sumber
J, 254 poin
Kompresi DekompresiStandar I / O agak canggung di J karena
jconsole
sebenarnya adalah REPL, jadi saya mengambil kebebasan untuk menulis output terkompresi ke file.Temukan indeks anagram dari setiap baris, perlakukan sembilan angka yang dihasilkan sebagai angka basis- (9!), Dan akhirnya dikonversi ke basis-95, tambahkan 32 dan konversi ke ASCII seperti dalam solusi Martin Büttner. Indeks anagram permutasi dari 1..n hanyalah indeks permutasi dalam daftar semua permutasi yang diurutkan secara leksikal, misalnya
5 4 3 2 1
memiliki indeks anagram 5! - 1 = 119 .Semua operasi memiliki invers yang mudah, jadi dekompresi sederhana.
Sebagai bonus, contoh-contohnya berada dalam format J-friendly, jadi input / output untuk sudokus yang didekompresi persis seperti yang diberikan dalam contoh-contoh (meskipun input ke encoder membutuhkan baris baru yang tertinggal).
String terkompresi untuk testcases:
sumber
Python 3, 120 poin
Program ini mencantumkan semua kemungkinan blok 3x3 dan mengingat yang salah satunya benar-benar hadir dalam Sudoku asli, lalu menempatkan semua angka tersebut bersama dalam representasi basis-95. Meskipun ini sangat dekat dengan hard-coding, itu mengkompresi dan mendekompresikan contoh dalam waktu sekitar 5 detik pada komputer saya.
Fungsi utamanya adalah
compress(sudoku)
dandecompress(text)
.Output:
sumber
Python 2.5, 116 poin
Kode:
Hasil:
Sangat lambat. Butuh 517 detik untuk menjalankan dan memverifikasi pada mesin saya.
encconfig mengambil papan sudoku dan digit dari 1-9, mendaftar koordinat xy tempat digit itu muncul, dan menampilkan angka dalam kisaran (6 ** 6) yang mewakili koordinat tersebut. ("konfigurasi digit")
decconfig adalah fungsi terbalik. Dibutuhkan angka dalam rentang (6 ** 6), digit, dan papan sudoku (standarnya kosong). Ini menghasilkan papan sudoku yang dilapis dengan konfigurasi digit. Jika salah satu posisi dalam konfigurasi digit sudah diambil di papan sudoku yang dimasukkan, digit pada posisi itu ditimpa oleh digit baru.
kompatibel mengambil papan sudoku dan konfigurasi digit (didefinisikan oleh conf dan dig), overlay konfigurasi digit di atas papan sudoku dan memeriksa konflik. Kemudian mengembalikan Benar atau Salah tergantung pada hasilnya.
encode adalah fungsi kompresi. Dibutuhkan papan sudoku dan menghasilkan angka yang mewakilinya. Ini dilakukan dengan terlebih dahulu menyalin posisi 1's ke papan kosong dan membuat daftar semua konfigurasi angka 2 yang kompatibel dengan 1-konfigurasi (yang tidak mengambil salah satu tempat yang telah diambil oleh 1) Ia kemudian menemukan urutan 2-konfigurasi aktual board dalam daftar dan menyimpannya, lalu menyalin konfigurasi tersebut ke board baru, yang sekarang hanya berisi 1 dan 2. Kemudian daftar semua konfigurasi nomor 3 yang kompatibel dengan posisi 1 dan 2, dan seterusnya.
membaca sandi adalah fungsi terbalik.
Python 2.5.
sumber
C #, 150 byte
Output terkompresi:
Bagaimana itu bekerja:
Ini menghasilkan semua kemungkinan permutasi 123456789 dan mengingatnya. Kemudian membandingkan permutasi dengan baris di sudoku. Ketika permutasi yang cocok untuk baris pemberian ditemukan, ia mengingat indeks permutasi itu. Setelah setiap baris, itu akan menghapus semua permutasi di mana setidaknya ada satu karakter di posisi yang sama dengan baris saat ini. Ini memastikan setiap angka unik di kolomnya. Kemudian mengeluarkan semua permutasi yang tidak berfungsi lagi dengan kriteria kotak. Karena baris terakhir sepele itu menghasilkan 8 angka. Saya menguji berapa nilai maksimum dari masing-masing angka itu dan menghasilkan digit-count-mask untuk setiap posisi itu. {6, 5, 3, 5, 3, 1, 2, 1, 1}. Yang pertama jelas merupakan yang terpanjang dengan 362880 permutasi. Menggunakan digitmask saya membuat BigInteger dengan angka 1 untuk membuatnya menjadi 28 digit. Ini menghasilkan total 11 byte. Kemudian byte tersebut dapat dikonversi ke base64. Untuk menyimpan satu karakter saya menghapus tanda = di bagian akhir.
Rekonstruksi bekerja serupa.
Itu merekonstruksi BigInteger dari base64string dan kemudian mengubahnya menjadi string lagi dan membelahnya lagi menggunakan mask digit-count yang disebutkan. String-string itu diurai kembali ke indeks.
Kemudian algoritma melakukan hampir sama, alih-alih menemukan baris dalam permutasi itu hanya menggunakan indeks untuk mendapatkan baris, sisanya bekerja sama.
Mungkin ini bisa menjadi sedikit lebih baik untuk benar-benar menggunakan 94 charachters yang mungkin daripada hanya 64 tetapi saya tidak punya otak untuk melakukan ini.
Sumber : Salin dan tempel untuk menjalankannya dengan 10 contoh. .dotNet-Fiddle memberi tahu saya ini melebihi batas memori sehingga Anda harus menjalankannya di mesin untuk mengirim teks.
sumber
Perl - 290 karakter = 290 poin
Program ini tidak menggunakan pengodean keras dan secara andal memampatkan kisi-kisi menjadi tepat 29 karakter (secara teoritis dimungkinkan untuk menemukan beberapa yang lebih kecil).
Begini cara kerjanya:
Pertama-tama ubah array 9 x 9 menjadi 60 angka. Ini dapat dilakukan sebagai kolom terakhir, baris terakhir, dan kuadrat akhir dari setiap sel 3 x 3 dapat dijatuhkan.
Kemudian konversi menggunakan bigint ke integer tunggal, menggunakan elemen 9 ^ 60.
Kemudian konversikan bigint ke base 95.
Kompresor dan dekompresor:
sumber
PHP, 214
Solusi ini pertama-tama membersihkan kolom kanan dan baris bawah, serta sudut kanan bawah setiap blok 3x3. Kemudian mencoba membersihkan sel. Jika ada solusi sederhana, sel tetap kosong.
Kemudian, kotak sudoku diformat menjadi string, dari kiri ke kanan dan atas ke bawah, tidak termasuk kolom kanan, baris bawah, dan sudut kanan bawah. Angka nol di depan dihitung (biarkan ini terjadi
z
) dan dihapus. Angka nol juga dihapus.String diformat ke dalam basis 10, 11, atau 12 integer (biarkan basis ini menjadi
b
), denganA
mewakili dua nol, danB
, tiga.Ini dikonversi menjadi basis-95 integer, dan didahului oleh basis-95 yang mewakili
z << 2 | (b - 10)
.Panggil
php sudoku-compress.php enc
untuk menyandikan, danphp sudoku-compress.php dec
untuk membaca sandi. Encoder mengambil format yang diberikan dalam pertanyaan, dengan baris baru yang wajib diikuti.Output tes:
sumber
Jawa, 330 Poin
Sebelum saya diejek untuk nilai yang begitu tinggi, izinkan saya mengklarifikasi bahwa saya berusaha untuk mencoba dan menyelesaikannya dengan cara yang berbeda dengan mengetahui bahwa itu mungkin tidak akan seoptimal beberapa jawaban yang lebih baik di sini. Saya kurang lebih ingin tahu apakah saya bisa mendekati yang mengejutkan saya, saya tidak menyadari betapa buruknya itu akan berubah. Inilah kekurangan pendekatan saya di sini:
Kembangkan algo untuk memecahkan teka-teki Sudoku.
Kembangkan algo pengacak yang masih bisa dipecahkan. Ini melakukan ini agak secara acak sambil menghilangkan petunjuk yang dapat ditentukan sepele sebelum tangan. Saya bisa mendapatkan sekitar 22 petunjuk dengan andal sebelum terlalu lama.
Setelah diacak, puzzle dapat diwakili oleh triplet bilangan bulat satu digit untuk setiap petunjuk, dalam kasus saya 22 triplet dari 3. Saya pikir jika saya bisa menggabungkan ini menjadi angka 66 digit tunggal kemudian base95 menyandikan ini maka saya punya sesuatu yang bisa mudah diterjemahkan.
String yang dikodekan berakhir lebih lama dari yang saya harapkan pada umumnya sekitar 33 karakter. Pada saat itu saya mencoba cara alternatif daripada menggunakan Java BigInteger di mana saya membuat sejumlah besar dari topeng 81 bit yang mewakili 81 sel dari kotak di mana 1 berarti ada petunjuk untuk sel ini. Saya kemudian menggabungkan bitmask itu ke representasi 4 bit dari masing-masing nilai sel dalam urutan berurutan, dibulatkan menjadi byte dan menemukan bahwa saya kira-kira mendapatkan panjang string yang disandikan sama setelah base95 disandikan.
Jadi pada dasarnya saya memposting kode saya kalau-kalau ada yang tertarik pada pendekatan yang berbeda yang tidak berhasil dengan baik.
Puzz kelas
Kasing Uji Saya
Output Uji
sumber
C ++ 241, skor: 82 * 10 = 820
Menambahkan '!' ke awal string yang disandikan untuk menentukan operasi mana yang harus dilakukan.
Golfed 241 karakter
312 karakter tidak dikunci
sumber