Étant donné deux paramètres de tracé de voie et de longueur de route , imprimez une représentation ASCII des marquages de voie pour Roads and Traffic Service pour peindre les routes.
Exemple d'entrée / sortie
Entrée:, BTHMLRPHU
21
Je me fiche que vous preniez deux paramètres ou que vous concaténiez le nombre à la fin de la chaîne, c'est sans ambiguïté.
L'entrée peut provenir de STDIN, comme argument de fonction, variables d'environnement, tout ce qui a du sens dans votre langue.
Production:
! | x ## | | x x !
! B | /\ x HOV3 ## <- | -> | ^^ x HOV3 x !
! B | \/ x HOV3 ## | | | | ^^ x HOV3 x !
! | x ## | | x x !
! | x ## | | x x !
! | | ## | | | | !
! | | ## | | | | !
! | | ## | | | | !
! B | /\ | HOV3 ## <- | -> | ^^ | HOV3 | !
! B | \/ | HOV3 ## | | | | ^^ | HOV3 | !
! | x ## | | x x !
! B | /\ x HOV3 ## <- | -> | ^^ x HOV3 x !
! B | \/ x HOV3 ## | | | | ^^ x HOV3 x !
! | x ## | | x x !
! | x ## | | x x !
! | | ## | | | | !
! | | ## | | | | !
! | | ## | | | | !
! B | /\ | HOV3 ## <- | -> | ^^ | HOV3 | !
! B | \/ | HOV3 ## | | | | ^^ | HOV3 | !
! | x ## | | x x !
Chaque caractère dénote 0,5 mètre de largeur et un kilomètre de longueur.
spécification
Marquage de voie
Pour chaque tronçon de route de 10 km, des marquages sont peints aux kilomètres 2, 3, 9 et 10 (à partir du "haut" de la sortie). Les marques sont centrées dans la voie. À l'exception de la piste cyclable et de la médiane, toutes les voies ont une largeur de 3 mètres (6 caractères).
Les caractères ASCII en forme de losange et de flèche ne sont pas autorisés à la place des marquages indiqués dans l'exemple de sortie.
B
: Piste cyclable.B
marquage. 1,5 mètres (3 caractères) de large.T
: Transit. Marquage au diamantH
: Voie réservée aux véhicules très fréquentés.HOV3
marquageL
etR
: Turning lane. Marquage des flèchesP
: Passing lane. Marquages au curseurU
: Voie sans restriction. Aucun marquage
Séparateurs (par ordre de priorité)
- Médiane:
##
(indiquée parM
dans la chaîne d'entrée, remplace tout autre séparateur, y compris le fossé) - Fossé (extrême gauche et extrême droite):
!
point d'exclamation - Les voies réservées aux VMO alternent entre
x
et|
tous les 5 km - Ordinaire:
|
Contraintes
Votre fonction ou programme doit:
- Imprimer sur STDOUT (cela signifie des équivalents de
System.out.print
pour Java,console.log
pour JavaScript, etc.) - Être capable d'imprimer de 1 à 9 voies avec 0 à 10 médianes
- Être capable d'imprimer jusqu'à 50 km de chaussée (50 lignes de sortie)
- Ne pas utiliser de failles standard
- La fin des espaces blancs n'est pas acceptable à l'exception d'une option
\n
à la fin de la sortie
Plus grande sortie possible: 3700 octets (74 caractères * 50 lignes).
Sortie la plus petite possible: 5 octets (avec entrée B
, 1)
Hypothèses
- Aucune médiane adjacente (la sous
MM
- chaîne ne se produira pas) - La deuxième ligne de marquage peut être coupée (par exemple si la longueur est de 9 ou 12 km)
- Les voies peuvent ne pas avoir de sens logique (n'importe quel ordre est possible, par exemple une voie de virage à droite à gauche de la route)
C'est le code-golf , donc le code le plus court (en octets) gagne!
Réponses:
Rubis, 245
Imprimez la voie divise si nécessaire, puis imprimez la voie.
Je ne m'attends pas à gagner.
Changelog
245 étrangle stderr et divise les tableaux efficacement.
263 meilleure façon d'indexer le tableau
268 imprimez simplement chaque ligne, ne calculez pas une version canonique.
330 validation initiale
la source
JavaScript (ES6), 316 octets
Démo
Il devrait fonctionner dans Firefox et Edge au moment de la rédaction, Chrome / Opera nécessite l'activation de fonctionnalités expérimentales.
la source
05AB1E ,
175174175 octetsAssez mauvaise approche, mais ça marche et c'était amusant à faire. Peut certainement être joué au golf un peu plus, cependant.
+1 octet comme correction de bogue pour deux
HH
voies adjacentes .Essayez-le en ligne.
Explication:
Étape 1: Créez toutes les voies possibles avec la taille 10:
Étape 2: Convertissez la chaîne d'entrée en index (que nous allons utiliser pour indexer dans la liste que nous avons créée à l'étape 1):
Étape 3: nous utilisons ces indices pour indexer dans la liste des voies. Et puis nous convertissons cette liste de voies en sortie correcte, y compris en les étendant / les raccourcissant à la taille de l'entrée entière:
Voir cette astuce de mes 05AB1E (sections Comment les chaînes de Compresser ne font pas partie du dictionnaire? Et comment compresser les grands entiers? ) Pour comprendre pourquoi
Ž5E
est1289
;.•o¤[‹‡•
est"tlrpbhmu"
;ŽDý
est10201
;•δ~¬]•
est1119188999
;Ž\nÿ
est19889
.la source