HTML 색상 출력 형식 ( RRGGBB)으로 16 개

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]]

마지막 두 항목은 80FF를 모두 포함하는 조합에 해당 하므로 무시해야합니다.

»Ṫ¦209 세 부분으로 구성됩니다.

  • (tail)은 코드 포인트의 마지막 배열, 즉 [17, 145, 0]을 제거 합니다.

  • »209파워 셋의 나머지 각 정수의 최대 소요 0xD1 209 = 그들 모두 교체 209 .

  • ¦(스파 스)는 나머지 전원 세트의 요소를 반복합니다. 해당 인덱스가 [17, 145, 0] 에서 발견되면 요소는 모두 209 로 바뀝니다 . 그렇지 않으면 그대로 유지됩니다.

    ¦모듈 식이 아니므로 나머지 전원 세트의 마지막 배열 (인덱스 0 ) 만 수정합니다 . 인덱스 17145 가 너무 커서 효과가 없습니다.

결과는 다음과 같습니다.

[[], [17], [145], [0], [17, 145], [17, 0], [209, 209]]

ṗ€3 각 배열의 세 번째 카테 시안 거듭 제곱, 즉 각 배열의 모든 3 개의 튜플 요소 배열을 계산합니다.

Fd⁴결과를 평탄화하고 각 정수의 몫과 나머지를 16 으로 나눈 값을 계산합니다 .

ịØH인덱스 (1 기반)를 “0123456789ABCDEF에 색인화 하므로 0x11 , 0x91 , 0x000xD1“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일부 엑스트라를 따라가). 엑스트라는 F8문자 가 모두 포함되어 있습니다 .
  • 중괄호 확장의 결과는 공백으로 구분 된 단일 행입니다. fmt각 항목을 자체 줄에 넣습니다.
  • 식의 첫 번째 줄이 해당 줄에 sed삽입 C0C0C0됩니다
  • sed표현식 의 두 번째 줄은 위에서 설명한 “extras”를 걸러냅니다.

Ideone .


답변

젤리 , 38 31 바이트

“mạ9ṣṃwɠƁ,¡ẓw’b4µża1$ị“08CF”s3Y

TryItOnline!

숫자 ( “...’) 의 기본 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올바른 순서로 배치하는 것이 간단 합니다.


답변

Pyth- 64 48 44 바이트

매우 간단한 기본 압축.

jcs@L"FC80"jC"ÿÿûÿ¿û¿ðÿ¿»¿»·wðð\0ð\0"4 6

여기에서 온라인으로 사용해보십시오 .