Rip-off dari rip-off dari rip-off dari rip-off . Pilih mereka itu!
Tugas Anda, jika Anda ingin menerimanya, adalah menulis program / fungsi yang mengeluarkan / mengembalikan input / argumen¹. Bagian yang sulit adalah bahwa jika saya mengubah kode sumber Anda ², output / hasil harus ditransformasikan juga.
Anda dapat memilih jenis data 2D mana yang dapat diterima solusi Anda. Misalnya daftar daftar, matriks, daftar string, dll. Sebutkan yang mana yang akan ditangani. Anda dapat mengasumsikan bahwa input akan selalu berbentuk persegi panjang dan akan memiliki panjang 1 atau lebih di setiap dimensi.
Untuk keperluan transposing, garis pendek dalam kode sumber Anda akan dianggap sebagai empuk dengan ruang trailing sampai persegi panjang, namun, ruang trailing empuk ini tidak berkontribusi terhadap panjang kode Anda.
Karena ini adalah kode-golf , targetnya adalah untuk mengoptimalkan jumlah byte dari kode sumber asli (bukan versi yang dialihkan).
Contohnya
Katakanlah solusi Anda mengambil matriks numerik dan kode sumber Anda
AB
DEF
input / argumennya adalah [[1,2],[3,4],[5,6]]
. Jika saya menulis
AD
BE
F
sebagai gantinya dan menjalankannya, output / hasil harus [[1,3,5],[2,4,6]]
.
Katakanlah solusi Anda mengambil string yang dipisahkan oleh linefeed dan kode sumber Anda
ABC
input / argumennya adalah "96\n"
. Jika saya menulis
A
B
C
sebagai gantinya dan menjalankannya, output / hasil harus "9\n6\n"
.
Jawaban:
Python 3 + numpy, 45 byte
Cobalah online!
Berkat @EriktheOutgolfer menunjukkan bug dari versi sebelumnya
Dipindahkan:
Cobalah online!
Fungsi mengambil matriks numpy sebagai input dan output matriks numpy. Solusinya tidak bergantung pada komentar seperti banyak solusi lain tetapi memanfaatkan string multi-line.
sumber
\
akan membuang aSyntaxError
. Anda perlu memindahkan tanda kutip di kedua arah untuk memperbaikinya.Jelly , 2 byte
Input adalah daftar daftar. Terima kasih kepada Luis Mendo dan Nick Kennedy karena telah meningkatkan jawabannya.
Cobalah online! Cobalah transpos!
Program mentranspos input dua kali, mengembalikan input asli. Versi yang dialihkan mengabaikan baris pertama dan hanya mentransposisi satu kali.
sumber
R ,
54 byteCobalah online!
Fungsi R, baik fungsi identitas
I
atau fungsit
transpose saat ditransformasikan. Footer di TIO menunjukkan output keduanya.Terima kasih kepada @RobinRyder karena telah menghemat satu byte!
sumber
#
.C (gcc) ,
209205203201 byteNormal
Cobalah online!
Ditransposisikan
Cobalah online!
sumber
Haskell , 51 byte
Versi ini valid, tetapi tidak akan berhenti ketika diberikan
[]
sebagai input.Cobalah online!
Ditransposisikan, 75 byte
Cobalah online!
Haskell , 51 byte
Versi ini valid, tetapi macet dengan
[]
sebagai input untuk versi yang dialihkan.Cobalah online! Ditransposisikan
Haskell ,
756757 byteSetidaknya 7 byte disimpan berkat Ørjan Johansen
Versi ini di-output
[]
ketika diberikan[]
sebagai input.Cobalah online!
Ditransposisikan
sumber
Python 3 , 51 byte
Cobalah online!
Berdasarkan pendekatan Joel . Input adalah a
tuple
darituple
s, dan outputnya adalahzip
(dikonversi ketuple
lebih dari TIO untuk visibilitas yang lebih baik).Dipindahkan:
Cobalah online!
sumber
Perl 6 ,
2011 byteCobalah online!
Ditransposisikan
Cobalah online!
Kedua fungsi bekerja pada daftar daftar.
*[ ]
adalah ApapunCode mengembalikan potongan zen argumennya, secara efektif fungsi identitas.&[Z]
adalah operator zip.sumber
Haskell,
185161 byteCobalah online!
Dipindahkan:
Cobalah online!
Tidak ada komentar, tidak ada string literal, hanya beberapa definisi fungsi tambahan.
Sunting: -24 bytes terima kasih kepada @ Ørjan Johansen.
sumber
PHP (7.4),
1148670 bytePengalaman pertama saya melakukan hal seperti ini di PHP, pasti ada cara yang lebih baik yang tidak bisa saya lihat! Input adalah array array seperti
[[1,2],[3,4],[5,6]]
.Normal:
Cobalah online!
Ditransposisikan (ruang empuk):
Cobalah online!
sumber
Arang , 19 byte
Cobalah online! Mengambil input sebagai array string. Penjelasan:
A
secara implisit mencetak input eksplisit, sementara¿⁰
merupakan kondisi, dengan0
sebagai kondisi, yang karenanya selalu salah.«
kemudian mulai blok kode Arang tidak berarti yang tidak pernah dijalankan. (Mungkin dimungkinkan untuk menghapus beberapa byte tersebut tetapi dalam kasus itu saya tidak yakin apakah Charcoal akan mem-parsing program dengan benar.) Ditransposisikan, 17 byte:Cobalah online! Penjelasan: Sama seperti program sebelumnya, kecuali untuk penambahan perintah transpose
‖↗
.Saya punya solusi alternatif di mana program asli dan yang diubah adalah 18 byte:
Cobalah online! Penjelasan:
A
seperti di atas;⊞υ
mendorong nilai ke daftar kosong yang telah ditentukan (yang tidak mempengaruhi output);”y
memulai string arbitrer (berakhir di akhir program atau pencocokan”
). Dipindahkan:Cobalah online! Penjelasan:
A‖↗
seperti di atas;⊞υ
seperti di atas; perbedaan kecil di sini adalah bahwa saya mendorong rangkaian string yang lebih kecil, karena saya tidak ingin mengulangi”
.sumber
Brain-Flak (BrainHack) ,
382375337 byteTidak ada komentar!
Cobalah online!
Untuk input, dua angka pertama adalah dimensi dari matriks dan sisanya adalah isi dari matriks. Output diberikan dalam format yang sama.
Ditransposisikan
Brain-Flak (BrainHack) , 465 byte
Cobalah online!
sumber
Japt , 2 byte
Cobalah | Ditransposisikan
sumber
JavaScript (Node.js) , 62 byte
Cobalah online!
Diperbaiki dengan tata letak yang berbeda
sumber
Haskell ,
153144 byte(terima kasih, Sriotchilism O'Zaic )
Cobalah online!
Cobalah transpos!
sumber
foldr
rekursi untuk kedua versi), jangan seperti itu.APL (Dyalog Unicode) , 7 byte
Cobalah online!
Dipindahkan:
Mungkin jawaban yang agak membosankan, tapi toh begini saja.
Definisi fungsi sebaris
{...}
dapat menjangkau beberapa baris. Dalam hal ini, setiap baris dieksekusi secara berurutan, tetapi setiap baris tanpa penugasan←
segera mengembalikan nilainya yang dihitung. Jadi fungsi pertama kembali⍵
sedangkan yang kedua kembali⍉⍵
.Jawaban yang lebih membosankan adalah penyalahgunaan komentar:
APL (Dyalog Unicode) , 4 byte
Tidak perlu TIO, saya kira ...
sumber
05AB1E , 3 byte
Cobalah online.
Coba transposisi.
Penjelasan:
Tidak seperti beberapa bahasa lain, baris baru diabaikan di 05AB1E, jadi saya tidak berpikir 2-byter mungkin (walaupun saya ingin terbukti salah).
sumber
Ruby , 35 byte
Cobalah online!
Pinggul menjadi persegi! (Hampir)
Menerima matriks ruby sebagai input (array array)
sumber
Bersih , 64 byte
Cobalah online!
Cobalah transpos!
sumber
Python 3 ,
11895 byteInput dan hasil adalah daftar tupel.
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 13 byte
Cobalah online! / Ditransposisikan
sumber
Cjam , 13 byte
Cobalah online!
Versi yang dialihkan:
Cobalah online!
Masukkan format
Format input adalah format array CJam standar:
[[1 2] [3 4]]
Tidak ada versi macet, 12 byte
Versi normal macet setelah mencetak array. Versi yang tidak macet adalah:
Cobalah online!
atau dialihkan:
Cobalah online!
Mungkin ada beberapa byte tambahan yang bisa disimpan, saya tidak sengaja bekerja pada versi yang dialihkan terlebih dahulu, yang menyebabkan beberapa linebreak tambahan dan sudah lama sejak saya terakhir menggunakan CJam. Setiap perbaikan disambut.
sumber
Zsh , 75 byte
TIO: Normal Ditransposisikan
Sampah di bawah cetakan utama tidak berbahaya, mencetak kesalahan saat menemukan baris baru setelah
fa<
dan keluar. 86 byte untuk menghapus kesalahan itu.Versi yang diubah ada di sini. Setelah mencetaknya kesalahan saat melihat
<
di ujung garis dan keluar.sumber
Pesona Rise , 88 byte
Cobalah online!
Cobalah transpos!
Input dipisahkan dengan spasi untuk setiap nilai dan dipisahkan dengan koma untuk setiap baris (baris baru opsional) dan mendukung angka string dan (bukan nol). Ini membuat penguraian input lebih mudah karena input secara otomatis dipecah oleh spasi dan baris baru. Jadi misalnya, input:
Akan diwakili dalam bentuk array bersarang sebagai
[[1,2,3],[4,5,6],[7,8,9]]
. Dukungan minimal untuk array bergerigi (hanya yang terakhir bisa pendek), tetapi karena input diharapkan berbentuk persegi panjang, ini memenuhi persyaratan itu.Output direpresentasikan dalam format yang sama (output versi yang dialihkan dengan baris baru, tetapi nol byte-nya berbeda dengan menggunakan spasi). Versi normal memiliki ruang trailing, versi yang dialihkan memiliki koma dan baris baru (karena sulitnya menentukan kapan tidak ada lagi data untuk dicetak).
Versi normal memang memiliki karakter pengubah di tempat-tempat aneh (mis.
7̸0
), Tetapi ini karena membutuhkan mereka di tempat yang tepat ketika sumber ditransformasikan dan eksekusi normal hanya menggunakan kolom instruksi paling kiri.Penjelasan
Penjelasan sumber yang dialihkan akan dalam bentuk yang tidak ditransformasikan. Panah akan mewakili directionality IP di pintu masuk dan keluar dari berbagai blok.
Input dibaca, dan ketika
,
karakter ditemukan, subtack baru didorong. Ini memungkinkan setiap tumpukan untuk menahan setiap baris secara terpisah dalam memori. Masuk ke bagian berikutnya dari atas.[0
(dieksekusi ke kiri) mengatur tumpukan kosong untuk bertindak sebagai batas antara baris pertama dan baris terakhir dan kemudian berputar ke tumpukan pertama ({̹
) dan mulai mencetak elemen dan tumpukan berputar. Inii!
tidak dieksekusi dan{̹L [0r
hanya dieksekusi sekali. Ketika tumpukan ukuran nol ditemukan, loop keluar.Ketika tumpukan kosong ditemukan, a
,
dan baris baru dicetak, dan loop nilai dimasukkan kembali. Perintah eksekusi (dicerminkan untuk dibaca) di mana.
adalah perintah un-dieksekusi:\',$!.6ak$?....../
. Mengubahak
ke'<space>
akan mencetak spasi alih-alih baris baru.Eksekusi terhenti ketika program mencoba menulis dari tumpukan kosong; Inilah sebabnya mengapa hanya baris terakhir jagginess yang berfungsi dengan benar dan mengapa ada jejak
,
dalam output: koma sudah dicetak sebelum program tahu bahwa tidak ada lagi data.sumber