Blockbox Hex ที่?


11

เขียนโปรแกรมหรือฟังก์ชั่นในภาษาการเขียนโปรแกรมใด ๆ ที่รับอินพุต / อาร์กิวเมนต์เลขฐานสิบหก 6 หลัก อินพุต / อาร์กิวเมนต์สามารถเป็นค่า 6 ค่าหรือสตริงอักขระ 6 ตัว

โปรแกรมของคุณควรส่งออกบล็อกสี่เหลี่ยมกว้าง 8 ตัวอักษรของตัวอักษรที่มีเฉพาะเลขฐานสิบหกที่ให้มารวมกับช่องว่าง (+ Linefeed) บล็อกสี่เหลี่ยมคือการรวมกันของรูปร่างบล็อกขนาดเล็กหนึ่งรูปสำหรับแต่ละค่าที่ให้มา 6 ค่า

ต่อไปนี้เป็นตัวอย่างอินพุต 2 demostrative และเอาต์พุตตัวอย่างที่ใช้ได้:

ตัวอย่างอินพุต :

"464fa6" or [4, 6, 4, 15, 10, 6]

ทางออกหนึ่งที่ถูกต้องการส่งออก :

44 66 ff
44 66 ff
   66 ff
aa     f
aaa ffff
aa  ffff
aaa     
    6 44
66666 44

ตัวอย่างอินพุต :

"35bf12"

ทางออกหนึ่งที่ถูกต้องการส่งออก :

55555 22

bbbbbbbb
b b b   
      33
fffff  3
ff  ff  
ffffff 1

กฎ:

  1. ผลลัพธ์จะต้องเป็นรูปสี่เหลี่ยมผืนผ้า

  2. เอาต์พุตสามารถมีความสูงในแนวตั้ง แต่ต้องมีความกว้าง 8 ตัวอักษร

  3. "บล็อกด้านใน" ที่อ้างถึงว่า "รูปร่างบล็อก" ไม่สามารถเชื่อมต่อกับรูปร่างบล็อกอื่น ๆ ได้รูปร่างบล็อกต้องแยกจากกันด้วยผนังของพื้นที่ว่างอย่างแน่นอน 1 ตัวกว้างแนวนอนแนวตั้งและแนวทแยงมุม

  4. ผนังของพื้นที่ว่างไม่สามารถวิ่งขนานกับขอบด้านนอกได้เพียงขอบผนังกว้าง 1 ตัวเท่านั้นที่มีอยู่ที่ขอบเอาต์พุต ไม่ควรมีช่องว่างใด ๆ ที่เชื่อมโยงที่ใดก็ได้บนขอบสี่เหลี่ยมผืนผ้าด้านนอกสุดของเอาต์พุต

  5. ความกว้างของกำแพงพื้นที่ว่างไม่ควรเกิน 1 ตัวอักษร

  6. รูปร่างของบล็อกด้านในควรจะเหมือนกันกับพื้นที่ของอักขระ x โดยที่ x คือค่าเลขฐานสิบหกที่ให้มาและรูปร่างควรประกอบด้วย charater x โดยที่ x เป็นตัวแทนอักขระเลขฐานสิบหก

  7. รูปร่างของบล็อกภายในสามารถอยู่ในรูปแบบใดก็ได้ตราบใดที่อักขระรูปร่างทั้งหมดเชื่อมต่อในแนวตั้งหรือแนวนอนและไม่ทำให้กฎสำหรับผนังของพื้นที่ว่างว่าง

  8. คุณสามารถวางรูปทรงบล็อก 6 รูปแบบใน "ลำดับ" ภายในใด ๆ ภายในสี่เหลี่ยมเอาต์พุต

  9. ช่วงอินพุตที่ถูกต้อง: 1 ... 15 ("1" ... "f") สำหรับแต่ละรูปร่าง ข้อมูลเข้าสู่โปรแกรมของคุณไม่ควรมีข้อมูลอื่นใดนอกเหนือจากเลขฐานสิบหก 6 ตัวและไม่ควรเรียงลำดับข้อมูลด้วยวิธีอื่นใดนอกเหนือจากตัวอย่างก่อนที่จะส่งไปยังโปรแกรม / ฟังก์ชันของคุณ บอกให้เราทราบว่ารูปแบบการป้อนข้อมูลใดที่โซลูชันของคุณใช้ (อินพุตไม่สามารถมีข้อมูลอื่นใดนอกเหนือจากค่าเลขฐานสิบหก)

  10. รูปร่างบล็อกภายในสามารถกลวง ควรเป็นช่องว่างของอักขระเว้นวรรคซึ่งนับเป็นกำแพงของพื้นที่ว่างเปล่าซึ่งหมายความว่ารูในรูปทรงบล็อกกลวงภายในไม่สามารถมีความกว้างมากกว่า 1 อักขระ

ตัวอย่างของรูปทรงกลวงที่ใช้ได้:

aaa
a aaa
aaa

999
9 9
999
9

ffffff
f   ff
ffffff

ตัวอย่างหนึ่งของรูปร่างกลวงที่ไม่ถูกต้อง:

ffffff
f   f
f   f
fffff

