সিএসএস কালার গল্ফ!


25

আপনি একজন ওয়েব বিকাশকারী এবং আপনার বস কোম্পানির ওয়েবসাইট আপডেট করার সিদ্ধান্ত নিয়েছেন। তিনি সিদ্ধান্ত নিয়েছেন যে কম রঙ আরও ভাল তবে তিনি সাইটটি একইরকম দেখতে চান। আপনি ন্যায়সঙ্গতভাবে সিদ্ধান্ত নিন যে তিনি কী বিষয়ে কথা বলছেন তার কোনও ধারণা নেই, তবে আপনি যেভাবেই বিরক্ত হয়ে যাচ্ছেন তাই আপনি চেষ্টা করে যাচ্ছেন। যেহেতু সংস্থার হাজার হাজার ওয়েবপেজ রয়েছে এবং প্রত্যেকের নিজস্ব সিএসএস রয়েছে, তাই প্রয়োজনীয় পরিবর্তনগুলি করার জন্য আপনি কোনও স্ক্রিপ্ট লেখার সিদ্ধান্ত নেন। পার্সিং এইচটিএমএল প্রয়োজন নেই।

সমস্ত পৃষ্ঠা বর্তমানে rgb(255,0,0)রঙের জন্য একটি স্ট্রিং ব্যবহার করে । সিএসএস বর্ণের অ্যাট্রিবিউটের আরজিবি মানগুলিকে উপস্থাপন করে এমন তিনটি দশমিক মান দেওয়া (সেই ক্রমে), সেই রঙের সংক্ষিপ্ততম স্ট্রিং প্রতিনিধিত্বটি ফিরিয়ে দিন বা মুদ্রণ করুন, যেমন এটি সিএসএসের মতো ব্যবহারযোগ্য color:<your-result-here>;

বৈধ সিএসএস বর্ণের কীওয়ার্ডগুলির একটি সম্পূর্ণ সারণী এখানে । এগুলি কেস-সংবেদনশীল।

উদাহরণ:

নোট করুন যে রঙগুলি 12 বা 24 বিট দিয়ে সংজ্ঞায়িত করা যায়। প্যাটার্নটির #ABCএকটি সংক্ষিপ্ত সংস্করণ #AABBCCচক নরিস একটি রঙ

আপনার প্রোগ্রামটি কেবল 3 টি পূর্ণসংখ্যার মধ্যে নেবে, একটি স্ট্রিং নয় ( পরে উল্লিখিত "বোনাস" ব্যতীত )।

0, 0, 0         ->  #000        (same as #000000, but shorter)
255, 0, 0       ->  red
0, 128, 128     ->  TEAL
139, 0, 0       ->  DarkRed     (OR #8B0000)
72, 61, 139     ->  #483D8B
255, 255, 254   ->  #fffffe
255, 85, 255    ->  #f5f        (same as #ff55ff, but shorter)

স্কোরিং / বিধি

  • সবচেয়ে কম কোড জয়!
  • বিল্ট-ইনগুলি ব্যতীত স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়
  • আপনি যদি কোনও * বৈধ রঙ নির্বাচনকারী এবং স্বল্পতম আউটপুট গ্রহণ করেন তবে -50% বাইট (বোনাসটি গোল হয়ে যায়) । সুতরাং DarkSlateBlueআউটপুট #483D8B, #F00আউটপুট red, ইত্যাদি হবে
    • * এটিতে কেবল আরজিবি, হেক্স কোড এবং নাম অন্তর্ভুক্ত রয়েছে।
    • মনে রাখবেন যে কয়েকটি রঙের এক্স 11 (যেমন: এর কারণে বিকল্প নাম রয়েছে)Fuchsia এবং এবং Magentaবা Cyanএবং Aqua) এর । বিকল্প নামগুলি ডাব্লু 3 মান অনুসারে সিএসএস বর্ণের কীওয়ার্ডগুলির লিঙ্কযুক্ত তালিকায় অন্তর্ভুক্ত রয়েছে।
  • CSS3 টিউরিং সম্পূর্ণ । এটি একটি অনুগ্রহ মূল্যবান হবে।

সম্পাদনা:

  • দয়া করে পরীক্ষার ক্ষেত্রে আপনার কোড চালান!

এখানে একটি সম্পর্কিত প্রশ্ন এখানে রয়েছে: কোডগল্ফ.স্ট্যাকেক্সেক্সঞ্জ
rgb-


-50% বোনাস স্কোর করতে ইচ্ছুক একটি উত্তরকেও এইচএসএল (...) পার্স করা দরকার? Rgba (...) এবং hsla (...) সম্পর্কে কী? :)
টিমউই

