คำถามติดแท็ก compiler

8
คอมไพเลอร์รวบรวมตัวเอง [ปิด]
นี่ขึ้นอยู่กับการพูดคุยกับคอมไพเลอร์ที่ฉันฟังไปครู่หนึ่ง แต่น่าเสียดายที่ฉันจำไม่ได้ว่าที่ไหนหรือเมื่อไหร่ สร้างคอมไพเลอร์สั้นที่สุดในภาษาใดก็ได้ที่สามารถรวบรวมได้ กำหนดเป้าหมาย ISA ที่สมเหตุสมผล (68K, x86, MIPS, ARM, SPARC, IBM BAL และอื่น ๆ ) ที่ไม่มีคำสั่ง "โปรแกรมคอมไพล์" (ซึ่งอาจยกเว้น VAX บางเวอร์ชัน) อ่านโปรแกรมที่มาจากและพิมพ์รหัสที่สร้างขึ้นเพื่อstdin stdoutคุณสามารถใช้ไลบรารี C มาตรฐานสำหรับ I / O และการประมวลผลสตริง (เช่น_printf) คุณไม่จำเป็นต้องรวบรวมทั้งภาษาเพียงชุดย่อยใด ๆ ที่มีคอมไพเลอร์ (เช่นเพียงพิมพ์ชุดคำสั่งภาษาแอสเซมบลีขณะที่น่าประทับใจไม่นับเป็นวิธีแก้ปัญหา)

5
รหัสตัวละครที่แตกต่างกัน
หมายเหตุ: ความท้าทายนี้อนุญาตเฉพาะคำตอบในภาษาที่รวบรวม งาน งานของคุณค่อนข้างง่ายทำสองโปรแกรมที่ต่างกันเมื่อรวบรวมผลลัพธ์ในผลลัพธ์เดียวกัน เกณฑ์การให้คะแนน ที่นี่คือที่ที่ความสนุกเข้ามาคะแนนของคุณจะเป็นจำนวนไบต์ที่ไม่ซ้ำใครในหนึ่งโปรแกรม ตัวอย่างเช่นหากโปรแกรมทั้งสองของคุณ (เข้ารหัสในIBM Code หน้า 437 ) คือ ☻☻Program A และ ☺Program B อักขระที่อยู่ในโปรแกรมเดียวคือ ☻☺AB ดังนั้นคะแนนคือ 4 โปรดทราบว่า ☻จะปรากฏสองครั้งในโปรแกรมแรก แต่จะนับเพียงครั้งเดียว เป้าหมายของคุณคือการได้รับคะแนนสูงสุดคะแนนสูงสุดที่เป็นไปได้คือ 256 ที่นี่คือโปรแกรมการให้คะแนนที่ใช้กับโปรแกรมที่เข้ารหัส ASCII เงื่อนไข ทุกไบต์ในทั้งสองโปรแกรมควรจะถูกแทนที่ด้วยไบต์ที่แตกต่างกันทำให้โปรแกรมรวบรวมผลลัพธ์ที่แตกต่างกันหรือไม่สามารถรวบรวมทั้งหมดเข้าด้วยกัน การลบไบต์ใด ๆ ควรทำเช่นเดียวกัน คุณสามารถใช้การรวมสถานะใด ๆ ก็ได้ตราบใดที่ทั้งสองโปรแกรมทำงานด้วยค่าสถานะเดียวกัน การรวบรวมผลลัพธ์ควรเป็นแบบคงที่ (เช่นไม่ควรเปลี่ยนแปลงจากการเรียกใช้เพื่อเรียกใช้) หากผลลัพธ์แตกต่างจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่งแสดงว่าเครื่องมีจุดประสงค์เพื่อใช้งาน เอาต์พุตของการคอมไพล์ควรเป็นไบต์สำหรับไบต์ที่ไม่เหมือนกัน "เทียบเท่า" หรือ "คล้ายกันมากพอ" ผลลัพธ์ของการคอมไพล์ควรไม่ว่างเปล่า คำเตือน / ข้อผิดพลาดไม่จำเป็นต้องเหมือนกันระหว่างการรวบรวม หากโปรแกรมหรือการคอมไพล์มีอักขระที่ไม่สามารถพิมพ์ได้ให้แน่ใจว่ารวม hexdump …

