Chuck Norris กับพนักงานขายเดินทาง


19

บทนำ

เกือบทุกคนคุ้นเคยกับปัญหาพนักงานขายเดินทาง (TSP) ภารกิจคือให้รายชื่อNเมืองค้นหารอบมิลโตเนียนขั้นต่ำซึ่งจะกล่าวถึงเส้นทางที่สั้นที่สุดที่เข้าชมแต่ละเมืองและกลับมาเป็นวงกลมแบบเต็มกลับไปที่จุดเริ่มต้น นั่นไม่ใช่ความท้าทายนี้เกี่ยวกับ ความท้าทายนี้คือการนำโซลูชัน Chuck Norris ไปใช้กับ TSP:

Chuck Norris แก้ไขปัญหาพนักงานขายเดินทางให้O(1)ทันเวลาแบ่งพนักงานขายออกเป็นชิ้น ๆ เตะแต่ละชิ้นไปยังเมืองอื่น

ท้าทาย

เพื่อที่จะแก้ปัญหา TSP ด้วยวิธีนี้เราต้องการพนักงานขายที่มีความทนทานเพียงพอที่จะไม่หนีจากความยุ่งยากเช่นการสูญเสียอวัยวะ จำนวนเมืองที่ควรเยี่ยมชม ชุดผลิตภัณฑ์ที่จะขาย วิธีที่เป็นรูปธรรมสำหรับการแยกส่วน และการคำนวณเพื่อให้คะแนน

สเปค

  • เมือง
    • N คือจำนวนการอ้างถึงพนักงานขายของเราจะไปเยี่ยมชม
  • พนักงานขาย
    • โปรแกรมหรือฟังก์ชั่นหลัก
    • เขียนเป็นภาษา X
    • ด้วยความยาว mod Nเท่ากับ0
  • ผลิตภัณฑ์
    • ชื่อเต็มขององค์ประกอบบนตารางธาตุ
    • ซึ่งรวมถึงชื่อขององค์ประกอบที่ยอมรับใหม่
  • สูญเสียอวัยวะ
    • แบ่งพนักงานขายเป็นNชิ้น ๆ ที่มีความยาวเท่ากัน
    • แต่ละชิ้นควรเป็นฟังก์ชันหรือโปรแกรมที่ถูกต้องในภาษา X
  • เอาท์พุต
    • เมื่อดำเนินการพนักงานขายควรส่งออก Chuck Norrisและชิ้นที่หั่นบาง ๆ ควรส่งออกผลิตภัณฑ์ที่แตกต่างกัน
    • ยอมรับเฉพาะพื้นที่สีขาวต่อท้ายเท่านั้น
  • เกณฑ์การให้คะแนน
    • ความยาวLของพนักงานขายหน่วยเป็นไบต์หารด้วยจำนวนเมืองN, ยกกำลังสอง
    • Score = L/(N*N)
    • คะแนนที่น้อยที่สุดชนะ
    • โปรดระบุตัวเลข 3 ตัวที่สำคัญเมื่อโพสต์คะแนนทศนิยมของคุณ

ตัวอย่าง

  1. พนักงานขายรายนี้เข้าชม 3 เมืองดังนั้นN=3และมีความยาว 9 L=9แห่ง ดังนั้นคะแนนสำหรับคำตอบนี้จะเป็นS = 9 / (3 * 3) = 9/9 = 1ดังนั้นคะแนนสำหรับคำตอบนี้จะเป็น
    • โปรดทราบว่าพนักงานขายและแต่ละส่วนที่ถูกหั่น (ซึ่งมี 3 ชิ้น) ควรเป็นโปรแกรมหรือฟังก์ชั่นที่ถูกต้องในภาษาเดียวกัน
Program      -> Output
-------         ------
aaaBBBccc    -> Chuck Norris

aaa          -> Helium
BBB          -> Iridium
ccc          -> Tennessine
  1. N=4และL=20อื่น ๆS=20/16=1.25
Program                 -> Output
-------                    ------
aaaaaBBBBBcccccDDDDD    -> Chuck Norris

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

