Latar Belakang
Dalam sebagian besar bahasa pemrograman yang masuk akal, sangat mudah untuk memutar baris atau kolom array 2D. Dalam tantangan ini, tugas Anda adalah memutar anti-diagonal sebagai gantinya. Ingatlah bahwa anti-diagonal array 2D adalah irisan 1D-nya yang diambil ke arah timur laut ↗.
Memasukkan
Larik 2D persegi panjang non-kosong nomor tunggal digit dalam format apa pun yang masuk akal. Perhatikan bahwa array mungkin bukan persegi.
Keluaran
Array yang sama, tetapi dengan masing-masing anti-diagonal diputar satu langkah ke kanan.
Contoh
Pertimbangkan 3x4
array input
0 1 2 3
4 5 6 7
8 9 0 1
Anti-diagonal array ini adalah
0
4 1
8 5 2
9 6 3
0 7
1
Versi rotasinya adalah
0
1 4
2 8 5
3 9 6
7 0
1
Dengan demikian output yang benar adalah
0 4 5 6
1 8 9 0
2 3 7 1
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Menulis fungsi yang memodifikasi larik input juga dapat diterima, jika bahasa Anda memungkinkan. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file, atau Anda ingin membuat daftar penalti penterjemah secara terpisah, atau Anda ingin menunjukkan skor lama yang Anda tingkatkan), pastikan skor aktual adalah angka terakhir di header.
Kasus uji tambahan
Input:
4
Output:
4
Input:
5 6 1
Output:
5 6 1
Input:
0 1
6 2
Output:
0 6
1 2
Input:
6 3 0 8
4 6 1 4
6 2 3 3
9 3 0 3
Output:
6 4 6 1
3 6 2 3
0 9 3 0
8 4 3 3
Input:
5 8 2
6 7 3
2 6 1
6 0 6
6 4 1
Output:
5 6 7
8 2 6
2 6 0
3 6 4
1 6 1
Input:
9 9 4 0 6 2
2 3 2 6 4 7
1 5 9 3 1 5
0 2 6 0 4 7
Output:
9 2 3 2 6 4
9 1 5 9 3 1
4 0 2 6 0 4
0 6 2 7 5 7
CJam,
44434240 byteUji di sini.
Hmm, jauh lebih baik daripada upaya pertamaku, tapi aku punya firasat Dennis akan menyelesaikan ini dengan lebih sedikit lagi ...
Input dan output adalah sebagai kisi ASCII:
memberi
sumber
J, 24 char
Berfungsi mengambil satu argumen.
J memiliki operator
/.
bernama Oblique . Itu tidak bisa membalikkannya, jadi rekonstruksi tidak sepele, tetapi Anda dapat mempertimbangkan "daftar miring" sebagai permutasi dari elemen-elemen array. Jadi kita membalikkan permutasi itu dengan/:
( Urutkan diad ), dengan menempatkan permutasi "daftar miring" untuk ukuran itu (</.@i.@$
) di sebelah kanan dan nilai miring baru kami, diputar dengan benar, di sebelah kiri. Kemudian kita membentuk kembali daftar ini menjadi array persegi panjang yang lama menggunakan yang baik$$
.Cobalah online.
sumber
J,
3830 byte8 byte disimpan berkat @algorithmshark.
Fungsi mengumpulkan tepi atas dan kiri ke dalam daftar, memotong daftar menjadi dua potong dengan ukuran yang cukup dan menjahitnya ke kanan dan bawah bagian inti.
Pemakaian:
Cobalah online di sini.
sumber
{./.
Menggantikan}:@{.,{:"1
, dan Anda dapat menyimpan dua tildes dengan membalik kereta sekitar:{./.((}.~#),~({.~#),.])}:"1@}.
.Julia,
153149139 byteIni menciptakan fungsi tanpa nama yang menerima larik dan mengembalikan larik masukan yang dimodifikasi pada tempatnya.
Tidak Disatukan:
Terima kasih kepada Martin Büttner untuk saran algoritmik dan untuk menghemat 4 byte!
sumber
ES6, 75 byte
Ini menerima array array sebagai parameter dan memodifikasinya di tempat.
Tidak Disatukan:
Lihat diagram @ aditsu untuk klarifikasi lebih lanjut.
sumber
{t.push(r.pop());r.unshift(t.shift())}
ket.push(r.pop())+r.unshift(t.shift())
Pyth, 20 byte
Menggunakan pendekatan Adistu untuk menghapus baris atas dan kolom kanan, kemudian menempelkannya di kiri dan bawah. Tetapi dengan struktur data yang bisa berubah, bukan transposisi.
sumber
Oktaf, 85 byte
Saya harap saya bisa menyingkirkan
end
itu.sumber
Python 2 ,
11310494 byteCobalah online!
Ini adalah interpretasi yang cukup literal dari metode @ aditsu. Sintaksis Python untuk menangani daftar kosong karena False membantu menghemat 10 byte tambahan.
sumber
0
di[0:1]