Semplifica l'input della matrice!


20

Ho scritto alcune sfide relative alle matrici e comune a tutti è che uso un formato come quello sotto per rappresentare le matrici, sia negli esempi che nei casi di test:

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

Questo è probabilmente un formato ingombrante in molte lingue.


Sfida:

Scrivi un programma / funzione che può assumere una matrice sul modulo indicato in alto come input (direttamente copiato / incollato da questo post) e genera la stessa matrice su tutti gli altri tre formati convenzionali mostrati di seguito .

Il formato di input:

Numeri separati da un numero variabile di spazi e newline per rappresentare le righe (vedere casi di test).

  • Non è garantito che il numero di spazi tra i numeri sia coerente. Si può tuttavia presumere che l'ultima cifra in ciascuna colonna sia allineata (se ciò aiuta qualsiasi).
  • Possono esserci sia numeri interi che float e possono essere positivi, negativi o zero. Una matrice non conterrà numeri interi e float contemporaneamente.
  • Si può presumere che nessun numero sia più lungo di 10 caratteri, inclusi il segno meno e il punto decimale per i float negativi.
  • Si può presumere che ci sia lo stesso numero di voci in ciascuna riga e in ciascuna colonna.
  • Non ci saranno matrici di input vuote, ma possono esserci numeri singoli o matrici con una sola riga o colonna.
    • In questi casi è possibile scegliere tra i formati di output mostrati nei casi di test

Il tuo programma / funzione deve gestire l'input se è direttamente copiato da questo post e incollato nell'interprete (STDIN o come argomento di funzione o qualcosa di equivalente). Potresti avere quello che ti piace (parentesi, virgolette, parentesi) davanti e / o dopo la matrice, ma devi considerare la matrice una sequenza di caratteri che non può essere modificata (che include le nuove righe).

Per chiarire: supponiamo che la vostra funzione / programma sia chiamata fe la matrice sia:

1 -2
3  5
6  7

allora puoi dare alla matrice come argomenti di funzione come questa (e infinitamente molte altre opzioni):

f(1 -2
3  5
6  7)

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

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

Se la tua lingua non può, in alcun modo, prendere la matrice copia / incollata come input, temo che tu debba scegliere un'altra lingua.


Il formato di output:

Dovresti generare la matrice nei seguenti tre formati (l'ordine non ha importanza):

[[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]
  • È possibile separare le tre uscite nel modo desiderato (ad es. Una nuova riga)
  • È necessario generare i numeri utilizzando la stessa precisione dell'input (ad esempio, non è necessario tagliare il numero di decimali, né numeri interi di output come float).
  • Gli spazi sono obbligatori
  • È necessario utilizzare -per numeri negativi, non _o simili.

Casi test:

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]

Sono pienamente consapevole di questo , ma in questa sfida, il formato ingombrante I / O è il punto. La sfida consisterà nel formattare l'output in alcune lingue, mentre la lettura dell'input sarà la parte più difficile in altre lingue.

Si prega di non scoraggiarsi se la lettura dell'input è difficile, tali invii potrebbero essere i più interessanti. Corto non è necessariamente uguale a impressionante. E come sempre, le spiegazioni sono incoraggiate!

Risposte:


7

Retina , 52 byte

Questa risposta si basa sul mio risposta Perl , con l'aiuto di Martin Ender per il golf con Retina.

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

Provalo online!

Le spiegazioni possono essere trovate sulla mia risposta Perl. Le differenze sono:

*
[
$
]

Invece di s/^ *(.+)/[$1]/gmrimuovere entrambi gli spazi iniziali e aggiungere parentesi attorno alle linee.

^.|]$

Per rimuovere le parentesi iniziali e finali per il terzo output.


6

Retina , 57 54 byte

Il conteggio dei byte presuppone la codifica ISO 8859-1.

m`^ +

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

Provalo online!

Il collegamento TIO attualmente non stampa avanzamenti di riga tra i tre formati, ma è perché utilizza un commit instabile. Il programma stampa gli avanzamenti di riga intermedi in Retina 0.8.2.

Spiegazione

m`^ +

Sbarazzati degli spazi iniziali su ogni linea.

