มีกี่สี่เหลี่ยม


12

ความท้าทายนี้เป็นแรงบันดาลใจจากภาพที่มักจะเดินเตร่บน Facebook ที่มีลักษณะเช่นนี้ ยกเว้นฐานสี่เหลี่ยมของเราจะมีลักษณะดังนี้:

┌─┬───┬─┐
├─┼─┬─┼─┤
├─┼─┴─┼─┤
├─┼─┬─┼─┤
└─┴─┴─┴─┘

สี่เหลี่ยมจัตุรัสทำจากn x m1x1 สี่เหลี่ยมจัตุรัสคุณต้องนับจำนวนสี่เหลี่ยมย่อย (1x1, 2x2, 3x3, 4x4, 5x5 และอื่น ๆ ) สามารถใส่ภายในสี่เหลี่ยมนั้นได้ สแควร์สอาจหายไปบางเส้นกริด (เช่นในตัวอย่างด้านบน) หรือจะสมบูรณ์เหมือนในตัวอย่างร้อง ซึ่งหมายความว่าไม่สามารถแยกย่อยทางคณิตศาสตร์ได้ (เท่าที่ฉันรู้)

ปัจจัยการผลิต:

  • จำนวนของเส้น ( n) ของอินพุตเพื่อสร้างสแควร์;
  • สี่เหลี่ยมจัตุรัสที่สร้างจากอักขระต่อไปนี้: |ข้ามnบรรทัดอินพุต

เอาท์พุท:

  • จำนวนสี่เหลี่ยมที่มีขนาดใดก็ได้ที่สามารถใส่ในสี่เหลี่ยมจัตุรัส (เราต้องการเพียงตัวเลขเดียวที่นี่ไม่ใช่ตัวเลขสำหรับแต่ละขนาด)

เกณฑ์ที่ชนะ:

คำตอบที่น้อยที่สุด (จำนวนไบต์) จะชนะ

กรณีทดสอบ:

ใน:

5
┌─┬─┬─┬─┐
├─┼─┼─┼─┤
├─┼─┼─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘

ออก: 30


ใน:

3
┌─┬─┐
├─┼─┤
└─┴─┘

ออก: 5


ใน:

5
┌─┬─┐
├─┴─┤
├───┤
├─┬─┤
└─┴─┘

ออก: 7


ใน:

4
┌─┬─┬─┬─┬─┬─┐
├─┼─┼─┼─┼─┼─┤
├─┼─┼─┼─┼─┼─┤
└─┴─┴─┴─┴─┴─┘

ออก: 32


ใน:

2
┌─┐
└─┘

ออก: 1


ใน:

4
┌─┬─┬─┬─┬─┬─┐
├─┴─┼─┼─┼─┴─┤
├─┬─┼─┼─┼─┬─┤
└─┴─┴─┴─┴─┴─┘

ออก: 22


3
ฉันไม่ได้นับอันที่ใหญ่กว่า แต่อันที่สามไม่มี 11 กำลังสองในนั้น
หมึกมูลค่า

@ KevinLau-notKenny คุณถูกต้องฉันทำผิดพลาด
Simon Landry

ฉันคิดว่ามันง่ายเกินไปมันถูกนับผ่านทางรูปแบบ combinatoric คุณอยากจะพิจารณารูปแบบของ facebook ไหม?
Abr001am

1
สำหรับการอ้างอิงกรณีสี่เหลี่ยมA271916ซึ่งจะช่วยให้m*(m+1)*(3*n-m+1)/6การmโดยnรูปสี่เหลี่ยมผืนผ้าที่มีn >= m(ขนาดชดเชยโดยหนึ่งตั้งแต่รายการพูดถึงจุดมากกว่าสี่เหลี่ยมตัวเอง)
SP3000

1
@SimonLandry ฉันไม่ได้หมายถึง combinatorics ในความรู้สึกบริสุทธิ์ฉันคิดว่า sp3000 เพิ่งชี้ว่ารุ่นแรกของปริศนาของคุณ (ก่อนที่จะแก้ไข) เปิดสำหรับการพัฒนาทางคณิตศาสตร์อย่างง่าย
Abr001am

คำตอบ:


2

JavaScript (ES6), 292ไบต์306 325

แก้ไขฉันนับจำนวนไบต์ผิดทั้งหมดแก้ไขตอนนี้ขอบคุณhttp://bytesizematters.com/เป็นครั้งสุดท้ายที่ฉันหวังว่าขอบคุณCᴏɴᴏʀO'Bʀɪᴇɴดูhttps://goo.gl/LSHC1U (และ 1 ไบต์น้อยกว่าโดยใช้ตัวอักษร ขึ้นบรรทัดใหม่ของ '\ n')

