Chute-A-Pearing


16

ที่นี่ห้าภาพของลูกแพร์และเป็นเหล็ก ราง :

A: B: C: D: E:ลูกแพร์ ลูกแพร์ B ลูกแพร์ ลูกแพร์ D ลูกแพร์ E

นี่เป็นเพียงภาพขนาดย่อคลิกเพื่อดูขนาดเต็ม!

(ฉันทำสิ่งเหล่านี้กับAlgodoo )

รูปภาพของคลาสนี้มีคุณสมบัติดังต่อไปนี้เสมอ:

  1. พวกเขามักจะ 400 × 400 พิกเซลพร้อมพื้นหลังสีขาว (อาจไม่ขาวอย่างแน่นอนเนื่องจากภาพ SE ถูกบีบอัดอย่างสูญเปล่า)
  2. พวกมันมีลูกแพร์เหมือนกัน 1 ถึง 4 ลูกโดยแต่ละลูกจะหมุนและวางในตำแหน่ง (เกือบ) แต่อย่างใด
  3. พวกเขามีรางเหล็กแนวตั้งหนึ่งที่ถึงด้านล่างของภาพ
  4. นอกเหนือจากด้านล่างของรางรางและกล่องขอบลูกแพร์ ( ตัวอย่างกล่องขอบ ) ไม่เคยสัมผัสหรือออกจากขอบเขตของภาพ
  5. กล่องกระโดดของลูกแพร์ไม่เคยทับซ้อนกันหรือไม่ทับทางราง
  6. ลูกแพร์อาจอยู่ภายใต้ส่วนของรางลาดในขณะที่B , CและD (ดังนั้นกล่องที่ จำกัด ของรางอาจทับกล่องของลูกแพร์)
  7. รางอาจมีตำแหน่งแนวนอนและแนวตั้งตราบใดที่มีที่ว่างเพียงพอสำหรับกล่องขอบของลูกแพร์ที่จะพอดีกับข้างบนมันอย่างอิสระ (จะไม่มีการทดสอบแบบ "พอดีกับแทบ") และมองเห็นส่วนของคอลัมน์

ท้าทาย

