ソースコードを転置し、入力を転置します!


31

ぼったくりぼったくりぼったくりぼったくり。それらに賛成票を投じてください!

受け入れたい場合、あなたのタスクは、入力/引数を出力/返すプログラム/関数を書くことです¹。扱いにくい部分は、ソースコード²を転置する場合、出力/結果も転置する必要があることです。

  1. ソリューションが受け入れることができる2Dデータの種類を選択できます。たとえば、リストのリスト、マトリックス、文字列のリストなど。どのリストを処理するかを指定します。入力は常に長方形で、各次元に沿って1以上の長さを持つと仮定できます。

  2. 転置のために、ソースコードの短い行は、長方形になるまで末尾のスペースが埋め込まれていると見なされますが、これらの埋め込まれた末尾のスペースはコードの長さに影響しません。

これはであるため、ターゲットは元のソースコード(転置バージョンではなく)のバイトカウントを最適化することです。

ソリューションが数値行列を取り、ソースコードが

AB
DEF

そしてその入力/引数は[[1,2],[3,4],[5,6]]です。書いたら

AD
BE
 F

代わりに実行してください[[1,3,5],[2,4,6]]。出力/結果はでなければなりません。

あなたのソリューションが改行で区切られた文字列を取り、ソースコードが

ABC

そしてその入力/引数は"96\n"です。書いたら

A
B
C

代わりに実行してください"9\n6\n"。出力/結果はでなければなりません。


23
我が神よ。止められますか?
JL2210

3
@ Night2いいえ、問題を複雑にします。
アダム

14
@ JL2210いいえ、私は大きな作品を持っています。
アダム

7
これらの課題は、深刻なコメントの乱用がなければ手続き型言語では不可能になっています。
JL2210

2
@ JL2210 変換
アダム

回答:


27

Python 3 + numpy、45バイト

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

オンラインでお試しください!

@EriktheOutgolferが以前のバージョンのバグを指摘してくれてありがとう

転置:

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

オンラインでお試しください!

関数は、入力としてnumpy行列を取り、numpy行列を出力します。このソリューションは、他の多くのソリューションのようにコメントに依存しませんが、代わりに複数行の文字列を活用します。


3
それは本当にすてきです!
アダム

うーん、転置バージョンにはスペースが埋め込まれるので、最後の行には末尾のスペースが含まれることに\なるので、をスローしSyntaxErrorます。これを修正するには、両方向に引用符を移動する必要があります。
エリックアウトゴルファー

@EriktheOutgolfer修正済み。ありがとう。
ジョエル


13

R5 4バイト

#t
I

オンラインでお試しください!

R関数、I転置t時の恒等関数または転置関数。TIOのフッターは両方の出力を示します。

バイトを保存してくれた@RobinRyderに感謝します!


あなたは最終を必要としません#
ロビンライダー

@RobinRyderありがとう!なんらかの理由で、私はそれが不要であるという声明を見たにもかかわらず、長方形にパディングしていました。
ニックケネディ

10

C(GCC) 209の 205 203 201バイト

普通

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    */

オンラインでお試しください!

転置

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
] 
) 
; 
} 
/*
*/

オンラインでお試しください!


8

Haskell、51バイト

このバージョンは有効ですが、[]入力として指定されても停止しません。

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

オンラインでお試しください!

転置、75バイト

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

オンラインでお試しください!

Haskell、51バイト

このバージョンは有効ですが[]、転置バージョンの入力としてクラッシュします。

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

オンラインでお試しください! 転置

Haskell75 67 57バイト

ØrjanJohansenのおかげで、少なくとも7バイトが節約されました

このバージョンは、入力として[]指定さ[]れたときに出力されます。

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

オンラインでお試しください!

転置



@ØrjanJohansenありがとう!私は以前にそのようなことを試みましたが、それを動作させることができませんでした。より多くの3を取るために非常に簡単な方法は、あなたの60のバイトoffもあります
小麦ウィザード



5

Haskell、185161バイト

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
 )

オンラインでお試しください!

転置:

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

オンラインでお試しください!

コメント、文字列リテラル、追加の関数定義はありません。

編集:@ØrjanJohansenのおかげで-24バイト。



4

PHP(7.4)、114 86 70バイト

