ลดความซับซ้อนของการป้อนข้อมูลเมทริกซ์!


20

ฉันได้เขียนความท้าทายสองสามข้อที่เกี่ยวข้องกับเมทริกซ์และสิ่งที่พบโดยทั่วไปสำหรับฉันคือฉันใช้รูปแบบเหมือนด้านล่างเมื่อแสดงเมทริกซ์ทั้งในตัวอย่างและในกรณีทดสอบ:

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

นี่เป็นรูปแบบที่ยุ่งยากในหลายภาษา


ท้าทาย:

เขียนโปรแกรม / ฟังก์ชั่นที่สามารถใช้เมทริกซ์ในแบบฟอร์มที่กำหนดในด้านบนเป็น input (โดยตรงคัดลอก / วางจากการโพสต์นี้) และเอาท์พุทเมทริกซ์เดียวกันในทั้งสามรูปแบบทั่วไปอื่น ๆ ที่แสดงด้านล่าง

รูปแบบอินพุต:

ตัวเลขคั่นด้วยจำนวนช่องว่างที่แตกต่างกันและขึ้นบรรทัดใหม่เพื่อแสดงแถว (ดูกรณีทดสอบ)

  • จำนวนช่องว่างระหว่างหมายเลขไม่รับประกันว่าจะสอดคล้องกัน อย่างไรก็ตามคุณอาจสันนิษฐานได้ว่าตัวเลขสุดท้ายในแต่ละคอลัมน์นั้นเรียงกัน (หากมีประโยชน์)
  • สามารถมีได้ทั้งจำนวนเต็มและลอยและพวกเขาสามารถบวกลบหรือศูนย์ เมทริกซ์จะไม่ประกอบด้วยจำนวนเต็มและลอยในเวลาเดียวกัน
  • คุณอาจคิดว่าไม่มีตัวเลขใดยาวเกิน 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 ที่ยุ่งยากนั้นเป็นประเด็นทั้งหมด ความท้าทายจะเกี่ยวกับการจัดรูปแบบเอาต์พุตในบางภาษาในขณะที่การอ่านอินพุตจะเป็นส่วนที่ยากที่สุดในภาษาอื่น

โปรดอย่าท้อแท้หากการอ่านอินพุตเป็นเรื่องยากการส่งเหล่านั้นอาจเป็นสิ่งที่น่าสนใจที่สุด สั้นไม่จำเป็นต้องเหมือนกับที่น่าประทับใจ และเช่นเคยสนับสนุนคำอธิบาย!

คำตอบ:


7

เรติน่า 52 ไบต์

คำตอบนี้ขึ้นอยู่กับคำตอบ Perlของฉันด้วยความช่วยเหลือของMartin Enderสำหรับการเล่นกอล์ฟด้วย Retina

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

ลองออนไลน์!

คำอธิบายสามารถพบได้ในคำตอบ Perl ของฉัน ความแตกต่างคือ:

*
[
$
]

แทนที่จะs/^ *(.+)/[$1]/gmเป็นการลบช่องว่างนำหน้าและเพิ่มวงเล็บไปรอบ ๆ บรรทัด

^.|]$

หากต้องการลบวงเล็บปีกกาด้านหน้าและส่วนท้ายสำหรับเอาต์พุตที่สาม


6

เรติน่า , 57 54 ไบต์

จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

m`^ +

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

ลองออนไลน์!

ขณะนี้ลิงค์ TIO ไม่มีการพิมพ์บรรทัดป้อนข้อมูลระหว่างสามรูปแบบ แต่นั่นเป็นเพราะใช้การคอมมิทที่ไม่เสถียร โปรแกรมทำการพิมพ์ linefeeds ระดับกลางใน Retina 0.8.2

คำอธิบาย

m`^ +

กำจัดช่องว่างนำในแต่ละบรรทัด

