introduction
Presque tout le monde connaît le problème des vendeurs ambulants (TSP). La tâche consiste à, à partir d'une liste de N
villes, trouver le cycle hamiltonien minimum , c'est-à-dire le chemin le plus court qui visite chaque ville et revient en boucle au départ. Ce n'est pas de cela qu'il s'agit. Ce défi consiste à implémenter la solution de Chuck Norris au TSP:
Chuck Norris a résolu le problème du voyageur de
O(1)
commerce à temps: divisez le vendeur en N morceaux; donner un coup de pied chaque morceau à une ville différente.
Défi
Afin de résoudre le TSP de cette manière, nous avons besoin d'un vendeur suffisamment durable qui ne craindra pas les frivolités comme le démembrement; un certain nombre de villes à visiter; un ensemble de produits à vendre; une méthode concrète de démembrement; et un calcul pour la notation.
spécification
- Villes
N
est le nombre de citations que notre vendeur visitera
- Vendeur
- Le programme ou la fonction principale
- Écrit dans la langue
X
- Avec une longueur mod
N
égale à0
- Des produits
- Les noms complets des éléments du tableau périodique
- Cela inclut les noms des éléments nouvellement acceptés
- Démembrement
- Couper le vendeur en
N
morceaux continus de longueur égale - Chaque pièce doit être une fonction ou un programme valide dans la langue
X
- Couper le vendeur en
- Production
- Une fois exécuté, le vendeur doit produire
Chuck Norris
et les morceaux en tranches doivent chacun produire un produit distinct - Seul un espace blanc arrière supplémentaire est acceptable
- Une fois exécuté, le vendeur doit produire
- Notation
- La longueur,
L
du vendeur en octets divisée par le nombre de villesN
,, au carré. Score = L/(N*N)
- Plus petit score gagne
- Veuillez inclure 3 chiffres significatifs lors de la publication de votre score décimal
- La longueur,
Exemples
- Ce vendeur visite 3 villes ainsi
N=3
et il a une longueur de 9 doncL=9
. Ainsi, le score de cette réponse seraitS = 9 / (3 * 3) = 9/9 = 1
.- Notez que le vendeur et chaque pièce découpée (dont il y en a 3) doivent tous être des programmes ou des fonctions valides dans la même langue.
Program -> Output
------- ------
aaaBBBccc -> Chuck Norris
aaa -> Helium
BBB -> Iridium
ccc -> Tennessine
N=4
etL=20
ainsiS=20/16=1.25
Program -> Output
------- ------
aaaaaBBBBBcccccDDDDD -> Chuck Norris
aaaaa -> Hydrogen
BBBBB -> Cadmium
ccccc -> Mercury
DDDDD -> Iron
la source
ElementData
autorisées? (Je doute que cela économise beaucoup, mais je ne sais pas.)Réponses:
CJam, L = 1482, N = 114, score de 0,114
Essayez-le en ligne!
Chaque programme est long de 13 octets. Ici, ils sont divisés en lignes individuelles:
Les éléments manquants sont le Darmstadtium, le Praséodyme, le Protactinium et le Rutherfordium qui ont 12 ou 13 caractères, ce qui signifie que je ne peux pas les imprimer en 13 caractères chacun.
L'idée est que les premiers programmes, qui impriment les éléments avec des noms courts, utilisent leurs caractères étrangers pour construire la chaîne
Chuck Norri
dans la variableL
, ce qui n'affecte pas la sortie lorsqu'ils sont utilisés seuls. Le programme final vérifie ensuite s'il y a déjà quelque chose sur la pile et l'utilise pour choisir entreL
(pluss
) etXenon
.Quelques octets supplémentaires sont enregistrés en utilisant le caractère que nous venons d'ajouter dans le
L
nom de l'élément, spécifiquement pourC
arbon,N
ickel, Copper
et Silver
.la source
Python, L = 2596, N = 118, score = 0,186
La longueur de chaque tranche est de 22, ce qui rend cette opération assez longue.
Voici le vendeur après le découpage et le découpage:
Mise à jour
la source
lambda:"Actinium";print""
Actinium? Est-ce peut-être particulier à Python 3?Actinium
. Leprint ""
ne fait rien d'utile après le démembrement du vendeur.