Tantangan ini terinspirasi oleh ini , pertanyaan sekarang dihapus.
Ambil bilangan bulat positif N sebagai input, dan output matriks dengan angka 1. .. N 2 yang mengikuti pola di bawah ini:
Isi baris pertama dengan 1 .. N lalu isi baris terakhir (nomor baris N ) dengan (N + 1) .. 2N , lalu isi baris kedua dengan (2N + 1) .. 3N dan lanjutkan sampai Anda telah mengisi semua baris.
Format output fleksibel, jadi daftar daftar dll diterima.
N = 1
1
N = 2
1 2
3 4
N = 3
1 2 3
7 8 9
4 5 6
N = 4
1 2 3 4
9 10 11 12
13 14 15 16
5 6 7 8
N = 5
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10
Aturan standar berlaku. Jawaban terpendek dalam byte di setiap bahasa menang. Penjelasan didorong seperti biasa.
code-golf
number
array-manipulation
matrix
Stewie Griffin
sumber
sumber
1 2 3 7 8 9 4 5 6
Apakah format output fleksibel?Jawaban:
05AB1E ,
138 byteDisimpan 5 byte berkat Rod
Cobalah online!
Penjelasan
sumber
Ruby , 53 byte
Penjelasan:
Masukkan semua angka ke dalam array tunggal terlebih dahulu, kemudian iris array melewati garis untuk setiap iterasi. Setelah iterasi pertama (n / 2 + n% 2) tidak ada yang tersisa untuk dilewati, kemudian dapatkan semua garis yang tersisa mundur.
Cobalah online!
sumber
Python 2 , 75 byte
Cobalah online!
sumber
JavaScript, 68 byte
Sunting 3 byte yang disimpan, dibuat oleh @ user71546
Pertama coba,ikuti rute yang jelas: hitung dari 1 dan isi larik dari kedua sisi, dari luar ke dalamUji
sumber
Haskell , 62 byte
Cobalah online! Output adalah daftar daftar, misalnya
(0#) 3
hasil[[1,2,3],[7,8,9],[4,5,6]]
.sumber
> <> ,
51 + 3 = 5447 byteCobalah online!
Input diharapkan di atas tumpukan saat program mulai menggunakan
-v
bendera. Output terdiri dari angka-angka yang tidak sejajar yang dipisahkan oleh spasi tunggal, dan setiap baris dipisahkan oleh satu baris baru. Contoh output untukN=5
:... diikuti oleh satu baris baru. Program berakhir dengan kesalahan (
something smells fishy...
), tetapi itu ada di STDERR dan bukan STDOUT.Penjelasan:
Baris pertama hanya menyimpan salinan
N
dalam register.Baris kedua membangun offset untuk setiap baris output dengan mengurangi 1 dari
N
, mengalikannya denganN
, memutarnya ke bagian bawah tumpukan dan kemudian membalikkan seluruh tumpukan. Ketika jumlah di atas tumpukan mencapai 0, tumpukan akan terlihat seperti ini (contoh menggunakanN=5
):Baris ketiga membuang duplikat
0
dari atas tumpukan.Baris keempat menambah bagian atas tumpukan dan mengeluarkan salinannya. Ini kemudian diambil mod
N
, dan ini digunakan untuk memutuskan apakah spasi atau baris baru harus dicetak, dan jika bagian atas tumpukan harus dibuang - jika nomor terakhir yang dicetakx
, makax mod N == 0
menunjukkan bahwa akhir dari baris keluaran telah tercapai. . Eksekusi berakhir ketika1+
dieksekusi di tumpukan kosong, melempar kesalahan terminasi.Versi sebelumnya
Ini secara eksplisit memeriksa tumpukan kosong untuk mengakhiri eksekusi, dan saya juga memasukkan 3 byte untuk
-v
penggunaan flag.Cobalah online!
sumber
Perl 5 ,
-p
5251 byteCobalah online!
sumber
Java (OpenJDK 9) , 101 byte
Cobalah online!
Kredit
sumber
j++
: 102 byten-i/2-1
menjadin+~i/2
101 byten->{int i=n*n,x[]=new int[i],r;for(;i-->0;x[(r%2<1?r/2:n+~r/2)*n+i%n]=i+1)r=i/n;return x;}
JavaScript (ES6),
6968 byteYa sudah kalah sebelum saya bisa mempostingnya tapi ini dia.Sunting: Disimpan 1 byte berkat @KevinCruijssen.sumber
n+n-i-1
bisan+n+~i
dengan -1 byte, jadi Anda harus menjawab dengan jari JavaScript lainnya. :)Jelly , 10 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Stax , 10 byte
Jalankan dan debug secara online
Representasi ascii yang sesuai dari program yang sama adalah 12 karakter.
Begini cara kerjanya.
sumber
Jelly ,
13...6 byteTerima kasih JonathanAllan untuk -1 byte!
Cobalah online!
Gunakan algoritma yang identik dengan jawaban 05AB1E.
sumber
R
karenas
memiliki rentang kiri implisit.R ,
705947 byteCobalah online!
Terimakasih untuk Robin Ryder untuk golf 4 byte, yang kemudian saya mainkan lebih lanjut.
Mengembalikan matriks; membangun
matrix
urutan, misalnya[[1 2 3] [4 5 6] [7 8 9]]
, kemudian mengatur ulang baris.sumber
rbind
.Python 2 ,
726863 byte-4 byte terima kasih kepada Neil
Cobalah online!
sumber
x
variabel perantara ?Oktaf , 102 byte
Cobalah online!
sumber
until
perintah. Dan saya tidak tahu tentangvec2mat
:( Sayangnya panjangnya sama:A=B=vec2mat(1:(n=input(''))*n,n)
:(while j++<n
panjangnya juga persis sama ... Sudahkah Anda mencoba berbagai opsi atau hanya kebetulan?while
loop adalah panjang yang sama, saya mencoba keduanya. Namun, seringdo ... until
satu byte lebih pendek dariwhile ... end
.C (gcc) , 110 byte
Cobalah online!
Mengisi array dengan bergantian antara 2 indeks untuk baris: satu indeks mulai dari atas dan satu mulai dari bawah. Indeks baris atas dimulai pada 0 dan bertambah setiap 2 baris; indeks baris bawah dimulai pada n-1 dan dikurangi setiap 2 baris.
Tidak Terkumpul:
sumber
C ++ + Rentang V3 , 159 byte
Langsung di Wandbox
Tidak menghitung 2 baris baru setelah
using namespace range::view
; mereka hanya di sana untuk memisahkan impor dari lambda.Fakta yang agak menarik: solusi ini tidak membuat alokasi tumpukan. Ini memecahkan masalah di
O(1)
luar angkasa.Penjelasan:
iota(1, n*n+1)
->[1 ... n*n]
chunk(n)
: setiapn
elemen bersama, jadi[1 ... n] [n+1 ... 2*n] ...
r
r | stride(2)
: ambil setiap elemen lainnya:[1 ... n] [2*n+1...] ...
r | reverse | drop(n % 2)
: mundur, lalu turunkan[1 ... n]
istilah jikan
ganjil (akan ada jumlah ganjil baris dan kami hanya ingin mencetak istilah pertama sekali). Sepertinya saya seharusnya bisa melakukannyar | reverse | take
, tetapi itu tidak berhasil karena suatu alasan.stride(2)
lagi, ambil setiap elemen lainnya. Kali ini terbalik.Lebih mudah dibaca, dan dapat diuji:
sumber
int n
, saya perlulog(n)
bit untuk menyimpan input? Tapi itu inputnya, dan kita berurusan dengan diint
manasizeof(int) == 4
(kebanyakan sistem), jadi itu adalah jumlah byte yang konstan yang digunakan terlepas dari inputnya.Jelly , 11 byte
Cobalah online!
sumber
CJam , 22 byte
Cobalah online!
sumber
C (gcc)
8078Saya melihat sekarang solusi ini salah
Cobalah online!
sumber
C (gcc) , 36 + 8 + 61 = 105 byte
kompilasi dengan
-Dp=printf("%d ",i),i++%n;);puts("")
-Dq=i,n)
Cobalah online!
sumber