ডাব্লুসি কোর্টিল পুনরায় পরিমার্জন করুন


27

এই চ্যালেঞ্জ অনুরূপ এই পুরানো এক কিন্তু বৈশিষ্ট কিছু অস্পষ্ট অংশের সঙ্গে পৌঁছেছে এবং কম কঠোর ইনপুট / আউটপুট প্রয়োজনীয়তা।


শুধুমাত্র মুদ্রণযোগ্য এএসসিআইআই এবং নিউলাইনগুলি সমন্বিত স্ট্রিংয়ের একটি ইনপুট দেওয়া হয়েছে, এর বিভিন্ন মেট্রিকগুলি (বাইট, শব্দ, লাইন গণনা) আউটপুট দেয়।

আপনার যে মেট্রিকগুলি অবশ্যই আউটপুট করতে হবে তা হ'ল:

  • বাইট গণনা যেহেতু ইনপুট স্ট্রিং ASCII এর মধ্যে থাকে তাই এটি অক্ষর গণনাও।

  • শব্দ গণনা. এটি wcকোনও "শব্দের সংজ্ঞা:" অ-হোয়াইটস্পেসের কোনও ক্রম। উদাহরণস্বরূপ, abc,def"ghi"একটি "শব্দ"।

  • লাইন গণনা। এটি স্ব-ব্যাখ্যামূলক। ইনপুটটিতে সর্বদা একটি পেছনের নিউলাইন থাকবে, যার অর্থ লাইন গণনা "নিউলাইন গণনা" এর সমার্থক। একক ট্রেলিং নিউলাইন ছাড়া আর কখনও হবে না।

আউটপুট অবশ্যই হুবহু ডিফল্ট wcআউটপুট প্রতিলিপি তৈরি করতে হবে (ফাইলের নাম বাদে):

llama@llama:~$ cat /dev/urandom | tr -cd 'A-Za-z \n' | head -90 > example.txt
llama@llama:~$ wc example.txt
  90  165 5501 example.txt

নোট করুন যে লাইন গণনাটি প্রথমে আসে, তারপরে শব্দের সংখ্যা এবং শেষ পর্যন্ত বাইট গণনা। তদুপরি, প্রতিটি গণনা অবশ্যই ফাঁকা স্থানের সাথে বাম-প্যাডযুক্ত হওয়া উচিত যেগুলি সমস্ত একই প্রস্থ। উপরের উদাহরণে, 55014 দীর্ঘ সংখ্যা সহ "দীর্ঘতম" সংখ্যাটি তাই 165একটি স্থান এবং 90দুটি সহ প্যাডযুক্ত । অবশেষে, সংখ্যাগুলি অবশ্যই প্রতিটি সংখ্যার মধ্যে একটি স্থান সহ একক স্ট্রিংয়ে যুক্ত হতে হবে।

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

(ওহ, এবং যাইহোক ... আপনি wcনিজের উত্তরে কমান্ডটি ব্যবহার করতে পারবেন না case যদি ইতিমধ্যে এটি সুস্পষ্ট না হয়))

পরীক্ষার কেসগুলি ( \nএকটি নিউলাইন প্রতিনিধিত্ব করে; আপনার বিকল্পের জন্য অতিরিক্ত ট্রেলিং নিউলাইনও প্রয়োজন হতে পারে):

"a b c d\n" -> "1 4 8"
"a b c d e f\n" -> " 1  6 12"
"  a b c d e f  \n" -> " 1  6 16"
"a\nb\nc\nd\n" -> "4 4 8"
"a\n\n\nb\nc\nd\n" -> " 6  4 10"
"abc123{}[]()...\n" -> " 1  1 16
"\n" -> "1 0 1"
"   \n" -> "1 0 4"
"\n\n\n\n\n" -> "5 0 5"
"\n\n\na\nb\n" -> "5 2 7"

2
আমি ভিটিসি এর পুরানোটিকে এইর এক টাকা হিসাবে করব কারণ এটি একটি আরও ভাল চ্যালেঞ্জ।
মেগো

