การย่อให้สั้นเป็นจำนวนมาก


10

เมื่อจัดการกับตัวเลขที่ยาวเมื่อการเล่นโค้ดการลดความยาวของรหัสของคุณอาจเป็นเรื่องยากดังนั้นคุณมีเคล็ดลับในการทำให้ตัวเลขสั้นลงและจัดการได้ง่ายขึ้นหรือไม่

ตัวอย่างเช่นรหัส Pyth ต่อไปนี้จะพิมพ์ "Hello world" แต่ที่ 44 ไบต์นั้นไม่เป็นที่น่าพอใจ:

Vcjkj85942000775441864767076 2 7=k+kCiN2)k

แล้วฉันจะทำให้จำนวนที่สั้นลงสั้นลงได้85942000775441864767076อย่างไร?

คำตอบ:


10

เวลาเหมาะสำหรับคำถามนี้ @isaacg เพิ่งเพิ่มฟีเจอร์ใหม่ในวันนี้ซึ่งทำให้ตัวเลขสั้นลงอย่างมาก

เทคนิคพื้นฐานคือการแปลงตัวเลขเป็นฐาน 256 และแปลงเป็นตัวอักษร ++NsCMjQ256Nคุณสามารถทำได้โดยใช้รหัส จากนั้นคุณสามารถใช้สตริงผลลัพธ์ร่วมกับCซึ่งทำหน้าที่ตรงกันข้าม (แปลงตัวอักษรเป็น int และตีความผลลัพธ์เป็นตัวเลขฐาน 256) ดังนั้นคุณจะได้รับ 13 C"2ìÙ½}ü¶d"ตัวอักษร: ตัวอักษรบางตัวไม่สามารถพิมพ์ได้

แต่สังเกตว่าฉันพูด 13 CHARS ไม่ใช่ไบต์ หากฉันคัดลอกตัวอักษรและนับด้วยhttps://mothereff.in/byte-counterจะระบุว่ามีตัวอักษร 13 ตัวและ 18 ไบต์ นี่คือเนื่องจากการเข้ารหัสอักขระของตัวอักษรซึ่งเป็น UTF-8 โดยค่าเริ่มต้น และ UTF-8 อนุญาตให้ใช้อักขระ 1 ไบต์ที่ต่างกัน 2 ^ 7 เท่านั้น ถ่านทุกอันที่cมีการord(c) > 127จัดเก็บจริงใช้สองไบต์แทนหนึ่ง

และนี่คือคุณสมบัติใหม่ของ @ isaacg ในการเล่น เขาเปลี่ยนรูปแบบรหัสเริ่มต้นจาก UTF-8 เป็น iso-8859-1 iso-8859 สามารถแสดงถึง 256 ตัวอักษรโดยมีเพียง 1 ไบต์ ดังนั้นตอนนี้คุณสามารถเข้าถึง 13 ไบต์ได้จริง นี่เป็นไปได้เฉพาะกับคอมไพเลอร์มาตรฐานแต่มันไม่สามารถทำงานได้ในคอมไพเลอร์ออนไลน์

jdm.[2.Hd"0"jQ256ครั้งแรกที่คุณต้องการแปลงหมายเลขที่ฐานสิบหกค่าโดยใช้สคริปต์นี้: 12 32 ec d9 bd 07 7d fc b6 64นี้จะช่วยให้คุณ หลังจากนั้นคัดลอกตัวเลขเหล่านั้นไปยังไฟล์รหัสของคุณโดยใช้ hex-editor (เช่น hexedit สำหรับ linux)

การสาธิต hexedit

หมายเหตุ:

  • เห็นได้ชัดว่าคุณลบ"ท้ายถ้าสตริงเป็นส่วนสุดท้ายของรหัส
  • ใช้ได้เฉพาะในกรณีที่ไม่มี34(ไบต์22) ในการแสดงตัวเลขฐาน 256 ของคุณเนื่องจากนี่เป็น"ถ่านและจะสิ้นสุดสตริง การหลบหนีทำงานแม้ว่า ( 5C 22)
  • Btw เมื่อคุณเปิดไฟล์ด้วย hex-editor คุณจะเห็นไบต์0Aหรือ0d 0aท้ายที่สุดซึ่งคุณสามารถลบได้ สิ่งนี้บ่งบอกถึงจุดสิ้นสุดของบรรทัดเท่านั้น

ฉันจะต้องวางล่ามออฟไลน์ไว้ในเครื่องของฉัน แต่มันยอดเยี่ยมมากขอบคุณ! :)
Beta Decay

1
สตริงไม่สามารถรวมค่า null, ของค่า00ได้ นอกจากนี้, \ไบต์5c, อาจจะหรืออาจไม่จำเป็นต้องถูกหลบหนีด้วย `` อื่น, ขึ้นอยู่กับไบต์หลังจากนั้น.
isaacg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.