Suchen Sie die größte N-stellige Zahl in einem W x H-Zifferngitter

25

Schreiben Sie ein Programm oder eine Funktion, die eine positive Ganzzahl N und ein Dezimalstellenraster (0 bis 9) mit der Breite W und der Höhe H (die auch positive Ganzzahlen sind) enthält. Sie können davon ausgehen, dass N kleiner oder gleich dem größeren von W und H ist.

Die größte zusammenhängende N-stellige Zahl drucken oder zurückgeben, die horizontal oder vertikal im Raster angezeigt wird, in normaler Lesereihenfolge oder in umgekehrter Reihenfolge.

  • Diagonale Ziffernreihen werden nicht berücksichtigt.
  • Das Gitter wird nicht umbrochen, dh es gibt keine periodischen Randbedingungen.

Zum Beispiel das 3 × 3-Raster

928
313
049

hätte 9als Ausgang für N = 1, 94als Ausgang für N = 2 und 940als Ausgang für N = 3.

Das 4 × 3-Raster

7423
1531
6810

hätte 8als Ausgang für N = 1, 86für N = 2, 854für N = 3 und 7423für N = 4.

Das 3 × 3-Raster

000
010
000

hätte ausgegeben 1für N = 1 und 10für N = 2 und N = 3 ( 010gilt auch für N = 3).

Das 1 × 1-Raster

0

hätte ausgegeben 0für N = 1.

Sie können die Eingabe in einem beliebigen, angemessenen Format vornehmen. Beispiel: Das Raster kann eine durch Zeilenumbrüche getrennte Zeichenfolge oder ein mehrdimensionales Array oder eine Liste mit Ziffern usw. sein. Führende Nullen sind in der Ausgabe zulässig, wenn sie Teil des Rasters sind.

Das ist , also gewinnt der kürzeste Code in Bytes, aber ich werde auch Brownie-Punkte (dh wahrscheinlichere Aufwärtsbewertungen) für Antworten vergeben, die zeigen können, dass ihr Algorithmus rechnerisch effizient ist.

Calvins Hobbys
quelle
1
Dürfen wir führende Nullen ausgeben?
PurkkaKoodari
@ Pietu1998 "Führende Nullen sind in der Ausgabe zulässig, wenn sie Teil des Gitters waren."
Calvins Hobbys

Antworten:

0

Pyth, 22 bis 19 Bytes

3 Bytes dank Jakube.

seSs.:RQ.n,L_MdCB.z

Probieren Sie es online aus.

Wenn wir führende Nullen drucken dürfen, beträgt der Code 18 Byte:

eSs.:RQ.n,L_MdCB.z
PurkkaKoodari
quelle
Die Konvertierung eines Strings mit führenden Nullen in eine Ganzzahl kann mit durchgeführt werden s.
Jakube
9

CJam, 39 36 35 34 Bytes

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

Nur kurz bevor @Dennis aufwacht: P

Probieren Sie es online aus .

Erläuterung

Der grundlegende Algorithmus besteht darin, alle vier Umdrehungen des Gitters zu erfassen und jede Zeile in Längenblöcke aufzuteilen N (oder die Zeilenlänge, je nachdem, welche kleiner ist). Dann wandle die Stücke in Ints um und nimm die größten.

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
quelle
fewTun Sie aus Neugier etwas Besonderes oder sind es drei separate Befehle?
ETHproductions
3
@ETHproductions Dies ist der Operator ew, der mit f"map with extra parameter" angewendet wird . Zum Beispiel ["abcd" "efgh"] 2 fewergibt [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000
Gotcha :) Das ist aber ein interessanter Zufall.
ETHproductions
Das einzige Problem ist, dass, wenn @Dennis aufwacht, alle anderen sowieso verlieren. ;)
kirbyfan64sos
-2

Burleske

Noch keine endgültige Antwort, aber es wird wahrscheinlich so funktionieren:

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

Wie ist N und das Gitter genau gegeben?

mroman
quelle
Normalerweise sollte man warten, bis eine Antwort vorliegt, bis sie funktioniert. Alle Fragen an das OP sollten als Kommentare zum Beitrag gegeben werden.
Alex A.
Der Code funktioniert tatsächlich.
Mroman