খালি ইনপুট সমর্থন করা উচিত?
টন হসপেল

আমি তা মনে করি না, তিনি বলেছিলেন সমস্ত ইনপুট। N দিয়ে শেষ হবে।
ক্যালকুলেটরফলাইন

উত্তর:


8

পার্ল, 49 বাইট

জন্য +3 যোগ করা হয়েছে -an0

আর্গুমেন্ট হিসাবে STDIN বা 1 বা একাধিক ফাইলের নাম ইনপুট করুন। হিসাবে চালানperl -an0 wc.pl

wc.pl:

/\z/g;pos=~//;printf"%@+d %@+d $`
",y/
//,~~@F

ব্যাখ্যা:

-n0      slurps the whole input into $_ and says we will do our own printing
-a       tells perl to split the input on whitespace into array @F
/\z/g    Matches the absolute end of the input. g modifier so the position 
         is remembered in pos which will now contain the input length
pos=~//  An empy regex repeats the last succesful match, so /\z/ again.
         After that $` will contain the the number of input characters and
         the array @+ will contain the length of this number
printf   All preparation is complete, we can go print the result
"%@+d"   will become e.g. %6d if the number of characters is a number of
         length 6, so lines and words will get printed right aligned 
         in a field of length 6.
$`       $` we can directly interpolate since it won't contain a %
y/\n//   Count the number of newlines in $_
~~@F     The array of words @F in scalar context gives the number of words

7

পাইথন 2, 100 77 বাইট

এই দ্রবণটি একটি পাইথন ফাংশন যা বহু-লাইন স্ট্রিং গ্রহণ করে এবং প্রয়োজনীয় গণনাগুলি স্টাডাউটে প্রিন্ট করে। নোট করুন যে আমি একটি ফর্ম্যাট স্ট্রিং তৈরি করতে একটি ফর্ম্যাট স্ট্রিং ব্যবহার করি (যার জন্য %%প্রথম বিন্যাসের স্থানধারককে এড়াতে প্রয়োজন )।

সম্পাদনা করুন: ডেনিসের মুদ্রণ অপ্টিমেশনের কারণে 23 বাইট সংরক্ষণ করা হয়েছে।

def d(b):c=len(b);a='%%%us'%len(`c`);print a%b.count('\n'),a%len(b.split()),c

মিনিফায়ারের আগে, এটি দেখতে এটির মতো দেখাচ্ছে:

def wc(text) :
    size = len(text);
    numfmt = '%%%us' % len(`size`);
    print numfmt % text.count('\n'), numfmt % len(text.split()), size

7

পাইথ, 21 বাইট

jdm.[;l`lQ`ld[@bQcQ)Q

পরীক্ষা স্যুট

পাইথের এখানে খুব সুন্দর কিছু বিল্ট-ইন রয়েছে। আমরা [স্ট্রিংয়ে নতুনলাইনগুলির একটি ( @bQ), স্ট্রিংয়ের শব্দ ( cQ)) এবং স্ট্রিং নিজেই ( Q) তৈরি করে শুরু করি। তারপরে, আমরা .[প্রতিটি স্ট্রিংয়ের দৈর্ঘ্য ( ld) স্পেস সহ ( ;এই প্রসঙ্গে) অক্ষরের সংখ্যার দৈর্ঘ্য ( ) দিয়ে প্যাড করি l`lQ। শেষ অবধি, স্পেসে যোগ দিন ( jd)।


6

POSIX awk, 79 75 67 65 বাইট

{w+=NF;c+=length+1}END{d=length(c)"d %";printf"%"d d"d\n",NR,w,c}

সম্পাদনা: 4 টি বাইট সংরক্ষিত হয়েছে যেহেতু পসআইএক্স lengthঅনুরোধের অংশটি ছাড় দিয়ে একটি খালি , 7 টি বাইট সংরক্ষণ করেছে এবং যুক্ত d %করার জন্য ডোরকনব্বের টিপকে ধন্যবাদ জানিয়ে দুটি বাইট সংরক্ষণ করেছে d

