Chuck Norris vs Traveling Salesman

19

Wprowadzenie

Prawie wszyscy znają problem Traveling Salesman Problem (TSP). Zadanie polega na Nznalezieniu, na podstawie listy miast, minimalnego cyklu hamiltonowskiego , czyli najkrótszej ścieżki, która odwiedza każde miasto i zatacza koło. Nie o to chodzi w tym wyzwaniu. Wyzwanie polega na wdrożeniu rozwiązania Chucka Norrisa w TSP:

Chuck Norris rozwiązał problem Podróżującego Sprzedawcy na O(1)czas: rozbić sprzedawcę na N części; kopnij każdy kawałek do innego miasta.

Wyzwanie

Aby rozwiązać TSP w ten sposób, potrzebujemy wystarczająco trwałego sprzedawcy, który nie będzie unikał frywolności, takich jak rozczłonkowanie; wiele miast do odwiedzenia; zestaw produktów do sprzedaży; konkretna metoda rozczłonkowania; oraz obliczenie punktacji.

Specyfikacja

  • Miasta
    • N to liczba odwiedzin, które odwiedzi nasz sprzedawca
  • Sprzedawca
    • Główny program lub funkcja
    • Napisane w języku X
    • O długości mod Nrównej0
  • Produkty
    • Pełne nazwy elementów układu okresowego
    • Obejmuje to nowo zaakceptowane nazwy elementów
  • Amputacja
    • Krojenie sprzedawcy na Nciągłe kawałki o równej długości
    • Każdy utwór powinien być prawidłową funkcją lub programem w języku X
  • Wynik
    • Po wykonaniu Sprzedawca powinien wysyłać, Chuck Norrisa pokrojone kawałki powinny dawać odrębny produkt
    • Dopuszczalna jest tylko dodatkowa spacja
  • Punktacja
    • Długość Lsprzedawcy w bajtach podzielona przez liczbę miast N, do kwadratu.
    • Score = L/(N*N)
    • Najmniejszy wynik wygrywa
    • Podczas publikowania wyniku dziesiętnego należy podać 3 znaczące liczby

Przykłady

  1. Ten sprzedawca odwiedza 3 miasta, N=3a jego długość to 9 L=9. Tak więc wynik tej odpowiedzi byłby następujący S = 9 / (3 * 3) = 9/9 = 1.
    • Należy pamiętać, że sprzedawca i każdy pokrojony kawałek (których jest 3), wszystkie powinny być poprawnymi programami lub funkcjami w tym samym języku.
Program      -> Output
-------         ------
aaaBBBccc    -> Chuck Norris

aaa          -> Helium
BBB          -> Iridium
ccc          -> Tennessine
  1. N=4i L=20takS=20/16=1.25
Program                 -> Output
-------                    ------
aaaaaBBBBBcccccDDDDD    -> Chuck Norris

aaaaa                   -> Hydrogen
BBBBB                   -> Cadmium
ccccc                   -> Mercury
DDDDD                   -> Iron
Nieliniowe Owoce
źródło
3
Czy ElementDatadozwolone są wbudowane elementy takie jak Mathematica ? (Wątpię, czy to dużo zaoszczędzi, ale nie wiem.)
Martin Ender
Czy ważna jest kapitalizacja wyników?
Martin Ender
1
@MartinEnder ^^ tak ^ tak
NonlinearFruit
6
Czy ktokolwiek z bliskich wyborców może wyjaśnić, która część jest dla niej niejasna? (Wiem, że nie mogą to być tylko moje dwa pytania, które nawet nie uważam za jednoznaczne w tym wyzwaniu, ponieważ kiedy już je opublikowałem, głosowanie było bliskie).
Martin Ender
2
Całkowicie zgadzam się z @MartinEnder. Jeśli nie lubisz wyzwań, po prostu spróbuj innego.
edc65

Odpowiedzi:

11

CJam, L = 1482, N = 114, wynik 0,114

