Sei un giovane fanatico della programmazione che vive con i tuoi altri 2 migliori amici. Ogni settimana, uno di voi deve fare tutte le faccende di casa e decidere chi è il turno selezionando un bastone. Chi sceglie il bastone più corto perde e fa tutte le faccende.
Dato che tutti voi siete programmatori e amate creare enigmi, avete modificato il "Scegli lo stick più corto" in un puzzle per computer.
Ecco le regole del puzzle.
- Ti verrà data una matrice 2D, in cui ogni colonna rappresenta un bastone.
- In ogni colonna, 1 rappresenta una porzione dello stick e 0 è uno spazio vuoto
- Quando si va dall'alto verso il basso in ogni colonna, inizialmente ce ne sono
0
e non appena si preme a1
, il bastone si è avviato e il resto della colonna sarà riempito1
solo con - Puoi scrivere il tuo programma per scegliere una colonna. La dimensione del bastone in quella colonna determina il vincitore / perdente. Dimensione dello stick == numero di 1 in quella colonna.
- Tuttavia, quel programma può avere solo una complessità temporale peggiore lineare.
Dato che tutti voi siete programmatori, saprete se il programma di qualcun altro sta rispettando il limite di complessità temporale.
Il tuo compito è:
- Scrivi un programma o una funzione che accetta input in formato 2D o array di stringhe.
- L'input può essere preso da STDIN / prompt / console o da un argomento di funzione.
- Se stai leggendo l'input da STDIN / prompt, puoi presumere che la lettura dell'input e la sua conversione in un array richiedano 0 tempo (anche se il codice per farlo deve essere presente nella tua risposta)
- Determina la colonna con il bastone più lungo al suo interno.
- L'output può essere il valore di ritorno della funzione o su STDOUT / console / avviso.
- Il programma / funzione deve avere una complessità temporale nel caso peggiore,
O(m+n)
dove sim
trova il numero di righe en
il numero di colonne.
L'input può essere uno dei seguenti formati:
Matrice 2D:
[ [0, 0, 0, 0],
[1, 0, 0, 0],
[1, 1, 0, 1],
[1, 1, 1, 1] ]
Matrice di stringhe:
[ "0000", "1000", "1101", "1111" ]
L'input avrà le seguenti proprietà:
- Le dimensioni dell'array sono sconosciute, si assume un rettangolo di qualsiasi dimensione
- In qualsiasi colonna, scendendo dall'alto in basso, se vedi un 1, allora tutto sotto sarà uno
- Sono consentite le colonne vuote (ovvero lunghezze 0) .
Questo è un codice-golf, quindi vince il codice più corto ! *
Spiega il tuo codice o fornisci la versione non controllata (per verificare la complessità temporale) insieme a quale dei due formati di input ti aspetti.
AGGIORNAMENTO Qui la complessità del tempo lineare significa O (n + m) dove n è la dimensione della colonna e m la dimensione della riga. (Per coloro che non erano chiari)
AGGIORNAMENTO 2 Questo sicuramente può essere fatto in tempo lineare. E se stai postando una risposta, non esitare a posticipare la logica / l'algoritmo di un paio di giorni per una lotta leale :)
AGGIORNAMENTO 3 Esaminerò tutte le risposte tra un paio d'ore per convalidare la complessità temporale e il programma :)
1
nell'input è l'ultima cella quindi è necessario leggere l'intero input. Anche se la libreria standard di una lingua falsa l'accesso casuale allo stdin, sotto le scene lo sta tamponando e quindi il tempo impiegato è Omega (n * m).