แก้ไข:ปริศนาเงินรางวัลตอนท้ายของคำถาม
เมื่อกำหนดตัวเลข 1 หลักคุณควรกำหนดความสูงของหอคอยที่พวกเขาสามารถสร้างได้
ตัวเลขอาศัยอยู่บนระนาบแนวนอนที่มีระดับพื้นดินที่สามารถยืนได้ ไม่มีหลักใดที่จะสับสนกับตัวเลขหลายหลักดังนั้นพวกเขาจึงมีพื้นที่ว่างทั้งสองด้านเสมอ
4 2 1 9 6 8
ตัวเลขสามารถอยู่ด้านบนของอีกหนึ่ง:
2
6
หรือสามารถรองรับได้สองแนวทแยงมุมด้านล่าง:
9
5 8
ด้านล่างหนึ่ง (s) ต้องรองรับน้ำหนักบนหนึ่งในการสนับสนุน (ถ้ามี) รวมทั้งน้ำหนักบนหนึ่งของซึ่งเป็นเสมอ 1 หากมีผู้สนับสนุนสองคนพวกเขาจะแบ่งน้ำหนักรวมของคนบนให้เท่ากัน (50% -50%)
น้ำหนักของตัวเลขทุกหลักคือ 1 โดยอิสระจากมูลค่าของมัน
หากหนึ่งหลักรองรับสองหลักจะต้องสามารถรองรับผลรวมของน้ำหนักที่สอดคล้องกัน ตัวเลขสามารถรองรับได้สูงสุดตามค่าตัวเลข
บางอาคารที่ถูกต้อง (มีความสูง4, 3และ5):
0
7 1
5 1 1 1 9 supports a total weight of 1.5 = (1+1/2)/2 + (1+1/2)/2
2 5 4 5 5
3 5 9 5 5 6 3 6 supports a total weight of 3 = 1.5 + 1.5 = (2*1+(2*1/2))/2 + (2*1+(2*1/2))/2
หอคอยที่ไม่ถูกต้องบางส่วน:
1 5 The problems with the towers are (from left to right):
1 12 2 3 8 1 can't support 1+1; no space between 1 and 2;
1 5 6 1 1 1 9 1 can't support 1.5 = (1+1/2)/2 + (1+1/2)/2; 8 isn't properly supported (digits at both bottom diagonals or exactly below the 8)
คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่ให้รายการของตัวเลขเป็นเอาท์พุทอินพุตหรือส่งกลับความสูงของหอคอยที่สูงที่สุดที่สร้างได้โดยใช้บางส่วน (อาจทั้งหมด) ของหลักเหล่านั้น
อินพุต
- รายการหมายเลขหลักเดียวที่ไม่เป็นลบพร้อมองค์ประกอบอย่างน้อยหนึ่งรายการ
เอาท์พุต
- จำนวนเต็มบวกเดียวคือความสูงของหอคอยที่สร้างได้สูงสุด
- โซลูชันของคุณต้องแก้กรณีทดสอบตัวอย่างใด ๆ ในคอมพิวเตอร์ของฉัน (ฉันจะทดสอบเฉพาะกรณีที่ปิดฉันมีพีซีที่ต่ำกว่าค่าเฉลี่ย)
ตัวอย่าง
การจัดรูปแบบอยู่Input list => Output numberกับหอคอยที่เป็นไปได้ในบรรทัดถัดไปซึ่งไม่ได้เป็นส่วนหนึ่งของการส่งออก
[0] => 1
0
[0, 1, 1, 1, 1, 1] => 3
0
1
1 1
[1, 1, 1, 1, 1, 2, 2] => 4
1
1
1 1
1 2 2
[0, 0, 2, 2, 2, 2, 2, 5, 5, 5, 7, 7, 9] => 9
0
2
2
5
5
5
7
7
9
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] => 9
1
2
2
3
4
5
3 3
4 4 4
5 5 5 5
[0, 0, 0, 0, 0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 7, 7, 9] => 11
0
1
2
3
4
5
3 3
4 5
5 5
3 7 3
2 7 9 2
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] => 12
0
1
2
3
4
5
6
7
4 5
6 7
8 8
9 9
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9] => 18
0
1
2
3
4
5
6
7
8
9
5 5
6 6
7 7
4 8 4
3 7 7 3
2 6 8 6 2
2 5 8 8 5 2
3 9 9 9 9 3
นี่คือรหัสกอล์ฟดังนั้นรายการที่สั้นที่สุดชนะ
เงินรางวัล
ฉันจะมอบรางวัลชื่อเสียง 100 รางวัล (ไม่เกี่ยวข้องกับรางวัลที่ได้รับไปแล้ว) สำหรับการแก้ปัญหาแบบขยายด้านล่างในเวลาพหุนาม (ในเรื่องความยาวของรายการอินพุต) หรือพิสูจน์ว่ามันเป็นไปไม่ได้ รายละเอียดของปัญหาเพิ่มเติม:
- ตัวเลขที่ป้อนอาจเป็นจำนวนเต็มใด ๆ ที่ไม่เป็นลบไม่ใช่แค่ตัวเลข
- ตัวเลขหลายหลักจะเกิดขึ้นแทนหมายเลขเดียว
- ตัวเลขหลายหลักสามารถรองรับตัวเลขได้เช่น
24สามารถรองรับได้24
ข้อเสนอเงินรางวัลไม่มีวันหมดอายุ ฉันจะเพิ่มและให้รางวัลเงินรางวัลหากมีหลักฐานปรากฏขึ้น
3-2-5-7หอคอยของคุณทำให้ฉันงง คุณบอกว่า "คนที่อยู่ด้านล่างต้องรองรับน้ำหนักที่คนที่สูงกว่าสนับสนุน (ถ้ามี) รวมถึงน้ำหนักที่สูงกว่าซึ่งเป็น 1 เสมอ" ซึ่งขัดแย้งกับคุณว่าตัวเลขสามารถรองรับได้มากที่สุด 'ค่าตัวเลข' - หากน้ำหนักของแต่ละหลักเป็นหนึ่งแล้วจุดที่มีจำนวนแตกต่างกันคืออะไร