Je viens de tomber sur ce petit problème sur les rayons UVA en Ligne du Juge et de la pensée, qu'il peut être un bon candidat pour un peu de code-golf.
Le problème:
Vous êtes à la conception d'un programme pour aider un architecte dans le dessin de la ligne d'horizon d'une ville étant donné l'emplacement des bâtiments de la ville. Pour rendre le problème traitable, tous les édifices sont de forme rectangulaire et ils partagent un fond commun de la ville, ils sont construits dans le est très plat). La ville est également considérée comme deux dimensions. Un bâtiment est spécifié par un ordre triple (Li, Hi, Ri) où Li et Ri sont à gauche et à droite des coordonnées, respectivement, de la construction i et Hi est la hauteur de l'édifice.
Dans le diagramme ci-dessous bâtiments sont indiqués sur la gauche avec des triples
(1,11,5), (2,6,7), (3,13,9), (12,7,16), (14,3,25), (19,18,22), (23,13,29), (24,4,28)
et la ligne d'horizon, comme illustré sur la droite, est représenté par la séquence:
1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0
La sortie doit contenir le vecteur qui décrit la ligne d'horizon, comme illustré dans l'exemple ci-dessus. Dans la ligne d'horizon vecteur (v1, v2, v3, ..., vn) , la vi tels que i est un nombre pair représentent une ligne horizontale (hauteur). Le vi tels que i est un nombre impair représenter une ligne verticale (abscisse). La ligne d'horizon vecteur doit représenter le "chemin", par exemple, par un bug de départ au minimum x-coordonner et de voyager horizontalement et verticalement au-dessus de toutes les lignes qui définissent la ligne d'horizon. Ainsi, la dernière entrée de la ligne d'horizon vecteur sera un 0. Les coordonnées doivent être séparés par un espace vide.
Si je ne compte pas la déclaration prévue (de test) les bâtiments et y compris tous les espaces et les caractères de tabulation, ma solution, en Python, est 223 caractères.
Ici est la version condensée:
B=[[1,11,5],[2,6,7],[3,13,9],[12,7,16],[14,3,25],[19,18,22],[23,13,29],[24,4,28]]
# Solution.
R=range
v=[0 for e in R(max([y[2] for y in B])+1)]
for b in B:
for x in R(b[0], b[2]):
if b[1]>v[x]:
v[x]=b[1]
p=1
k=0
for x in R(len(v)):
V=v[x]
if p and V==0:
continue
elif V!=k:
p=0
print "%s %s" % (str(x), str(V)),
k=V
Je pense que je n'ai pas fait d'erreur, mais si oui, n'hésitez pas à me critiquer.
Je n'ai pas beaucoup de réputation, donc je vais payer seulement 100 pour un bounty - je suis curieux de savoir, si quelqu'un pouvait essayer de le résoudre en moins de .. disons, de 80 caractères. La Solution posté par cobbal est 101 caractères et actuellement il est le meilleur.
J'ai pensé, que de 80 caractères est un malade limite pour ce genre de problème. cobbal, avec ses 46 caractère solution totalement étonné moi - même si je dois admettre que j'ai passé un certain temps à la lecture de son explication avant que je partiellement compris ce qu'il avait écrit.