এটি মূলত জিএনইউ অ্যাডকের জন্য ছিল, তবে সর্বোত্তম আমি বলতে পারি, এটিতে কেবল পসিক অজড কার্যকারিতা ব্যবহার করা হয়।

আরও ভাল ফর্ম্যাট করা:

gawk '{
  w += NF
  c += length($0) + 1  # length($0) misses the newline
}
END {
  d = length(c) # GNU awk's length returns the length of string representation of number
  printf "%"d"d %"d"d %d\n", NR, w, c
}'

@ ডুরকনব ঠিক আছে, তার জন্য ধন্যবাদ। আপনি কি আড্ডার কথোপকথন দেখেছেন? এছাড়াও, যে প্রশ্ন থেকে স্নাতক উচিত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী-প্রস্তাবিত করার FAQ
মুরু

1
ওহ, আমি আপনাকে আড্ডায় দেখিনি; আপনার উত্তরটি আমার ইনবক্সে সবেমাত্র আপ হয়েছে: পিআইই সেই প্রশ্নের সাথে [ফ্যাক-প্রস্তাবিত] যুক্ত করেছিলেন, তাই সম্ভবত আমি এটিকে [ফ্যাক্স] এ আপগ্রেড করার আগে মোড রুমে পরীক্ষা করব।
ডুরকনব

1
সেট dথেকে length(c)"d %"আপনি পরিবর্তন করতে অনুমতি থাকবে printfকরার "%"d d"d\n", যা দুই বাইট পরিমাণ সঞ্চয় হয়।
ডুরকনব

1
@ ডুরকনব সত্যই, ধন্যবাদ! অনুমান করুন এটি বহিরাগত নয় , তবে মুড়িটি যা বাইট সংরক্ষণ করে।
মুরু

6

সিরিয়াসলি , 39 বাইট

"
 "╩╜l;$l╝@╜sl'
╜ck`#╛#"{:>%d}"%f`M' j

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা (নতুন লাইনের সাথে প্রতিস্থাপন করা হয় \n):

