Знайдіть найбільше 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 байти завдяки Jakube.

seSs.:RQ.n,L_MdCB.z

Спробуйте в Інтернеті.

Якщо нам дозволено друкувати провідні нулі, код становить 18 байт:

eSs.:RQ.n,L_MdCB.z

Перетворення рядка з провідними нулями в ціле число може бути здійснено за допомогою s.
Якубе

9

CJam, 39 36 35 34 байт

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

Просто швидко, перш ніж @Dennis прокидається: P

Спробуйте в Інтернеті .

Пояснення

Основний алгоритм полягає в тому, щоб взяти всі чотири обертання сітки і розділити кожен ряд на шматки довжини N(або довжину рядка, залежно від того, яка менша). Потім перетворіть шматки в ints і візьміть найбільші.

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

З цікавості робить 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.