ช่วยเบ ธ หนีทะเลทราย


11

ในขณะที่คล้ายกับปริศนาการถือน้ำอื่น ๆลักษณะเฉพาะของการท้าทายนี้ทำให้แตกต่างอย่างสิ้นเชิง

เบ ธ

เบ ธ ตั้งอยู่ที่โอเอซิสกลางทะเลทราย มีทะเลสาบมากมายในน้ำ แต่โชคไม่ดีที่มีเพียงถัง X เท่านั้นแต่ละแห่งมีความจุน้ำ Y ลิตร

เบ ธ สามารถถือถัง 2 ใบในมือของเธอ แต่เพื่อความอยู่รอดเธอต้องดื่ม 1 ลิตรทุก ๆ กิโลเมตรหลังจากเดินทาง นอกจากนี้เธอยังสามารถทิ้งถังไว้ครึ่งทาง (น้ำไม่ระเหย)

ความท้าทาย

คิดสูตรและเขียนคำตอบสั้น ๆที่จะทำงานกับค่าจำนวนเต็มบวกของ X และ Y และคำนวณระยะทางสูงสุดที่เบ ธ สามารถเดินทางจากโอเอซิส อนุญาตให้ย้ายน้ำระหว่างถังได้

ตัวอย่าง

X = 3, Y = 5

  1. เบ ธ ออกจากถังเต็ม 1 ถังห่างจากโอเอซิส 3 กิโลเมตรกลับมาอีกครั้ง (ดื่มครั้งสุดท้ายจากโอเอซิส)
  2. เบ ธ นำถังเต็มอีกตัวมาที่จุด 3 กม. ขณะนี้มี 12 ลิตรที่นั่น
  3. เบ ธ สามารถเลื่อนไปที่ 6 กม. จากจุดและทิ้งถังด้วยน้ำ 4 ลิตร
  4. กลับมาที่ 3KM point ตอนนี้เธอมี 2L ที่แน่นอนเพื่อกลับสู่โอเอซิส
  5. เติมถังและเดินทางไปยังจุด 6KM ตอนนี้เธอมีน้ำ 8 ลิตร
  6. ขับต่อไปจนถึงจุด 15KM

คำตอบคือ: 15

อินพุต / เอาต์พุต

คุณสามารถกำหนด X / Y ได้โดยตรงในรหัสหรืออ่านจากอินพุต ผลลัพธ์อาจถูกวางในตัวแปรหรือผลลัพธ์ซึ่งจะสั้นที่สุด


2
นี่ควรจะเป็นรหัสกอล์ฟหรือไม่ มันติดแท็กเป็นรหัสท้า
Dennis

ใช่มันเป็นรหัสกอล์ฟฉันเพิ่มแท็ก มาพร้อมสูตรที่ถูกต้องและแสดงมันผ่านโค้ด
romaninsh

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

1
คุณสามารถให้กรณีทดสอบในลักษณะที่โปรแกรมจะออกมันได้หรือไม่
Pavel

แก้ไขคำถามเพื่อแก้ไขทั้งสองประเด็น
romaninsh

คำตอบ:


2

JavaScript (ES6), 25 ไบต์

x=>y=>((x<3?x:3)+x)*y/2+1
x=>y=>(x<3?x+x:x+3)*y/2+1
x=>y=>(x<3?x:(x+3)/2)*y+1
x=>y=>(x<3?x:x/2+1.5)*y+1

ทั้งหมดนี้คำนวณด้วยค่าเดียวกัน ฉันไม่สามารถคิดสูตรที่สั้นกว่านี้ได้

เมื่อxมีค่าน้อยกว่าที่คุณจะใช้เป็นน้ำมากที่สุดเท่าที่คุณสามารถและเดินไปให้ไกลที่สุดเท่าที่จะทำได้ซึ่งเป็นเพียง3x*y+1

เมื่อxอย่างน้อย 3 คุณต้องเริ่มสร้างแคช

จากโอเอซิสคุณสามารถฝากถังเต็มถังที่ระยะไกลy/2และกลับไปที่โอเอซิส คุณต้องใช้ 2 ถังเพื่อทำสิ่งนี้ แต่มันไม่มีประโยชน์ถ้าคุณมี 2 ถังเท่านั้นเพราะคุณต้องการเติม 2 ถังเมื่อคุณกลับไปที่โอเอซิส

จากโอเอซิสด้วยที่ฝากข้อมูลในระยะไกลy/2คุณสามารถฝากข้อมูลเต็มถังที่ระยะทางyและกลับสู่โอเอซิส คุณต้องมี 3 ถังเพื่อทำสิ่งนี้

จากโอเอซิสที่มีที่เก็บเต็มถังทั้งสองข้างyและy/2คุณสามารถฝากถังเต็มถังที่ระยะไกล3y/2และกลับสู่โอเอซิส คุณต้องมี 4 ถังเพื่อทำสิ่งนี้ จากนั้นคุณต้องปล่อยถังเต็มถังออกไปในระยะไกลy/2และกลับไปที่โอเอซิส

(x-1)y/2ในที่สุดคุณสามารถจบลงด้วยถังเต็มได้ที่ (คุณไม่สามารถออกจากถังเต็มถังxy/2เพราะคุณจะไม่สามารถกลับไปที่โอเอซิสได้เนื่องจากการเดินทางไปกลับคือxyความจุทั้งหมดของถัง)

ใช้บุ้งกี๋ที่เหลือของคุณคุณสามารถปล่อยให้บุ้งกี๋เต็มได้ที่(x-3)y/2... หรือy y/2เมื่อมาถึงจุดนี้คุณเพียงแค่เดินให้ไกลที่สุดเท่าที่จะทำได้ยกถังขึ้นไปเรื่อย ๆ เมื่อคุณมาถึงคุณยังมีสองถังเต็มซ้ายช่วยให้คุณสามารถเข้าถึง(x-1)y/2(x+3)y/2

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

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