"\n "╩╜l;$l╝@╜sl'\n╜ck`#╛#"{:>%d}"%f`M' j
"\n "                                      push a string containing a newline and a space
     ╩                                     push input to register 0 (we'll call it s)
      ╜l;                                  push two copies of len(s) (byte count)
         $l╝                               push len(str(len(s))) to register 1
                                            (this will serve as the field width in the output)
            @╜sl                           push word count by getting the length of the list formed by
                                            splitting s on spaces and newlines
                '\n╜c                      count newlines in input
                     k                     push stack to list
                      `#╛#"{:>%d}"%f`M     map:
                       #                     listify
                        ╛#                   push reg 1 (field width), listify
                          "{:>%d}"           push that string
                                  %          do old-style string formatting for field width
                                   f         do new-style string formatting to pad the field appropriately
                                      ' j  join on spaces

আমি এই ভাষার জন্য কোনও দলিল সরবরাহ করতে পারি না, আপনি কি কোনও লিঙ্ক সরবরাহ করতে পারেন?
জনয়ে


3

অ্যাপলস্ক্রিপ্ট, 253 বাইট

এটি ধরে নিয়েছে যে অ্যাপলস্ক্রিপ্টের পাঠ্য আইটেমের সীমানার স্থানটিতে সেট করা আছে (যদি আমাকে সেই ধারণাটি জোর করার জন্য জিনিসগুলি গণনা করতে হয় তবে আমি এটি যুক্ত করব)।

set w to(display dialog""default answer"")'s text returned
set x to b(w)
set y to w's text item's number
set z to w's paragraph's number
a(x,z)&z&a(x,y)&y&" "&x
on a(x,n)
set o to" "
repeat b(x)-b(n)
set o to o&" "
end
o
end
on b(n)
count(n as text)
end

3

সিজেম, 31 26 বাইট

q_)/_S*S%@_]:,:s),f{Se[}S*

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

q_                         e# Read all input from STDIN and push two copies.
  )                        e# Pop the last character (linefeed) of the second copy.
   /                       e# Split the remaining string at linefeeds.
    _                      e# Push a copy.
     S*                    e# Join the copy, separating by spaces.
       S%                  e# Split at runs of spaces.
         @_                e# Rotate the original input on top and push a copy.
           ]               e# Wrap all four items in an array.
            :,             e# Get the length of each item.
              :s           e# Cast the lengths (integers) to strings.
                )          e# Pop the last length (byte count).
                 ,         e# Get the number of digits.
                  f{Se[}   e# Left-pad all three length with spaces to that length.
                        S* e# Join, separating by spaces.

3

জুলিয়া, 112 81 বাইট

f(s,n=endof,l="$(n(s))",g=r->lpad(n(split(s,r))-1,n(l)))=g(r"\n")" "g(r"\S+")" "l

এটি এমন একটি ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে।

আমরা ফাংশন আর্গুমেন্ট হিসাবে নিম্নলিখিতটি সংরক্ষণ করি:

  • n = endof ফাংশন, যা একটি সূচকযোগ্য সংগ্রহের শেষ সূচক পায় (এক্ষেত্রে স্ট্রিংয়ের দৈর্ঘ্য)
  • l = "$(n(s)), ইনপুটটির দৈর্ঘ্য ইন্টারপোলেশন ব্যবহার করে স্ট্রিতে রূপান্তরিত হয়েছিল
  • একটি ল্যাম্বডা ফাংশন gযা নিয়মিত অভিব্যক্তি গ্রহণ করে এবং দৈর্ঘ্যটি প্রদান করে - 1 সেই ইনজেক্টের ইনপুট বিভক্তের দৈর্ঘ্যের সাথে মেলে ফাঁকা জায়গায় বাম প্যাডযুক্ত l

আমরা ব্যবহার করে রেখার g(r"\n")সংখ্যা এবং শব্দের সাহায্যে সংখ্যাটি পেয়ে g(r"\S+")থাকি, তারপরে আমরা lস্পেস দ্বারা বিস্মৃত হয়ে একসাথে যোগদান করি ।

ডেনিসের জন্য 31 বাইট সংরক্ষণ করা!


2

এমএটিএল, 38 বাইট

'\n'32cZtttnGnw-wPZvPYbnqbnvvV!3Z"vX:!

আপনি এটি অনলাইন চেষ্টা করতে পারেন ! যদিও এত দিন হওয়া উচিত নয় ...

ব্যাখ্যা, গণনার জন্য,

'\n'32cZt  %// Takes implicit input and replaces any \n with a space
tt         %// Duplicate that string twice
nGnw-w     %// Length of the string with \n's minus length with spaces to give number of \n's
PZvPYbnq   %// Take string with spaces, flip it, remove leading spaces, flip it again,
           %// split on spaces, find length and decrement for number of words
bn         %// get length of string with spaces, the number of characters

শেষ অংশটি আউটপুট ফর্ম্যাট করে

vvV!       %// concatenate the 3 numbers to a column vector, convert to string and transpose
3Z"v       %// make string '   ' and concatenate on the bottom of previous string
X:!        %// linearise and transpose to get correct output (impicitly printed)

সুন্দরভাবে সম্পন্ন! সম্ভবত এটি অনলাইন লিঙ্কটিতে "ডিবাগ" পতাকাটি সরাবেন ?
লুইস মেন্ডো

আহ! উফ! সতর্ক থাকুন জন্য ধন্যবাদ!
ডেভিড

আমি মনে করি আপনি এর !3Z"vX:!দ্বারা প্রতিস্থাপন করতে পারেন Z{Zc( cellstrএরপরে strjoin)
লুইস মেন্ডো

1

জাভাস্ক্রিপ্ট (ES6), 115 বাইট

s=>[/\n\/g,/\S+/g,/[^]/g].map(r=>l=(s.match(r)||[]).length).map(n=>(' '.repeat(99)+n).slice(-`${l}`.length)).join` `

কোন ইনপুট প্রয়োজন হয় না। বিন্যাসটি বেদনাদায়ক ছিল। প্যাডিংয়ের পরিমাণের উপর যদি একটি উচ্চতর সীমা থাকে তবে আমি (' '.repeat(99)+n)কিছুটা ছোট করতে পারতাম যেমন ` ${n}`


আমার মনে হয় আপনি প্রতিস্থাপন করতে পারেন /[^]/gসঙ্গে /./gসংরক্ষণ দুই বাইট
প্যাট্রিক রবার্টস

@ পেট্রিকরোবার্টস না, এটি নিউলাইনগুলি এড়িয়ে চলেছে, তাই আমার গণনা বন্ধ থাকবে।
নীল

আহ, এর আগে কখনই লক্ষ্য করিনি।
প্যাট্রিক রবার্টস

1

পাওয়ারশেল, 140 বাইট

param($a)$c="$((($l=($a-split"`n").Count-1),($w=($a-split"\S+").Count-1),($b=$a.length)|sort)[-1])".Length;
"{0,$c} {1,$c} {2,$c}"-f$l,$w,$b

(নিউলাইন স্পষ্টতার জন্য বাকি: ডি)

প্রথম লাইন ইনপুট নেয় $aএবং তারপরের অংশটি সমস্তই একটি বিবৃতি। আমরা কিছু স্ট্রিংয়ের$c সমান সেট করছি । এটি আমাদের প্রয়োজনীয় প্যাডিং তৈরি করবে। স্ট্রিংয়ের অভ্যন্তরে একটি তাত্ক্ষণিক কোড ব্লক , সুতরাং স্ট্রিংটিতে মূল্যায়ন করার আগে সেই কোডটি কার্যকর করা হবে। .length$(...)

কোড ব্লকে আমরা |sortকমান্ডের মাধ্যমে তিনটি আইটেম প্রেরণ করছি এবং তারপরে সবচেয়ে বড়টি নিচ্ছি (...)[-1]। এখানেই আমরা কলামগুলি সঠিক প্রস্থে পেতে নিশ্চিত করছি। তিনটি আইটেম হ'ল $lলাইন গণনা, যেখানে আমরা -splitনিউলাইনগুলিতে, $wশব্দের গণনা, যেখানে আমরা -splitসাদা স্থান এবং $bদৈর্ঘ্যে।

দ্বিতীয় লাইনটি -fঅপারেটর (যা সিউডো-শর্টহ্যান্ড String.Format()) ব্যবহার করে আমাদের আউটপুট । এটি স্ট্রিংগুলিতে প্রসারিত ভেরিয়েবলগুলি সন্নিবেশ করার আরেকটি উপায়। এখানে, আমরা বলছি যে আমরা আউটপুটটি সমস্ত বামে প্যাড করতে চাই যাতে প্রতিটি কলাম $cপ্রশস্ত থাকে। প্যাডিং স্পেসের মাধ্যমে সম্পন্ন করা হয়। 0, 1, এবং 2মিলা $l, $wএবং $bতাই লাইন গণনা, শব্দ গণনা, এবং বাইট গণনা উপযুক্তভাবে প্যাডেড এবং আউটপুট আছে, বিন্যাস অপারেটরের আর্গুমেন্ট।

নোট করুন যে এটির জন্য স্ট্রিংটি ইতিমধ্যে প্রসারিত নতুনলাইনগুলির প্রয়োজন (যেমন, Get-Contentকোনও পাঠ্য ফাইল বা কোনও কিছুর উপর একটি করা এবং তারপরে পাইপিং করা বা কোনও ভেরিয়েবলের মধ্যে সেভ করা, তারপরে এই ইনপুটটিতে এই কোডটি কল করা), বা পাওয়ার শেল- ব্যাকটিক্স সহ স্টাইলযুক্ত পালানোর অক্ষর ( `nপরিবর্তে এর অর্থ \n)।

