行列入力を簡素化する!


20

マトリックスに関連するいくつかの課題を書きましが、すべての場合に共通するのは、マトリックスを表現するときに、例とテストケースの両方で、次のような形式を使用することです。

16    2    3   13
 5   11   10    8
 9    7    6   12
 4   14   15    1

これは、多くの言語では面倒な形式である可能性があります。


チャレンジ:

入力としてtopで指定された形式の行列を取得できるプログラム/関数を作成し(この投稿から直接コピー/貼り付け)、以下に示す他の3つの従来の形式すべてで同じ行列を出力します

入力形式:

さまざまな数のスペースで区切られた数字、および行を表す改行(テストケースを参照)。

  • 数字間のスペースの数は、一貫しているとは限りません。ただし、各列の最後の桁が揃っていると想定することもできます(それが役立つ場合)。
  • 整数と浮動小数点の両方があり、それらは正、負、またはゼロです。マトリックスには、整数浮動小数点数が同時に含まれません。
  • 負の浮動小数点数のマイナスと小数点を含めて、10文字より長い数字はないと想定できます。
  • 各行と各列に同じ数のエントリがあると仮定できます。
  • 空の入力マトリックスはありませんが、単一の数値、または行または列が1つだけのマトリックスを使用できます。
    • これらの場合、テストケースに示されている出力形式から選択できます。

プログラム/関数は、この投稿から直接コピーされ、インタープリターに貼り付けられた場合(STDINまたは関数の引数または同等のものとして)入力を処理する必要があります。マトリックスの前後に、好きなもの(括弧、引用符、括弧)を置くことができますが、マトリックスを変更できない文字列(改行を含む)と見なす必要があります。

明確にするために:関数/プログラムが呼び出さfれ、マトリックスが次のとおりであると仮定します。

1 -2
3  5
6  7

次に、このような関数引数として行列を与えることができます(そして他の無限に多くのオプション):

f(1 -2
3  5
6  7)

f([1 -2
3  5
6  7])

f("""1 -2
3  5
6  7""")

あなたの言語が入力としてコピー/貼り付けられたマトリックスを取ることができない場合は、別の言語を選択する必要があると思います。


出力形式:

次の3つの形式でマトリックスを出力する必要があります(順序は関係ありません)。

[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
  • 必要に応じて3つの出力を分離できます(例:改行)
  • 入力と同じ精度を使用して数値を出力する必要があります(たとえば、小数点以下の桁数を切り捨てたり、整数を浮動小数点数として出力したりしないでください)。
  • スペースは必須です
  • -負の数には使用しないでください_

テストケース:

16    2    3   13
 5   11   10    8
 9    7    6   12
 4   14   15    1
----
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]

0.14778   0.27114   0.24415
0.45997   0.12287   0.67470
0.28945   0.37928   0.51887
----
[[0.14778, 0.27114, 0.24415], [0.45997, 0.12287, 0.6747], [0.28945, 0.37928, 0.51887]]
{{0.14778, 0.27114, 0.24415}, {0.45997, 0.12287, 0.6747}, {0.28945, 0.37928, 0.51887}}
[0.14778, 0.27114, 0.24415; 0.45997, 0.12287, 0.6747; 0.28945, 0.37928, 0.51887]

-0.0398301   0.2403455  -0.2253368   0.3565870   0.0605803   0.0830780
-0.3254422  -0.1185191  -0.2989537   0.1647319   0.3621135   0.2018815
-0.0022281  -0.3362287  -0.3568447   0.4419063   0.3801872  -0.2847033
---
[[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780], [-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815], [-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033],]
{{-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780}, {-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815}, {-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033},}
[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780; -0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815; -0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033]

0       4       1       0
0       0      -6       0
0       1       4      -3
2       0       0       8
0       0       0       0
----
[[0, 4, 1, 0], [0, 0, -6, 0], [0, 1, 4, -3], [2, 0, 0, 8], [0, 0, 0, 0]]
{{0, 4, 1, 0}, {0, 0, -6, 0}, {0, 1, 4, -3}, {2, 0, 0, 8}, {0, 0, 0, 0}}
[0, 4, 1, 0; 0, 0, -6, 0; 0, 1, 4, -3; 2, 0, 0, 8; 0, 0, 0, 0]

