Найти наибольшее число N цифр в сетке цифр W от H

25

Напишите программу или функцию, которая принимает положительное целое число N и сетку десятичных цифр (от 0 до 9) с шириной W и высотой H (которые также являются положительными целыми числами). Можно предположить, что N будет меньше или равно большему из W и H.

Напечатайте или верните самое большое непрерывное число из N цифр, которое появляется в сетке горизонтально или вертикально, записанное в обычном порядке чтения или в обратном порядке.

  • Диагональные линии цифр не учитываются.
  • Сетка не оборачивается, то есть не имеет периодических граничных условий.

Например, сетка 3 × 3

928
313
049

будет иметь 9как выход для N = 1, 94как выход для N = 2, и 940как выход для N = 3.

Сетка 4 × 3

7423
1531
6810

будет иметь 8в качестве выхода для N = 1, 86для N = 2, 854для N = 3 и 7423для N = 4.

Сетка 3 × 3

000
010
000

будет иметь выход 1для N = 1, а 10для N = 2 и N = 3 ( 010также справедливо для N = 3).

Сетка 1 × 1

0

будет иметь выход 0для N = 1.

Вы можете принять вход в любом удобном разумном формате. например, сетка может представлять собой строку цифр, разделенную символом новой строки, или многомерный массив, или список списков цифр и т. д. На выходе допускаются начальные нули, если они были частью сетки.

Это , поэтому выигрывает самый короткий код в байтах, но я также начисляю баллы Брауни (то есть, скорее всего, положительные отзывы) за ответы, которые могут показать, что их алгоритм вычислительно эффективен.

Кальвин Хобби
источник
1
Разрешено ли печатать лидирующие нули?
PurkkaKoodari
@ Pietu1998 "Ведущие нули допускаются на выходе, если они были частью сетки."
Увлечения Кэлвина

Ответы:

0

Pyth, 22 19 байт

3 байта благодаря Якубе.

seSs.:RQ.n,L_MdCB.z

Попробуйте онлайн.

Если нам разрешено печатать начальные нули, код будет 18 байтов:

eSs.:RQ.n,L_MdCB.z
PurkkaKoodari
источник
Преобразование строки с ведущими нулями в целое число может быть выполнено с помощью s.
Якуб
9

CJam, 39 36 35 34 байта

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

Просто быстро, прежде чем @Dennis просыпается: P

Попробуйте онлайн .

объяснение

Основной алгоритм состоит в том, чтобы взять все четыре поворота сетки и разбить каждый ряд на куски длины N(или длины рядов, в зависимости от того, что меньше). Затем преобразовать куски в целые и взять самые большие.

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
источник
Из любопытства делает fewчто-то особенное или это три отдельные команды?
ETHproductions
3
@ETHproductions На самом деле это оператор, ewприменяемый с помощью fили «карта с дополнительным параметром». Например, ["abcd" "efgh"] 2 fewрезультаты в [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000
Попался :) Это интересное совпадение, хотя.
ETHproductions
Единственная проблема заключается в том, что, когда @Dennis просыпается, все остальные все равно проигрывают. ;)
kirbyfan64sos
-2

бурлеск

Пока не окончательный ответ, но, вероятно, он будет работать так:

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

Как точно дается N и сетка?

mroman
источник
Обычно нужно ждать, чтобы опубликовать ответ, пока он не заработает. Любые вопросы по ФП следует давать в качестве комментариев к посту.
Алекс А.
Код на самом деле работает.
Мроман