তিনটি পূর্ণসংখ্যার আরজিবি দেওয়া হয়েছে, স্ট্রিং হিসাবে আউটপুট হেক্সাডেসিমাল উপস্থাপনা।
Input: Output:
72 61 139 #483D8B
75 0 130 #4B0082
0 255 127 #00FF7F
সংক্ষিপ্ততম অপ্রচলিত কোড জয়ী
তিনটি পূর্ণসংখ্যার আরজিবি দেওয়া হয়েছে, স্ট্রিং হিসাবে আউটপুট হেক্সাডেসিমাল উপস্থাপনা।
Input: Output:
72 61 139 #483D8B
75 0 130 #4B0082
0 255 127 #00FF7F
সংক্ষিপ্ততম অপ্রচলিত কোড জয়ী
উত্তর:
$_=?#+"%02X"*3%$F
নমুনা রান:
bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '72 61 139'
#483D8B
bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '75 0 130'
#4B0082
bash-4.1$ ruby -pae '$_=?#+"%02X"*3%$F' <<< '0 255 127'
#00FF7F
আমি "অপ্রচলিত" অংশের জন্য আরও যাচ্ছিলাম। ;)
10;a= gets. split
. map {| x| #x
"%02X" %( x. to_i)
}; $> << ?# << a[
00 .. 1+2]. join;
ফন্টটি (আমার ওয়েব ব্রাউজারে) কিছুটা লম্বা, তাই এটি বিকৃত দেখাচ্ছে তবে কুরিয়ার নিউতে এটি আরও ভাল দেখাচ্ছে:
নমুনা রান:
c:\a\ruby>rgb2hex
255 100 0
#FF6400
লুপের
ForEach-Object
জায়গায় নির্দেশ করার জন্য @ মান্যাটওয়ার্ককে ধন্যবাদfor
।
ভঙ্গুতে এটির-join
পরিবর্তে লুপ আউটপুটটিতে আমি ব্যবহার করতে পারব বলে জোয়িকে ধন্যবাদ জানাই Thanks
গল্ফ কোড:
'#'+-join(1..3|%{"{0:X2}"-f+(read-host)})
বিঃদ্রঃ:
এখানে অবৈধ ইনপুটগুলি পরীক্ষা করার ক্ষেত্রে কোনও ত্রুটি নেই। স্ক্রিপ্টটি আনন্দের সাথে ইনপুট হিসাবে 256, 4096 এবং 65536 নেবে, তারপরে আউটপুট # 100100010000 (যা সম্ভবত আরজিবি হিসাবে কাজ করবে না)।
মতামত সহ উজ্জ্বল:
# Put a hashtag in front of the output.
'#'+
# Join the nested code into one string.
-join(
# Pipe 1..3 to ForEach-Object to run a loop three times.
1..3|%{
# Take user input and format it as hex, with minimum two digits in output.
"{0:X2}"-f+(read-host)
}
)
foreach($i in 1,2,3)
এটি 68 টি অক্ষরে কমাতে লুপটি তৈরি করুন ।
foreach
। (কমপক্ষে, আমি কাজ করার জন্য কিছু পরীক্ষার রান পেতে সক্ষম হইনি)) তবে, ডান সিনট্যাক্স ব্যবহার করে, একটি বিল্ট-ইন ওরফে এবং অন্য পাওয়ারশেল শর্টকাট আমি সম্প্রতি আবিষ্কার করেছি, আমি মনে করি আমার আরও ভাল কিছু হয়েছে, শেভিং আপনার পরামর্শের বাইরে আরও 12 টি অক্ষর। (1..3)|%{...}
(উপবৃত্তির স্থলে বিদ্যমান স্ক্রিপ্ট থেকে বন্ধনীযুক্ত বিবৃতি সন্নিবেশ করান)) আমাকে এখনও স্ক্রিপ্টে এটি পুরোপুরি পরীক্ষা করা দরকার, তবে আমাকে সেদিকে নির্দেশ করার জন্য ধন্যবাদ!
(1..3)|%
কাজ করে এবং স্ক্রিপ্টটিকে 56 টি অক্ষরে নামায়। আমি এটি উত্তরে সম্পাদনা করব, এবং অবশ্যই আপনাকে ধারণার জন্য ক্রেডিট করব। আবার ধন্যবাদ!
-join
: '#'+-join(1..3|%{"{0:X2}"-f+(read-host)})
।
( \
ডাবল-কোটের পরিবর্তে 1 চরের জন্য @ মান্যাটওয়ার্ককে ধন্যবাদ )
printf \#%02X%02X%02X 12 12 12
#0C0C0C
বা একটি লুপে STDIN পড়া : 48 টি অক্ষর:
while read f;do printf "#%02X%02X%02X\n" $f;done <<<$'72 61 139\n75 0 130\n0 255 127'
#483D8B
#4B0082
#00FF7F
c=({0..9} {a..f}) d=\#;for b;do for a in / %;do d+=${c[$b$a 020]};done;done;echo $d
আমি জানি, 020
যেখানে লেখা আছে এটি 82 টি অক্ষর হতে পারে 16
তবে আমি এটি পছন্দ করি ... বা সম্ভবত d+=${c[$b$a 0x10]}
এটি প্রথম পোস্ট ছিল।
hexcolor() {
local a b c=({0..9} {a..f}) d=\#
for b ;do
for a in / % ;do
d+=${c[$b$a 0x10]}
done
done
echo $d
}
hexcolor 72 61 139
#483d8b
hexcolor 75 0 130
#4b0082
hexcolor 0 255 127
#00ff7f
#!/bin/bash
browser=firefox # google-chrome iceweasel
url="data:text/html;charset=UTF-8,<html><head></head><body>"
url+="<script type='text/javascript'>
function h(i){var h=i.toString(16);if(16>1*i)h='0'+h;
return h};function C(r,g,b){return'\043'+h(r)+h(g)+h(b)};
function m(){ var r=1.0*R.value; var g=1.0*G.value; var b=1.0*B.value;
var fore='black';if(384>r+g+b)fore='white';var c=C(r,g,b);
s.setAttribute('style','background:'+c+';color:'+fore+';');s.innerHTML=c};
function w(e){console.log(e);var val=e.target.value;var q=1;if(e.shiftKey)
q=15;if(e.detail){if(e.detail>0){q=0-q;}}else if(0>e.wheelDelta){q=0-q;};
val=1*val+q;if(val>255)val=255;if(0>val)val=0;e.target.value=val;m(); };
function k(e){console.log(e);var val=e.target.value;var q=1;if(e.shiftKey)q=
15;if(e.keyCode==38){val=1*val+q;if(val>255)val=255;e.target.value=val;m();}
else if(e.keyCode==40){val=1*val-q;if(0>val)val=0;e.target.value=val;m();}};
function n(){R=document.getElementById('R');G=document.getElementById('G');
B=document.getElementById('B');s=document.getElementById('s');
R.addEventListener('DOMMouseScroll',w);R.addEventListener('mousewheel',w);
G.addEventListener('DOMMouseScroll',w);G.addEventListener('mousewheel',w);
B.addEventListener('DOMMouseScroll',w);B.addEventListener('mousewheel',w);
m();};var R, G, B, s;window.onload=n;
</script><style>div{display:inline-block;width:10em;}</style>
<div id='s'> </div>"
input="%s:<input type='text' size='5' value='200'"
input+=" onKeyDown='k(event)' onChange='m()' id='%s' />"
for c in R G B ;do
printf -v add "$input" $c $c
url+="$add"
done
$browser "$url"
এটি সহ একটি ব্রাউজার উইন্ডো প্রদর্শিত হবে:
যেখানে আপনি মানগুলি পরিবর্তন করতে মাউসওয়েলটি রোল করতে পারেন (শিফট কী সহ 15 ধাপে ধরে রাখা) ...
printf \#%02X%02X%02X
যথেষ্ট।
d+=${c[$b$a 0x10]}
কিছু খুঁজে !
d+=${c[$b$a 020]}
কাজটি করবে এবং দেখতে সুন্দর লাগবে
perl -nE 'say"#",map{unpack H2,chr}split'
এ জাতীয় একটি সংক্ষিপ্ত প্রোগ্রামটি অযৌক্তিকভাবে করা শক্ত, তবে আমি মনে করি এটি কার্যকর হয়।
unpack
প্রশ্ন: আপনি কি প্রশ্নটির মতো হেক্সাডেসিমাল a..f বড় হাতের তৈরি করতে পারেন?
unpack
, তবে কোনও ভাগ্য নেই। এর sprintf
পরিবর্তে একটি উপায় হ'ল unpack
তবে এটি দীর্ঘ এবং সম্পূর্ণ গোঁড়া। অন্য উপায়টি হ'ল স্ট্রিংকে বড় হাতের অক্ষরে পরিবর্তন করা: map{uc unpack H2,chr}
তিনটি অক্ষরের ব্যয়।
pack
এবং unpack
আমার কোডিং শৈলীতে getুকেনা। সুতরাং এটি আমার জন্য যথেষ্ট প্রচলিত or
trace("#"+(72<<16|61<<139|b).toString(16));
আউটপুট: #483D8B
perl -ne 'printf"#"."%02x"x3,split'
13 31 133
#0d1f85
দুঃখিত, এটি ব্যবহারের চেয়ে সেক্সি নয় unpack
, তবে খাটো!
তবে আপনি যদি সত্যিই ব্যবহার করতে পছন্দ করেন unpack
তবে আপনি তা করতে পারেন:
$==24;s/\d+[\n ]*/{$=-=8;($&<<$=).do{rand>.5?qw<+>[0]:"|"}}/eg;$_=
pack("N",eval($_.587.202.560));say$1,unpack("H6",$2)if/^(.)(.*)$/s
নমুনার জন্য, এটি সংক্ষিপ্ত সংস্করণ নয়, তবে আমি এটি পছন্দ করি! (এটি রেন্ডারিংয়েরrand
জন্য ব্যবহারের নোট করুন :-)
perl -nE '
$==24;s/\d+[\n ]*/{$=-=8;($&<<$=).
do{rand>.5?qw<+>:"|"}}/eg;$_=pack(
"N",eval($_.587.202.560) );say $1,
unpack("H"."6",$2) if /^(.)(.*)$/s
' <<< $'72 61 139\n75 0 130\n0 255 127'
#483d8b
#4b0082
#00ff7f
"#"or>1[:82*%:}-82*,86*+:"9"v
;^?l ]o+*7)"9":+*68o+*7)<
নষ্ট সাদা স্থান ব্যবহার করে এবং এতে কিছু কোড সরিয়ে নিয়েছে
কমান্ড লাইন ইনপুট দিয়ে চালান:
python fish.py generateHex.fish -v 255 36 72
আউটপুট: "# FF2448"
: D 0 <<# # # #> TYPE #>> ; 35 EMIT HEX SWAP ROT D D D DECIMAL
1 1 1
আউটপুট দেয় #010101
। অন্য যে কোনও মান 0-255 কাজ করে। আপনি কোন পরিবেশ বা এগিয়ে ব্যবহার করছেন?
int r,g,b;
scanf("%d %d %d",&r,&b,&g);
printf("#%06x",r<<16|g<<8|b);
বগ স্ট্যান্ডার্ড প্রিন্টফ এবং বিট টুইডলার ব্যবহার
readf
,? তা কি হওয়া উচিত নয় scanf
?
[#]n16o?ShShSh[Lhd16/n16%n]ddxxx
নমুনা রান:
bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '72 61 139'
#483D8B
bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '75 0 130'
#4B0082
bash-4.1$ dc -e '[#]n16o?ShShSh[Lhd16/n16%n]ddxxx' <<< '0 255 127'
#00FF7F
(তবে পৃথক লাইনে ইনপুট নম্বরগুলি দরকার))
[#]n16o[?d16/n16%n]ddxxx
নমুনা রান:
bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'72\n61\n139'
#483D8B
bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'75\n0\n130'
#4B0082
bash-4.1$ dc -e '[#]n16o[?d16/n16%n]ddxxx' <<< $'0\n255\n127'
#00FF7F
dc
এই ওয়েবসাইটে যথেষ্ট উত্তর নেই।
জাভাস্ক্রিপ্ট, 89 টি অক্ষর
console.log('#' + ('00000' + eval('256*(256*(' + DEC.replace(/ /g, ')+')).toString(16)).slice(-6))
এটিকে রূপান্তর 72 61 139
করে 256*(256*(72)+61)+139
এবং এভেল করে।
eval('(('+DEC.replace(/ /g,'<<8)+'))
পরিবর্তে ব্যবহার করে eval('256*(256*('+DEC.replace(/ /g,')+'))
আপনি 5 টি অক্ষর সংরক্ষণ করুন!
'#'+-join(-split(read-host)|%{'{0:X2}'-f+$_})
অথবা, যদি ডেটাতে পাইপ ব্যবহার করে এটি ব্যবহার করা যায় তবে আপনি কেবল ব্যবহার করতে পারেন
'#'+-join(-split"$input"|%{'{0:X2}'-f+$_})
যা এটিকে 42 এ নামিয়ে আনে ।
-split
এবং -join
।
টিমমিডকে ধন্যবাদ একটি বাইট সংরক্ষণ করা
cat rgb2hex.ps1
$args|%{$o+="{0:X2}"-f[byte]$_};"#$o"
wc -c rgb2hex.ps1
38 rgb2hex.ps1
powershell -f .\rgb2hex.ps1 72 61 139
#483D8B
powershell -f .\rgb2hex.ps1 0 255 127
#00FF7F
[byte]
পূর্ণসংখ্যা হিসাবে ইনপুট দেওয়া হওয়ায় আপনি কিছুটা বাইট সংরক্ষণ করতে পারেন এবং আপনার আউটপুটটি "#$o"
$args|%{$o+="{0:X2}"-f$_};"#$o"
main(){int a,b,c;scanf("%d%d%d",&a,&b,&c);printf("#%02X%02X%02X",a,b,c);}
বিরক্তিকর সি প্রোগ্রাম - খুব গোঁড়া।
ব্লেহ, নকল কোড আচ্ছা ভালো. কেবলমাত্র রেডিক্স রূপান্তরটির একটি সরল বাস্তবায়ন।
"#",v
7*+,>#@&:97+/"0"+:"9"`7*+,97+%"0"+:"9"`
নমুনা রান
% cfunge tohex.98 <<<'72 61 139'
#483D8B
% cfunge tohex.98
#75 0 130
4800820 255 127
00FF7F
(দ্রষ্টব্য: ইনপুট পড়ার আগে '#' প্রিন্ট করে --- টাস্কটি এটি নিষেধ করে না; স্ট্ডিনে তিনটি নম্বর দেওয়া এটি স্ট্ডআউটে সঠিক আউটপুট তৈরি করে। এটি নিউলাইনগুলি নিয়েও বিরক্ত করে না এবং আপনি দেখতে পাচ্ছেন যে এটি কী করে না "ইন্টারেক্টিভলি" চালানোর সময় '#' সঠিকভাবে যুক্ত করবেন না))
3 থেকে 9-সংখ্যার আরজিবি-র জন্য অনুরোধ জানানো হয়। জিএমএল হেক্সাডেসিমাল চিহ্ন সহ হেক্সাডেসিমাল ফিরিয়ে দেয়,$
d=get_string('','')if(d=='')e=""else e="00"h="0123456789ABCDEF"while(d!=''){b=d&255i=string_char_at(h,byte div 16+1)l=string_char_at(h,byte mod 16+1)e+=i+l;d=d>>8}return '$'+e
এটি একটি স্ক্রিপ্ট করুন। এছাড়াও, অস্বীকারহীন ভেরিয়েবলগুলি 0 হিসাবে গণ্য করে সংকলন করুন।
\B=@set{x;0123456789abcdef}\#
<D>=@substring{@div{$1;16};1;$x}@substring{@mod{$1;16};1;$x}
?=
নমুনা রান:
bash-4.3$ gema '\B=@set{x;0123456789abcdef}\#;<D>=@substring{@div{$1;16};1;$x}@substring{@mod{$1;16};1;$x};?=' <<< '0 255 127'
#00ff7f
যদি নিম্ন-কেসটিও অনুমোদিত হয় তবে 10 বাইট:
psb6\['#+]
ব্যবহার:
blsq ) "72 61 139"psb6\['#+]
"#483d8b"
আপনার যদি মারাত্মকভাবে উচ্চ-কেসের প্রয়োজন হয় তবে যুক্ত করুন ZZ
:
blsq ) "72 61 139"psb6\['#+]ZZ
"#483D8B"
আপনি যদি স্ট্রিংয়ের মতো পূর্ণসংখ্যা না পান তবে সাথে যান:
blsq ) {72 61 139}b6\['#+]
"#483d8b"
ব্যাখ্যা:
ps -- parse string
b6 -- to hex
\[ -- concat
'#+] -- prepend #
বোনাস:
এটিকে আবার রূপান্তর করতে এটি ব্যবহার করুন:
blsq ) "#483d8b"[-2cob6
{72 61 139}
print("#"+3*"%.2X"%tuple(int(n) for n in input().split()))
প্রতিহত করতে পারেনি:
[dan@danbook:code_golf/int_to_hex]$ python3.3 int_to_hex.py
176 11 30
#B00B1E
f = StringJoin["#", IntegerString[#, 16, 2]] &
rgbs = {{72, 61, 139}, {75, 0, 130}, {0, 255, 127}}
f /@ rgbs // Column
# 483d8b
# 4b0082
# 00ff7f
h=>'#'+h.split` `.map(x=>(x<16?0:'')+(x*1).toString(16)).join``
x=>(x<16?0:'')+x.toString(16)
r=
শুরুতে অন্তর্ভুক্ত করার দরকার নেই । এটি এখনও একটি বেনামি ফাংশন হিসাবে একটি ফাংশন হিসাবে গণ্য করা হয়, যেহেতু আপনি কোনও কিছু বরাদ্দ না করেই এটিকে আবেদন করতে পারেন।
x=>(x<16?0:'')+(x*1).toString(16)
সেখানে ইতি এবং আমার প্রথম এক বর্তমানে জন্য ভুল মান দিতে x>9
।
#7261139
পরিবর্তে ফিরে আসে #483D8B
।
'#'+''.join([hex(int(i))[2:].upper() for i in input()])