Blockbox, що Hex?


11

Напишіть програму або функцію будь-якою мовою програмування, яка приймає 6-значний шістнадцятковий вхід / аргумент. Вхід / аргумент може бути 6 значень або 6 символьним рядком.

Ваша програма повинна виводити прямокутний блок символів із широким розміром у 8 символів, що містить лише шістнадцяткові цифри, що постачаються у поєднанні з пробілами (+ Linefeed). Прямокутний блок - це комбінація менших форм блоку, по одному для кожного з 6 поданих значень.

Тут випливає два демостративні вхідні приклади та дійсні вибірки вибірки:

Зразок введення :

"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 - це шістнадцяткове значення, а форма повинна складатися з символу 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 зразків вхідних даних за резонансний час. перевести резонансний час на 1 годину на звичайний настільний комп'ютер. Скажіть, як: Двоядерний 3 ГГц, 4 Гб пам'яті для довідки.

Це кодовий гольф, виграє найкоротше рішення. Рішенням може бути повністю працююча програма або функція


Що означає правило 7 про "підключення"? Це лише перестановка обмеження правила 5, яке (моє фразування) забороняє існування порожнього квадрата 2х2?
Пітер Тейлор

Я шкодую про деякі перегляди, але правило 7 - це більше перерахунок правила 6, де зазначено, що форми повинні бути однаковими. Іншими словами, правило 7 говорить, що одну фігуру не можна розділити на дві окремі менші форми.
Plarsen

6
Я не маю наміру бути злим, але ця проблема аж ніяк не інтригуюча, цікава чи не показує будь-якої естетично приємної характеристики. це просто абстрактний виклик, і я не бачу, чому хтось мав би необхідне терпіння, щоб навіть прочитати всі правила, не потрібно нічого говорити про його рішення. удачі з наступним!
Богдан Олександру

1
Уточнення: пробіл може утворювати будь-яку форму, якщо він розділяє блоки, і він не містить блоку 2х2 і двох послідовних блоків пробілів на зовнішньому краю?
Джон Дворак

2
Це питання справді хитромудрий (а може, я погано вирішував проблеми) ... чи є у вас рішення, Plarsen? У будь-якому випадку, я думаю, було б цікавіше відмовитись від вимог пробілу і зробити це викликом коду, коли оцінка залежить як від кількості символів, так і від висоти блоку (таким чином, вигідно упакувати його багато, не роблячи це важка вимога).
FireFly

Відповіді:


1

Хаскелл, 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, після чого слід подати новий рядок.

EDIT: Це не вдається через правило 6, яке я до кінця не усвідомлював: /

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.