Budowanie mostu

10

Twoim zadaniem jest zbudowanie mostu, który połączy dwa klify na podstawie danych wejściowych dw odległości od siebie. dzawsze będzie parzysta

Jednak most potrzebuje kolumn, aby go utrzymać. Każda kolumna może pomieścić maksymalnie 6 spacji z każdej strony.

W tym przykładzie:

________                        ________
        |                      |
   A    |                      |   B

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

Most dla d = 20powinien wyglądać tak z dwiema kolumnami. Kolumny nie liczą się w d.

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

Zasady:

  1. Musi mieć wystarczającą liczbę kolumn, aby wstać.

  2. Musi mieć minimalną liczbę kolumn potrzebną do wstania.

  3. Musi być symetryczny

  4. Najmniejsza ilość bajtów wygrywa

Przykłady: (# służą wyłącznie do zliczania spacji. Nie powinny być uwzględniane w wynikach)

d = 10

_____|_____
12345|12345
     |

d = 32

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

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

lub

______|__________|______
123456|1234554321|123456
      |          |
JoshK
źródło
Aby wyjaśnić, czy liczby w danych wyjściowych są wymagane, czy jedynie ilustracyjne?
isaacg
@isaacg Nie, nie są potrzebne na wyjściu. Są tylko tam, więc nie musicie liczyć wierszy na moich przykładach.
JoshK
Myślę, że twoja specyfikacja jest wadliwa? Co zapobiega rozwiązaniu 1 | 2 | 3 | 4 | 5 ... | d gdzie | jest wiązką.
Vlo
@Vlo Jedną z zasad jest użycie minimalnej możliwej liczby kolumn. Dlatego przy użyciu kolumny każda spacja nie byłaby minimalna.
JoshK
Mówisz, że d zawsze będzie parzyste, ale w twoim ostatnim przykładzie d = 21.
SE - przestań strzelać do dobrych facetów

Odpowiedzi:

4

JavaScript (ES6), 92 bajty

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

Gdzie \nreprezentuje dosłowny znak nowej linii. Jeśli dmoże być nieparzysty, zajmuje mi 128 bajtów:

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
źródło
Jak może działać twoje rozwiązanie dla liczb nieparzystych? Dla d = 35 żadne z optymalnych rozwiązań nie jest symetryczne.
SE - przestań strzelać do dobrych facetów
@Hohmannfan Zwraca najmniej suboptymalne rozwiązanie symetryczne, którym w tym przypadku jest |____________|___________|____________|itd.
Neil
To chyba najlepsza interpretacja.
SE - przestań strzelać do dobrych facetów
0

Rubinowy, 108 bajtów

Prawdopodobnie można grać w golfa o wiele więcej. Chciwy algorytm.

->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}
Wartość tuszu
źródło