একটি রঙের হিউ


23

আপনাকে একটি রঙের আরজিবি মান দেওয়া হয়। আপনার কাজটি সহজ: সরল সংজ্ঞাতে হিউ গণনা করা।

উচ্চ, মধ্য এবং নিম্নতম মানযুক্ত চ্যানেলগুলি হ'ল এক্স, ওয়াই, জেড (যা লাল, সবুজ বা নীল) এবং তাদের মানগুলি হ'ল এক্স, ওয়াই, জেড। এই রঙের বর্ণটি হ'ল (এইচ (এক্স) -হ (ওয়াই)) * (1 + (এক্সওয়াই) / (এক্সজেড)) / 2 + এইচ (ওয়াই), যেখানে:

h(red) = 0 (or 360 if one of X or Y is blue)
h(green) = 120
h(blue) = 240

ইনপুটটিতে 0 থেকে 255 পর্যন্ত 3 পূর্ণসংখ্যা থাকে যা কোনও সামঞ্জস্যপূর্ণ ক্রমে সমস্ত সমান নয়। আউটপুটটি ভাসমান হতে পারে, বা পূর্ণ বা উপরে বা নীচে বৃত্তাকার বৃত্তাকার হতে পারে, যা সামঞ্জস্যপূর্ণ হতে হবে না। যদি আউটপুটটির পূর্ণসংখ্যার অংশ 0 বা 360 হয় তবে আপনি সেগুলির কোনওটি মুদ্রণ করতে পারেন।

আপনি রঙের স্থান রূপান্তরগুলির জন্য বিল্টিনগুলিতে কল করতে পারবেন না, অন্তর্নিহিত রূপান্তরগুলি সহ যেমন কোনও চিত্র হস্তক্ষেপ করার সময়।

এটি কোড-গল্ফ। সংক্ষিপ্ততম কোড জিতেছে।

উদাহরণ

Input:  0 182 255
Output: 197 (or 198)

Input:  127 247 103
Output: 110

Input:  0 0 1
Output: 240

Input:  255 165 245
Output: 307 (or 306)

সম্পাদন করা

আপনাকে সঠিক সূত্রটি অনুসরণ করতে হবে না, তবে কেবল উপরের সূত্রের মতোই ফলাফল দিতে হবে। আমি সূত্র নিজেই গল্ফ করে কিছু উত্তর দেখতে চাই।


আমাদের কি প্রথমে এসআরজিবি থেকে রৈখিক স্কেলে রূপান্তর করা উচিত? আমি মনে করি আমাদের করা উচিত, তবে এখনও পর্যন্ত কেউ মনে করেনি।
জন ডিভোরাক

@ জানডভোরাক কাজটি হ'ল সহজ সংজ্ঞা অনুসারে গণনা করা । এই ক্ষেত্রে, "সরলতম" এর অর্থ আপনার অনুমান করা উচিত ইনপুটটি ইতিমধ্যে সঠিক স্কেলে রয়েছে এবং প্রশ্নে বা ঠিক একই ফলাফল দেয় এমন কিছু দেওয়া সূত্র ব্যবহার করুন।
জিমি 23013

তবে ... 24 বিপিপি এর অর্থ সাধারণত এসআরজিবি। যদি তা না হয় তবে ফর্ম্যাট স্পেসিফিকেশন (আপনার) অন্যথায় নির্দিষ্ট করা উচিত।
জন ডিভোরাক

@ জনডভোরাক আপনার এই সংজ্ঞাটি আরজিবি এবং হিউয়ের জন্য ব্যবহার করা উচিত ।
জিমি 23013

9
এটা বলতে হবে: হু হুয়েউ।
TheDoctor

উত্তর:


6

পাইথ, 27 বাইট

*60%+c-Ft.<QJxQKeSQ-KhSQyJ6

প্রদর্শন. পরীক্ষার জোতা।

ফোকুলা উইকিপিডিয়া থেকে নেওয়া ।