1
----
[1]     (or [[1]])
{1}     (or {{1}})
[1]     (or 1)

1 2
----
[1, 2]  (or [[1, 2]])
{1, 2}  (or {{1, 2}})
[1, 2]

4
5
----
[[4], [5]]
{{4}, {5}}
[4; 5]

私は完全に承知しているこのが、この挑戦に、面倒なI / O形式は、全体のポイントです。課題は、一部の言語で出力をフォーマットすることであり、他の言語では入力を読むことが最も難しい部分です。

入力を読むのが難しい場合、落胆しないでください。これらの投稿は最も興味深いものかもしれません。ショートは必ずしも印象的と同じではありません。そしていつものように、説明が奨励されています!

回答:


7

網膜、52バイト

この回答は、RetinaでゴルフをするためのMartin Enderの助けを借りて、Perlの回答に基づいています。

^ *
[
$
]
\s+
, 
m):`.+
[$&]
*T`[]`{}
], .
; 
^.|]$

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

説明は、Perlの回答に記載されています。違いは次のとおりです。

*
[
$
]

代わりにs/^ *(.+)/[$1]/gm、先頭のスペースを削除し、行の周りに括弧を追加します。

^.|]$

3番目の出力の先頭と末尾のブラケットを削除します。


6

網膜57 54バイト

バイトカウントはISO 8859-1エンコードを前提としています。

m`^ +

