Saya transpos kode sumber, Anda transpos input!


31

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.

  1. 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.

  2. 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 , 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".


23
Tuhanku. Bisakah kita berhenti?
JL2210

3
@ Night2 Tidak, ini memperumit masalah.
Adám

14
@ JL2210 Tidak, saya punya yang besar dalam karya.
Adm

7
Tantangan-tantangan ini menjadi tidak mungkin dalam bahasa prosedural tanpa penyalahgunaan komentar serius.
JL2210

2
@ JL2210 Transforms .
Adám

Jawaban:


27

Python 3 + numpy, 45 byte

lambda\
a:a
ma= """
b.    "
dT"   "
a "
\ """

Cobalah online!

Berkat @EriktheOutgolfer menunjukkan bug dari versi sebelumnya

Dipindahkan:

lambda\
a:a.T  
ma= """
b     "
d "   "
a "    
\ """  

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.


3
Itu sangat rapi!
Adám

Hm, saya cukup yakin bahwa versi yang dipindahkan akan diisi dengan spasi, sehingga baris terakhir akan berisi spasi tambahan, oleh karena itu \akan membuang a SyntaxError. Anda perlu memindahkan tanda kutip di kedua arah untuk memperbaikinya.
Erik the Outgolfer

@EriktheOutgolfer Diperbaiki. Terima kasih.
Joel

15

Jelly , 2 byte

Input adalah daftar daftar. Terima kasih kepada Luis Mendo dan Nick Kennedy karena telah meningkatkan jawabannya.

ZZ

Cobalah online! Cobalah transpos!

Program mentranspos input dua kali, mengembalikan input asli. Versi yang dialihkan mengabaikan baris pertama dan hanya mentransposisi satu kali.


13

R , 5 4 byte

#t
I

Cobalah online!

Fungsi R, baik fungsi identitas I atau fungsi ttranspose saat ditransformasikan. Footer di TIO menunjukkan output keduanya.

Terima kasih kepada @RobinRyder karena telah menghemat satu byte!


Anda tidak perlu final #.
Robin Ryder

@RobinRyder terima kasih! Untuk beberapa alasan saya melapisi persegi panjang meskipun saya telah melihat pernyataan bahwa itu tidak perlu.
Nick Kennedy

10

C (gcc) , 209 205 203 201 byte

Normal

f(n,L,r,c)char**L;{for(c=0;0?L+  c:c<n;c+=puts(""))for(r=0;0?r :L[c][r];r++)putchar(L[ c ][ r ]);}/*
          \\\      \\      1 [0][]      \ \\\  \   \\      1 <n          \  \\\\\\   r+-c c+-r    */

Cobalah online!

Ditransposisikan

f 
( 
n 
, 
L 
, 
r 
, 
c 
) 
c\
h\
a\
r 
* 
* 
L 
; 
{ 
f\
o\
r 
( 
c 
= 
0 
; 
01
? 
L[
+0
 ]
 [
c]
: 
c 
< 
n 
; 
c 
+\
= 
p\
u\
t\
s 
( 
"\
" 
) 
) 
f\
o\
r 
( 
r 
= 
0 
; 
01
? 
r<
 n
: 
L 
[ 
c 
] 
[ 
r 
] 
; 
r 
+\
+ 
) 
p\
u\
t\
c\
h\
a\
r 
( 
L 
[r
 +
c-
 c
] 
[c
 +
r-
 r
] 
) 
; 
} 
/*
*/

Cobalah online!


8

Haskell , 51 byte

Versi ini valid, tetapi tidak akan berhenti ketika diberikan []sebagai input.

