Puzzle Cover ที่แน่นอน


10

ท้าทาย

ให้ชุดจดหมายที่มีกลุ่มจัดเรียงไว้บนกระดานเพื่อให้ครอบคลุมพื้นที่ทั้งหมด

การเป็นตัวแทนคณะกรรมการ (aka SHIP DECK)

  • กระดานเป็นตาราง 6x6
  • จะมีทั้งหมด 36 ช่อง
  • คอลัมน์มีการทำเครื่องหมาย AF
  • แถวถูกทำเครื่องหมาย 1-6

ตัวอย่าง:

    A   B   C   D   E   F
  +---+---+---+---+---+---+
1 :   :   :   :   :   :   :
  +---+---+---+---+---+---+
2 :   :   :   :   :   :   :
  +---+---+---+---+---+---+
3 :   :   :   :   :   :   :
  +---+---+---+---+---+---+
4 :   :   :   :   :   :   :
  +---+---+---+---+---+---+
5 :   :   :   :   :   :   :
  +---+---+---+---+---+---+
6 :   :   :   :   :   :   :
  +---+---+---+---+---+---+

อินพุต (หรือที่รู้จักว่า CRATES)

  • สตริงหลายบรรทัดที่มีชุดของตัวอักษรที่จัดกลุ่ม
  • ลังทำจากกลุ่มของตัวอักษรที่เหมือนกัน
  • ลังเป็น IMMUTABLE ซึ่งหมายความว่าไม่สามารถหมุนหรือพลิกได้
  • จุดเริ่มต้นของแต่ละลังอยู่ที่ด้านบนซ้าย (ควรนำมาพิจารณาเมื่อย้ายลังไปยังสำรับ)
  • จากจุดบนซ้ายของลังสี่เหลี่ยมจตุรัสที่เหมือนกันดังต่อไปนี้จะอยู่ทางด้านขวาหรือด้านล่างเท่านั้น
  • ตัวอักษรใด ๆ ที่สามารถใช้เพื่อเป็นตัวแทนของลัง ลังเริ่มต้นที่ตัวอักษร[a]และเลื่อนตัวอักษรขึ้น
  • ลังจะถูกระบุด้วยจดหมายของพวกเขา (เช่นลัง A, ลัง B, เป็นต้น)
  • จำนวนของลังสามารถเปลี่ยนแปลงได้ (ไม่ใช่ 10 เสมอแม้จะมีตัวอย่างที่ให้มา)
  • มี 24 อักขระคั่นแต่ละบล็อกของลังต่อบรรทัด (start of [a] ถึง start [b] คั่นด้วย 24 ตัวอักษร ฯลฯ )

ตัวอย่าง:

[a][a][a]               [b]                     [c][c]               
      [a]               [b][b][b]                  [c]               
      [a]               [b][b]                                       

[d]                     [e]                     [f][f][f][f][f]      
[d][d]                  [e]                                          
[d][d]                  [e]                                          
                        [e]                                          
                        [e][e]                                       

[g]                     [h]                     [i]                  
[g]                                             [i]                  
                                                [i]                  

เอาท์พุท

จำเป็นต้องให้คุณพิมพ์ชุดคำสั่งที่วางลังในตำแหน่งบนเด็คเพื่อให้ครอบคลุมอย่างสมบูรณ์ (ไม่มีช่องว่าง)

รูปแบบคำสั่งเป็นเช่นนั้น:

HAUL <crate> TO <column> <row>

เช่น HAUL E ถึง A 1

สำหรับการชี้แจงจะมีวิธีแก้ปัญหาสำหรับอินพุตที่ให้ไว้เสมอ

กรณีทดสอบ <- คลิกเพื่อเพิ่มเติม

อินพุต

[a][a][a]               [b]                     [c][c][c]            
   [a][a]               [b]                                          
   [a]                  [b][b]                                       
                        [b][b]                                       

[d]                     [e]                     [f]                  
[d]                                             [f]                  
[d]                                             [f]                  
[d]                                                                  
[d]                                                                  

[g][g]                  [h]                     [i]                  
                                                [i][i]               
                                                   [i]               
                                                   [i][i]            

[j][j][j]                                                            

เอาท์พุต

HAUL I TO A 1
HAUL B TO A 3
HAUL A TO B 1
HAUL J TO D 6
HAUL D TO F 1
HAUL F TO E 1
HAUL C TO C 5
HAUL G TO D 4
HAUL E TO D 3
HAUL H TO C 6

ผลลัพธ์:

    A   B   C   D   E   F
  +---+---+---+---+---+---+
1 : i : a : a : a : f : d :
  +---+---+---+---+---+---+
2 : i : i : a : a : f : d :
  +---+---+---+---+---+---+
3 : b : i : a : e : f : d :
  +---+---+---+---+---+---+
4 : b : i : i : g : g : d :
  +---+---+---+---+---+---+
5 : b : b : c : c : c : d :
  +---+---+---+---+---+---+
6 : b : b : h : j : j : j :
  +---+---+---+---+---+---+

SCORING

นี่คือดังนั้นคำตอบที่สั้นที่สุดในตัวละครชนะ


ใครจะคิดว่าไม่มีลังจะมีหลุมใด ๆ เลย?
Jonathan Frech

ฉันคิดว่าอาจมีได้มากถึงยี่สิบหกลัง
Jonathan Frech

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

คำตอบ:


5

Python 3.6, 435 437 385 331 ไบต์

โทรF()ด้วยสายอักขระลัง

def R(b,d,i=0):
 if not d:return 1
 (k,x),*d=d
 while x:
  if x&b<1and R(b|x,d):print(f'HAUL {k.upper()} TO {i%7+65:c} {i//7+1}');return 1
  i+=1;x>>=1