উদাহরণ

PS C:\Tools\Scripts\golfing> .\reimplement-wc.ps1 "This line`nis broken`ninto three lines.`n"
 3  7 38


0

রুবি, 108 বাইট

f=->s{a=[s.count($/),s.split(/\S+/).size-1,s.size].map(&:to_s)
a.map{|b|" "*(a.map(&:size).max-b.size)+b}*" "}

0

পার্ল, 71 62 61 বাইট

+1 এর জন্য অন্তর্ভুক্ত -n

$;=length($b+=y///c);$w+=split$"}{printf"%$;d %$;d $b",$.,$w

মন্তব্য করেছে:

while (<>) {                         # implicit because of -n
    $; = length(                     # printf formatting: width
       $b += y///c                   # count characters
    );
    $w += split $"                   # count words
}{                                   # explicit: end while, begin END block
    printf "%$;d %$;d $b", $., $w    #  $. = $INPUT_LINE_NUMBER
}                                    # implicit because of -n
  • আরেকটি বাইট সংরক্ষণ করুন, আবার @ টনহোপেলকে ধন্যবাদ।
  • টনহোপেল আমাকে ব্যবসায়ের কয়েকটি কৌশল দেখিয়ে 9 টি বাইট সংরক্ষণ করুন!

ব্যবসায়ের কয়েকটি কৌশল: y///cএকটি সংক্ষিপ্ত দৈর্ঘ্যের হিসাবে ব্যবহার করুন $_split$"স্কেলার প্রসঙ্গে শব্দগুলির সংখ্যা দেয় $_$;পরিবর্তে একটি বিরামচিহ্ন ভেরিয়েবল ব্যবহার করে $Wআপনি dবিন্যাস স্ট্রিংয়ের মধ্যে ইন্টারপোলেশন পরে ঠিক রাখতে পারেন । তারপর আপনি ড্রপ করতে পারেন dমধ্যে $Wএবং প্রথম বন্ধনী ড্রপ। এবং -pকিছুই লাভ হয় না -n, কেবল printfপ্রিন্টিং করতে দিন (স্বাদে একটি নতুন লাইন যুক্ত করুন)
টন হসপেল

দুর্দান্ত, আমি এটি প্রশংসা করি!
কেনে

একটি গণনার শৃঙ্খলার মতো $a=foo;$b=bar$aসাধারণত $b=bar($a=foo)একটি বাইট সংরক্ষণ করা যায়। এখানে $;এবং প্রযোজ্য $b$;প্রতিবারই
গণনা করা

ধন্যবাদ! আমি এটি উপেক্ষা করেছি কারণ দুটি ব্লক রয়েছে ...
কেনে

0

লুয়া, 74 66 বাইট

Golfed:

t=arg[1]_,l=t:gsub('\n','')_,w=t:gsub('%S+','')print(l,w,t:len())

Ungolfed:

text = arg[1]
_,lines = text:gsub('\n','')
_,words = text:gsub('%S+','')
print(lines, words, text:len())

কমান্ড লাইন আর্গুমেন্টের মাধ্যমে ইনপুট প্রাপ্ত করে।

arg[1]বাইটগুলি সংরক্ষণ করার জন্য আমরা প্রথম যুক্তির ( ) নামকরণ করি । string.gsubপরিবর্তিত সংখ্যার পাশাপাশি পরিবর্তিত স্ট্রিংটি ফেরত দেয়, সুতরাং আমরা এটি প্রথমে '\n'(নিউলাইনগুলি) গণনা করার জন্য ব্যবহার করছি , তারপরে '%S+'(এক বা একাধিক অ-হোয়াইটস্পেস অক্ষরের উদাহরণ, যতটা সম্ভব শব্দগুলি)। প্রতিস্থাপনের স্ট্রিংয়ের জন্য আমরা যা চাই তা ব্যবহার করতে পারি, তাই ''বাইটগুলি সংরক্ষণ করতে আমরা খালি স্ট্রিং ( ) ব্যবহার করি । তারপরে আমরা কেবল string.lenস্ট্রিংয়ের দৈর্ঘ্য, যেমন বাইটের সংখ্যাটি অনুসন্ধান করতে ব্যবহার করি । তারপরে, শেষ পর্যন্ত, আমরা এটি সমস্ত মুদ্রণ করি।


যদিও লাইন এবং শব্দের মানগুলির কোনও বাম প্যাডিং আমি দেখতে পাচ্ছি না
টন হসপেল

0

রেটিনা, 65

^((\S+)|(¶)|.)*
$#3 $#2 $.0
+`(\b(.)+ )(?!.*\b(?<-2>.)+$)
a$1
a
<space>

অনলাইনে চেষ্টা করে দেখুন!

প্রথম পর্যায়ে আসল ডাব্লুসি প্রোগ্রাম, এর বাকি অংশগুলি প্যাডিংয়ের জন্য। aস্থানধারক জিনিস সম্ভবত অপ্রয়োজনীয়, এবং দলের কিছু সম্ভবত একটি বিট সরলীকৃত করা যেতে পারে।


0

হাস্কেল, 140 বাইট

import Text.Printf
w h=let{l=length;s=show.l;c=s h;m=s.words$h;n=s.lines$h;f=maximum$map l[c, m, n];p=printf"%*s"f}in p n++' ':p m++' ':p c

প্রসারিত সংস্করণটি এখানে বিস্তৃত ভেরিয়েবল এবং ফাংশন নাম সহ:

import Text.Printf

wc str =
  let charcount = show.length $ str
      wordcount = show.length.words $ str
      linecount = show.length.lines $ str
      fieldwidth = maximum $ map length [charcount, wordcount, linecount]
      printer = printf "%*s" fieldwidth
  in printer linecount ++ (' ' : printer wordcount ++ (' ' : printer charcount))

এটি এমন একটি ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে। এটি কেবলমাত্র শব্দের সংখ্যা (রেস। ) পাওয়ার জন্য Preludeফাংশনগুলি ব্যবহার করে (রেস। রেখা) যে তারা একই সংজ্ঞা ব্যবহার করে বলে মনে হয় , তারপরে গণনাগুলির মধ্যে দীর্ঘতম মান (একটি স্ট্রিং হিসাবে) পায় এবং মুদ্রণটি ফর্ম্যাটটি ব্যবহার করে বিন্যাসকরণের জন্য এর তর্কগুলির মধ্যে প্রস্থ।wordslineswc



0

05 এ বি 1 ই , 24 23 বাইট

¨¶¡¹… 
    S¡õK¹)€g§Zg>jJ¦

jবর্তমানে bugged হয়, তাই ছাড়া 21 বাইট হতে পারত §এবং J..

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

¨          # Remove the trailing newline of the (implicit) input
 ¶¡        # And split it on newlines
¹… 
    S¡     # Take the first input again, and split it on [" \n\t"]
      õK   # Then remove all empty string items
¹          # And take the first input again as is
)          # Wrap all three value of the stack to a single list
 g        # Take the length of each of the items
   §       # Cast the integers to strings (should have been implicit, but `j` is bugged)
    Z      # Take the max (always the last / amount of bytes) (without popping the list)
     g>    # Take the length + 1 of this max
       j   # Append leading spaces so all items or of this length
        J  # Join them together (should have been done by the `j` already, but it's bugged)
         ¦ # Remove the leading space (and output implicitly to STDOUT)

0

পিপ -s , 25 বাইট

sX##a-#_._M[nNa`\S+`Na#a]

কমান্ড-লাইন আর্গুমেন্ট হিসাবে মাল্টলাইন স্ট্রিং নেয়। এটি অনলাইন চেষ্টা করুন!

ডেনিসের সিজেএম জবাবটি আমাকে উপলব্ধি করার জন্য ধন্যবাদ যে দীর্ঘতম সংখ্যাটি সর্বদা চরিত্রের গণনা।

ব্যাখ্যা

                           s is space; n is newline; a is 1st cmdline arg (implicit)
           [            ]  Construct a list of three elements:
            nNa             Number of newlines in a
               `\S+`Na      Regex search: number of runs of non-whitespace characters in a
                      #a    Length of a (i.e. number of characters in a)
          M                To each element of that list, map this function:
   #a                       Number of characters in a
  #                         Length of that number
     -#_                    Subtract length of each element
sX                          Construct a string of that many spaces
        ._                  Prepend it to the element
                           The resulting list is autoprinted, space-separated (-s flag)

পতাকাগুলির সাথে একটি 29-বাইট সমাধান রয়েছে -rsযা স্টিডিন থেকে ইনপুট নেয়:

[#g`\S+`NST:gY#g+1]MsX#y-#_._

এটি অনলাইন চেষ্টা করুন!


0

পাওয়ারশেল, 123 115 বাইট

switch -r($args|% t*y){'\s'{$a=0}'\S'{$w+=!$a;$a=1}'(?s).'{$b++}'
'{$l++}}$c="$b".Length
"{0,$c} {1,$c} $b"-f$l,+$w

পরীক্ষার স্ক্রিপ্ট:

$f = {

switch -r($args|% t*y){    # evaluate all matched cases
    '\s'   {$a=0}          # any whitespace (newline not included)
    '\S'   {$w+=!$a;$a=1}  # any not-whitespace (newline not included)
    '(?s).'{$b++}          # any char (newline included!)
    '`n'   {$l++}          # new line char
}
$c="$b".Length
"{0,$c} {1,$c} $b"-f$l,+$w


}