f
--(:[|,<zabf=]f
--abx(y-i$]
-- ):x) pf;x[:x
 y =y

Cobalah online!

Ditransposisikan, 75 byte

f---
 ---y
 (a
 :b)=
 [x:y
 |(x
 ,y)
 <-
 zip
 a$f
 b];
 f x
 = [
 ] :
 f x

Cobalah online!

Haskell , 51 byte

Versi ini valid, tetapi macet dengan []sebagai input untuk versi yang dialihkan.

f
--d[(idi)z[.]d!0
-- m!)|,<i0.$ !]
-- a! (_-p
 p=p

Cobalah online! Ditransposisikan

Haskell , 75 67 57 byte

Setidaknya 7 byte disimpan berkat Ørjan Johansen

Versi ini di-output []ketika diberikan []sebagai input.

f
--[[d(i<di)z[.$!0
--]]=!)$|,<i0.d!]
-- ;[! >(_-p ]
 f=f

Cobalah online!

Ditransposisikan



@ ØrjanJohansen Terima kasih! Saya telah mencoba sesuatu seperti itu sebelumnya tetapi saya tidak bisa membuatnya bekerja. Ada juga cara yang cukup mudah untuk mengambil 3 byte lebih banyak dari 60 Anda.
Wheat Wizard


5

Perl 6 , 20 11 byte

#&
*[
#Z
 ]

Cobalah online!

Ditransposisikan

#*# 
&[Z]

Cobalah online!

Kedua fungsi bekerja pada daftar daftar.

*[ ] adalah ApapunCode mengembalikan potongan zen argumennya, secara efektif fungsi identitas.

&[Z] adalah operator zip.


5

Haskell, 185 161 byte

t i
 =
 i
af

 n m
 u a e i
 l p s d
 lu h=u
 (
 h
 e
 a
 d

 a
 )
 t
 h
 e
 n
 [
 ]
 e
 l
 s
 e

 m
 a
 p

 h
 e
 a
 d

 a
 :
 t
 (
 m
 a
 p

 t
 a
 i
 l

 a
 )

Cobalah online!

Dipindahkan:

t  a
 =if null(head a)then[]else map head a:t(map tail a)
i       u
     map
        h
      es=
        u
      id

Cobalah online!

Tidak ada komentar, tidak ada string literal, hanya beberapa definisi fungsi tambahan.

Sunting: -24 bytes terima kasih kepada @ Ørjan Johansen.



4

PHP (7.4), 114 86 70 byte

Pengalaman 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:

fn($a)=>$a/*
nu         /
(l
$l
a,
).
=.
>.
a$
ra
r)
a/
y*
_
m
a
p
(*/

Cobalah online!

Ditransposisikan (ruang empuk):

fn($a)=>array_map(
null,...$a)/*    *
(                /
$                 
a                 
)                 
=                 
>                 
$                 
a                 
/                 
*/                

Cobalah online!


3

Arang , 19 byte

A¿⁰«
‖⁰¿
↗⁰
¿⁰
⁰¿
«

Cobalah online! Mengambil input sebagai array string. Penjelasan: secara implisit mencetak input eksplisit, sementara ¿⁰merupakan kondisi, dengan 0sebagai 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:

A‖↗¿⁰«
¿⁰⁰⁰¿
⁰¿
«

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:

A⊞υ”y
‖υ⁺y
↗⁺
⊞⁺
υ

Cobalah online! Penjelasan: seperti di atas; ⊞υmendorong nilai ke daftar kosong yang telah ditentukan (yang tidak mempengaruhi output); ”ymemulai string arbitrer (berakhir di akhir program atau pencocokan ). Dipindahkan:

A‖↗⊞υ
⊞υ⁺⁺
υ⁺
”y
y

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 .


3

Brain-Flak (BrainHack) , 382 375 337 byte

Tidak 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!


3

Japt , 2 byte

ÕU

Cobalah | Ditransposisikan

ÕU     :Implicit input of string/array U
Õ      :Transpose U
 U     :Original U
       :Implicit output
Õ\nU     :Implicit input of string/array U
Õ        :Transpose U
 \n      :Reassign to U
   U     :Newly transposed U
         :Implicit output


2

Haskell ,153 144 byte

(terima kasih, Sriotchilism O'Zaic )

f
 [
 ]=
   [
   ];
    f(
     x:
      l)
       =(
        :)
         x l
-- :   z $
-- f   i f
-- [   p
-- ]   W
--     i
--     t
--     h

Cobalah online!

Cobalah transpos!


Ini adalah versi 144 byte sambil mempertahankan struktur Anda. ( Ditransposisikan ).
Wheat Wizard

Berikut adalah versi 70 byte yang masih serupa tetapi dengan beberapa perubahan struktural. ( Ditransposisikan ).
Wheat Wizard

Terima kasih. Versi kedua tidak memiliki ide sentral (menggunakan kembali foldrrekursi untuk kedua versi), jangan seperti itu.
Berhenti menghidupkan counterclockwis

Anda tahu, tantangan ini dan nama pengguna Anda agak saling bertentangan, karena kode Anda berubah berlawanan arah dalam versi yang diubah. ; p
Kevin Cruijssen

2

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 ...


1

05AB1E , 3 byte

øø
q

Cobalah online.

øq
ø

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).

ø    # Transpose the (implicit) input
 ø   # Transpose it back
  q  # Stop the program (and output the top of the stack implicitly as result)

ø    # Transpose the (implicit) input
 q   # Stop the program (and output the top of the stack implicitly as result)
  ø  # No-op, since the program has already stopped

1

Ruby , 35 byte

#-sz##
->hip{
 hip  }
#{f
#ht*
#..h

Cobalah online!

Pinggul menjadi persegi! (Hampir)

Menerima matriks ruby ​​sebagai input (array array)





0

Cjam , 13 byte

qo
~
z
`

Cobalah online!

Versi yang dialihkan:

q~z`
o

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:

qo{
~
z
` };

Cobalah online!

atau dialihkan:

q~z`
o
{  };

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.


0

Zsh , 75 byte

  <<<${(F)@}
fa<
o[<
r+$
 +{
si(
;]F
i+)
==a
&$}
&s
r[
ei
p+
e1
a]
t

$
#
s

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.

 for s;i=&&repeat $#s
 a[++i]+=$s[i+1]
<<<${(F)a}
<
<
$
{
(
F
)
@
}

0

Pesona Rise , 88 byte

vrlril1-{)?\:',=4*?~r0[
i! '${U [0r/?*7̸0l{$
$ka6 ̹\!$,'/;? =  ̹
'              ̸

$

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:

1 2 3 , 4 5 6 , 7 8 9

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.

→rlril1-{)?\:',≠4*?~r0[    Initial position. Read and parse input.
           ↓               Input loop exit and direction

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.

           ↓
.. '${̹L [0r/?*7≠0l{̹$       When no more input:
      ↑    ↓

[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. Ini i!tidak dieksekusi dan {̹L [0rhanya dieksekusi sekali. Ketika tumpukan ukuran nol ditemukan, loop keluar.

      ↑    ↓
$ka6  \!$,'/;?             Row separation formatting

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$?....../. Mengubah akke '<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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.