简化矩阵输入!


20

我已经写了一些与矩阵有关的挑战,所有的共同点是在示例和测试用例中,我在表示矩阵时都使用了以下格式:

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

在许多语言中,这可能是繁琐的格式。


挑战:

编写一个程序/函数,该程序/函数可以采用顶部给出的形式的矩阵作为输入(直接从本文中复制/粘贴),并在下面显示的所有其他三种常规格式上输出相同的矩阵

输入格式:

用不同数量的空格分隔的数字和代表行的换行符(请参见测试用例)。

  • 数字之间的空格数不能保证是一致的。但是,您可以假设每列的最后一位数字对齐(如果有帮助的话)。
  • 整数和浮点数都可以,它们可以是正数,负数或零。矩阵不会同时包含整数浮点数。
  • 您可以假设数字不超过10个字符,包括负浮点数的负号和小数点。
  • 您可以假设每行和每列中的条目数相同。
  • 不会有任何空的输入矩阵,但是可以有单个数字,或者只有一行或一列的矩阵。
    • 在这些情况下,您可以在测试用例中显示的输出格式之间进行选择

如果程序/函数是直接从此帖子中复制并粘贴到解释器中的,则必须处理该输入(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""")

如果您的语言无法以任何方式将复制/粘贴的矩阵作为输入,那么恐怕您必须选择另一种语言。


输出格式:

您应该以以下三种格式输出矩阵(顺序无关紧要):

[[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
----
[[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格式才是重点。挑战将全部围绕以某些语言格式化输出,而阅读输入将是其他语言中最难的部分。

如果阅读困难,请不要气,,那些提交可能是最有趣的。空头不一定与印象深刻一样。与往常一样,鼓励您做出解释!

Answers:


7

视网膜,52字节

这个答案是基于我的Perl答案,在Martin Ender的帮助下与Retina打高尔夫球。

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

在线尝试!

可以在我的Perl答案中找到解释。不同之处在于:

*
[
$
]

而不是s/^ *(.+)/[$1]/gm同时删除前导空格并在线条周围添加括号。

^.|]$

删除第三个输出的前括号和后括号。


6

视网膜57 54字节

字节数假定为ISO 8859-1编码。

m`^ +

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

在线尝试!

TIO链接当前在这三种格式之间不打印换行符,但这是因为它使用了不稳定的提交。该程序确实在Retina 0.8.2中打印中间换行符。

说明

m`^ +

消除每行上的前导空格。

¶
] [

用替换换行符] [

 +
, 

用逗号和空格替换所有空格。

:`.+
[[$&]]

包装[[...]]完成第一个格式的整个内容。打印结果。

*T`[]`{}

用大括号替换括号,并在不实际更改工作字符串的情况下打印结果(即,在打印后恢复第一种格式)。

], .
; 

替换], [为分号和换行符。

^.|]$

删除第一个[和最后一个]。这样就完成了第三种格式。


5

斯卡拉,183 181 149字节

在线尝试!

新版本,使用String替换和正则表达式:

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

新版本的语义和用法与使用的旧版本相同splitmapmkString

老版,使用splitmapmkString

编辑:多余字符类的空间已删除

(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("[","; ","]"))}

Lambda。在REPL中执行。接受输入为三引号String参数,将输出作为所需输出的组返回。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先生17年

4

杰普特63) 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 5,71个字节

69个字节的代码+ -p0标志。

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

在线尝试!

说明

s/^ *(.+)/[$1]/gm;[]在每行周围添加,同时删除前导空格。
s/\s+/, /g;用逗号和空格替换空格和换行符。
然后,用大括号括起来获得第一个输出:[$_]
第二个需要用大括号(y/[]/{}/r)替换大括号,并用大括号包围"{" ... "}"
对于第三个,], [用分号和空格(s/], \[/; /gr)代替。


编写完此解决方案后,我尝试适应Martin Ender的Retina答案,但最终又增加了10个字节(TryItOnline):

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

对于此版本,请参阅Martin的答案以获取解释。


3

MATL,60字节

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

在线尝试!

非常感谢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 

第二输出

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

第三输出

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


2

使用Javascript(ES6),121 110 106字节

-15个字节,感谢@Shaggy和@Justin

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

Python 2中163 152 150 145字节

-5个字节,感谢Felipe Nardi Batista建议使用ssplats(对不起,我只需要一个借口说这个单词: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],'], [','; ')

在线尝试!


啊,啪...谢谢!
6

1

Python 3中184 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);}

这是一个怪物,而且waaayyyy太长了,但是我已经完成了。应该应该采用其他方法。

在线尝试!

第二个测试用例 | 第三个测试案例 | 第四个测试案例 | 第五测试案例 | 第六个测试用例 | 第七测试用例


1

果冻,37 个字节

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

一个完整的程序在三行上打印三种格式。

在线尝试!

怎么样?

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。然后,在任一端与], [,put [[和交换换行,并将]]结果保存为z

接着,chartr开关[{]}z

最后,它需要y,与;[以及]在任一端交换换行符。

然后,所有结果都按该顺序传递,然后将cat它们打印出来,格式都很好,并用一个空格隔开。

轻度松懈:

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

1

Java 8 with Netbeans 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。然后复制您要使用的矩阵。然后在两个连续的字符之间"",按ctrl+v挑战要求。

现在按F6!这将编译代码,运行它并输出期望的矩阵表示。


不需要全部采用三种输出格式吗?
朱塞佩

1
那里!那就是我想念的!:D现在解决这个问题。
OlivierGrégoire'17

2
@StewieGriffin这是默认情况下使用STDIN或不关心换行符的优势语言,我也可以说任何主要Java IDE中的“复制/粘贴”功能都会自动将复制/粘贴的换行符更改为visual \n,从而得到结果你看到了什么 坦率地说,所以我不太明白:s
OlivierGrégoire17年

@OlivierGrégoire我完全知道这在某些语言中是有优势的,特别是那些无需任何特殊处理即可处理格式的语言。我什至在挑战文本中明确提到了这一点。请记住,您不是在与Jelly,Javascript或Python竞争,而是在使用Java。它具有截然不同的功能,因此不能与其他功能相提并论。我始终遵循避免使用繁琐的I / O格式的规则,这些格式可能给某些语言带来不公平的优势,但是在这个特殊的挑战中,解析输入是其中的很大一部分。
Stewie Griffin'7

1

Mathematica,129个字节

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

第三和第四行一起定义了一个纯函数,该函数以字符串作为输入;例如,如果我们设置f=Print...&,那么最后一个测试用例将被称为:

f@"4
5"

片段

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

将输入字符串解析为矩阵(字符串-我们从不尝试将条目解释为数值),并将结果表达式转换回字符串;这会自动生成带有花括号的输出格式。然后Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}],使用简单的字符串替换规则打印该输出格式以及另两个输出格式,并用换行符分隔。


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
这太可怕了。我现在必须发布一个Scala答案。
Tamoghna Chowdhury

不过要努力。
Tamoghna Chowdhury

1
您可能想看看codegolf.stackexchange.com/a/129356/48620,以了解Scala可能会发生什么。像使用1.5之前的版本那样使用Java只是在冰山一角。
Tamoghna Chowdhury

2
另外,您的输出是错误的,这使我想收回我的投票-根据输出格式的指示,方括号之间没有逗号。
Tamoghna Chowdhury



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当作一个字符串,以单个字符串返回这三种格式,并用换行符分隔。


从这个答案开始,我已经确定字节库中应该包含针对除基本System以外的库的using语句。我现在将其保留为当前形式,但是该语句using System.Text.RegularExpressions需要添加(根据我的数量)37个额外的字节。
卡米尔Drakari

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

这样处理[ ... ; ... ]情况。

在不考虑上述解决方案之前,我曾经有过两个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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.