Tìm số chữ số N lớn nhất trong lưới chữ số W theo H


25

Viết chương trình hoặc hàm lấy số nguyên dương N và lưới các chữ số thập phân (0 đến 9) có chiều rộng W và chiều cao H (cũng là các số nguyên dương). Bạn có thể giả sử rằng N sẽ nhỏ hơn hoặc bằng giá trị lớn hơn của W và H.

In hoặc trả về số chữ số N liền kề lớn nhất xuất hiện theo chiều ngang hoặc chiều dọc trong lưới, được viết theo thứ tự đọc bình thường hoặc ngược lại.

  • Các đường chéo của chữ số không được xem xét.
  • Lưới không quấn quanh, tức là nó không có điều kiện biên định kỳ.

Ví dụ: lưới 3 × 3

928
313
049

sẽ có 9đầu ra cho N = 1, 94làm đầu ra cho N = 2 và 940là đầu ra cho N = 3.

Lưới 4 × 3

7423
1531
6810

sẽ có 8đầu ra cho N = 1, 86cho N = 2, 854cho N = 3 và 7423cho N = 4.

Lưới 3 × 3

000
010
000

sẽ có đầu ra 1cho N = 1 và 10cho N = 2 và N = 3 ( 010cũng hợp lệ cho N = 3).

Lưới 1 × 1

0

sẽ có đầu ra 0cho N = 1.

Bạn có thể lấy đầu vào ở bất kỳ định dạng hợp lý thuận tiện. ví dụ: lưới có thể là một chuỗi các chữ số được phân tách bằng dòng mới hoặc một mảng nhiều chiều hoặc một danh sách các danh sách các chữ số, v.v. Các số 0 đứng đầu được phép trong đầu ra nếu chúng là một phần của lưới.

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng, nhưng tôi cũng sẽ trao giải thưởng cho các điểm brownie (nghĩa là nhiều khả năng hơn) cho các câu trả lời có thể cho thấy thuật toán của họ có hiệu quả tính toán.


1
Chúng tôi có được phép in bất kỳ số 0 hàng đầu nào không?
PurkkaKoodari

@ Pietu1998 "Các số 0 đứng đầu được phép ở đầu ra nếu chúng là một phần của lưới."
Sở thích của Calvin

Câu trả lời:


0

Pyth, 22 19 byte

3 byte nhờ Jakube.

seSs.:RQ.n,L_MdCB.z

Hãy thử trực tuyến.

Nếu chúng tôi được phép in các số 0 hàng đầu, mã là 18 byte:

eSs.:RQ.n,L_MdCB.z

Chuyển đổi một chuỗi có các số 0 đứng đầu thành một số nguyên có thể được thực hiện bằng s.
Jakube

9

CJam, 39 36 35 34 byte

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

Chỉ cần nhanh chóng, trước khi @Dennis thức dậy: P

Hãy thử trực tuyến .

Giải trình

Thuật toán cơ bản là lấy tất cả bốn phép quay của lưới và chia mỗi hàng thành các phần có chiều dài N(hoặc chiều dài của hàng, tùy theo giá trị nào nhỏ hơn). Sau đó chuyển đổi các khối thành ints và lấy lớn nhất.

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

Vì tò mò, có fewlàm gì đặc biệt không, hay đó là ba lệnh riêng biệt?
Sản xuất ETH

3
@ETHproductions Đó thực sự là toán tử ewđược áp dụng bằng cách sử dụng fhoặc "ánh xạ với tham số phụ". Ví dụ, ["abcd" "efgh"] 2 fewkết quả trong [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000

Gotcha :) Tuy nhiên, đó là một sự trùng hợp thú vị.
Sản xuất ETH

Vấn đề duy nhất là, khi @Dennis thức dậy, mọi người khác vẫn thua. ;)
kirbyfan64sos

-2

Burlesque

Không phải là một câu trả lời cuối cùng nhưng nó có thể sẽ hoạt động như thế này:

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

Làm thế nào là N và lưới được đưa ra chính xác?


Thông thường người ta nên chờ đợi để gửi câu trả lời cho đến khi nó hoạt động. Bất kỳ câu hỏi cho OP nên được đưa ra như là nhận xét về bài viết.
Alex A.

Các mã thực sự hoạt động.
mroman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.