내 방식대로 색을 읽다


16

모든 시스템이 RGBA 공간에서 말하는 경우에도 시스템마다 색상을 설명하는 방법이 다릅니다. CSS에 익숙한 프론트 엔드 개발자가 선호 할 수 있습니다 #RRGGBBAA. 그러나 안드로이드 개발자는 선호 할 수 있습니다 #AARRGGBB. AAS 파일 형식을 처리 할 때 #AABBGGRR필요합니다. 너무 혼란 스럽습니다. 다른 색상 형식으로 변환 할 수있는 프로그램이 필요할 수도 있습니다.

입력:

입력은 세 부분으로 구성됩니다.

  • 변형 될 색상 (예 #1459AC0F:), 날카로운 부호로 #시작하고 8 개의 16 진수가옵니다.
  • 주어진 색상의 형식 (예 : 4 개의 다른 그룹에 해당하는 8 개의 문자로 #RRGGBBAA시작하는 문자열) #이며 각 그룹은 RR/ GG/ BB/ 중 하나입니다 AA.
  • 변환 할 형식입니다.

산출:

  • 색상을 변환 된 형식으로 출력

테스트 사례 :

Color, OriginalFormat, TargetFormat -> Result
#12345678, #RRGGBBAA, #AARRGGBB -> #78123456
#1A2B3C4D, #RRGGBBAA, #AABBGGRR -> #4D3C2B1A
#DEADBEEF, #AARRGGBB, #GGBBAARR -> #BEEFDEAD

입력 / 출력은 대소 문자를 구분하지 않습니다. 허용되는 방식으로 입력 / 출력 할 수 있습니다.

규칙 :

이것은 코드 골프이며 각 언어의 가장 짧은 (바이트 단위) 코드입니다.


AARRGGBB객관적으로 최고의 색상 형식입니다. 무언가가 24 비트를 기대하고 대신 RRGGBB32 비트를 주면 AARRGGBB상위 바이트를 무시하고 여전히 작동 할 수 있습니다.
12Me21

2
DEADBEEF 색상은 약간 연 어색으로 보입니다.
Magic Octopus Urn

1
나는 수년간 프론트 엔드 웹 개발자였으며 ​​오늘까지 #RRGGBBAA에 대해 들어 본 적이 없으며 더 많은 브라우저가 지원하기를 바랍니다.
DasBeasto

@ 12Me21 그리고 다음 질문은 어떤 엔디안 이 더 낫다는 것입니다.
tsh

답변:


10

APL (Dyalog Unicode) , 6 바이트 SBCS

전체 프로그램. STDIN에 원본, 대상, 색상을 묻는 메시지가 표시됩니다. 결과를 STDOUT에 인쇄합니다.

⍞[⍞⍋⍞]

온라인으로 사용해보십시오!

   원본 확인

⍞⍋ 대상에 대한 프롬프트를 표시하고 원본을 대상으로 만드는 인덱스를 원본으로 찾습니다.

⍞[] 색상을 묻고 위에서 얻은 색인을 사용하여 색상을 재정렬하십시오.


8

자바 스크립트 (ES6), 53 52 바이트

@tsh 덕분에 1 바이트를 절약했습니다.

입력을 3 개의 고유 한 매개 변수로 사용 (Color, From, To)합니다.

(C,F,T)=>T.replace(/\w/g,(x,i)=>C[F.search(x)-~i%2])

온라인으로 사용해보십시오!


(C,F,T)=>T.replace(/\w/g,(x,i)=>C[F.search(x)-~i%2])1 바이트 절약
tsh

@ tsh 좋은 사람. ^^
Arnauld

5

Stax , 8 바이트

ç▼☺↔kàÅJ

실행 및 디버깅

이 프로그램은이 형식으로 입력을받습니다.

"{Color}" "{OriginalFormat}" "{TargetFormat}"

다음은 동일한 프로그램의 주석이 달린 언팩 된 언팩 버전입니다.

u       drop duplicated characters from target format
{       for each character remaining in target format, map using block...
  [     duplicate original format at second position in stack
  |I    get all indices of target character in original format
  xs@   retrieve characters from those indices from the color string
m       perform map
        output implicitly when complete

이것을 실행



4

레티 나 0.8.2 , 33 바이트

(.)(?<=(..).{7}\1\1.*)\1
$2
.*#
#

온라인으로 사용해보십시오! 링크에는 테스트 사례가 포함됩니다. 설명:

(.)(?<=(..).{7}\1\1.*)\1
$2

동일한 문자의 각 쌍에 대해 해당 쌍의 다른 사본을 찾은 다음 그 앞의 9 번째 및 8 번째 문자를 찾아 해당 문자로 바꾸십시오. 이는 대상 형식의 문자 쌍에만 가능하며 원하는 결과로 바꿉니다.

.*#
#

색상 및 소스 형식을 삭제하십시오.


3

하스켈 , 108104100 94 87 바이트

(s,(r@(x,y):z))!c|x==c=(s++[y],z)|(p,q)<-(s,z)!c=(p,r:q)
c%i=fst.(foldl(!)("",zip i c))

온라인으로 사용해보십시오!


구 버전

더 짧은 사용 방법을 찾아 6 바이트를 줄인 Laikoni에게 감사드립니다 lookup!

f(Just x)=x
p('#':z)=p z
p(x:y:z)=[x,y]:p z
p e=[]
c!i=('#':).(f.(`lookup`zip(p i)(p c))=<<).p

온라인으로 사용해보십시오!

설명:

  • p함수는 행간을 무시하여 문자열을 "구문 분석합니다"# 는 2 문자 및 리턴 그룹 (목록)을 .
  • (!)오퍼레이터 입력으로 색과 입력 형식을 취하고 파라미터로서 출력 형식을 취하고, 변환 된 색을 돌려주는 함수를 반환한다. pointfree 버전은 더 짧았지만 더 읽기 쉬운 버전으로 시작했습니다.

f c i o='#':concat[x#zip(p<$>[i,c])|x<-p o]

온라인으로 사용해보십시오!


3

펄 5 -p , 33 32 27 바이트

순서대로 입력 : 대상, 원본, 숫자

#!/usr/bin/perl -p
s%.%$2x/(..)+$&(.){10}/g%eg

온라인으로 사용해보십시오!

입력의 각 문자에 대해 동일한 문자를 찾아 짝수 자리 앞으로 이동 한 다음 10 문자 이상 앞으로 이동하여 해당 문자를 대체 문자로 사용하십시오. 이 단계를 수행 할 수없는 경우 아무것도 대체하지 마십시오.

    +--even-+----10---+   
    |       |         |
#AARRGGBB #RRGGBBAA #12345678
    |    >-will get removed-<
    v
    2

2

05AB1E , 10 바이트

2FI2ô™J}I‡

온라인으로 사용해보십시오!


2F     }   # Loop twice...
  I        # First 2 inputs.
   2ô™     # Title case in pairs of 2.
      J    # Rejoin together.
        I  # Last input (The color).
         ‡ # Transliterate, put color in pattern from a into pattern from b.

입력을 다음에서 변경하기 때문에 작동합니다.

AARRGGBB

에:

AaRrGgBb

따라서 각 값이 고유하게 매핑되면 음역을 사용할 수 있습니다.

인수는 반대로됩니다.


2

Java 10, 179 105102 바이트

(a,b,c)->{var r="#";for(int i=1,t;i<9;)r+=a.substring(t=b.indexOf(c.substring(i,i+=2)),t+2);return r;}

@ OlivierGrégoire 덕분에 무려 -77 바이트 입니다.

설명:

온라인으로 사용해보십시오.

(a,b,c)->{            // Method with String as three parameters and return-type
  var r="#";          //  Result-String, starting at "#"
  for(int i=1,t;i<9;  //  Loop `i` from 1 to 9 (exclusive)
    r+=               //   Append the result with:
       a.substring(   //    A substring from the first input,
        t=b.indexOf(  //    where an index is determined in the second input
           c.substring(i,i+=2)),t+2);
                      //    based on a substring of the third input
    return r;}        //  Return the result-String

1
105 bytes 소스 형식에서 대상 요소를 찾아 대상에서 문자열을 작성합니다.
Olivier Grégoire

@ OlivierGrégoire 나는 그 성가신지도없이 가능하다는 것을 알고있었습니다. 고마워 -74 바이트 바로 거기!
케빈 크루이 센

이제 TIO에서 지원되는 Java 10으로 전환하여 102 바이트 .
Olivier Grégoire


1

CJam, 14 바이트

{'#\1f>2f/~er}

온라인으로 사용해보십시오!

입력은 역순으로 배열입니다.

{
 `#\      e# Push '#'+[input array] on to stack
  1f>     e# Remove the '#' symbol from each input string
  2f/     e# Split each input string into an array of substrings of length 2.
  ~       e# Dump the substring-arrays from the container array onto the stack
  er      e# Perform a string replace operation
}     

0

파이썬 2, 62 바이트

lambda c,s,e:[c[s.index(e[i]):][:2]for i in range(1,len(e),2)]

0

SmileBASIC, 144 바이트

DEF R C,I,O
C[0]="&H
A=R+G+B
RGBREAD VAL(C)OUT VAR(I[1]),VAR(I[3]),VAR(I[5]),VAR(I[7])?"#";RGB(VAR(O[1]),VAR(O[3]),VAR(O[5]),VAR(O[7]))END




0

C (클랑) , 89 바이트

char *a,b[10],*i,*o;f(x,y){*b=*a;for(x=1;x<8;b[x++]=a[y=index(i,o[x])-i],b[x++]=a[y+1]);}

온라인으로 사용해보십시오!

입력 값을 a형식으로 입력 i및 형식으로 입력합니다 o. 에 값을 반환b

작은 치트 : b바이트 저장을 위해 인쇄하는 대신 결과 저장. 질문은 그것을 허용하지 않습니다.

C (클랑) , 100 바이트

char *a,b[10],*i,*o;f(x,y){*b=*a;for(x=1;x<8;b[x]=a[y=index(i,o[x])-i],b[x+1]=a[y+1],x+=2);puts(b);}

온라인으로 사용해보십시오!

C (gcc) , 181 바이트

char *a,*i,*o;c[4],x,y,z;g(x){x=x==82?0:x==71?1:x==66?2:3;}f(){a++;for(;z<2;z++){i=(z?o:i)+1;for(y=0;y<7;z?printf("%s%2X","#"+!!y,c[g(i[y])]):sscanf(a+y,"%2X",&c[g(i[y])]),y+=2);}}

온라인으로 사용해보십시오!

format을 기준으로 배열 로 RGBA값을 만든 다음 형식으로 인쇄 합니다. c[]io


제안 char*a,b[10],*i,*o;f(x)대신 char *a,b[10],*i,*o;f(x,y)하고 x+=2)bcopy(a+(long)index(i,o[x])-i,b+x,2);대신b[x++]=a[y=index(i,o[x])-i],b[x++]=a[y+1]);
ceilingcat

0

클로저 1.8, 156 바이트

(fn[c o t](reduce #(str %(val %2))""(sort-by key(reduce-kv #(let[s(clojure.string/index-of t(nth o %2))](assoc %(if(contains? % s)(inc s)s)%3)){}(vec c)))))

언 골프

  (fn [c o t]
    (reduce
     #(str % (val %2))
     ""
     (sort-by key
              (reduce-kv
               #(let [s (clojure.string/index-of t (nth o %2))]
                  (assoc %
                         (if (contains? % s) (inc s) s)
                         %3))
               {}
               (vec c)))))

온라인으로 사용해보십시오 Clojure 1.8을 지원하지 않습니다. 아주 이상한!


0

펄 6 , 55 51 46 바이트

{[~] %(@^b Z=>@^a){@^c}}o*.map(*.comb(/\w?./))

온라인으로 사용해보십시오!

(컬러, 원본, 대상) 목록을 입력으로 사용합니다. 각 입력 문자열을 구성 요소로 분할하고 색상 값에 대한 해시 맵핑 소스 키를 작성하고 대상 키 순서로 색상 값을 찾은 다음 결과의 형식을 지정합니다.

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