Encuentre el número de N dígitos más grande en una cuadrícula de dígitos W por H

25

Escriba un programa o función que tome un entero positivo N y una cuadrícula de dígitos decimales (0 a 9) con ancho W y altura H (que también son enteros positivos). Puede suponer que N será menor o igual que el mayor de W y H.

Imprima o devuelva el número de N dígitos contiguos más grande que aparece horizontal o verticalmente en la cuadrícula, escrito en orden de lectura normal o al revés.

  • No se consideran líneas diagonales de dígitos.
  • La cuadrícula no se ajusta, es decir, no tiene condiciones de contorno periódicas.

Por ejemplo, la cuadrícula 3 × 3

928
313
049

tendría 9como salida para N = 1, 94como salida para N = 2 y 940como salida para N = 3.

La cuadrícula 4 × 3

7423
1531
6810

tendría 8como salida para N = 1, 86para N = 2, 854para N = 3 y 7423para N = 4.

La cuadrícula 3 × 3

000
010
000

tendría salida 1para N = 1, y 10para N = 2 y N = 3 ( 010también es válido para N = 3).

La cuadrícula 1 × 1

0

tendría salida 0para N = 1.

Puede tomar la entrada en cualquier formato razonable conveniente. por ejemplo, la cuadrícula podría ser una cadena de dígitos separada por una nueva línea, o una matriz multidimensional, o una lista de listas de dígitos, etc. Los ceros iniciales están permitidos en la salida si fueran parte de la cuadrícula.

Este es el , por lo que gana el código más corto en bytes, pero también otorgaré puntos brownie (es decir, votos más probables) por respuestas que pueden mostrar que su algoritmo es computacionalmente eficiente.

Pasatiempos de Calvin
fuente
1
¿Se nos permite imprimir ceros a la izquierda?
PurkkaKoodari
@ Pietu1998 "Los ceros iniciales están permitidos en la salida si fueran parte de la cuadrícula".
Aficiones de Calvin

Respuestas:

0

Pyth, 22 19 bytes

3 bytes gracias a Jakube.

seSs.:RQ.n,L_MdCB.z

Pruébalo en línea.

Si se nos permite imprimir ceros a la izquierda, el código es de 18 bytes:

eSs.:RQ.n,L_MdCB.z
PurkkaKoodari
fuente
La conversión de una cadena con ceros a un entero se puede lograr con s.
Jakube
9

CJam, 39 36 35 34 bytes

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

Solo rápidamente, antes de que @Dennis se despierte: P

Pruébalo en línea .

Explicación

El algoritmo básico es tomar las cuatro rotaciones de la cuadrícula y dividir cada fila en trozos de longitud N(o la longitud de la fila, la que sea menor). Luego convierta los trozos a ints y tome el más 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
Sp3000
fuente
Por curiosidad, ¿ fewhace algo especial o son tres comandos separados?
ETHproductions
3
@ETHproductions En realidad, el operador lo ewaplicó usando f, o "mapa con parámetro adicional". Por ejemplo, ["abcd" "efgh"] 2 fewresultados en [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000
Gotcha :) Sin embargo, esa es una coincidencia interesante.
ETHproductions
El único problema es que, cuando @Dennis se despierta, todos los demás pierden de todos modos. ;)
kirbyfan64sos
-2

Burlesco

Todavía no es una respuesta final, pero probablemente funcionará así:

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

¿Cómo se dan exactamente N y la cuadrícula?

mroman
fuente
Normalmente se debe esperar para publicar una respuesta hasta que funcione. Cualquier pregunta para el OP se debe dar como comentarios en la publicación.
Alex A.
El código realmente funciona.
mroman