13
สร้างคอมไพเลอร์ FizzBuzz
ยินดีต้อนรับสู่โลกของคอมไพเลอร์กอล์ฟ งานของคุณคือการเขียนโปรแกรมที่สร้างโปรแกรมอื่นเพื่อเล่นตัวแปรของ FizzBuzz บนสเปค คอมไพเลอร์ของคุณ เขียนคอมไพเลอร์ที่สร้างตัวแปรของโปรแกรม FizzBuzz ให้เป็นข้อมูลจำเพาะ ข้อมูลจำเพาะของชุดตัวเลือกนี้จะแสดงในรูปแบบของอาร์เรย์ของคู่จำนวนเต็ม / สตริง ข้อมูลที่ป้อนอาจอยู่ในรูปแบบใดก็ได้ที่สะดวกกับภาษาของคุณ (ตัวอย่างของฉันใช้ n: xxxx แต่นี่ใช้เพื่อเป็นตัวอย่างเท่านั้น) แต่ละอินพุตจำนวนเต็มสามารถใช้ได้หนึ่งครั้งต่อการเรียกใช้คอมไพเลอร์ของคุณ จำนวนเต็มของแต่ละคู่จะมีค่าอย่างน้อยหนึ่งคู่ สตริงของแต่ละคู่จะประกอบด้วยตัวอักษร ASCII เพียงสี่ตัวเท่านั้น ผลลัพธ์จะต้องเป็นโปรแกรมสมบูรณ์แบบเดียวที่เป็นไปตามกฎด้านล่าง ผลลัพธ์อาจอยู่ในรูปแบบที่สะดวกใด ๆ ตราบใดที่มันเป็นโปรแกรมต้นฉบับเดิม (ดังนั้นจึงไม่มีการแสดงออกแลมบ์ดาที่ส่งคืน) พฤติกรรมไม่ได้ถูกกำหนดไว้สำหรับอินพุตที่ไม่เป็นไปตามกฎข้างต้น โปรแกรม FizzBuzz ที่คุณสร้างขึ้น โปรแกรมที่สร้างขึ้นโดยคอมไพเลอร์ของคุณจะใช้เป็นจำนวนเต็มเดียวnเป็น input มันจะส่งออกลำดับของตัวเลขเริ่มต้นจากหนึ่งถึงและรวมถึงnแทนที่ตัวเลขด้วยสตริง FizzBuzz เมื่อจำเป็น โปรแกรมที่สร้างขึ้นต้องเป็นภาษาเดียวกันกับคอมไพเลอร์ อินพุตnอาจอยู่ในรูปแบบใดก็ได้ที่สะดวกกับภาษาของคุณ nจะมีค่าอย่างน้อยหนึ่งค่า จำนวนที่เป็นจำนวนเต็มอย่างน้อยหนึ่งในจำนวนเต็มเข้ากับคอมไพเลอร์จะต้องถูกแทนที่ด้วยสตริงทั้งหมดที่จับคู่กับจำนวนเต็มเหล่านั้นรวมเข้าด้วยกัน จำนวนที่จะไม่ถูกแทนที่ด้วยสตริง FizzBuzz จะต้องส่งออกใน ASCII ทศนิยม ตัวอย่างเช่น; > GenFizzBuzz 3:Fizz 5:Buzz > …

9
Brainf ** k ถึง Unary และ Back
ภาษาที่มีประโยชน์มากในแหล่งที่มีข้อ จำกัด และความท้าทายอื่น ๆ คือUnaryซึ่งเป็นอนุพันธ์ของสมองที่โปรแกรมจะเขียนด้วยตัวละครเพียงตัวเดียว งานของคุณคือการเขียนโปรแกรมเพื่อแปลงโปรแกรมจาก brainfuck เป็นเอกและโปรแกรมที่จะทำตรงข้ามทั้งสองโปรแกรมในภาษาเดียวกัน คะแนนของคุณจะเป็นผลรวมของความยาวของโปรแกรมทั้งสอง คุณแปลงจาก brainfuck เป็น unary ได้อย่างไร? ก่อนอื่นแปลงโค้ด brainfuck ให้คุณเป็นไบนารี่ตามตารางนี้: ตอนนี้เชื่อมต่อรหัสเป็นเลขฐานสองยักษ์หนึ่งตัวตามลำดับของรหัส เติม a 1เข้ากับสตริงเพื่อให้แน่ใจว่าเลขฐานสองที่ไม่ซ้ำกัน แปลงจากเลขฐานสองเป็นตัวเลขโดยใช้ตัวอักษรใดก็ได้ Ex: +.จะเป็น000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (84 ศูนย์) Brainfuck -> ข้อมูลจำเพาะของนารี เนื่องจากโปรแกรมที่ได้จะมีขนาดใหญ่มากพิมพ์ไม่ได้เป็นโปรแกรมจริง แต่เป็นเพียงความยาวของโปรแกรมผลลัพธ์ ใช้โปรแกรม brainfuck เป็นสตริงผ่าน stdin, ฟังก์ชัน arg ฯลฯ และส่งออกความยาว โปรแกรมจะใช้ได้ตลอดเวลาและมีเพียง 8 ตัวอักษรในนั้น ยูนารี -> ข้อมูลจำเพาะของ Brainfuck คุณจะต้องใช้การย้อนกลับของอัลกอริทึมข้างต้น อีกครั้งเนื่องจากมีขนาดใหญ่มากคำถามอินพุตจะเป็นตัวเลขที่อธิบายความยาวของรหัสยูนารี กฎ I …

