Tantangan hari ini sederhana: Tanpa mengambil input apa pun, mengeluarkan papan sudoku yang valid.
Jika Anda tidak terbiasa dengan sudoku, Wikipedia menjelaskan seperti apa bentuk papan yang valid :
Tujuannya adalah untuk mengisi kisi 9 × 9 dengan angka sehingga setiap kolom, setiap baris, dan masing-masing dari sembilan 3 × 3 subgrid yang menyusun kisi (juga disebut "kotak", "blok", atau "wilayah") mengandung semua digit dari 1 hingga 9.
Nah, inilah masalahnya ... Ada 6.670.903.752.021.072.936.960 papan sudoku yang valid berbeda . Beberapa dari mereka mungkin sangat sulit untuk dikompres dan diproduksi dalam lebih sedikit byte. Yang lain mungkin lebih mudah. Bagian dari tantangan ini adalah untuk mencari tahu papan mana yang akan paling kompresibel dan bisa dikeluarkan dalam byte paling sedikit.
Kiriman Anda tidak harus selalu menampilkan papan yang sama setiap kali. Tetapi jika beberapa output dimungkinkan, Anda harus membuktikan bahwa setiap output yang mungkin adalah papan yang valid.
Anda dapat menggunakan skrip ini (terima kasih pada Magic Octopus Guci) atau salah satu dari jawaban ini untuk memverifikasi jika kisi tertentu adalah solusi yang valid. Ini akan menghasilkan a [1]
untuk papan yang valid, dan apa pun untuk papan yang tidak valid.
Saya tidak terlalu pilih-pilih tentang format di mana Anda menghasilkan jawaban Anda, asalkan itu jelas 2-dimensi. Misalnya, Anda dapat menampilkan matriks 9x9, sembilan matriks 3x3, string, array string, array bilangan bulat 9 digit, atau sembilan bilangan 9 digit dengan pemisah. Menghasilkan 81 digit dalam 1 dimensi tidak akan diizinkan. Jika Anda ingin tahu tentang format output tertentu, jangan ragu untuk bertanya kepada saya di komentar.
Seperti biasa, ini adalah kode-golf , jadi tuliskan jawaban terpendek yang dapat Anda temukan dalam bahasa yang Anda pilih!
sumber
Jawaban:
Pyth,
22141210 byteDisimpan 2 byte berkat Tn. Xcoder.
Coba di sini
sumber
m.<S9d%D3 9
..<LS9%D3 9
.Python 2 , 47 byte
Cobalah online!
sumber
T-SQL,
9689 byteDitemukan satu yang lebih pendek dari keluaran sepele!
Ekstrak string 9-karakter yang dimulai pada titik yang berbeda, seperti yang didefinisikan oleh tabel dalam-memori yang dibuat oleh
STRING_SPLIT
(yang didukung pada SQL 2016 dan yang lebih baru). Itu0+value
adalah cara terpendek yang dapat saya lakukan untuk melakukan cast implisit ke integer.Output trivial asli (96 byte):
sumber
Jelly , 7 byte
Cobalah online!
Dan sedikit dari ini ...
-1 terima kasih kepada Jonathan Allan (berpikir?)
sumber
Python 2 , 53 byte
Cobalah online!
Alternatif:
Python 2 , 53 byte
Cobalah online!
Python 2 , 54 byte
sumber
Python 3 ,
5855 byteCobalah online!
Elemen-elemen dari string byte akhirnya memberikan angka-angka
[1, 4, 7, 2, 5, 8, 3, 6, 9]
yang digunakan untuk mengubah rotasi dari[0..9]
. The0
dihapus dalaml[1:i]
dan tidak ada kebutuhan untuk byte nol yang mengambil dua characaters (\0
) untuk mewakili dalam sebuah objek byte.55 byte
sumber
Jelly ,
98 byteCobalah online!
sumber
Batch, 84 byte
Menggunakan output @ Mnemonic.
call
digunakan untuk menginterpolasi variabel ke dalam operasi slicing (biasanya hanya menerima konstanta numerik).sumber
JavaScript (Node.js) , 47 byte
Output sebagai array dari baris.
Cobalah online!
Buat ini:
sumber
Perl 6 ,
40 3227 byte-5 byte berkat nwellnhof
Cobalah online!
Blok kode anonim yang mengembalikan matriks 9x9. Peta setiap baris ke rotasi berbeda dari rentang 1 hingga 9.
sumber
J , 18 byte
Cobalah online!
Keluaran
Bagaimana itu bekerja
Versi mewah, 23 byte
Cobalah online!
Keluaran:
Bagaimana itu bekerja
sumber
05AB1E ,
1412 byte-2 byte dengan menciptakan pelabuhan @Mnemonic 's Pyth jawabannya .
Cobalah online. (Footer ditambahkan ke cukup-cetak saja. Hasil sebenarnya adalah matriks 9x9; jangan ragu untuk menghapus footer untuk melihatnya.)
Penjelasan:
Solusi 14 byte asli :
Cobalah online. (Footer ditambahkan ke cukup-cetak saja. Hasil sebenarnya adalah matriks 9x9; jangan ragu untuk menghapus footer untuk melihatnya.)
Penjelasan:
Kedua jawaban menghasilkan Sudoku:
sumber
Oktaf & Matlab,
504829 byteCobalah online!
Terima kasih kepada Johnathon Frech
-14 Terima kasih atas saran tambahan Siaran Sanchises, yang juga menunjukkan ketidaksesuaian.
-5 dengan memperhatikan bahwa vektor dapat ditulis dalam matlab dengan string char dan transposisi.
Apakah intuitif, sekarang tidak demikian. Menggunakan penjumlahan siaran untuk menyebarkan 1: 9 di atas 9 baris, disebarkan oleh nilai yang ditentukan oleh string char.
Papan Sudoku diproduksi:
sumber
Haskell , 41 byte
Cobalah online!
sumber
s=
karena tidak perluJava 10,
8275 byte-7 byte dengan membuat port dari salah satu jawaban Python 2 @TFeld .
Cobalah online.
Penjelasan:
Output sudoku berikut (ruang dibatasi bukan baris baru seperti di bawah ini):
sumber
Python - 81 byte
Cobalah secara Online
Saya suka memiliki 81 byte, tetapi setelah beberapa mengoptimalkan :(
Python 2 -
75 68 5958 byte-7 byte berkat @DLosc
-9 byte berkat @Mnemonic
-1 byte berkat @JoKing
Cobalah secara Online
sumber
r=range(1,10)
tetapi saya tidak bisa merusak keindahanl
Ruby , 34 byte
Cobalah online!
sumber
R , 54 byte
Keluaran:
Cobalah online!
sumber
Terima kasih banyak untuk @Shaggy!
JavaScript (Node.js) , 61 byte
Cobalah online!
sumber
MathGolf ,
1611 byteCobalah online!
Disimpan 5 byte berkat JoKing
sumber
Kanvas ,
1311 byteCoba di sini!
sumber
C (dentang) , 65 byte
Fungsi sekarang dapat digunakan kembali
Cobalah online!
sumber
f(); f()
mengeluarkan papan yang sama dua kali, tetapi tidak jika panggilan kedua tidak bekerja sama sekali.f(i){for(i=81;i--;)printf("%d%c",(i/9*10/3+i)%9+1,i%9?9:10);}
K (ngn / k) , 16 byte
Cobalah online!
Jawaban pertama dalam ngn / k, dilakukan dengan bantuan besar dari pria itu sendiri, @ngn.
Bagaimana:
sumber
Japt,
11, 10 byteCobalah atau verifikasi outputnya
Penjelasan
sumber
Arang , 14 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Menggunakan output @ Mnemonic. Penjelasan:
sumber