ฉันสมมติว่าชุดค่าผสมของอินพุตทั้งหมดเป็นไปไม่ได้ที่จะ "แก้ปัญหา" ตามกฎข้างต้นดังนั้นฉันจึงแสดงรายการอินพุตตัวอย่าง 10 รายการที่โปรแกรมของคุณควรจะสามารถ "แก้ปัญหา" (ทั้งหมดได้รับการตรวจสอบแก้ไขได้):

 1. 464fa6 (same as the first sample)
 2. 35bf12 (second example input seen above)
 3. 111126
 4. ff7fff
 5. 565656
 6. abcdef
 7. 1357bd
 8. 8c6a42
 9. ab7845
10. 349a67

โปรแกรมของคุณควรสามารถแก้ไขอินพุตตัวอย่าง 10 รายการใด ๆ ในเวลาที่เป็นกันเอง แปลเวลา resonable เป็น 1 ชั่วโมงบนคอมพิวเตอร์เดสก์ท็อปมาตรฐาน พูดเช่น: 3 Ghz Dual core, หน่วยความจำ 4GB สำหรับการอ้างอิง

นี่คือโค้ดกอล์ฟวิธีแก้ปัญหาที่สั้นที่สุดชนะ การแก้ปัญหาอาจเป็นโปรแกรมที่ทำงานได้อย่างสมบูรณ์หรือฟังก์ชั่น


กฎ 7 หมายถึงอะไรเกี่ยวกับ "การเชื่อมต่อ"? นี่เป็นเพียงการปรับปรุงกฎข้อ จำกัด 5 ที่ (คำพูดของฉัน) ห้ามไม่ให้มีพื้นที่สี่เหลี่ยมจัตุรัสขนาด 2x2 หรือไม่
Peter Taylor

ฉันขอโทษเกี่ยวกับการคืนค่าบางอย่าง แต่กฎข้อที่ 7 เป็นการทบทวนกฎข้อที่ 6 มากกว่าซึ่งมีการระบุว่ารูปร่างควรเหมือนกัน ในคำอื่น ๆ กฎ 7 บอกว่ารูปร่างเดียวไม่สามารถแบ่งออกเป็น 2 รูปร่างที่เล็กกว่าแยก
Plarsen

6
ฉันไม่ได้ตั้งใจที่จะตั้งใจ แต่ปัญหานี้ไม่น่าสนใจน่าสนใจหรือแสดงลักษณะที่น่าพึงพอใจใด ๆ มันเป็นความท้าทายที่เป็นนามธรรมและฉันไม่เห็นว่าทำไมใครถึงมีความอดทนที่จำเป็นในการอ่านกฎทั้งหมดโดยไม่จำเป็นต้องพูดอะไรเกี่ยวกับการแก้ไข ขอให้โชคดีกับคนต่อไปของคุณ!
Bogdan Alexandru

1
การชี้แจง: ช่องว่างสามารถสร้างรูปร่างใดก็ได้ตราบเท่าที่มันแยกบล็อกและมันไม่มีบล็อก 2x2 และไม่มีบล็อกช่องว่างสองช่องติดต่อกันบนขอบด้านนอก?
John Dvorak

2
คำถามนี้ช่างยากจริง ๆ (หรือบางทีฉันเป็นคนแก้ปัญหาที่ไม่ดี) ... คุณมีวิธีแก้ปัญหาด้วยตัวคุณเองไหม? อย่างไรก็ตามฉันคิดว่ามันน่าสนใจกว่าที่จะวางข้อกำหนดของช่องว่างและทำให้มันเป็นรหัสที่ท้าทายซึ่งคะแนนขึ้นอยู่กับจำนวนตัวละครและความสูงของบล็อก มันเป็นความต้องการที่ยาก)
FireFly

คำตอบ:


1

Haskell, 156

อันนี้ทอดยาวกฎเล็กน้อย ฉันไม่มีผนังว่างเว้นวรรคยกเว้นแนวแบ่งดังนั้นกำแพงของฉันทั้งหมดจึงมีความยาว 1

import Data.List
r=replicate
main=getLine>>=putStrLn.concatMap(\b->unlines$s(head$elemIndices b"0123456789abcdef")b)
s n c|n<9=[r n c,""]|True=r 8 c:s(n-8)c

เอาท์พุทสำหรับ 464fa6:

4444

666666

4444

ffffffff
fffffff

aaaaaaaa
aa

666666

ใกล้มาก :) แต่กฎ 4 ไม่เป็นไปตามสร้างจินตภาพสี่เหลี่ยมผืนผ้าของเอาต์พุตของคุณคุณมีมากกว่า 1 การจัดตำแหน่งช่องว่างในแถวบนขอบด้านขวาสุด
Plarsen

1

BrainF * ck - 134 (ขึ้นบรรทัดใหม่ภายใน

>>+[++++++++++>,----------]>++++++[<+++++>-]<++[<]<++++++[>+++++<-]>++>-
>..<<.>>>..<<<.>>>>..<<<.<........>.>>>>..>>>.<<..>>.<..[<]>>.

ฉันคิดว่านี่เป็นคำตอบที่ง่าย

ข้อมูลที่ป้อนผ่านตัวอักษรฐานสิบหก 6 ตัวถึง stdin ตามด้วยบรรทัดใหม่ที่จะส่ง

แก้ไข: สิ่งนี้ล้มเหลวเนื่องจากกฎข้อ 6 ซึ่งฉันไม่ได้ตระหนักอย่างเต็มที่จนถึงตอนนี้: /

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