Construindo uma ponte

10

Sua tarefa é construir uma ponte para conectar dois penhascos, com uma entrada d, a distância. dsempre será par

No entanto, a ponte precisa de colunas para sustentá-la. Cada coluna pode conter no máximo 6 espaços de cada lado.

Para este exemplo:

________                        ________
        |                      |
   A    |                      |   B

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

A ponte para d = 20deve ficar assim com duas colunas. As colunas não contam em d.

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

Regras:

  1. Deve ter colunas suficientes para se levantar.

  2. Deve ter o número mínimo de colunas necessárias para se levantar.

  3. Deve ser simétrico

  4. Menor quantidade de vitórias em bytes

Exemplos: (#s são apenas para ajudá-lo a contar espaços. Não deve ser incluído na sua saída)

d = 10

_____|_____
12345|12345
     |

d = 32

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

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

ou

______|__________|______
123456|1234554321|123456
      |          |
JoshK
fonte
Para esclarecer, os números na saída são necessários ou meramente ilustrativos?
Isaacg
@isaacg Não, eles não são necessários na saída. Eles estão lá para que vocês não precisem contar linhas nos meus exemplos.
JoshK 4/16
Eu acho que sua especificação é falha? O que impede uma solução 1 | 2 | 3 | 4 | 5 ... | d em que | é um feixe.
Vlo 4/16
@Vlo Uma das regras é usar o número mínimo de colunas possível. Portanto, usando uma coluna, todo espaço não seria o mínimo.
JoshK 4/16
Você diz que d sempre será par, mas no seu último exemplo, d = 21.
SE - pare de disparar os mocinhos

Respostas:

4

JavaScript (ES6), 92 bytes

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

Onde \nrepresenta o caractere literal de nova linha. Se dpode ser estranho, são necessários 128 bytes:

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`
Neil
fonte
Como sua solução para números ímpares funciona? Para d = 35, nenhuma das soluções ideais é simétrica.
SE - pare de disparar os mocinhos
@Hohmannfan Volta a solução sub-óptima menos simétrica, que neste caso é |____________|___________|____________|etc
Neil
Eu acho que essa é a melhor interpretação.
SE - pare de disparar os mocinhos
0

Ruby, 108 bytes

Provavelmente pode ser jogado muito mais. Algoritmo ganancioso.

->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}
Value Ink
fonte