3
เขียนคอมไพเลอร์ brainfuck
เขียนโปรแกรมที่ใช้โปรแกรม brainfuck และคอมไพล์มันเป็นรหัสเครื่องที่ปฏิบัติการได้ คุณสามารถกำหนดเป้าหมาย x86, x86_64, jvm (java bytecode) หรือ armv6 และใช้หนึ่งในรูปแบบที่ปฏิบัติการได้ต่อไปนี้: ELF, a.out, ไฟล์คลาส, exe, com ไฟล์สั่งการควรทำงานใน Linux หรือ Windows (หรือ Java อย่างใดอย่างหนึ่ง) ไม่ว่าโปรแกรมของคุณหรือไฟล์ที่เรียกทำงานที่สร้างขึ้นอาจรันโปรแกรมภายนอกใด ๆ (เช่นคอมไพเลอร์, แอสเซมเบลอร์, แอสเซมเบลอร์หรือล่ามอื่น) รหัสที่สั้นที่สุดชนะ

1
ภาพแสดงตัวเอง [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการในวันที่ 11 เดือนที่ผ่านมา พื้นหลัง มี.ZIPไฟล์ที่แตกไฟล์เอง โดยทั่วไปแล้วพวกเขาจะมีนามสกุล.EXE(และโดยการเรียกใช้ไฟล์พวกเขาจะถูกแตกออก) แต่เมื่อเปลี่ยนชื่อเป็น.ZIPคุณสามารถเปิดไฟล์ด้วยซอฟต์แวร์ ZIP แตก (สิ่งนี้เป็นไปได้เนื่องจาก.EXEไฟล์ต้องการส่วนหัวที่แน่นอน แต่.ZIPไฟล์ต้องการส่วนท้ายที่แน่นอนดังนั้นจึงเป็นไปได้ที่จะสร้างไฟล์ที่ทั้งสองมี.EXEส่วนหัวและส่วน.ZIPท้าย) งานของคุณ: สร้างโปรแกรมที่สร้างไฟล์ภาพ "แสดงตนเอง": โปรแกรมจะถ่ายภาพ 64x64 บางภาพ (สนับสนุนอย่างน้อย 4 สี) เป็นอินพุตและไฟล์ "รวม" เป็นเอาต์พุต ไฟล์ที่ส่งออกของโปรแกรมจะได้รับการยอมรับว่าเป็นไฟล์ภาพโดยโปรแกรมดูรูปภาพทั่วไป เมื่อเปิดไฟล์ที่ส่งออกด้วยโปรแกรมดูภาพภาพอินพุตจะปรากฏขึ้น ไฟล์ที่ส่งออกจะต้องได้รับการยอมรับว่าเป็นไฟล์ที่ปฏิบัติการได้สำหรับระบบปฏิบัติการหรือคอมพิวเตอร์ทุกประเภท (หากไฟล์สำหรับระบบปฏิบัติการผิดปกติหรือคอมพิวเตอร์ถูกสร้างขึ้นมันจะดีถ้ามีตัวจำลองพีซีโอเพนซอร์สอยู่อย่างไรก็ตามไม่จำเป็นต้องทำเช่นนี้) เมื่อเรียกใช้งานไฟล์เอาต์พุตภาพอินพุตจะแสดงขึ้น เป็นไปได้ว่าจำเป็นต้องเปลี่ยนชื่อไฟล์ (เช่นจาก.PNGเป็น.COM) ไม่จำเป็นว่าโปรแกรมและไฟล์เอาต์พุตจะทำงานบนระบบปฏิบัติการเดียวกัน ตัวอย่างเช่นโปรแกรมอาจเป็นโปรแกรม Windows และไฟล์เอาต์พุตที่สามารถเรียกใช้งานบน Commodore C64 เกณฑ์การชนะ โปรแกรมที่สร้างไฟล์เอาต์พุตที่เล็กที่สุดชนะ หากขนาดของไฟล์เอาต์พุตแตกต่างกันไปขึ้นอยู่กับอิมเมจอินพุต (ตัวอย่างเช่นเนื่องจากโปรแกรมบีบอัดอิมเมจ) ไฟล์เอาต์พุตที่ใหญ่ที่สุดที่เป็นไปได้ที่สร้างโดยโปรแกรมที่แสดงอิมเมจ 64x64 ที่มีจำนวนสูงสุด 4 สี …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.