다리 만들기


10

당신의 임무는 d거리가 떨어진 입력이 주어지면 두 개의 절벽을 연결하는 다리를 만드는 것입니다. d항상 짝수

그러나 다리에는 기둥을 고정시켜야합니다. 각 열에는 각면에 최대 6 개의 공백이있을 수 있습니다.

이 예의 경우 :

________                        ________
        |                      |
   A    |                      |   B

        |----------------------|
                d = 22

다리는 d = 20두 개의 열로 표시되어야합니다. 열은 d에 포함되지 않습니다.

_____|__________|_____
12345|1234554321|12345
     |          |

규칙 :

  1. 일어서기에 충분한 열이 있어야합니다.

  2. 일어서는 데 필요한 최소 개수의 열이 있어야합니다.

  3. 대칭이어야합니다

  4. 가장 적은 양의 바이트 승리

예 : (#는 공간을 세는 데 도움을주기위한 것입니다. 출력에 포함하지 않아야합니다)

d = 10

_____|_____
12345|12345
     |

d = 32

_____|___________|___________|_____
12345|12345654321|           |
     |           |           |

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

또는

______|__________|______
123456|1234554321|123456
      |          |

명확히하기 위해 출력의 숫자가 필요합니까, 아니면 단지 예시입니까?
isaacg

@isaacg 아니요 출력에 필요하지 않습니다. 그들은 단지 거기 있기 때문에 너희들은 내 예제에서 줄을 세지 않아도됩니다.
JoshK

사양에 결함이 있다고 생각합니까? 1 | 2 | 3 | 4 | 5 ... | d 솔루션을 방지하는 이유 빔입니다.
Vlo

@Vlo 규칙 중 하나는 가능한 최소 열 수를 사용하는 것입니다. 따라서 모든 공간을 열을 사용하는 것이 최소가 아닙니다.
JoshK

d는 항상 짝수이지만 마지막 예제에서는 d = 21입니다.
SE-좋은 사람들을 해고 중지

답변:


4

자바 스크립트 (ES6), 92 바이트

d=>[..."_  "].map(c=>(s=c+c[r='repeat'](n%6))+'|'+(c[r](12)+'|')[r](n/6)+s,n=d-1>>1).join`\n`

어디 \n리터럴 개행 문자를 나타냅니다. 경우 d홀수가 될 수는 128 바이트 나됩니다 :

d=>[..."_  "].map(c=>[...Array(d+1)].map((_,i)=>(d&1?i&&d-i&&(i>m)+5+i-m:((d-1)%24>11)*6+i-m)%12?'':'|',m=d>>1).join(c)).join`\n`

홀수에 대한 솔루션은 어떻게 작동합니까? d = 35의 경우 최적의 솔루션이 대칭이 아닙니다.
SE-좋은 사람들의 총격을 중지

@Hohmannfan이 방법은 가장 낮은 차선의 대칭 솔루션을 반환합니다 |____________|___________|____________|.
Neil

나는 이것이 최선의 해석이라고 생각한다.
SE-좋은 사람들의 총격을 중지하십시오

0

루비, 108 바이트

아마 훨씬 더 골프 다운 될 수 있습니다. 탐욕 알고리즘.

->d{s='',k=6
(s+=?_*[d,k].min+(d>k/2??|:'');d-=k;k=12)while d>0
s=s.chomp(?|)+s.reverse+$/
s+s.tr(?_,' ')*2}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.