รูปแบบเครื่องตัดหญ้า


9

นำมาจากGoogle รอบการคัดเลือก Code 2013 ปัญหารอบ B :

อลิซกับบ็อบมีสนามหญ้าหน้าบ้านของพวกเขามีรูปร่างเหมือน N เมตรโดยสี่เหลี่ยมผืนผ้า M เมตร ในแต่ละปีพวกเขาพยายามตัดหญ้าในรูปแบบที่น่าสนใจ พวกเขาเคยตัดด้วยกรรไกรซึ่งใช้เวลานานมาก แต่ตอนนี้พวกเขามีเครื่องตัดหญ้าอัตโนมัติใหม่พร้อมการตั้งค่าหลายแบบและพวกเขาต้องการลองใช้

เครื่องตัดหญ้าแบบใหม่มีการตั้งค่าความสูง - คุณสามารถตั้งค่าเป็นความสูง h ใด ๆ ระหว่าง 1 ถึง 100 มิลลิเมตรและมันจะตัดหญ้าทั้งหมดที่สูงกว่า h พบกับความสูง h คุณรันมันโดยเข้าไปที่สนามหญ้าที่ส่วนใดของขอบสนามหญ้า จากนั้นเครื่องตัดหญ้าจะเป็นเส้นตรงตั้งฉากกับขอบสนามหญ้าที่เข้ามาตัดหญ้าในแนวกว้าง 1 เมตรจนกระทั่งมันออกจากสนามหญ้าไปอีกด้านหนึ่ง ความสูงของเครื่องตัดหญ้าสามารถตั้งค่าได้เฉพาะเมื่อไม่ได้อยู่บนสนามหญ้า

อลิซกับบ็อบมีหญ้าหลายแบบที่พวกเขาสามารถมีได้บนสนามหญ้า สำหรับแต่ละคนพวกเขาต้องการทราบว่าเป็นไปได้ที่จะตัดหญ้าในรูปแบบนี้ด้วยเครื่องตัดหญ้าแบบใหม่ของพวกเขาหรือไม่ แต่ละรูปแบบอธิบายโดยระบุความสูงของหญ้าในแต่ละสนามหญ้าขนาด 1 ม. x 1 ม.

ต้นหญ้าสูง 100 มม. บนสนามหญ้าทั้งหมด

เขียนฟังก์ชั่นที่ใช้ความสูงของจำนวนเต็มสองมิติและพิจารณาว่าสามารถตัดหญ้าได้หรือไม่

ต่อไปนี้เป็นกรณีทดสอบ 100 รายการจาก Google Code Jam 35 รายแรกควรผ่านไปส่วนที่เหลือไม่ควร

รหัสที่สั้นที่สุดชนะ


2
คุณสามารถชี้ให้เห็นใบอนุญาตภายใต้ปัญหา Google Code Jam ที่เป็นกรณีทดสอบได้หรือไม่
Peter Taylor

ฉันได้เปลี่ยนเป็นลิงก์ไปที่ปัญหาแทนที่จะคัดลอกโดยตรง
cardboard_box

ฉันคิดว่ามันเป็นเรื่องที่โชคร้ายมากหากมีการนำเสนอตัวต่อ / คำถามที่มีลิงก์ ปัญหาควรได้รับการจัดเตรียมอย่างครบถ้วนพร้อมรายละเอียดที่จำเป็นทั้งหมด
Howard

2
"คำแถลงปัญหาข้อมูลการป้อนข้อมูลและการวิเคราะห์การแข่งขันทั้งหมดได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์" ~ จากหน้าปัญหา
MrZander

คำตอบ:


9

J, 15 ตัวอักษร

   (-:>./"1<./>./)

ไม่ได้คาดหวังวิธีแก้ปัญหาสั้น ๆ นี้

คำอธิบายสั้น ๆ :

(input == ((max of rows of input) table with min of left and right (max in columns of input)))
(      -:          >./"1                        <./                       >./              )

หากการทำงานของคุณคือ 4 ฟังก์ชั่นอื่น ๆ เช่นในการแก้ปัญหา: (f1 f2 f3 f4)และการป้อนข้อมูล J คำนวณมันเหมือนเช่นf1(input,f3(f2(input),f4(input)))input f1 ((f2 input) f3 (f4 input))


โปรดอธิบายอัลกอริทึม (ฉันไม่สามารถอ่านรหัส J ได้ ^^)
Olivier Dulac

2
@OlivierDulac เพิ่งเพิ่มในตอนนี้
randomra

5

APL, 15 ตัวอักษร

{⍵≡(⌈/⍵)∘.⌊⌈⌿⍵}

คำอธิบาย:

  • ⌈⌿⍵ คำนวณค่าสูงสุดของคอลัมน์ของ rhs
  • ⌈/⍵ ทำเช่นเดียวกันกับแถว
  • ∘.⌊ ผลิตภัณฑ์ชั้นนอกของสองอันก่อนหน้านี้เกี่ยวข้องกับฟังก์ชั่นขั้นต่ำหรือไม่
  • ⍵≡ เปรียบเทียบผลลัพธ์กับ rhs

ตัวอย่าง:

      {⍵≡(⌈/⍵)∘.⌊⌈⌿⍵} 3 3 ⍴ 2 1 2 1 1 1 2 1 2
1

      {⍵≡(⌈/⍵)∘.⌊⌈⌿⍵} 2 3 ⍴ 2 2 2 2 1 1
0 


0

ฉันมีรหัสไพ ธ อนที่ยาวขึ้นเล็กน้อย แต่ผ่านการทดสอบทั้งหมดที่กำหนดไว้ใน Google Code Jam 2013

 a=input();io=0
 while io<a:
     io+=1;[b,c]=map(int,raw_input("").strip().split());koi=[];koi1=[]
     for i in xrange(b):
         koi.append(map(int,raw_input("").strip().split()))
    rowmax=[]
    for i in koi:
        rowmax.append(max(i))
    for i in xrange(c):
        t=[]
        for j in koi:
            t.append(j[i])
        koi1.append(t);colmax=[]
    for i in koi1:
        colmax.append(max(i))
    toi1=[]
    for i in xrange(b):
        s=[]
        for j in xrange(c):
           s.append(min(colmax[j],rowmax[i]))
        toi1.append(s)
     if toi1==koi:
        print "Case #%d:"%io,"YES"
     else:
        print "Case #%d:"%io,"NO"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.