PHPでこのようなことを初めて行った私の経験では、私には見えないより良い方法があるはずです!入力はのような配列の配列です[[1,2],[3,4],[5,6]]

通常:

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

オンラインでお試しください!

転置(スペースを埋める):

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

オンラインでお試しください!


3

、19バイト

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

オンラインでお試しください!入力を文字列の配列として受け取ります。説明:明示的な入力を暗黙的に出力しますが、while ¿⁰は条件0として条件付きであるため、常にfalseです。«その後、実行されることのない無意味なCharcoalコードのブロックを開始します。(これらのバイトの一部を削除することは可能かもしれませんが、その場合、Charcoalがプログラムを正しく解析するかどうかはわかりません。)転置、17バイト:

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

オンラインでお試しください!説明:transposeコマンドの追加を除いて、前のプログラムとほとんど同じ‖↗です。

元のプログラムと転置されたプログラムの両方が18バイトである代替ソリューションがあります:

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

オンラインでお試しください!説明:上記の通り。⊞υ定義済みの空のリストに値をプッシュします(出力に影響しません)。”y任意の文字列を開始します(プログラムまたはマッチングの終わりで終了)。転置:

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

オンラインでお試しください!説明:A‖↗上記の通り。⊞υ上記のように; ここでの小さな違いは、を繰り返したくないので、小さな文字列の連結をプッシュしていることです


3

Brain-Flak(BrainHack)382 375 337バイト

コメントはありません!

  ( <( <>)<> ><>) ({})  {}{}   {( )()<({}<{}<><>>{}<><>{}) ( <>) ({}<><( [ ]({}<{}( )<({}()<{}<><>>){} ><><{}<< ><> ( [ ]( <>)<>)>{}<>>>)){}>)> ( ){ {}[]} <>[]{
(({}({}  ( ))   <>( ))[( [ ])])({}[ ] [ ](   )  (   ) < ><>{}  <>(   ){{}()<( )( ({} {  [ ](   )   } <>)  (  (())  {{}()<{}    >}  )  ) >}    )}[] {} ( ){} ( ){}({}<>)<>([])}<>

オンラインでお試しください!

入力の場合、最初の2つの数値はマトリックスの次元で、残りはマトリックスの内容です。出力は同じ形式で提供されます。

転置

Brain-Flak(BrainHack)、465バイト

 (
 (
({
 }
<(
({
 }
<
>
)(
<
>)
 )
>
<
>
)<
 >
((
{
})
))
 [
 (
{
}[
{
}]
 )
 ]
 )
{(
({
 }
)[
(
)]
<
([
{
}]
<( 
{
}
<
>)
<
>
>(
{
}
<
>)
<
><
{
}>
)<
 >
({
 }
<
>
)<
 >
((
{
}
<
>)
<{
({
 }
[(
 )
]<
((
{
})
<(
{
}(
({
 }
)
<{
(
{
}[
(
)]
<(
{
}
<
>)
<
>
> 
)}
{
}<
 >
>)
<
>
<(
{
}
<(
<(
 )
>)
<
>
 {
({
 }
[(
 )
]<
({
 }
<
>
)
<
>>
)}
>
{
})
<
>
>)
>
)>
)}
{
}
>
)
>)
 }
([
 ]
)
{{
 }
{
}(
[
])
}{
 }
<
>(
[
])
{{
 }
 (
 {
 }
 <
 >
 )
 <
 >
 (
 [
 ]
 )
 }
 <
 >

オンラインでお試しください!




2

ハスケル153 144バイト

