কুকুর বাশ ইউটিলিটি প্রয়োগ করুন


10

dog কমান্ড-লাইন ইউটিলিটি যা একটি স্বেচ্ছাসেবী আর্গুমেন্ট গ্রহণ করে, যার মধ্যে প্রথমটি লেখাটি লেখা হয় এবং অন্যটি নির্বিচারে অনেকগুলি ফাইল হয়।

dogউপযোগ এই ফাইলগুলি উপর সমান অংশ পাঠ্য বিভক্ত হবে। যদি বাকীটি থাকে nতবে প্রথম nফাইলগুলি একটি অতিরিক্ত বাইট পায়

dogএর বিপরীত cat, যেমন, ফোরাল x, নিম্নলিখিতটি ধারণ করা উচিত।

$> dog x a.txt b.txt ...
$> cat a.txt b.txt ...
x$>

যেখানে ...নির্বিচারে অনেকগুলি ফাইল নির্দেশ করে।

একটি উদাহরণ (12 বাইট, 3 ফাইল, সমানভাবে বিভক্ত করা যেতে পারে):

$> ./dog.py "Dogs vs Cats" a.txt b.txt c.txt
$> cat a.txt
Dogs$> cat b.txt
 vs $> cat c.txt
Cats$> cat a.txt b.txt c.txt
Dogs vs Cats$> 

অবশিষ্টের সাথে একটি উদাহরণ (১৩ বাইট, 5 ফাইল, বাকি 3):

9$>./dog.py "0123456789abc" a.txt b.txt c.txt d.txt e.txt
$> cat a.txt
012$> cat b.txt
345$> cat c.txt
678$> cat d.txt
9a$> cat e.txt
bc$> cat a.txt b.txt c.txt d.txt e.txt
0123456789abc$>

এটি নিহিত, তবে কেবল ডাবল চেক করার জন্য: 1) যুক্তিগুলি কি কমান্ড লাইনের মাধ্যমে আসতে হবে? 2) আমাদের কি সবসময় ফাইলগুলিতে আউটপুট দিতে হয়?
Sp3000

@ এসপি 3000 হ্যাঁ, 1 এবং 2
ক্যারিডরক


2
আমি এই সাইটটি থেকে ইদানীং (ট্যাক, কুকুর, ...) অদ্ভুতভাবে নামযুক্ত ইউনিক্স ইউটিলিটিগুলি সম্পর্কে শিখছি।
kirbyfan64sos

1
@ কিরবিফ্যান64সস এবং ক্যারিডর্ক: tacআসল
ডিএলসক

উত্তর:


4

পাইথ - 12 বাইট

.wMC,cl.zz.z

বিল্টইন স্প্লিট ফাংশন ব্যবহার করে এবং তারপরে রাইটিং ফাংশনে স্প্ল্যাট-ম্যাপ ব্যবহার করে। অনলাইনে কাজ করে না।



1

পিএইচপি, 107 বাইট

গল্ফড কোড:

for($i=1;++$i<$argc;fputs(fopen($argv[$i],w),substr($s=$argv[1],($i-2)*$l=ceil(strlen($s)/($argc-2)),$l)));

বিস্তারিত কোড:

$len = ceil(strlen($argv[1])/($argc - 2));
for ($i = 2; $i < $argc; $i ++) {
    $fh = fopen($argv[$i], 'w');
    fputs($fh, substr($argv[1], ($i - 2) * $len, $len));
    fclose($fh);          // omitted in the golfed version
}

0

খাঁটি বাশ: 97

s=$1;shift;for((l=${#s}/$#,m=${#s}-l*$#,i=1;i<=$#;p+=q,i++)){
printf "${s:p:q=i>m?l:l+1}">${!i};}

একটি ফাংশন হিসাবে: ( p=শুধুমাত্র দ্বিতীয় রান জন্য প্রয়োজনীয়)

dog() { p=
    s=$1;shift;for((l=${#s}/$#,m=${#s}-l*$#,i=1;i<=$#;p+=q,i++)){
    printf "${s:p:q=i>m?l:l+1}">${!i};}
}

টেস্ট

$> rm *
$> dog "Dogs vs Cats" a.txt b.txt c.txt
$> ls -l
total 12
-rw-r--r-- 1 user user 4 May 13 22:09 a.txt
-rw-r--r-- 1 user user 4 May 13 22:09 b.txt
-rw-r--r-- 1 user user 4 May 13 22:09 c.txt
$> cat {a,b,c}.txt;echo
Dogs vs Cats
$> 

সমস্ত ফাইল 4 বাইট লেন এবং ডান ক্রমে সংক্ষিপ্ত হয়, "কুকুর বনাম বিড়াল" ধারণ করে ।

$> rm *
$> dog "$(printf "%s" {0..9} {a..c})" {a..e}.txt 
$> ls -l
total 20
-rw-r--r-- 1 user user 3 May 13 22:09 a.txt
-rw-r--r-- 1 user user 3 May 13 22:09 b.txt
-rw-r--r-- 1 user user 3 May 13 22:09 c.txt
-rw-r--r-- 1 user user 2 May 13 22:09 d.txt
-rw-r--r-- 1 user user 2 May 13 22:09 e.txt
$> cat *;echo
0123456789abc
$> 

ফার্স্ট ফাইলগুলি 3 বাইট লেন এবং শেষ 2 টি বর্ণমালা অনুসারে সংমিশ্রিত থাকে "0123456789abc" ধারণ করে ।

ব্যাখ্যা (অব্যাহত):

আপনি আঘাত: declare -f dog, বলবে

$> declare -f dog
dog () 
{ 
    p=;
    s=$1;
    shift;
    for ((l=${#s}/$#,m=${#s}-l*$#,i=1; i<=$#; p+=q,i++))
    do
        printf "${s:p:q=i>m?l:l+1}" > ${!i};
    done
}

এটি লেখা যেতে পারে:

dog2 () 
{ 
    position=0;
    string=$1;
    shift;
    partLen=$((${#string}/$#));
    oneMore=$((${#string}-partLen*$#));
    for ((i=1; i<=$#; i++))
    do
        if ((i<=oneMore)); then
            partQuant=$((partLen+1));
        else
            partQuant=$partLen;
        fi;
        printf "${string:position:partQuant}" > ${!i};
        ((position+=partQuant));
    done
}

0

রুবি, 93 87 বাইট

কমান্ড লাইন আর্গুমেন্ট ব্যবহার করে সম্পূর্ণ প্রোগ্রাম।

যদি আমি s.slice!স্ট্রিংটি পরিবর্তিত করতে পারি তবে আমি s[c..-1]এটির প্রয়োজনের পরিবর্তে এটি করতাম , তবে রুবি আপনাকে প্রথমে নকল না করে আরজিভি থেকে স্ট্রিংগুলি পরিবর্তন করতে দেয় না

s,*t=$*
d,r=s.size.divmod t.size
t.map{|e|open(e,?w)<<s[0,c=(0>r-=1)?d:d+1];s=s[c..-1]}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.