Construire un pont

10

Votre tâche consiste à construire un pont pour relier deux falaises en fonction d'une entrée d, la distance les séparant. dsera toujours égal

Cependant, le pont a besoin de colonnes pour le maintenir. Chaque colonne peut contenir un maximum de 6 espaces de chaque côté.

Pour cet exemple:

________                        ________
        |                      |
   A    |                      |   B

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

Le pont pour d = 20devrait ressembler à ceci avec deux colonnes. Les colonnes ne comptent pas en d.

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

Règles:

  1. Doit avoir suffisamment de colonnes pour se lever.

  2. Doit avoir un nombre minimum de colonnes nécessaires pour se lever.

  3. Doit être symétrique

  4. Le plus petit nombre d'octets gagne

Exemples: (les # sont uniquement pour vous aider à compter les espaces. Ne doivent pas être inclus dans votre sortie)

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
la source
Pour clarifier, les chiffres de la sortie sont-ils requis ou simplement illustratifs?
isaacg
@isaacg Non, ils ne sont pas nécessaires dans la sortie. Ils sont juste là donc vous n'avez pas à compter les lignes sur mes exemples.
JoshK
Je pense que votre spécification est défectueuse? Ce qui empêche une solution 1 | 2 | 3 | 4 | 5 ... | d où | est une poutre.
Vlo
@Vlo L'une des règles consiste à utiliser le nombre minimum de colonnes possible. Par conséquent, en utilisant une colonne, chaque espace ne serait pas le minimum.
JoshK
Vous dites que d sera toujours pair, mais dans votre dernier exemple, d = 21.
SE - arrêtez de licencier les bons

Réponses:

4

JavaScript (ES6), 92 octets

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

\nreprésente le caractère de nouvelle ligne littéral. Si cela dpeut être étrange, cela me prend 128 octets:

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
la source
Comment votre solution pour les nombres impairs peut-elle fonctionner? Pour d = 35, aucune des solutions optimales n'est symétrique.
SE - arrêtez de renvoyer les bons
@Hohmannfan Il renvoie la solution symétrique la moins sous-optimale, qui dans ce cas est |____________|___________|____________|etc.
Neil
Je suppose que c'est la meilleure interprétation.
SE - arrêtez de renvoyer les bons
0

Rubis, 108 octets

Peut probablement être joué beaucoup plus bas. Algorithme gourmand.

->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}
Encre de valeur
la source