(h,z)=>(o=>{r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);for(q=s=0;++s<o/2&s<h;)for(y=0;y<(h-s)*o;y+=o)for(x=0;x<o-s*2;q+=!n,x+=2)for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)n|=i<s&(!(r(t+y)&r(t+y+s*o)&1)|!(r(x+u)&r(x+u+s*2)&2))|i>0&(!(r(t+y)&r(t+y+s*o)&4)|!(r(x+u)&r(x+u+s*2)&8))})(-~z.search`
`)|q

นานกว่าที่ฉันคาดไว้

สี่เหลี่ยมที่เป็นไปได้ทั้งหมดจะถูกตรวจสอบและนับ

rฟังก์ชั่นแผนที่ตัวละครแต่ละตัวจะมีบิตแมป

  • 1: เส้นกึ่งกลางแนวนอนไปทางขวา
  • 2: เส้นกึ่งกลางแนวตั้งไปด้านล่าง
  • 4: เส้นกึ่งกลางแนวนอนไปทางซ้าย
  • 8: เส้นกึ่งกลางแนวตั้งไปด้านบน

ต้องมีสี่เหลี่ยมจัตุรัสขนาดใดก็ได้

  • 4 ในเซลล์ทั้งหมดยกเว้นแถวแรกในแถวบนและล่าง
  • 1 ในเซลล์ทั้งหมดยกเว้นแถวสุดท้ายในแถวบนและล่าง
  • 8 ในเซลล์ทั้งหมดยกเว้นคอลัมน์แรกในคอลัมน์ซ้ายสุดและขวาสุด
  • 2 ในเซลล์ทั้งหมดยกเว้นคอลัมน์สุดท้ายในคอลัมน์ซ้ายสุดและขวาสุด

ทดสอบ

f=(h,z)=>(o=>{r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);k=(p,d,m)=>r(p)&r(p+s*d)&m;for(q=s=0;++s<o/2&s<h;)for(y=0;y<(h-s)*o;y+=o)for(x=0;x<o-s*2;q+=!n,x+=2)for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)n=n|i<s&(!k(t+y,o,1)|!k(x+u,2,2))|i>0&(!k(t+y,o,4)|!k(x+u,2,8));})(-~z.search`
`)|q

console.log=(...x)=>O.textContent+=x+'\n'

// Less golfed

Uf=(h,z)=>{
  o=-~z.search`\n`;
  w=o/2;
  r=p=>" ),┌(─┐┬'└│├┘┴┤┼".search(z[p]);
  k=(p,d,m)=>r(p)&r(p+s*d)&m;
  for(q=s=0;++s<w&s<h;)
    for(y=0;y<(h-s)*o;y+=o)
      for(x=0;x<(w-s)*2;q+=!n,x+=2)
        for(n=i=0,t=x,u=y;i<=s;t+=2,u+=o,i++)
          n|=i<s&(!k(t+y,o,1)|!k(x+u,2,2))
          |i>0&(!k(t+y,o,4)|!k(x+u,2,8));
  return q
}

;[[5,`┌─┬───┬─┐
├─┼─┬─┼─┤
├─┼─┴─┼─┤
├─┼─┬─┼─┤
└─┴─┴─┴─┘`,20]
,[5,`┌─┬─┬─┬─┐
├─┼─┼─┼─┤
├─┼─┼─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘`,30]
,[3,`┌─┬─┐
├─┼─┤
└─┴─┘`,5]
,[5,`┌─┬─┐
├─┴─┤
├───┤
├─┬─┤
└─┴─┘`,7]
,[4,`┌─┬─┬─┬─┬─┬─┐
├─┼─┼─┼─┼─┼─┤
├─┼─┼─┼─┼─┼─┤
└─┴─┴─┴─┴─┴─┘`,32]
,[2,`┌─┐
└─┘`,1]
,[4,`┌─┬─┬─┬─┬─┬─┐
├─┴─┼─┼─┼─┴─┤
├─┬─┼─┼─┼─┬─┤
└─┴─┴─┴─┴─┴─┘`,22],
,[6,`┌─┬─────┐
├─┼─┬─┐ 
 ├─┼─┼─┤
 └─┼─┼─┤
   └─┼─┤
└─────┴─┘`,12],  
,[6,`┌─┬─┬─┬─┐
├─┴─┼─┼─┤
   └─┼─┤
├─┬─┬─┼─┤
├─┼─┼─┼─┤
└─┴─┴─┴─┘`,23]]  
.forEach(t=>{
  var r=t[0],a=t[1],k=t[2],x=f(r,a)
  console.log(x==k?'OK '+x:'KO '+x+' Expected '+k,'\n'+a)
})
<pre id=O></pre>


ฉันนับ307 ไบต์
Conor O'Brien

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