'C:L"arbon"  L'h+:L;"Gold"L'u+:L;"Iron"L'c+:L;"Lead"L'k+:L;"Neon"LS+:L;"Argon"L'N+:L"ickel"L'o+:L;"Zinc""Coppe"L'r+:L"Silve"L'r+:LL'i+:L;"Tin" "Boron"      "Radon"      "Barium"     "Cerium"     "Cesium"     "Cobalt"     "Curium"     "Erbium"     "Helium"     "Indium"     "Iodine"     "Osmium"     "Oxygen"     "Radium"     "Sodium"     "Sulfur"     "Arsenic"    "Bismuth"    "Bohrium"    "Bromine"    "Cadmium"    "Calcium"    "Dubnium"    "Fermium"    "Gallium"    "Hafnium"    "Hassium"    "Holmium"    "Iridium"    "Krypton"    "Lithium"    "Mercury"    "Niobium"    "Rhenium"    "Rhodium"    "Silicon"    "Terbium"    "Thorium"    "Thulium"    "Uranium"    "Yttrium"    "Actinium"   "Aluminum"   "Antimony"   "Astatine"   "Chlorine"   "Chromium"   "Europium"   "Fluorine"   "Francium"   "Hydrogen"   "Lutetium"   "Nihonium"   "Nitrogen"   "Nobelium"   "Platinum"   "Polonium"   "Rubidium"   "Samarium"   "Scandium"   "Selenium"   "Tantalum"   "Thallium"   "Titanium"   "Tungsten"   "Vanadium"   "Americium"  "Berkelium"  "Beryllium"  "Flerovium"  "Germanium"  "Lanthanum"  "Magnesium"  "Manganese"  "Moscovium"  "Neodymium"  "Neptunium"  "Oganesson"  "Palladium"  "Plutonium"  "Potassium"  "Ruthenium"  "Strontium"  "Tellurium"  "Ytterbium"  "Zirconium"  "Dysprosium" "Gadolinium" "Lawrencium" "Meitnerium" "Molybdenum" "Phosphorus" "Promethium" "Seaborgium" "Technetium" "Tennessine" "Californium""Copernicium""Einsteinium""Livermorium""Mendelevium""Roentgenium"]L's+"Xenon"?

Wypróbuj online!

Każdy program ma 13 bajtów. Tutaj są one podzielone na poszczególne linie:

'C:L"arbon"  
L'h+:L;"Gold"
L'u+:L;"Iron"
L'c+:L;"Lead"
L'k+:L;"Neon"
LS+:L;"Argon"
L'N+:L"ickel"
L'o+:L;"Zinc"
"Coppe"L'r+:L
"Silve"L'r+:L
L'i+:L;"Tin" 
"Boron"      
"Radon"      
"Barium"     
"Cerium"     
"Cesium"     
"Cobalt"     
"Curium"     
"Erbium"     
"Helium"     
"Indium"     
"Iodine"     
"Osmium"     
"Oxygen"     
"Radium"     
"Sodium"     
"Sulfur"     
"Arsenic"    
"Bismuth"    
"Bohrium"    
"Bromine"    
"Cadmium"    
"Calcium"    
"Dubnium"    
"Fermium"    
"Gallium"    
"Hafnium"    
"Hassium"    
"Holmium"    
"Iridium"    
"Krypton"    
"Lithium"    
"Mercury"    
"Niobium"    
"Rhenium"    
"Rhodium"    
"Silicon"    
"Terbium"    
"Thorium"    
"Thulium"    
"Uranium"    
"Yttrium"    
"Actinium"   
"Aluminum"   
"Antimony"   
"Astatine"   
"Chlorine"   
"Chromium"   
"Europium"   
"Fluorine"   
"Francium"   
"Hydrogen"   
"Lutetium"   
"Nihonium"   
"Nitrogen"   
"Nobelium"   
"Platinum"   
"Polonium"   
"Rubidium"   
"Samarium"   
"Scandium"   
"Selenium"   
"Tantalum"   
"Thallium"   
"Titanium"   
"Tungsten"   
"Vanadium"   
"Americium"  
"Berkelium"  
"Beryllium"  
"Flerovium"  
"Germanium"  
"Lanthanum"  
"Magnesium"  
"Manganese"  
"Moscovium"  
"Neodymium"  
"Neptunium"  
"Oganesson"  
"Palladium"  
"Plutonium"  
"Potassium"  
"Ruthenium"  
"Strontium"  
"Tellurium"  
"Ytterbium"  
"Zirconium"  
"Dysprosium" 
"Gadolinium" 
"Lawrencium" 
"Meitnerium" 
"Molybdenum" 
"Phosphorus" 
"Promethium" 
"Seaborgium" 
"Technetium" 
"Tennessine" 
"Californium"
"Copernicium"
"Einsteinium"
"Livermorium"
"Mendelevium"
"Roentgenium"
]L's+"Xenon"?

