Trova il numero N più grande in una griglia di cifre W per H.


25

Scrivi un programma o una funzione che accetta un numero intero positivo N e una griglia di cifre decimali (da 0 a 9) con larghezza W e altezza H (che sono anche numeri interi positivi). Puoi presumere che N sarà minore o uguale al maggiore di W e H.

Stampa o restituisce il più grande numero contiguo di N cifre che appare in orizzontale o in verticale nella griglia, scritto nell'ordine di lettura normale o al contrario.

  • Le linee diagonali di cifre non sono considerate.
  • La griglia non si avvolge, cioè non ha condizioni al contorno periodiche.

Ad esempio, la griglia 3 × 3

928
313
049

avrebbe 9come output per N = 1, 94come output per N = 2 e 940come output per N = 3.

La griglia 4 × 3

7423
1531
6810

avrebbe 8come output per N = 1, 86per N = 2, 854per N = 3 e 7423per N = 4.

La griglia 3 × 3

000
010
000

avrebbe un output 1per N = 1 e 10per N = 2 e N = 3 ( 010è valido anche per N = 3).

La griglia 1 × 1

0

avrebbe un output 0per N = 1.

Puoi prendere l'input in qualsiasi formato ragionevole conveniente. ad esempio, la griglia potrebbe essere una stringa di cifre separata da una nuova riga, o una matrice multidimensionale, o un elenco di elenchi di cifre, ecc. Gli zero iniziali sono consentiti nell'output se facevano parte della griglia.

Si tratta di , quindi vince il codice più breve in byte, ma assegnerò anche punti brownie (ovvero voti più probabili) per le risposte che possono dimostrare che il loro algoritmo è efficiente dal punto di vista computazionale.


1
È consentito stampare zero iniziali?
PurkkaKoodari,

@ Pietu1998 "Gli zero iniziali sono consentiti nell'output se facevano parte della griglia."
Hobby di Calvin,

Risposte:


0

Pyth, 22 19 byte

3 byte grazie a Jakube.

seSs.:RQ.n,L_MdCB.z

Provalo online.

Se ci è permesso stampare zero iniziali, il codice è di 18 byte:

eSs.:RQ.n,L_MdCB.z

È possibile eseguire la conversione di una stringa con zeri iniziali in un numero intero s.
Jakube,

9

CJam, 39 36 35 34 byte

qN/)i\[{zW%_}4*]ff{_,@e<ew:i}e_:e>

Appena in fretta, prima che @Dennis si svegli: P

Provalo online .

Spiegazione

L'algoritmo di base è prendere tutte e quattro le rotazioni della griglia e dividere ogni riga in blocchi di lunghezza N(o la lunghezza della riga, a seconda di quale sia la più piccola). Quindi converti i blocchi in ints e prendi il più grande.

qN/             Split input by newlines, giving an array of lines
)i\             Drop N from the array and put at bottom
[        ]      Wrap in array...
 {    }4*         Perform 4 times...
  zW%_              Rotate grid anticlockwise and push a copy
                Note that this gives an array of 5 grids [CCW1 CCW2 CCW3 CCW4 CCW4]
ff{         }   For each grid row, mapping with N as an extra parameter...
   _,             Push length of row
     @e<          Take min with N
        ew        Split into chunks
          :i      Convert to ints
e_              Flatten that array
:e>             Take cumulative max

Per curiosità, fa fewqualcosa di speciale o sono tre comandi separati?
ETHproductions

3
@ETHproductions In realtà è l'operatore ewapplicato usando f, o "mappa con parametro extra". Ad esempio, ["abcd" "efgh"] 2 fewrisulta in [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000,

Gotcha :) Questa è una coincidenza interessante, però.
ETHproductions

L'unico problema è che, quando @Dennis si sveglia, tutti gli altri perdono comunque. ;)
kirbyfan64sos,

-2

burlesco

Non è ancora una risposta definitiva, ma probabilmente funzionerà in questo modo:

blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{3.+ti}m[>]
854
blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{4.+ti}m[>]
7423

Come vengono dati esattamente N e la griglia?


Si dovrebbe in genere aspettare di pubblicare una risposta fino a quando non funziona. Eventuali domande per il PO devono essere presentate come commenti sul post.
Alex A.

Il codice funziona davvero.
moman
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.