스테 가노 그래피 스퀘어
당신의 임무는 문자열을 받아이 문자열 NxN
을 나타내는 이미지를 생성하는 것 입니다. 또한 이미지를 가져 와서 다시 문자열로 바꾸는 알고리즘을 작성해야합니다. 스코어링에는 두 알고리즘의 바이트 수가 포함됩니다.
"암호화"알고리즘 + "암호화"알고리즘 .
암호화 및 암호 해독 알고리즘 모두에 대해 바이트 수와 함께 각각 개별적으로 게시해야합니다.
알고리즘 예
예를 들어 다음은 Blue 채널에서 간단한 ASCII 기반 스테 가노 그래피 알고리즘을 사용하는 "프로그래밍 퍼즐 및 코드 골프"입니다.
#2e7250,#6ea972,#04eb6f,#0fc767,#74ab72,#ee6161
#b73b6d,#1aae6d,#f37169,#bda56e,#1fe367,#e99620
#706450,#0d3575,#146b7a,#4ea47a,#2a856c,#95d065
#3f2d73,#cef720,#bab661,#d1b86e,#f22564,#12b820
#0f3d43,#c86e6f,#1ee864,#a66565,#247c20,#c3bb47
#0e296f,#89d46c,#585b66,#c08f20,#455c20,#136f20
파란색 채널이 단순히이 이미지의 ASCII 값을 보유하고 있음을 알 수 있습니다.
50 = 80(P) 72 = 114(r) 6f = 111(o) 67 = 103(g) 72 = 114(r) 61 = 97(a)
6d = 109(m) 6d = 109(m) 69 = 105(i) 6e = 110(n) 67 = 103(g) 20 = 32( )
50 = 80(P) 75 = 117(u) 7a = 122(z) 7a = 122(z) 6c = 108(l) 65 = 101(e)
73 = 115(s) 20 = 32( ) 61 = 97(a) 6e = 110(n) 64 = 100(d) 20 = 32( )
43 = 67(C) 6f = 111(o) 64 = 100(d) 65 = 101(e) 20 = 32( ) 47 = 71(G)
6f = 111(o) 6c = 108(l) 66 = 102(f) 20 = 32( ) 20 = 32( ) 20 = 32( )
나머지 채널은 무작위로 생성 된 값을 유지하면서 이미지의 다양한 색상을 "스파이 업"합니다. 이미지에서 메시지를 다시 가져올 때 다른 채널 값을 무시하고 파란색 채널에서 16 진수 비트를 당겨 문자열을 재구성하면됩니다.
"Programming Puzzles and Code Golf"
정사각형에서 문자열을 채우는 데 사용 된 공백은 최종 해독 된 출력에 포함되지 않습니다. 이미지에서 문자열을 채워야하지만 입력 문자열이 공백으로 끝나지 않는다고 가정 할 수 있습니다.
규칙
- 픽셀 당 1 개의 문자를 인코딩해야하며 문자를 인코딩하기 위해 선택한 채널은 임의적입니다.
- 다른 RGB 색상의 채널은 문자열을 인코딩하도록 선택한 채널 이외의 무작위로 지정해야합니다. 즉, 인코딩되지 않은 최종 채널 사이
0x0000-0xFFFF
(임의로 선택) 가 필요합니다 . - 최종 결과를 RGB 색상 값의 2D 배열로 표현하는
0x000000-0xFFFFFF
것이 좋습니다. 재미 있기를 원하거나 바이트가 적지 않으면 이미지를 만들 필요가 없습니다. 당신이 16 진수 문자열로 출력을 선택하는 경우와 16 진수 문자열 앞에#
EG#FFFFFF
또는#05AB1E
. 탭, 쉼표 또는 가로로 구분되는 다른 것으로 분리 할 수 있지만 정사각형 패턴을 유지해야합니다. 즉, 적절한 줄 바꿈 구분을 사용해야합니다. - 출력은 정사각형이어야하며,이를 위해 문자열 끝에 공백이 채워 져야합니다. 이것은 의미합니다
N≈SQRT(Input#Length())
. 입력 길이가 완벽한 정사각형이 아닌 경우 반올림N
하여 공백으로 채워야합니다. - 앞에서 언급했듯이 이미지에 공백으로 채워지는 경우 최종 "암호화 된"출력에 채워진 문자를 포함해서는 안됩니다.
- 다음과 같이 가정 할 수 있습니다.
- 입력 문자열은 공백으로 끝나지 않습니다.
- 입력 문자열은 인쇄 가능한 ASCII 문자 만 사용합니다.
- 이것은 code-golf 이며 가장 낮은 바이트 수입니다.