Brakujące elementy to Darmstadtium, Praseodymium, Protactinium i Rutherfordium, które mają 12 lub 13 znaków, co oznacza, że ​​nie mogę wydrukować ich po 13 znaków.

Chodzi o to, że kilka pierwszych programów, które drukują elementy o krótkich nazwach, używają obcych znaków do budowania łańcucha Chuck Norriw zmiennej L, co nie wpływa na dane wyjściowe, gdy jest używane samodzielnie. Ostateczny program sprawdza następnie, czy coś jest już na stosie, i używa go do wybierania między L(plus s) a Xenon.

Kilka dodatkowych bajtów jest zapisywanych przy użyciu znaku, który właśnie dodaliśmy, Ljako części nazwy elementu, szczególnie dla Carbon, Nickel, Coppe ri Silve r.

Martin Ender
źródło
2

Python, L = 2596, N = 118, wynik = 0,186

Długość każdego plasterka wynosi 22 , co czyni go dość długim.

lambda:"Gold"; print"""";print "Carbon     "print   "Thorium     "print   "Curium      "print "Calcium       "print "Nickel        "print      "Zinc     "print    "Neon       "print "Boron         "print   "Iron        "print  "Cerium       "print "Barium        "print "Caesium       """[9::22];lambda:"Tin"[0];lambda:"Lead    "#print"Argon          "print"Radon          "print"Xenon          "print"Erbium         "print"Cobalt         "print"Copper         "print"Helium         "print"Indium         "print"Iodine         "print"Osmium         "print"Oxygen         "print"Radium         "print"Silver         "print"Sodium         "print"Sulfur         "print"Arsenic        "print"Bismuth        "print"Bohrium        "print"Bromine        "print"Cadmium        "print"Dubnium        "print"Fermium        "print"Gallium        "print"Hafnium        "print"Hassium        "print"Holmium        "print"Iridium        "print"Krypton        "print"Lithium        "print"Mercury        "print"Niobium        "print"Rhenium        "print"Rhodium        "print"Silicon        "print"Terbium        "print"Thulium        "print"Uranium        "print"Yttrium        "print"Actinium       "print"Antimony       "print"Astatine       "print"Chlorine       "print"Chromium       "print"Europium       "print"Fluorine       "print"Francium       "print"Hydrogen       "print"Lutetium       "print"Nitrogen       "print"Nobelium       "print"Platinum       "print"Polonium       "print"Rubidium       "print"Samarium       "print"Scandium       "print"Selenium       "print"Tantalum       "print"Thallium       "print"Titanium       "print"Tungsten       "print"Vanadium       "print"Nihonium       "print"Aluminium      "print"Americium      "print"Berkelium      "print"Beryllium      "print"Flerovium      "print"Germanium      "print"Lanthanum      "print"Magnesium      "print"Manganese      "print"Neodymium      "print"Neptunium      "print"Palladium      "print"Plutonium      "print"Potassium      "print"Ruthenium      "print"Strontium      "print"Tellurium      "print"Ytterbium      "print"Zirconium      "print"Moscovium      "print"Oganesson      "print"Dysprosium     "print"Gadolinium     "print"Lawrencium     "print"Meitnerium     "print"Molybdenum     "print"Phosphorus     "print"Promethium     "print"Seaborgium     "print"Technetium     "print"Tennessine     "print"Californium    "print"Copernicium    "print"Einsteinium    "print"Livermorium    "print"Mendelevium    "print"Roentgenium    "print"Darmstadtium   "print"Praseodymium   "print"Protactinium   "print"Rutherfordium  "

