บทนำ:
แม้ว่าในขั้นต้นฉันจะมีเพลงดัตช์อยู่ในหัวของฉันซึ่งเนื้อเพลงคือ: " Doe 'n stapje naar voren, en' n stapje terug " (ซึ่งแปลว่า " ก้าวไปข้างหน้านิดหน่อยและถอยกลับเล็กน้อย ") เมื่อ ฉันค้นหาเนื้อเพลงเต็มฉันรู้ว่าพวกเขากลับไปมาและไม่เคยออกไปด้านข้าง
ดังนั้นตอนนี้ฉันจึงใช้เนื้อเพลงของMr C The Slide Man หรือ DJ Casper - Cha-Cha Slideสำหรับความท้าทายนี้
หากเราเพิกเฉยต่อสิ่งอื่นและดูเฉพาะคำว่า "ซ้าย", "ขวา", "ย้อนกลับ" และ "กระโดด" (ฉันนับว่า "กระโดด" เป็นไปข้างหน้า) รวมถึงจำนวนที่กล่าวถึงเพลงเต็มจะมีรายการดังต่อไปนี้ ( ฉันใช้ตัวย่อ LRBH ที่นี่):
LBHRLLBHRLBHHRRLLLRLBHHHHRRLLLBHHHHHRLRLRLHRLLBHHLRLBHH
นี่คือเนื้อเพลงเต็มเพลงใน code-snippet JavaScript ที่ซ่อนได้ (เพื่อประหยัดพื้นที่) ซึ่งการเคลื่อนไหวและจำนวนถูกล้อมรอบด้วยวงเล็บเหลี่ยมที่ถูกบล็อก:
ท้าทาย:
ตอนนี้สู่ความท้าทาย เราใช้เวลาหนึ่งสองหรือสามปัจจัย† หนึ่งในนั้นคือรายการของดัชนี - จำนวนเต็ม (ดังนั้นไม่เป็นลบสำหรับ 0 ดัชนีหรือบวกสำหรับดัชนี 1) (อินพุตอื่นเป็นทางเลือกและอธิบายไว้ในกฏการท้าทาย)
{x=0, y=0}
กรณีทดสอบทุกคนจะเริ่มต้นที่ตำแหน่ง
ตอนนี้ใช้เนื้อร้องรายการของการย้ายและลบการเคลื่อนไหวทั้งหมดที่ดัชนีที่กำหนดของรายการอินพุต จากนั้น 'เดิน' ข้ามการเคลื่อนไหว (สูงสุดดัชนีที่ใหญ่ที่สุดของอินพุทอาเรย์) และส่งออกตำแหน่งที่คุณจะได้รับ
การเคลื่อนไหวจะเปลี่ยนพิกัดดังนี้:
- R
: x+1
- L
: x-1
- H
: y+1
- B
:y-1
กฏท้าทาย:
- รายการย้ายสามารถเข้าถึงได้ในแบบที่คุณต้องการ †:สามารถป้อนข้อมูลเพิ่มเติมได้ สามารถอยู่ในไฟล์แยกบนดิสก์ที่คุณจะอ่านได้ สามารถอยู่ในตัวแปรระดับชั้นที่คุณเข้าถึง มันจะต้องอยู่ในรูปแบบของ
L
,R
,B
และH
แม้ (อาจจะเป็นสตริงหรือตัวละคร / รายการอาร์เรย์) ดังนั้นคุณจึงไม่สามารถบันทึกย้ายรายการเป็น1
และ-1
หรือจำนวนเต็ม - รายการย้ายที่ให้ไว้ด้านบนนั้นมีการกำหนดรหัสแบบยากและจะเหมือนเดิมเสมอ (ซึ่งเป็นเหตุผลว่าทำไมจึงควรใส่เป็นฟิลด์ระดับชั้นแทนที่จะใช้เป็นอินพุตถ้าสิ่งนี้ช่วยนับจำนวนคำตอบของคุณ)
- รายการที่ป้อนสามารถเป็นได้ทั้งดัชนี 0 หรือดัชนี 1 ดัชนี (ขึ้นอยู่กับคุณ)
- เราเพียง 'เดิน' การเคลื่อนไหวไปถึงและไม่รวมดัชนีที่ใหญ่ที่สุดของรายการ
- †:คุณยังได้รับอนุญาตให้ใช้รายการสุดท้ายนี้เป็นอินพุตจำนวนเต็มแยกกันแทนที่จะเป็นรายการสุดท้ายของอินพุต - อาร์เรย์
- ผลลัพธ์ของพิกัด x และ y ที่เราท้ายสามารถอยู่ในรูปแบบที่เหมาะสม (จำนวนเต็มประกอบด้วยสองรายการ, สตริงที่คั่นด้วย, พิมพ์ไปยัง STDOUT ในสองบรรทัดที่แยกกัน ฯลฯ )
- คุณสามารถถือว่ารายการอินพุตถูกเรียงลำดับจากต่ำสุดไปสูงสุด (หรือสูงสุดไปต่ำสุดถ้านั่นคือสิ่งที่คุณต้องการในกรณีนี้รายการแรกคือขนาดเริ่มต้นของรายการย้าย - หากไม่ได้แยกเป็นอินพุตแยก) และจะไม่มีดัชนีที่ซ้ำกัน
- หากดัชนีที่ใหญ่ที่สุดของรายการอินพุตมีขนาดใหญ่กว่ารายการของการเคลื่อนไหวด้านบน (55 การเคลื่อนไหวอยู่ในรายการการย้ายด้านบน) เราจะล้อมรอบไปยังจุดเริ่มต้นของรายการอีกครั้ง (หลายครั้งตามความจำเป็นขึ้นอยู่กับดัชนีที่ใหญ่ที่สุด ของอินพุต)
- คุณได้รับอนุญาตให้ส่งออก
y,x
แทนx,y
แต่โปรดระบุสิ่งนี้ในคำตอบของคุณหากคุณทำ
ตัวอย่าง:
การป้อนข้อมูล: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
นี่คือการเคลื่อนไหวและดัชนี (0 ดัชนี) เหนือสิ่งอื่น:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
L, B, H, R, L, L, B, H, R, L, B, H, H, R, R, L, L, L, R, L, B, H, H, H, H, R, R, L, L, L, B, H, H, H, H, H, R, L, R, L, R, L, H, R, L, L, B, H, H, L, R, L, B, H, H, L, B, H, R, L, L, B, H, R, L
การลบดัชนีของรายการอินพุตเราจะมีรายการย้ายที่เหลือต่อไปนี้:
1, 2, 3, 5, 6, 7, 9,11,12,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,35,36,37,38,39,40,41,45,46,47,48,49,51,52,54,55,57,58,61,62,63
B, H, R, L, B, H, L, H, H, L, L, L, R, L, B, H, H, H, H, R, R, L, L, B, H, H, H, H, R, L, R, L, R, L, L, B, H, H, L, L, B, H, L, H, R, B, H, R
ตอนนี้ถ้าเราเดินจากตำแหน่ง{0, 0}
เหนือท่าที่เหลือเราจะมีพิกัดใหม่ดังต่อไปนี้ทุกครั้ง:
{0,0};B,{0,-1};H,{0,0};R,{1,0};L,{0,0};B,{0,-1};H,{0,0};L,{-1,0};H,{-1,1};H,{-1,2};L,{-2,2};L,{-3,2};L,{-4,2};R,{-3,2};L,{-4,2};B,{-4,1};H,{-4,2};H,{-4,3};H,{-4,3};H,{-4,5};R,{-3,5};R,{-2,5};L,{-3,5};L,{-4,5};B,{-4,4};H,{-4,5};H,{-4,6};H,{-4,7};H,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};L,{-5,8};B,{-5,7};H,{-5,8};H,{-5,9};L,{-6,9};L,{-7,9};B,{-7,8};H,{-7,9};L,{-8,9};H,{-8,10};R,{-7,10};B,{-7,9};H,{-7,10};R,{-6,10}
ดังนั้นผลลัพธ์สุดท้ายจะเป็น: {-6, 10}
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชัน / เมธอดพร้อมพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
- นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ
กรณีทดสอบ:
0-indexed input: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
1-indexed input: [1,5,9,11,14,15,28,35,43,44,45,51,54,57,60,61,65]
Output: {-6, 10}
0-indexed input: [55] (Note: There are 55 moves in the unmodified list)
1-indexed input: [56] (Note: There are 55 moves in the unmodified list)
Output: {-6, 11}
0-indexed input: [0,1,4,5,6,9,10,15,16,17,19,20,27,29,30,37,38,39,41,44,45,46,49,51,52]
1-indexed input: [1,2,5,6,7,10,11,16,17,18,20,21,28,30,31,38,39,40,42,45,46,47,50,52,53]
Output: {10, 16}
0-indexed input: [2,3,7,8,11,12,13,14,18,21,22,23,24,25,26,31,32,33,34,35,36,38,40,42,43,47,48,50,53]
1-indexed input: [3,4,8,9,12,13,14,15,19,22,23,24,25,26,27,32,33,34,35,36,37,39,41,43,44,48,49,51,54]
Output: {-18, -7}
0-indexed input: [0]
1-indexed input: [1]
Output: {0, 0}
0-indexed input: [4,6,7,11,12,13,15,17,20,28,31,36,40,51,59,66,73,74,80,89,92,112,113,114,116,120,122,125,129,134,136,140,145,156,161,162,165,169,171,175,176,178,187,191,200]
1-indexed input: [5,7,8,12,13,14,16,18,21,29,32,37,41,52,60,67,74,75,81,90,93,113,114,115,117,121,123,126,130,135,137,141,146,157,162,163,166,170,172,176,177,179,188,192,201]
Output: {-17, 37}
0-indexed input: [25,50,75,100,125,150,175,200,225,250]
1-indexed input: [26,51,76,101,126,151,176,201,226,251]
Output: {-28, 49}