ค้นหาตัวเลข 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 และ7423N = 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 "อนุญาตให้เลขศูนย์นำหน้าอยู่ในเอาต์พุตหากเป็นส่วนหนึ่งของตาราง"
งานอดิเรกของ Calvin

คำตอบ:


0

Pyth, 22 19 ไบต์

3 ไบต์ขอบคุณ Jakube

seSs.:RQ.n,L_MdCB.z

ลองออนไลน์

หากเราได้รับอนุญาตให้พิมพ์เลขศูนย์นำหน้ารหัสคือ 18 ไบต์:

eSs.:RQ.n,L_MdCB.z

sแปลงสตริงกับศูนย์ชั้นนำจำนวนเต็มสามารถทำได้ด้วย
Jakube

9

CJam, 39 36 35 34 bytes

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

Gotcha :) นั่นเป็นเรื่องบังเอิญที่น่าสนใจ
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 และกริดเป็นอย่างไรกันแน่?


โดยทั่วไปควรรอโพสต์คำตอบจนกว่าจะได้ผล คำถามใด ๆ สำหรับ OP ควรให้เป็นความคิดเห็นในโพสต์
Alex A.

รหัสใช้งานได้จริง
mroman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.