(ありがとう、Sriotchilism O'Zaic

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

オンラインでお試しください!

転置してみてください!


これは、構造を維持しながら144バイトのバージョンです。(転置)。
小麦ウィザード

これは70バイトバージョンで、まだ似ていますが、構造が若干変更されています。(転置)。
ウィートウィザード

ありがとう。ただし、2番目のバージョンには中心的なアイデアが欠けています(foldr両方のバージョンで再帰を再利用します)。
反時計回りを回すのをやめた

あなたは、あなたのコードがその転置されたバージョンで反時計回りに回ったので、この挑戦​​とあなたのユーザー名はちょっと矛盾していることを知っています。; p
ケビンクルーッセン

2

APL(Dyalog Unicode)、7バイト

{⍵

⍵}

オンラインでお試しください!

転置:

{⍉⍵
 }

おそらく退屈な答えですが、とにかくここに行きます。

インライン関数定義{...}は複数行にまたがることができます。この場合、各行は順番に実行されますが、割り当てのない行はすぐに計算値を返します。したがって、最初の関数は戻り、2番目の関数はを返します⍉⍵

さらに退屈な答えは、コメントの悪用です。

APL(Dyalog Unicode)、4バイト

⍝⍉

TIOは必要ありません。


1

05AB1E、3 バイト

øø
q

オンラインでお試しください。

øq
ø

転置してみてください。

説明:

他のいくつかの言語とは異なり、05AB1Eでは改行は単に無視されるため、2バイトは可能だとは思いません(間違っていることが証明されたいのですが)。

ø    # 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





0

Cjam、13バイト

qo
~
z
`

オンラインでお試しください!

転置バージョン:

q~z`
o

オンラインでお試しください!

入力形式

入力形式は標準のCJam配列形式です。 [[1 2] [3 4]]

クラッシュバージョンなし、12バイト

アレイを印刷した、通常バージョンがクラッシュます。クラッシュしないバージョンは次のとおりです。

qo{
~
z
` };

オンラインでお試しください!

または転置:

q~z`
o
{  };

オンラインでお試しください!

おそらく保存できる余分なバイトがいくつかありますが、最初に転置バージョンで誤って作業したため、いくつかの余分な改行が発生し、最後にCJamを使用してから長い時間がかかりました。どんな改善も歓迎します。


0

Zsh、75バイト

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

$
#
s

TIO:通常の 転置

メイン印刷の下にあるゴミは無害fa<です。改行の後にエラーを出力して終了します。そのエラーを削除するには86バイト。

転置バージョンはこちらです。印刷後<、行末でエラーが表示されて終了します。

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

0

ルーン文字のエンチャント、88バイト

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

$

オンラインでお試しください!
置き換えてみてください!

入力は値ごとにスペースで区切られ、行ごとにカンマで区切られ(改行はオプション)、文字列と(ゼロ以外の)数値の両方をサポートします。これにより、入力がスペースと改行で自動的に分割されるため、入力の解析が容易になります。たとえば、次の入力:

1 2 3 , 4 5 6 , 7 8 9

としてネストされた配列形式で表され[[1,2,3],[4,5,6],[7,8,9]]ます。ギザギザの配列の最小限のサポート(最後の配列のみを短くすることができます)が、入力が長方形であると予想されるため、これはその要件を満たします。

出力は同じ形式で表されます(転置されたバージョンは改行付きで出力されますが、ゼロバイトが異なり、代わりにスペースを使用します)。通常バージョンには末尾スペースがあり、転置バージョンには末尾コンマと改行があります(印刷するデータがなくなると判断が困難になるため)。

通常バージョンには、変な場所(例:)に修飾子文字7̸0がありますが、これは、ソースが転置され、通常の実行が命令の左端の列のみを使用する場合に正しい場所に必要なためです。

説明

転置されたソースの説明は、転置されていない形式になります。矢印は、さまざまなブロックの入り口と出口でのIPの方向性を表します。

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

入力が読み取られ、,文字が見つかると、新しいサブスタックがプッシュされます。これにより、各スタックはメモリ内の各行を個別に保持できます。上から次のセクションに入ります。

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

[0(左方向に実行)は、最初の行と最後の行の境界として機能する空のスタックを設定し、最初のスタックまで回転し()、要素の印刷とスタックの回転を開始します。i!実行されず、{̹L [0r一度だけ実行されます。サイズがゼロのスタックが見つかると、ループは終了します。

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

空のスタックが見つかると、a ,および改行が出力され、値ループが再入力されます。実行順序(読みやすくするためにミラー化されています).は、未実行のコマンドです\',$!.6ak$?....../。に変更akする'<space>と、改行ではなくスペースが印刷されます。

プログラムが空のスタックから書き込もうとすると、実行が停止します。これが、最後の行のジャギーだけが正しく機能する理由であり、,、出力にがあります。データがもうないことをプログラムが認識する前に、コンマがすでに印刷されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.