เขียนโปรแกรมที่ใช้ภาพดังกล่าวและส่งออกภาพอีก 400 × 400 ภาพพร้อมรางในที่เดียวกัน แต่ด้วยลูกแพร์เปลี่ยนตำแหน่งดังนั้นพวกเขาจึงอยู่เหนือรางรถไฟ (เพื่อให้พวกเขาสามารถตกลงไปได้

ข้อกำหนดสำหรับภาพออกคือ:

  1. ลูกแพร์ทั้งหมดในภาพอินพุตจะต้องถูกจัดตำแหน่งใหม่เพื่อให้อยู่เหนือรางระหว่างขอบด้านซ้ายและขวาของช่องทาง (เหนือขอบไม่เป็นไร)
  2. ลูกแพร์แต่ละลูกจะต้องรักษามุมการหมุนของมัน (ดังนั้นคุณควรตัดและวางลูกแพร์ไม่ใช่การวาดใหม่)
  3. ลูกแพร์จะต้องไม่ทับซ้อนกันหรือสัมผัสกันหรือราง ( กล่องขอบเขตของลูกแพร์อาจทับซ้อนกัน)
  4. ลูกแพร์จะต้องไม่ถูกสัมผัสหรือหลุดออกจากขอบเขตของภาพ

นี่คือตัวอย่างของผลลัพธ์ที่ถูกต้องสำหรับภาพตัวอย่างห้าภาพ:

A: B: C: D: E:ออก ออก B ค ออก D ออก D

นี่เป็นเพียงภาพขนาดย่อคลิกเพื่อดูขนาดเต็ม!

โปรดทราบว่าภาพอินพุตสำหรับEเป็นเอาต์พุตที่ถูกต้องอยู่แล้ว แต่การจัดเรียงลูกแพร์ใหม่เมื่อไม่จำเป็นต้องใช้เทคนิคก็ถือว่าใช้ได้

รายละเอียด

  • ใช้ชื่อไฟล์ของภาพหรือข้อมูลภาพดิบผ่าน stdin / บรรทัดคำสั่ง / การเรียกใช้ฟังก์ชั่น
  • เอาท์พุทภาพไปยังไฟล์ที่มีชื่อที่คุณเลือกหรือส่งออกข้อมูลไฟล์ภาพดิบเพื่อ stdout หรือเพียงแค่แสดงภาพ
  • อาจใช้รูปแบบไฟล์ภาพ lossless ทั่วไป
  • อาจใช้ไลบรารีกราฟิกและรูปภาพ
  • พิกเซลไม่ถูกต้องไม่กี่ที่นี่และมี (เนื่องจากการสูญเสียหรือบางสิ่งบางอย่าง) ไม่ใช่เรื่องใหญ่ หากฉันไม่สามารถบอกได้ว่ามีอะไรผิดปกติทางสายตาก็อาจเป็นไร

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ Tiebreaker เป็นโพสต์โหวตสูงสุด


เนื่องจากฉันมีบัญชี Khan Academy และดูเหมือนว่าจะสมบูรณ์แบบที่จะแก้ปัญหาที่นั่นฉันสามารถแก้ไขได้ใน Khan Academy หรือไม่ มีภาวะแทรกซ้อนเดียวเท่านั้น: ไม่อนุญาตให้ใช้รูปภาพภายนอก โชคดีที่ฉันสามารถเรียกใช้รูปภาพผ่านทางนี้เพื่อแปลงเป็นข้อมูลที่เป็นมิตรกับ Khan Academy เป็นที่ยอมรับหรือไม่?
BobTheAwesome

@BobTheAwesome ดังนั้นคุณต้องการโพสต์คำตอบ JavaScript หรือไม่ ไม่เป็นไรแม้ว่ามันควรจะใส่และส่งออกภาพขนาด 400x400 คุณสามารถโพสต์งานของคุณเพื่อแสดงให้เห็นว่าคุณทำอย่างไรกับ KA แต่ฉันอาจไม่ยอมรับในฐานะผู้ชนะถ้ามันไม่ทำงานบนภาพ 400x400
งานอดิเรกของ Calvin

เรื่องบังเอิญที่สมบูรณ์แบบ; Khan Academy เพิ่งเกิดขึ้นที่จะมีค่าเริ่มต้นของผืนผ้าใบ 400x400px สำหรับ Javascript + Pjs
BobTheAwesome

ไม่มี !! Imagenator ช้ามากในภาพ 400x400 ภาพ !!
BobTheAwesome

คำตอบ:


6

Python 2.7, 636 ไบต์

import sys;from PIL.Image import*
_,m,R,I,p,H=255,400,range,open(sys.argv[1]).convert('RGB'),[],0
w,h=I.size;W,A,P,L=(_,_,_),[(x,y)for x in R(w)for y in R(h)],I.load(),I.copy()
try:
 while 1:
    s,x,y,X,Y=[[a for a in A if P[a][0]<50][0]],m,m,0,0
    while s:c=(a,b)=s.pop();x,y,X,Y=min(x,a),min(y,b),max(X,a),max(Y,b);P[c]=W;s+=[n for n in[(a+1,b),(a,b+1),(a-1,b),(a,b-1)]if n in A and P[n]!=W]
    p+=[((x,y,X,Y),X-x,Y-y)]
except:0
def G(a):r,g,b=P[a];return r==g==b and r<_
g=[a for a in A if G(a)]
(z,t),W=g[0],max([x for x,y in g]);t-=1
for r,w,h in p:
 if z+w>W:z,_=g[0];t-=H;H=0
 I.paste(L.crop(r),(z,t-h,z+w,t));z+=w;H=max(h,H)
I.show()

แก้ไข : ตอนนี้ลบช่องอัลฟาก่อนที่จะจัดการภาพและจัดตำแหน่งลูกแพร์ในหลายแถวหากจำเป็น

ภาพที่ผลิต:

A B ค D และ E

และลูกแพร์แนวตั้ง (ใช้เวลาประมาณ 3 นาทีบนคอมพิวเตอร์ของฉัน):

testcase แนวตั้ง


1
รูปภาพดังกล่าวเป็นระยะ / หลังหรือไม่? ถ้าอย่างนั้นฉันคิดว่าคุณได้ทำสิ่งที่ผิดสำหรับ BE ...
Sp3000

ภาพอินพุตทางซ้ายและภาพออกทางด้านขวา ... พวกมันไม่ได้เป็นพิกเซลที่สมบูรณ์แบบเนื่องจากการลดขนาดและการคัดลอกวางฉันได้ใส่มันไว้เพื่อให้คำแนะนำเกี่ยวกับวิธีการทำงานของสคริปต์ ..
dieter


อันที่จริงไม่ ... ด้วยเหตุผลสองประการ: มันตกอยู่ในวงวนไม่ จำกัด เนื่องจากภาพนี้มีช่องอัลฟา -> แก้ไขสคริปต์ดังนั้นมันจึงแปลงภาพก่อน อีกเหตุผลหนึ่งที่ฉันลบรหัสที่จัดตำแหน่งลูกแพร์ในหลายแถว -> วางกลับ
dieter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.