¶
] [

แทนที่ linefeeds ] [กับ

 +
, 

แทนที่ช่องว่างทั้งหมดด้วยเครื่องหมายจุลภาคและเว้นวรรค

:`.+
[[$&]]

ล้อมรอบสิ่งทั้งหมดที่[[...]]ทำให้รูปแบบแรกเสร็จสมบูรณ์ พิมพ์ผลลัพธ์

*T`[]`{}

แทนที่วงเล็บด้วยเครื่องหมายปีกกาและพิมพ์ผลลัพธ์โดยไม่ต้องเปลี่ยนสตริงการทำงานจริง (เช่นรูปแบบแรกจะถูกกู้คืนหลังจากพิมพ์แล้ว)

], .
; 

แทนที่], [ด้วยเซมิโคลอนและ linefeed

^.|]$

นำเป็นครั้งแรกและครั้งสุดท้าย[ ]นี่เป็นรูปแบบที่สามที่สมบูรณ์


5

สกาลา, 183 181 149 ไบต์

ลองออนไลน์!

เวอร์ชันใหม่โดยใช้การStringแทนที่และ regexes:

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

รุ่นใหม่ที่มีความหมายเหมือนกันและการใช้งานเป็นรุ่นเก่าที่ใช้split, และmapmkString

รุ่นเก่าที่ใช้split, mapและ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-tuple ของเอาต์พุตที่ต้องการ REPL แสดงผล tuples คั่นด้วยเครื่องหมายจุลภาค, ล้อมรอบด้วยวงเล็บ

คำอธิบาย:

เวอร์ชั่นใหม่:

ส่วนใหญ่เป็นตรรกะเดียวกันกับคำตอบอื่น ๆ ที่ใช้ regex ยกเว้นการค้นหาที่ซับซ้อนเพื่อจัดการช่องว่างนำหน้าบนบรรทัด

เวอร์ชั่นเก่า:

เราแยกแทนการป้อนข้อมูลเมทริกซ์เป็น 2D Stringอาร์เรย์แล้วแผนที่ไปยังอาร์เรย์ 1D ,โดยการยุบอาร์เรย์ภายในโดยการแยกองค์ประกอบด้วย สุดท้ายเราเพิ่งสร้างผลลัพธ์ที่แตกต่างกันโดยการยุบ 1D Array โดยใช้ตัวคั่นบรรทัดใหม่และเครื่องหมายขอบเขต (คำนำหน้าและคำต่อท้าย) ทุกอย่างดำเนินการผ่าน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 อื่น ๆ ทำได้ดีมาก!
Mr. Xcoder

4

Japt , 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 , 71 ไบต์

69 รหัสไบต์ + -p0ธง

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

ลองออนไลน์!

คำอธิบาย

s/^ *(.+)/[$1]/gm;เพิ่ม[]รอบแต่ละบรรทัดในขณะที่ลบช่องว่างนำ
s/\s+/, /g;แทนที่การเว้นวรรคและการขึ้นบรรทัดใหม่ด้วยเครื่องหมายจุลภาคและเว้นวรรค ผลผลิตแรกที่จะได้รับแล้วโดยรอบด้วยเครื่องหมายวงเล็บ:
ความต้องการที่สองที่จะเปลี่ยนการจัดฟันกับปีกกา ( ) และเซอร์ราวด์ด้วยวงเล็บปีกกา สำหรับอันที่สามจะถูกแทนที่ด้วยเครื่องหมายอัฒภาคและช่องว่าง ( )[$_]
y/[]/{}/r"{" ... "}"
], [s/], \[/; /gr


หลังจากเขียนวิธีการแก้ปัญหานี้ฉันพยายาม adpating คำตอบจอประสาทตาของ Martin Ender แต่มันจบลงด้วยความยาว 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

ลองออนไลน์!

ขอบคุณ 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`
))


บันทึก 4 ไบต์โดยการเปลี่ยนไปmap(x=>x.trim().replace(/ +/g,", ")) map(x=>x.match(/\S+/g).join`, `)
Justin Mariner

1

Python 2 , 163 152 150 145 ไบต์

-5 ไบต์ขอบคุณ Felipe Nardi Batista ผู้แนะนำการใช้ splats (ขออภัยฉันแค่ต้องการแก้ตัวเพื่อพูดคำนั้น: 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 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])

ลองออนไลน์!


* บันทึก 6 ไบต์ด้วย @officialaimm (จาก 169 ถึง 163 ไบต์)

* บันทึกแล้ว 4 ไบต์ขอบคุณ @FelipeNardiBatista


