Chuck Norris vs Travelling Salesman


19

pengantar

Hampir semua orang terbiasa dengan Traveling Salesman Problem (TSP). Tugasnya adalah untuk, diberikan daftar Nkota, menemukan siklus Hamiltonian minimum yaitu jalur terpendek yang mengunjungi masing-masing kota dan datang kembali ke awal. Bukan itu tantangannya. Tantangan ini adalah untuk mengimplementasikan solusi Chuck Norris ke TSP:

Chuck Norris menyelesaikan masalah Travelling Salesman O(1)tepat waktu: memecah salesman menjadi beberapa bagian; tendang setiap bagian ke kota yang berbeda.

Tantangan

Untuk menyelesaikan TSP dengan cara ini, kita membutuhkan Salesman yang cukup tahan lama yang tidak akan menghindar dari kesembronoan seperti pemotongan; sejumlah kota untuk dikunjungi; satu set produk untuk dijual; metode konkrit untuk pemotongan; dan perhitungan untuk penilaian.

Spesifikasi

  • Kota
    • N adalah jumlah kutipan yang akan dikunjungi oleh Salesman kami
  • Penjual
    • Program atau fungsi utama
    • Ditulis dalam bahasa X
    • Dengan panjang mod Nsama dengan0
  • Produk
    • Nama lengkap elemen pada Tabel Periodik
    • Ini termasuk nama elemen yang baru diterima
  • Pemotongan
    • Mengiris Salesman menjadi Npotongan terus menerus dengan panjang yang sama
    • Setiap karya harus merupakan fungsi atau program yang valid dalam bahasa X
  • Keluaran
    • Ketika dieksekusi, Salesman harus mengeluarkan Chuck Norrisdan potongan masing-masing harus mengeluarkan produk yang berbeda
    • Hanya ruang ekstra trailing putih yang dapat diterima
  • Mencetak gol
    • Panjang,, Ldari Salesman dalam bytes dibagi dengan jumlah kota N,, kuadrat.
    • Score = L/(N*N)
    • Kemenangan skor terkecil
    • Harap sertakan 3 angka penting saat memposting skor desimal Anda

Contohnya

  1. Salesman ini mengunjungi 3 kota N=3dan dan memiliki panjang 9 jadi L=9. Jadi skor untuk jawaban ini adalah S = 9 / (3 * 3) = 9/9 = 1.
    • Perhatikan bahwa Salesman dan masing-masing potongan yang diiris (yang ada 3), semuanya harus merupakan program atau fungsi yang valid dalam bahasa yang sama.
Program      -> Output
-------         ------
aaaBBBccc    -> Chuck Norris

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

aaaaa                   -> Hydrogen
BBBBB                   -> Cadmium
ccccc                   -> Mercury
DDDDD                   -> Iron

3
Apakah bawaan seperti Mathematica ElementDatadiperbolehkan? (Saya ragu itu akan menghemat banyak, tetapi saya tidak tahu.)
Martin Ender

Apakah kapitalisasi output penting?
Martin Ender

1
@MartinEnder ^^ ya ^ ya
NonlinearFruit

6
Bisakah salah satu pemilih dekat menjelaskan bagian mana yang mereka temukan tidak jelas? (Saya tahu ini bukan hanya dua pertanyaan saya, yang menurut saya bahkan tidak perlu dibahas secara eksplisit dalam tantangan, karena sudah ada suara yang dekat ketika saya mempostingnya.)
Martin Ender

2
Sepenuhnya setuju dengan @MartinEnder. Jika Anda tidak menyukai tantangan, coba saja yang lain.
edc65

Jawaban:


11

CJam, L = 1482, N = 114, skor 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"?

Cobalah online!

Setiap program panjangnya 13 byte. Di sini mereka dibagi menjadi beberapa baris:

'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"?

Elemen yang hilang adalah Darmstadtium, Praseodymium, Protactinium dan Rutherfordium yang panjangnya 12 atau 13 karakter yang berarti saya tidak dapat mencetaknya masing-masing dalam 13 karakter.

Idenya adalah bahwa beberapa program pertama, yang mencetak elemen dengan nama pendek menggunakan karakter asing mereka untuk membangun string Chuck Norridalam variabel L, yang tidak mempengaruhi output ketika digunakan sendiri. Program terakhir kemudian memeriksa apakah ada yang sudah ada di stack, dan menggunakannya untuk memilih antara L(plus s) dan Xenon.

Beberapa byte tambahan disimpan dengan menggunakan karakter yang baru saja kita tambahkan Lsebagai bagian dari nama elemen, khusus untuk Carbon, Nickel, Coppe rdan Silve r.


2

Python, L = 2596, N = 118, Skor = 0.186

Panjang setiap irisan adalah 22 sehingga membuatnya cukup panjang.

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  "

Berikut adalah Salesman setelah mengiris dan dicing:

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  "

masukkan deskripsi gambar di sini


Memperbarui

  • [16-09-08] Sublime menambahkan ruang ekstra saat bergabung ke baris yang diakhiri dengan karakter komentar
  • [16-09-08] Membuat setiap irisan 22 karakter panjang dan menambahkan gif

Saya cukup tahu di Python, bagaimana lambda:"Actinium";print""output Actinium? Apakah ini khusus untuk Python 3?
Linus

@Linus Kata kunci lambda menciptakan fungsi anonim yang tidak mengambil parameter dan mengembalikan Actinium. Tidak print ""melakukan apa pun yang berguna setelah Salesman telah dipotong-potong.
NonlinearFruit
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.