Angka-angka harus dicetak dengan nol terkemuka di bidang dengan panjang = (jumlah digit N ^ 2).
Input (N):
4
Keluaran:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
Saya tertarik pada algoritma dan kebersihan implementasinya. Jadi, ruang putih tidak dihitung dan batas atas untuk N adalah 42.
atomic-code-golf
Hristo Hristov
sumber
sumber
L = floor(log10(N^2)) + 1
Apakah ini benar?N
?Jawaban:
Python
Tes lainnya
sumber
Di Ruby:
Uji:
Solusi lain menggunakan perhitungan dari sini :
Uji:
sumber
Dalam Python3:
Output Sampel untuk 7:
sunting: Solusi rekursif - 263 Bytes
sumber
Solusi Java
contoh output untuk input 10
sumber
Perl, 178 karakter
Menggunakan Matematika :: Kompleks dan mempertahankan arah saat ini dalam variabel kompleks (1 / i / -1 / .i). Jalankan dengan:
Dimasukkan ke
N
dalam$l
.sumber
C
sumber
Python 2.7:
sumber
PHP, 272 karakter termasuk komentar
Berbasis fungsi, versi rekursif - lebih menarik bagi saya karena lebih baik mengekspresikan niat. Ia bekerja untuk lebar dan tinggi yang berbeda juga.
Keluaran:
sumber
C #, 380-ish golf
Saya tidak repot menyisipkan dalam versi golf karena saya cukup yakin ini tidak akan memecahkan rekor. Tapi saya ingin mencobanya memikirkannya sedikit berbeda. Daripada menuliskan setiap baris atau posisi saat saya datang ke sana, saya memindahkan kursor ke posisi, menuliskan nomor pusat awal, dan berputar keluar dari sana (yang menggambarkan pola menarik posisi-untuk-bergerak per perubahan arah ).
Ada cukup banyak ruang karakter yang terbuang untuk mendapatkan buffer konsol untuk menerima nilai yang lebih besar serta menghitung posisi untuk sudut kiri atas (yang saya yakin dapat ditingkatkan).
Bagaimanapun, itu adalah latihan yang menarik.
sumber
Rubi
Ini bukan solusi golfable yang sangat baik, tetapi mungkin menarik secara algoritmik.
Saya selalu terpesona oleh masalah yang sama , yaitu, menemukan jalur spiral searah jarum jam melalui matriks NxM. Satu cara yang sangat intuitif untuk memecahkan masalah itu adalah dengan terus memutar matriks berlawanan arah jarum jam dan mengupasnya seperti jeruk. Saya menggunakan metode yang serupa - meskipun tidak elegan - untuk melakukan yang sebaliknya:
sumber
Raket
Hanya ingin mencobanya dengan solusi menggunakan hampir 0 memori. Tidak ada array, tidak ada apa-apa. Nilai dapat dihasilkan untuk posisi apa saja kapan saja. Kita bisa bertanya spiral dengan ukuran berapa pun (jika apa yang menerima aliran output dapat mengatasinya). Dengan harapan seseorang pernah membutuhkan spiral raksasa.
Ini kodenya
Menguji dengan ini
Hasil dalam output
Cukup intensif CPU dibandingkan dengan matriks yang dihitung sebelumnya jika Anda membutuhkan seluruh spiral, tetapi mungkin bermanfaat. Siapa tahu! Misalnya:
Tidak bermain golf ... Ini cukup kecil meskipun penampilannya. Saya menggunakan nama dan komentar panjang.
sumber
Python 2 , 800 byte
Cobalah online!
Beberapa tahun yang lalu seorang teman saya ditanyai pertanyaan ini dalam sebuah wawancara. Mereka memberi tahu saya tentang hal itu pada makan malam Thanksgiving keluarga kami, jadi saya menganggap ini sebagai "masalah Thanksgiving".
sumber
PHP,
172171 +1 byte, 24 operasimenciptakan array yang berjalan indeks melalui spiral; lalu cetak hasilnya.
Jalankan sebagai pipa dengan
-nR
atau coba online .Tambahkan satu tugas untuk menghemat lima byte: ganti loop terakhir dengan
sumber
Kode contoh: Ini berfungsi untuk 4x5 tetapi gagal 3x5
while (k <m && l <n) {/ * Cetak baris pertama dari baris yang tersisa * / untuk (i = l; i <n; ++ i) {printf ("% d", a [k] [ saya]); } k ++;
sumber