Znajdź największą liczbę N cyfr w siatce cyfr W przez H.

25

Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N i siatkę cyfr dziesiętnych (od 0 do 9) o szerokości W i wysokości H (które są również dodatnimi liczbami całkowitymi). Możesz założyć, że N będzie mniejsze lub równe większej z W i H.

Wydrukuj lub zwróć największą ciągłą liczbę cyfr N, która pojawia się poziomo lub pionowo na siatce, zapisaną w normalnej kolejności odczytu lub odwrotnie.

  • Ukośne linie cyfr nie są uwzględniane.
  • Siatka nie zawija się, tzn. Nie ma okresowych warunków brzegowych.

Na przykład siatka 3 × 3

928
313
049

miałby 9jako wynik dla N = 1, 94jako wynik dla N = 2 i 940jako wynik dla N = 3.

Siatka 4 × 3

7423
1531
6810

miałby 8jako wynik dla N = 1, 86dla N = 2, 854dla N = 3 i 7423dla N = 4.

Siatka 3 × 3

000
010
000

miałby wynik 1dla N = 1, a 10dla N = 2 i N = 3 ( 010obowiązuje również dla N = 3).

Siatka 1 × 1

0

miałby wynik 0dla N = 1.

Możesz pobrać dane wejściowe w dowolnym dogodnym rozsądnym formacie. np. siatka może być ciągiem cyfr oddzielonym znakiem nowej linii, tablicą wielowymiarową lub listą cyfr itp. Zera wiodące są dozwolone w danych wyjściowych, jeśli były częścią siatki.

To jest , więc wygrywa najkrótszy kod w bajtach, ale przyznam także punkty brownie (tj. Bardziej prawdopodobne upvotes) za odpowiedzi, które mogą wykazać, że ich algorytm jest wydajny obliczeniowo.

Hobby Calvina
źródło
1
Czy wolno nam drukować dowolne zera na początku?
PurkkaKoodari,
@ Pietu1998 „Zera wiodące są dozwolone w danych wyjściowych, jeśli były częścią siatki”.
Calvin's Hobbies

Odpowiedzi:

0

Pyth, 22 19 bajtów

3 bajty dzięki Jakube.

seSs.:RQ.n,L_MdCB.z

Wypróbuj online.

Jeśli wolno nam drukować początkowe zera, kod ma 18 bajtów:

eSs.:RQ.n,L_MdCB.z
PurkkaKoodari
źródło
Konwersję ciągu z wiodącymi zerami na liczbę całkowitą można wykonać za pomocą s.
Jakube,
9

CJam, 39 36 35 34 bajtów

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

Po prostu szybko, zanim @Dennis się obudzi: P

Wypróbuj online .

Wyjaśnienie

Podstawowym algorytmem jest wzięcie wszystkich czterech obrotów siatki i podzielenie każdego rzędu na kawałki długości N(lub długość rzędu, w zależności od tego, który jest mniejszy). Następnie przekonwertuj części na ints i weź największy.

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
źródło
Czy z ciekawości robi fewcoś specjalnego, czy to są trzy osobne polecenia?
ETHprodukcje
3
@ETHproductions W rzeczywistości jest to operator ewzastosowany za pomocą flub „ mapuj z dodatkowym parametrem”. Na przykład ["abcd" "efgh"] 2 fewwyniki w [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000,
Gotcha :) To ciekawy zbieg okoliczności.
ETHprodukcje
Jedynym problemem jest to, że kiedy @Dennis budzi się, wszyscy i tak przegrywają. ;)
kirbyfan64sos
-2

Groteska

Jeszcze nie ostateczna odpowiedź, ale prawdopodobnie będzie działać tak:

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

Jak dokładnie podano N i siatkę?

mroman
źródło
Zazwyczaj należy poczekać na opublikowanie odpowiedzi, aż zadziała. Wszelkie pytania dotyczące PO należy podawać jako komentarze do posta.
Alex A.,
Kod faktycznie działa.
mroman