คำตอบ:
เนื่องจากมันไม่ได้เป็นส่วนหนึ่งของWiki ในหน้า GitHub ของ 05AB1E (ฉันคิดว่ามันควรจะเป็น) ฉันเพิ่งจะเพิ่มที่นี่เดี๋ยวนี้เพื่อให้ฉันเข้าใจตัวเองดีขึ้น
05AB1E มีคำต่อไปนี้ไฟล์พจนานุกรม exมีคำทั้งหมดที่รู้ แต่เราจะเข้าถึงคำศัพท์ในพจนานุกรมนี้ได้อย่างไร ลองมาคำ"testing"เป็นตัวอย่าง:
"testing"สามารถพบได้ในแถว 1453 ของไฟล์พจนานุกรม เนื่องจากสองบรรทัดแรกไม่ใช่คำและเราต้องการคำที่มีการจัดทำดัชนี 0 เราจึงลบ 3
ดังนั้นตอนนี้เรามีดัชนี ( 1450) แต่ใช้อย่างไร
เราเปิดและเริ่มสตริงบีบอัดด้วย†“ จากนั้นเราจะดูที่คอลัมน์ที่สองของไฟล์ info.txt (เช่น€คือ 00; ‚คือ 01; ฯลฯ )
ในกรณีของความ"testing"หมายนี้î(14) และ»(50)
"testing"ดังนั้นจึงบีบอัดสตริงสำหรับ: “ ลองออนไลน์ เช่นเดียวกับชิ้นส่วนของรหัส 05AB1E เกือบทั้งหมดการติดตาม“จะเป็นตัวเลือกหากคุณไม่ได้เข้าถึงสตริงดังนั้นจึงไม่มีงานในกรณีนี้
บางสิ่งที่ควรทราบ:
ตัวละครทุกตัวที่ไม่มีดัชนีในไฟล์ info.txt สามารถใช้งานได้ตามปกติ สิ่งนี้มีประโยชน์สำหรับการเพิ่มการsส่งออกเป็นพหูพจน์แทนคำเอกพจน์หรือใช้เครื่องหมายวรรคตอน,.?!เช่น
ÿ(การแก้ไขสตริง) ยังสามารถใช้เมื่อคุณต้องการแทรกค่าจากสแต็กภายในสตริง
หมายเหตุ: ตัวละครที่หลวมทุกตัวที่ไม่มีดัชนีในไฟล์ info.txt จะนับเป็นคำสำหรับประเภทการบีบอัดด้านล่าง
†มีหลายประเภทที่แตกต่างกันของสายการบีบอัดคุณสามารถใช้เป็น:
': ใช้คำที่ถูกบีบอัดเดียวตามที่เป็นอยู่ (ไม่'จำเป็นต้องมีการลาก) - 'î»: "การทดสอบ"„: ใช้คำที่ถูกบีบอัดสองคำพร้อมตัวคั่นช่องว่าง (ไม่„ต้องต่อท้าย) - „î»î»: "การทดสอบทดสอบ"…: ใช้คำที่ถูกบีบอัดสามคำพร้อมตัวคั่นช่องว่าง (ไม่…จำเป็นต่อท้าย) - …î»î»î»: "การทดสอบทดสอบทดสอบ"“: ใช้สตริงที่บีบอัดด้วยตัวคั่นช่องว่าง - “î»î»“: "การทดสอบทดสอบ"’: ใช้สตริงที่บีบอัดตามที่เป็นโดยไม่มีช่องว่างโดยนัย - ’î»î»’: "การทดสอบทดสอบ"”: ใช้สตริงที่บีบอัดในหัวเรื่อง - ตัวพิมพ์ด้วยตัวคั่นช่องว่าง - ”î»î»”: "การทดสอบการทดสอบ"‘: ใช้สตริงที่บีบอัดเป็นตัวพิมพ์ใหญ่แบบเต็มพร้อมตัวคั่นช่องว่าง - ‘î»î»‘: "การทดสอบการทดสอบ"ต่อไปนี้เป็นโปรแกรมที่มีประโยชน์ในการรับสตริงที่ถูกบีบอัดโดยอิงจากคำที่เว้นวรรคด้วยคำ:
'“? lAð«Ã#¸˜ vyU "€‚ƒ„…†‡ˆ‰Š‹ŒŽ•–—™š›œžŸ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîï" Dâ vy"“ÿ“".V XlQi y?1#] '“,
โปรแกรมนี้จะ:
lAð«Ã#) หรือตัดคำในรายการหากมีเพียงคำเดียวที่ป้อนเข้า ( ¸˜)vyU)"€...ï"Dâvy) ซึ่งจะพยายามเรียกใช้เป็นโปรแกรม 05AB1E ( "“ÿ“".V)XlQiy?1#ด้วยการป้อนข้อมูลการส่งออกจึงจะเป็นgood bye world ลองออนไลน์“‚¿Þ¡‚ï“
หมายเหตุ: คุณยังคงต้องดูว่าคำนั้นอยู่ในพจนานุกรมหรือไม่เพื่อให้เครื่องกำเนิดนี้ทำงานได้และจะไม่สนใจอักขระพิเศษหรือคำพหูพจน์ใด ๆ จะพบเฉพาะคำที่เหมือนกันทั้งหมดในพจนานุกรม
นี่คือตัวอย่างที่ฉันใช้…Ÿ™‚ï!สำหรับสตริง "hello world!" และ’‚¿Þ¡ ÿ ‚ï!’สำหรับสตริง "ลาก่อนÿโลก!" โปรดสังเกตว่าการใช้ช่องว่างและเครื่องหมายอัศเจรีย์เป็นอย่างไรเนื่องจากไม่มีดัชนีในไฟล์ info.txt นอกจากนี้ยังใช้ÿเพื่อแทรก "ความโหดร้าย" ที่อยู่ด้านบนสุดของสแต็กซึ่งน่าเสียดายที่ไม่ได้เป็นส่วนหนึ่งของพจนานุกรม (แต่ยังคงถูกบีบอัดโดยใช้วิธีการที่ส่วนด้านล่าง)
แม้ว่าไฟล์ดิกชันนารี word.ex นั้นค่อนข้างใหญ่ (10,000 คำที่แน่นอน) แต่ก็สามารถเกิดขึ้นได้ว่าคุณต้องการคำที่ไม่ได้เป็นส่วนหนึ่งของมันหรือสตริงที่เป็นแค่พูดพล่อยๆธรรมดา ดังนั้นมีวิธีการบีบอัดเหล่านั้นเช่นกัน?
มีแน่นอนคือโดยใช้.•ซึ่งเป็นสตริงที่บีบอัดฐาน 255 ตัวอักษร หมายเหตุ: วิธีนี้สามารถใช้ได้กับตัวละครในตัวอักษรตัวพิมพ์เล็กและช่องว่างเท่านั้น
นี่เป็นโปรแกรมที่มีประโยชน์ในการแปลงคำ / สตริงเป็นสตริงพื้นฐานที่บีบอัด 255 ตัวอักษร:
vAyk})> 27β 255B ".•ÿ•"
สิ่งที่โปรแกรมนี้ทำคือ:
vAyk})>: ทำดัชนีตัวอักษร 1 ดัชนีของตัวอักษรแต่ละตัวของอินพุตโดยช่องว่างกลายเป็นดัชนี 027β: แปลงดัชนีเหล่านี้จากฐาน 27 เป็นหมายเลขเดียว255B: แปลงหมายเลขนี้เป็น Base-255 โดยใช้หน้ารหัสของ 05AB1E".•ÿ•": วางส่วนนำหน้า.•และส่วนท้าย•ก่อนสตริงการบีบอัดนี้นี่คือตัวอย่างคำตอบที่@Kaldoใช้.•zíΘ•ในการบีบอัดคำว่า "goose"
สมมติว่าเราต้องการใช้ตัวเลขจำนวนมากสำหรับบางสิ่ง แต่ไม่สามารถเรียกคืนได้โดยการคำนวณแบบใช้เงิน ตัวอย่างเช่นสมมติว่าเราต้องการเข้าถึงจำนวนเต็มขนาดใหญ่18238098189071058293ด้วยเหตุผลใดก็ตาม
ในกรณีนี้เราสามารถใช้ทั้งชั้นนำและต่อท้ายในการบีบอัดตัวเลขในรูปแบบ• จำนวนตัวอย่างข้างต้นจะกลายเป็น
ลองออนไลน์ อีกครั้งเช่นเดียวกับสตริงพจนานุกรมอัดท้ายสามารถเลือกที่จะลบออก[1-9][0-9]+•15Y₁Ò'Θpc••
อีกทางเลือกหนึ่งเมื่อจำนวนเต็มน้อยพอที่จะใช้อักขระที่บีบอัด 2 ตัวเท่านั้นเราสามารถใช้Žแทนได้ซึ่งในกรณีนี้เราไม่จำเป็นต้องใช้ไบต์ต่อท้ายเพื่อปิดมันและจำนวนเต็มจะถูกบีบอัดเป็น 3 ไบต์แทน 4 สำหรับ ตัวอย่างจำนวนเต็ม13562จะส่งผล•rl•ให้ แต่เนื่องจากมันใช้เพียงสองตัวอักษรจึงสามารถŽrlแทน
นอกจากนี้ตัวเลขในช่วง[101, 355]สามารถบีบอัดได้ 2 ไบต์โดยใช้Ƶบวกกับอักขระเพิ่มเติมจากเพจรหัสของ 05AB1E ดังนั้นสำหรับตัวอย่างเช่นสามารถใช้สำหรับจำนวนเต็มƵ– ที่นี่ภาพรวมของตัวเลขที่มีอยู่ทั้งหมด อักขระเหล่านี้ถูกแปลงจาก Base-255 เป็น Base-10 และเพิ่ม 101 แล้ว (เนื่องจากตัวเลขในช่วงนั้นมี 1 หรือ 2 ไบต์แล้ว)250[0,100]
วิธีการเหล่านี้15Y₁Ò'Θpcและrlสร้างอย่างไร ง่ายมากตัวเลขจะถูกแปลงเป็น Base-255 โดยใช้เพจรหัสของ 05AB1E เพื่อให้คุณสามารถใช้โปรแกรมดังต่อไปนี้จะได้รับจำนวนบีบอัดซึ่งก็จะใช้Ƶ., Ž..หรือ•...•ขึ้นอยู่กับขนาดของจำนวนเต็มบีบอัด:
101 355Ÿså i 101-255B"Ƶÿ" ë 255B Dg2Qi "Žÿ" ë "•ÿ•"
นี่คือคำตอบตัวอย่างที่@Emignaใช้สำหรับจำนวนเต็ม•3Èñ•246060
บางครั้งคุณต้องการบีบอัดรายการจำนวนเต็มทั้งหมดแทนที่จะเป็นตัวเลขเดียว ตัวอย่างเช่นสมมติว่าเราต้องการรายการ[5,93,17,83,4,44,32,19,4,45,83,90,0,14,3,17,17,81]ด้วยเหตุผลใดก็ตาม ในกรณีนี้เราสามารถใช้สิ่งต่อไปนี้แทน: •4βŸ{©£MG]q‡dZΘp•94в ลองออนไลน์
นี่เป็นโปรแกรมที่มีประโยชน์ในการสร้างทั้งจำนวนที่บีบอัดและฐานที่เราต้องการแปลง:
Z>© β 255B ®s"•ÿ•ÿв"
สิ่งที่โปรแกรมนี้ทำคือ:
Z>: รับจำนวนสูงสุด + 1 ของรายการอินพุต ( ©: และเก็บไว้ในการลงทะเบียน)β: แปลงรายการอินพุตจากฐานmax+1เป็นหมายเลขเดียว255B: บีบอัดหมายเลขเดียวนี้ (อย่างที่เราทำในส่วนด้านบน)®s"•ÿ•ÿв": ส่งคืนผลลัพธ์ในรูปแบบ: นำหน้า•, จำนวนที่บีบอัด•, สูงสุด + 1, การติดตามвที่นี่คำตอบตัวอย่างที่ผมใช้ในการบีบอัดรายการ•4Œ”dóŒfÝŸĀTUÕáOyÖOÀÁàu¼6¹₆Žr‡_›y³eß₂©ǝ²ƶ"SAÎAñ'¡û†Ø(•91в [85,30,29,39,28,37,33,88,31,40,34,89,35,41,32,90,36,38,42,43,44,60,45,61,46,62,47,63,48,64,49,65,81,50,66,51,67,52,68,53,69,86,54,70,87,55,71,56,72,82,57,73,79,80,58,74,59,75,76,77,78,83,84]
PS: ในคำตอบนี้•6j|eDEJÞó(ÍêΓλùÄÞKüzHÇ-ø`JδŠ₂+Öηôî®À8†6/ðÎ6ùøΓ°ÓĆ;ˆ©Ā•2ôเป็นทางเลือกที่เท่ากับไบต์ (57) เนื่องจากตัวเลขทั้งหมดมีตัวเลขสองหลัก ในบางกรณี (โดยเฉพาะรายการขนาดเล็ก) สิ่งนี้อาจเป็นทางเลือกที่สั้นกว่า
การบีบอัดจำนวนเต็มเทียบกับการบีบอัดรายการจำนวนเต็ม:
ด้วยสองสิ่งนี้มันสามารถไปทางไหนก็ได้ บางครั้งรายการที่ถูกบีบอัดจะสั้นกว่าบางครั้งก็เป็นจำนวนเต็มที่ถูกบีบอัดบางครั้งทางเลือกที่แตกต่างกันโดยสิ้นเชิงนั้นจะสั้นกว่า ดังนั้นให้ใช้วิจารณญาณและทักษะการเล่นกอล์ฟของคุณเองในการเล่นกอล์ฟให้ไกลกว่านั้นแทนที่จะพึ่งพาผู้ผลิตที่กล่าวมาทั้งหมด นี่คือตัวอย่าง:
[44, 59]( ใช้ในคำตอบของ@Emigna นี้ ):
•A–•60в คือ 7 ไบต์ (สร้างโดยตัวสร้างรายการจำนวนเต็มที่บีบอัด)•H|•2ôหรือ•H|•2äหรือฮาร์ดโค้ด44 59‚ทั้งหมด 6 ไบต์ŽH|2ôหรือŽH|2äมีขนาดทั้ง 5 ไบต์„,;Çด้วย 4 ไบต์จะเป็นตัวเลือกที่ดีที่สุด (codepoints ของตัวอักษร ',' และ ';')[2,4,6,0]( ใช้ในคำตอบของ@Emigna นี้ ):
•3ā•7в คือ 6 ไบต์ (สร้างโดยตัวสร้างรายการจำนวนเต็มที่บีบอัด)Ž3ā7в คือ 5 ไบต์Ž9¦Sด้วย 4 ไบต์จะเป็นตัวเลือกที่ดีที่สุด (จำนวนเต็มบีบอัด 2460 ไปยังรายการตัวเลข)10101001100101001( ใช้ในคำตอบของฉัน ):
•a½₄Ƶ6®í• คือ 9 ไบต์ (สร้างโดยเครื่องกำเนิดจำนวนเต็มขนาดใหญ่ที่บีบอัด)•1∊}•2вJ คือ 8 ไบต์ (สร้างโดยตัวสร้างรายการจำนวนเต็มแบบบีบอัดพร้อมเพิ่มการรวม)•1∊}•bมี 6 ไบต์จะเป็นตัวเลือกที่ดีที่สุด (รายการจำนวนเต็มที่ถูกบีบอัดด้วย a ถึงไบนารีแทน2вซึ่งเข้าร่วมโดยปริยาย)[85,30,29,39,28,37,33,88,31,40,34,89,35,41,32,90,36,38,42,43,44,60,45,61,46,62,47,63,48,64,49,65,81,50,66,51,67,52,68,53,69,86,54,70,87,55,71,56,72,82,57,73,79,80,58,74,59,75,76,77,78,83,84]( ใช้ในคำตอบของฉัน ):
•4Œ”dóŒfÝŸĀTUÕáOyÖOÀÁàu¼6¹₆Žr‡_›y³eß₂©ǝ²ƶ"SAÎAñ'¡û†Ø(•91в คือ 57 ไบต์ (สร้างโดยตัวสร้างรายการจำนวนเต็มที่บีบอัด)•6j|eDEJÞó(ÍêΓλùÄÞKüzHÇ-øJδŠ₂ + Öηôî®À8† 6 / ðÎ6ùøΓ°ÓĆ; ˆ ©Ā•2ô`มี 57 ไบต์ (จำนวนเต็มบีบอัดแบ่งออกเป็นส่วนของขนาด 2)•Bšā¿ÑáζΔÕæ₅"®GÙ₂®°ƶío"§óÏ4¸bćÔ!₃ùZFúÐìŸ
,λ₂ϦP(Ì•65в₂+มี แต่ 2 ไบต์สั้นโดยการบีบอัดรายการกับแต่ละค่าที่ต่ำกว่า 26 แล้วเพิ่มว่าหลังจากนั้นด้วย `₂ + ` เคล็ดลับในการเพิ่มค่าไบต์เดียวในภายหลังนี้สามารถใช้งานได้ค่อนข้างบ่อยเพื่อบันทึกไบต์ในรายการที่บีบอัดย้อนกลับไปในวันที่เปิดตัว 05AB1E การป้อนข้อมูลโดยนัยนั้นค่อนข้างใหม่และแฟนซี ทุกวันนี้ดูเหมือนว่ามีความจำเป็นเพื่อติดตามภาษาแข่งขันอื่น ๆ (เช่น Jelly, MATL, Pyth, ฯลฯ )
ตัวอย่างเช่นเมื่อคุณต้องการเพิ่มตัวเลขสองตัวคุณสามารถทำได้II+:
I # Input_1.
I # Input_2.
+ # Add them up.
อย่างไรก็ตามการใช้อินพุตโดยปริยายเราสามารถย่อให้เหลือเพียง 1 ไบต์คือ+:
+ # Take two numbers implicitly and add them up.
สิ่งนี้จะเกิดขึ้นเมื่อความยาวของสแต็กน้อยกว่า arity ของผู้ปฏิบัติงาน 3+ตัวอย่างสุดท้ายคือ arity ของ+โอเปอเรเตอร์คือ2ในขณะที่มีเพียง1องค์ประกอบในสแต็ก:
3 # Push the number 3 on top of the stack.
+ # Request implicit input and add to the 3.
£เป็นคำสั่งสำหรับการถ่ายครั้งแรกที่ตัวละครของสตริงb อดีต:a
"hello_world"5£ -> "hello"
แต่ถ้าbเป็นรายการดัชนีมันจะแยกสตริงออกเป็นส่วนต่าง ๆ ของ (ไม่เกิน) ขนาดนั้น
อดีต: "hello_world"5L£ -> ['h', 'el', 'lo_', 'worl', 'd']
พวกมันถูกซ่อนอยู่ใน 05AB1E เล็กน้อย นี่คือรายการของตัวแปรที่กำหนดไว้ล่วงหน้าทั้งหมด:
¾ผลักดัน0ถ้า counter_variable ไม่เปลี่ยนแปลงก่อนคำสั่งนี้Xผลัก1ถ้าตัวแปร X Uจะไม่มีการเปลี่ยนแปลงก่อนที่คำสั่งนี้กับYผลัก2ถ้าตัวแปร Y Vจะไม่มีการเปลี่ยนแปลงก่อนที่คำสั่งนี้กับ®ผลักถ้าลงทะเบียนจะไม่เปลี่ยนแปลงก่อนที่คำสั่งนี้กับ-1©¯กด[](อาร์เรย์ว่าง) หากไม่มีการเพิ่มอะไรลงใน global_array ก่อนคำสั่งนี้¸กด[""]ที่สแต็กเปล่าถ้าไม่มีอินพุต (ขอบคุณ @Emigna สำหรับการค้นหาอันนี้)¾pushes 0 => นั่นเป็นเรื่องเกี่ยวกับความทรงจำที่ไม่ได้รับ
¾ผลักดันตัวแปรเคาน์เตอร์ซึ่งจะเริ่มต้นเป็น 0 ถ้าคุณเพียงต้องการที่จะผลักดัน 0, 0 เป็นหลักสูตรที่เป็นธรรมชาติมากขึ้น แต่ถ้าคุณต้องการที่จะผลักดัน5,0,7, 5¾72 5 0 7ไบต์สั้นกว่า
¾ตั้งใจ.75และฉันเคยเอาชนะ Pyth ด้วยความจริงนั้น ภาษาที่เล่นกอล์ฟที่ขึ้นใหม่เหล่านี้ไม่มีเงื่อนงำเกี่ยวกับความจำ ...
print(3 / 4)ในหลาม 2 0ให้ฉัน
M -Inf
Λหรือ.Λ)เนื่องจากมันไม่ได้เป็นส่วนหนึ่งของเอกสารและ@Adnanในขณะนี้ค่อนข้างยุ่งเกินไปที่จะเขียนมันฉันจึงขออนุญาตให้เพิ่มมันเป็นเคล็ดลับที่นี่ตอนนี้
สามารถใช้ฟังก์ชัน Canvas ( Λหรือ.Λ) เพื่อวาดเส้น ASCII บนหน้าจอ มันมีสามพารามิเตอร์ที่ต้องการ:
[0,7]สำหรับเส้นทางซึ่งเราสามารถใช้หนึ่งหรือหลาย นอกจากนี้ยังมีตัวเลือกพิเศษบางอย่างที่ต้องใช้อักขระบางตัว (เพิ่มเติมเกี่ยวกับเรื่องนั้นในภายหลัง)[0,7]แผนที่ทิศทางหลักไปยังทิศทางต่อไปนี้:
7 0 1
↖ ↑ ↗
6 ← X → 2
↙ ↓ ↘
5 4 3
ตัวอย่าง 05AB1E บางคำตอบที่ใช้ Canvas:
ลองทำสิ่งที่คล้ายกันเป็นตัวสุดท้ายดังนั้นให้เราใช้Λฟังก์ชั่นCanvas กับพารามิเตอร์สามตัวต่อไปนี้:
[3,3,5,5,7,7,9,9]!@#[0,2,4,6]สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
!@#!@#!
# @
@ #!@ #
! @ # !
# ! ! @
@ @ #
!#@!# !
@
@!#@!#@!#
แล้วมันทำงานอย่างไร ต่อไปนี้เป็นขั้นตอนที่มีอินพุตเหล่านี้ด้านบน:
3ตัวละคร ( !@#) ขึ้นไป (ทิศทาง0)3-1อักขระ ( !@) ไปทางขวา (ทิศทาง2)5-1ตัวละคร ( #!@#) ลงด้านล่าง (ทิศทาง4)5-1อักขระ ( !@#!) ไปทางซ้าย (ทิศทาง6)7-1ตัวละคร ( @#!@#!) ขึ้นไป (ทิศทาง0)7-1อักขระ ( @#!@#!) ไปทางขวา (ทิศทาง2)9-1ตัวละคร ( @#!@#!@#) ลงด้านล่าง (ทิศทาง4)9-1อักขระ ( !@#!@#!@) ไปทางซ้าย (ทิศทาง6)-1จะมีเพราะเส้นทับซ้อน ดังนั้นสองขั้นตอนแรกคือ:
#
@
!
และ
!@
ซึ่งรวมกันคือ:
#!@
@
!
หมายเหตุเล็กน้อย:
[0,7]แล้วยังมีตัวเลือกเฉพาะสองสามตัวให้เลือกซึ่งโดยทั่วไปแล้วจะแปลไปยังลำดับทิศทาง
+( '+inline) แปลเป็นรูปแบบ04402662ซึ่งสร้าง+-cross ด้วยแขนของความยาวที่กำหนด เห็นมันในทางปฏิบัติ×( '×inline) แปลเป็นรูปแบบ15513773ซึ่งสร้างX-cross ด้วยแขนของความยาวที่กำหนด เห็นมันในทางปฏิบัติ8กลับไปที่จุดเริ่มต้นที่เราเริ่มวาดภาพจาก เห็นในการกระทำและเห็นความแตกต่างได้โดยไม่ต้องได้8Λออกจะทันทีและ.Λส่งผลสตริงที่จะถูกผลักไปยังกองซึ่งเรายังคงสามารถกลับมาใช้แก้ไขและทำอะไรกับที่เราต้องการต้องการ ตัวอย่างบางส่วน:
+×8ฉันได้ดูแน่นอนในรหัสที่มา
เช่นเดียวกับในภาษาอื่น ๆ ที่ใช้สแต็คฟังก์ชั่นของ 05AB1E มักจะป๊อป (กิน) อินพุตของพวกเขาจากสแต็กและส่งเอาต์พุตไปยังสแต็ก
อย่างไรก็ตามฟังก์ชั่นบางอย่างได้รับอินพุตจากสแต็กโดยไม่ต้องใช้มัน ตัวอย่างคือheadฟังก์ชั่น¬ซึ่งสร้างองค์ประกอบแรกจากรายการอินพุต ดูตัวอย่างโปรแกรมได้ที่นี่: ¬+. เพิ่มหมายเลขแรกของรายการอินพุตให้กับแต่ละหมายเลขของรายการนั้น
หากต้องการทราบว่าฟังก์ชั่นป๊อปและที่ได้รับการดูที่คอลัมน์สอดคล้องกันในแฟ้มข้อมูลฟังก์ชั่น
ลูปและเงื่อนไขจะได้รับวงเล็บปิดโดยอัตโนมัติเมื่อสิ้นสุดโปรแกรมดังนั้นคุณจะต้องเพิ่มเข้าไปในรหัสหากคุณต้องการบางสิ่งที่อยู่นอกลูป / เงื่อนไข
ตัวอย่างเช่นโปรแกรมนี้ที่ไม่ได้รับการสร้างรายการnหมายเลขเฉพาะแรกไม่จำเป็นต้องปิดวงเล็บ
[¹¾Q#NpiNˆ¼
แต่ถ้าเราต้องการที่จะดำเนินการบางอย่างในรายการผลลัพธ์ตัวอย่างเช่นการ delta ของเราจะต้องปิดวงก่อน
[¹¾Q#NpiNˆ¼]¯¥
จะขยายสิ่งนี้ด้วยเคล็ดลับการเล่นกอล์ฟเล็ก ๆ ที่ฉันได้เรียนรู้ไปพร้อมกัน (เพิ่งเริ่มต้น 05AB1E เป็นการส่วนตัวเท่านั้น)
D(ซ้ำ) และÐ(เพิ่มขึ้นสามเท่า) ร่วมกับs(แลกเปลี่ยน) และŠ(สาม-swap a,b,cไปc,a,b) มักจะสั้นกว่าการใช้©(บันทึกในglobal_variable ) และ®(การผลักดันglobal_variable ) ภายในลูป สิ่งนี้ช่วยประหยัดไบต์ในคำตอบของฉันนี้และสองคำตอบของฉันนี้½(ถ้า 1 แล้วเพิ่มcounter_variableโดย 1) ไม่จำเป็นในตอนท้ายของ a µ(ในขณะที่counter_variable ! = a, do ... ) เนื่องจากมันทำโดยปริยาย ( บันทึกเป็นไบต์ในคำตอบของฉันนี้ ).Bโดยปริยายบนบรรทัดใหม่ สิ่งนี้มีประโยชน์ในคำตอบของฉันเมื่อเรากำลังมองหาทางเลือกสำหรับ¡(แยก) ในขณะที่ยังคงเก็บรายการว่างไว้ (หมายเหตุ: คำตอบที่เชื่อมโยงไม่ทำงานเมื่อองค์ประกอบมีช่องว่างต่อท้ายหลังจากแยก) - หวังว่าบิวด์อิน เพิ่มลงในการแยก แต่จะเก็บบรรทัดว่างไว้ในอนาคตSÖ(ซึ่งตัวเลขของอินพุทจำนวนเต็มสามารถแบ่งอินพุทจำนวนเต็มเท่า ๆ กัน) จะมีตัวเลขของตัวเองสำหรับตัวเลข0(แทนที่จะเป็นข้อผิดพลาดหารด้วยศูนย์) ตัวอย่างเช่น1053จะส่งผลให้[1,1053,0,1] (1053 หารด้วย 1 และ 3 ไม่หารด้วย 5 และให้ข้อผิดพลาดการหารด้วยศูนย์สำหรับ 0) นี่เป็นประโยชน์อย่างมากในคำตอบของฉันโดยการยึดอำนาจของรายการเนื่องจากมีเพียงความ1จริงใน 05AB1E และทุกอย่างอื่นไม่ถูกต้อง SÖPส่งผลให้ในความจริง ( 1) ดังนั้นหมายถึงการป้อนจำนวนเต็มอย่างเท่าเทียมกันโดยตัวเลขแต่ละตัวของมันû(ทำให้เป็นสตริงที่กำหนด) ฉันประหลาดใจที่ไม่มีis_palindrome ในตัว แต่ต่อมาผมรู้เพียง 2 ไบต์ที่มีความจำเป็นเพื่อบรรลุซึ่งเป็นÂQ(ที่Âเป็นแยกไปสองทางซึ่งเป็นสั้นสำหรับDR: ซ้ำและย้อนกลับคัดลอกและQคือการตรวจสอบว่าชั้นสองค่าในกองมีค่าเท่ากัน)Ds*(ซ้ำ, สลับ, ทวีคูณเพื่อทำหน้าที่เป็นตรรกะ-AND) เทียบกับ}ʒ(ปิดตัวกรองตัวแรกตัวกรองอีกครั้ง) เมื่อคุณใช้ตัวกรองสองตัว ตัวอย่างเช่นในความท้าทายนี้เราจะต้องแสดงรายการตัวเลขทั้งหมดของความยาวสี่หลักที่มีอย่างน้อยหนึ่งและมีผลรวมหลักเท่ากับ0 9การใช้ช่วง[1000,10000]ครอบคลุมจำนวนสี่หลักที่มีความยาว แต่คุณจะเหลือตัวกรองอีกสองตัว ตอนแรกฉันใช้₄4°ŸʒD0åsSO9Q*(14 ไบต์) แต่โดยใช้ตัวกรองสองตัวไบต์สามารถบันทึก: ₄4°Ÿʒ0å}ʒSO9Q(13 ไบต์) (ซึ่งต่อมาได้เล่นกอล์ฟถึง₄4°ŸεW°ö9Q(10 ไบต์) โดย@Grimy.)0เป็นฟิลเลอร์, 0ζคุณสามารถใช้ ปัญหาหนึ่งของเรื่องนี้คือฟิลเลอร์0จะกลายเป็นสตริง"0"ดังนั้นหากคุณลองเรียงลำดับด้วยสตริงและจำนวนเต็มแบบผสมในภายหลังสิ่งนี้จะไม่ให้ผลลัพธ์ที่คุณต้องการ 0ζ€{นี่เป็นตัวอย่างของวิธีการที่มันจะเรียงลำดับรายการภายในซิปนี้: นี้สามารถแก้ไขได้โดยการเพิ่มนักแสดงอย่างชัดเจนในการ int ( ï) 0ζï€{หลังจากซิปและเพียงแล้วเรียงลำดับตาม: อย่างไรก็ตามการใช้¾ค่าคงที่0กับ zip-filler จะทำให้ค่านั้นยังคงเป็นจำนวนเต็มแทนที่จะเป็นสตริงระหว่าง zip ดังนั้น¾ζ€{จะบันทึกไบต์ที่นี่ เคล็ดลับนี้จัดทำโดย@ Mr.Xcoderเพื่อบันทึกไบต์ในคำตอบของฉันนี้€SOหากคุณต้องการที่จะสรุปตัวเลขของหลายหมายเลขในรายการคุณสามารถใช้ อย่างไรก็ตามใช้ตัวย่อ1öซึ่งจะปรับเวกเตอร์อัตโนมัติ เคล็ดลับนี้จัดทำโดย@Grimyเพื่อบันทึกไบต์ที่นี่ (และ2 ไบต์ที่นี่ )2‹คุณสามารถของหลักสูตรใช้อย่างเห็นได้ชัด อย่างไรก็ตามการใช้!(แฟคทอเรียล) จะส่งผลให้ 1 (ความจริง) สำหรับ0และ1เท่านั้นและค่าอื่น ๆ ทุกอย่างจะส่งผลให้มีบางสิ่งที่สูงกว่า (และทำให้เข้าใจ1ผิดมากขึ้น เคล็ดลับนี้ถูกจัดให้โดย@Grimyเพื่อบันทึกไบต์ที่นี่โปรดทราบว่าตัวดำเนินการบางอย่างใน 05AB1E จะ vectorize โดยอัตโนมัติในอาร์เรย์ ตัวอย่างเช่นรหัส5L3+ซึ่งแยกส่วนเป็นรหัสเทียมต่อไปนี้:
[1, 2, 3, 4, 5] + 3
จะกลายเป็น:
[4, 5, 6, 7, 8]
หากไม่ได้ทำให้เป็นแบบเวกเตอร์โดยอัตโนมัติคุณสามารถใช้€โอเปอเรเตอร์ได้ ใช้คำสั่งอักขระเดียวและดำเนินการตัวดำเนินการ (monadic) ในแต่ละองค์ประกอบ ตัวอย่างการแยกแต่ละองค์ประกอบคือรหัสต่อไปนี้ ( ลองใช้ที่นี่ ):
€S
ในขณะที่Sผู้ดำเนินการปกติจะแยกแต่ละองค์ประกอบในอาร์เรย์และทำให้แบนเป็นอาร์เรย์เดียว ( ลองที่นี่ )
ñนำหน้าด้วยค่าของn(ดัชนี) tio.run/nexus/05ab1e#@2/iw2XiE2Tio81ldHjj//8A
ลำดับที่คุณป้อนอาจมีผลอย่างมากต่อโค้ดของคุณและบ่อยครั้งหากคุณใช้sเพื่อสลับด้านบนสุดของสแต็กกับสิ่งที่สูงที่สุดถัดไปในสแต็กคุณไม่ได้คิดถึงปัญหาอย่างถูกต้อง ลองเรียงลำดับอินพุตใหม่และดูว่าคุณสามารถกำจัดความต้องการในการสลับได้หรือไม่โดยการสลับอินพุตล่วงหน้าก่อนเพิ่มลงในสแต็กก่อนหน้าหรือทำซ้ำที่อื่น I&O ที่ชัดเจนที่สุดสามารถเป็นคำตอบที่ประสบความสำเร็จน้อยที่สุด 05AB1E
รหัสด้านล่างช่วยเปลี่ยน ASCII-art เป็น 05AB1E โดยใช้การแปลงฐานแบบกำหนดเอง
|»©ÐÙSDŠ¢øΣθ}R€н¬®sÅ?iD2£RDŠKsì}J©žLR‡®gö₅B®s"•ÿ•“ÿ“ÅвJ"
นี่คือความสำเร็จโดย:
0-9A-Za-zในลำดับนั้นอักขระแต่ละตัวที่แตกต่างกันจะได้รับการแม็พอักขระของตัวเองจนกระทั่งทุกตัวถูกแทนที่•<compressed_integer>•“<sorted_distinct_characters>“ÅвJ.“ช่วยให้คุณยังบีบอัดสตริงคำพูด"; Åвจะใช้สายนี้ไปยังฐานแปลงเลขที่สร้างขึ้นโดยใช้สตริงเป็นฐานที่กำหนดเอง; และJจะรวมตัวอักขระทั้งหมดเหล่านี้เข้าด้วยกันเป็นสายเดี่ยวซึ่งเป็นผลลัพธ์โดยปริยาย
ยอมรับรูปแบบที่มีมากถึงและรวมถึง 62 อักขระที่ไม่ซ้ำใครเหมาะสำหรับ ASCII-art
จำนวนอักขระที่ไม่ซ้ำกันที่น้อยลงจะยิ่งบีบอัดได้ดี
ตัวอย่างเอาต์พุตสำหรับวาดไดอะแกรมกำหนดเวลาแบบดิจิทัล XNOR (214 ไบต์, 9 อักขระที่ไม่ซ้ำกัน):
┌─┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐ ┌───┐
A ──┘ └─┘ └─┘ └─┘ └─┘ └─┘ └──
┌───┐ ┌───┐ ┌─┐ ┌─────┐ ┌─┐ ┌─┐
B ┘ └─┘ └─┘ └─┘ └───┘ └─┘ └
┌─────┐ ┌─┐ ┌─┐ ┌───┐
X ──┘ └───┘ └───┘ └───┘ └────
อยากจะเป็น:
•I£.µ*:]ó±øqaµb₄ΘYQmœ¹µû₄p´ζÂĆ_5ŠKÑ×ðòË|₄#¹¶úôÂ-Í|¯ε¼É₂ïδ&é–9»ÞFò1î×HÃBjý2ĆÉ≠FYÂÂèC j‘£Å₅Œ•“─ └┘┐┌
XBA“ÅвJ
(106/214) * 100 = 49.53% ขนาดของสตริง ASCII-art ดั้งเดิม
ซึ่งนับเป็นไบต์เดียวกันกับการส่งที่แท้จริงของฉันสำหรับความท้าทายนั้นใน 05AB1E (ดั้งเดิม)
หมายเหตุ: รหัสไม่ได้เล่นกอล์ฟอย่างแน่นอน มันเขียนได้อย่างรวดเร็วเพื่อแปลงศิลปะ ASCII เป็นการบีบอัดที่มีประสิทธิภาพมากที่สุดดังนั้นมันจึงน่าเกลียดและยาว ..
|» # Take multi-line input
© # Store it in the register to reuse later
ÐÙS # Only leave unique characters (as list)
DŠ¢ø # Map it with the count for each of those characters
Σθ}R # Sort it based on that count (highest to lowest)
€н # Remove the count again, so the sorted characters remain
¬®sÅ?i # If the input starts with the most occurring character:
D2£RDŠKsì} # Swap the first two characters in the list
J© # Join everything together, and store it in the register to reuse later
žLR‡ # Map each character to [0-9A-Za-z]
®gö # Get the amount of unique characters, and convert it to that Base
₅B # And then convert that to Base-255
®s # Push the string and swap so the compressed integer is at the top again
"•ÿ•“ÿ“ÅвJ" # Insert it in the correct output format
# `•<compressed_integer>•“<sorted_distinct_characters>“ÅвJ`
"•ÿ•" # (after which the result is output implicitly with trailing newline)
<str><compr_int><int>вèJแทนของคุณ<compr_int><int>BžLR<str>‡; และใช้“แทนการ"เป็นสตริงคำพูดดังนั้น"สามารถเป็นส่วนหนึ่งของอินพุต
ไม่ใช่สิ่งที่ทุกคนเห็นด้วย แต่ใช้ได้ผล
พิจารณาสองโปรแกรมต่อไปนี้:
4 5+
"4""5"+
พวกเขาทั้งสองผลออกเป็น9 นั่นเป็นเพราะทุกค่าได้รับการประเมินครั้งแรก (พร้อมast.literal_eval) ด้วยเหตุนี้เราจึงสามารถดำเนินการตัวดำเนินการจัดการสตริงทั้งหมดบน ints และตัวดำเนินการปรับแต่ง int ทั้งหมดบนสตริง
ยกตัวอย่างเช่น12345ûpalindromizes จำนวนผลใน12345 123454321หลังจากนั้นเราสามารถทำเลขปกติในเลขนี้ได้
12345û50000-
05AB1E มีลูปและตัววนซ้ำปกติดังต่อไปนี้:
Fซึ่ง iterates ผ่าน0 .. n-1Gซึ่ง iterates ผ่าน1 .. n-1ƒซึ่ง iterates ผ่าน0 .. nvซึ่ง iterates มากกว่าแต่ละองค์ประกอบs [0], s [1], .. , s [N]ʒซึ่งไม่ใช่ลูป แต่เป็นคำสั่งfilter-by เราใช้คำสั่งนี้ในทางที่ผิดเนื่องจากเป็นพฤติกรรมที่ไม่ได้ตั้งใจในการวนซ้ำแต่ละองค์ประกอบการใช้ลูปเหล่านี้เราสามารถสืบทอดลูปที่ซ่อนอยู่ต่อไปนี้ได้:
gFใช้คุณสามารถใช้vซึ่งมีN-index ที่สามารถใช้ได้vy -> ʒเปลี่ยนนั้นค่อนข้างยุ่งยากกว่าเล็กน้อย:
yเป็นไปไม่ได้ในลูปชนิดนี้[, µและεยังเป็นส่วนหนึ่งของปกติลูป / ซ้ำ?
yเป็นไปได้กับบางส่วนของเหล่านี้ในขณะนี้