বাশ - 46
সূচি তালিকা
আপনি 4 টি আলাদাভাবে গল্ফযুক্ত সংস্করণ পাবেন:
echo $[_=32,`printf "%d<<(_-=8)|" ${1//./ }`0] # 46chr
set -- ${1//./ };echo $[$1<<24|$2<<16|$3<<8|$4] # 47chr
v=('|%d<<'{24,16,8,0});printf -vv "${v[*]}" ${1//./ };echo $[0$v] # 65chr
mapfile -td. i<<<$1;for((a=o=0;a<4;o+=i[a]<<(3-a++)*8)){ :;};echo $o # 68chr
নতুন সংস্করণ! 2018-11-15 আরও গল্ফড, 46 চর
echo $[_=32,`printf "%d<<(_-=8)|" ${1//./ }`0]
ব্যাখ্যা
- আমি ব্যবহার করতাম
$_
for more golfing.
- সিনট্যাক্স স্পেস দ্বারা
${1//./ }
প্রতিটি বিন্দু প্রতিস্থাপন করবে.
.
- সুতরাং
printf
কিছু রেন্ডার হবে192<<(_-=8)|168<<(_-=8)|1<<(_-=8)|1<<(_-=8)|
- তারপরে আমরা
0
শেষ OR পরে একটি যুক্ত করব |
এবং
- প্রিসেট
_
থেকে 32 । ব্যাশ কনস্ট্রাক্ট বাম থেকে ডানে, তাই থেকে পড়তে হবে $((_-=8))
করতে 24
1 ম এ স্থানান্তর , 16
সেকেন্ড, ইত্যাদি।
কর্মে:
set -- 192.168.1.1
echo $[_=32,`printf "%d<<(_-=8)|" ${1//./ }`0]
3232235777
মজাদার জন্য: $_
কন্টেন্ট পাওয়ার চেষ্টা করা হচ্ছে এর পরে:
echo $_
3232235777
; -b
set -- 192.168.1.1
echo $_ $[_=32,`printf "%d<<(_-=8)|" ${1//./ }`0] $_
192.168.1.1 3232235777 0
ঠিক আছে, এটা সঠিক 32 - 4 x 8 = 0
একটি অনুষ্ঠানে:
ip2int() {
echo $[_=32,`printf "%d<<(_-=8)|" ${1//./ }`0]
}
ip2int 192.168.1.1
3232235777
ip2int 255.255.255.255
4294967295
ip2int 0.0.0.0
0
বা লুপে: -> 60
ip2int() {
for i;do
echo $[_=32,`printf "%d<<(_-=8)|" ${i//./ }`0]
done
}
ip2int 192.168.1.1 10.10.104.36 8.8.8.8 1.1.1.1 255.255.255.255 0.0.0.0
3232235777
168454180
134744072
16843009
4294967295
0
বাশ (v4.1 +): 47
প্রথম পোস্ট
set -- ${1//./ };echo $[$1<<24|$2<<16|$3<<8|$4]
ব্যাখ্যা:
- সিনট্যাক্স স্পেস দ্বারা
${1//./ }
প্রতিটি বিন্দু প্রতিস্থাপন করবে ।.
set --
অবস্থানগত পরামিতি সেট করুন ( $@=($1 $2 $3...)
)
- সুতরাং
set -- ${1//./ }
বিভক্ত হবে $1
বিন্দু এবং সেট $1
, $2
, $3
এবং $4
যদি স্ট্রিং containg 3
বিন্দু (এবং কোন শূন্যস্থান)।
কর্মে:
set -- 192.168.1.1
set -- ${1//./ };echo $[$1<<24|$2<<16|$3<<8|$4]
3232235777
বা একটি ফাংশনে:
ip2int() {
set -- ${1//./ }
echo $[$1<<24|$2<<16|$3<<8|$4]
}
ip2int 192.168.1.1
3232235777
ip2int 0.0.0.0
0
বা লুপে: -> 61
for i;do set -- ${i//./ };echo $[$1<<24|$2<<16|$3<<8|$4];done
কর্মে:
ip2int() {
for i;do
set -- ${i//./ }
echo $[$1<<24|$2<<16|$3<<8|$4]
done
}
ip2int 192.168.1.1 10.10.104.36 8.8.8.8 1.1.1.1 0.0.0.0
3232235777
168454180
134744072
16843009
0
অন্য সংস্করণটি আলাদাভাবে গল্ফ করেছে: 65
v=('|%d<<'{24,16,8,0});printf -vv "${v[*]}" ${1//./ };echo $[0$v]
নমুনা:
ip2int() {
v=('|%d<<'{24,16,8,0});printf -vv "${v[*]}" ${1//./ };echo $[0$v]
}
ip2int 255.255.255.255
4294967295
ip2int 10.10.104.36
168454180
একটি লুপে (+14): 82
ip2int() {
for i;do
v=('|%d<<'{24,16,8,0})
printf -vv "${v[*]}" ${1//./ }
echo $[0$v]
done
}
* বা আরও কিছু কদর্য: 70 *
v=('|%d<<'{24,16,8});printf -vv "${v[*]}" ${1//./ };echo $[0${v%<<2*}]
যেখানে printf
কিছুটা স্ট্রিং দিন যেমন |192<<24 |168<<16 |1<<8|1<<24 |0<<16 |0<<8
আমাদের শেষ পর্যন্ত কাটাতে হবে <<2...
।
mapfile
লম্বা: 68 সঙ্গে গল্ফড
ip2int() {
mapfile -td. i<<<$1;for((a=o=0;a<4;o+=i[a]<<(3-a++)*8)){ :;};echo $o
}
বা লুপ সহ: 82
ip2int() {
for a;do
mapfile -td. i<<<$a;for((a=o=0;a<4;o+=i[a]<<(3-a++)*8)){ :;};echo $o
done
}