Python 2, 14508 11700 11088 10164 9486 9746 7860 145 ไบต์ * 36 unique = 5220
ฉันเห็นชื่อและคิดว่านี่เป็นความท้าทายที่น่าสนใจสำหรับ Python ที่พูดมาก นี่คือบันทึกของฉันเมื่อฉันจัดการกับปัญหานี้
ความพยายามครั้งแรกของฉันลดความเป็นเอกลักษณ์ลงเหลือ 31:
print''.join(chr([69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46][r])for r in range(124))
ฉันคิดว่าฉันสามารถทำได้ดีกว่า ด้วยการใช้map
งานของเก่าจะลดลงเป็น 26
print''.join(map(chr,(69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46)))
ในเวลานี้ฉันสังเกตเห็นในข้อความคำถามว่าคะแนนนั้นuniques * bytes
ไม่ใช่แค่ของเก่า! นั่นหมายถึงคะแนนของฉันสำหรับข้างต้นคือ 1,450 และ 1,700,700 ไม่การแข่งขันสูงมาก ดังนั้นตอนนี้ฉันลดไบต์โดยเก็บข้อความเป็นสตริงฐานสิบหก:
# 308*36 = 11088
print''.join(chr(int('456c697a6162657468206f626e6f78696f75736c792071756f74656420286a75737420746f6f20726f77647920666f72206d79207065616365293a202254484520515549434b2042524f574e20464f58204a554d5053204f56455220544845204c415a5920444f472c2220676976696e67206d652061206c6f6f6b2e'[i*2:i*2+2],16)) for i in range(124))
ขนาดลดลง แต่มีลักษณะเฉพาะตัวมากขึ้น แต่ถ้าฉันใช้สตริงทศนิยม 2 หลักที่อัดแน่นด้วย 32 ออฟเซ็ต:
# 308*33 = 10164
print''.join(chr(int('37767390656669847200796678798873798583768900818579846968000874858384008479790082798768890070798200778900806965676909260002524037004953413543003450475546003847560042534548510047543750005240370044335857003647391202007173867378710077690065007679797514'[i*2:i*2+2])+32) for i in range(124))
มีจำนวนไบต์เท่ากัน แต่บันทึกได้ 3 แบบ
ฉันฟักแผนใหม่ ถ้าฉันใส่ Python จำนวนเต็มยาวด้วยตัวอักษร 7 บิตฉันสามารถแยกแต่ละอันด้วยการเลื่อน:
# 306*31 = 9486
h=1073974643401006528619595312441225198653732186368270382545648881135648217524502741093886285232362673460172159947573049818819511630304840724474679255867143965214892747087773876949021986013520804726327302180335979259392708372721217579101211940864406962137554744750
w=''
while h:w=chr(h&127)+w;h>>=7
print w
ดีที่ลดคะแนนเป็น 9486 การทดลองที่น่าสนใจ แต่ไม่มีที่ไหนใกล้พอ ตอนนี้ถ้าฉันกำจัดชื่อฟังก์ชั่นและพึ่งพาการจัดรูปแบบสตริง?
# 443 * 22 = 9746
print('%c'*124)%(69,108,105,122,97,98,101,116,104,32,111,98,110,111,120,105,111,117,115,108,121,32,113,117,111,116,101,100,32,40,106,117,115,116,32,116,111,111,32,114,111,119,100,121,32,102,111,114,32,109,121,32,112,101,97,99,101,41,58,32,34,84,72,69,32,81,85,73,67,75,32,66,82,79,87,78,32,70,79,88,32,74,85,77,80,83,32,79,86,69,82,32,84,72,69,32,76,65,90,89,32,68,79,71,44,34,32,103,105,118,105,110,103,32,109,101,32,97,32,108,111,111,107,46)
ตอนนี้ฉันมีของเก่าเพียง 22 อัน แต่คะแนนไม่ดีขึ้น
ตกลงเกิดอะไรขึ้นถ้าฉันใช้วิธีที่ชัดเจนและเพิ่งพิมพ์สตริง:
# 131*60 = 7860
print'Elizabeth obnoxiously quoted (just too rowdy for my peace): "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG," giving me a look.'
คะแนน 7860 ฉันควรทำสิ่งนี้ก่อน แต่ฉันจะไม่ได้เรียนรู้อะไรมากมาย
ฉันเดาว่าฉันสามารถลดความไม่เหมือนใครลงได้ 26 ถ้าฉันผลิตชิ้นส่วนตัวพิมพ์ใหญ่แบบไดนามิกดังนั้น:
# 145*36 = 5220
print'Elizabeth obnoxiously quoted (just too rowdy for my peace): '+'"the quick brown fox jumps over the lazy dog,"'.upper()+' giving me a look.'
ฉันคิดว่า Python จะไม่ได้รับดีกว่า 5220 มากนักงานในการย่อตัวอักขระที่ไม่ซ้ำกันใน Python ให้แน่ใจว่าเป็นประโยชน์
อัปเดต: mbomb007 มีโซลูชัน Python ที่ดีกว่าให้คะแนน 5005 ทำงานได้ดี