Dans ce défi, vous passez deux choses:
- Une longueur de chaîne,
N
- Une liste de chaînes,
L
chacune avec une valeur de point assignée. Toute chaîne non transmise a une valeur en points de 0
Vous devez construire une chaîne de longueur N
telle que la somme de tous les points de sous-chaîne soit aussi grande que possible.
Par exemple:
5 [("ABC", 3), ("DEF", 4), ("CDG", 2)]
devrait sortir
ABCDG
Parce que les deux sous-chaînes avec des points ( ABC
et CDG
) ont un total de 5 points, et aucune autre construction possible ne peut donner 5 points ou plus.
Les sous-chaînes peuvent être utilisées plusieurs fois dans une chaîne et peuvent se chevaucher. Vous pouvez supposer que les points seront toujours positifs, la longueur des sous-chaînes sera comprise entre 1 et les N
caractères longs, et cela N > 0
. Si plusieurs constructions sont maximales, imprimez l'une d'entre elles.
Votre programme doit s'exécuter dans un délai raisonnable (pas plus d'une minute pour chacun des exemples):
1 [("A", 7), ("B", 4), ("C", 100)] => C
2 [("A", 2), ("B", 3), ("AB", 2)] => AB
2 [("A", 1), ("B", 2), ("CD", 3)] => BB
2 [("AD", 1), ("B", 2), ("ZB", 3)] => ZB
3 [("AB", 2), ("BC", 1), ("CA", 3)] => CAB
3 [("ABC", 4), ("DEF", 4), ("E", 1)] => DEF
4 [("A", 1), ("BAB", 2), ("ABCD", 3)] => AAAA or ABAB or BABA or ABCD
5 [("A", 1), ("BAB", 2), ("ABCD", 3)] => BABCD or BABAB
5 [("ABC", 3), ("DEF", 4), ("CDG", 2)] => ABCDG
5 [("AB", 10), ("BC", 2), ("CA", 2)] => ABCAB
6 [("AB", 10), ("BC", 2), ("CA", 2)] => ABABAB
8 [("AA", 3), ("BA", 5)] => BAAAAAAA
10 [("ABCDE", 19), ("ACEBD", 18), ("ABEDC", 17), ("BCEDA", 16), ("EBDAC", 15), ("BACD", 14), ("CADB", 13), ("ABDC", 12), ("CABD", 11), ("EBDC", 10), ("ACE", 9), ("CBA", 8), ("AEC", 7), ("BE", 6), ("AE", 5), ("DC", 4), ("BA", 3), ("A", 2), ("D", 1)]
=> ACEBDACEBD
Ceci est un code-golf , alors préparez votre réponse la plus courte dans votre langue préférée!
DEF
tuple manque une virgule