3
บิวด์อินเหมือนที่ElementDataได้รับอนุญาตจาก Mathematica หรือไม่? (ฉันสงสัยว่ามันจะประหยัดได้มาก แต่ฉันไม่รู้)
Martin Ender

การใช้อักษรตัวพิมพ์ใหญ่ของผลลัพธ์เป็นสิ่งสำคัญหรือไม่
Martin Ender

1
@MartinEnder ^^ ใช่ ^ ใช่
NonlinearFruit

6
ผู้ลงคะแนนปิดคนใดสามารถอธิบายได้ว่าส่วนใดที่พวกเขาพบว่าไม่ชัดเจน? (ฉันรู้ว่ามันไม่ใช่แค่คำถามสองข้อของฉันซึ่งฉันไม่คิดด้วยซ้ำว่าต้องได้รับการกล่าวถึงอย่างชัดเจนในความท้าทายเนื่องจากมีการโหวตอย่างใกล้ชิดเมื่อฉันโพสต์คำถามเหล่านี้)
Martin Ender

2
เห็นด้วยอย่างสมบูรณ์กับ @MartinEnder หากคุณไม่ชอบความท้าทายลองอีกแบบหนึ่ง
edc65

คำตอบ:


11

CJam, L = 1482, N = 114, คะแนน 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"?

ลองออนไลน์!

แต่ละโปรแกรมมีความยาว 13 ไบต์ ที่นี่พวกเขาจะแยกออกเป็นแต่ละบรรทัด:

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

องค์ประกอบที่ขาดหายไปคือ Darmstadtium, Praseodymium, Protactinium และ Rutherfordium ซึ่งมีความยาว 12 หรือ 13 ตัวอักษรซึ่งหมายความว่าฉันไม่สามารถพิมพ์ได้ 13 ตัวอักษรแต่ละตัว

แนวคิดคือโปรแกรมสองสามโปรแกรมแรกซึ่งพิมพ์องค์ประกอบที่มีชื่อสั้น ๆ ใช้อักขระภายนอกเพื่อสร้างสตริงChuck NorriในตัวแปรLซึ่งจะไม่ส่งผลกระทบต่อเอาต์พุตเมื่อใช้ด้วยตนเอง โปรแกรมสุดท้ายแล้วการตรวจสอบหากมีสิ่งใดที่มีอยู่แล้วในกองและใช้มันเพื่อเลือกระหว่างL(บวกs) Xenonและ

ไบต์เพิ่มเติมไม่กี่จะถูกบันทึกไว้โดยใช้ตัวอักษรที่เราเพิ่งเพิ่มLเป็นส่วนหนึ่งของชื่อองค์ประกอบเฉพาะสำหรับCArbon, Nickel, coppe rและ rSilve


2

Python, L = 2596, N = 118, คะแนน = 0.186

ความยาวของแต่ละชิ้นคือ22ดังนั้นจึงทำให้ความยาวนี้สวย

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  "

นี่คือพนักงานขายหลังจากหั่นและหั่นเป็นลูกเต๋า:

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  "

ป้อนคำอธิบายรูปภาพที่นี่


ปรับปรุง

  • [16-09-08] ประเสริฐเพิ่มพื้นที่พิเศษเมื่อเข้าร่วมกับบรรทัดที่ลงท้ายด้วยอักขระความคิดเห็น
  • [16-09-08] ทำให้แต่ละชิ้นมีความยาว22อักขระและเพิ่ม gif

ฉันรู้ Python ค่อนข้างมากแล้วlambda:"Actinium";print""Actinium เอาท์พุตอย่างไร นี่อาจเป็นเฉพาะกับ Python 3 หรือไม่?
ไลนัส

@Linus แลมบ์ดาActiniumคำสำคัญที่สร้างฟังก์ชั่นที่ไม่ระบุชื่อที่จะไม่มีพารามิเตอร์และผลตอบแทน สิ่งprint ""นี้ไม่ได้ทำอะไรที่มีประโยชน์หลังจากพนักงานขายถูกแยกชิ้นส่วน
NonlinearFruit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.