def F(t,d={},e={}):
 r=c=0
 for a in t:
  if'`'<a<'{':e[a]=x,y=e.get(a,(r,c));d[a]=d.get(a,0)+(1<<(48-(r-x)*7-(c-y)//3))
  elif'\n'==a:r+=1;c=-1
  c+=1
 R(4432676798719,d.items())

จัดการให้กอล์ฟมันมากขึ้น:

  1. แยกสตริงลังโดยตรงแทนที่จะใช้reห้องสมุด
  2. ใช้ setdefault เพื่อบันทึกพิกัดแรกของชุดของลังเพื่อให้ bitmask สามารถสร้างขึ้นได้เมื่อวิเคราะห์สตริงสตริง กำจัดห่วงสำหรับ
รุ่นก่อนหน้า
import re
def R(b,d,i=0):
 if not d:return 1
 (k,x),*d=d
 while x:
  if not x&b and R(b|x,d):print(f'HAUL {k.upper()} TO {i%7+65:c} {i//7+1}');return 1
  i+=1;x>>=1
def F(t,d={},n=0):
 for r in t.split('\n'):
  for m in re.finditer(r'(.)]',r):d[m[1]]=d.get(m[1],[])+[(n,m.start())]
  n+=1
 R(4432676798719,[(k,sum(1<<(48-(r-v[0][0])*7-(c-v[0][1])//3)for r,c in v))for k,v in d.items()])

ปรับโครงสร้างรหัสใหม่เพื่อลบลูปที่ซ้ำซ้อน

  1. รหัสก่อนหน้าสร้างรายชื่อของทุกตำแหน่งของลังในและซ้ำแล้วกว่ารายการในการF() R()รหัสใหม่สร้างหนึ่งตำแหน่งของลังในF()และR()พยายามตำแหน่งที่เป็นไปได้ทั้งหมด

  2. ในรหัสก่อนหน้านี้R()เก็บรวบรวมเป็นทางออกที่เป็นไปได้ในaและF()แล้วซ้ำมากกว่าการแก้ปัญหากลับ ในรหัสใหม่ให้R()พิมพ์คำสั่ง HAUL โดยตรง

รุ่นก่อนหน้า
import re
def R(b,d,a=[]):
 if not d:yield a
 for x in d[0]:
  if not x&b:yield from R(b|x,d[1:],a+[x])
def F(t,d={},n=0):
 for r in t.split('\n'):
  for m in re.finditer(r'(.)]',r):d[m[1]]=d.get(m[1],[])+[(n,m.start())]
  n+=1
 for k,j in enumerate(next(R(4432676798719,[[sum(1<<(48-(r-v[0][0])*7-(c-v[0][1])//3)for r,c in v)>>i for i in range(48)]for k,v in d.items()]))):x=51-len(bin(j));print(f'HAUL {k+65:c} TO {x%7+65:c} {x//7+1}')

คำอธิบาย

แนวคิดพื้นฐานคือการเป็นตัวแทนของดาดฟ้าเรือและลังเป็นแผนที่บิต โดยการใช้บิตแมปการเคลื่อนย้ายลังจะเป็นการเปลี่ยนบิตแมปและการตรวจสอบการทับซ้อนระหว่างลังกลายเป็นบิตฉลาดและทดสอบเป็นศูนย์

รหัสไม่ได้รับการตอบกลับ:

import re

def F(crate_string):                                                                 #  3
  coords = {} 
  row_no = 0 

  for row in crate_string.split('\n'):                                               #  7

    for match_obj in re.finditer('(.)]', row):                                       #  9

      crate_name = match_obj[1]                                                      # 11
      col_no = match_obj.start()                                                     # 12
      coords[crate_name] = coords.get(crate_name, []) + [(row_no, col_no)]           # 13

    row_no += 1

  normed = {k:[(r-v[0][0], (c-v[0][1])//3) for r,c in v] for k,v in coords.items()}  # 17
  bitmaps = [(k,sum(1<<(48 - r*7 - c) for r,c in v)) for k,v in normed.items()]      # 18

  R(4432676798719, bitmaps)                                                          # 20

def R(used, bitmaps):                                                                # 22
  if not bitmaps:                                                                    # 23
    return True                                                                      # 24
  shift = 0                                                                          # 25
  (crate_name, crate_bitmap),*bitmaps = bitmaps                                      # 26

  while crate_bitmap:                                                                # 28
    if not used & crate_bitmap:                                                      # 29
      if R(used | crate_bitmap, bitmaps):                                            # 30
        print(f'HAUL {crate_name.upper()} TO {shift%7 + 65:c} {shift//7 + 1}')       # 31
        return True                                                                  # 32

    shift += 1                                                                       # 34
    crate_bitmap >>= 1                                                               # 35

  return False                                                                       # 37

F()แยกวิเคราะห์สตริงการกำหนดลังและสร้างบิตแมป regex ค้นหา (บรรทัด 9) แต่ละบรรทัดของสตริงการกำหนดลังสำหรับลัง (ตัวอักษรตามด้วย ']' เมื่อพบการแข่งขันจะมีการเพิ่ม (แถว, สี) ที่เกี่ยวข้องลงในพจนานุกรมที่ป้อนโดยตัวอักษร (บรรทัดที่ 11-13) สำหรับตัวอย่างสตริงการกำหนดลังที่กำหนดในปัญหา:

coords = {'a': [(0, 5), (0, 8), (0, 11), (1, 5), (1, 8), (1, 11)], 
          'b': [(0, 29), (1, 29), (2, 29)], 
               ... }

พิกัดของแต่ละลังจะถูกทำให้เป็นมาตรฐาน (บรรทัดที่ 17) เพื่อให้แต่ละกล่องเริ่มต้นที่ (0,0) และแต่ละบล็อกกว้างหนึ่งหน่วย (แทนที่จะเป็น 3 a la '[a]')

normed = {'a': [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)],
          'b': [(0, 0), (1, 0), (2, 0)],
               ... }

บิตแมปจะถูกสร้างขึ้นสำหรับแต่ละลังตามพิกัดปกติ (บรรทัดที่ 18)

สำรับถือว่าเป็นตาราง 7 x 7 คอลัมน์ 'G' และแถว 7 ใช้เพื่อตรวจจับเมื่อรูปร่างยื่นออกจากบอร์ด บิตแมปมี 1 ถ้าลังจะครอบครองสี่เหลี่ยมที่สอดคล้องกันบนดาดฟ้า บิต 48 ถึงบิต 42 สอดคล้องกับสี่เหลี่ยม A1 ถึง A7 บิต 41 ถึง 35 สอดคล้องกับสี่เหลี่ยม B1 ถึง B7 และอื่น ๆ

bitmaps = [('a', 0b1110000_1110000_0000000_0000000_0000000_0000000_0000000),
           ('b', 0b1000000_1000000_1000000_0000000_0000000_0000000_0000000),
           ...
           ]

R(used, bitmaps)จากนั้นใช้บิตแมปเพื่อค้นหาตำแหน่งลังซ้ำโดยไม่พยายามวางสองลังในตารางเดียวกัน usedเป็นบิตมาสก์ที่ระบุว่าช่องสี่เหลี่ยมใดที่ไม่สามารถใช้งานได้เนื่องจากพวกมันถูกครอบครองโดยลังหรือเพราะอยู่นอกบอร์ด (เช่นคอลัมน์ G และแถว 7) bitmapsเป็นรายการของลังที่ยังต้องถูกวางไว้

เคสฐานสำหรับการเรียกซ้ำคือเมื่อไม่มีลังเหลือที่จะวางอีกต่อไปเช่นbitmapsว่างเปล่า (บรรทัดที่ 23) ในกรณีนี้ True ถูกส่งคืนเพื่อระบุวิธีแก้ไข

มิฉะนั้นชื่อลังและบิตแมปของมันจะโผล่ออกมาจากรายการบิตแมป (บรรทัดที่ 26) ในขณะที่ลังบิตแมปไม่ว่างเปล่า (บรรทัดที่ 28) ตรวจสอบว่าการวางตำแหน่งลังปัจจุบันแสดงโดยบิตแมปลังลังขัดแย้งกับลังที่วางไว้ก่อนหน้านี้หรือไม่ ที่บรรทัดที่ 29 not used & crate_bitmapเป็นเท็จถ้าusedและcrate_bitmapทั้งคู่มี 1 ในตำแหน่งบิตเดียวกันแสดงถึงข้อขัดแย้ง หากไม่มีความขัดแย้งR()จะถูกเรียกซ้ำ (สาย 30) เพื่อลองและวางลังที่เหลืออยู่

หากการเรียกซ้ำเพื่อR()ส่งคืน True หมายความว่าพบวิธีแก้ไขปัญหาและตำแหน่งปัจจุบันของลังเป็นส่วนหนึ่งของโซลูชันนั้น ดังนั้นคำสั่งที่เกี่ยวข้องเพื่อย้ายลังจะถูกพิมพ์และ True จะแพร่กระจายการเรียกซ้ำ (สาย 31-32)

เมื่อสร้างขึ้นในF()แต่ละบิตแมปลังแสดงถึงช่องสี่เหลี่ยมที่จะถูกครอบครองโดยลังถ้าพวกเขาอยู่ที่ตำแหน่ง A1 การเลื่อนบิตแมปหนึ่งบิตไปทางขวาสอดคล้องกับการย้ายลังไปยังตำแหน่ง A2 การเลื่อนขวาเจ็ดบิตสอดคล้องกับการย้ายลังไม้ไปที่ B1 เป็นต้นตัวอย่างบิตแมปต่อไปนี้แสดงถึงลัง 'a' ที่ตำแหน่งต่าง ๆ :

0b1110000_1110000_0000000_0000000_0000000_0000000_0000000  represent crates 'a' at A1
0b0111000_0111000_0000000_0000000_0000000_0000000_0000000  represent crates 'a' at A2
0b0011100_0011100_0000000_0000000_0000000_0000000_0000000  represent crates 'a' at A3
                                 ...
0b0000000_1110000_1110000_0000000_0000000_0000000_0000000  represent crates 'a' at B1
                                 ...

หากตำแหน่งที่เป็นไปได้ของลังไม่ทำงานเพราะขัดแย้งกับลังที่วางไว้ก่อนหน้า (บรรทัด 30) หรือเพราะไม่มีตำแหน่งที่ถูกต้องของลังที่เหลืออยู่ (บรรทัด 31) ลังจะถูกย้ายไปยังตำแหน่งที่แตกต่างกันโดยการเลื่อน bitmask ไปทางขวาหนึ่งบิต (บรรทัด 35) Shiftติดตามจำนวนที่แผนที่บิตถูกเลื่อนซึ่งสอดคล้องกับตำแหน่งปัจจุบันของลัง

หากบิตแมปว่างเปล่า (ศูนย์) แสดงว่าได้ลองตำแหน่งที่เป็นไปได้ทั้งหมดแล้ว False ถูกส่งคืน (บรรทัดที่ 37) เพื่อระบุความล้มเหลวเพื่อให้การเรียกไปยังR()ก่อนหน้านี้ในการเรียกซ้ำจะลองตำแหน่งอื่นสำหรับลังไม้

เพื่อให้แน่ใจว่าลังไม่ได้ขยายออกจากด้านข้างของสำรับบิตที่สอดคล้องกับคอลัมน์ G และแถว 7 จะถูกตั้งค่าusedสำหรับการโทรเริ่มต้นไปที่R()(บรรทัด 20)

4432676798719 เป็นสำรับว่างเปล่าที่สอดคล้องกับ 0b0000001000000100000010000001000000100000011111111


เยี่ยมมาก! ฉันเพิ่งลองสิ่งนี้ในหนึ่งในกรณีทดสอบ แต่มันพยายามดึงลังไปที่ 0 แถว แต่นั่นไม่ใช่แถวที่ถูกต้อง มีแถวที่ 1-6 เท่านั้น คิดว่ามันแค่ต้องการ +1 สำหรับการแบ่ง :)
Jonathan Picazo

@JMPicazo - แก้ไข
RootTwo

5

Python 2 , 864 ไบต์

  • ขอบคุณStephen ที่พบข้อผิดพลาด
  • การวิเคราะห์สตริงสามารถเล่นกอล์ฟได้อย่างมีนัยสำคัญเนื่องจากรูปแบบอินพุตมีความเข้มงวดกว่าสิ่งที่สามารถจัดการได้
def V(C,S=0,D=-1,J=0,H=[],E=enumerate,R=range,r=str.replace,s=str.split,e="!"):
 if[]<C*0:
	J=0;N=[J]*26;K=[]
	for c in s(r(r(r(C,"[",""),"]",""),"   ","*"),2*"\n"):
	 c=[list(_)for _ in s(c,"\n")]
	 for x,_ in E(c[0]):
		if all(c[y][x]<">"for y,_ in E(c)):
		 for y,_ in E(c):c[y][x]=e
	 for j,y in E(c):
		y="".join(y)
		while"!!"in y:y=r(y,2*e,e)
		c[j]=s(y,e)
	 K+=[],[],[],[];J+=4
	 for y in c:
		while""in y:y.remove("")
		for j,x in E(y):K[j+J-4]+=x,
	for k in K:
	 if all(k)and k:N[ord(k[0][0])-97]=[[x>"*"for x in y]for y in k]
	while 0in N:N.remove(0)
	C=N
 if[]>S:S=[0]*36
 if-~D>0:
	Y=J/6;j=0
	for y in C[D]:
	 X=J%6
	 for x in y:
		if x:
		 if X>5or Y>5or S[X+Y*6]:return
		 S[X+Y*6]=x
		X+=1
	 Y+=1
 if~-len(C)==D:
	if 0in S:return
	for h in H[1:]+[J]:print"HAUL %c TO %c %d"%(65+j,65+h%6,h/6+1);j+=1
	j/0
 for j in R(36):V(C,S[:],-~D,j,H*(D>=0)+[J])

ลองออนไลน์!

คำอธิบาย

ไบต์จำนวนมากถูกใช้เพื่อวิเคราะห์ลังสองมิติที่ป้อนเข้าด้วยสายอักขระเดียว ลังถูกแสดงเป็นรายการแบบซ้อนของค่าบูลีน
หลังจากลังถูกแจงแล้วฟังก์ชันจะพิจารณาตำแหน่งที่เป็นไปได้ทั้งหมดของลังทั้งหมด ในการทำเช่นนั้นมันจะเรียกตัวเองซ้ำ ๆ เมื่อพบตำแหน่งที่เป็นไปไม่ได้ (ถ้าลังจะวางไว้นอกดาดฟ้าหรือบนอีกด้านหนึ่งของลัง) มันจะสังหารกิ่งต้นไม้ที่เรียกซ้ำปัจจุบันเพื่อปรับปรุงประสิทธิภาพ
เมื่อเห็นว่าการรวมตำแหน่งบางอย่างทำให้เกิดเด็คที่ครอบคลุมอย่างสมบูรณ์มันจะพิมพ์ประวัติตำแหน่งของลังที่บันทึกไว้และออกจากทั่วโลกโดยพยายามแบ่งส่วนที่สิ้นหวัง คำแนะนำการลากจะถูกจัดเรียงตามตัวอักษร


Python 2 , 812 ไบต์

def f(C,M=[],d=0,R=range,E=enumerate,L=len):
 if C*0=="":
	N=[0]*26;K=[];J=0
	r=str.replace
	for c in r(r(r(C,"[",""),"]",""),"   ","*").split("\n\n"):
	 c=[list(_)for _ in c.split("\n")]
	 for x in R(L(c[0])):
		if all(c[y][x]=="*"for y in R(L(c))):
		 for y in R(L(c)):c[y][x]="!"
	 for j,y in E(c):
		y="".join(y)
		while"!!"in y:y=r(y,"!!","!")
		c[j]=y.split("!")
	 for _ in"_"*L(c):K+=[],
	 for y in c:
		for j,x in E(y):K[j+J]+=x,
	 J+=L(c)
	for k in K:
	 if all(k)and k:N[ord(k[0][0])-97]=[[x!="*"for x in y]for y in k]
	while 0in N:N.remove(0)
	C=N
 if d==L(C):
	j=0;S=[j]*36
	for c,k in E(C):
	 Y=M[c]/6
	 for y in k:
		X=M[c]%6
		for x in y:
		 if X<6>Y:S[X+Y*6]|=x
		 X+=1
		Y+=1
	if 0in S:return
	for m in M:print"HAUL %c TO %c %d"%(65+j,65+m%6,1+m/6);j+=1
	j/0
 for j in R(36):f(C,M*(d>=0)+[j],d+1)

ลองออนไลน์!

คำอธิบาย

สตริงลังถูกแยกวิเคราะห์และแปลงเป็นรังบูลีนที่แสดงรายการแทนแต่ละลัง
ฟังก์ชั่นวนซ้ำจะสร้างรายการความยาวที่เป็นไปได้ทั้งหมดเท่ากับจำนวนลังที่บรรจุไว้ด้วยจำนวนเต็ม0 <= x < 36(ตำแหน่งดาดฟ้าเรือที่เป็นไปได้ทั้งหมด) ทุกรายการจะถูกตีความว่าเป็นคำสั่งเพื่อจัดตำแหน่งลังทั้งหมดและทดสอบ หากรายการคำสั่งที่ทดสอบได้ผลลัพธ์ในเด็คโดยไม่มีช่องว่างรายการคำสั่งจะต้องถูกต้องและถูกพิมพ์ออกมา
ฉันไม่ได้ทดสอบในกรณีทดสอบที่ให้มาแม้ว่าในสถานการณ์ที่มีลังน้อยลง (ดูลิงค์ TIO) เพราะขั้นตอนวิธีการค้นหาผ่านทุกการจัดเรียงเป็นไปได้ก็พยายามที่จะมองไปที่36**10 = 3.656e15พวกเขา แต่ในทางทฤษฎีแล้วมันก็ยังควรใช้งานได้


หากคุณสามารถทำให้มันทำงานกับกรณีที่ป้อนให้แล้วนั่นจะทำให้คำตอบที่คุ้มค่านี้ :) ไม่งั้นก็ทำงานได้ดีและนี่เป็นข้อมูลที่มีประโยชน์!
Jonathan Picazo

@JonathanMicaelPicazo ผู้คนที่อยู่ในโค้ดกอล์ฟชอบเขียนคำตอบที่สั้นลงสองสามไบต์ แต่อาจยุติลงหลังจากการเสียชีวิตจากความร้อนของจักรวาล ...
Stephen

(น่าเศร้า) คุณอาจจะต้องย้ายค่าเริ่มต้นสำหรับH/ Mออกจากการประกาศฟังก์ชั่นเนื่องจากมีพวกเขาในการประกาศทำให้ฟังก์ชั่นไม่สามารถนำมาใช้ใหม่ Python ol 'ดี
สตีเฟ่น

1
@JonathanMicaelPicazo ฉันหวังว่าจะแก้ไขสตริงตัวแยกวิเคราะห์ของฉันและเชื่อมโยงกับกรณีทดสอบใหม่ของคุณ จำนวนลังสามใช้เวลานานเกินไปบน TIO แม้ว่าคุณจะเปลี่ยนลัง[i]ด้วย[b]แต่ก็ใช้งานได้ อัลกอริทึมสามารถปรับปรุงได้โดยการจัดเรียงลังแรกเพื่อให้กลุ่มทดสอบได้รับการทดสอบก่อนตัวเล็ก
Jonathan Frech

1
@ JonathanFrech ฉันเข้าใจว่า ... เอาละเจ้าจะเต็มใจที่จะไปให้ไกลกว่านี้แล้วปรับปรุงมันเพื่อที่จะได้ทำการจัดเรียงลังไม้จาก bulkiest เป็นใหญ่สุดหรือไม่? ฉันได้ให้กรณีทดสอบที่แตกต่างกันมากมายและบางส่วนได้รับการแก้ไขอย่างรวดเร็วในขณะที่คนอื่นมักจะไม่หมดเวลาหรือไม่ได้รับการแก้ไข ... ฉันเข้าใจถ้าคุณไม่มีเวลา แต่ ฉันคิดว่าอย่างน้อยก็คุ้มค่าที่จะถาม!
Jonathan Picazo

2

JavaScript, 366

k=>(x=y=0,C={},B=[...k].map((c,p)=>(c<' '?(x=0,++y):c<'a'?++x:(c=C[c=parseInt(c,36)]||(C[c]=[[],x,y]))[0].push((y-c[2])*7+(x++-c[1])/3),p<8|p>48|p%7<1)),S=[],R=i=>!C[i]||B.some((v,p)=>v?0:C[i][0].every(q=>B[q+=p]?0:B[q]=i)&&R(i+1,S[i-10]=p)||!C[i][0].map(q=>B[q+=p]==i?B[q]=0:0)),R(10),S.map((v,c)=>`HAUL ${(c+10).toString(36)} TO ${(v%7+9).toString(36)} ${v/7|0}`))

หมายเหตุ: ฟังก์ชั่นนี้สามารถแยกวิเคราะห์อินพุตที่เล็กลงเนื่องจากไม่สนใจระยะห่าง 24 ตัวอักษรและอนุญาตให้ใช้รูในลังได้

ฉันคิดว่ามันสามารถตีกอล์ฟได้อีกเล็กน้อย แต่ตอนนี้มันสั้นและไม่ช้าเกินไปดังนั้นฉันชอบมันมาก

น้อย golfed

k=>(
  // input parsing
  var x = 0, y = 0, // current position   
      C = []; // crates 
  [...k].forEach( c => 
  c < ' ' 
  ? (x = 0, ++y) // found a newline, increment y, reset x
  : c < 'a'
    ? ++x // not a letter, increment x
    : (  // found a letter, update the crate
        c = parseInt(c,36), // letter to number (10..35)
        c = C[c], // current crate in c
        c || (C[c]=[[], x, y]), // if new crate, initialize it setting base position
        c[0].push((y - c[2])*7 + (x-c[1])/3) // add current position
        ++x // increment x also
      )
  );
  var B = [...Array(7*8)] // empty board. in golfed code I reuse k to build B. k is big enough
  B = B.map( (_, p) => // set borders
     p < 8 | p > 48 | p%7<1
  )   
  var S = [] // output steps

  // recursive function to fill board
  var R = i => 
    ! C[i] // if crate at position i exists (else, we have found a solution and return true)
    ||
    B.some( (v,p) => // try to put crate at each position in B
      v // current cell is used already ?
      ? 0 // used, return false
      : C[i][0].every( q => // try this position, must place every part 
          B[q+=p] // current position in B is used ?
          ? 0 // used, stop, return false
          : B[q]=i // mark as used
        ) 
        && R(i+1,S[i-10]=p) // ok for current crate, try next, mark step
        || // else, fail for current crate, clear position marked
        !C[i][0].map(q => 
          B[q+=p]==i ? B[q]=0:0 // clear if it was set to 'i'
        )
    ),
  R(10) // start recursive fill at position 10 (that is 'a')
  // it returns true if ok, but we don't care as we are assured a solution exists
  // now just format output
  return S.map((v,c)=>`HAUL ${(c+10).toString(36)} TO ${(v%7+9).toString(36)} ${v/7|0}`)
)

กรณีทดสอบมากมาย

var F=
k=>(x=y=0,C={},B=[...k].map((c,p)=>(c<' '?(x=0,++y):c<'a'?++x:(c=C[c=parseInt(c,36)]||(C[c]=[[],x,y]))[0].push((y-c[2])*7+(x++-c[1])/3),p<8|p>48|p%7<1)),S=[],R=i=>!C[i]||B.some((v,p)=>v?0:C[i][0].every(q=>B[q+=p]?0:B[q]=i)&&R(i+1,S[i-10]=p)||!C[i][0].map(q=>B[q+=p]==i?B[q]=0:0)),R(10),
// Just for debug: return the fill in addition to the steps
[B.slice(7,50).map((c,i)=>i%7?c.toString(36):'\n'),
S.map((v,c)=>`HAUL ${(c+10).toString(36)} TO ${(v%7+9).toString(36)} ${v/7|0}`)])

var Test = [
 "[a][a][a]               [b]                     [c][c]\n      [a]               [b][b][b]                  [c]\n      [a]               [b][b]\n\n[d]                     [e]                     [f][f][f][f][f]\n[d][d]                  [e]\n[d][d]                  [e]\n                        [e]\n                        [e][e]\n\n[g]                     [h]                     [i]\n[g]                                             [i]\n                                                [i]"
,"[a][a][a]               [b]                     [c][c][c]\n   [a][a]               [b]\n   [a]                  [b][b]\n                        [b][b]\n\n[d]                     [e]                     [f]\n[d]                                             [f]\n[d]                                             [f]\n[d]\n[d]\n\n[g][g]                  [h]                     [i]\n                                                [i][i]\n                                                   [i]\n                                                   [i][i]\n\n[j][j][j]"
,"[a]                     [b][b][b]               [c]\n[a]                           [b]\n[d]                     [e]                     [f][f]\n[d]                     [e]\n[d][d][d]\n[g]                     [h]                     [i]\n[g]                     [h][h][h]               [i]\n                              [h]               [i][i]\n                              [h]                  [i]\n                                                   [i]\n[j]                     [k][k][k]\n[j]\n[j]"
,"[a][a][a][a]            [b][b][b]               [c]\n                              [b]               [c]\n                              [b]               [c][c]\n                                                   [c][c]\n[d]                     [e]                     [f]\n[d]                                             [f][f][f]\n[g]                     [h]                     [i][i]\n                        [h][h][h]               [i][i]\n                           [h][h]\n[j]\n[j]\n[j]"
,"[a]                     [b]                     [c][c]\n[a]                     [b]\n[a]\n[d][d]                  [e]                     [f][f][f]\n[d][d][d]\n[g]                     [h]                     [i]\n                        [h]\n                        [h]\n                        [h][h]\n                           [h]\n[j]                     [k][k][k]\n[j][j]                     [k][k]\n[j][j][j]                     [k]"
,"[a]                     [b][b][b]               [c]\n[a]                                             [c]\n                                                [c]\n[d][d]                  [e]                     [f]\n[d][d][d][d]            [e]                     [f]\n                        [e][e][e][e]            [f]\n[g]                     [h][h][h]               [i][i][i]\n                              [h]               [i][i][i]\n[j][j]"
,"[a]                     [b]                     [c][c][c]\n                        [b]\n[d]                     [e][e]                  [f][f]\n[d][d][d]                                       [f][f]\n[d][d]\n[g]                     [h][h][h]               [i]\n[g]                           [h]               [i][i]\n[g]                           [h]               [i][i]\n[g]\n[g]\n[j]\n[j]\n[j]"
,"[a][a]                  [b]                     [c]\n   [a][a]               [b][b]                  [c]\n                        [b][b][b]               [c]\n[d]                     [e][e][e]               [f][f][f]\n[d]                     [e][e][e]\n[g][g]                  [h]                     [i]\n                                                [i]\n                                                [i][i]\n[j][j]\n   [j]\n   [j]\n   [j]"
,"[a][a]                  [b]                     [c]\n[a][a]                  [b][b]                  [c]\n                        [b][b][b]\n[d][d]                  [e]                     [f][f][f]\n[g]                     [h]                     [i][i]\n[g]                     [h]                        [i]\n[g]                     [h]\n[g]\n[g][g]\n[j]\n[j]\n[j]\n[j][j]\n   [j]"
,"[a]                     [b]                     [c][c][c][c][c]\n                        [b]\n                        [b][b][b]\n                              [b]\n[d]                     [e]                     [f][f][f]\n                        [e]\n                        [e]\n                        [e][e][e]\n[g]                     [h]                     [i]\n[g]                     [h]\n[g]                     [h]\n                        [h]\n[j][j]                  [k]\n[j][j]                  [k]"
,"[a]                     [b]                     [c]\n                                                [c]\n                                                [c]\n[d][d][d]               [e]                     [f]\n                        [e][e][e]               [f]\n                                                [f][f][f]\n                                                   [f]\n[g][g][g]               [h][h]                  [i]\n[g][g][g]                                       [i][i]\n                                                [i][i]\n[j]                     [k]\n[j]                     [k]\n[j]"
,"[a][a]                  [b]                     [c]\n                        [b]                     [c][c][c]\n                        [b]                           [c]\n                        [b][b]                        [c]\n                           [b]\n[d]                     [e]                     [f]\n[d]\n[g]                     [h]                     [i]\n[g][g][g]               [h]                     [i]\n                        [h][h][h]               [i]\n                              [h]\n[j][j][j]               [k][k]"
,"[a][a]                  [b][b][b]               [c]\n                        [b][b][b]\n[d]                     [e]                     [f]\n[d]                     [e]                     [f]\n                        [e]                     [f]\n                        [e][e]\n                           [e]\n[g][g][g]               [h][h]                  [i]\n                        [h][h]                  [i]\n                        [h][h]                  [i][i]\n                                                   [i]\n                                                   [i]\n[j]"
,"[a][a][a]               [b][b]                  [c][c]\n                        [b][b]                  [c][c]\n                        [b][b]                  [c][c]\n[d][d]                  [e]                     [f][f]\n   [d]                  [e]\n                        [e]\n                        [e]\n                        [e]\n[g]                     [h]                     [i][i]\n[g]                                             [i][i]\n[g]\n[g]\n[g][g]"
,"[a][a][a]               [b]                     [c]\n      [a]                                       [c]\n      [a]\n[d]                     [e][e][e]               [f][f]\n[d]\n[g]                     [h][h]                  [i]\n[g][g][g]               [h][h]                  [i]\n   [g][g]                                       [i]\n[j]                     [k]\n[j]                     [k]\n[j][j]\n   [j]\n   [j]"
,"[a][a]                  [b]                     [c][c]\n                        [b][b]\n                        [b][b][b]\n[d]                     [e][e][e]               [f][f]\n                        [e][e][e]                  [f][f][f]\n[g]                     [h]                     [i][i]\n[g]                     [h]                     [i][i]\n[g]                                             [i][i]\n[j][j][j]"
,"[a][a]                  [b][b][b]               [c]\n   [a]                     [b][b]\n   [a][a][a]\n[d][d]                  [e]                     [f]\n[d][d]                  [e][e]                  [f][f][f]\n                        [e][e]\n                           [e]\n[g][g][g]               [h]                     [i]\n                                                [i]\n                                                [i]\n                                                [i]\n[j][j]"
,"[a]                     [b][b]                  [c]\n[a]                                             [c]\n[a]\n[a][a][a]\n[d]                     [e][e][e][e]            [f]\n[d]                                             [f]\n                                                [f]\n[g]                     [h]                     [i]\n[g]                     [h][h]\n[g]                     [h][h][h]\n[g]\n[g][g]\n[j]                     [k][k]\n                           [k]"
,"[a]                     [b][b]                  [c]\n[a]                     [b][b][b]               [c]\n[a][a][a][a]                                    [c]\n[d][d][d]               [e]                     [f]\n   [d][d]               [e]\n[g]                     [h]                     [i]\n                        [h]                     [i]\n                        [h]\n                        [h]\n                        [h][h]\n[j][j][j][j][j]"
,"[a][a]                  [b][b]                  [c]\n   [a][a][a]\n   [a]\n[d]                     [e][e][e]               [f][f]\n[d]\n[g]                     [h][h]                  [i]\n[g]                     [h][h]\n[g]                     [h][h]\n[g]\n[j]                     [k]\n[j][j]                  [k][k]\n                        [k][k]\n                           [k]"
,"[a][a][a]               [b]                     [c]\n                                                [c]\n                                                [c][c][c][c]\n[d]                     [e][e][e]               [f][f][f]\n[d]                     [e][e][e]               [f][f][f]\n[d]\n[g]                     [h][h]                  [i][i]\n[g]                                             [i][i]\n[j]\n[j]\n[j]"
,"[a]                     [b]                     [c][c]\n                        [b]                     [c][c]\n                        [b]\n[d][d][d]               [e]                     [f]\n      [d]                                       [f]\n                                                [f]\n[g]                     [h]                     [i]\n[g]                     [h][h][h]               [i][i]\n                        [h][h]                  [i][i][i]\n[j]                     [k]                     [l][l][l][l]"
,"[a]                     [b]                     [c]\n[a][a]                  [b]\n[a][a]\n[d]                     [e]                     [f]\n[d]                     [e]\n[d]                     [e][e][e]\n[d]                        [e]\n[g]                     [h][h][h]               [i][i]\n[g][g]\n[j][j][j]               [k]\n[j][j][j]               [k]\n                        [k]"
,"[a]                     [b]                     [c][c]\n[a][a][a]               [b]                     [c][c]\n   [a][a]               [b]\n                        [b]\n                        [b][b]\n[d]                     [e]                     [f]\n[d]                     [e]\n[d]\n[g]                     [h][h][h][h]            [i]\n[j][j]                  [k]\n                        [k]\n                        [k][k]\n                           [k]\n                           [k]"
,"[a]                     [b][b][b]               [c]\n[a]                     [b][b][b]               [c][c][c]\n[a]\n[d]                     [e]                     [f][f][f][f]\n                        [e]\n                        [e]\n                        [e]\n                        [e]\n[g]                     [h]                     [i]\n                        [h][h]                  [i]\n                        [h][h]                  [i][i][i]\n                                                   [i]\n[j]"
,"[a][a][a]               [b]                     [c]\n                        [b]                     [c]\n                        [b][b][b]\n                              [b]\n[d][d][d]               [e][e]                  [f]\n                        [e][e]                  [f]\n                                                [f]\n                                                [f][f][f]\n[g]                     [h]                     [i]\n[g]                                             [i]\n[g]                                             [i]\n                                                [i]\n                                                [i][i]\n[j][j]"
,"[a]                     [b]                     [c]\n[a]                     [b]\n[a][a]                  [b]\n[d]                     [e][e][e]               [f]\n[d]                           [e]               [f]\n                              [e]               [f]\n                              [e]               [f][f]\n                                                   [f]\n[g][g]                  [h]                     [i]\n                                                [i]\n[j][j][j]               [k]\n                        [k][k][k]\n                        [k][k]"
,"[a][a][a]               [b][b]                  [c]\n                           [b]                  [c]\n[d]                     [e][e]                  [f]\n[d]                                             [f]\n[d][d]\n   [d][d]\n[g]                     [h]                     [i]\n                        [h]\n                        [h]\n[j][j]                  [k]                     [l]\n[j][j][j]               [k]                     [l][l][l]\n      [j]               [k]"
,"[a][a]                  [b]                     [c][c][c]\n[d]                     [e][e]                  [f][f]\n[d]                     [e][e]                  [f][f]\n[d]\n[d]\n[g]                     [h][h][h]               [i]\n[g]                                             [i]\n[g]\n[g][g][g]\n[j]                     [k]\n[j]\n[j][j][j][j]"
,"[a][a][a]               [b][b]                  [c]\n[d]                     [e]                     [f]\n[d][d][d]                                       [f][f][f][f]\n[d][d]                                                   [f]\n[g][g]                  [h][h][h]               [i]\n                                                [i]\n                                                [i]\n[j]                     [k]                     [l]\n[j]                                             [l]\n                                                [l][l]\n                                                [l][l]"
,"[a][a][a]               [b]                     [c]\n                        [b]                     [c]\n                                                [c]\n[d][d]                  [e][e]                  [f]\n   [d]\n   [d]\n   [d]\n[g]                     [h]                     [i][i]\n[g][g]                  [h]                     [i][i][i]\n                        [h][h][h]                     [i]\n                              [h]\n[j][j]                  [k]\n[j][j]"
,"[a]                     [b][b][b]               [c]\n[a]                           [b]               [c]\n[a][a]                        [b]               [c]\n   [a][a]\n[d]                     [e][e][e]               [f][f]\n[d][d][d]                                       [f][f]\n   [d][d]\n[g]                     [h]                     [i][i]\n[j]                     [k]\n[j]                     [k][k]"
,"[a]                     [b]                     [c]\n                                                [c]\n                                                [c][c]\n                                                   [c][c]\n[d][d][d][d][d]         [e]                     [f][f]\n                                                [f][f]\n[g]                     [h]                     [i][i]\n[g]                     [h][h]                  [i][i]\n[g]                                             [i][i]\n[g]\n[g]\n[j][j]\n[j][j]"
,"[a]                     [b][b]                  [c][c]\n                           [b]                  [c][c]\n                           [b]\n[d][d]                  [e][e]                  [f]\n[d][d][d]               [e][e][e]\n[g]                     [h]                     [i]\n[g]                     [h]\n[g][g][g][g]            [h]\n                        [h]\n                        [h]\n[j][j][j][j]"
,"[a]                     [b][b][b]               [c][c][c]\n[a]                        [b][b]\n[a]\n[a][a]\n   [a]\n[d]                     [e]                     [f]\n[d]                                             [f]\n[d]                                             [f]\n[g]                     [h]                     [i][i]\n[g][g]                  [h]                     [i][i]\n[g][g][g]\n[j]                     [k][k]"
,"[a]                     [b][b]                  [c]\n[a]                     [b][b]\n                        [b][b]\n[d]                     [e]                     [f][f][f]\n[d][d][d]\n[d][d]\n[g]                     [h]                     [i][i]\n[g]                     [h]\n[g]\n[j][j][j]               [k]\n      [j]               [k]\n                        [k]\n                        [k][k]\n                           [k]"
,"[a][a][a]               [b]                     [c]\n   [a][a]\n[d][d][d]               [e]                     [f][f]\n                        [e]\n[g]                     [h]                     [i]\n[g][g]                  [h]                     [i]\n[g][g][g]               [h]                     [i]\n[j]                     [k][k]\n[j][j]                  [k][k][k]\n[j][j]"
,"[a][a][a]               [b]                     [c][c][c][c][c]\n   [a][a]               [b]\n      [a]               [b]\n                        [b]\n[d]                     [e]                     [f]\n[d][d]                                          [f]\n[d][d][d]                                       [f]\n[g]                     [h][h]                  [i][i][i]\n                        [h][h]                  [i][i][i]"
,"[a][a]                  [b]                     [c]\n                        [b]\n                        [b]\n[d][d][d]               [e]                     [f]\n                                                [f]\n                                                [f]\n                                                [f]\n[g][g][g]               [h][h]                  [i]\n[g][g][g]               [h][h]                  [i][i]\n                                                [i][i][i]\n[j][j][j]\n   [j][j]\n      [j]"
,"[a]                     [b]                     [c]\n[a]                                             [c]\n[a]                                             [c]\n[a]                                             [c][c][c]\n[a][a]\n[d]                     [e]                     [f]\n                        [e]\n                        [e]\n[g][g]                  [h][h]                  [i][i][i]\n[g][g]\n[g][g]\n[j]                     [k][k][k]\n[j]\n[j]\n[j]"
,"[a][a][a]               [b]                     [c]\n      [a][a]            [b][b]                  [c]\n      [a]               [b][b][b]               [c]\n                                                [c]\n[d]                     [e][e][e]               [f]\n[d][d][d]\n[d][d]\n[g]                     [h]                     [i][i]\n                                                [i][i]\n[j]                     [k][k]\n[j]"
,"[a]                     [b][b]                  [c]\n                                                [c]\n                                                [c][c]\n                                                [c][c]\n[d]                     [e][e][e]               [f][f]\n[d][d][d]                                          [f][f]\n                                                      [f]\n[g]                     [h]                     [i]\n                                                [i][i]\n                                                   [i][i]\n                                                      [i]\n[j]                     [k]                     [l][l]\n[j]\n[j]\n[j]"
,"[a]                     [b]                     [c][c][c]\n[a]                     [b]                        [c][c]\n[a]                     [b]\n[a]\n[a][a]\n[d]                     [e]                     [f][f]\n                        [e][e]\n                        [e][e]\n                           [e]\n[g]                     [h]                     [i][i]\n                                                [i][i]\n                                                [i][i]\n[j]                     [k][k][k]\n[j]"
,"[a][a][a]               [b]                     [c]\n                                                [c]\n                                                [c]\n                                                [c][c]\n                                                   [c]\n[d][d][d]               [e]                     [f]\n      [d]                                       [f]\n                                                [f]\n[g][g]                  [h]                     [i]\n                        [h]                     [i][i][i]\n                                                [i][i]\n[j][j]                  [k]\n[j][j]                  [k]\n[j][j]"
,"[a][a]                  [b][b]                  [c][c]\n                           [b][b]\n                              [b]\n[d]                     [e][e][e]               [f]\n[d]                     [e][e][e]               [f]\n[d][d]\n   [d][d]\n[g][g][g]               [h]                     [i]\n                        [h]                     [i][i]\n                        [h]\n[j]                     [k]\n                        [k]\n                        [k]"
,"[a][a][a]               [b][b]                  [c]\n      [a]                                       [c][c][c]\n                                                [c][c]\n[d]                     [e]                     [f]\n                                                [f]\n                                                [f]\n                                                [f]\n[g]                     [h][h]                  [i][i][i]\n[g]                     [h][h]\n[g]                     [h][h]\n[g][g][g]\n[j][j][j]"
,"[a][a]                  [b][b]                  [c][c][c][c][c]\n[a][a][a]                  [b]\n[d]                     [e][e][e]               [f]\n[d]                     [e][e][e]               [f]\n[d][d][d][d]                                    [f]\n                                                [f]\n                                                [f]\n[g]                     [h]\n                        [h]\n                        [h]\n                        [h]\n                        [h]"
,"[a]                     [b][b]                  [c]\n[a]                                             [c]\n[a]                                             [c]\n[a]                                             [c]\n[a]\n[d]                     [e]                     [f]\n[g]                     [h][h][h][h]            [i][i][i]\n[g]                                             [i][i][i]\n[g][g][g][g]\n[j][j]\n[j][j][j][j]"
,"[a]                     [b]                     [c]\n                        [b][b]\n                        [b][b][b]\n[d][d][d]               [e]                     [f][f]\n   [d][d]               [e]                     [f][f]\n      [d]               [e]\n                        [e]\n[g][g]                  [h]                     [i][i][i]\n                        [h]                     [i][i][i]\n                        [h]\n[j][j][j]"
,"[a][a]                  [b][b]                  [c]\n                                                [c]\n                                                [c]\n                                                [c]\n                                                [c][c]\n[d]                     [e]                     [f][f][f]\n                        [e]\n                        [e]\n                        [e][e][e]\n[g][g]                  [h]                     [i]\n                        [h][h][h]               [i]\n                        [h][h]                  [i]\n[j]                     [k]\n                        [k]\n                        [k]\n                        [k]"
,"[a]                     [b]                     [c][c][c][c][c]\n[a]\n[a][a][a][a]\n[d][d]                  [e]                     [f]\n[d][d]\n[g]                     [h][h]                  [i]\n[g]                     [h][h][h]               [i]\n[j]                     [k]\n[j]                     [k]\n[j]                     [k]\n                        [k][k]\n                           [k]"
,"[a]                     [b]                     [c]\n[a][a]                  [b]\n                        [b]\n                        [b][b]\n                           [b]\n[d]                     [e]                     [f][f][f]\n[d]                     [e]                     [f][f][f]\n                        [e]\n[g]                     [h]                     [i]\n                        [h]                     [i]\n                        [h]                     [i][i][i]\n                                                      [i]\n[j][j][j][j][j]"
,"[a]                     [b]                     [c][c]\n                        [b]                     [c][c]\n                        [b]\n                        [b]\n[d][d]                  [e][e][e]               [f][f]\n[d][d]\n[g]                     [h][h]                  [i][i]\n                        [h][h]                  [i][i]\n                        [h][h]\n[j]                     [k]\n                        [k]\n                        [k][k][k]\n                              [k]"
,"[a][a]                  [b][b]                  [c]\n   [a][a]                  [b]                  [c]\n      [a]                  [b]                  [c]\n                           [b]                  [c]\n[d]                     [e]                     [f]\n                                                [f][f]\n                                                [f][f][f]\n[g][g]                  [h][h][h]               [i]\n[j][j]                  [k][k]\n                        [k][k][k][k]"
,"[a]                     [b]                     [c]\n                                                [c]\n                                                [c]\n                                                [c][c]\n                                                   [c]\n[d]                     [e][e]                  [f][f]\n                        [e][e][e]\n                              [e]\n[g]                     [h]                     [i][i][i]\n                        [h]\n                        [h]\n                        [h]\n                        [h]\n[j][j]                  [k]                     [l]\n                        [k]                     [l]\n                                                [l][l]\n                                                   [l][l]"
,"[a][a]                  [b]                     [c]\n   [a]                                          [c][c]\n   [a]                                             [c]\n   [a]                                             [c]\n   [a]                                             [c]\n[d]                     [e]                     [f]\n[d]                                             [f]\n[d][d]                                          [f]\n   [d]                                          [f]\n   [d]\n[g][g][g]               [h][h]                  [i]\n                                                [i]\n                                                [i]\n                                                [i]\n                                                [i][i]\n[j]"
,"[a]                     [b]                     [c][c]\n                        [b]\n                        [b]\n[d]                     [e][e]                  [f]\n[d][d][d]                  [e]                  [f][f]\n[d][d]                                          [f][f][f]\n[g][g][g]               [h][h][h]               [i][i]\n                              [h][h]            [i][i]\n[j]                     [k]\n[j]"
,"[a][a][a]               [b][b]                  [c]\n                           [b]                  [c][c][c]\n                                                [c][c]\n[d]                     [e][e]                  [f][f]\n[d]                                             [f][f]\n[g]                     [h]                     [i][i][i][i]\n[g][g]                  [h]                           [i][i]\n[g][g][g]               [h]\n[j]"
,"[a][a][a]               [b]                     [c]\n                                                [c]\n                                                [c][c]\n                                                [c][c]\n[d]                     [e]                     [f]\n[d][d][d]               [e]                     [f]\n                                                [f][f]\n                                                   [f][f]\n[g]                     [h]                     [i][i]\n[g]                     [h]\n[g]                     [h]\n[j][j][j]\n[j][j]\n   [j]"
,"[a]                     [b]                     [c]\n                        [b]                     [c][c][c][c]\n                        [b]                           [c]\n[d][d]                  [e][e][e]               [f]\n[d][d][d][d]\n[g]                     [h]                     [i][i][i]\n[g]                     [h]\n[g]\n[j][j]                  [k]\n                        [k]\n                        [k][k][k]\n                              [k]"
,"[a]                     [b]                     [c]\n[a]                                             [c]\n[a]                                             [c]\n[a][a]\n   [a]\n[d]                     [e][e]                  [f][f]\n[g][g]                  [h][h][h]               [i]\n[g][g]                                          [i]\n   [g]\n[j]                     [k]                     [l]\n[j]                     [k]                     [l]\n[j][j]                  [k]\n   [j][j]"
,"[a]                     [b]                     [c][c]\n                        [b]                        [c][c]\n                        [b]                        [c][c]\n                        [b]\n                        [b][b]\n[d][d][d][d]            [e]                     [f]\n                        [e][e]\n                        [e][e]\n                           [e]\n[g]                     [h]                     [i]\n                        [h]\n                        [h]\n                        [h]\n[j]                     [k]                     [l][l]\n                                                [l][l]"
,"[a]                     [b][b][b]               [c]\n[a][a]                        [b]               [c]\n[a][a]                        [b]               [c]\n                                                [c][c][c]\n[d][d]                  [e]                     [f]\n                        [e]                     [f][f][f]\n                                                [f][f]\n[g]                     [h][h][h]               [i]\n[g]\n[g]\n[j][j][j]"
,"[a][a]                  [b][b][b]               [c]\n                              [b]               [c]\n[d]                     [e]                     [f][f][f][f]\n[d][d][d][d][d]\n[g]                     [h]                     [i]\n[g]                     [h][h][h]               [i]\n[g][g][g]                     [h][h]            [i]\n      [g]\n[j]                     [k]"
,"[a]                     [b][b][b][b]            [c]\n[a][a][a]                                       [c]\n   [a][a]                                       [c]\n[d]                     [e]                     [f]\n[d]                                             [f]\n[g][g][g]               [h]                     [i][i]\n      [g]                                       [i][i]\n[j]                     [k]\n[j]                     [k]\n[j][j]                  [k]\n   [j]\n   [j]"
,"[a][a][a]               [b]                     [c][c][c]\n   [a][a]               [b]                     [c][c][c]\n      [a]               [b]\n[d]                     [e][e][e][e]            [f]\n[d]\n[d]\n[d][d]\n   [d]\n[g]                     [h]                     [i]\n[g]\n[j]\n[j][j]\n[j][j][j]"
,"[a][a][a]               [b]                     [c]\n                        [b]\n                        [b]\n[d]                     [e]                     [f]\n[d]                     [e]                     [f][f]\n[d]\n[d][d][d]\n[g]                     [h]                     [i][i][i][i]\n[j]                     [k][k]\n[j][j]                     [k][k]\n[j][j][j]                     [k]\n                              [k]"
,"[a][a]                  [b][b][b]               [c]\n[a][a]                                          [c][c]\n                                                [c][c][c]\n[d]                     [e][e]                  [f]\n                                                [f]\n                                                [f]\n                                                [f]\n[g]                     [h]                     [i][i]\n[g][g]                  [h]                        [i]\n                        [h]\n[j][j]                  [k]\n   [j][j]\n      [j]\n      [j]"
,"[a]                     [b]                     [c][c][c][c][c]\n[a]                     [b]\n[a]\n[d][d][d]               [e]                     [f]\n[d][d][d]               [e]                     [f]\n                        [e][e]                  [f]\n                        [e][e]                  [f]\n                                                [f][f]\n[g]                     [h]                     [i][i]\n                                                [i][i]\n                                                [i][i]"
,"[a]                     [b]                     [c]\n[a]                     [b]\n[a]                     [b][b]\n[a]                        [b][b]\n[d][d][d][d]            [e]                     [f][f]\n                                                [f][f]\n[g][g]                  [h]                     [i][i]\n[g][g]                  [h][h][h]               [i][i]\n   [g][g]                                          [i]\n[j]"
,"[a]                     [b][b][b]               [c]\n[a][a][a]                     [b]\n[a][a]                        [b]\n[d][d][d]               [e]                     [f]\n                        [e][e][e]\n                        [e][e]\n[g][g]                  [h]                     [i]\n                        [h]                     [i]\n                        [h]\n[j]                     [k][k]\n[j]                     [k][k]\n[j]"
,"[a][a]                  [b][b][b][b]            [c]\n   [a][a]                                       [c]\n   [a][a]\n[d]                     [e]                     [f]\n[d]\n[d][d]\n   [d]\n   [d]\n[g][g]                  [h]                     [i]\n[g][g]                                          [i]\n[j]                     [k]\n[j]                     [k][k]\n[j]                        [k]\n                           [k]\n                           [k]"
,"[a][a]                  [b]                     [c]\n                        [b]                     [c]\n                        [b]\n[d][d][d]               [e]                     [f]\n[d][d][d]               [e]                     [f][f]\n                        [e]                     [f][f][f]\n[g]                     [h]                     [i]\n                        [h]                     [i]\n                                                [i][i]\n                                                   [i]\n                                                   [i]\n[j]                     [k]                     [l][l][l]"
,"[a]                     [b]                     [c]\n                                                [c]\n                                                [c]\n[d]                     [e][e][e]               [f]\n                                                [f]\n                                                [f]\n                                                [f][f][f]\n[g]                     [h][h][h][h]            [i]\n[g]                                             [i][i]\n                                                [i][i][i]\n[j][j]                  [k][k]\n[j][j]                     [k][k]\n                              [k]"
,"[a][a][a]               [b]                     [c]\n                        [b][b][b][b]            [c]\n                                 [b]            [c]\n[d]                     [e][e][e]               [f][f]\n[d]                     [e][e][e]\n[d][d][d][d]\n[g][g]                  [h]                     [i]\n[g][g]                  [h]\n[j][j][j]"
,"[a]                     [b][b][b]               [c]\n[a]                           [b]               [c]\n[a]                                             [c][c][c]\n                                                      [c]\n[d][d]                  [e][e][e][e]            [f]\n[d][d]\n[g]                     [h]                     [i]\n                        [h][h][h]               [i]\n                              [h][h]\n[j]                     [k][k]\n                        [k][k]"
,"[a][a][a]               [b]                     [c][c][c]\n                                                      [c]\n[d]                     [e]                     [f]\n[d]                                             [f][f][f]\n[d]                                             [f][f]\n[g]                     [h][h]                  [i]\n                        [h][h]                  [i]\n                                                [i]\n[j]                     [k]                     [l][l]\n[j]                     [k][k][k]\n                        [k][k]"
,"[a]                     [b]                     [c]\n[a]                     [b][b]\n[a]                     [b][b][b]\n[a]\n[d]                     [e]                     [f][f][f]\n[d][d]                  [e]                        [f][f]\n[d][d]                  [e]\n   [d]                  [e]\n[g][g]                  [h]                     [i]\n[j]                     [k][k][k]\n[j][j]"
,"[a][a][a][a][a]         [b]                     [c][c]\n                                                [c][c]\n[d][d][d]               [e]                     [f][f]\n[d][d][d]                                          [f]\n                                                   [f]\n[g]                     [h][h]                  [i]\n[g]                     [h][h][h]               [i]\n[g][g][g][g]                                    [i]\n                                                [i]"
,"[a][a]                  [b]                     [c][c][c]\n                        [b]\n                        [b]\n                        [b][b]\n                           [b]\n[d]                     [e][e]                  [f]\n[d]\n[d]\n[d]\n[g][g]                  [h]                     [i]\n   [g]                                          [i]\n   [g]                                          [i][i]\n                                                   [i]\n                                                   [i]\n[j]                     [k]\n                        [k][k]\n                           [k]\n                           [k][k]"
,"[a][a]                  [b]                     [c][c]\n[a][a][a]               [b][b]\n      [a]\n[d]                     [e]                     [f]\n[d]                     [e]                     [f]\n[d][d][d]               [e]\n   [d]\n[g]                     [h][h][h]               [i][i][i]\n                                                [i][i][i]\n[j][j]\n   [j]\n   [j]"
,"[a][a][a][a]            [b]                     [c]\n                                                [c][c]\n                                                [c][c][c]\n[d][d][d]               [e][e][e]               [f]\n                           [e][e]               [f]\n                                                [f]\n[g]                     [h]                     [i]\n[g]                     [h]                     [i]\n                        [h]                     [i]\n                        [h]                     [i][i][i]\n                        [h]\n[j]"
,"[a]                     [b]                     [c][c][c]\n[a]                     [b]\n[a][a]                  [b][b]\n                        [b][b]\n[d][d]                  [e]                     [f]\n   [d][d]               [e][e]\n      [d]                  [e]\n      [d]                  [e]\n                           [e]\n[g][g]                  [h]                     [i]\n                        [h]\n                        [h]\n                        [h]\n                        [h]\n[j][j]"
,"[a]                     [b][b][b][b]            [c]\n[a]\n[a][a][a][a]\n[d]                     [e]                     [f]\n[d]                     [e]                     [f]\n                        [e]                     [f]\n[g][g][g]               [h][h][h]               [i][i]\n[g][g][g]               [h][h][h]               [i][i]\n[j]"
,"[a]                     [b][b][b][b]            [c]\n[a][a]                        [b][b]\n[a][a][a]\n[d]                     [e][e]                  [f][f]\n[d]                     [e][e]                     [f]\n[d]\n[d]\n[g][g][g]               [h]                     [i]\n                        [h][h][h]\n                        [h][h]\n[j][j]"
,"[a][a]                  [b]                     [c][c][c][c][c]\n[a][a][a]\n[d][d][d]               [e]                     [f][f]\n      [d]\n      [d]\n[g]                     [h]                     [i]\n[g][g][g]               [h]                     [i]\n   [g][g]                                       [i]\n[j]\n[j]\n[j][j]\n[j][j]"
,"[a][a][a]               [b]                     [c]\n                        [b][b][b]               [c]\n                        [b][b]                  [c]\n                                                [c]\n                                                [c]\n[d][d]                  [e]                     [f][f]\n                                                [f][f]\n[g][g][g]               [h]                     [i]\n      [g]                                       [i][i]\n      [g][g]                                    [i][i][i]\n[j]\n[j]"
,"[a]                     [b][b]                  [c]\n[d]                     [e]                     [f]\n[d]\n[g][g]                  [h][h]                  [i]\n[g][g][g]                                       [i]\n      [g]                                       [i][i]\n                                                   [i][i]\n[j][j][j]               [k]                     [l]\n                        [k]                     [l]\n                        [k]                     [l]\n                                                [l][l]\n                                                   [l]\n[m]\n[m]"
,"[a]                     [b]                     [c]\n                        [b]                     [c]\n                        [b][b]\n                           [b][b]\n[d][d][d][d][d]         [e]                     [f][f][f]\n                                                [f][f][f]\n[g]                     [h]                     [i][i]\n[g]                     [h][h]                     [i][i]\n[g]                                                [i][i]\n[j]\n[j]\n[j]"
,"[a]                     [b][b][b]               [c]\n[a][a]                        [b]               [c]\n[a][a][a]                     [b][b]            [c]\n[d][d]                  [e]                     [f]\n                                                [f][f][f]\n                                                [f][f]\n[g][g][g]               [h]                     [i]\n                        [h]                     [i]\n[j][j]                  [k]\n[j][j]"
,"[a][a][a]               [b][b][b]               [c]\n      [a]               [b][b][b]               [c]\n      [a]\n[d]                     [e]                     [f]\n[d]                     [e][e][e]               [f]\n[d]                        [e][e]\n[g]                     [h]                     [i][i][i]\n[g]\n[g][g]\n   [g]\n   [g]\n[j][j]"
,"[a]                     [b]                     [c][c][c][c]\n[a][a]                  [b]\n   [a]                  [b]\n   [a][a]\n[d]                     [e]                     [f]\n                        [e]\n                        [e][e]\n                           [e]\n                           [e]\n[g][g]                  [h]                     [i]\n                        [h]                     [i]\n[j]                     [k]                     [l][l]\n                        [k]                        [l][l]\n                                                   [l][l]"
,"[a]                     [b]                     [c]\n[d]                     [e]                     [f]\n[d][d]                  [e]                     [f]\n   [d][d]               [e][e]                  [f]\n      [d]                  [e][e]\n[g]                     [h]                     [i][i][i][i]\n[g]                     [h]\n[j][j][j]               [k]\n   [j][j]               [k][k][k]\n      [j]"
,"[a]                     [b]                     [c]\n[a]\n[a]\n[a]\n[d]                     [e][e][e][e]            [f][f]\n                                                [f][f]\n[g][g][g]               [h]                     [i][i][i]\n                        [h]                     [i][i][i]\n                        [h][h][h][h]\n[j]\n[j]\n[j]\n[j][j][j]"
,"[a][a]                  [b]                     [c]\n[a][a]\n[d][d][d][d][d]         [e]                     [f]\n                        [e][e][e]               [f]\n                              [e][e]            [f]\n                                                [f]\n                                                [f]\n[g]                     [h]                     [i]\n[g]                     [h][h]\n[g][g]\n   [g][g]\n[j][j][j]\n      [j]"
,"[a]                     [b][b][b]               [c]\n[a]                           [b]               [c]\n[a][a][a]                     [b]               [c]\n                              [b]\n[d]                     [e][e]                  [f][f]\n                                                [f][f]\n[g]                     [h]                     [i]\n[g]                     [h][h][h]               [i]\n                        [h][h]                  [i]\n[j]                     [k][k][k]"
,"[a]                     [b]                     [c]\n                        [b]                     [c]\n                        [b][b]\n                        [b][b]\n[d]                     [e]                     [f]\n[d]                     [e]\n[d]                     [e]\n[d]\n[d][d]\n[g]                     [h]                     [i][i]\n[g][g]                  [h][h]                     [i]\n                           [h][h]\n                              [h]\n[j]                     [k][k][k][k]"
,"[a][a]                  [b]                     [c][c][c][c][c]\n                        [b]\n                        [b]\n[d]                     [e]                     [f][f][f]\n                        [e]                     [f][f][f]\n[g]                     [h][h]                  [i]\n                           [h]                  [i]\n                           [h]                  [i][i]\n                                                   [i][i]\n[j]\n[j]\n[j]\n[j]\n[j][j]"
,"[a][a][a]               [b][b]                  [c][c]\n                        [b][b]\n[d]                     [e]                     [f][f]\n[d]                     [e]                     [f][f]\n[d]\n[g]                     [h]                     [i]\n                        [h]                     [i][i]\n                        [h]                     [i][i][i]\n                        [h]\n                        [h]\n[j][j][j]\n   [j][j]\n      [j]"
,"[a][a]                  [b][b]                  [c]\n[a][a]                                          [c][c]\n[a][a]                                             [c]\n                                                   [c]\n                                                   [c]\n[d]                     [e][e][e]               [f]\n                                                [f]\n                                                [f]\n[g]                     [h][h][h]               [i]\n[g]                        [h][h]               [i]\n[j]\n[j]\n[j][j]\n   [j]\n   [j]"
,"[a][a]                  [b]                     [c]\n[a][a]                  [b]                     [c]\n                        [b][b][b]               [c]\n                              [b]               [c][c][c]\n[d]                     [e]                     [f][f]\n[d]\n[g][g][g]               [h][h][h]               [i]\n                                                [i]\n                                                [i]\n[j]\n[j]\n[j]\n[j]\n[j][j]"
]

to=0
function update() {
  var nt=+I.value
  var test = Test[nt-1]
  if (test) {
    O.textContent = test
    clearTimeout(to)
    to = setTimeout(_=>{
      I.disabled = true
      var t = + new Date()
      var [d,r]=F(test)
      O.textContent = 'Time '+(new Date-t)/1000+' sec'+d+r.join`\n`+'\n'+test
      I.disabled = false
    }, 800)
  }
}

update()
Test # <input id=I value=1 type=number oninput='update()' max=101 min=1> (1 to 101, be patient: some testcase is slow to solve)
<pre id=O></pre>


มีกรณีทดสอบอื่น ๆ ที่เชื่อมโยงกับข้อความ TEST CASES
Jonathan Picazo

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