Напишите программу или функцию на любом языке программирования, который принимает шестизначный шестнадцатеричный ввод / аргумент. Вход / аргумент могут быть 6 значениями или 6-символьной строкой.
Ваша программа должна вывести прямоугольный блок символов шириной 8 символов, содержащий только шестнадцатеричные числа и пробелы (+ перевод строки). Прямоугольный блок представляет собой комбинацию блоков меньших размеров, по одному для каждого из 6 предоставленных значений.
Ниже приведены 2 демонстрационных примера входных данных и примеры действительных выходных данных:
Пример ввода :
"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
Правила:
Выход должен быть прямоугольной формы
Вывод может быть любой вертикальной высоты, но должен быть ровно 8 символов в ширину.
«Внутренние блоки», называемые «формами блоков», не могут соединяться с какой-либо другой формой блоков, формы блоков должны быть разделены стеной пустых пространств шириной ровно в 1 символ по горизонтали, вертикали и диагонали.
Стена пустых пространств не может проходить параллельно внешним краям, на выходных ребрах могут существовать только стены шириной в 1 символ. Не должно быть никаких связанных пространств где-либо на самом краю прямоугольника на выходе.
Ширина стены пробелов не должна ни в какой точке превышать 1 символ.
Формы внутреннего блока должны быть одинаковыми с областью символов x, где x - это предоставленное шестнадцатеричное значение, а форма должна состоять из символа x, где x - представитель шестнадцатеричного символа.
Внутренние фигуры блоков могут иметь любую форму, если все символы фигуры соединяются вертикально или горизонтально и не соответствуют правилам для стены пустых пространств.
6 блоков формы могут быть размещены в любом внутреннем «порядке» внутри выведенного прямоугольника.
Допустимый диапазон ввода: 1 ... 15 ("1" ... "f") для каждой фигуры. Входные данные для вашей программы не должны содержать никакой другой информации, кроме 6 шестнадцатеричных чисел, и входные данные не должны сортироваться каким-либо иным способом, кроме как в примерах, прежде чем они будут переданы вашей программе / функции. Сообщите нам, какой формат ввода использует ваше решение (входные данные не могут содержать никакой другой информации, кроме шестнадцатеричных значений).
Форма внутреннего блока может быть полой. Отверстие должно содержать символы пробела, которые считаются стеной пробелов, то есть ширина отверстия в форме пустого внутреннего блока не может превышать 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 ГБ памяти для справки.
Это код гольф, выигрывает самое короткое решение. Решение может быть полностью работающей программой или функцией
Ответы:
Хаскелл, 156
Ну, этот немного растягивает правила. У меня нет пустых стен, кроме разрывов строк, поэтому все мои стены имеют длину 1.
выход для 464fa6:
источник
BrainF * ck - 134 (перевод новой строки
Я думаю, что это самый простой ответ
Ввод осуществляется через 6 шестнадцатеричных символов в stdin, за которым следует новая строка для отправки.
РЕДАКТИРОВАТЬ: Это терпит неудачу из-за правила 6, которое я до конца не осознавал: /
источник