ฉันโพสต์ความท้าทายนี้เมื่อไม่นานมานี้ซึ่งเกี่ยวข้องกับจำนวนเอลฟ์ซานต้าที่ต้องส่งของขวัญ
เนื่องจากจำนวนประชากรที่เพิ่มขึ้นซานต้าจึงค่อนข้างกดดันมากขึ้นในปีนี้ แม้ว่าในอดีตเราดำเนินการแบบอะซิงโครนัสมากเราเริ่มทำการทดลองด้วยการซิงโครไนซ์มากขึ้นเรื่อย ๆ ดังนั้นซานต้าต้องรู้ว่าจะต้องใช้เวลานานแค่ไหนในการส่งของขวัญให้กับแต่ละภูมิภาคด้วยจำนวนเอลฟ์ที่กำหนด
น้ำหนักของถ่านหินไม่เปลี่ยนแปลงในช่วงสองปีที่ผ่านมา - มันยังหนักกว่าของขวัญดังนั้นซานต้าต้องการสามเอลฟ์ต่อคนซนในบ้านและอีกสองเอลฟ์ต่อคนดีในบ้าน
เอลฟ์ใช้เวลาตลอดทั้งปีในการฝึกซ้อมคริสต์มาสดังนั้นพวกเขาจึงไม่ต้องการพักผ่อนระหว่างการส่งมอบ พวกเขาสามารถจัดส่งของขวัญไปที่บ้านหนึ่งหลังเท่านั้นและต้องกลับไปเลื่อนซานต้าและรวบรวมของขวัญถัดไปก่อนที่จะไปบ้านหลังถัดไป ด้วยเหตุผลที่ฉันไม่ได้มีอิสระในการแบ่งปันเอลฟ์ไม่ได้ใช้เวลาเดินทางระหว่างเลื่อนของซานต้าและบ้าน (แต่สามารถเดินทางได้เฉพาะเมื่อเลื่อนของซานต้าอยู่บนหลังคา) และเลื่อนของเขาใช้เวลาย้ายจากบ้านไปที่บ้าน (เลื่อนซานต้าจะตอบสนองความต้องการที่จะย้ายจากบ้านไปที่บ้านเพื่อเก็บน้ำมันเชื้อเพลิง แต่ฉันแล้วพูดมากเกินไป)
เอลฟ์ที่ส่งมอบของขวัญจะต้องใช้เวลาสี่วินาที*แต่ละครั้งที่ส่งมอบและเอลฟ์ที่ส่งมอบต้องใช้เวลาห้าวินาที*ในการส่งแต่ละครั้ง (ตามระเบียบของ Santa Aviation Administration ถุงมือที่มีฝุ่นถ่านหินจะต้องถูกเผาทันทีเมื่อ ขึ้นเลื่อนซึ่งใช้เวลาพอสมควร) นอกจากนี้บ้านต้องเข้าเยี่ยมชมตามลำดับที่อยู่บนแผนที่จากซ้ายไปขวาและเอลฟ์ไม่สามารถเริ่มส่งของขวัญไปยังบ้านอื่น ๆ ได้จนกว่าของขวัญทั้งหมดจะถูกส่งไปยังบ้านที่พวกเขาอยู่ในปัจจุบัน
หากเราสันนิษฐานว่าซานต้ามีเอลฟ์มากพอสำหรับภูมิภาคนี้จะใช้เวลาเพียงตราบเท่าที่ส่งมอบของขวัญให้ใครบางคนในรายการที่ซุกซน 5 วินาทีต่อบ้านหรือ 4 วินาทีต่อบ้านถ้าทุกคนดี
แต่เมื่อเทียบกับฤดูกาลที่ผ่านมาคริสต์มาสซานต้าที่มาถึงนี้อาจมีเอลฟ์ไม่มากพอสำหรับแต่ละภูมิภาคดังนั้น 4 วินาทีจึงเป็นเวลาขั้นต่ำ*ที่จะส่งมอบของขวัญให้บ้านใด ๆ เว้นแต่ว่ามี 0 คนดีและ 0 คนซนซึ่งในกรณีนี้จะใช้เวลา 0 วินาที
นอกจากนี้หากแม้แต่บ้านหลังหนึ่งมีคนอยู่ในรายชื่อที่ซุกซนซานต้าจะต้องการเอลฟ์อย่างน้อยสาม ถ้าอย่างน้อยหนึ่งในบ้านมีใครสักคนอยู่ในรายชื่อที่ดีและไม่มีใครอยู่ในรายชื่อที่ซุกซนซานต้าจะต้องมีเอลฟ์อย่างน้อยสองคน หากไม่มีบ้านอยู่ในจิตวิญญาณคริสต์มาสเอลฟ์จำนวนใด (รวมถึง 0) จะใช้เวลา 0 วินาที
บนแผนที่ของซานต้าบ้านเป็นตัวแทนจากและบ้านแต่ละหลังถูกแบ่งออกโดย* +ซานต้ายังคงใช้แผนที่แบบเดียวกันกับความท้าทายอื่น ๆแต่ฉันจะใส่เอกสารเกี่ยวกับพวกเขาที่นี่
จะมีตัวเลขอยู่ด้านใดด้านหนึ่งของบ้าน - ด้านซ้ายแสดงถึงจำนวนคนซุกซนในบ้านและอีกคนด้านขวาแสดงจำนวนคนดีในบ้าน หากไม่มีหมายเลขในด้านใดด้านหนึ่งมันจะตีความว่าเป็น 0
ฉันรู้ว่ามันอาจฟังดูบ้า แต่บางคน "ไม่ชอบคริสต์มาส" ดังนั้นบางครั้งบ้านอาจไม่มีตัวเลขอยู่สองข้าง
หนึ่งในแผนที่ของซานต้าอาจมีลักษณะเช่นนี้
1*3+2*+*5+*+4*7
สมมติว่าซานต้ามีเก้าเอลฟ์ในเลื่อนของเขา
(0s) บ้านหลังแรกมี 1 คนซนและ 3 คนที่ดี เอลฟ์สามคนส่งถ่านหินใช้เวลาห้าวินาทีและอีกหกส่งของขวัญใช้เวลาสี่วินาที หลังจากห้าวินาทีเลื่อนเลื่อนซานต้าจะย้ายไปที่บ้านถัดไป
(5s) บ้านหลังที่สองมี 2 คนซนและเป็นคนดี 0 คน เอลฟ์หกคนส่งถ่านหินใช้เวลาห้าวินาที หลังจากห้าวินาทีเลื่อนเลื่อนซานต้าจะย้ายไปที่บ้านถัดไป
(10s) บ้านหลังที่สามมี 0 คนซนและเป็นคนดี 5 คน พวกเอลฟ์แปดคนไปส่งของขวัญสี่ชิ้น (อันที่ถูกทิ้งไว้ข้างหลังไม่สามารถส่งของขวัญ) หลังจากสี่วินาทีเหล่าเอลฟ์ทุกคนจะกลับมาและอีกสองคนไปส่งของขวัญอีกครั้ง (ผู้เลื่อนต้องรอให้พวกเอลฟ์กลับไปก่อนที่จะไปบ้านหลังถัดไป) ใช้เวลาอีกสี่วินาที
(18s) บ้านหลังที่สี่ไม่ได้อยู่ในจิตวิญญาณคริสมาสต์ดังนั้นมี 0 คนซนและคนดี 0 คนและถูกข้ามไป
(18s) บ้านหลังที่ห้ามีคนซน 4 คนและเป็นคนดี 7 คน มันซับซ้อนเล็กน้อย ...
I. พวกเอลฟ์ทั้งเก้าไปส่งของขวัญสามถ่านหิน (ปล่อยให้ t + 0, ส่งคืน t + 5s) II หลังจาก 5 วินาทีพวกมันก็กลับมาที่เลื่อนและสามคนไปส่งมอบของขวัญสุดท้ายของถ่านหิน (ทิ้ง t + 5s, กลับ t + 10s) ในขณะที่อีกหกคนไปส่งของขวัญที่ดีสามรายการ (ปล่อยให้ T + 5 วินาทีส่งคืน t + 9s)
สาม. หลังจากสี่วินาทีเอลฟ์หกคนกลับมาแล้วไปมอบของขวัญที่ดีอีกสามรายการ (ปล่อยให้ t + 9s กลับไปที่ t + 13s)
IV หนึ่งวินาทีหลังจากที่พวกเขาจากไปพวกเอลฟ์ทั้งสามที่ส่งมอบถ่านหินจะได้รับกลับคืนและอีกสองคนออกไปเพื่อส่งของขวัญที่ดีครั้งสุดท้าย (ลา + 10 วินาทีกลับ t + 14
(18 +14 = 32 วินาที ) ซานต้าส่งของขวัญให้ภูมิภาคนั้นเสร็จแล้ว
อย่างที่เราเห็นมันใช้เวลาทั้งสิ้นซานต้า32 วินาทีในการส่งของขวัญไปยังภูมิภาคนี้ นั่นเป็นแผนที่ที่ง่ายกว่าฉบับหนึ่งในแผนที่ของซานต้า โดยปกติแผนที่ของซานต้าจะมีหลายบรรทัดและอยู่ในรูปทรงสี่เหลี่ยมเพื่อให้พอดีกับรายการของเขา แผนที่ปกติอาจมีลักษณะเช่นนี้ (a \nที่ส่วนท้ายของแต่ละบรรทัด)
1*2+*+*4+1*
2*4+3*+1*6+*
*+*+4*2+1*1
*4+*3+1*+2*3
3*10+2*+*5+*
กับ26 เอลฟ์ (หรือจำนวนเงินใด ๆ สูงกว่า) ก็จะใช้เวลาซานตา71 วินาที
กับ20 แถนก็จะใช้เวลาซานตา76 วินาที
กับ15 แถนก็จะใช้เวลาซานตา80 วินาที
ด้วย3 แถนก็จะใช้เวลาซานตา288 วินาที
ด้วย2 เอลฟ์ (หรือจำนวนที่ต่ำกว่า) มันจะเป็นไปไม่ได้
โอ้และอีกสิ่งหนึ่ง - ลำดับที่เอลฟ์ส่งมอบเรื่องของขวัญ (เนื่องจากความแตกต่างของเวลาในการส่งของขวัญคนซุกซน / คนดี) ดังนั้นโค้ดของคุณควรแสดงเวลาน้อยที่สุดที่เอลฟ์สามารถนำเสนอของขวัญได้
ท้าทาย
ช่วยซานต้าให้ทราบว่าจะใช้เวลานานเท่าใดในการส่งมอบเอลฟ์จำนวนหนึ่ง
บ้าน
- บ้านเป็นตัวแทนจาก
* - บ้านแบ่งออกเป็น
+ - หมายเลขทางด้านซ้ายของบ้านเป็นสัญลักษณ์ของจำนวนคนแก่น (ไม่มีหมายถึงเลข 0)
- หมายเลขด้านขวาเป็นสัญลักษณ์ของจำนวนคนดี (ไม่มีตัวเลขหมายถึง 0)
- อาจมีการขึ้นบรรทัดใหม่ (
\n) ในอินพุตซึ่งควรจัดการเป็นแยก
แถน
- ซานต้าต้องการความช่วยเหลือจากสามเอลฟ์สำหรับคนซุกซน (ถ่านหินหนักกว่าของกำนัลมาก) และมันจะใช้เอลฟ์เหล่านี้ห้าวินาที*เพื่อส่งมอบของขวัญ
- ซานต้าต้องการความช่วยเหลือจากสองเอลฟ์เพื่อคนดีและใช้เวลาเหล่าเอลฟ์สี่วินาที*ในการส่งมอบของขวัญ
- ถ้าไม่มีเลขข้างบ้านซานต้าจะไม่ไปเยี่ยมบ้านหลังนั้นและจะไม่ใช้เวลาใด ๆ (คนที่ไม่ได้อยู่ในจิตวิญญาณคริสต์มาสก็ไม่สมควรได้รับถ่านหินด้วย)
ซานตา
- ซานต้าต้องส่งของขวัญไปที่บ้านทีละคน
- ซานต้าไม่สามารถเคลื่อนย้ายไปยังบ้านหลังถัดไปจนกว่าพวกเอลฟ์ทุกคนจะกลับมาเลื่อนบนและของขวัญทั้งหมดได้ถูกส่งไปที่บ้านหลังนั้น (เราไม่ต้องการที่จะทิ้งพวกเอลฟ์ไว้ข้างหลังตอนนี้เรา?)
- เลื่อนซานต้าไม่ได้ใช้เวลาเดินทางจากบ้านสู่บ้าน (อีกครั้งด้วยเหตุผลที่ฉันไม่ได้มีอิสระที่จะแบ่งปัน)
สิ่งที่ต้องทำ
ให้แผนที่บ้านและเอลฟ์จำนวนหนึ่งพิมพ์เวลาที่ซานต้าใช้ในการส่งของขวัญไปที่บ้านบนแผนที่
* (ฉันไม่สามารถแบ่งปันระยะเวลาที่เอลฟ์ใช้เพื่อส่งของขวัญฉันไม่สามารถยืนยันหรือปฏิเสธว่าเวลาที่รวมอยู่ในการท้าทายนี้ถูกต้อง)
กฎระเบียบ
- มีสองอินพุต - แผนที่และจำนวนเอลฟ์ อินพุตสามารถนำมาเป็นอาร์กิวเมนต์ให้กับฟังก์ชันหรือจากSTDINหรือเทียบเท่า หากการป้อนสองอินพุตเป็นไปไม่ได้ในภาษาของคุณคุณอาจยอมรับอินพุตทั้งสองเป็นสตริงอินพุตเดียวโดยคั่นด้วยอักขระบางตัวที่ไม่ปกติในอินพุต (ไม่ใช่หนึ่ง
+*\nหรือ0-9- สตริงอินพุตไม่สามารถคลุมเครือ),เช่น - จำนวนเอลฟ์จะเป็นจำนวนเต็มแบบไม่ลบเสมอ (0 ใช้ได้)
- เอาต์พุตสามารถเป็นค่าส่งคืนของฟังก์ชันหรือพิมพ์เป็นSTDOUTหรือเทียบเท่า หากเป็นไปไม่ได้ที่ซานต้าจะส่งของขวัญไปยังภูมิภาคที่กำหนดด้วยจำนวนเอลฟ์ที่กำหนดคุณต้องส่งออกจำนวนลบที่สอดคล้องกันหรือข้อความที่สอดคล้องกันโดยไม่มีตัวเลขใด ๆ อยู่ในนั้น
- ทุกสิ่งที่พิมพ์ไปยังSTDERRจะถูกละเว้นดังนั้นคุณอาจไม่พิมพ์ผลลัพธ์หรือข้อความแสดงข้อผิดพลาดไปยังSTDERR
- โปรแกรมของคุณต้องไม่ผิดพลาดเนื่องจากจำนวนแถนที่ไม่ถูกต้องในแต่ละภูมิภาค
- การส่งออกควรเป็นจำนวนเวลาทั้งหมดเท่านั้นที่จะใช้เวลาในการส่งมอบของขวัญซานต้าด้วยจำนวนเอลฟ์ที่กำหนด
- ผลลัพธ์ควรเป็นจำนวนเวลาน้อยที่สุดที่เอลฟ์ใช้ในการส่งของขวัญ
- ข้อมูลที่ป้อนจะมีเพียงตัวเลข,
+และ*, ขึ้นบรรทัดใหม่\n(เว้นแต่คุณจะระบุอักขระอื่นซึ่งข้อมูลนั้นจะรวมหากภาษาของคุณไม่สามารถรับสองอินพุตได้(ดูที่กฎข้อแรก) ) - ช่องโหว่มาตรฐานใช้
กรณีทดสอบ
"1*1", 5 elves => 5
"1*1", 3 elves => 9
"1*2", 7 elves => 5
"1*2", 5 elves => 10
"1*2", 3 elves => 13
"2*1", 8 elves => 5
"2*1", 5 elves => 9
"2*1", 3 elves => 14
"1*" , 3 elves => 5
"1*" , 2 elves => (error message)
"*1" , 2 elves => 4
"*1" , 0 elves => (error message)
"*" , 0 elves => 0
"1*1+1*1", 5 elves => 10
"1*1+1*1", 3 elves => 18
"1*1+*+1*1", 3 elves => 18
"1*2+2*1", 8 elves => 10
"1*2+2*1", 7 elves => 14
"1*2+2*1", 6 elves => 18
"1*2+2*1", 3 elves => 27
"1*2+2*1", 2 elves => (error message)
"*+*+*+*", 2 elves => 0
"*+*+*+*", 0 elves => 0
"1*3+2*+*5+*+4*7", 9 elves => 32
(หวังว่าฉันจะได้รับสิ่งที่ถูกต้องทั้งหมด)
เกณฑ์การให้คะแนน
ซานตาใช้เวลาทุกวันเดียวมักจะมองที่มากของสิ่ง - ทุกของขวัญเขาจะส่งมอบทั้งหมดของเอลฟ์ที่เขามีทุกบ้านที่เขาส่งมอบของขวัญให้กับ ... สำหรับซานตาคริสต์มาสที่ดีที่สุดในปัจจุบันจะมีความเป็นอยู่ สามารถเห็นบางสิ่งเล็กน้อย ด้วยเหตุนี้การส่งสั้นที่สุดในไบต์ชนะ
ลีดเดอร์บอร์ด
นี่คือตัวอย่างข้อมูลสแต็กที่สร้างทั้งกระดานผู้นำและภาพรวมของผู้ชนะตามภาษา
เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยบรรทัดแรกโดยใช้เทมเพลต Markdown ต่อไปนี้
## Language Name, N bytes
โดยที่ N คือขนาดไบต์ของการส่งของคุณ
หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (ตัวอย่างเช่นการดูผ่านคะแนนเก่าหรือรวมถึงการตั้งค่าสถานะในจำนวนไบต์) เพียงตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นจำนวนสุดท้ายในส่วนหัวของคุณ
## Language Name, <s>K</s> X + 2 = N bytes
4*7จะใช้เวลา 14 วินาที (ซึ่งครอบคลุมประมาณครึ่งทางใน "เรียงความ" ก่อนที่จะมีการนำแผนที่ 2D มาใช้) แต่ (4 * 5) + (7 * 4) = (48
naughty*5+nice*4ที่บ้านแต่ละหลังใช่มั้ย (โปรดสังเกตว่าไม่มี4*7ในตัวอย่างนั้น)
5*15และมี9เอลฟ์จะใช้เวลา (น้อยที่สุด) 20 วินาทีหรือ 22 วินาทีหรือไม่ ดูการแสดงที่เป็นข้อความเหล่านี้เพื่อดูภาพประกอบของตัวอย่างนั้น
5*15 4*15
(1+0+0+1+2+3+1+0+0+0+4+1+0+0+1+2+3+2+0+0)*5+(2+0+4+0+4+0+6+0+0+0+2+1+4+3+0+3+10+0+5+0)*4=21*5+44*4=105+176=281(แม้ว่าฉันต้องบอกว่าฉันยังไม่ได้อ่าน "เรียงความ" ทั้งหมด)