Courier Ception


13

Courier Ception

โปรแกรมต้องยอมรับสตริงใด ๆ เป็นอินพุตและเอาต์พุตอิมเมจพิกเซลที่แสดงสตริงอินพุตใน Courier ตัวอักษรทั้งหมดที่มี 'หลุม' (เช่นabdegopqABDPQRฯลฯ ) ที่ล้อมรอบด้วยพิกเซลสีดำจะต้องเติมด้วยสีดำ

อินพุต

โปรแกรมต้องสามารถยอมรับสตริง ASCII ใด ๆ เป็นอินพุต อินพุตอาจเป็นวิธีที่คุณต้องการตราบใดที่โค้ดโปรแกรมไม่จำเป็นต้องเปลี่ยนแปลงเพื่อยอมรับอินพุตอื่น (ยกเว้นเช่นชื่อไฟล์ของไฟล์ที่จะอ่าน) ไม่มีช่องโหว่มาตรฐาน คุณสามารถสมมติว่าแต่ละอินพุตมีจดหมายที่พิมพ์ได้อย่างน้อยหนึ่งตัว

เอาท์พุต

ผลลัพธ์จะต้องเป็นกราฟิกพิกเซลแบบขาวดำ (ไม่มีสีเทา) ที่แสดงสตริงที่เขียนใน Courier (ในสีดำ, สีขาวพื้นหลัง) โดยระบุ 'หลุม' ที่ระบุ แบบอักษรของสตริงทั้งหมดจะต้องคงที่ (ซึ่งหมายความว่าไม่มีการปรับขนาดที่แตกต่างกันสำหรับแต่ละตัวอักษรที่แตกต่างกัน) เพื่อให้ตัวอักษรขนาดเต็ม (เช่นABCDEFGHIJKLMNOPRSTUVWXYZแต่ j และ Q นั้นใหญ่กว่า) ต้องมีความสูงอย่างน้อย 10px (คุณไม่จำเป็นต้องเขียนลงในไฟล์การแสดงผลใด ๆ ก็โอเคตราบเท่าที่มันถูกสร้างขึ้นเป็นพิกเซลกราฟิคเช่นผ้าใบใน JavaScript) กรุณาโพสต์กราฟิกนี้พร้อมคำตอบของคุณ

อนุญาตให้เข้าถึงไลบรารี courier.ttf / font

โปรแกรมจะต้องนับจำนวนพิกเซลสีดำและเขียนลงในคอนโซลหรือวิธีการแสดงผลที่เคยต้องการในท้ายที่สุด

คะแนน

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


เอาต์พุตถูกระบุเป็น b / w ดังนั้นจึงไม่อนุญาตให้ใช้พิกเซลสีเทา และขอขอบคุณที่สอบถามเกี่ยวกับการเข้ารหัสนี่จะถูก จำกัด ไว้ที่ ASCII เนื่องจากตัวอักษร
ข้อบกพร่อง

1
มีปัญหาร้ายแรงอย่างน้อยสองปัญหาที่ต้องมีการชี้แจง ประการแรกมันไม่ชัดเจนว่าโปรแกรมได้รับอนุญาตให้เข้าถึง Courier.ttf และไลบรารีแบบอักษรซึ่งสามารถใช้ได้หรือไม่ ประการที่สองคุณตั้งใจอย่างจริงจังที่จะห้ามโปรแกรมที่ไม่มีอักขระที่ไม่ใช่ ASCII หรือไม่?
Peter Taylor

ใช่อนุญาตให้เข้าถึง Courier.ttf และฟอนต์ไลบรารี่ได้ - จะไม่เป็นไรขอบคุณ ฉันไม่สามารถรู้ภาษาหลักที่ใช้อักขระที่ไม่ใช่ ASCII - คุณรู้จักภาษาที่ต้องการอักขระที่ไม่ใช่ ASCII หรือไม่?
ข้อบกพร่อง

1
@flawr APL และใน Mathematica คุณสามารถย่อบางสิ่งด้วยอักขระ Unicode
Martin Ender

เป็นImageMagickได้รับอนุญาต?
Digital Trauma

คำตอบ:


12

Mathematica, 4864 พิกเซล

l = ImageData[Binarize[Rasterize[Style[j, FontSize -> 15]], .71]]
i = {{1, 1}}
While[Length[i] > 1 - 1,
 {r, c} = j = i[[1]]; l[[r, c]] = 2; i = i[[2 ;; -1]];
 If[FreeQ[i, {r, c} = J = j + #] && l[[r, c]] == 1, 
    i = i~Join~{J}] & /@
  {{1, 1 - 1}, {1 - 1, 1}, {-1, 1 - 1}, {1 - 1, -1}}
 ]
Image[l = l /. 1 -> 1 - 1 /. 2 -> 1]
Count[l, 1 - 1, {2}]

นี่คือภาพ:

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

ใน Mathematica เมื่อคุณเขียน "โปรแกรม" คุณเพียงแค่เขียนตัวอย่าง ดังนั้นสิ่งนี้จึงคาดว่าอินพุตที่เก็บไว้jและสิ่งสุดท้ายที่ส่งกลับคือภาพและจำนวน สิ่งนี้ยังคายข้อผิดพลาดออกมาเป็นจำนวนมากเพราะฉันไม่ได้ทำการตรวจสอบอย่างlจำกัด แต่ก็ให้ผลลัพธ์ที่ต้องการอยู่ดี

โดยที่%อ้างถึงเอาต์พุตล่าสุดที่กล่าว

ขอบคุณ Geobits สำหรับแนวคิดสำหรับอัลกอริทึม ฉันกำลังท่วมท้นรูปภาพจากมุมบนซ้ายด้วยความเข้มที่ไม่ถูกต้องจากนั้นฉันจะแทนที่พิกเซลสีขาวที่เหลือทั้งหมดด้วยพิกเซลสีดำและพิกเซลที่ไม่ถูกต้องด้วยสีขาว

โปรดทราบว่าการFreeQตรวจสอบนั้นไม่จำเป็นสำหรับโปรแกรมที่จะทำงานอย่างถูกต้อง แต่เพื่อให้การตรวจสอบเสร็จในระยะเวลาที่เหมาะสม ถ้าฉันปล่อยมันออกไปฉันจะให้คะแนนน้อยกว่าประมาณ 300 พิกเซล


การนับควรเป็นส่วนหนึ่งของโปรแกรม! นอกจากนั้นเป็นคำตอบที่ดีคุณคำนวณว่าตัวอักษร (เป็นชื่อตัวแปร) ใดที่ใช้จำนวนพิกเซลน้อยที่สุด?
ข้อบกพร่อง

@ flawr ใช่ :) (ตอนนี้สำหรับพวกเขาทั้งหมด) (แก้ไขการนับในไม่กี่วินาที)
Martin Ender
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.