¶
] [
 +
, 
:`.+
[[$&]]
*T`[]`{}
], .
; 
^.|]$

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

TIOリンクは現在、3つの形式間で改行を出力しませんが、これは不安定なコミットを使用しているためです。プログラムは、Retina 0.8.2で中間改行を印刷します。

説明

m`^ +

各行の先頭のスペースを取り除きます。

¶
] [

改行をに置き換え] [ます。

 +
, 

スペースのすべての実行をコンマとスペースに置き換えます。

:`.+
[[$&]]

[[...]]最初の形式を完成させるもの全体をラップします。結果を印刷します。

*T`[]`{}

括弧を中括弧に置き換えて、実際に作業文字列を変更せずに結果を印刷します(つまり、最初の形式は印刷後に復元されます)。

], .
; 

], [セミコロンと改行で置き換えます。

^.|]$

最初[と最後を削除し]ます。これで3番目の形式が完成しました。


5

スカラ、183の 181 149バイト

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

String置換および正規表現を使用した新しいバージョン:

(x:String)=>{val d=x.replaceAll("\n *","; ").replaceAll("(?<!;) +",", ");(s"[[${d.replace("; ","], [")}]]",s"{{${d.replace("; ","}, {")}}}",s"[$d]")}

新バージョンでは、使用して古いバージョンと同じ意味と用法を持っているsplitmapmkString

古いバージョン、使用splitmapおよびmkString

編集:スペースの冗長文字クラスを削除

(x:String)=>{val d=x.split("\n").map(_.trim.split(" +").mkString(", "));(d.map(x=>s"[$x]").mkString("[",", ","]"),d.map(x=>s"{$x}").mkString("{",", ","}"),d.mkString("[","; ","]"))}

ラムダ。REPLで実行します。入力を三重引用符で囲まれたStringパラメーターとして受け入れ、出力を必要な出力の3タプルとして返します。REPLは、括弧で囲まれたコンマで区切られたタプルをレンダリングします。

説明:

新しいバージョン:

行の先頭のスペースを処理するためのトリッキーな後読みを除いて、他の正規表現ベースの回答とほぼ同じロジック。

古いバージョン:

入力行列表現を2D String配列に分割し、要素をで区切って内側の配列を折りたたみ、1D配列にマッピングし,ます。最後に、必要な改行セパレーターと境界マーカー(プレフィックスとサフィックス)を使用して1D配列を折りたたみ、異なる出力を作成します。すべてsplit(読み取り)、map(変換)、mkString(折りたたみ)を介して実装されます。

REPLセッションの例:

scala> val r=(x:String)=>{val d=x.split("\n").map(_.trim.split(" +").mkString(", "));(d.map(x=>s"[$x]").mkString("[",", ","]"),d.map(x=>s"{$x}").mkString("{",", ","}"),d.mkString("[","; ","]"))}

scala> r("""16    2    3   13
     |  5   11   10    8
     |  9    7    6   12
     |  4   14   15    1""")
res12: (String, String, String) = ([[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]],{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}},[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1])

少数要素のエッジの場合、これにより目的の出力が得られます。


2
他のScalaの答えよりもはるかに優れています。
ミスターXcoder

4

Japt63 53バイト

これは、出力の間隔が必須であることに気付く前に、44バイトで発生していました。

·®¸f
"[[{q"],["}]]
\{\{{q"},\{"}}}
[{q';}]"r",|;"_+S

試して


説明

          :Implicit input of string U
·         :Split to an array on newlines.
®         :Map over the array.
¸         :Split each element to an array on spaces.
f         :Filter to remove empty elements from the subarrays.
"[[       :Start building the output string. In Japt strings, anything enclosed in {}s will be evaluated before being added to the string.
{q"],["}  :Join the array to a string using ],[ The sub-arrays will be cast to comma separated strings in the process.
]]        :That's the first line done.
\{\{      :The start of the second line. A few bytes have to be sacrificed to esapce the {s
{q"},\{"} :Join the array to a string using },{
}}        :That's the second line done.
[         :And on to the last line.
{q';}     :This time we join the array with a semi-colon.
]"        :And that's the string completed.
r         :Except we still need to replace...
",|;"     :  All occurrences of a comma or a semi-colon with...
_+S       :  Itself and a space.
          :Implicit output of resulting string.

よくやった。私ができる最善のことは、およそ60バイトのどこか
でした...-ETHproductions

3

Perl 5、71バイト

69バイトのコード+ -p0フラグ。

s/^ *(.+)/[$1]/gm;s/\s+/, /g;$_="[$_]
{".y/[]/{}/r."}
".s/], \[/; /gr

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

説明

s/^ *(.+)/[$1]/gm;[]先頭のスペースを削除しながら各行の周りに追加します。
s/\s+/, /g;連続するスペースと改行をコンマとスペースに置き換えます。
最初の出力は、中括弧で囲むことにより取得されます[$_]
2番目は、中括弧を中括弧(y/[]/{}/r)に置き換え、周囲を中括弧で囲む必要があります"{" ... "}"
3番目については], [、セミコロンとスペース(s/], \[/; /gr)で置き換えます。


このソリューションを書いた後、Martin EnderのRetina回答を適用しようとしましたが、10バイト長くなりました(TryItOnline)。

s/^ +//gm;s/
/] [/g;s/ +/, /g;$_="[[$_]]
{{".y/[]/{}/r."}}
[".s/], \[/; /gr."]"

このバージョンでは、マーティンの参照解答解説のために。


3

MATL、60バイト

`jtU&D32', 'XHYXw]xXhH&Zc91wh93htD[]&D{}&DXED&GxvUH&4$'; 'TD

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

チャットのマスタークラスでバイトカウントの4分の1を削ったLuis Mendoに感謝します。

入力を貼り付けた後、空の行を貼り付けます。

% Act I: Taking input.