মূলত, পদক্ষেপগুলি হ'ল:

  1. .<QJxQKeSQ: তালিকার সামনের দিকে বৃহত্তম মানটি ঘোরান।
  2. -Ft: অন্যান্য দুটি মানের পার্থক্য নিন।
  3. -KhSQ: সর্বাধিক মান থেকে সর্বনিম্ন মানকে বিয়োগ করুন।
  4. c: 2 দ্বারা 3 ভাগ করুন।
  5. + ... yJ তালিকার সর্বাধিক মানের সূচকের দ্বিগুণ যোগ করুন (0 যদি আর, 2 জি, 4 যদি বি)।
  6. % ... 6: Modণ 6, নেতিবাচক সমস্যা সমাধান করতে।
  7. *60: ডিগ্রীতে রূপান্তর করতে 60 টি দিয়ে গুণ করুন এবং মুদ্রণ করুন।

9

সি #, 188 210 206 197 191 বাইট

int H(int r,int g,int b){int[]a={r,g,b};System.Array.Sort(a);int x=a[2],y=a[1],c=x==g?1:(x==b?2:(y==b?3:0)),d=y==g?1:(y==b?2:(x==b?3:0));return(int)((c-d)*120*(1+(x-y)*1D/(x-a[0]))/2+d*120);}

সোকে ধন্যবাদ 4 বাইট সংরক্ষণ করার জন্য এবং এসএলাক 49-কে 15 সাশ্রয় করার জন্য!


যেমন আপনি কেবল zএকবার আউটপুট গণনায় ব্যবহার করেন এবং আপনি পূর্ববর্তী গণনায় এটি ব্যবহার করেন না, আপনি ভেরিয়েবলটি সরিয়ে রেখে আউটপুট পরিবর্তন করে return(int)((c-d)*(1+(x-y)/(double)(x-a[0]))/2+d);আপনাকে 4 বাইট সংরক্ষণ করে saving
সুক

আপনি 120 খুঁজে বিবেচনার পারেন cএবংd বরাদ্দকরণ এবং এই মত বিনিময়ে c=x==g?1:(x==b?2:(y==b?3:0)),d=y==g?1:(y==b?2:(x==b?3:0))এবং তারপর return(int)((c-d)*120*(1+(x-y)/(double)(x-a[0]))/2+d*120);4 বাইট সংরক্ষণ করুন।
SLuck49

এছাড়াও আপনার কি সত্যই কাস্ট দরকার double ? আপনি যদি এটি ব্যবহার করেন তবে পরিবর্তে (x-a[0])*1Dআরও 5 টি বাইট সংরক্ষণ করতে পারেন ।
এসএলএফ 49

@ এসলাক 49 ধন্যবাদ! হ্যাঁ, আমার আসলে কাস্ট দরকার, এটি অন্যথায় ভুল ফলাফল দেয়, তবে সেই *1Dগুণটি একটি দুর্দান্ত কৌশল!
প্রোগ্রামফক্স

এছাড়াও (সবেমাত্র লক্ষ্য করা) আপনি System.Arrayঅন্য 6 টি বাইটের জন্য পুরোপুরি যোগ্যতা অর্জনের মাধ্যমে সমস্তগুলি একসাথে রেখে দিতে পারেন ।
SLuck49

8

Pyth, 41 55 53 51 বাইট

