Dari pertanyaan stackoverflow ini
Diberikan array 2D ukuran , menampilkan nilai-nilai dengan cara yang berlawanan arah jarum jam. Output harus mulai dari luar ke dalam dan titik awal selalu menjadi .
Contoh Yang Diberikan:
Nilai tepi dalam berlawanan arah jarum jam adalah .
Sekarang kita ulangi proses untuk nilai-nilai batin. Ini akan berakhir dengan matriks seperti berikut
Dan nilai-nilai batin adalah
Hasil akhirnya adalah
Aturan
- Asumsikan input tidak kosong
- Asumsikan nilai matriks sebagai bilangan bulat positif
- Metode I / O Standar berlaku
- Standar kode-golf aturan dan kriteria pemenang berlaku
Beberapa test case
Input
[
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10,11,12,13,14],
[15,16,17,18,19,20,21]
]
Output
1,8,15,16,17,18,19,20,21,14,7,6,5,4,3,2,9,10,11,12,13
--------------------------------------------------------
Input
[
[1,2,3],
[3,2,1],
[4,5,6],
[6,5,4],
[7,8,9],
[9,8,7]
]
Output
1,3,4,6,7,9,8,7,9,4,6,1,3,2,2,5,5,8
-----------------------------------------------------
Input
[
[1]
]
Output
1
-----------------------------------
Input
[
[1, 2],
[2, 1]
]
Output
1,2,1,2
-----------------------------------------------------
Input
[
[1,2,3,6,7],
[2,4,3,2,1],
[3,2,4,5,6],
[6,5,6,5,4],
[10,4,7,8,9],
[12,4,9,8,7]
]
Output
1,2,3,6,10,12,4,9,8,7,9,4,6,1,7,6,3,2,4,2,5,4,7,8,5,5,2,3,4,6
Jawaban:
R , 54 byte
Beberapa byte disimpan oleh @Giuseppe dan @ Joe.
Cobalah online!
Keluarkan kolom pertama secara rekursif dan baris-mundur / transpos (menjadikan baris bawah kolom pertama yang baru) sisa dari matriks sampai Anda berakhir hanya dengan satu kolom. Versi "tradisional" yang tidak disatukan:
Itu menunjukkan bahwa
ncol(m)
bisa golfsum(m)
untuk menyimpan byte lain karena kita diizinkan untuk mengasumsikan nilai matriks integer positif. Tetapi saya akan membiarkannya seperti ini karena ini bekerja untuk semua matriks (bahkan matriks string!)sumber
t()
mencegahdrop=TRUE
default`[`
dari mengacaukanif
kondisi!t()
tidak harus menggunakanis.null
tes yang ada dalam upaya asli saya.m
akan menjadi nol, jadi Anda dapat mengubah pernyataan if untuk 54 byte . Tampaknya bekerja untuk kasus uji.Python 2 , 52 byte
Cobalah online!
sumber
Pyth , 9 byte
Coba di sini!
Bagaimana?
sumber
Stax , 7 byte
Jalankan dan debug itu
Dibutuhkan array baris pada satu baris, dan menghasilkan keluaran yang dipisahkan baris baru.
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
sumber
Pyth, 20 byte
Coba di sini
Penjelasan
sumber
OK , 12 byte
Cobalah online!
Ini menyalahgunakan fakta bahwa oK tampaknya tidak terlalu peduli dengan bentuk untuk transposisi. Dalam k ini akan menjadi 13 bytes :
*:',/(1_+|:)\
.sumber
Bersih , 69 byte
Cobalah online!
Memindahkan baris / kolom berikutnya ke kepala daftar sehingga pola dapat cocok dengan argumen.
Untuk contoh pertama dalam tantangan, ini terlihat seperti:
sumber
Julia 0.7 , 47 byte
Cobalah online!
Julia memiliki built-in yang nyaman untuk memutar matriks dengan 90 derajat menghilangkan kebutuhan untuk operasi transpos-balik.
Seperti yang dapat Anda lihat dari peringatan kompiler, itu menegaskan bahwa semua komponen kondisional ternary harus dipisahkan oleh spasi, dan dalam v. 1.0 ini sebenarnya telah ditegakkan.
Anehnya, dalam situasi ini cara terpendek yang saya temukan untuk keluar dari rekursi adalah dengan menggunakan blok uji coba:
Julia 1.0 , 50 byte
Cobalah online!
sumber
JavaScript (Node.js) , 89 byte
Cobalah online!
Mengambil kolom pertama, transpos yang tersisa lalu balikkan setiap baris (= putar matriks 90 derajat CW), dan kemudian ulangi sampai array tidak memiliki entri lagi.
sumber
APL (Dyalog) ,
2422 byteCobalah online!
Bagaimana?
sumber
05AB1E ,
131110 byte-2 byte terima kasih @Emigna .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Jelly , 9 byte
Cobalah online!
sumber
Arang , 25 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Putar input sebesar 180 °. Ini karena dua alasan: a) baris terakhir adalah yang paling mudah untuk dihapus, dan b) lebih mudah untuk diulang jika baris dihapus di akhir loop. (Saya memang mencoba memantulkan dan mengeluarkan searah jarum jam tetapi itu membutuhkan byte tambahan.)
Ulangi sampai array kosong.
Putar array sebesar 90 °.
Hapus baris terakhir dari array dan cetak elemen sebagai string pada baris terpisah.
sumber
Ruby , 65 byte
Cobalah online!
sumber
PowerShell , 266 byte
Ya .. PowerShell bukan yang terbaik untuk menangani matriks. Tapi, algoritme pada dasarnya sama dengan di atas .. Setiap baris direpresentasikan sebagai string yang dipisahkan koma, dan kami pada dasarnya melakukan rotasi dan transposisi untuk setiap lapisan. Saya mungkin bisa mencukur lebih off, tapi ... aku saya sudah di piyama ...
Cobalah online!
sumber