16 색 CGA 팔레트 ( HTML 색 이라고도 함 )는 초기 그래픽 어댑터에서 사용되는 16 색 세트입니다. 이 과제의 목표는 16 개 형식 ( RRGGBB
)으로 16 개 값을 기준으로 오름차순으로 개행 문자로 구분하여 16 개를 모두 출력하는 것 입니다. 따라서 출력은 정확히 다음과 같아야합니다.
000000
000080
0000FF
008000
008080
00FF00
00FFFF
800000
800080
808000
808080
C0C0C0
FF0000
FF00FF
FFFF00
FFFFFF
하나의 후행 줄 바꿈이 허용되지만 필수는 아닙니다.
답변
젤리 , 31 29 27 바이트
“×Ɗ¡‘ŒP»Ṫ¦209ṗ€3Fd⁴ịØHs3ṢQY
작동 원리
“×Ɗ¡‘
젤리의에서 따옴표 사이의 문자 코드 포인트 얻을 SBCS 이다 = 17 0x11을 , = 145 0x91 , 및 × 00 = 0 .
ŒP
코드 포인트 배열의 파워 세트를 생성하여
[[], [17], [145], [0], [17, 145], [17, 0], [145, 0], [17, 145, 0]]
마지막 두 항목은 80 과 FF를 모두 포함하는 조합에 해당 하므로 무시해야합니다.
»Ṫ¦209
세 부분으로 구성됩니다.
-
Ṫ
(tail)은 코드 포인트의 마지막 배열, 즉 [17, 145, 0]을 제거 합니다. -
»209
파워 셋의 나머지 각 정수의 최대 소요 0xD1 209 = 그들 모두 교체 209 . -
¦
(스파 스)는 나머지 전원 세트의 요소를 반복합니다. 해당 인덱스가 [17, 145, 0] 에서 발견되면 요소는 모두 209 로 바뀝니다 . 그렇지 않으면 그대로 유지됩니다.¦
모듈 식이 아니므로 나머지 전원 세트의 마지막 배열 (인덱스 0 ) 만 수정합니다 . 인덱스 17 과 145 가 너무 커서 효과가 없습니다.
결과는 다음과 같습니다.
[[], [17], [145], [0], [17, 145], [17, 0], [209, 209]]
ṗ€3
각 배열의 세 번째 카테 시안 거듭 제곱, 즉 각 배열의 모든 3 개의 튜플 요소 배열을 계산합니다.
Fd⁴
결과를 평탄화하고 각 정수의 몫과 나머지를 16 으로 나눈 값을 계산합니다 .
ịØH
인덱스 (1 기반)를 “0123456789ABCDEF에 색인화 하므로 0x11 , 0x91 , 0x00 및 0xD1 은 “00 “ , “80 “ , “FF “ 및 “C0 “ (각각)에 매핑됩니다 .
s3ṢQ
문자 쌍을 3 개의 튜플로 나누고 튜플을 정렬 한 후 중복 제거합니다.
마지막으로 Y
줄 바꿈으로 구분하여 고유 한 튜플을 결합합니다.
답변
배쉬 + GNU 유틸리티, 67
- @manatwork 덕분에 2 바이트 절약
- @zeppelin 덕분에 2 바이트 절약
a={00,80,FF}
eval echo $a$a$a|fmt -w9|sed '16iC0C0C0
/F0*8\|80*F/d'
- 중괄호 확장
{00,80,FF}{00,80,FF}{00,80,FF}
(제외 올바른 순서의 모든 필요의 조합을 제공합니다C0C0C0
일부 엑스트라를 따라가). 엑스트라는F
및8
문자 가 모두 포함되어 있습니다 . - 중괄호 확장의 결과는 공백으로 구분 된 단일 행입니다.
fmt
각 항목을 자체 줄에 넣습니다. - 식의 첫 번째 줄이 해당 줄에
sed
삽입C0C0C0
됩니다 sed
표현식 의 두 번째 줄은 위에서 설명한 “extras”를 걸러냅니다.
Ideone .
답변
젤리 , 38 31 바이트
“mạ9ṣṃwɠƁ,¡ẓw’b4µża1$ị“08CF”s3Y
숫자 ( “...’
) 의 기본 250 압축 ,
기본 4 ( b4
) 로 변환 , 벡터화 논리 후 자체 사본을 사용하여
압축 ( ż
) 및 1 ( a1$
) *, 사용
된 ị
4 개의 문자로 색인화 ( “08CF”
),
청크로 분할 길이는 3 ( s3
)이고
줄 바꿈 ( Y
) 과 결합됩니다 .
* 따라서 각각의 0 자리를 다른 0과 짝을 이루고 다른 숫자는 1과 짝을 이룹니다. 이 수단 페치 인덱싱 다음과 함께 'F'
서로 쌍으로된다 'F'
동안 '0'
, '8'
및 'C'
A의 각 쌍 '0'
.
답변
파이썬 3 134 129 125 108 91 90 바이트
아직도 할 골프가 많다고 생각합니다. 골프 제안을 환영합니다!
편집 : -9 바이트 및 문자열 형식 지정에 도움을 주신 Mego에게 감사드립니다. -17 바이트는 처음에 문자열을 인쇄하는 더 좋은 방법을 찾아냅니다. -17 바이트는 처음부터 for 루프를 작성하는 더 좋은 방법을 찾아냅니다. i%3//2*"\n"
대신 xnor의 팁 덕분에 -1 바이트 "\n"*(i%3<2)
.
for i in range(48):print(end="F0C8F000"[0x10114abf7f75c147d745d55//4**i%4::4]+i%3//2*"\n")
언 골핑
z = 0
a = [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 2, 2, 2, 3, 3, 3, 1, 3, 3, 3, 1, 3, 1, 1, 3, 0, 0, 1, 1, 0, 1, 3, 3, 1, 1, 3, 1, 0, 1, 1, 3, 1, 1, 1, 1, 1]
for i in range(len(a)):
z = (z + a[i]) * 4
z //= 4 # we multiplied by 4 one too many times
for i in range(48):
m = z // 4**j % 4
s = "F0C8F000"[c::4]
if i % 3 == 2:
s += "\n"
print(s, end="")
답변
자바 스크립트 (ES6) 109 107 바이트
Neil 덕분에 2 바이트 절약
이것은 백틱으로 원시 문자열을 반환하는 것보다 7 9 바이트 더 짧습니다.
_=>[...'1121173113106393'].map(v=>[4,2,0].map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21).join``,n=-1).join`
`
테스트
let f =
_=>[...'1121173113106393'].map(v=>[4,2,0].map(x=>'08CF'[x=n>>x&3]+'000F'[x],n+=+v||21).join``,n=-1).join`
`
console.log(f())
답변
PowerShell, 113106 바이트
'777
7780
77FF
7807
78080
7FF7
7FFFF
8077
80780
80807
808080
C0C0C0
FF77
FF7FF
FFFF7
FFFFFF'-replace7,'00'
예, 리터럴 문자열을 인쇄하는 것보다 짧은 것을 찾지 못했습니다 … 간단한 교체 (완전히 간과 한)를 사용하여 7 바이트를 줄인 @ Martin Smith 에게 감사드립니다 . 따라서 단순히 하드 코딩하는 것보다 최소 7 바이트가 짧습니다. 예이!
그러나 그것은 지루하다!
그래서 대신에 …
PowerShell v4, 128 바이트
[consolecolor[]](0,7+9..15)+-split'Lime Maroon Navy Olive Purple Silver Teal'|%{-join"$([windows.media.colors]::$_)"[3..8]}|sort
[system.consolecolor]
네임 스페이스는 콘솔 색상 (기본적으로) 정의 가능한 파워 쉘 콘솔을. 우리는이 같은 정수 배열을 통해 그것들을 참조하는 경우, 디폴트 값은 (예를 들어, 이름 Black
또는 White
등이). -split
공백에 있는 문자열과 결합하여 색상 이름으로 구성된 문자열 배열을 갖습니다.
우리는 그것들 |%{...}
을 반복하고 각 반복은 해당 [system.windows.media.colors]
값을 가져옵니다 . 이러한 객체의 기본 #AARRGGBB
문자열은 16 진수 값 형식 의 색상 이므로 스크립트 블록을 사용하여 해당 호출을 문자열로 캡슐화하여이를 활용합니다 "$(...)"
. 우리는 알파 값 또는 해시를하지 않기 때문에 그러나, 우리는 백 엔드 걸릴 [3..8]
에 문자열의 및 필요 -join
그 결과 char
문자열로 -array 다시. 그런 다음 Sort-Object
올바른 순서로 배치하는 것이 간단 합니다.