A.)JohN,VQ*L120?qeQhSQ3j312T+/*-HKeeJhc-GheJ-GhhJ2K

ইনপুট আকারে বলে আশা করা হচ্ছে r,g,b। এখানে একটি ব্যাখ্যা:

                                                        Implicit: Q=eval(input()), evaluates to (r,g,b)
               ?qeQhSQ                                  Is b the smallest?
                      3j312T                            Choose [0,1,2] or [3,1,2] based on above
          *L120                                         Convert to [0,120,240] or [360,120,240]
       ,VQ                                              Pair -> [[r,0/360],[g,120],[b,240]]
   JohN                                                 Order by 1st element in each pair, store in J
A.)J                                                    Pop biggest from J, set G = x, H = h(X)
                                                        Output calculation:
                                       -GheJ                x - y
                                            -GhhJ           x - z
                                     hc                     Divide and increment
                                 KeeJ                       Set K = h(Y)
                              *-HK                          Multiply by (h(X) - h(Y))
                             /                   2          Integer division by 2
                            +                     K         Add h(Y)

4 জ্যাকেট সংরক্ষিত হয়েছে, @ জাকুবে এবং @ আইস্যাচকে ধন্যবাদ


@ jimmy23013 ফিক্সড, অতিরিক্ত পরীক্ষা ক্ষেত্রে জন্য ধন্যবাদ
সোক

1
গল্ফগুলির একটি দম্পতি: m*120d-> *L120, অন্য বাইট সংরক্ষণ eeJকরতে ইনলাইনে সংরক্ষণ করুন K
ইসাকাক

@ আইসএইচজি আমি জানতাম না Lঅপারেটর স্বয়ংক্রিয়ভাবে একটি ইনট্রে একটি পরিসীমা তৈরি করেছে, প্রতিটি দিন মনে হয় খুব শীতল দিন: ও) ধন্যবাদ!
সুক

8

জাভাস্ক্রিপ্ট (ES6), 145 115 108 100 97 90 বাইট

ভেসে আসে ব্যবহার করতে একটি ফাংশন বরাদ্দ করুন।

(r,g,b)=>([x,y,z]=[r,g,b].sort((a,b)=>b-a),m=x-z,(x-r?x-g?r-g+4*m:b-r+2*m:g-b+6*m)/m%6*60)

একক টেরিনারি অপারেটর ক্রমের মধ্যে সবকিছু অন্তর্ভুক্ত করে 30 বাইট সংরক্ষণ করেছেন এবং শেষ পর্যন্ত 0-360 এ স্বাভাবিক হওয়ার জন্য অপেক্ষা করছেন।

আরও বেশি বাইট সংরক্ষণের জন্য edc65, ভাসু আদারি এবং ETH প্রোডাকশনগুলি ধন্যবাদ।

JSFiddleপরীক্ষা দিয়ে । ফায়ারফক্সে চেষ্টা করুন।

যদি ফাংশন ঘোষণার অপসারণ h=আইনী না হয় তবে 2 বাইট যুক্ত করুন।


আপনি 'ভার' এবং কিছু বাইট মুছে ফেলতে পারেন।
ভাসু আদারী 26'15

ইএস Fফিডলের কোনও কারণে ভ্যারিয়াল ডিক্লেয়ারেশন দরকার এবং আমি বুঝতে পারিনি যে আমি ফায়ারফক্সে
ইএস

1
কোঁকড়া ধনুর্বন্ধনী বন্ধনীর সাথে, সেমিকোলনকে কমা দিয়ে প্রতিস্থাপন করে এবং অপসারণ করে আপনি 6 বাইট সংরক্ষণ করতে পারেন return। আমি বিশ্বাস করি যে ফাংশন ঘোষণাপত্র ( h=) হ'ল
সরানোও

এটি অবসেসিভ হতে পারে (তারপরে, সমস্ত ভাল গল্ফার কি না?;)) তবে আপনি অন্য দুটি বাইট বাঁচাতে পেরে পার্সেন্টেসিস %6)*60এবং অন্যদিকে এর সহযোগীর হাত থেকে মুক্তি পেতে পারেন । এছাড়াও, সংযোজন উপর জোর বল ব্যবহার (শেষে 6 টি যোগ করার পরিবর্তে) আসলে আপনার বর্তমান সেটআপের উপরে একটি বাইট সংরক্ষণ করবে। (((x==r?(g-b)/m:x==g?2+(b-r)/m:4+(r-g)/m)+6)%6)*60হয়ে যাবে (x==r?6+(g-b)/m:x==g?8+(b-r)/m:10+(r-g)/m)%6*60
ইটিএইচ প্রডাকশনগুলি 27:58 এ 2

1
সাজানোর জন্য +1, খুব চালাক, এটি 90 (বা 92)(r,g,b)=>([m,_,M]=[r,g,b].sort((a,b)=>a-b),C=M-m,(M-r?M-g?r-g+4*C:b-r+2*C:g-b+6*C)/C%6*60)
edc65

6

অকটভে, 65 60 50 বাইট

সম্পাদনা করুন: পাওয়েল.বোকজারস্কি থেকে 10 বাইট সংরক্ষণ করা হয়েছে

একটি আনুমানিক সমাধান ...

@(c)mod(atan2d(.866*c*[0;1;-1],c*[2;-1;-1]/2),360)

টেস্ট রান

@(c)mod(atan2d(.866*c*[0;1;-1],c*[2;-1;-1]/2),360)
ans([0   182   255])
ans =  196.14

@(c)mod(atan2d(.866*c*[0;1;-1],c*[2;-1;-1]/2),360)
ans([127   247   103])
ans =  111.05

@(c)mod(atan2d(.866*c*[0;1;-1],c*[2;-1;-1]/2),360)
ans([0   0   1])
ans =  240.00

@(c)mod(atan2d(.866*c*[0;1;-1],c*[2;-1;-1]/2),360)
ans([255   165   245])
ans =  305.82

অক্টাভা, 107 বাইট

আমার আসল (সঠিক-ইশ) সমাধান ...

কোড:

function H=r(c) [b,i]=sort(c);h=60*[6*(i(1)~=3),2,4](i);H=(h(3)-h(2))*(1+(b(3)-b(2))/(b(3)-b(1)))/2+h(2);

ব্যাখ্যা:

function H=r(c)
   [b,i]=sort(c);
   h=60*[6*(i(1)~=3),2,4](i);
   H=(h(3)-h(2))*(1+(b(3)-b(2))/(b(3)-b(1)))/2+h(2);

এই ফাংশনটি ইনপুট হিসাবে আর, জি, বি মানযুক্ত একটি ভেক্টর নেয় cএবং আরোপিত ক্রমে ইনপুটটি সাজায় s

  • b অনুসারে বাছাই করা মানগুলি [z, y, x] ধারণ করে
  • i আর বি জি এর প্রতিটি মানের সাথে যুক্ত আরবিবি বিমান রয়েছে

ভেক্টর hমান সহ পপুলেট হয়

  • 60*[6, 2, 4]= [360, 120, 240](তবে 3 বাইট ছোট)
  • সর্বনিম্ন মানটি নীল ( i(1) == 3) এ না হওয়া পর্যন্ত প্রথম ক্ষেত্রে মানটি শূন্য হয়
  • তারপরে (i)পুনরায় সাজানোর hজন্য ব্যবহার করুন[h(Z), h(Y), h(X)] ক্রমে

সেখান থেকে এটি সূত্রটির একটি সরাসরি প্রতিলিপি। আপনি এটি এখানে চেষ্টা করতে পারেন ।


ইঙ্গিত: আরও বাইট বার করতে বেনামে ফাংশন স্বরলিপি ব্যবহার করুন: কীওয়ার্ড @(c)mod(atan2d(.866*c*[0;1;-1],c*[2;-1;-1]/2),360)সহ সংজ্ঞা থেকে দশ বাইট কম sh function
pawel.boczarski

@ পাওয়েল.বোকজারস্কি আমি ভাবছিলাম যে আমি যদি পুরোপুরি ফাংশন শিরোনামটি সরিয়ে ফেলতে পারি তবে আমি জানি না এটি বৈধ কিনা। কিন্তু টিপ জন্য ধন্যবাদ! : ডি
বেকার

@ pawel.boczarski এদিকে ফিরে তাকানোর পরেও r=, বেনামে ফাংশনটি বলার জন্য আমার এখনও একটি প্রয়োজন আছে , তাই না?
বেকার

অনেকগুলি সমাধান রয়েছে যেখানে বেনাম ফাংশন পোস্ট করা হয়। তদতিরিক্ত, আপনি এমনকি এটির মতো সংজ্ঞায়িত ফাংশনটি কল করতে পারেন: (@(c)mod(atan2d(.866*c*[0;1;-1],c*[2;-1;-1]/2),360))([127 247 103])বা তর্ক করতে পারেন যে ansবেনামে ফাংশন সংজ্ঞায়িত হওয়ার পরে আপনি ভেরিয়েবলটি সঠিকভাবে ব্যবহার করতে পারেন , যাতে ফাংশন সংজ্ঞা সম্পূর্ণ হওয়ার জন্য অ্যাসাইনমেন্টটি প্রয়োজনীয় হয় না। একটি চ্যালেঞ্জের মধ্যে ( কোডগল্ফ.স্ট্যাকেক্সচেঞ্জ / প্রশ্ন / 54945 ) বিদ্যমান মতলব লাইব্রেরি ফাংশনের একটি হ্যান্ডেল সম্পূর্ণ সমাধান হিসাবে পোস্ট করা হয়েছিল।
pawel.boczarski

@ পাওয়েল.বোকসার্কি বাহ, এটি ... ঠিক ... খারাপ: ডিআইয়ের জানা উচিত ছিল লুইস জড়িত ছিল। আমি মূল কোডটিতে ফিরে যাব এবং ansনমুনায় ব্যবহার করব । আবার ধন্যবাদ!
বেকার 21

5

পাইথ, 55

আমি জানি @ সকের উত্তরটি আমার মারবে, কিন্তু যেহেতু আমি আমার পোস্ট শেষ করার পরে আমার কাজ শেষ করেছে, তাই আমি ভেবেছিলাম আমি এখনও পোস্ট করব। পাইথ ব্যবহারের এটি আমার প্রথম সময় ছিল তাই আমি নিশ্চিত যে আমি কিছু স্পষ্টত ভুল করেছি।

DlZK*120ZRKJSQFNJ=Y+YxQN)=kl@Y1+k/*-leYk+1c-eJ@J1-eJhJ2

ইনপুট হবে বলে আশা করা হচ্ছে r, g, b। আপনি এটি এখানে চেষ্টা করতে পারেন ।


জন্য কাজ করে না 255,165,245
জিমি 23013

5

পাওয়ারশেল, 232 226 222 161 বাইট

পূর্ববর্তী সংস্করণগুলির জন্য পুনর্বিবেচনার ইতিহাসটি দেখুন

$z,$y,$x=($r,$g,$b=$args)|sort
$c=((2,(0,3)[$y-eq$b])[$x-ne$b],1)[$x-eq$g]
$d=((2,(0,3)[$x-eq$b])[$y-ne$b],1)[$y-eq$g]
(($c-$d)*120*(1+($x-$y)/($x-$z))/2+$d*120)

হু ছেলে, আসুন দেখি আমি এর মধ্য দিয়ে চলতে পারি কিনা। যেহেতু \nএকই হিসাবে গণনা করা হয়; আমি স্পষ্টতার জন্য লাইনটি ভেঙে দিয়েছি ।

প্রথম লাইনটি তিন হিসাবে ইনপুট নেয় এবং এগুলিতে $argsস্টোর করে $r, $g, $b। আমরা সত্যিই কেবল $bপরে ব্যবহার করতে যাচ্ছি , তবে আমাদের তিনটিই দরকার যাতে |sortকাজগুলি যথাযথভাবে হয়। এটা তৈরি করে$z, $y, $x ইনপুট আর্গুমেন্টগুলির মধ্যে সবচেয়ে ছোট থেকে বৃহত্তম করে ।

পরবর্তী দুটি লাইন সেটআপ $cএবং $dএকাধিক সূচি-ইন-অ্যারে কলগুলি ব্যবহার করে নম্বরগুলি যথাযথভাবে সেট করতে। , বাইরে থেকে কাজ যদি $xহয় -eqকরতে ual$g (অর্থাত, সবুজ বৃহত্তম ছিল), আমরা সেট $c=1... অন্য, যদি $xহয় -nOT eগণদেবতা করতে $b(অর্থাত, নীল না বৃহত্তম ছিল না) $cহয় পারেন 0বা 3যদি নীল দ্বিতীয় বৃহত্তম ছিল নির্ভর করে ... অন্য,$c=2 ,। অনুরূপ যুক্তি সেট$d

এরপরে আমরা নিম্নলিখিতটি দিয়ে আউটপুট গণনা করি এবং মুদ্রণ করি, যা চ্যালেঞ্জের সামান্য অ্যালগরিদম থেকে কিছুটা গল্ফড হয়।

(($c-$d)*120*(1+($x-$y)/($x-$z))/2+$d*120)

1
আমি পাওয়ারশেলকে জানি না, তাই আমি ভুল হলে আমাকে সংশোধন করি ... $zগণনা করার সময় আপনি ব্যবহার করেন না $cবা $d, এবং আপনি কেবল আউটপুট গণনায় একবার ব্যবহার করেন, তাই আপনি কী $zপুরোপুরি পরিত্রাণ পেতে এবং এটিকে প্রতিস্থাপন করতে পারেন $a[0]?
সুক

4

রুবি, 117 96 94 বাইট

কোড:

h=->r,g,b{z,y,x=[r,g,b].sort;v=x-z.to_f;({r=>(g-b)/v,g=>2+(b-r)/v,b=>4+(r-g)/v}[x]%6*60).to_i}
  • অপসারণ করে 21 বাইট সংরক্ষণ করা হয়েছে ()আর, জি, বি ভেরিয়েবলগুলি এবং ব্যবহার ।
  • Negativeণাত্মক মান রূপান্তর করতে 6 এর মডুলাস গ্রহণ করা এবং 2 টি বাইট সংরক্ষণ করে এমন ডিগ্রীতে রূপান্তর করতে 60 দ্বারা গুন করা।

উদাহরণ:

irb(main):274:0> h.call 0,182,255
=> 197
irb(main):275:0> h.call 127,247,103
=> 110
irb(main):276:0> h.call 0,0,1
=> 240
irb(main):277:0> h.call 255,165,245
=> 306

3

এসডাব্লুআই-প্রোলগ, 133 বাইট

a(L,H):-L=[R,G,B],max_list(L,X),min_list(L,Y),member(X:I:J:U,[R:G:B:0,G:B:R:2,B:R:G:4]),Z is 60*(U+(I-J)/(X-Y)),(Z<0,H is Z+360;H=Z).

উদাহরণ: a([255,165,245],Hue). আউটপুটসHue = 306.666666666666 .

এটি নিম্নলিখিত সূত্র ব্যবহার করে:

  • Max = max(R,G,B), Min = min(R,G,B)
  • তাহলে Max = R, U = 0। অন্যথায় যদি Max = G, U = 2। আরU = 4
  • যদি Max = R, I = Gএবং J = B। অন্যথায় যদি Max = G, I = Bএবং J = R। অন্য I = Rএবং J = G
  • Z = U + (I - J)/(Max - Min)
  • Hueপারেন হয় Zবা Z + 360যদি Z < 0

রাউন্ডিং alচ্ছিক।
jimmy23013

@ jimmy23013 আপডেট হয়েছে, ধন্যবাদ।
23:58

3

পার্ল 5, 138 132 119 বাইট

কোড:

($m,$c,$M)=sort@A=($R,$G,$B)=@ARGV;print 60*(6+$M>$m?($G>$c?$B-$R:$B>$c?$R-$G:$G-$B)/($M-$m)+($G>$c?2:$B>$c?4:0):0)%360

মন্তব্য:

অবশ্যই পার্ল সমস্ত পাইথারেস্ক গল্ফ দিয়ে এই জাতীয় চ্যালেঞ্জ জিততে পারে না। তবে আমি ভাবলাম মাত্র 1 গণনা পদক্ষেপের মাধ্যমে এটি করা সম্ভব ছিল কিনা। ধন্যবাদ যে মডুলাসটি সুন্দরভাবে কাজ করেছে। :)

টেস্ট:

$ perl hue.pl 0 182 255
197
$ perl hue.pl 127 247 103
110
$ perl hue.pl 0 0 1
240
$ perl hue.pl 255 165 245
307

সর্বাধিক শেভ করা কিছু বাইটের পরিবর্তে মাঝারি মানের সাথে তুলনা করা। (== বনাম>)
লকস্টর্মস

1

সি ++ 276 বাইট

#include <iostream>
int H(int r,int g,int b){int m,n=120,o=240,l=r>g?r>b?g>b?m=r-b,o=n,n=-n,r-g:m=r-g,r-b:m=b-g,o+=n,n=-n,b-r:g>b?r>b?(m=g-b,o=0,g-r):m=g-r,n=-n,g-b:(m=b-r,o-=n,b-g);return (int)n*((float)l/m+1)/2+o;}int main(){int r,g,b;std::cin>>r>>g>>b;std::cout<<H(r,g,b);}

একটি ইঙ্গিত: আপনি Hউত্তরে একা ফাংশন ছেড়ে যেতে পারতেন , যেমন কোড-গল্ফের মতো একটি স্বতন্ত্র ফাংশন একটি বৈধ উত্তর, সম্পূর্ণ প্রোগ্রামের সমতুল্য, মেটা আলোচনার মাধ্যমে: meta.codegolf.stackexchange.com/questions/2419/… । এটি আপনার উত্তরকে আরও প্রতিযোগিতামূলক করে তুলবে (আপনার ক্ষেত্রে 100 বাইট সংরক্ষণ করুন)। পরীক্ষার সরলকরণের সমাধানের অধীনে প্রোগ্রামের "পূর্ণ" সংস্করণটি ছেড়ে যাওয়ার জন্য আপনাকে এখনও উত্সাহ দেওয়া হচ্ছে।
pawel.boczarski

দ্বিতীয় পরীক্ষার ক্ষেত্রে এর পরিবর্তে 127 247 103অবৈধ মান -120দেয় 110
pawel.boczarski

1

আর, 125 বাইট

বেকারের অক্টাভ সমাধানের সাথে খুব মিল। ভাসমান পয়েন্ট আউটপুট।

কোড:

h=function(x){
  o=seq(3)[order(-x)];
  y=c(60*c(6*(o[3]!=3),2,4)[o],x[o]);
  return((y[1]-y[2])*(1+(y[4]-y[5])/(y[4]-y[6]))/2+y[2]);
}

উদাহরণ:

> h(c(0,182,255))
[1] 197.1765
> h(c(127,247,103))
[1] 110
> h(c(0,0,1))
[1] 240
> h(c(255,165,245))
[1] 306.6667

1

পাইথন, 154 বাইট

def h(c):r=c[:];c.sort();c=c[::-1];x,y,z=c;i,j=[120if n==r[1]else 240if n==r[2]else 0if z==r[2]else 360for n in[x,y]];print ((i-j)*(1+(x-y+0.)/(x-z))/2)+j

মানগুলির একটি তালিকা গ্রহণ করে। এটি আরও ভেঙে যেতে পারে কিনা তা নিশ্চিত নয়। এখানে এটি নিয়ন্ত্রিত:

def hue(color):
 rgb=color[:]  # copy list
 color.sort()  # sort list
 color=color[::-1]  # reverse sort
 x,y,z=color   # pull out x,y,z

 # The line 
 #   i,j=[120if n==r[1]else 240if n==r[2]else 0if z==r[2]else 360for n in[x,y]]
 # is basically the following, twice, once for x/hx and the second time for y/hy

 if x==rgb[1]: # if x is green
  hx = 120
 else:
  if x==rgb[2]: # if x is blue
   hx = 240
  else:
   if z==rgb[2]: # if z is blue and x is red
    hx = 0
   else:       # if x is red and y is blue
    hx = 1

 print ((hx-hy)*(1+(x-y+0.)/(x-z))/2)+hy  # calculate, print

0

জাভাস্ক্রিপ্ট 108

বিকল্প পদ্ধতি।

function H(r,g,b){a=[r,g,b].sort(),M=a[2],c=M-a[0],h=M==r?(g-b)/c%6:M==g?(b-r)/c+2:(r-g)/c+4
return h*60|0;}

জাভাস্ক্রিপ্ট 194

উদাহরণ পদ্ধতি ব্যবহার করে।

Array.prototype.i=[].indexOf
function H(r,g,b,a){a=[r,g,b].sort(),i=[a.i(r),a.i(g),a.i(b)],x=[i[2]?360:0,120,240],hx=x[i.i(2)]|0,hy=x[i.i(1)]|0
return (hx-hy)*(1+(a[2]-a[1])/(a[2]-a[0]))/2+hy|0}

var input = document.getElementById("input").innerHTML;
var output = document.getElementById("output");
var html = "";

input.replace(/(\d+)\,(\d+)\,(\d+)/g, function(m, r, g, b) {
  html += H(r, g, b) + "\n";
});

output.innerHTML = html;
<pre id="input">
0,182,255
127,247,103
0,0,1
255,165,245
</pre>

<pre id="output">

</pre>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.