Simplifique a entrada da matriz!


20

Eu escrevi alguns desafios relacionados a matrizes, e comum para todos é que eu uso um formato como o abaixo para representar as matrizes, tanto em exemplos quanto em casos de teste:

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

Este é provavelmente um formato complicado em muitos idiomas.


Desafio:

Escreva um programa / função que possa assumir uma matriz no formulário fornecido na parte superior como entrada (copie / cole diretamente desta postagem) e imprima a mesma matriz em todos os outros três formatos convencionais mostrados abaixo .

O formato de entrada:

Números separados por um número variável de espaços e novas linhas para representar linhas (consulte casos de teste).

  • Não é garantido que o número de espaços entre os números seja consistente. No entanto, você pode supor que o último dígito em cada coluna esteja alinhado (se isso ajudar algum).
  • Pode haver números inteiros e flutuantes, e eles podem ser positivos, negativos ou zero. Uma matriz não conterá números inteiros e flutuantes ao mesmo tempo.
  • Você pode supor que nenhum número tenha mais de 10 caracteres, incluindo o ponto negativo e decimal para flutuações negativas.
  • Você pode assumir que há o mesmo número de entradas em cada linha e em cada coluna.
  • Não haverá matrizes de entrada vazias, mas pode haver números únicos ou matrizes com apenas uma linha ou coluna.
    • Nesses casos, você pode escolher entre os formatos de saída mostrados nos casos de teste

Seu programa / função deve manipular a entrada se ela for copiada diretamente desta postagem e colada no intérprete (STDIN ou como argumento de função ou algo equivalente). Você pode ter o que quiser (colchetes, aspas, parênteses) na frente e / ou após a matriz, mas deve considerar a matriz como uma sequência de caracteres que não podem ser alterados (que inclui as novas linhas).

Para esclarecer: Suponha que sua função / programa seja chamado fe a matriz seja:

1 -2
3  5
6  7

então você pode fornecer à matriz argumentos de função como este (e infinitamente muitas outras opções):

f(1 -2
3  5
6  7)

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

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

Se seu idioma não puder, de forma alguma, tomar a matriz de copiar / colar como entrada, receio que você precise escolher outro idioma.


O formato de saída:

Você deve produzir a matriz nos três formatos a seguir (ordem não importa):

[[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]
  • Você pode separar as três saídas da maneira que desejar (por exemplo, uma nova linha)
  • Você deve imprimir os números usando a mesma precisão que a entrada (por exemplo, você não deve aparar o número de casas decimais, nem imprimir números inteiros como valores flutuantes).
  • Os espaços são obrigatórios
  • Você deve usar -para números negativos, não _ou similares.

Casos de teste:

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]

Estou plenamente ciente disso , mas neste desafio, o formato de E / S complicado é o ponto principal. O desafio será a formatação da saída em alguns idiomas, enquanto a leitura da entrada será a parte mais difícil em outros idiomas.

Por favor, não desanime se a leitura da entrada for difícil, pois essas submissões podem ser as mais interessantes. Curto não é necessariamente o mesmo que impressionante. E como sempre, explicações são incentivadas!

Respostas:


7

Retina , 52 bytes

Esta resposta é baseada na minha resposta Perl , com a ajuda de Martin Ender para jogar golfe com Retina.

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

Experimente online!

As explicações podem ser encontradas na minha resposta Perl. As diferenças são:

*
[
$
]

Em vez de s/^ *(.+)/[$1]/gmremover os espaços à esquerda e adicionar colchetes nas linhas.

^.|]$

Para remover os colchetes à esquerda e à direita da terceira saída.


6

Retina , 57 54 bytes

A contagem de bytes assume a codificação ISO 8859-1.

m`^ +

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

Experimente online!

Atualmente, o link TIO não imprime feeds de linha entre os três formatos, mas é porque ele usa uma confirmação instável. O programa imprime as alimentações de linha intermediárias no Retina 0.8.2.

Explicação

m`^ +

Livre-se dos espaços à esquerda em cada linha.