`jt             w]    % Take input line by line until an empty line is encountered.
   U                  % Convert string input to numerical row array
    &D                % Convert back to string, adding brackets and single spaces
      32', 'XHYX      % Add commas before the spaces. Store ',  ' in clipboard H.


% Act II: Nested square brackets

x                     % Discard the tab character
 Xh                   % Concatenate all strings as cell array.
   H&Zc               % Join all the strings together, using clipboard H as a separator
       91wh93h        % Wrap in square brackets (ASCII 91 and 93)
              tD      % Display a copy of the result.

% Act III: Nested curly brackets

[]&D{}&D              % Convert empty array and cell array to string.
        XE            % Use to substitute square for curly brackets.

% Act IV: MATLAB-style input.

&Gxv                  % Get all the input again, discard the tab, and concatenate vertically.
    U                 % Convert to numerical 
     &4$     TD       % Convert to string, using row- and column separators
        H'; '         % Namely, clipboard H and a semicolon.

2

05AB1E 45  44 バイト

|„  ð:ðδÛ˜ð¡„, ý''KD…[ÿ]=„[]„{}‡,"], ["„; :=

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

最初の出力

|                           # push a list of the inputs
 „  ð:                      # replace any instance of 2 spaces with 1 space
      ðδÛ                   # remove any leading spaces
         ˜                  # flatten to a 1D list
          ð¡                # split on spaces
            „, ý            # merge on ", "
                ''K         # remove all single quotes
                   D        # duplicate for use in output 3
                    …[ÿ]    # interpolate between square brackets
                        =   # print without popping 

2番目の出力

„[]„{}‡,                    # translate square brackets to curly brackets and print

3番目の出力

                            # the copy from the first output is used here
 "], ["„; :                 # replace "], [" with "; "
           =                # print


2

ジャバスクリプト(ES6)、121の 110 106バイト

@Shaggyと@Justinのおかげで-15バイト

m=>`[[${(a=m.split`
`.map(x=>x.match(/\S+/g).join`, `)).join`], [`}]]
{{${a.join`}, {`}}}
[${a.join`; `}]`

コードスニペットの例:

f=
m=>`[[${(a=m.split`
`.map(x=>x.match(/\S+/g).join`, `)).join`], [`}]]
{{${a.join`}, {`}}}
[${a.join`; `}]`
console.log(f(
`1 -2
 3  5
 6  7`
))


に変更map(x=>x.trim().replace(/ +/g,", "))して4バイト節約しますmap(x=>x.match(/\S+/g).join`, `)
ジャスティンマリナー

1

パイソン2163の 152 150 145バイト

感嘆符の使用を提案したFelipe Nardi Batistaに感謝します(申し訳ありませんが、その言葉を言うには言い訳が必要です:P)。

import re
a=str.replace
def f(s):r=a(`[re.findall('[\.\d]+',i)for i in s.split('\n')]`,"'",'');print r,a(a(r,*']}'),*'[{'),a(r[1:-1],'], [','; ')

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


ああ、感嘆符…ありがとう!
完全に人間

1

Pythonの3184 178 174 173 169 163 * 157 * 153のバイト

入力/出力形式:マトリックス間にスペースを空けて出力し、この関数呼び出しで入力します(TIOに表示)

g("""<paste matrix here>""")

これは関数です:

def g(s,r=str.replace):a=str([[[int,float]['.'in y](y)for y in x.split()]for x in s.split('\n')]);print(a,r(r(a,*'[{'),*']}'),'['+r(a,'], [','; ')[2:-1])

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


* @officialaimmのおかげで6バイトを節約(169バイトから163バイト)。

* @FelipeNardiBatistaのおかげで4バイト節約。


さらにゴルフをした後に来る説明。


1

C、415バイト

#import<stdio.h>
#define A(a,c,o)for(l=strlen(a)-o,k=0;c[k];)a[l+k]=c[k++];
j,k,l;main(i){char s[999],a[999]="[",b[999]="{",c[999]="[",t[]=" ";for(;fgets(s,999,stdin);){A(b,"{",0)A(a,"[",0)for(i=0;s[i];++i){j=0;for(;s[i]-32&&s[i]-10&&s[i];++i){j=1;t[0]=s[i];A(c,t,0)A(b,t,0)A(a,t,0)}if(j){A(c,", ",0)A(b,", ",0)A(a,", ",0)}}A(c,"; ",2)A(b,"}, ",2)A(a,"], ",2)}A(c,"]",2)A(b,"}",2)A(a,"]",2)puts(a);puts(b);puts(c);}

それはモンスターであり、長すぎますが、私はそれで終わりです。おそらく別のアプローチを採用すべきでした。

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

2番目のテストケース | 3番目のテストケース | 4番目のテストケース | 5番目のテストケース | 6番目のテストケース | 7番目のテストケース


1

ゼリー、37 バイト

j€⁾, j⁾; ⁾[]j
ỴḲLÐf$€VµŒṘṄ“[]“{}”yṄȧÇ

3行に3つの形式を印刷する完全なプログラム。

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

どうやって?

j€⁾, j⁾; ⁾[]j - Link 1, create the 3rd format (semicolon-style): list of lists
  ⁾,          - literal [',', ' ']
j€            - join for €ach (place ", " between the elements of each row)
      ⁾;      - literal [';', ' ']
     j        - join (place "; " between the rows)
         ⁾[]  - literal ['[', ']']
            j - join (surround the whole result with a pair of brackets)

ỴḲLÐf$€VµŒṘṄ“[]“{}”yṄȧÇ - Main link: list of characters
Ỵ                       - split at newlines
     $€                 - last two links as a monad for €ach row:
 Ḳ                      -   split at spaces
   Ðf                   -   filter keep those for which the following is truthy:
  L                     -     length (this removes all the empty lists "between" spaces)
       V                - evaluate as jelly code (yields a list of lists of numbers)
        µ               - monadic chain separation, call that x
         ŒṘ             - get a Python string representation of x
           Ṅ            - print that (the 1st format) plus a newline, and yield it
            “[]“{}”     - literal [['[', ']'],['{', '}']]
                   y    - translate (converts all '[' to '{' and all ']' to '}')
                    Ṅ   - print that (the 2nd format) plus a newline, and yield it
                      Ç - call the last link as a monad with argument x
                     ȧ  - logical and
                        - implicit print of the result (the 3rd format)

1

V、41バイト

òJé;òÓ¨ä©ó«/±, 
yss]Y.pkÓ; /], [
Ùòcs]}f[

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

説明

òJé;ò            Join all lines with `; ` (trailing single space)
     Ó¨ä©ó«/±,   :s/\v(\d)\s+/\1, /g
yss]             Surround everything with brackets (completes [x,x;x,x])
Y.pk             (Y)ank, surround with brackets again, (p)aste.  Adds [[x,x;x,x]]
    Ó; /], [     :s/; /[, ]/g (transforms to [[x,x], [x,x]])
Ù                Duplicate this line
 ò               recursively
  cs]}           (c)hange (s)urrounding [] with {}
      f[         go to the next [ until there are none

1

R、132バイト

function(x,p=paste0,g=gsub)cat(z<-p('[[',g('\n','], [',y<-g('[:blank:]',', ',x)),']]'),chartr('[]','{}',z),p('[',g('
','; ',y),']'))

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

無名関数。のような入力を取る

f('1 -2
3 5
6 7')

テストケースと同じ順序で印刷されますが、区切り文字としてスペースが使用されます。

説明:

最初にスペースを交換し,、結果をとして保存しyます。そして、それはで改行を入れ替え], [プット、[[そして]]どちらかの端に、とのようにその結果を保存しますz

次に、chartrスイッチ[{]して}の中でz

最後に、それが取るy、とのスワップの改行;とプット[]どちらかの端にあります。

次に、すべての結果がその順序で渡され、catそれらが印刷され、すべて適切にフォーマットされ、単一のスペースで区切られます。

軽度の制限なし:

function(x)
  cat(
    z<-paste0('[[',gsub('\n','], [',y<-gsub('[:blank:]',', ',x)),']]'),
    chartr('[]','{}',z),
    paste0('[',gsub('\n','; ',y),']'))

1

Netbeans 8+を搭載したJava 8、209バイト

カウントはコードから208で、プラスを押して実行するための1バイトF6です。

面倒な挑戦のための面倒な答え:p

interface M{static void main(String[]a){String s="";s=s.trim().replaceAll(" +",", ").replaceAll("\n(, )?","; ");System.out.println("["+s+"]\n[["+s.replace("; ","], [")+"]]\n{{"+s.replace("; ","}, {")+"}}");}}

使い方?

Netbeans内で、このコードをというファイルに貼り付けますM.java。次に、使用するマトリックスをコピーします。次に、2つの連続する文字の間に+を""押しますctrlvチャレンジの必要に応じてをます。

今すぐ押すF6!これにより、コードがコンパイルされ、実行され、予想されるマトリックス表現が出力されます。


これは、3つすべての出力形式である必要はありませんか?
ジュゼッペ

1
そこ!それは私が逃したものです!:D今それを修正。
オリビエグレゴワール

2
@StewieGriffinこれは、デフォルトでSTDINを使用する言語または改行を気にしない言語に有利です。また、主要なJava IDEでの「コピー/貼り付け」は、コピー/貼り付けられた改行を自動的にフォーマット\nし、結果を作成すると言えますあなたは何を見ました。S:かなり、それを得ることはありません率直に言って、私はそう
オリヴィエ・グレゴワール

@OlivierGrégoireこれはいくつかの言語、特に特別な処理なしでフォーマットを処理できる言語に有利であることを完全に認識しています。チャレンジテキストでこれを明示的に言及することもあります。Jelly、Javascript、またはPythonと競合するのではなく、Javaを使用していることに注意してください。それは非常に異なる機能を持ち、他のものと公平に比較​​することはできません。一部の言語に不公平な利点をもたらす可能性のある扱いにくいI / O形式を避けることに関する規則に従いますが、この特定の課題では、入力の解析がその大部分を占めます。
スティーヴィーグリフィン

1

Mathematica、129バイト

s=StringSplit
r=StringReplace
Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]&@ToString@s@s[#,n="
"]&

3行目と4行目は、文字列を入力として取る純粋な関数を定義しています。たとえば、を設定するf=Print...&と、最後のテストケースは次のように呼び出されます。

f@"4
5"

スニペット

ToString@s@s[#,n="
"]

入力文字列を(文字列の-エントリを数値として解釈することは決してありません)行列として解析し、結果の式を文字列に変換します。これにより、中括弧付きの出力形式が自動的に生成されます。次にPrint[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]、単純な文字列置換規則を使用して、その出力形式と他の2つを改行で区切って印刷します。


1

ピップ49 46バイト

45バイトのコード、-rフラグの場合は+1 。

g|>:sYP(RPg^w)R';kPyR'['{R']'}O'[OgRwkJ"; "']

stdinから入力を受け取ります。オンラインでお試しください!

説明

                 Preset variables used: s is " ", w is regex `\s+`, k is ", "
g                With -r flag, g is a list of lines from stdin
 |>:s            Left-strip spaces from (elements of) g and assign back to g

YP(RPg^w)R';k
     g^w         Split (elements of) g on runs of whitespace
   RP            Apply Pip's built-in repr, which wraps lists in [] and separates items
                   with ; (e.g. [[1;2];[3;4]])
  (     )R';k    Replace the semicolons with ", " to obtain format #1
YP               Print and yank into y variable

PyR'['{R']'}
 yR'['{          In y, replace [ with {
       R']'}     and ] with }
P                and print (format #2)

O'[OgRwkJ"; "']
O'[              Output [ with no newline
   O             Output with no newline:
    g              Take g (list of lines of stdin, with leading spaces stripped)
     Rwk           Replace runs of whitespace with ", "
        J"; "      and join lines on "; "
             ']  Print the final ] to complete format #3

(この説明の形式は少し複雑に感じますので、意味がわからない場合は教えてください。)


1

SCALA、590バイト

大変でしたが、もう終わりです

var o=s.replaceAll("  *"," ").replaceAll("\n ","\n")
var z=o.split("\n")
var h=z.length
var k=new Array[Array[String]](h)
for(i<-0 to h-1)k(i)=z(i).split(" ")
var u=k.length-1
print("{")
for(i<-0 to u){print("{")
for(j<-0 to k(i).length-2)print(k(i)(j)+", ")
print(k(i).last)
print("}")}
print("}[")
for(i<-0 to u){print("[")
for(j<-0 to k(i).length-2)print(k(i)(j)+", ")
print(k(i).last)
print("]")}
print("][")
for(i<-0 to u-1){for(j<-0 to k(i).length-2)print(k(i)(j)+", ")
print(k(i).last)
print("; ")}
for(j<-0 to k(k.length-1).length-2)print(k(u)(j)+", ")
print(k.last.last)
print("]")

簡単な説明:三重引用符で囲まれた入力を取得し、不要なスペースを削除します。文字列を2回(行に1回、列に1回)分割します。そして、3つのルーチンで印刷します。相互作用する関数を定義することは可能かもしれませんが、どうすればいいのかわかりません。

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


2
これは恐ろしいことです。Scalaの回答を投稿する必要があります。
タモグナチョードリー

ただし、努力を表明してください。
タモグナチョードリー

1
あなたはを見てみたいことがありますcodegolf.stackexchange.com/a/129356/48620スカラ座で可能であるかもしれないかを確認します。1.5より前のJavaを使用するように使用することは、氷山の一角に過ぎません。
タモグナチョードリー

2
さらに、出力が間違っているため、アップ投票を撤回する必要があります-出力形式で指示されているように、括弧の間にカンマはありません。
タモグナチョードリー


0

05AB1E、34バイト

|εð¡õK}€ï"ÿ"Є[]„{}‡s¦¨"], ["„; :»

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

ε...}vy...})TIOではまだプルされていないため、TIOに置き換えられました。


@JonathanAllanありがとう、修正されました。
エリックアウトゴルファー

クール、今ではそれがどのように機能するかの説明が必要です:)
ジョナサンアラン

1
@JonathanAllan申し訳ありませんが時間のatmがありません...
エリックアウトゴルファー

0

C#(.NET Core)、214バイト

(s)=>{var result=Regex.Replace("[["+Regex.Replace(s.Replace("\n","], [")," +(\\d)",", $0")+"]","  +"," ").Replace("[, ","[");return$"{result}]\n{result.Replace('[','{').Replace(']','}')}}}\n[{result.Replace("[","").Replace("],",";")}";};

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

Matrixを文字列として受け取り、改行で区切られた単一の文字列として3つの形式を返します。


この答え以来、ベースシステム以外のライブラリのusingステートメントをバイトカウントに含める必要があると確信しています。今のところは現在の形式のままにしておきますが、このステートメントにusing System.Text.RegularExpressionsは(カウントによって)37バイトを追加する必要があります。
カミルドラカリ

0

、38バイト

≔E⪪θ¶⪫Φ⪪ι λ, θE⪪[]{}²⪫ι⪫Eθ⪫ιλ, ⪫[]⪫θ; 

オンラインでお試しください!注:末尾のスペース。リンクは、コードの詳細バージョンです。木炭にはとを使用["""して区切られた複数行入力オプションがあり"""]ます。説明:

   θ                Input string
  ⪪ ¶               Split on newlines
 E                  Map over each line
        ι           Current line
       ⪪            Split on spaces
      Φ   λ         Filter out empty strings
     ⪫     ,        Join with `, `
≔            θ      Assign resulting array to variable

これは入力を受け取り、それを行に分割し、セパレーターを正規化することによって準備します。

 ⪪[]{}²             Split `[]{}` into substrings of length 2
E                   Map over the substrings
          Eθ        Map over array from above
            ⪫ιλ     Wrap each element with the substring
         ⪫     ,    Join elements with `, `
       ⪫ι           Wrap with the substring
                    Implicitly print each result on a separate line

これにより[[ ... ], [ ... ]]{{ ... }, { ... }}ケースが処理されます。

    θ               Array from above
   ⪫ ;              Join elements with `; `
⪫[]                 Wrap result with `[]`
                    Implicitly print

これは[ ... ; ... ]ケースを処理します。

上記のソリューションから1バイトをゴルフする前に、私は2つの39バイトのソリューションを使用していました。これは他のものです:

⮌E⪪[]{}[]²⪫ι⪫EE⪪θ¶⪫Φ⪪λ ν, ⎇κ⪫ιλλ⁺§;,,κ 

オンラインでお試しください!注:末尾のスペース。リンクは、コードの詳細バージョンです。説明:

  ⪪[]{}[]²                              Split `[]{}[]` into substrings of length 2
 E                                      Map over the substrings
                θ                       Input string
               ⪪ ¶                      Split on newlines
              E                         Map over each line
                     λ                  Current line
                    ⪪                   Split on spaces
                   Φ   ν                Filter out empty strings
                  ⪫     ,               Join with `, `
             E                          Map over each line
                          ⎇κ   λ        If outer index is zero, just use the line
                            ⪫ιλ         Otherwise wrap the line in the substring
            ⪫                   ⁺§;,,κ  Join with `; ` or `, ` per outer index
          ⪫ι                            Wrap in the substring
⮌                                       Reverse the order of the results
                                        Implicitly print each result on a separate line
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.