Leggi le tabelle


11

Compito

Leggi il contenuto di una tabella dato un insieme di coordinate.

Formattazione della tabella

Le tabelle saranno in questo formato di base:

      |[name]|[name]|
---------------------
[name]| [val]|[val] |
[name]| [val]|[val] |

I nomi delle colonne sono sempre univoci all'interno delle colonne . I nomi delle righe sono anche univoci all'interno delle righe . Ciò include nomi uguali tranne gli spazi bianchi. Valori, nomi di col e nomi di righe non avranno mai |-al loro interno. Nomi e valori non avranno mai spazi al loro interno, ma potrebbero avere spazi iniziali o finali. La larghezza del passo è regolabile in base all'intestazione / al contenuto. La larghezza della colonna è sempre coerente dall'alto verso il basso.

Ingresso

Una tabella e un elenco separato da spazi di [name]s.

Esempio

[table]
row col

Se stai scrivendo una funzione, queste possono essere stringhe separate, altrimenti row colsarà sempre l'ultima riga nell'input. row colha una certa flessibilità per il formato e può essere rappresentato in molti modi. (ad es (row, col). r, c, ...). L'unico requisito difficile è che sia una riga e che debba apparire nell'ordine col row.

Produzione

Il contenuto di una cella specificato dall'input senza spazio iniziale o finale dalla cella .

Esempi

In:
   |a|z |_*|
------------
atb|1|85|22|
b  |5|6 |e$|
/+*|8|we|th|
atb a

Out:
1


In:
  | x| b |
----------
ab|l |mmm|
b |le| l |
b b

Out:
l

In:
   |a|z |_*|  ab  |
-------------------
atb|1|85|22| 5    |
b  |5|6 |e$|  8   |
/+-|8|we|th| 126  |
atb ab

Out:
5

La cella richiesta nell'input esiste sempre nella tabella?
ETHproductions

Oh, ora capisco;) Sì, lo farà
J Atkin,

Sembra che l'input verrà dato come una singola stringa sebbene non sia stato reso esplicito. Quanta flessibilità c'è nel formato di input? Il passaggio di una matrice di valori a una funzione è accettabile? (Immagino di no, deve essere una stringa) La riga / col può essere fornita come argomento separato alla tabella? (Probabilmente suppongo.) Per favore, chiarisci.
Level River St

Questo aiuta?
J Atkin,

Le colonne non vanno su / giù e le righe vanno a sinistra / a destra? Credo che le coordinate nei tuoi esempi siano invertite.
KoreanwOcchiali

Risposte:


2

Retina, 90 byte

s`^(?=.*\n(.*) (.*))((?<a>\|)|.)*\|\s*\2\s*\|.*\n\1\s*((?<-a>\|)|[^|])*\|\s*([^\s|]*).*
$5

Il mio primo regex di gruppo di bilanciamento . Dovrebbe essere ancora ben golfabile. Proverò a farlo più tardi.

L'idea principale è contare le pipe fino al nome della colonna e quindi utilizzare la stessa quantità di pipe nella riga iniziando con il nome della riga desiderata. Successivamente acquisiamo il valore successivo che è il risultato.

Provalo online qui.


5

JavaScript (ES6), 108

t=>(S=s=>s.split(/ *\| */),t=t.split`
`,[y,x]=t.pop().split` `,S(t.find(r=>S(r)[0]==y))[S(t[0]).indexOf(x)])

TEST in Firefox

f=t=>(
 S=s=>s.split(/ *\| */),
 t=t.split`\n`,
 [y,x]=t.pop().split` `,
 S(t.find(r=>S(r)[0]==y))[S(t[0]).indexOf(x)]
)

function test(){
  r=f(T.value);
  O.textContent=r
}
test()
#T { width: 50%; height: 9em}
Input<br><textarea id=T>   |a|z |_*|  ab  |
-------------------
atb|1|85|22| 5    |
b  |5|6 |e$|  8   |
/+-|8|we|th| 126  |
atb ab</textarea><br>
<button onclick="test()">Find</button>
<span id=O></span>


Bello, BTW Perché solo in Firefox? (FWIW utilizzo firefox)
J Atkin,

L'ultima volta che ho controllato, Chrome non aveva ancora implementato il compito di Destructuring - Confermato, questo dava errore in Chrome "Lato sinistro non valido nel compito"
edc65,

@JAtkin A proposito, perché non un voto?
edc65,

Ho letto da cima a fondo, ho lasciato un commento, ho dovuto fare qualcos'altro e ho dimenticato;)
J Atkin,

4

Haskell, 117 116 111 byte

import Data.Lists
s=splitOn"|".filter(>' ')
(t#b)a|l<-lines t=[c|r<-l,(d,c)<-zip(s$l!!0)$s r,d==a,s r!!0==b]!!0

Esempio di utilizzo:

*Main> ("  | x| b |\n----------\nab|l |mmm|\nb |le| l |\nb b" # "b") "b"
"l"

Come funziona:

s=splitOn"|".filter(>' ')         -- helper function to remove spaces and split a
                                  -- line at bars into words
l<-lines t                        -- split table at \n into lines and bind to l
[c|r<-l,                      ]   -- take c for every line r in l, where
       (d,c)<-zip(s$l!!0)$s r     -- a pair (d,c) is made by zipping the (split)
                                  -- header of the table with the (split) line r 
        ,d==a                     -- and d (=header element) equals parameter a
        ,s r!!0==b                -- and the first word in r equals parameter b
                             !!0  -- pick the first (and only) element
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.