คำอธิบายที่จะเกิดขึ้นหลังจากเล่นกอล์ฟต่อไป


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จากนั้นก็จะสลับการขึ้นบรรทัดใหม่ด้วย], [ทำให้[[และที่ปลายทั้งและบันทึกผลจากการที่เป็น]]z

ถัดไปchartrสวิทช์[ที่มี{และ]ที่มีใน}z

ในที่สุดก็จะทำการyแลกเปลี่ยน newlines กับ;และ put [และ]บนทั้งสองด้าน

จากนั้นผลลัพธ์ทั้งหมดจะถูกส่งไปตามลำดับcatที่พิมพ์ออกมาทั้งหมดจัดรูปแบบเป็นอย่างดีและคั่นด้วยช่องว่างเดียว

ungolfed อย่างอ่อนโยน:

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

1

Java 8 ที่มี 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! นี้จะรวบรวมรหัสเรียกใช้และส่งออกการคาดหวังเมทริกซ์


สิ่งนี้ไม่จำเป็นต้องอยู่ในรูปแบบเอาต์พุตทั้งสามหรือไม่
Giuseppe

1
มี! นั่นคือสิ่งที่ฉันพลาด! : D แก้ไขได้แล้วตอนนี้
Olivier Grégoire

2
@StewieGriffin นี้จะ advantaging ภาษาที่ใช้ STDIN โดยค่าเริ่มต้นหรือคนที่ไม่สนใจเกี่ยวกับการขึ้นบรรทัดใหม่ผมยังอาจกล่าวได้ว่า "คัดลอก / วาง" ในหลัก Java IDE รูปแบบใด ๆ โดยอัตโนมัติเปลี่ยนแปลงคัดลอก / วางบรรทัดใหม่ลงในภาพ\nทำให้ผลที่ได้ สิ่งที่คุณเห็น ดังนั้นฉันไม่ได้รับมันค่อนข้างตรงไปตรงมา: s
Olivier Grégoire

@ OlivierGrégoireฉันตระหนักดีว่านี่เป็นข้อได้เปรียบบางภาษาโดยเฉพาะอย่างยิ่งภาษาที่สามารถจัดการรูปแบบได้โดยไม่ต้องดำเนินการใด ๆ เป็นพิเศษ ฉันยังพูดถึงเรื่องนี้อย่างชัดเจนในข้อความท้าทาย จำไว้ว่าคุณไม่ได้แข่งขันกับ Jelly, Javascript หรือ Python คุณกำลังใช้ Java มันมีฟังก์ชั่นที่แตกต่างกันมากและไม่สามารถเทียบกับคนอื่นได้อย่างเป็นธรรม ฉันมักจะปฏิบัติตามกฎระเบียบเกี่ยวกับการหลีกเลี่ยงรูปแบบ I / O ที่ยุ่งยากซึ่งอาจทำให้บางภาษาได้เปรียบโดยไม่เป็นธรรม แต่ในความท้าทายนี้การแยกวิเคราะห์อินพุตเป็นส่วนใหญ่ของมัน
Stewie Griffin

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

Pip , 49 46 ไบต์

รหัส 45 ไบต์ +1 สำหรับการ-rตั้งค่าสถานะ

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
นี่มันช่างน่ากลัว ตอนนี้ฉันต้องโพสต์คำตอบที่สกาล่า
Tamoghna Chowdhury

มี upvote สำหรับความพยายามแม้ว่า
Tamoghna Chowdhury

1
คุณอาจต้องการดูcodegolf.stackexchange.com/a/129356/48620เพื่อดูว่ามี Scala อะไรบ้าง การใช้มันเหมือนจะใช้ pre-1.5 Java เป็นเพียงการเกาที่ส่วนท้ายของภูเขาน้ำแข็ง
Tamoghna Chowdhury

2
นอกจากนี้เอาต์พุตของคุณผิดซึ่งทำให้ฉันต้องการถอนการโหวตของฉัน - ไม่มีเครื่องหมายจุลภาคระหว่างวงเล็บตามที่กำหนดโดยรูปแบบเอาต์พุต
Tamoghna Chowdhury

1
ขอให้เรายังคงอภิปรายนี้ในการแชท
Tamoghna Chowdhury

0

05AB1E , 34 ไบต์

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

ลองออนไลน์!

ε...}ถูกแทนที่ด้วยvy...})บน TIO เนื่องจากยังไม่ได้ถูกดึงไปที่นั่น


@JanathanAllan ขอบคุณได้รับการแก้ไข
Erik the Outgolfer

อากาศเย็นในตอนนี้มันเป็นเพียงแค่ต้องการคำอธิบายของวิธีการทำงาน :)
โจนาธานอัลลัน

1
@JonathanAllan ขออภัยไม่มีเวลา atm ...
Erik the Outgolfer

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

ลองออนไลน์!

รับเมทริกซ์เป็นสตริงส่งคืนสามรูปแบบเป็นสตริงเดี่ยวคั่นด้วยการขึ้นบรรทัดใหม่


ตั้งแต่คำตอบนี้ฉันมั่นใจมากขึ้นว่าการใช้คำสั่งสำหรับไลบรารีอื่นที่ไม่ใช่ระบบฐานควรรวมอยู่ใน bytecount ฉันจะทิ้งไว้ในรูปแบบปัจจุบันในตอนนี้ แต่using System.Text.RegularExpressionsจำเป็นต้องมีคำสั่งเพิ่ม (ตามจำนวนของฉัน) 37 ไบต์เพิ่มเติม
Kamil 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.