Python 2.7 - 197 192 ไบต์
q='NESW';x,y,d=raw_input().split(',');x=int(x);y=int(y);d=q.find(d);v={0:'y+',1:'x+',2:'y-',3:'x-'}
for c in raw_input():exec['d+','d-',v[d]]['RL'.find(c)]+'=1;d=d%4'
print`x`+','+`y`+','+q[d]
อันที่จริงแล้วฉันภูมิใจในสิ่งนี้มาก
คำอธิบาย
ก่อนอื่นมาทำความสะอาดสิ่งนี้ ฉันใช้อัฒภาคแทนการแบ่งบรรทัดในหลาย ๆ ที่เพราะฉันคิดว่ามันทำให้ฉันเท่ห์ ที่นี่เป็นเรื่องปกติ (ยังคงเป็น 197 ไบต์มันไม่ได้ถูก ungolfed เลย) ใช่ยังคงมีเครื่องหมายอัฒภาค แต่อันที่จริงบันทึกไบต์
q='NESW'
x,y,d=raw_input().split(',')
x=int(x)
y=int(y)
d=q.find(d)
v={0:'y+',1:'x+',2:'y-',3:'x-'}
for c in raw_input():m=v[d];exec['d+','d-',m]['RL'.find(c)]+'=1;d=d%4'
print`x`+','+`y`+','+q[d]
เอาล่ะ!
q='NESW'
ครั้งแรกที่เรากำหนดเป็นสตริงq เราใช้มันสองครั้งต่อมาและ'NESW'len("q='NESW';qq") < len("'NESW''NESW'")
x,y,d=raw_input().split(',')
ที่นี่เราแบ่งบรรทัดแรกของการกระจายในแต่ละเครื่องหมายจุลภาค x COORD ของเราจะถูกเก็บไว้ในx, y ในและอักษรตัวแรกของเราในทิศทางyd
x=int(x)
y=int(y)
จากนั้นเราก็ทำให้ coords นั้นมีค่า (ฉันตกใจที่ฉันไม่สามารถคิดวิธีที่ดีกว่าในการแปลงสองสายเป็น ints ฉันพยายามx,y=map(int,(x,y))แต่มันกลับกลายเป็นอีกต่อไป)
d=q.find(d)
นี่จะเปลี่ยนทิศทางของเราเป็นจำนวนเต็ม 0 คือทิศเหนือ, 1 คือทิศตะวันออก, 2 คือทิศใต้และ 3 เป็นทิศตะวันตก
v={0:'y+',1:'x+',2:'y-',3:'x-'}
นี่คือที่ที่ความสนุกเริ่มต้นขึ้น
เมื่อเราไปทางทิศเหนือ, Y เพิ่มขึ้น 1 ดังนั้นพจนานุกรมนี้ใช้เวลา 0 และให้สตริง 'y+'สำหรับ "เพิ่ม y" มันให้ผลลัพธ์ที่คล้ายกันสำหรับทิศทางอื่น ๆ : y หรือ x ตามด้วย + หรือ -
เราจะกลับมาที่นี่
for c in raw_input():
m=v[d]
exec['d+','d-',m]['RL'.find(c)]+'=1;d=d%4'
ฉันได้ไปเพื่อเสรีภาพของ ungolfing อันนี้เล็กน้อย
สำหรับอักขระแต่ละตัวในอินพุตบรรทัดที่สองเราทำสองสิ่ง ก่อนอื่นเราตั้งค่าตัวแปรmเป็นพจนานุกรมของเราจากก่อนหน้านี้ให้เราสำหรับทิศทางปัจจุบันของเรา ไม่มีเหตุผลที่เราต้องการสิ่งนี้เกิดขึ้นทุกครั้ง แต่มันง่ายกว่าที่จะทำให้มันเกิดขึ้นเมื่อเราต้องการ
ต่อไปเราจะสร้างรายการที่มีสามองค์ประกอบ: 'd+', และ'd-' หมายเหตุบรรณาธิการ:ฉันคิดว่าฉันสามารถหนีไปได้โดยไม่ใช้ตัวแปรเลย ฉันคิดว่าฉันสามารถใส่ในรายการโดยตรง นั่นจะช่วยฉันสักสองสามไบต์ถ้าใช้งานได้ แต่ฉันไม่รู้สึกอยากทดสอบจนกว่าฉันจะทำคำอธิบายนี้เพื่อให้คุณสามารถจัดการได้ (ใช่มันใช้งานได้)mmv[d]
เราค้นหาอักขระปัจจุบันของอินพุตในสตริง 'RL' str.findส่งกลับ -1 หากไม่พบอักขระดังนั้นการแปลง R เป็น 0, L เป็น 1 และสิ่งอื่นใดเพื่อ -1 แน่นอนอินพุตอื่น ๆ ที่เรามีได้คือ M แต่มีตัวอักษรน้อยกว่าเพื่อให้ใช้ได้กับทุกสิ่ง
เราใช้หมายเลขนั้นเป็นดัชนีสำหรับรายการที่เราสร้าง รายการ Python เริ่มต้นที่จุดสิ้นสุดหากพวกเขาเป็นลบดังนั้นเราจะได้องค์ประกอบแรกถ้าอินพุตคือ R, ที่สองถ้าเป็น L และสุดท้ายถ้าเป็น M เพื่อประโยชน์ของความสะดวกสบายฉันจะถือว่า เราหันหน้าไปทางทิศเหนือ แต่มีหลักการที่คล้ายกันสำหรับทิศทางอื่น
ค่าที่เป็นไปได้ที่เราทำงานด้วยคือ'd+'สำหรับ R 'd-'สำหรับ L และ'y+'M จากนั้นเรายึดติด'=1;d=d%4'กับจุดสิ้นสุดของแต่ละค่า นั่นหมายถึงค่าที่เป็นไปได้ของเราคือ ...
d+=1;d=d%4
d-=1;d=d%4
y+=1;d=d%4
นั่นเป็นรหัสไพ ธ อนที่ถูกต้อง! นั่นเป็นรหัสไพ ธ อนที่ถูกต้องซึ่งทำในสิ่งที่เราต้องการจะทำสำหรับตัวอักขระอินพุตแต่ละตัว! ( d=d%4ส่วนหนึ่งเป็นเพียงการรักษาทิศทางของเรามีสติอีกครั้งไม่จำเป็นต้องทำทุกครั้ง แต่มันเป็นตัวละครน้อยลง)
สิ่งที่เราต้องทำคือรันโค้ดที่เราได้รับสำหรับตัวละครแต่ละตัวพิมพ์ออกมา (แปลงทิศทางของเรากลับไปเป็นสตริง) และเราก็ทำเสร็จแล้ว!