16 진수 블록 박스?


11

6 자리 16 진수 입력 / 인수를 사용하는 프로그래밍 언어로 프로그램 또는 함수를 작성하십시오. 입력 / 인수는 6 개의 값 또는 6 개의 문자열 일 수 있습니다.

프로그램은 공백과 함께 제공된 16 진수 만 포함하는 정확히 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

규칙 :

  1. 출력은 직사각형이어야합니다

  2. 출력은 세로 높이 일 수 있지만 정확히 8 자 여야합니다.

  3. "블록 모양"이라고하는 "내부 블록"은 다른 블록 모양에 연결할 수 없습니다. 블록 모양은 가로, 세로 및 대각선으로 정확히 1 자 너비의 빈 공간 벽으로 분리되어야합니다.

  4. 공백의 벽은 외부 모서리와 평행을 이룰 수 없으며 출력 모서리에는 1 자 너비의 벽 모서리 만 존재할 수 있습니다. 출력의 가장 바깥 쪽 사각형 가장자리에 연결된 공간이 없어야합니다.

  5. 공백의 벽 너비는 1 문자를 초과하지 않아야합니다.

  6. 내부 블록 모양은 x 문자 영역과 균일해야하며, 여기서 x는 제공된 16 진수 값이고 모양은 문자 x로 구성되어야합니다. 여기서 x는 16 진 문자를 나타냅니다.

  7. 내부 블록 모양은 모든 모양 문자가 수직 또는 수평으로 연결되고 공백의 벽에 대한 규칙을 검증하지 않는 한 임의의 형태 일 수 있습니다.

  8. 6 개의 블록 모양은 출력 된 사각형 내부의 내부 "순서"에 배치 할 수 있습니다.

  9. 유효한 입력 범위 : 각 모양에 대해 1 ... 15 ( "1"... "f"). 프로그램에 대한 입력은 6 개의 16 진수 이외의 정보를 포함하지 않아야하며, 입력은 프로그램 / 기능에 공급되기 전에 샘플과 다른 방식으로 정렬되어서는 안됩니다. 솔루션에서 사용하는 입력 형식을 알려주십시오 (입력에 16 진 값 이외의 다른 정보를 포함 할 수 없음).

  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 시간 이내로 변환합니다. 3Ghz 듀얼 코어, 4GB 메모리 참조.

이것은 가장 짧은 솔루션이 승리하는 코드 골프입니다. 솔루션은 완전히 작동하는 프로그램 또는 기능 일 수 있습니다.


규칙 7은 "연결"에 대해 무엇을 의미합니까? 이것은 (제 문구) 2x2 빈 사각형의 존재를 금지하는 규칙 5 제약 조건을 다시 표현한 것입니까?
피터 테일러

일부 재조정에 대해 죄송하지만 규칙 7은 모양이 균일해야한다는 규칙 6의 규칙에 더 가깝습니다. 다시 말해 규칙 7은 단일 모양을 2 개의 작은 작은 모양으로 나눌 수 없다고 말합니다.
Plarsen

6
나는 의미가 없다고 생각하지만,이 문제는 결코 흥미 롭거나 흥미 롭거나 심미적으로 즐거운 특성을 보이지 않습니다. 그것은 추상적 인 도전 일뿐입니다. 왜 모든 사람이 규칙을 모두 읽어야 할 필요가 있을지 모르겠습니다. 그래도 다음 사람과 행운을 빕니다!
Bogdan Alexandru

1
설명 : 공백은 블록을 분리하고 외부 가장자리에 2x2 블록과 두 개의 연속 공백 블록이없는 한 어떤 모양이든 형성 할 수 있습니까?
John Dvorak

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가 충족되지 않아 출력의 가상 사각형이 만들어지며 가장 오른쪽 가장자리에 행에 하나 이상의 공백이 정렬됩니다.
Plarsen

1

BrainF * ck-134 (줄 바꿈)

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

나는 이것이 단순한 답변이라고 생각합니다.

6 개의 16 진 문자를 통해 stdin에 입력 한 다음 제출할 줄 바꾸기를 입력합니다.

편집 : 이것은 규칙 6으로 인해 실패했습니다. 지금까지 완전히 깨닫지 못했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.