สร้างโปรแกรมหรือฟังก์ชั่นเพื่อแยกส่วนของตารางโดยการพลิก (กลับจุดศูนย์กลาง) เฉพาะแถวและคอลัมน์เท่านั้น
อินพุต
อินพุตจะเป็นตาราง 9x9 ของตัวเลขในรูปแบบของสตริง 9 บรรทัดดังนี้:
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
รูปแบบอินพุตนี้ไม่สามารถต่อรองได้ - โซลูชันใด ๆ ที่เป็น "โฆษณา" ที่มีรูปแบบอินพุตจะถือว่าไม่ถูกต้อง
เอาท์พุต
เอาต์พุตควรเป็นรายการของการเคลื่อนไหวแบบพลิกซึ่งเมื่อใช้กับอินพุตตามลำดับที่กำหนดควรสร้างกริดเป้าหมายใหม่
ตัวอย่างเอาต์พุต (ไม่ใช่โซลูชันสำหรับตัวอย่างอินพุตก่อนหน้า):
28IF5D3EAB9G3
รูปแบบผลลัพธ์นี้ยังไม่สามารถต่อรองได้ ไม่ควรมีการขึ้นบรรทัดใหม่หรือเว้นวรรคในเอาต์พุตเฉพาะอักขระ1
- 9
และA
- I
(อักขระตัวพิมพ์เล็กสามารถใช้ได้กับอักขระตัวพิมพ์ใหญ่หากคุณต้องการ)
กริดเป้าหมาย (สถานะที่คุณต้องการสร้างใหม่) มีดังนี้:
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
ควรใช้ตัวเลข1
- 9
เป็นคำแนะนำในการพลิกแถวและตัวอักษรA
- I
ควรใช้สำหรับคอลัมน์ สิ่งนี้แสดงอยู่ด้านล่างพร้อมกริดในสถานะที่ถูกกู้คืน
ABCDEFGHI
|||||||||
vvvvvvvvv
1 -> 123456789
2 -> 234567891
3 -> 345678912
4 -> 456789123
5 -> 567891234
6 -> 678912345
7 -> 789123456
8 -> 891234567
9 -> 912345678
ดังนั้น8
วิธีพลิกแถวที่สองจากด้านล่างและF
วิธีพลิกคอลัมน์ที่หก
ในกรณีที่ไม่มีวิธีแก้ปัญหาที่เป็นไปได้โปรแกรมควรสิ้นสุดโดยไม่แสดงผลลัพธ์ใด ๆ เลย
ตัวอย่าง
การป้อนข้อมูล:
987654321
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
เอาท์พุท:
1
ในกรณีนี้เฉพาะแถวบนสุดจำเป็นต้องมีการพลิกเพื่อกลับสู่สถานะเป้าหมาย
การป้อนข้อมูล:
123456788
234567897
345678916
456789125
567891234
678912343
789123452
891234561
912345679
เอาท์พุท:
I
ในกรณีนี้เฉพาะคอลัมน์สุดท้าย (คอลัมน์I
) ต้องพลิกเพื่อสร้างสถานะเป้าหมายใหม่
การป้อนข้อมูล:
123456788
798765432
345678916
456789125
567891234
678912343
789123452
891234561
912345679
เอาท์พุท:
2I
ในกรณีนี้เราต้องพลิกแถว2
แล้วพลิกคอลัมน์I
เพื่อกลับสู่สถานะเป้าหมาย
หมายเหตุ:
- โปรดระบุตัวอย่างการใช้งานในคำตอบของคุณ
- ผลลัพธ์ที่ได้รับไม่จำเป็นต้องเป็นลำดับที่สั้นที่สุดที่จะคืนสถานะเป้าหมาย - ลำดับใด ๆ ที่ส่งคืนสถานะเป้าหมายจะดำเนินการตราบเท่าที่มันใช้งานได้ (เช่นตราบเท่าที่ฉันสามารถทดสอบได้)
- ฉันจะพยายามทดสอบคำตอบแต่ละข้อและถอนรากถอนโคนทั้งหมดที่ใช้ได้และเห็นได้ชัดว่ามีความพยายามในการเล่นกอล์ฟ
- นี่คือการแข่งขันที่เปิดกว้าง - ฉันจะยอมรับคำตอบที่สั้นที่สุดบางครั้งในสัปดาห์หน้า แต่ถ้าคำตอบที่ถูกต้องใหม่มาพร้อมที่จะสั้นกว่าที่จุดใด ๆ ในอนาคตผมจะเปลี่ยนคำตอบที่ได้รับการยอมรับที่จะสะท้อนให้เห็นว่า
รางวัลที่ได้รับการตั้งค่าที่ 200 ชื่อเสียงสำหรับคำตอบที่สั้นที่สุดที่ได้รับจาก23:59:59 (GMT) บน 26/01/2014โปรดปรานเป็นรางวัลให้กับโฮเวิร์ดเขาแก้ปัญหา GolfScript 268 ตัวอักษร
การทดสอบ
โปรดให้ผลลัพธ์ของโปรแกรมของคุณสำหรับสามกริดการทดสอบต่อไปนี้พร้อมคำตอบของคุณ:
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
927354389
194762537
319673942
351982676
567891234
523719844
755128486
268534198
812546671
813654789
738762162
344871987
341989324
567891234
576217856
619623552
194435598
926543271
ฉันได้สร้างโปรแกรม Python ขนาดเล็กเพื่อสร้างกริดที่ถูกต้องสำหรับวัตถุประสงค์ในการทดสอบ:
import random
def output(array):
print '\n'.join([''.join(row) for row in array])
def fliprow(rownum, array):
return [row[::1-2*(rownum==idx)] for idx,row in enumerate(array)]
def flipcol(colnum, array):
return zip(*fliprow(colnum, zip(*array)))
def randomflip(array):
op=random.randint(0,1)
row=random.randint(0,9)
if(op==1):
return fliprow(row, array)
else:
return flipcol(row, array)
def jumble(array):
arraycopy=array
for i in range(10, 1000):
arraycopy=randomflip(arraycopy)
return arraycopy
startarray=[
['1','2','3','4','5','6','7','8','9'],
['2','3','4','5','6','7','8','9','1'],
['3','4','5','6','7','8','9','1','2'],
['4','5','6','7','8','9','1','2','3'],
['5','6','7','8','9','1','2','3','4'],
['6','7','8','9','1','2','3','4','5'],
['7','8','9','1','2','3','4','5','6'],
['8','9','1','2','3','4','5','6','7'],
['9','1','2','3','4','5','6','7','8']]
print output(jumble(startarray))
(-2, 4)
, (2, 4)
, หรือ(2, -4)
(-2, -4)
A1
) B1
และย้ายไปยัง คุณจะได้รับ1
ไปยังตำแหน่งที่B1
แต่มันจะเป็นกระเบื้องจากไม่กระเบื้องจากB9
A1
เนื่องจากเราอนุญาตให้พลิกทั้งแถว / คอลัมน์ทั้งหมดได้เท่านั้นส่วนบนสุด 1 จะอยู่ในหนึ่งในสี่มุมนอกสุดเท่านั้น หากฉันเข้าใจผิดกฎโปรดแจ้งให้เราทราบ