Il existe de nombreux types de trains, allant des voies en bois comme Brio, au contrôle entièrement numérique de minuscules répliques métalliques parfaites de trains réels, mais elles nécessitent toutes une voie à concevoir, en utilisant idéalement autant de vos pièces que possible.
Donc, votre tâche est de déterminer si, étant donné l'entrée des pièces disponibles, il est possible de construire un circuit fermé complet en utilisant tous les éléments, et sinon, combien de pièces restera du circuit maximum possible.
Puisqu'il s'agit d'un train simplifié, il n'y a que 3 éléments: grande courbe, petite courbe et droite. Ceux-ci sont tous basés sur une grille carrée:
- "Big Curve" est un coin à 90 degrés, couvrant 2 unités dans chaque dimension
- "Little Curve" est un coin à 90 degrés, couvrant une unité dans chaque direction
- "Straight" est un élément droit, 1 unité de long
Cela signifie que le circuit minimum possible est formé de 4 petites courbes - c'est un cercle, de rayon 1 unité. Cela peut être étendu en ajoutant des paires d'éléments droits pour former divers ovales. Il existe d'autres circuits possibles en ajoutant plus de courbes ou en mélangeant les types de courbes.
Cet ensemble de train ne comprend aucune jonction ni aucune méthode pour les voies à traverser, il n'est donc pas valable pour deux éléments de se connecter à la même extrémité d'un autre élément (pas de formations Y) ou de se croiser (pas de formations X) . De plus, c'est un ensemble de trains, donc toute formation qui ne permet pas à un train de passer n'est pas valide: les exemples incluent les lignes droites se rencontrant à des angles de 90 degrés (il doit toujours y avoir une courbe entre les lignes droites perpendiculaires) et les courbes se rencontrant à des angles de 90 degrés (les courbes doivent couler).
Vous souhaitez également utiliser autant de pièces que possible, en ignorant leur type, vous opterez donc toujours pour un circuit qui contient plus de bits. Enfin, vous n'avez qu'un seul train, donc toute solution qui aboutit à plusieurs circuits est inacceptable .
Contribution
Soit un tableau de trois entiers, tous supérieurs ou égaux à 0, correspondant au nombre de grandes courbes, de petites courbes et de lignes droites disponibles, ou de paramètres passés à votre programme, dans le même ordre.
Sortie
Un nombre correspondant au nombre de pièces restantes lors de la construction du circuit maximum possible pour les éléments fournis.
Données de test
Minimal circuit using big curves
Input: [4,0,0]
Output: 0
Slightly more complicated circuit
Input: [3,1,2]
Output: 0
Incomplete circuit - can't join
Input: [3,0,0]
Output: 3
Incomplete circuit - can't join
Input: [3,1,1]
Output: 5
Circuit where big curves share a centre
Input: [2,2,0]
Output: 0
Bigger circuit
Input: [2,6,4]
Output: 0
Circuit where both concave and convex curves required
Input: [8,0,0] or [0,8,0]
Output: 0
Circuit with left over bit
Input: [5,0,0] or [0,5,0]
Output: 1
Remarques
- 2 lignes droites et une petite courbe équivalent à une grande courbe, mais utilisez plus de pièces, donc sont préférées - ne devrait jamais être une situation où cette combinaison est laissée, s'il y a de grandes courbes dans le circuit
- 4 petites courbes peuvent généralement être échangées pour 4 lignes droites, mais pas si cela entraîne une intersection du circuit
- Le train est également idéalisé - les éléments de voie occupent les largeurs indiquées, il est donc valable que les courbes traversent un seul quadrillage sans se croiser, dans certains cas. La grille définit simplement les dimensions des éléments. En particulier, deux grandes courbes peuvent être placées de sorte que le carré de la grille en haut à gauche du diagramme d'exemple soit également le carré en bas à droite d'une autre grande courbe allant de gauche à haut (avec le diagramme montrant une allant de droite à bas)
- Une petite courbe peut tenir dans l'espace vide sous une grande courbe (carré de grille en bas à droite au-dessus). Une deuxième grande courbe pourrait également utiliser cet espace, décalée d'un côté et d'un vers le bas depuis le premier
- Une petite courbe ne peut pas tenir sur le même espace de grille que l'extérieur d'une grande courbe - principalement parce qu'il n'y a aucun moyen de s'y connecter qui ne se coupe pas illégalement
[5,0,0]
ou[0,5,0]
serait1
. Est-ce exact? Pourriez-vous ajouter un tel cas de test?[8,0,0]
Réponses:
[JavaScript (Node.js)], 1220 octets
Essayez-le en ligne!
Remarque: L'entrée est en fait la variable q au début. [2,6,4] prendra également pas mal de temps car il s'agit d'une solution de force brute sans optimisation.
En fait, je l'ai fait parce qu'il n'y a pas eu de réponse depuis plus d'un an et j'étais juste un peu curieux de savoir si c'était possible.
Code d'origine:
je dois d'abord inclure un graphique des tuiles que j'ai utilisées.
Désolé si l'écriture est difficile à lire, je n'ai pas l'habitude d'expliquer comment fonctionne mon code.
PS J'ai en fait aussi fait quelques fonctions pour dessiner les cartes au format png mais bien sûr celles-ci ont été supprimées pour économiser au moins un peu d'espace.
la source
p[a.n]-=1
place dep[a.n]--
?q
comme ça n'est pas une méthode d'entrée autorisée . Le plus souvent, faites-en un argument de fonction ou lisez-le depuis stdin.