Oto sprzedawca po krojeniu i krojeniu w kostkę:

lambda:"Gold"; print""  # <-- This is a function
"";print "Carbon     "
print   "Thorium     "
print   "Curium      "
print "Calcium       "
print "Nickel        "
print      "Zinc     "
print    "Neon       "
print "Boron         "
print   "Iron        "
print  "Cerium       "
print "Barium        "
print "Caesium       "
""[9::22];lambda:"Tin"  # <-- This is a function and the choke point
[0];lambda:"Lead    "#  # <-- This is a function
print"Argon          "
print"Radon          "
print"Xenon          "
print"Erbium         "
print"Cobalt         "
print"Copper         "
print"Helium         "
print"Indium         "
print"Iodine         "
print"Osmium         "
print"Oxygen         "
print"Radium         "
print"Silver         "
print"Sodium         "
print"Sulfur         "
print"Arsenic        "
print"Bismuth        "
print"Bohrium        "
print"Bromine        "
print"Cadmium        "
print"Dubnium        "
print"Fermium        "
print"Gallium        "
print"Hafnium        "
print"Hassium        "
print"Holmium        "
print"Iridium        "
print"Krypton        "
print"Lithium        "
print"Mercury        "
print"Niobium        "
print"Rhenium        "
print"Rhodium        "
print"Silicon        "
print"Terbium        "
print"Thulium        "
print"Uranium        "
print"Yttrium        "
print"Actinium       "
print"Antimony       "
print"Astatine       "
print"Chlorine       "
print"Chromium       "
print"Europium       "
print"Fluorine       "
print"Francium       "
print"Hydrogen       "
print"Lutetium       "
print"Nitrogen       "
print"Nobelium       "
print"Platinum       "
print"Polonium       "
print"Rubidium       "
print"Samarium       "
print"Scandium       "
print"Selenium       "
print"Tantalum       "
print"Thallium       "
print"Titanium       "
print"Tungsten       "
print"Vanadium       "
print"Nihonium       "
print"Aluminium      "
print"Americium      "
print"Berkelium      "
print"Beryllium      "
print"Flerovium      "
print"Germanium      "
print"Lanthanum      "
print"Magnesium      "
print"Manganese      "
print"Neodymium      "
print"Neptunium      "
print"Palladium      "
print"Plutonium      "
print"Potassium      "
print"Ruthenium      "
print"Strontium      "
print"Tellurium      "
print"Ytterbium      "
print"Zirconium      "
print"Moscovium      "
print"Oganesson      "
print"Dysprosium     "
print"Gadolinium     "
print"Lawrencium     "
print"Meitnerium     "
print"Molybdenum     "
print"Phosphorus     "
print"Promethium     "
print"Seaborgium     "
print"Technetium     "
print"Tennessine     "
print"Californium    "
print"Copernicium    "
print"Einsteinium    "
print"Livermorium    "
print"Mendelevium    "
print"Roentgenium    "
print"Darmstadtium   "
print"Praseodymium   "
print"Protactinium   "
print"Rutherfordium  "

wprowadź opis zdjęcia tutaj


Aktualizacja

  • [16-09-08] Sublime dodał dodatkową spację podczas łączenia z linią, która kończy się znakiem komentarza
  • [16-09-08] Każdy kawałek ma 22 znaki i dodaje gif
Nieliniowe Owoce
źródło
W Pythonie jestem dość znany, jak działa lambda:"Actinium";print""Actinium? Czy może to dotyczy konkretnie Pythona 3?
Linus
@Linus Słowo kluczowe lambda tworzy anonimową funkcję, która nie przyjmuje parametrów i zwraca Actinium. print ""Nie coś pożytecznego zrobić po sprzedawcę zostało rozczłonkowane.
NielinioweOwoce