Il y a n cases, numérotées de 1 à n . Chaque boîte est verrouillée, de sorte qu'elle peut être ouverte par un seul type de clé correspondant (également numéroté 1-n ). Ces clés sont dispersées au hasard dans les boîtes (une boîte peut avoir n'importe quel nombre de clés, une clé peut avoir un nombre quelconque de doublons), puis toutes les boîtes sont fermées. Un trésor (numéroté 0 ) a également été enfermé dans de nombreuses boîtes.
Vous avez engagé un serrurier pour récupérer tous les trésors. Il facture pour chaque boîte qu'il ouvre. L'ouverture d'une boîte pour laquelle la clé est déjà disponible est gratuite.
L'entrée est le contenu de chaque boîte. Vous pouvez décider du format de l'entrée.
Produisez le coût minimum requis pour obtenir les trésors.
Remarques
- Votre algorithme peut prendre beaucoup de temps, mais ce n'est pas pertinent.
- Le code le plus court gagne.
- Pas besoin de s'inquiéter d'une entrée invalide.
Exemples de données
Ici, la ligne i représente les clés présentes dans la case i .
Contribution
2 0
3
4 0
5 6 0
6
0
Production
1
Contribution
2 0
3 0
4 0
6
5 0
Production
3
Contribution
2 4 0
3 0
1 0
6
5 0
Production
2
Contribution
1
3 4
2 6
5
Production
0
la source
[[1] [3 4] [] [] [2 6] [5]]
ou peut-être{{1},{3,4},{},{},{2,6},{5}}
. De cette façon, la plupart des langues peuvent réduire la lecture de l'entrée à quelque chose d'aussi triviali=eval(read())
et se concentrer sur la partie amusante du défi.Réponses:
CJam,
59525049454342 octetsMerci à @ MartinBüttner pour avoir joué au golf sur 3 octets et ouvert la voie à 4 autres!
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
array long &
travaux, de sorte que vous pouvez supprimer lea
de0a&
. Malheureusement, cela rend un peu plus difficile de vous attraper.0a&
par0&
, je dois aussi remplacer0+
par0aa+
, car0 0&
c'est de la falsification.CJam (53 octets)
C'est un peu trop lent pour l'interprète en ligne.
Dissection
la source
java.lang.OutOfMemoryError: Java heap space
avec votre programme.[ [4,0], [1,3,4], [0], [6,0], [3,0], [5]]
bien sûr avec le style d'entrée comme indiqué dans le post original.Haskell, 173 octets
l
est celui que tu veux appeler.Je ne sais pas si je ne devrais pas utiliser un pseudo- à la
Map
place ([(Int,[Int])]
au lieu de[[Int]]
).la source