¶
] [

Substitua as alimentações de linha por ] [.

 +
, 

Substitua todas as execuções de espaços por vírgula e espaço.

:`.+
[[$&]]

Embrulhe a coisa inteira na [[...]]qual termina o primeiro formato. Imprima o resultado.

*T`[]`{}

Substitua colchetes por colchetes e imprima o resultado sem alterar a sequência de trabalho (ou seja, o primeiro formato é restaurado após a impressão).

], .
; 

Substitua ], [por um ponto-e-vírgula e um avanço de linha.

^.|]$

Remova o primeiro [e o último ]. Isso completa o terceiro formato.


5

Scala, 183 181 149 bytes

Experimente online!

Nova versão, usando Stringsubstituições e expressões regulares:

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

A nova versão possui a mesma semântica e uso que a versão antiga usando split, mape mkString.

Versão antiga, usando split, mape mkString:

Editar: classe de caractere redundante para o espaço removido

(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. Executar no REPL. Aceita entrada como Stringparâmetro entre aspas triplas , retorna a saída como uma tupla de três das saídas necessárias. O REPL renderiza tuplas separadas por vírgulas, delimitadas por parênteses.

Explicação:

Nova versão:

Principalmente a mesma lógica que as outras respostas baseadas em regex, exceto pela aparência complicada de lidar com espaços à esquerda nas linhas.

Versão antiga:

Dividimos a representação da matriz de entrada em uma Stringmatriz 2D e depois a mapeamos para uma matriz 1D, recolhendo as matrizes internas, separando os elementos com ,. Finalmente, criamos as diferentes saídas recolhendo as matrizes 1D usando os separadores de nova linha e os marcadores de limite necessários (prefixos e sufixos). Tudo é implementado via split(leitura), map(transformação) e mkString(colapso).

Exemplo de sessão 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])

Nos casos de arestas com poucos elementos, isso fornece a saída desejada.


2
Muito melhor do que a outra resposta Scala, muito bem!
Mr. Xcoder

4

Japonês , 63 53 bytes

Isso estava chegando a 44 bytes antes de eu perceber que o espaçamento na saída era obrigatório.

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

Teste-o


Explicação

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

Bem feito. O melhor que eu podia fazer era algo em torno de 60 bytes ...
ETHproductions

3

Perl 5 , 71 bytes

69 bytes de código + -p0sinalizadores.

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

Experimente online!

Explicações

s/^ *(.+)/[$1]/gm;adiciona em []torno de cada linha enquanto remove os espaços iniciais.
s/\s+/, /g;substitui execuções de espaços e novas linhas por vírgula e espaço.
A primeira saída é, então, obtido por circundante com cintas: [$_].
O segundo precisa substituir chaves por colchetes ( y/[]/{}/r) e cercar por colchetes "{" ... "}".
Para o terceiro, ], [são substituídos por um ponto e vírgula e um espaço ( s/], \[/; /gr).


Depois de escrever esta solução, tentei adaptar a resposta Retina de Martin Ender, mas ela acabou 10 bytes mais ( TryItOnline ):

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

Para esta versão, consulte a resposta de Martin para as explicações.


3

MATL , 60 bytes

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

Experimente online!

Muito obrigado a Luis Mendo por cortar um quarto do meu número de pessoal em uma aula master no chat.

Cole a entrada, seguida por uma linha vazia.

% 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 bytes

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

Experimente online!

Primeira saída

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

Segunda saída

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

Terceira saída

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


2

Javascript (ES6), 121 110 106 bytes

-15 bytes graças a @Shaggy e @Justin

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

Exemplo de trecho de código:

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


Salve 4 bytes alterando map(x=>x.trim().replace(/ +/g,", "))para map(x=>x.match(/\S+/g).join`, `).
Justin Mariner

1

Python 2 , 163 152 150 145 145 bytes

-5 bytes graças a Felipe Nardi Batista, que sugeriu o uso de splats (desculpe, só preciso de uma desculpa para dizer essa palavra: 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],'], [','; ')

Experimente online!


Ah, splats ... Obrigado!
totallyhuman

1

Python 3 , 184 178 174 173 169 163 * 157 * 153 bytes

Formato de Entrada / Saída: Saída com um espaço entre as matrizes e entrada com esta chamada de função (como mostrado no TIO):

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

Esta é a função:

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

Experimente online!


* Economizei 6 bytes graças a @officialaimm (de 169 a 163 bytes).

* Economizou 4 bytes graças a @FelipeNardiBatista.


Explicação a seguir após mais golfe.


1

C, 415 bytes

#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);}

É um monstro e waaayyyy por muito tempo, mas eu terminei com isso. Provavelmente deveria ter adotado uma abordagem diferente.

Experimente online!

Segundo caso de teste | Terceiro caso de teste | Quarto caso de teste | Quinto caso de teste | Sexto caso de teste | Sétimo caso de teste


1

Geléia , 37 bytes

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

Um programa completo imprimindo os três formatos em três linhas.

Experimente online!

Quão?

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 bytes

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

Experimente online!

Explicação

ò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 bytes

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

Experimente online!

uma função anônima. Toma entrada como

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

Ele os imprime na mesma ordem que os casos de teste, mas com espaços como separador.

Explicação:

Primeiro ele troca espaços ,e salva o resultado como y. Em seguida, alterna novas linhas com ], [, põe [[e ]]em ambos os lados e salva o resultado disso como z.

Em seguida, chartrmuda [com {e ]com }no z.

Finalmente, leva y, troca de novas linhas com, ;coloca [e ]em cada extremidade.

Todos os resultados são transmitidos na ordem em catque são impressos, todos bem formatados e separados por um único espaço.

Ligeiramente não-destruído:

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

1

Java 8 com Netbeans 8+, 209 bytes

A contagem é 208 do código, mais 1 bytes para executá-lo pressionando F6.

Resposta complicada para um desafio complicado: 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("; ","}, {")+"}}");}}

Como usar?

Dentro Netbeans, cole este código em um arquivo chamado M.java. Em seguida, copie a matriz que você deseja usar. Entre os dois caracteres consecutivos "", pressione ctrl+ vconforme exigido pelo desafio.

Agora pressione F6! Isso irá compilar o código, executá-lo e gerar as representações esperadas da matriz.


Isso não precisa estar nos três formatos de saída?
11557 Giuseppe #:

1
Lá! Foi disso que eu perdi! : D Corrigindo isso agora.
Olivier Grégoire

2
@StewieGriffin Esta é uma linguagem vantajosa que usa STDIN por padrão ou que não se importa com novas linhas, também posso dizer que "copiar / colar" em qualquer formato principal de Java IDE altera automaticamente as linhas de cópia / coladas em visual \n, produzindo o resultado o que você viu. Então eu não entendo direito, para ser sincero: s #
Olivier Grégoire

@ OlivierGrégoire Estou perfeitamente ciente de que isso está beneficiando alguns idiomas, especialmente aqueles que podem lidar com o formato sem nenhum processamento especial. Menciono isso explicitamente no texto do desafio. Lembre-se de que você não está competindo com Jelly, Javascript ou Python, você está usando Java. Tem uma funcionalidade muito diferente e não pode ser comparada de maneira justa com as outras. Eu sempre sigo as regras para evitar formatos de E / S complicados que podem dar a alguns idiomas uma vantagem injusta, mas nesse desafio em particular, analisar a entrada é uma grande parte dela.
Stewie Griffin

1

Mathematica, 129 bytes

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

A terceira e quarta linhas juntas definem uma função pura, recebendo uma string como entrada; por exemplo, se definirmos f=Print...&, o último caso de teste será chamado como:

f@"4
5"

O trecho

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

analisa a string de entrada como uma matriz (de strings - nunca tentamos interpretar as entradas como quantidades numéricas) e converte a expressão resultante novamente em uma string; isso gera automaticamente o formato de saída com chaves. Em seguida, Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]imprime esse formato de saída e os outros dois, separados por novas linhas, usando regras simples de substituição de string.


1

Pip , 49 46 bytes

45 bytes de código, +1 para -rsinalizador.

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

Recebe entrada de stdin. Experimente online!

Explicação

                 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

(Esse formato de explicação parece um pouco complicado para mim, então, deixe-me saber se alguma coisa não fazia sentido.)


1

SCALA, 590 bytes

Foi difícil, mas acho que terminei

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

Explicação rápida: tomo as entradas entre aspas triplas e depois removo os espaços não necessários; divida a string duas vezes (uma vez para linhas e outra para colunas); e imprimo com minhas três rotinas. Pode ser possível definir uma função para mutualizar, mas não sei como.

Experimente online!


2
Isto é horrível. Agora tenho que postar uma resposta do Scala.
Tamoghna Chowdhury 01/07/19

Tenha um voto positivo por esforço, no entanto.
Tamoghna Chowdhury

1
Você pode dar uma olhada no codegolf.stackexchange.com/a/129356/48620 para ver o que é possível com o Scala. Usá-lo como um Java pré-1.5 usaria apenas arranhões na ponta do iceberg.
Tamoghna Chowdhury

2
Além disso, sua saída está errada, o que me faz querer retirar meu voto positivo - não há vírgulas entre os colchetes, conforme determinado pelo formato de saída.
Tamoghna Chowdhury



0

C # (.NET Core) , 214 bytes

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

Experimente online!

Pega Matrix como uma sequência, retorna os três formatos como uma sequência separada por novas linhas.


Desde esta resposta, fiquei mais certo de que a instrução using para bibliotecas que não sejam o sistema base deve ser incluída no bytecount. Vou deixá-lo em sua forma atual por enquanto, mas a instrução using System.Text.RegularExpressionsé necessária adicionando (pela minha contagem) 37 bytes adicionais.
Kamil Drakari 17/07

0

Carvão , 38 bytes

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

Experimente online! Nota: Espaço à direita. Link é a versão detalhada do código. O carvão vegetal tem uma opção de entrada multilinha delimitada usando[""" e """]. Explicação:

   θ                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

Isso pega a entrada e a prepara dividindo-a em linhas e normalizando os separadores.

 ⪪[]{}²             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

Isso lida com [[ ... ], [ ... ]]e{{ ... }, { ... }} casos .

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

Isso lida com o [ ... ; ... ]caso.

Antes de tirar um byte da solução acima, eu costumava ter duas soluções de 39 bytes; este é o outro:

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

Experimente online! Nota: Espaço à direita. Link é a versão detalhada do código. Explicação:

  ⪪[]{}[]²                              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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.