อ่านสีในแบบของฉัน


16

ระบบที่ต่างกันมีวิธีการอธิบายสีที่ต่างกันแม้ว่าทุกคนกำลังพูดในพื้นที่ RGBA นักพัฒนา front-end ที่มีความคุ้นเคยกับ CSS #RRGGBBAAอาจจะชอบ แต่นักพัฒนา Android #AARRGGBBอาจต้องการ เมื่อจัดการรูปแบบไฟล์ AAS #AABBGGRRจำเป็นต้องมี มันสับสนเกินไป บางทีเราต้องการโปรแกรมที่สามารถแปลงระหว่างรูปแบบสีต่างๆ

การป้อนข้อมูล:

อินพุตประกอบด้วย 3 ส่วน:

  • สีที่ต้องการแปลง (เช่น#1459AC0F) สตริงที่ขึ้นต้นด้วยเครื่องหมายคม#ตามด้วยเลขฐานสิบหก 8 หลัก
  • รูปแบบของสีที่กำหนด (เช่น#RRGGBBAA) สตริงที่เริ่มต้นด้วย#ผู้ติดตาม 8 ตัวอักษรซึ่งตกอยู่ใน 4 กลุ่มที่แตกต่างกันและแต่ละกลุ่มเป็นหนึ่งRR/ GG/ /BBAA
  • รูปแบบที่จะแปลงเป็น

เอาท์พุท:

  • เอาท์พุทสีในรูปแบบที่แปลงแล้ว

กรณีทดสอบ:

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

อินพุต / เอาต์พุตไม่คำนึงถึงขนาดตัวพิมพ์ คุณสามารถอินพุต / เอาต์พุตในลักษณะที่ยอมรับได้

กฎ:

นี่คือรหัสกอล์ฟสั้นที่สุด (เป็นไบต์) รหัสของแต่ละภาษาที่ชนะ


AARRGGBBเป็นรูปแบบสีที่ดีที่สุด หากสิ่งที่คาดหวัง 24 บิตRRGGBBและคุณให้ 32 บิตAARRGGBBแทนก็สามารถละเว้นไบต์บนและยังคงทำงาน
12Me21

2
DEADBEEF สีดูคล้ายแซลมอน -y เล็กน้อย
Magic Octopus Urn

1
ฉันเป็นผู้พัฒนาเว็บส่วนหน้ามาหลายปีแล้วและฉันไม่เคยได้ยิน #RRGGBBAA มาจนถึงทุกวันนี้ขอให้มีเบราว์เซอร์ที่รองรับเพิ่มเติม
DasBeasto

@ 12Me21 และคำถามต่อไปคือข้อใดที่endiannessดีกว่า
tsh

คำตอบ:


10

APL (Dyalog Unicode) , 6 ไบต์SBCS

โปรแกรมเต็มรูปแบบ พร้อมท์บน STDIN สำหรับต้นฉบับแล้วกำหนดเป้าหมายจากนั้นเลือกสี พิมพ์ผลลัพธ์ไปที่ STDOUT

⍞[⍞⍋⍞]

ลองออนไลน์!

   พรอมต์สำหรับต้นฉบับ

⍞⍋ แจ้งให้เป้าหมายและค้นหาดัชนีเป็นต้นฉบับที่จะทำให้เป็นต้นฉบับเป็นเป้าหมาย

⍞[... ] แจ้งสำหรับ Color และใช้ดัชนีที่ได้รับข้างต้นเพื่อจัดลำดับสีใหม่


8

JavaScript (ES6), 53 52 ไบต์

บันทึก 1 ไบต์ขอบคุณ @tsh

จะเข้าเป็น 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])บันทึกหนึ่งไบต์
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

Haskell , 108 104 100 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))

ลองออนไลน์!


เวอร์ชั่นเก่า

ขอบคุณ Laikoni ที่ย่อขนาด 6 ไบต์ด้วยการค้นหาวิธีใช้ที่สั้นลง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 ตัวอักษร
  • (!)ผู้ประกอบการจะใช้เวลาเป็น input สีและรูปแบบการป้อนข้อมูลและส่งกลับฟังก์ชั่นที่ใช้เป็นพารามิเตอร์รูปแบบการออกและส่งกลับสีแปลง ปรากฎว่ารุ่น pointfree นั้นสั้นกว่า แต่ฉันเริ่มด้วยรุ่นที่อ่านได้มากขึ้น:

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

ลองออนไลน์!


3

Perl 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 105 102 ไบต์

(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;}

มหันต์ -77 ไบต์ขอบคุณที่@ OlivierGrégoire

คำอธิบาย:

ลองออนไลน์

(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 ไบต์สร้างสตริงจากเป้าหมายโดยการค้นหาองค์ประกอบเป้าหมายในรูปแบบของแหล่งที่มา
Olivier Grégoire

@ OlivierGrégoireฉันรู้ว่ามันจะเป็นไปได้หากไม่มีแผนที่ที่น่ารำคาญ ขอบคุณมาก ๆ -74 ไบท์นั่น!
Kevin Cruijssen

102 ไบต์โดยสลับไปใช้ Java 10 ซึ่งขณะนี้รองรับ TIO แล้ว
Olivier Grégoire

2

J , 5 ไบต์

/:i./

อาร์กิวเมนต์ซ้ายคือสี อาร์กิวเมนต์ที่ถูกต้องคือเมทริกซ์อักขระโดยที่แถวแรกเป็นรูปแบบเป้าหมายและแถวที่สองเป็นรูปแบบดั้งเดิม ลองออนไลน์!


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

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

Minor cheat: เก็บผลลัพธ์ไว้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);}}

ลองออนไลน์!

สร้างRGBAค่าในc[]อาร์เรย์ตามรูปแบบiจากนั้นพิมพ์ในoรูปแบบ


แนะนำ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

Clojure 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)))))

Ungolfed

  (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

Perl 6 , 55 51 46 ไบต์

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

ลองออนไลน์!

ใช้รายการ (สีต้นฉบับเป้าหมาย) เป็นอินพุต แบ่งแต่ละอินพุตสตริงออกเป็นส่วนประกอบสร้างคีย์ซอร์สการแม็พ Hash เป็นค่าสีค้นหาค่าสีตามลำดับคีย์เป้าหมายจากนั้นจัดรูปแบบผลลัพธ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.