সিএসএসের বর্ণগুলিতে এই লিঙ্ক অনুসারে, সাদা # 000000। তুমি কীভাবে এলে #000? এবং যদি 6 টিরও কম সংখ্যার অনুমতি দেওয়া হয় তবে কেন নয় #0? w3schools.com/cssref/css_colors.asp , সিএসএস
ডেভিডসি

2
@DavidCarraher দেখুন stackoverflow.com/q/8318911/791604 একটি মধ্যে গভীরতা ব্যাখ্যা জন্য। আমি উত্তর এখানে আসলে অনেক সন্দেহ হবে না ব্রাউজারেই উপলব্ধ নমনীয় বাস্তবায়ন দ্বারা যাচ্ছে ন্যূনতম রং outputting (কিন্তু হয় এখানে প্রশ্ন দেওয়া বৈশিষ্ট দ্বারা যাচ্ছে ন্যূনতম রং outputting)।
ড্যানিয়েল ওয়াগনার

উত্তর:


5

পার্ল, 212 - 50% = 106 বাইট

use aliased Graphics::ColorNames,G;sub c{tie%c,G,CSS;$_=pop;$c={reverse%c}->{$_=sprintf'%02x'x(@0=/(\d+, ?)((?1))(\d+)/)||$c{s/#(.)(.)(.)$|#/\1\1\2\2\3\3/r},@0};s/(.)\1(.)\2(.)\3|/#\1\2\3/;y///c>length$c&&$c||$_}

নতুন লাইনের সাথে যুক্ত:

use aliased Graphics::ColorNames,G;
sub c{
  tie%c,G,CSS;$_=pop;
  $c={reverse%c}->{
    $_=sprintf'%02x'x(@0=/(\d+, ?)((?1))(\d+)/)||$c{s/#(.)(.)(.)$|#/\1\1\2\2\3\3/r},@0
  };
  s/(.)\1(.)\2(.)\3|/#\1\2\3/;
  y///c>length$c&&$c||$_
}

পরীক্ষার মামলা

use feature say;

say c '#f00';
say c '#FF0000';
say c '#112233';
say c '#f0ffff';
say c 'azure';
say c 'DARKSLATEBLUE';
say c 'rgb(255, 127, 80)';
say c 'rgb(255, 255, 254)';
say c 'rgb(255,228,196)';

আউটপুট

red
red
#123
azure
azure
#483d8b
coral
#fffffe
bisque

পার্ল, কোনও বোনাস নেই, 144 বাইট

use aliased Graphics::ColorNames,G;sub c{tie%c,G,CSS;$c={reverse%c}->{$_=sprintf'%02x'x3,@_};s/(.)\1(.)\2(.)\3|/#\1\2\3/;y///c>length$c&&$c||$_}

নতুন লাইনের সাথে যুক্ত:

use aliased Graphics::ColorNames,G;
sub c{
  tie%c,G,CSS;
  $c={reverse%c}->{
    $_=sprintf'%02x'x3,@_
  };
  s/(.)\1(.)\2(.)\3|/#\1\2\3/;
  y///c>length$c&&$c||$_
}

Graphics::ColorNames মূল মডিউল নয়, তবে এটি ২০০১ সাল থেকে প্রায় হয়েছে You আপনাকে এটির মাধ্যমে এটি ইনস্টল করতে হতে পারে:

cpan install Graphics::ColorNames
cpan install Graphics::ColorNames::CSS

রঙের নামের একই দৈর্ঘ্য থাকলে হেক্স উপস্থাপনাটিকে অগ্রাধিকার দেওয়া হয়।


পরীক্ষার মামলা

use feature say;

say c 0, 0, 0;
say c 255, 0, 0;
say c 0, 128, 128;
say c 139, 0, 0;
say c 72, 61, 139;
say c 255, 255, 254;
say c 255, 85, 255;

আউটপুট

#000
red
teal
#8b0000
#483d8b
#fffffe
#f5f

টাইয়ের জন্য আপনি কি 4 বাইট কেটে ফেলতে পারেন?
mbomb007

@ mbomb007 আসলে 6 বাইট।
primo

আমি কি আরও 4 শুনছি? এই প্রতিযোগিতা শক্ত।
mbomb007

1
@ mbomb007 বাড়ান।
primo

10

সি # 6 527 বাইট / 2 বোনাস = 264

সম্পাদনা: বুট! আমি অবশেষে বুনাস উত্তর পেয়েছি বেসিক উত্তরের চেয়ে কম স্কোর দিয়ে!

আমি শুধু একটি ফাংশন লিখেছি। এটির জন্য একটি usingবিবৃতি প্রয়োজন (অন্তর্ভুক্ত))

সি # এর সাথে কাজ করার জন্য পরিচিত রঙগুলির একটি দুর্দান্ত তালিকা রয়েছে তবে এটি আলফা চ্যানেলটি অন্তর্ভুক্ত করার জন্য জোর দেয়। পরিচিত রঙগুলিতে সমস্ত সিস্টেমের রঙও অন্তর্ভুক্ত থাকে যার মধ্যে দুটির নাম characters টির চেয়ে কম লম্বা থাকে, সুতরাং এগুলি ছিটানো দরকার।

এখানে বোনাস সমাধান, সমর্থনকারী ফর্ম্যাটগুলি যেমন:

  • 12, 34, 56
  • #123
  • #123456
  • DarkSlateBlue

সম্পূর্ণ গল্ফড:

using System.Drawing;int H(string s,int i,int l)=>Convert.ToInt32(s.Substring(i*l+1,l),16)*(l<2?17:1);string D(string a){int i=17,j=a.Length/3,n;var d=a.Split(',');Color k,c=a[0]<36?Color.FromArgb(H(a,0,j),H(a,1,j),H(a,2,j)):Color.FromName(a);c=c.A>0?c:Color.FromArgb(int.Parse(d[0]),int.Parse(d[1]),int.Parse(d[2]));j=c.R%i+c.G%i+c.B%i<1?3:6;n=c.ToArgb();a="#"+(j<6?c.R/i<<8|c.G/i<<4|c.B/i:n&0xffffff).ToString("x"+j);for(i=26;i++<167;k=Color.FromKnownColor((KnownColor)i),a=n==k.ToArgb()&k.Name.Length<=j?k.Name:a);return a;}

স্বচ্ছতার জন্য ইন্ডেন্টেশন এবং নতুন লাইন:

using System.Drawing;
int H(string s,int i,int l)=>Convert.ToInt32(s.Substring(i*l+1,l),16)*(l<2?17:1);
string C(string a){
    int i=17,j=a.Length/3,n;
    var d=a.Split(',');
    Color k,c=a[0]<36
        ?Color.FromArgb(H(a,0,j),H(a,1,j),H(a,2,j))
        :Color.FromName(a);
    c=c.A>0?c:Color.FromArgb(int.Parse(d[0]),int.Parse(d[1]),int.Parse(d[2]));
    j=c.R%i+c.G%i+c.B%i<1?3:6;
    n=c.ToArgb();
    a="#"+(j<6?c.R/i<<8|c.G/i<<4|c.B/i:n&0xffffff).ToString("x"+j);
    for(i=26;i++<167;
        k=Color.FromKnownColor((KnownColor)i),
        a=n==k.ToArgb()&k.Name.Length<=j?k.Name:a
    );
    return a;
}

সি #, 265 বাইট

এখানে মূল সমাধান।

using System.Drawing;string C(int r,int g,int b){int i=17,c=r<<16|g<<8|b,j=r%i+g%i+b%i<1?3:6;var o="#"+(j<6?r/i<<8|g/i<<4|b/i:c).ToString("x"+j);for(i=26;i++<167;){var k=Color.FromKnownColor((KnownColor)i);o=c<<8==k.ToArgb()<<8&k.Name.Length<=j?k.Name:o;}return o;}

স্বচ্ছতার জন্য ইন্ডেন্টেশন এবং নতুন লাইন:

using System.Drawing;

string C(int r,int g,int b){
    int i=17,
        c=r<<16|g<<8|b,
        j=r%i+g%i+b%i<1?3:6;
    var o="#"+(j<6?r/i<<8|g/i<<4|b/i:c).ToString("x"+j);
    for(i=26;i++<167;){
        var k=Color.FromKnownColor((KnownColor)i);
        o=c<<8==k.ToArgb()<<8&k.Name.Length<=j?k.Name:o;
    }
    return o;
}

@ mbomb007: কোডটি আমার পক্ষে কাজ করে।
রাজনগুল

8

গণিত 207 242 500-250 = 250 বাইট

হালনাগাদ:
এটি আরজিবি ট্রিপল, রঙের নাম, বা হেক্স নম্বর সমন্বিত ইনপুটগুলির সাথে কাজ করে।

(12 বিট) রঙ-গভীরতার আউটপুট এখন সুন্দর কাজ করে, কালার বিট গভীরতা হ্রাস সম্পর্কে একটি নিবন্ধের জন্য ধন্যবাদ । মূল ধারণাটি হ'ল, যদি কোনও আরজিবি ট্রিপল {r, g, b}, যেখানে r, g এবং b 0-255 এর মধ্যে থাকে, (যেমন হেক্স 00-এফএফ) লোকসান ছাড়াই একটি সংখ্যা হিসাবে প্রতিনিধিত্ব করা যেতে পারে 0-15-এর পরিসীমা (অর্থাৎ 0-চ), তারপরে কেউ 6 সংখ্যার পরিবর্তে 3 ডিজিটের হেক্স নম্বর ব্যবহার করতে পারে। দেখা যাচ্ছে যে যখনই 17 (অর্থাৎ 255/15) আর, জি এবং বি বিভক্ত হবে তখনই এটি ঘটবে।

কেবল অন্তর্নির্মিত ফাংশন ব্যবহার করা হয়। আরজিবি ট্রিপল সহ এইচটিএমএল রঙের নাম প্রতিস্থাপনের জন্য গণিতের বিধি রয়েছে। উদাহরণস্বরূপ, একটি নিয়ম "Teal"-> RGBColor[0, 128, 128]। যখন এই জাতীয় বিধিগুলি উল্টানো হয়, আরজিবি মানগুলি (পরিসীমাতে পুনরুদ্ধার, {0, 255}) রঙের নামের সাথে প্রতিস্থাপন করা যেতে পারে।

q=ColorData["HTML","ColorRules"];
j=q/.{(c_ -> RGBColor[r_,g_,b_]):> (Floor[255{r,g,b}]-> c)};
k=Reverse/@j;
v@l_:=And@@IntegerQ/@(l/17);
y@l_:=If[v@l,l/17,l];
h@l_:="#"<>(IntegerString[#,16,If[v@l,1,2]]&/@y@l)
o@h_:=Module[{c=(StringLength[h1=StringDrop[h,1]]==6)},FromDigits[#,16]&/@StringPartition[h1,If[c,2,1]]*If[c,1,17]]
u@l_:=ToString[l/.j]
m@s_:=s/.q/.RGBColor[r_,g_,b_]:>Floor[255{r,g,b}]
f@n_:=SortBy[{u@n,h@n},StringLength][[1]]
z@d_:= (If[StringQ@d,If[StringTake[d,1]=="#",e=o@d,e=m@d],e=d];f@e)

উদাহরণ

z /@ {{0, 0, 0}, {255, 0, 0}, {0, 128, 128}, {139, 0, 0}, {255, 255, 
   255}, {72, 61, 139}, {255, 255, 254}, {255, 85, 255}}

# "# 000", "লাল", "টিল", "# 8b0000", "# এফএফএফ", "# 483 ডি 8 বি", "# ফ্যাফফি", "# f5f"


z /@ {"Red", "DarkSlateBlue", "Teal", "Black"}

Red "লাল", "# 483c8b", "টিল", "# 000"}


z /@ {"#000", "#f00", "#008080", "#8b0000", "#fff", "#483d8b", "#fffffe", "#f5f"}

# "# 000", "লাল", "টিল", "# 8b0000", "# এফএফএফ", "# 483 ডি 8 বি", "# ফিফফি", # "# f5f"


মন্তব্য করা হয়েছে, অবহেলিত কোড

(* রঙের নামকে রঙের সাথে পরিবর্তন করার জন্য নিয়ম করে, উদাহরণস্বরূপ RGBColor{255,17,0}

q=ColorData["HTML","ColorRules"];

(* বিদ্যমান রঙের নামের সাথে 3 টি পূর্ণসংখ্যার একটি তালিকা প্রতিস্থাপনের জন্য বিধি বিধান এবং একই বিধিগুলি বিপরীত। *)

rulesListsToColorNames=(q)/.{(c_ -> RGBColor[r_,g_,b_]):> (Floor[255{r,g,b}]-> c)};

rulesColorsToLists=Reverse/@rulesListsToColorNames;

(* কোনও 24 বিট হেক্স রঙকে কোনও ক্ষতি ছাড়াই 12 বিট রঙ হিসাবে উপস্থাপন করা যায় কিনা তা পরীক্ষা করে reducethe 24 বিট এক্সপ্রেশনটিকে 12 বিট এক্সপ্রেশনে পরিবর্তন করতে পারে *)

depthReducible[l_List]:=And@@IntegerQ/@(l/17);
reduce[l_List]:=If[depthReducible@l,l/17,l];

(* আরজিবি তালিকাটি হেক্স নম্বরে পরিবর্তিত হয়েছে *)

fromListToHex[l_List]:="#"<>(IntegerString[#,16,If[depthReducible@l,1,2]]&/@reduce[l])

(* হেক্স নম্বরটি আরজিবি তালিকায় পরিবর্তিত হয়েছে *)

fromHexToList[h_String]:=Module[{c=(StringLength[h1=StringDrop[h,1]]==6)},
FromDigits[#,16]&/@StringPartition[h1,If[c,2,1]]*If[c,1,17]
]

(* আরও রূপান্তর *)

fromListToColorName[l_List]:=ToString[l/.rulesListsToColorNames]
fromColorNameToHex[s_String]:=fromListToHex[s/.rulesColorsToLists]
fromColorNameToList[s_String]:=s/.q/.RGBColor[r_,g_,b_]:>Floor[255{r,g,b}]

(* একটি রঙের সবচেয়ে সংক্ষিপ্ত বৈধ সিএসএস এক্সপ্রেশন বেছে নিয়েছে *)

f@n_List:=SortBy[{fromListToColorName[n],fromListToHex[n]},StringLength][[1]]

(* কোনও ইনপুট একটি আরজিবি তালিকায় রূপান্তর করে এবং কল করে f *)

returnShortestColor[d_]:= 
 (If[StringQ[d],
   If[StringTake[d,1]=="#",
     e=fromHexToList@d,
     e=fromColorNameToList@d],
   e=d];
f@e)

বেজ 10 তে 255 কি FFবেস 16 এ সমান নয় ? সুতরাং যে করা উচিত #FFFFFF, যা হোয়াইট চেয়ে দীর্ঘ। আমি #000অসাধারণ খুঁজে পেয়েছি তবে সিএসএসের স্নিগ্ধতার বিষয়টি সুনিশ্চিত হবে।
ডেভিডসি

3
@ ডেভিডকার্যাহার: সিএসএস রঙগুলি 24 বিট বা 12 বিট হিসাবে নির্দিষ্ট করা যেতে পারে। #FFFহিসাবে একই #FFFFFF(সমস্ত বিট এক) যা হিসাবে একই white। এছাড়াও, #0অবৈধ কারণ এটি 24 বিট বা 12 বিট নয়
স্লাইটব্যাটম্যান

slebetman, স্পষ্টির জন্য ধন্যবাদ, যা @ mbomb007 এর পর্যবেক্ষণের বিষয়টি নিশ্চিত করে।
ডেভিডসি

5

কফিস্ক্রিপ্ট, 411 404 388 384 382/2 = 191

UPD: নিশ্চিত এটি চূড়ান্ত ফলাফল

আশা করি, এটি ব্যবহার করা ঠিক আছে window.document.*rgbফাংশন এবং evalকল পরীক্ষা করুন।

s=(c,rgb=(r,g,b)->(2**24+(r<<16)+(g<<8)+b).toString 16)->d=y=document.body;r=(q=(a)->y.style.color=a;d[b='#'+eval(getComputedStyle(y).color)[1...].replace /(.)\1(.)\2(.)\3/,'$1$2$3']=a;b) c;(d='NavyGreenTealIndigoMaroonPurpleOliveGraySiennaBrownSilverPeruTanOrchidPlumVioletKhakiAzureWheatBeigeSalmonLinenTomatoCoralOrangePinkGoldBisqueSnowIvoryRed'.match /.[a-z]+/g).map(q);d[r]||r

পরীক্ষার ফলাফল

rgb(   0,   0,   0 ) -> #000
rgb( 255,   0,   0 ) -> Red
rgb(   0, 128, 128 ) -> Teal
rgb( 139,   0,   0 ) -> #8b0000
rgb(  72,  61, 139 ) -> #483d8b
rgb( 255, 255, 254 ) -> #fffffe
rgb( 255,  85, 255 ) -> #f5f
darkslateblue        -> #483d8b
indigo               -> Indigo
#f00                 -> Red

মন্তব্য করা কোড

s = ( c,
    rgb = ( r, g, b ) ->
        return ( 2 ** 24 + ( r << 16 ) + ( g << 8 ) + b )
        .toString( 16 )
) ->

এটি কিছু বাইট সংরক্ষণ করবে।

    d = y = document.body

qফাংশন ইনপুট রঙ রাখবে document.body.style.colorএবং হিসাবে সংকলিত রঙ পাবে rgb(...)। এছাড়াও এটি হিসাবে ফলাফলের সংরক্ষণ করবে hexColor:inputColorমধ্যে d। বিজ্ঞপ্তি evalব্যবহার। rgb(100,100,100)তিনটি আর্গুমেন্ট সহ একটি বৈধ জাভাস্ক্রিপ্ট ফাংশন কল। rgbফাংশনটি আর্গুমেন্টগুলিকে একক 24/12 HEX স্বীকৃতিতে (যেমন #fff, #f0f0f0) রূপান্তর করবে ।

    r = (
        q = ( a ) ->
            y.style.color = a
            b = '#' + eval( getComputedStyle( y ).color )[ 1... ].replace( /(.)\1(.)\2(.)\3/, '$1$2$3' )
            d[ b ] = a
            return b
    )( c )

বর্ণের অ্যারেরগুলিতে স্ট্রিলটি বিভক্ত করুন, লকউকিং অবজেক্ট তৈরি করুন।

    ( d = 'NavyGreenTeal...'.match( /.[a-z]+/g )).map( q )

সংক্ষিপ্ততর বৈকল্পিক যদি না হয় তবে HEX ফিরুন d

    return d[ r ] or r

4

স্টাইলাস, 238 234/2 = 117

আরও সিএসএসের মতো সমাধান! স্টাইলাস ইতিমধ্যে রঙ ম্যানিপুলেশন জন্য দুর্দান্ত সমর্থন আছে, তাই কাঙ্ক্ষিত ফাংশন বেশ ছোট এবং খুব গল্ফ হয় না।

f(c){for n in split(' ''navy green teal indigo maroon purple olive gray sienna brown silver peru tan orchid plum violet khaki azure wheat beige salmon linen tomato coral orange pink gold bisque snow ivory red'){lookup(n)==c?c=s(n):c}}

এটি এখানে পরীক্ষা করুন

body
  color f(rgb(0, 0, 0))
  color f(rgb(255, 0, 0))
  color f(rgb(0, 128, 128))
  color f(rgb(139, 0, 0))
  color f(rgb(72, 61, 139))
  color f(rgb(255, 255, 254))
  color f(rgb(255, 85, 255))
  color f(darkslateblue)
  color f(indigo)
  color f(#f00)
  color f(rgba(255,0,0,1))
  color f(rgba(255,0,0,0.5))

পিপিসিজিতে আপনাকে স্বাগতম! এটি সত্যিই দুর্দান্ত সমাধান!
mbomb007

অনেক golfed না । আপনি যদি জিততে চান তবে আরও কিছুটা গল্ফ করার চেষ্টা করুন। কেউ একজন আপনাকে মারছে।
mbomb007

@ mbomb007, ঠিক আছে, কিছুটা গল্ফ করেছে
argh-argh

দেখে মনে হচ্ছে আপনাকে মারধর করা হয়েছে। হতে পারে আপনি ফাঁকা জায়গা ছাড়াই রঙগুলি একসাথে ছড়িয়ে দেওয়ার চেষ্টা করতে পারেন, তবে পাঁচটি অক্ষরে প্যাড করে, তারপর প্রতি পাঁচটি বিভক্ত করে ছাঁটাবেন? নিশ্চিত না যে এটি বাইট সংরক্ষণ করবে?
mbomb007

3

মতলব 617

প্রচুর প্রিপ্রোসেসিং এবং হার্ডকোডিং। রঙিন নামগুলির আপনার ন্যূনতম সেটটি বিবেচনা করতে হবে these খুব খারাপ মাতলাব রঙের নামে তৈরি করে নি = =

function s=f(r,g,b);
t=255;
c=[r,g,b];
a=[0 t t;240 t t;245 245 220;t 228 196;0 0 t;165 42 42;t 127 80;0 t t;t 215 0;75 0 130;t t 240;240 230 140;0 t 0;250 240 230;t 165 0;218 112 214;205 133 63;t 192 203;221 160 221;t 0 0;250 128 114;160 82 45;t 250 250;210 180 140;t 99 71;238 130 238;245 222 179;t t t;t t 0];
s=textscan('aqua azure beige bisque blue brown coral cyan gold indigo ivory khaki lime linen orange orchid peru pink plum red salmon sienna snow tan tomato violet wheat white yellow','%s');
i=find(ismember(a,c,'rows'));
k=1;
if i>0;s=s{1}{i};elseif ~any(mod(c,16));k=16;end;d=dec2hex(c/k,2-(k>1))';s=['#',d(:)']

আপনি r=0;g=16;b=0;সেখানে হার্ডকোড রেখে গেছেন , যদিও এটি আপনার স্কোরতে গণনা করা হয়নি।
হ্যান্ড-ই-ফুড

ওহ, আমি ভুল সংস্করণটি পেস্ট করেছি, আমাকে জানানোর জন্য ধন্যবাদ!
flawr

2

পাইথন 3, 857 795 বাইট

প্রয়োজনীয় সমস্ত গ্রহণযোগ্য রঙের ম্যানুয়ালি নির্দিষ্ট করে রাখার ফলে এটিতে বাইট সংখ্যাটি বৃদ্ধি পেয়েছে: /

c(a)একটি যুক্তি লাগে a, যা আকারে আসে rgb(#,#,#)। এর থেকে, আরজিবি এবং বন্ধনীগুলি সরানো হবে এবং স্ট্রিংটি কমা দ্বারা অ্যারিতে বিভক্ত হবে। c(x,y,z)প্রক্রিয়াতে আরজিবি রঙের 3 টি ইনট, আর, জি এবং বি মান লাগে। আমরা এগুলি একসাথে রেখেছি a। তারপরে আমরা পাইথনের অন্তর্নির্মিত hexফাংশনটি ব্যবহার করি যা একটি বেস 10 নম্বরটিকে আমাদের অ্যারেতে বেস 16 নম্বর রূপান্তর করে এবং একটি হেক্স স্ট্রিং তৈরি করে (এটি forলুপে সম্পন্ন হয় )। ifবিবৃতি মত রং রূপান্তর 000000করতে 000, এবং একটি অভিধান ব্যবহার পরিচিত রং প্রতিস্থাপন করুন।

এটি এখানে ( ;পাইথন সম্পর্কে টিপসটির জন্য @ ভূমিগ্রাউন্ডোরিওরাইলকে ধন্যবাদ ):

def c(x,y,z):
  a=[x,y,z];b="";
  for i in a:
    i=hex(i)[2:]
    if len(i)<2:i="0"+i;
    b+=i
  k={"00ffff":"AQUA","f0ffff":"AZURE","f5f5dc":"BEIGE","ffe4c4":"BISQUE","0000ff":"BLUE","a52a2a":"BROWN","ff7f50":"CORAL","ffd700":"GOLD","808080":"GRAY","008000":"GREEN","4b0082":"INDIGO","fffff0":"IVORY","f0e68c":"KHAKI","00ff00":"LIME","faf0e6":"LINEN","800000":"MAROON","000080":"NAVY","808000":"OLIVE","ffa500":"ORANGE","da70d6":"ORCHID","cd853f":"PERU","ffc0cb":"PINK","dda0dd":"PLUM","800080":"PURPLE","ff0000":"RED","fa8072":"SALMON","a0522d":"SIENNA","c0c0c0":"SILVER","fffafa":"SNOW","d2b48c":"TAN","008080":"TEAL","ff6347":"TOMATO","ee82ee":"VIOLET","f5deb3":"WHEAT","ffff00":"YELLOW"}
  if b[:3]==b[3:]:b=b[:3];
  if b in k:b=k[b];
  else:b="#"+b;
  return b

পুরনো সংস্করণ:

def c(a):
  a=a[4:-1].split(",")
  b=""
  for i in a:
    i=hex(int(i))[2:]
    if len(i)<2:
      i="0"+i
    b+=i
  k = {"00ffff":"AQUA","f0ffff":"AZURE","f5f5dc":"BEIGE","ffe4c4":"BISQUE","0000ff":"BLUE","a52a2a":"BROWN","ff7f50":"CORAL","ffd700":"GOLD","808080":"GRAY","008000":"GREEN","4b0082":"INDIGO","fffff0":"IVORY","f0e68c":"KHAKI","00ff00":"LIME","faf0e6":"LINEN","800000":"MAROON","000080":"NAVY","808000":"OLIVE","ffa500":"ORANGE","da70d6":"ORCHID","cd853f":"PERU","ffc0cb":"PINK","dda0dd":"PLUM","800080":"PURPLE","ff0000":"RED","fa8072":"SALMON","a0522d":"SIENNA","c0c0c0":"SILVER","fffafa":"SNOW","d2b48c":"TAN","008080":"TEAL","ff6347":"TOMATO","ee82ee":"VIOLET","f5deb3":"WHEAT","ffff00":"YELLOW"}
  if b[:3]==b[3:]:
    b=b[:3]
  if b in k:
    b=k[b]
  else:
    b="#"+b
  return "color:"+b+";"

আমি এটিতে বোনাস যুক্ত করব, আমি এখনও জানি না। এটি স্পষ্টতই 50% বাইট বন্ধ দিয়ে করতে পারে!

-Toastrackenigma


2
সাধারণ পাইথন গল্ফিং টিপস: আপনার নতুন লাইনের অনেকগুলি প্রতিস্থাপন করা যায় ;, ইন্ডেন্টেশন সংরক্ষণ করে। উদাহরণস্বরূপ: a=a[4:-1].split(",");b=""। কোন if, else, for, whileশুধুমাত্র এক লাইন দিয়ে, ইত্যাদি ব্লক হিসেবে লেখা যেতে পারে if b in k:b=k[b].finally, আপনি লাইনের মাঝখানে যেমন আপনার হোয়াইটস্পেস অনেকটা হারাতে পারেন k = {> - k={এবং return "color:->return"color:
undergroundmonorail

এছাড়াও, পিপিসি তে :) আপনাকে স্বাগতম
আন্ডারগ্রাউন্ডোমোরিয়েল

2
আক্ষরিক কে বিশাল। সমস্ত রঙের কোডগুলি ছোট হাতের অক্ষরে রয়েছে এবং সমস্ত বর্ণের নাম বড় হাতের অক্ষরে রয়েছে, আপনি কেবল এটি একটি স্ট্রিং হিসাবে লিখতে পারতেন, তারপরে পার্স করুন re.findall()(এছাড়াও এটির প্রয়োজন হবে import re): পেস্টবিন.
com

@undersonmonorail এর জন্য ধন্যবাদ, প্রচুর জায়গা সাশ্রয় করা উচিত: ডি
টোস্ট্রাকেনিগমা

@ এমবিম্ব ২০০7 ঠিক আছে, আপনি আউটপুট বা ইনপুট কীভাবে চেয়েছিলেন তা আমি নিশ্চিতভাবে জানতে পারি না - সেখানে কিছুটা বিভ্রান্তি পেয়েছে: পিআই পরীক্ষার ক্ষেত্রে কোডটি চালিয়েছে যাতে এটি সঠিকভাবে কাজ করে তা নিশ্চিত করার জন্য, আপনি কি আমার ফলাফলগুলি আপলোড করতে চান?
টোস্টরাকেনিগমা

1

জাভাস্ক্রিপ্ট (ES6), 499 611

প্রশ্নটিতে পরীক্ষার কেসগুলি সম্পাদনা করুন

দ্রষ্টব্য: আমি কেবল রঙের নামগুলি রেখেছি যা হেক্স সমতুল্যের চেয়ে কম।

দ্রষ্টব্য 2: এটি অবশ্যই আরও গল্ফ করা যেতে পারে ...

f=(r,g,b,k='#'+(r%17|g%17|b%17?1<<24|r<<16|g<<8|b:4096|(r*256+g*16+b)/17).toString(16).slice(1))=>
("#d2b48cTAN#f00RED#ff7f50CORAL#f5deb3WHEAT#ff6347TOMATO#ffd700GOLD#008000GREEN#faf0e6LINEN#f5f5dcBEIGE#da70d6ORCHID#4b0082INDIGO#ffc0cbPINK#f0e68cKHAKI#008080TEAL#ee82eeVIOLET#dda0ddPLUM#fa8072SALMON#ffa500ORANGE#a0522dSIENNA#800000MAROON#800080PURPLE#ffe4c4BISQUE#f0ffffAZURE#fffff0IVORY#cd853fPERU#808000OLIVE#c0c0c0SILVER#fffafaSNOW#a52a2aBROWN#000080NAVY#808080GRAY"
.match(k+'([A-Z]+)')||[,k])[1]

// TEST
;[[0,0,0,'#000'],[255,0,0,'red'],[0,128,128,'TEAL'],[139,0,0,'#8B0000'],[72,61,139,'#483D8B'],[255,255,254,'#fffffe'],[255,85,255,'#f5f']]
.forEach(([r,g,b,t])=>(x=f(r,g,b),o+=r+','+g+','+b+' -> '+x+' '+(x.toUpperCase()==t.toUpperCase()?'ok':'error('+t+')')+'\n'),o='')
O.innerHTML=o

function go()
{
  var r,g,b
  [r,g,b] = I.value.match(/\d+/g)
  O.innerHTML=r+','+g+','+b+' -> '+f(r,g,b)+'\n'+O.innerHTML
}
R,G,B: <input id=I><button onclick="go()">--></button>
<pre id=O></pre>

কম গল্ফড

f=(r,g,b) => (
   k='#'+(
     r%17|g%17|b%17
     ? 1<<24|r<<16|g<<8|b
     : 4096|r/17<<8|g/17<<4|b/17
    ).toString(16).slice(1),
   s = "#d2b48cTAN#f00RED#ff7f50CORAL#f5deb3WHEAT#ff6347TOMATO#ffd700GOLD#008000GREEN#faf0e6LINEN#f5f5dcBEIGE#da70d6ORCHID#4b0082INDIGO#ffc0cbPINK#f0e68cKHAKI#008080TEAL#ee82eeVIOLET#dda0ddPLUM#fa8072SALMON#ffa500ORANGE#a0522dSIENNA#800000MAROON#800080PURPLE#ffe4c4BISQUE#f0ffffAZURE#fffff0IVORY#cd853fPERU#808000OLIVE#c0c0c0SILVER#fffafaSNOW#a52a2aBROWN#000080NAVY#808080GRAY",
   m = s.match(k+'([A-Z]+)'), // names are upper, hex codes are lower
   (m || [,k])[1] // if no match use the code
)

এই আন্ডারস্কোরগুলি ... আমার গণনা অনুসারে এগুলি ছাড়াই ছোট হবে। শুধু কোডগুলি কোনো সংখ্যা দিয়ে শুরু উদ্ধৃত এবং অন্যদের unquoted রাখবেন: {f00:"red";"008000":"green"}
manatwork

পছন্দ করুন তবে আক্ষরিক বস্তুটি কোড গল্ফের জন্য খুব কমই ভাল পছন্দ। একটি সাধারণ স্ট্রিং আরও ভাল
edc65

সঠিক। আমি ইতিমধ্যে আমাদের তাজা সাইটমেটের কাছে সেই অর্থে একটি মন্তব্য করেছি।
manatwork

1
@ mbomb007 পরীক্ষার কেস যুক্ত হয়েছে। স্নিপেট ক্রোম এ্যাকমাস্ক্রিপ্ট 6 হিসাবে কাজ করবে না এবং Chrome সম্পূর্ণরূপে মেনে চলবে না (এটি বারবার পুনরাবৃত্তি করতে বেশ ক্লান্ত)। ফায়ারফক্সে পরীক্ষা।
edc65
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.