¶
] [

Sostituire gli avanzamenti di riga con ] [.

 +
, 

Sostituisci tutte le corse di spazi con una virgola e uno spazio.

:`.+
[[$&]]

Avvolgi l'intera cosa in [[...]]cui completa il primo formato. Stampa il risultato.

*T`[]`{}

Sostituisci le parentesi graffe con le parentesi graffe e stampa il risultato senza modificare effettivamente la stringa di lavoro (ovvero il primo formato viene ripristinato dopo la stampa).

], .
; 

Sostituisci ], [con un punto e virgola e un avanzamento riga.

^.|]$

Rimuovi il primo [e l'ultimo ]. Questo completa il terzo formato.


5

Scala, 183 181 149 byte

Provalo online!

Nuova versione, usando Stringsostituzioni e regex:

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

La nuova versione ha la stessa semantica e lo stesso utilizzo della versione precedente che utilizza split, mape mkString.

Vecchia versione, utilizzando split, mapemkString :

Modifica: classe di caratteri ridondante per lo spazio rimosso

(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. Eseguire in REPL. Accetta input tra virgoletteString parametro a , restituisce output come 3-tupla degli output richiesti. Il REPL rende le tuple separate da virgole, delimitate da parentesi.

Spiegazione:

Nuova versione:

Principalmente la stessa logica delle altre risposte basate su regex, fatta eccezione per il lookbehind complicato per gestire gli spazi iniziali sulle linee.

Vecchia versione:

Dividiamo la rappresentazione della matrice di input in una Stringmatrice 2D , quindi la mappiamo su una matrice 1D comprimendo le matrici interne separando gli elementi con ,. Infine, creiamo solo i diversi output comprimendo gli array 1D utilizzando i separatori di nuova riga e i marker di confine richiesti (prefissi e suffissi). È tutto implementato tramite split(lettura), map(trasformazione) e mkString(collasso).

Esempio di sessione 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])

Per i casi limite di pochi elementi, ciò fornisce l'output desiderato.


2
Molto meglio dell'altra risposta alla Scala, ben fatto!
Mr. Xcoder,

4

Japt , 63 53 byte

Questo stava arrivando a 44 byte prima che notassi che la spaziatura nell'output era obbligatoria.

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

Provalo


Spiegazione

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

Molto bene. Il meglio che ho potuto fare è stato da qualche parte circa 60 byte ...
ETHproductions

3

Perl 5 , 71 byte

69 byte di codice + -p0flag.

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

Provalo online!

spiegazioni

s/^ *(.+)/[$1]/gm;aggiunge []attorno ad ogni riga rimuovendo gli spazi iniziali.
s/\s+/, /g;sostituisce le serie di spazi e newline con una virgola e uno spazio.
La prima uscita è quindi ottenuto circostante con bretelle: [$_].
Il secondo deve sostituire le parentesi graffe con parentesi graffa ( y/[]/{}/r) e circondare con parentesi graffe "{" ... "}".
Per il terzo, ], [vengono sostituiti con un punto e virgola e uno spazio ( s/], \[/; /gr).


Dopo aver scritto questa soluzione, ho provato ad adattare la risposta Retina di Martin Ender, ma ha finito per 10 byte in più ( TryItOnline ):

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

Per questa versione, vedere la risposta di Martin per le spiegazioni.


3

MATL , 60 byte

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

Provalo online!

Grazie mille a Luis Mendo per essermi rasato un quarto del mio conto in una masterclass in chat.

Incollare l'input, seguito da una riga vuota.

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

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

Provalo online!

Prima uscita

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

Seconda uscita

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

Terza uscita

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

2

Python 2 , 143 byte

import re
b=re.sub
def f(s):s='[['+b('\n','], [',b(' +',', ',b('\n +','\n',s)))+']]';print s,b('\[','{',b('\]','}',s)),b('\], \[','; ',s)[1:-1]

Provalo online!


2

Javascript (ES6), 121 110 106 106 byte

-15 byte grazie a @Shaggy e @Justin

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

Esempio di frammento di codice:

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


Salva 4 byte cambiando map(x=>x.trim().replace(/ +/g,", "))in map(x=>x.match(/\S+/g).join`, `).
Justin Mariner,

1

Python 2 , 163 152 150 145 byte

-5 byte grazie a Felipe Nardi Batista che mi ha suggerito l'uso di simboli (mi dispiace, ho solo bisogno di una scusa per dire quella parola: 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],'], [','; ')

Provalo online!


Ah, simboli ... Grazie!
totalmente umano il

1

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

Formato di input / output: output con uno spazio tra le matrici e input con questa chiamata di funzione (come mostrato su TIO):

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

Questa è la funzione:

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

Provalo online!


* Salvato 6 byte grazie a @officialaimm (da 169 a 163 byte).

* Salvato 4 byte grazie a @FelipeNardiBatista.


Spiegazione a venire dopo ulteriore golf.


1

C, 415 byte

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

È un mostro e waaayyyy troppo a lungo, ma ho finito. Avrebbe dovuto scegliere un approccio diverso.

Provalo online!

Secondo caso di prova | Terzo caso di prova | Quarto caso di prova | Quinto caso di prova | Sesto banco di prova | Settimo caso di test


1

Gelatina , 37 byte

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

Un programma completo che stampa i tre formati su tre righe.

Provalo online!

Come?

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 byte

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

Provalo online!

Spiegazione

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

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

Provalo online!

una funzione anonima. Accetta input come

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

Li stampa nello stesso ordine dei casi di test, ma con spazi come separatore.

Spiegazione:

Prima scambia gli spazi con ,e salva il risultato come y. Quindi scambia le nuove righe con ], [, mette [[e ]]su entrambe le estremità e salva il risultato comez .

Quindi, chartrpassa [a {e ]con }inz .

Infine, prende y, scambia nuove righe con ;e mette [e ]su entrambe le estremità.

Quindi tutti i risultati vengono passati nell'ordine in catcui vengono stampati, tutti ben formattati e separati da un singolo spazio.

Leggermente ungolfed:

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

1

Java 8 con Netbeans 8+, 209 byte

Il conteggio è 208 dal codice, più 1 byte per eseguirlo premendo F6 .

Risposta ingombrante per sfida ingombrante: 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("; ","}, {")+"}}");}}

Come usare?

All'interno di Netbeans, incolla questo codice in un file chiamato M.java. Quindi copia la matrice che desideri utilizzare. Quindi tra i due caratteri consecutivi "", premi ctrl+v come richiesto dalla sfida.

Ora premi F6! Questo compilerà il codice, lo eseguirà e produrrà le rappresentazioni di matrice previste.


Questo non deve essere in tutti e tre i formati di output?
Giuseppe,

1
Là! Questo è quello che mi sono perso! : D Risolvilo ora.
Olivier Grégoire,

2
@StewieGriffin Si tratta di linguaggi avvincenti che utilizzano STDIN per impostazione predefinita o di quelli a cui non importa delle newline, potrei anche dire che "copia / incolla" in tutti i principali formati IDE Java modifica automaticamente la copia / le nuove righe incollate in visual \n, rendendo il risultato cosa hai visto. Quindi non capisco bene, per essere sinceri: s
Olivier Grégoire

@ OlivierGrégoire Sono pienamente consapevole che questo avvantaggia alcune lingue, specialmente quelle che possono gestire il formato senza alcuna elaborazione speciale. Ne parlo anche esplicitamente nel testo della sfida. Ricorda che non stai competendo con Jelly, Javascript o Python, stai usando Java. Ha funzionalità molto diverse e non può essere paragonato abbastanza agli altri. Seguo sempre le regole per evitare ingombranti formati I / O che potrebbero dare ad alcune lingue un vantaggio ingiusto, ma in questa particolare sfida, l'analisi dell'input è una grande parte di esso.
Stewie Griffin,

1

Mathematica, 129 byte

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

La terza e la quarta riga definiscono insieme una funzione pura che accetta una stringa come input; ad esempio, se impostiamo f=Print...&, l'ultimo caso di test verrebbe chiamato come:

f@"4
5"

Lo snippet

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

analizza la stringa di input come una matrice (di stringhe: non proviamo mai a interpretare le voci come quantità numeriche) e converte l'espressione risultante in una stringa; questo genera automaticamente il formato di output con parentesi graffe. Quindi Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]stampa quel formato di output e gli altri due, separati da nuove righe, usando semplici regole di sostituzione delle stringhe.


1

seme , 49 46 byte

45 byte di codice, +1 per -r bandiera.

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

Riceve input dallo stdin. Provalo online!

Spiegazione

                 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

(Questo formato di spiegazione mi sembra un po 'contorto per me, quindi fatemi sapere se qualcosa non ha senso.)


1

SCALA, 590 byte

È stato difficile, ma penso di aver finito

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

Spiegazione rapida: prendo input racchiuso tra virgolette triple, quindi tolgo spazi non necessari; dividere la stringa due volte (una per le righe e una per le colonne); e stampo con le mie tre routine. Potrebbe essere possibile definire una funzione da mutualizzare, ma non so come.

Provalo online!


2
Questo è orribile. Ora devo pubblicare una risposta alla Scala.
Tamoghna Chowdhury,

Avere un voto per lo sforzo, però.
Tamoghna Chowdhury,

1
Potresti dare un'occhiata a codegolf.stackexchange.com/a/129356/48620 per vedere cosa potrebbe essere possibile con Scala. Usarlo come uno userebbe pre-1.5 Java sta solo graffiando la punta dell'iceberg.
Tamoghna Chowdhury,

2
Inoltre, l'output è errato, il che mi fa venire voglia di ritirare il mio voto - non ci sono virgole tra le parentesi, come dettato dal formato di output.
Tamoghna Chowdhury,



0

C # (.NET Core) , 214 byte

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

Provalo online!

Prende Matrix come stringa, restituisce i tre formati come singola stringa separata da newline.


Da questa risposta, sono diventato più certo che l'istruzione using per le librerie diverse dal sistema di base debba essere inclusa nel bytecount. Per ora lo lascerò nella sua forma attuale, ma using System.Text.RegularExpressionsè necessario che l'istruzione aggiunga (con il mio conteggio) 37 byte aggiuntivi.
Kamil Drakari,

0

Carbone , 38 byte

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

Provalo online! Nota: spazio finale. Il collegamento è alla versione dettagliata del codice. Il carbone ha un'opzione di input multilinea delimitata usando ["""e """]. Spiegazione:

   θ                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

Questo prende l'input e lo prepara suddividendolo in linee e normalizzando i separatori.

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

Questo gestisce i casi [[ ... ], [ ... ]]e {{ ... }, { ... }}.

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

Questo gestisce il [ ... ; ... ]caso.

Prima di giocare a golf a un byte dalla soluzione precedente, avevo due soluzioni a 39 byte; questo è l'altro:

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

Provalo online! Nota: spazio finale. Il collegamento è alla versione dettagliata del codice. Spiegazione:

  ⪪[]{}[]²                              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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.