@(
    , ("a b c d`n", "1 4 8")
    , ("a b c d e f`n", " 1  6 12")
    , ("  a b c d e f  `n", " 1  6 16")
    , ("a`nb`nc`nd`n", "4 4 8")
    , ("a`n`n`nb`nc`nd`n", " 6  4 10")
    , ("abc123{}[]()...`n", " 1  1 16")
    , ("`n", "1 0 1")
    , ("   `n", "1 0 4")
    , ("`n`n`n`n`n", "5 0 5")
    , ("`n`n`na`nb`n", "5 2 7")
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($e-eq$r): $r"
}

আউটপুট:

True: 1 4 8
True:  1  6 12
True:  1  6 16
True: 4 4 8
True:  6  4 10
True:  1  1 16
True: 1 0 1
True: 1 0 4
True: 5 0 5
True: 5 2 7

ব্যাখ্যা:

  • $args|% t*y অক্ষরেখার স্ট্রিংগুলিকে চরগুলিতে বিভক্ত করে
  • switch -r($args|% t*y)সমস্ত মিলিত কেস মূল্যায়ন করুন
    • '\s' যে কোনও সাদা স্থানের ক্ষেত্রে
    • '\S' কোনও অ-সাদা স্থানের ক্ষেত্রে
    • '(?s).' যেকোন চরের ক্ষেত্রে (নিউলাইন অন্তর্ভুক্ত)
    • '\n' নিউলাইন চরের জন্য কেস (নিউলাইন নিজেই উপস্থাপন করে)
  • $c="$b".Lengthবাইট সংখ্যাটির দৈর্ঘ্য গণনা করুন। design বি ডিজাইন অনুসারে সর্বদা সর্বোচ্চ (। l, $ w, $ b) is
  • "{0,$c} {1,$c} $b"-f$l,+$wএকই দৈর্ঘ্য সহ ফর্ম্যাট নম্বর। ভেরিয়েবল $ ডব্লু ইনটে রূপান্তর করে। এটি শব্দ ছাড়া স্ট্রিং জন্য প্রয়োজন। অন্যান্য ভেরিয়েবল ফর্ম্যাটগুলি যেমন রয়েছে তেমন কারণ 'ইনপুটটিতে সর্বদা একটি পেছনের নিউলাইন থাকবে' এবং $ l এবং $ b 0 হতে পারে না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.