Ini kode golf. Untuk tantangan ini, saya akan menerima metode (Anda tidak perlu program lengkap), tetapi metode signature tidak dihitung terhadap jumlah byte dan saya ingin melihat tanda tangan penuh (bukan lamdba). Input untuk metode ini adalah array integer dengan 81 elemen. Nilai output / return dari metode adalah string yang mewakili array sebagai papan sudoku ascii.
Jika Anda menggunakan bahasa esoterik atau sesuatu yang sama sekali tidak memiliki metode, Anda dapat beradaptasi, tetapi jika bahasa tersebut mendukung hal ini, saya ingin melihat sesuatu yang mungkin benar-benar dicolokkan ke dalam program ungolfed "nyata", bahkan jika Metode tubuh itu sendiri adalah rasa sakit untuk bekerja dengan. Persyaratan ini tidak dimaksudkan untuk memblokir bahasa seperti Jelly atau 05AB1E, tetapi untuk membuatnya lebih mudah bagi bahasa seperti Java untuk membangun sesuatu yang masuk akal untuk platform itu.
Untuk input, nilai integer 1-9 harus memiliki makna yang jelas. A 0 harus selalu ditafsirkan sebagai sel kosong. Anda juga dapat menafsirkan hal lain di luar rentang 1-9 sebagai sel kosong, tetapi ini tidak wajib. Posisi dari array ke puzzle dimulai di kiri atas dan mengisi setiap baris dari kiri ke kanan sebelum pindah ke baris berikutnya.
Untuk kotak, saya ingin garis ganda di luar dan di antara setiap wilayah 3x3, dan garis tunggal di antara sel lainnya. Ini harus digambar dengan karakter menggambar garis (jika format I / O Anda mewakili string sebagai urutan byte daripada urutan karakter, Anda harus mewakili mereka dalam pengkodean terkenal seperti UTF-8 atau codepage 347).
Untuk tantangan ini, saya TIDAK meminta Anda untuk menghasilkan teka-teki sudoku. Itu adalah input untuk fungsi. Saya TIDAK meminta Anda untuk memecahkan teka-teki. Saya hanya meminta Anda untuk menghasilkan string untuk "menggambar" apa yang Anda berikan (sesedikit mungkin byte).
Input Contoh:
Nilai untuk array:
{ 8, 5, 0, 0, 0, 2, 4, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 2, 3, 0, 5, 0, 0, 0, 9, 0, 0 ,0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 7, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 4, 0}
Nilai-nilai dapat menggunakan mekanisme apa pun yang alami untuk bahasa Anda: int [], ArrayList, urutan, tuple, string digit, apa pun, asalkan Anda memiliki nilai dalam input untuk setiap sel (tidak ada peta untuk hanya sel yang terisi ke posisi ). Ingat bahwa input diberikan ... itu bukan bagian dari jumlah byte Anda. Tapi input mungkin mewakili setiap sudoku puzzle, dan teka-teki bahkan mungkin tidak memiliki solusi yang valid . Anda dapat mengasumsikan bahwa puzzle dapat dicetak. Anda tidak akan mendapatkan sesuatu dengan 82 elemen, misalnya.
Anda juga bisa menganggap font dengan lebar tetap yang masuk akal.
Output yang sesuai:
╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗ ║ 8 │ 5 │ ║ │ │ 2 ║ 4 │ │ ║ □ ║ 7 │ 2 │ ║ │ │ ║ │ │ 9 ║ □ ║ │ │ 4 ║ │ │ ║ │ │ ║ ╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣ ║ │ │ ║ 1 │ │ 7 ║ │ │ 2 ║ □ ║ 3 │ │ 5 ║ │ │ ║ 9 │ │ ║ □ ║ │ 4 │ ║ │ │ ║ │ │ ║ ╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣ ║ │ │ ║ │ 8 │ ║ │ 7 │ ║ □ ║ │ 1 │ 7 ║ │ │ ║ │ │ ║ □ ║ │ │ ║ │ 3 │ 6 ║ │ 4 │ ║ ╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝
Jawaban:
Python 3 , 232 byte
Terima kasih kepada mereka yang telah membantu menurunkan golf ini.
Enkripsi dalam enkripsi ...
Cobalah online!
Untuk golf.
sumber
i=["╔"+(g+"╦")*2+g+"╗"]+d+2*(["╠"+(e+"╬")*2+e+"╣"]+d)+["╚"+(h+"╩")*2+h+"╝"]
save 4 bytesC (gcc) ,
398395291 byteDisimpan 3 byte dengan bekerja melalui string terbalik, dan 104 (!) Byte terima kasih kepada Leaky Nun.
Cobalah online!
C (gcc) , 395 byte
Saya akan menyimpan ini di sini sehingga lebih jelas bagaimana program bekerja.
Cobalah online!
Bekerja dengan unicode di C adalah ... mahal. Mengambil input seperti yang
int*
ditunjukkan pada tautan dan dalam spesifikasi.Saya akan melihat apakah saya dapat menyimpan byte menggunakan sejumlah angka alih-alih hardcoding string.
sumber
PHP , 297 byte
Cobalah online!
Diperluas
fungsi yang digunakan untuk kedua versi
vsprintf , strtr , str_pad , array_slice , array_chunk
PHP , 313 byte
Cobalah online!
sumber
T-SQL,
445437 byte (dalam 381 karakter)Input adalah melalui serangkaian digit yang disimpan dalam kolom a dari tabel t yang sudah ada , per metode yang disetujui .
Format dan Penjelasan :
Pada baris teratas loop saya mendapatkan 9 digit berikutnya dari string input dari kolom a dari tabel yang sudah ada t .
Saya mengonversi string angka itu menjadi bilangan bulat, dan menggunakan
FORMAT
fungsi .Net untuk menampilkannya menggunakan templat teks khusus'║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P'
.Setelah itu saya hanya menambahkan garis pembagi yang sesuai, dan membuat beberapa penggantian byte-saving sebelum output.
Output ditampilkan di panel hasil:
Saya sebelumnya memiliki beberapa penggantian tambahan untuk beberapa karakter menggambar lainnya, tetapi mereka akhirnya tidak menyelamatkan saya byte.
EDIT 1 : Disimpan 8 byte dengan mulai
@r
dari nol, bukan 1, dan menghapus beberapa ruang yang tidak dibutuhkan.sumber
Retina ,
196167 byteCobalah online! Mengambil input sebagai string dengan panjang 81. Penjelasan: Karena karakter menggambar kotak harganya tiga byte, titik kode unicode
═-╬
diwakili dalam kode menggunakan=|#A-Z
(tidak semua karakter digunakan tetapi tetap dengan rentang menghemat byte byte). Selain itu baris dikompresi menggunakan#
tanda:a#bcd#e
expands toabbbcbbbcbbbdbbbcbbbcbbbdbbbcbbbcbbbe
.Sisipan
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
untuk setiap baris ketiga, ditambah║
pada awal setiap grup yang beranggotakan 27 orang.Menyisipkan di
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
antara baris-baris lain, plus║
di awal baris-baris itu.Sisipan
║
setelah setiap tiga digit. Semua║
s sekarang telah dimasukkan.Sisipan
|
di antara semua pasangan digit yang tersisa. (Yang ini adalah karakter menggambar kotak yang sebenarnya daripada pipa. Sayangnya karakter─│┼
memiliki kode yang terlalu jauh satu sama lain dan karakter kotak ganda untuk membuatnya bernilai saat menggunakan placeholder.)Mengubah baris pertama menjadi
╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
(ini menghemat 1 byte lebih dari tidak menambahkan baris pertama di tempat pertama).Menambahkan
╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝
setelah baris terakhir.Perluas
a#bcd#e
, pertama kea#bc#d#bc#d#bc#e
, lalu kea#b#c#b#c#b#d#b#c#b#c#b#d#b#c#b#c#b#e
.Perubahan
#b#
kebbb
. Ini melengkapi dekompresi.Menghapus semua entri nol, dan mengganti placeholder dengan karakter menggambar kotak.
sumber
0
dengan spasi.SOGL V0.12 ,
174172164160158 bytePenjelasan yang terlalu panjang:
Program yang dijalankan:
di mana semua kecuali baris terakhir adalah adil
in the entire program replace occurrences of the last char of this line with the rest of this line
. Inilah alasan mengapa dimungkinkan untuk membuat setengah dari karakter hanya ascii acak (tetapi mendapatkan sehingga spasi, tanda hubung, dan kutipan yang berguna perlu waktu untuk mencari tahu)Coba Di Sini!
Kode penerjemah online lebih tepat karena tab tidak berfungsi dengan SE
-8 byte: penggantian brute force mengompresi seluruh papan, kemudian mengganti karakter asing (ke codepage) dengan codepoint mereka. Melakukan hal ini memakan waktu kurang dari satu jam dari program lama ...
-4 byte: mengompresi string terkompresi ...
-2 byte: menggunakan variabel + string sebagai ganti array
sumber
JavaScript (ES6), 246 byte / 198 karakter
Input adalah array bilangan bulat. Akhirnya menggunakan dua fungsi pembantu yang sama dengan jawaban Python Leaky Nun , jadi kredit diberikan di sana.
Jika
function
diperlukan, 263 byte / 215 karakterCuplikan Tes
Setiap input dari 81 angka didukung (
1234
,1, 2, 3, 4
.[1 2 3 4]
, Dll). Paling baik dilihat sebagai halaman penuh.sumber
Batch, 332 byte
Membutuhkan konsol berada di CP437. Jika itu bukan default Anda, maka Anda dapat mengubahnya menggunakan
CHCP 437
perintah jika konsol Anda disetel ke font TrueType. (Ini hanya akan bekerja dengan font raster jika CP437 sudah menjadi halaman kode default Anda.) Seperti inilah kode di CP437:sumber
Dengan ide-ide yang diambil dari jawaban lain:
C # (.NET Core) , 401 byte, 349 Karakter
Tidak Terkumpul:
Cobalah online!
Jawabanku:
C # (.NET Core) ,
509 430418 byte, 328 karakterTidak Terkumpul:
Cobalah online!
sumber
Chip , 3645 byte
... itu bukan salah ketik ...
Cobalah online! , semacam. Versi TIO berisi cutoff sekitar sepertiga dari jalan masuk (
t
setelah 4oooooo
), sehingga harus berhenti dalam waktu kurang dari 60 detik. Versi lengkapnya memakan waktu sekitar 1m25s di mesin saya, dan TIO tampaknya sekitar setengah lebih cepat. Ini juga berarti TIO hanya menampilkan 7 baris pertama output.Draf pertama saya berbobot pada tahun 19758 byte besar, dan membawa saya sekitar 8m30s untuk menjalankan. Solusi terakhir, pra-golf, adalah 5980 byte sigap, hanya mengambil 2m07s.
Jadi, bagaimana cara kerjanya?
Ini membutuhkan string 82 byte, 81 digit, diikuti oleh terminator.
\0
atau\n
atau bahkan nomor lain akan melakukannya. (Implementasi ini sebenarnya hanya terlihat pada 81 yang pertama, tetapi membutuhkan setidaknya satu lagi, karena Chip akan mengakhiri jika telah kehabisan inputnya. Jika ini tidak dapat diterima, flag-z
dapat digunakan, yang secara efektif menambahkan jumlah\0
byte yang tak terbatas ke akhir input.) Kode TIO yang disingkat tidak benar-benar mencapai semua 81 byte, jadi intinya diperdebatkan di sana.Cara saya menerapkan ini, hanya terlihat pada input 4 bit yang rendah, jadi apapun, sungguh, bisa menjadi 'teka-teki' sudoku, dari data biner mentah, hingga karya Shakespeare yang kurang dikenal. Setiap karakter dengan 4 bit rendah semuanya nol akan muncul sebagai spasi (case khusus), semua karakter lain dipetakan
123456789:;<=>?
. (Jadi, beberapa terakhir bukan digit, tetapi juga bukan 10 angka yang valid dalam sudoku normal).Untuk karakter menggambar kotak, ia menghasilkan UTF-8, masing-masing setara dengan 3 byte.
Bagaimana dengan implementasi yang sebenarnya?
Chip adalah bahasa 3D yang terinspirasi oleh sirkuit terintegrasi. Ini memiliki kabel, gerbang logika, dan sel memori. Kebanyakan hal dilakukan pada pesawat 2D, tetapi pesawat ini dapat ditumpuk di atas satu sama lain. Begitulah cara program ini dibangun.
Garis-garis yang dimulai dengan
=
adalah pemisah lapisan. Kemudian, lapisan-lapisan ditumpuk, dengan sisi atas dan kiri sejajar. Inio
berfungsi sebagai pin, memungkinkan sinyal untuk berpindah dari satu lapisan ke lapisan lainnya.Setiap lapisan di sini memiliki tujuan, Anda bisa menganggapnya sebagai fungsi. Lapisan pertama mengontrol segalanya; itu 'memanggil' masing-masing lapisan lainnya pada gilirannya. Ada pola dari kiri ke kanan berulang di sini. Pola itu melacak dari 19 garis output yang sedang kami cetak.
Lapisan kedua agak kecil, dan ia memiliki pekerjaan yang sangat kecil. Ini mengatur
0x80
bit untuk semua lini output kecuali baris yang berisi angka.h
adalah elemen Chip yang sesuai dengan0x80
bit. (Akhir rendah dari alfabeth
hinggaa
menentukan semua delapan bit output.)Lapisan tiga adalah tempat kita benar-benar masuk ke dalam daging percetakan. Lapisan ini bertanggung jawab atas baris satu. Versi ungolfed memiliki delapan baris
x
's dan)
' s, pemetaan ke 0 dan 1 untuk masing-masing dari delapan bit dari setiap byte. Namun, kita dapat memanfaatkan pola dalam bit untuk menyelesaikan tugas yang sama dalam lebih sedikit baris.Lapisan empat sangat mirip dengan yang ketiga. Ini menangani garis ganda horisontal.
Lapisan lima menangani baris terakhir. Perhatikan bahwa tidak ada kabel di sepanjang bagian atas yang dimiliki lapisan lain. Ini karena kita tidak perlu mengembalikan kontrol ke sequencer. Sebagai gantinya, kami dapat menghentikan eksekusi di sini dengan
t
.Lapisan enam menangani garis tunggal horizontal.
Lapisan tujuh adalah tempat nomor dicetak. Ini disebut 'untuk masing-masing sembilan garis numerik. Ini mengkonsumsi 9 byte input sebagai bagian dari pelaksanaannya.
sumber
JavaScript (ES6), 222 byte
Menggunakan sintaks pendek untuk fungsi ES6 - 174 karakter disandikan dalam utf8, 222 byte ( https://mothereff.in/byte-counter ). Penggunaan
function ...
membutuhkan 16 byte lagi.Kurang golf
sumber
Java (OpenJDK 8) , 279 byte
Cobalah online!
Untuk jumlah byte, gunakan CP-437, yang secara asli didukung oleh Java sebagai
IBM437
(API terbaru) atauCp437
(API lama); jadi gunakan sistem yang memiliki charset ini memiliki charset ini sebagai default charset.Kode ini kompatibel dari Java 5 dan seterusnya, tetapi hanya diuji pada Java 8.
Penjelasan
sumber
Tcl , 599 byte (295 karakter)
Pendekatan yang sangat naif, tetapi saya hanya harus melakukannya meskipun tidak menjadi pemenang dengan ukuran apa pun:
Cobalah online!
sumber