Vous êtes responsable de la construction d'une nouvelle autoroute. Cependant, il mène à travers des terres montagneuses et a donc besoin de nombreux ponts et tunnels. L'autoroute elle-même devrait rester à un seul niveau.
Contribution
Vous obtenez une description ASCII approximative de l'apparence des montagnes sur une entrée standard, comme suit:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
Le _
dans la première colonne marque le début et le niveau de la route. La chaîne de montagnes est contiguë et si le dernier segment sera un pont, il aura un nombre pair de caractères.
Vous pouvez supposer qu'une ligne d'entrée ne dépasse jamais 100 caractères et qu'il n'y a pas plus de 15 lignes. Chaque ligne a la même longueur qui est éventuellement remplie d'espace à la fin. La route ne démarre jamais dans une montagne ou comme un pont. La première chose qui suit la tuile route dans l'entrée est soit une pente vers le bas ou vers le haut.
Sortie
La sortie est la même chaîne de montagnes, sauf qu'il y a maintenant une route où auparavant n'était que son début. La sortie est donnée sur la sortie standard.
Pour cela, il existe de nombreuses règles:
La route doit commencer à l'endroit indiqué dans l'entrée et rester au même niveau tout au long. Pour vous faciliter la tâche, nous avons préparé un certain nombre de carreaux routiers préfabriqués qui ressemblent à ceci
_
::_______ \ / \/\/
La route doit s'étendre jusqu'à l'extrémité de la chaîne de montagnes (c'est-à-dire que la longueur des lignes d'entrée dicte jusqu'où la route va).
Les tunnels doivent être forés chaque fois qu'une montagne est l'endroit où la route doit aller. Les tunnels traversent directement la montagne et laissent des trous au début et à la fin (c'est-à-dire qu'un tunnel remplace la pente de la montagne avec une parenthèse fermante à son début et une parenthèse ouvrante à sa fin).
Les tunnels laissent, bien, un tunnel dans la montagne qui a généralement un plafond. Heureusement, nos carreaux de route préfabriqués peuvent être utilisés pour renforcer le plafond afin que le tunnel ne s'effondre pas (la ligne au-dessus du tunnel doit être utilisée
_
pour renforcer le tunnel):/\ / \ /____\ ___)______(__ \/ \/
Le tunnel n'a pas besoin d'être renforcé lorsque la montagne n'est pas assez haute au-dessus. Cela me semble bizarre aussi, mais on m'a dit que les carreaux de route préfabriqués sont suffisamment solides pour tenir même lorsqu'ils sont espacés dans ce cas (aucun plafond de tunnel n'est dessiné lorsqu'il y a une pente directement au-dessus du tunnel):
/\ /\/__\ ___)______(__ \/ \/
Des ponts sont nécessaires chaque fois que la route doit traverser un gouffre. Pour les ponts courts, les tuiles routières préfabriquées sont suffisamment solides mais ont encore besoin d'un peu de support au début et à la fin du pont (la première pente descendante sous le pont et la dernière pente ascendante sont remplacées par de
Y
sorte qu'il y ait une poutre de support pour le pont ):_____ Y Y \/
Les ponts plus longs nécessitent un support supplémentaire. Un long pont est celui qui a plus de six tuiles routières non supportées d'affilée. Les ponts longs ont besoin d'un pilier en leur centre. Les piliers sont facilement construits avec nos poutres piliers de préconstruits qui ressemblent à ceci:
|
. Chaque pilier a besoin de deux d'entre eux et ils s'étendent jusqu'au fond du gouffre:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Étant donné que l'entrée ne représente qu'une partie de toute la chaîne de montagnes à travers laquelle l'autoroute doit être construite, elle peut se terminer brusquement au milieu d'un pont ou d'un tunnel. La règle du pont long s'applique toujours au segment final et vous pouvez supposer que la première partie au-delà de l'entrée donnée prend à nouveau en charge le pont.
En suivant les règles ci-dessus, nous obtenons ce qui suit pour notre contribution:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
Le code le plus court par nombre de caractères gagne. Les espaces de fin dans les lignes sont ignorés pour la validation.
Exemple d'entrée 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Exemple de sortie 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Exemple d'entrée 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Exemple de sortie 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Remarque
Les espaces de fin dans la sortie sont ignorés pour la comparaison avec les solutions de référence.
Condition gagnante
Le code le plus court gagne, comme c'est la coutume dans le golf. En cas d'égalité, la solution précédente l'emporte.
Cas de test
Il existe deux scripts de test, contenant des cas de test identiques:
L'invocation est dans les deux cas:, <test script> <my program> [arguments]
par exemple ./test ruby bridges.rb
ou ./test.ps1 ./bridges.exe
.
Une autre note
Cette tâche faisait partie d'un concours de golf organisé dans mon université en 2011-S24. Les scores et les langues de nos candidats étaient les suivants:
- 304 - Perl
- 343 - C
- 375 - C
- 648 - Python
Notre propre solution (grâce à Ventero) était
- 262 - Rubis