প্রদত্ত পাঠ্যে সর্বাধিক ব্যবহৃত শব্দের একটি ASCII চার্ট তৈরি করুন [বন্ধ]


156

চ্যালেঞ্জ:

প্রদত্ত পাঠ্যে সর্বাধিক ব্যবহৃত শব্দের একটি ASCII চার্ট তৈরি করুন।

নিয়ম:

  • কেবলমাত্র একটি শব্দের অংশ হিসাবে গ্রহণ করুন a-zএবং A-Z(বর্ণানুক্রমিক অক্ষর)।
  • কেসিং উপেক্ষা করুন ( She== sheআমাদের উদ্দেশ্যে)।
  • নিম্নলিখিত শব্দগুলি উপেক্ষা করুন (বেশ স্বেচ্ছাচারী, আমি জানি): the, and, of, to, a, i, it, in, or, is
  • স্পষ্টকরণ: বিবেচনা করা don't: এটি 2 টি পৃথক শব্দ হিসাবে বিবেচিত হবে পরিসীমা a-zএবং A-Z: ( donএবং t)।

  • Allyচ্ছিকভাবে (আনুষ্ঠানিকভাবে এখন স্পেসিফিকেশনগুলি পরিবর্তন করতে খুব দেরি হয়ে গেছে) আপনি সমস্ত একক-বর্ণের 'শব্দ' বাদ দিতে পছন্দ করতে পারেন (এটি সম্ভবত উপেক্ষা তালিকার সংক্ষিপ্তকরণের জন্য তৈরি করতে পারে)।

প্রদত্ত একটি পার্স text(কমান্ড লাইন আর্গুমেন্টের মাধ্যমে নির্দিষ্ট ফাইল পড়ুন বা পাইপড ইন অনুমান করুন us-ascii) এবং word frequency chartনিম্নলিখিত বৈশিষ্ট্যগুলি সহ আমাদের একটি তৈরি করুন :

  • সবচেয়ে সাধারণ 22 শব্দের (অবতরণ ফ্রিকোয়েন্সি অনুসারে অর্ডার করা) জন্য চার্টটি (নীচের উদাহরণটিও দেখুন) প্রদর্শন করুন।
  • বারটি widthশব্দের উপস্থিতি (ফ্রিকোয়েন্সি) সংখ্যার প্রতিনিধিত্ব করে (আনুপাতিকভাবে)। একটি স্থান যুক্ত করুন এবং শব্দটি মুদ্রণ করুন।
  • নিশ্চিত হয়ে নিন যে এই বারগুলি (প্লাস স্পেস-ওয়ার্ড-স্পেস) সর্বদা ফিট থাকে : bar+ [space]+ word+ [space]সর্বদা <= 80অক্ষর হওয়া উচিত (নিশ্চিত হয়ে নিন যে আপনি সম্ভাব্য পৃথক বার এবং শব্দের দৈর্ঘ্যের জন্য অ্যাকাউন্ট করছেন: উদাহরণস্বরূপ: দ্বিতীয় সর্বাধিক সাধারণ শব্দটি তখন অনেক দীর্ঘ হতে পারে প্রথম যখন ফ্রিকোয়েন্সি তে এত পার্থক্য না)। এই সীমাবদ্ধতার মধ্যে বারের প্রস্থকে সর্বাধিক করুন এবং বারগুলি যথাযথভাবে স্কেল করুন (তারা যে ফ্রিকোয়েন্সিগুলি প্রতিনিধিত্ব করেন সে অনুযায়ী)

একটি উদাহরণ:

উদাহরণস্বরূপ পাঠ্যটি এখানে পাওয়া যাবে ( লুইস ক্যারল দ্বারা অ্যালিসের অ্যাডভেঞ্চারস ইন ওয়ান্ডারল্যান্ড )।

এই নির্দিষ্ট পাঠ্যটি নিম্নলিখিত চার্টটি প্রদান করবে:

 _________________________________________________________________________
| _________________________________________________________________________ | সে
| _______________________________________________________________ | আপনি
| ____________________________________________________________ | বললেন
| ____________________________________________________ | এলিস
| ______________________________________________ | ছিল
| __________________________________________ | যে
| ___________________________________ | যেমন
| _______________________________ | তার
| ____________________________ | সঙ্গে
| ____________________________ | এ
| ___________________________ | গুলি
| ___________________________ | টি
| _________________________ | চালু
| _________________________ | সব
| ______________________ | এই
| ______________________ | জন্য
| ______________________ | ছিল
| _____________________ | কিন্তু
| ____________________ | থাকা
| ____________________ | না
| ___________________ | তারা
| __________________ | সুতরাং


আপনার তথ্যের জন্য: উপরের চার্টটি এগুলি নির্মিত ফ্রিকোয়েন্সিগুলি:

[('সে', 553), ('তুমি', 481), ('বলে', 462), ('এলিস', 403), ('ছিল', 358), ''
', 330), (' হিসাবে ', 274), (' তার ', 248), (' সাথে ', 227), (' এট ', 227), (' এস ', 219), (' টি '
, 218), ('অন', 204), ('সব', 200), ('এটি', 181), ('জন্য', 179), ('হ্যাড', 178), ('
তবে ', 175), (' হতে ', 167), (' নয় ', 166), (' তারা ', 155), (' তাই ', 152)]

দ্বিতীয় উদাহরণ (আপনি যদি পুরো স্পেসটি প্রয়োগ করেছেন কিনা তা পরীক্ষা করে দেখুন ):you লিঙ্কযুক্ত অ্যালিস ইন ওয়ান্ডারল্যান্ড ফাইলের প্রতিটি ঘটনাকে এর সাথে প্রতিস্থাপন করুন superlongstringstring:

 ________________________________________________________________
| ________________________________________________________________ | সে
| _______________________________________________________ | superlongstringstring
| _____________________________________________________ | বললেন
| ______________________________________________ | এলিস
| ________________________________________ | ছিল
| _____________________________________ | যে
| ______________________________ | যেমন
| ___________________________ | তার
| _________________________ | সঙ্গে
| _________________________ | এ
| ________________________ | গুলি
| ________________________ | টি
| ______________________ | চালু
| _____________________ | সব
| ___________________ | এই
| ___________________ | জন্য
| ___________________ | ছিল
| __________________ | কিন্তু
| _________________ | থাকা
| _________________ | না
| ________________ | তারা
| ________________ | সুতরাং

বিজয়ী:

সংক্ষিপ্ততম সমাধান (প্রতিটি ভাষাতে অক্ষর গণনা অনুসারে)। আনন্দ কর!


সম্পাদনা করুন : এখন পর্যন্ত ফলাফলগুলির সংক্ষিপ্তসার সারণী (2012-02-15) (মূলত ব্যবহারকারী নাস বানভ দ্বারা যুক্ত করেছেন):

ভাষা স্বচ্ছন্দ
=======================
গল্ফস্ক্রিপ্ট 130 143
পার্ল 185
উইন্ডোজ পাওয়ারশেল 148 199
গণিত 199
রুবি 185 205
ইউনিক্স টুলচেন 194 228
পাইথন 183 243
ক্লোজার 282
স্কেল 311
হাসেল 333
আওক 336
আর 298
জাভাস্ক্রিপ্ট 304 354
গ্রোভি 321
মতলব 404
সি # 422
স্মার্টটাক 386
পিএইচপি 450
এফ # 452
টিএসকিউএল 483 507

সংখ্যাগুলি একটি নির্দিষ্ট ভাষায় সংক্ষিপ্ত সমাধানের দৈর্ঘ্যের প্রতিনিধিত্ব করে। "স্ট্রিক্ট" এমন একটি সমাধানকে বোঝায় যা স্পেকটিকে পুরোপুরি কার্যকর করে ( |____|বারগুলি টেনে তোলে, একটি ____লাইন দিয়ে প্রথম বারটি বন্ধ করে দেয়, উচ্চ ফ্রিকোয়েন্সি সহ দীর্ঘ শব্দগুলির সম্ভাবনার জন্য অ্যাকাউন্ট করে)। "রিলাক্সড" অর্থ সমাধানের জন্য সংক্ষিপ্ত করার জন্য কিছু স্বাধীনতা নেওয়া হয়েছিল।

শুধুমাত্র সংক্ষিপ্ততর সমাধানগুলি হলে 500 টি অক্ষর অন্তর্ভুক্ত থাকে। ভাষার তালিকাটি 'কঠোর' সমাধানের দৈর্ঘ্য অনুসারে বাছাই করা হয়। 'ইউনিক্স টুলচেইন' ব্যবহার করা হয় এমন বিভিন্ন সমাধানের জন্য যা traditionalতিহ্যবাহী * নিক্স শেল এবং সরঞ্জামগুলির একটি মিশ্রণ (যেমন গ্রেপ, টিআর, সাজানো, ইউনিক, মাথা, পার্ল, অ্যাজক) ব্যবহার করে।


4
ঠিক আছে, 'দীর্ঘতম বার' + শব্দ = 80 টি 80 টি কোলের মধ্যে ফিট নাও হতে পারে যদি দ্বিতীয়-সর্বাধিক প্রচলিত-শব্দটি দীর্ঘতর শব্দ হয়। আমি অনুমান করি যে 'সীমাবদ্ধতা' সন্ধান করছি।
ব্রায়ান

1
আমরা কি কেসিংকে স্বাভাবিক করি? 'সে' = 'সে'?
ব্রায়ান

2
আইএমও এটি সম্পাদন করার সময় এবং মেমরির ব্যবহারের ক্ষেত্রে উভয়ই সম্পাদন করে তোলে, মনে হয় চরিত্র গণনার চেয়ে আরও আকর্ষণীয় চ্যালেঞ্জ।
ফ্রাঙ্ক ফার্ম

81
আমার প্রিয় শব্দগুলি sএবং tউপস্থাপিত হয়েছে তা দেখে আমি আনন্দিত ।
indiv

8
@indiv, @Nas Banov - নিরীহ খুব সহজ tokenizer সার্চ {করিনি, টি} হিসাবে "না" এবং "তিনি এর" যেমন {সে, গুলি} :)
হবস

উত্তর:


123

ল্যাবভিউ 51 টি নোড, 5 স্ট্রাকচার, 10 ডায়াগ্রাম

হাতিটিকে ট্যাপ-ডান্স করতে শেখানো কখনও সুন্দর হয় না। আমি, আহ, চরিত্রের সংখ্যাটি এড়িয়ে যাব।

labVIEW code

results

প্রোগ্রামটি বাম থেকে ডানে প্রবাহিত:

labVIEW code explained


10
এটি মূল্যবান নয়

4
ল্যাবভিউজ এর হার্ডওয়্যার নিয়ন্ত্রণ এবং পরিমাপ কুলুঙ্গিতে খুব খুশি, তবে স্ট্রিং ম্যানিপুলেশনের জন্য সত্যই বেশ ভয়ঙ্কর।
জো জেড

19
আমি দেখেছি সেরা কোড গল্ফ উত্তর। বাক্সের বাইরে চিন্তা করার জন্য +1!
ব্লেয়ার হলোয়ে

1
আমাদের জন্য উপাদানগুলি গণনা করতে হবে ... প্রতিটি বাক্স এবং উইজেট আপনাকে স্ক্রিনের গণনায় টানতে হবে।
ডিএমকেই --- প্রাক্তন মডারেটর বিড়ালছানা

1
এই চার্টগুলির আরও বড় সংস্করণে কোনও লিঙ্ক যুক্ত করা কি সম্ভব হবে?
Svish

42

রুবি ১.৯, ১৮৫ টি চর

(অন্যান্য রুবি সমাধানের উপর ভিত্তি করে)

w=($<.read.downcase.scan(/[a-z]+/)-%w{the and of to a i it in or is}).group_by{|x|x}.map{|x,y|[-y.size,x]}.sort[0,22]
k,l=w[0]
puts [?\s+?_*m=76-l.size,w.map{|f,x|?|+?_*(f*m/k)+"| "+x}]

অন্যান্য সমাধানগুলির মতো কোনও কমান্ড লাইন সুইচ ব্যবহার না করে আপনি কেবল ফাইল নামটি যুক্তি হিসাবে পাস করতে পারেন। (অর্থাত্ ruby1.9 wordfrequency.rb Alice.txt)

যেহেতু আমি এখানে অক্ষর-আক্ষরিক ব্যবহার করছি, এই সমাধানটি কেবল রুবি ১.৯ এ কাজ করে।

সম্পাদনা: "পাঠযোগ্যতা" এর জন্য লাইন বিরতিতে সেমিকোলনগুলি প্রতিস্থাপন করা হয়েছে। : P: P

সম্পাদনা 2: Shtééf আমি আড়াল স্থান ভুলে গেছি নির্দেশিত - এটি স্থির।

সম্পাদনা 3: আবার চলার স্থানটি সরানো হয়েছে;)


এটি প্রতিটি শব্দের পরে অনুবর্তী স্থানটি হারিয়ে যাচ্ছে।
স্টাফান কোচেন

ওউ শুট, এটিকে উপেক্ষা করুন। দেখে মনে হচ্ছে যে গল্ফটি সবেমাত্র আপডেট হয়েছে, পিছনের জায়গার আর দরকার নেই। :)
স্টাফান কোচেন

'সুপারলংস্ট্রিং স্ট্রিং' এর জন্য ২ য় বা পরবর্তী অবস্থানে থাকার কথা মনে হচ্ছে না? (সমস্যার বিবরণ দেখুন)
নাস বানভ

2
এটি দেখতে সত্যিই রক্ষণাবেক্ষণযোগ্য।
জম্বিগুলি

39

গল্ফস্ক্রিপ্ট, 177 175 173 167 164 163 144 131 130 অক্ষর

ধীর - নমুনা পাঠ্যের জন্য 3 মিনিট (130)

{32|.123%97<n@if}%]''*n%"oftoitinorisa"2/-"theandi"3/-$(1@{.3$>1{;)}if}/]2/{~~\;}$22<.0=~:2;,76\-:1'_':0*' '\@{"
|"\~1*2/0*'| '@}/

ব্যাখ্যা:

{           #loop through all characters
 32|.       #convert to uppercase and duplicate
 123%97<    #determine if is a letter
 n@if       #return either the letter or a newline
}%          #return an array (of ints)
]''*        #convert array to a string with magic
n%          #split on newline, removing blanks (stack is an array of words now)
"oftoitinorisa"   #push this string
2/          #split into groups of two, i.e. ["of" "to" "it" "in" "or" "is" "a"]
-           #remove any occurrences from the text
"theandi"3/-#remove "the", "and", and "i"
$           #sort the array of words
(1@         #takes the first word in the array, pushes a 1, reorders stack
            #the 1 is the current number of occurrences of the first word
{           #loop through the array
 .3$>1{;)}if#increment the count or push the next word and a 1
}/
]2/         #gather stack into an array and split into groups of 2
{~~\;}$     #sort by the latter element - the count of occurrences of each word
22<         #take the first 22 elements
.0=~:2;     #store the highest count
,76\-:1     #store the length of the first line
'_':0*' '\@ #make the first line
{           #loop through each word
"
|"\~        #start drawing the bar
1*2/0       #divide by zero
*'| '@      #finish drawing the bar
}/

"সঠিক" (আশাবাদী)। (143)

{32|.123%97<n@if}%]''*n%"oftoitinorisa"2/-"theandi"3/-$(1@{.3$>1{;)}if}/]2/{~~\;}$22<..0=1=:^;{~76@,-^*\/}%$0=:1'_':0*' '\@{"
|"\~1*^/0*'| '@}/

কম ধীর - আধ মিনিট। (162)

'"'/' ':S*n/S*'"#{%q
'\+"
.downcase.tr('^a-z','
')}\""+~n%"oftoitinorisa"2/-"theandi"3/-$(1@{.3$>1{;)}if}/]2/{~~\;}$22<.0=~:2;,76\-:1'_':0*S\@{"
|"\~1*2/0*'| '@}/

রিভিশন লগগুলিতে আউটপুট দৃশ্যমান।


2
গল্ফস্ক্রিপ্ট সম্পর্কে: golfscript.com/golfscript
Assaf Lavie

2
সঠিক নয়, এটিতে যদি দ্বিতীয় শব্দটি সত্যিই দীর্ঘ হয় তবে এটি পরবর্তী লাইনে আবৃত হবে।
গাবে

5
"শূন্য দ্বারা বিভাজন" ... গল্ফস্ক্রিপ্ট কি এটিকে অনুমতি দেয়?
জ্যাব

35

206

শেল, গ্রেপ, টিআর, গ্রেপ, সাজান, ইউনিক, সাজান, মাথা, পার্ল

~ % wc -c wfg
209 wfg
~ % cat wfg
egrep -oi \\b[a-z]+|tr A-Z a-z|egrep -wv 'the|and|of|to|a|i|it|in|or|is'|sort|uniq -c|sort -nr|head -22|perl -lape'($f,$w)=@F;$.>1or($q,$x)=($f,76-length$w);$b="_"x($f/$q*$x);$_="|$b| $w ";$.>1or$_=" $b\n$_"'
~ % # usage:
~ % sh wfg < 11.txt

এইচএম, স্রেফ উপরে প্রদর্শিত: sort -nr->sort -n এবং তারপরে head-> tail=> 208 :)
আপডেট 2: এরম, অবশ্যই উপরেরটি নির্বোধ, কারণ এটি তখন বিপরীত হবে। সুতরাং, 209.
আপডেট3: বর্জনীয় রিজেক্সএক্স -> 206 অনুকূলিত করে

egrep -oi \\b[a-z]+|tr A-Z a-z|egrep -wv 'the|and|o[fr]|to|a|i[tns]?'|sort|uniq -c|sort -nr|head -22|perl -lape'($f,$w)=@F;$.>1or($q,$x)=($f,76-length$w);$b="_"x($f/$q*$x);$_="|$b| $w ";$.>1or$_=" $b\n$_"'



মজাদার জন্য, এখানে পার্ল-ওয়ান সংস্করণ (অনেক দ্রুত):

~ % wc -c pgolf
204 pgolf
~ % cat pgolf
perl -lne'$1=~/^(the|and|o[fr]|to|.|i[tns])$/i||$f{lc$1}++while/\b([a-z]+)/gi}{@w=(sort{$f{$b}<=>$f{$a}}keys%f)[0..21];$Q=$f{$_=$w[0]};$B=76-y///c;print" "."_"x$B;print"|"."_"x($B*$f{$_}/$Q)."| $_"for@w'
~ % # usage:
~ % sh pgolf < 11.txt

35

লেনদেন এসকিউএল সেট ভিত্তিক সমাধান (এসকিউএল সার্ভার 2005) 1063 892 873 853 827 820 783 683 647 644 630 অক্ষর

চরিত্রের সংখ্যা হ্রাস করতে কিছু দরকারী পরামর্শের জন্য গ্যাবে ধন্যবাদ জানাই।

এনবি: স্ক্রোলবারগুলি এড়াতে লাইন ব্রেকগুলি যুক্ত করা হয় কেবল শেষ লাইন বিরতি প্রয়োজন।

DECLARE @ VARCHAR(MAX),@F REAL SELECT @=BulkColumn FROM OPENROWSET(BULK'A',
SINGLE_BLOB)x;WITH N AS(SELECT 1 i,LEFT(@,1)L UNION ALL SELECT i+1,SUBSTRING
(@,i+1,1)FROM N WHERE i<LEN(@))SELECT i,L,i-RANK()OVER(ORDER BY i)R INTO #D
FROM N WHERE L LIKE'[A-Z]'OPTION(MAXRECURSION 0)SELECT TOP 22 W,-COUNT(*)C
INTO # FROM(SELECT DISTINCT R,(SELECT''+L FROM #D WHERE R=b.R FOR XML PATH
(''))W FROM #D b)t WHERE LEN(W)>1 AND W NOT IN('the','and','of','to','it',
'in','or','is')GROUP BY W ORDER BY C SELECT @F=MIN(($76-LEN(W))/-C),@=' '+
REPLICATE('_',-MIN(C)*@F)+' 'FROM # SELECT @=@+' 
|'+REPLICATE('_',-C*@F)+'| '+W FROM # ORDER BY C PRINT @

পঠনযোগ্য সংস্করণ

DECLARE @  VARCHAR(MAX),
        @F REAL
SELECT @=BulkColumn
FROM   OPENROWSET(BULK'A',SINGLE_BLOB)x; /*  Loads text file from path
                                             C:\WINDOWS\system32\A  */

/*Recursive common table expression to
generate a table of numbers from 1 to string length
(and associated characters)*/
WITH N AS
     (SELECT 1 i,
             LEFT(@,1)L

     UNION ALL

     SELECT i+1,
            SUBSTRING(@,i+1,1)
     FROM   N
     WHERE  i<LEN(@)
     )
  SELECT   i,
           L,
           i-RANK()OVER(ORDER BY i)R
           /*Will group characters
           from the same word together*/
  INTO     #D
  FROM     N
  WHERE    L LIKE'[A-Z]'OPTION(MAXRECURSION 0)
             /*Assuming case insensitive accent sensitive collation*/

SELECT   TOP 22 W,
         -COUNT(*)C
INTO     #
FROM     (SELECT DISTINCT R,
                          (SELECT ''+L
                          FROM    #D
                          WHERE   R=b.R FOR XML PATH('')
                          )W
                          /*Reconstitute the word from the characters*/
         FROM             #D b
         )
         T
WHERE    LEN(W)>1
AND      W NOT IN('the',
                  'and',
                  'of' ,
                  'to' ,
                  'it' ,
                  'in' ,
                  'or' ,
                  'is')
GROUP BY W
ORDER BY C

/*Just noticed this looks risky as it relies on the order of evaluation of the 
 variables. I'm not sure that's guaranteed but it works on my machine :-) */
SELECT @F=MIN(($76-LEN(W))/-C),
       @ =' '      +REPLICATE('_',-MIN(C)*@F)+' '
FROM   #

SELECT @=@+' 
|'+REPLICATE('_',-C*@F)+'| '+W
             FROM     #
             ORDER BY C

PRINT @

আউটপুট

 _________________________________________________________________________ 
|_________________________________________________________________________| she
|_______________________________________________________________| You
|____________________________________________________________| said
|_____________________________________________________| Alice
|_______________________________________________| was
|___________________________________________| that
|____________________________________| as
|________________________________| her
|_____________________________| at
|_____________________________| with
|__________________________| on
|__________________________| all
|_______________________| This
|_______________________| for
|_______________________| had
|_______________________| but
|______________________| be
|_____________________| not
|____________________| they
|____________________| So
|___________________| very
|__________________| what

এবং দীর্ঘ স্ট্রিং সহ

 _______________________________________________________________ 
|_______________________________________________________________| she
|_______________________________________________________| superlongstringstring
|____________________________________________________| said
|______________________________________________| Alice
|________________________________________| was
|_____________________________________| that
|_______________________________| as
|____________________________| her
|_________________________| at
|_________________________| with
|_______________________| on
|______________________| all
|____________________| This
|____________________| for
|____________________| had
|____________________| but
|___________________| be
|__________________| not
|_________________| they
|_________________| So
|________________| very
|________________| what

12
আমি আপনাকে একটি +1 দিয়েছিলাম কারণ আপনি এটি টি-এসকিউএল-এ করেছিলেন এবং টিম আমেরিকা উদ্ধৃত করে বলেছিলেন - "আপনার বল আছে I আমার পছন্দ বল" "

এটিকে আরও পঠনযোগ্য করার জন্য আমি কয়েকটি স্পেসকে নতুন লাইনে রূপান্তর করার স্বাধীনতা নিয়েছি। আশাকরি আমি জিনিস গুলো করিনি। আমি এটিকে আরও কিছুটা কমিয়ে দিয়েছি।
গাবে

3
সেই কোডটি আমাকে দেখে চিৎকার করছে! : ও
জয়ে

1
সংরক্ষণের একটি ভাল উপায় হ'ল 0.000কেবল পরিবর্তন করা 0, তার -Cপরিবর্তে ব্যবহার করা 1.0/C। এবং এগুলি তৈরি FLOATকরা REALএকটি স্ট্রোকও বাঁচাতে পারে। তবে সবচেয়ে বড় বিষয়টি হ'ল মনে হচ্ছে আপনার কাছে প্রচুর ASউদাহরণ রয়েছে যা alচ্ছিক হওয়া উচিত।
গাব

1
ঠিক আছে, কেমন SELECT [ ] FROM (SELECT $0 O, ' '+REPLICATE('_', MAX(C)*@F)+' ' [ ] FROM # UNION SELECT $1/C, '|'+REPLICATE('_',C*@F)+'| '+W FROM #)X ORDER BY O?
গাবে

34

রুবি 207 213 211 210 207 203 201 200 চর

অনুরাগের উপর উন্নতি, আরএফুস্কা থেকে পরামর্শ অন্তর্ভুক্ত করে। বাছাইয়ের যুক্তি এবং কয়েকটি অন্যান্য ছোটখাটো গল্ফিংসও সরিয়ে দেয়।

w=(STDIN.read.downcase.scan(/[a-z]+/)-%w{the and of to a i it in or is}).group_by{|x|x}.map{|x,y|[-y.size,x]}.sort.take 22;k,l=w[0];m=76.0-l.size;puts' '+'_'*m;w.map{|f,x|puts"|#{'_'*(m*f/k)}| #{x} "}

হিসাবে কার্যকর করুন:

ruby GolfedWordFrequencies.rb < Alice.txt

সম্পাদনা করুন: 'পুটস' ফিরিয়ে দিন, আউটপুটে কোট না থাকার জন্য সেখানে থাকা দরকার।
সম্পাদনা 2: পরিবর্তিত ফাইল-> আইও
সম্পাদনা 3: সরানো / আমি সম্পাদনা
4: কাছাকাছি সরানো বন্ধনীগুলি (এফ * 1.0), পুনরাবৃত্ত সম্পাদনা
5: প্রথম লাইনের জন্য স্ট্রিং সংযোজন ব্যবহার করুন; sজায়গায় প্রসারিত করুন ।
সম্পাদনা 6: তৈরি এম ভাসা, 1.0 সরানো। সম্পাদনা: কাজ করে না, দৈর্ঘ্য পরিবর্তন করে। সম্পাদনা: সম্পাদনা 7 এর চেয়ে খারাপ আর নয়
: ব্যবহার করুন STDIN.read


+1 - বাছাই করার অংশটি পছন্দ করুন, খুব চতুর :)
অনুরাগ

আরে, প্রথম স্থানটিতে এটির সাথে বেশিরভাগ অংশের তুলনায় ছোট্ট অপ্টিমাইজেশন। :)
আর্চগুন

নিস! আমি অনুরাগের সংস্করণেও দুটি পরিবর্তন যুক্ত করেছি। আরেকটি শ্যাভ অফ করুন
স্টাফান কোচেন

সমাধানটি আউটপুট থেকে বিচ্যুত হয়েছে, আমি টোটারি যাচ্ছি এবং কোথায় ঘটেছে তা খুঁজে বের করতে পারি।
আর্চগুন

1
এর আরও একটি সংক্ষিপ্ত রূপ রয়েছে।
আর্চগুন

28

গণিত ( 297 284 248 244 242) 199 চর) খাঁটি কার্যকরী

এবং জিপফের আইন পরীক্ষা

মাম্মাকে দেখুন ... কোন ভার, কোন হাত, .. মাথা নেই

1> কিছু সংক্ষিপ্ত বিবরণ সংশোধন করুন (২৮৪ টি চর)

f[x_, y_] := Flatten[Take[x, All, y]]; 

BarChart[f[{##}, -1], 
         BarOrigin -> Left, 
         ChartLabels -> Placed[f[{##}, 1], After], 
         Axes -> None
] 
& @@
Take[
  SortBy[
     Tally[
       Select[
        StringSplit[ToLowerCase[Import[i]], RegularExpression["\\W+"]], 
       !MemberQ[{"the", "and", "of", "to", "a", "i", "it", "in", "or","is"}, #]&]
     ], 
  Last], 
-22]

কিছু ব্যাখ্যা

Import[] 
   # Get The File

ToLowerCase []
   # To Lower Case :)

StringSplit[ STRING , RegularExpression["\\W+"]]
   # Split By Words, getting a LIST

Select[ LIST, !MemberQ[{LIST_TO_AVOID}, #]&]
   #  Select from LIST except those words in LIST_TO_AVOID
   #  Note that !MemberQ[{LIST_TO_AVOID}, #]& is a FUNCTION for the test

Tally[LIST]
   # Get the LIST {word,word,..} 
     and produce another  {{word,counter},{word,counter}...}

SortBy[ LIST ,Last]
   # Get the list produced bt tally and sort by counters
     Note that counters are the LAST element of {word,counter}

Take[ LIST ,-22]
   # Once sorted, get the biggest 22 counters

BarChart[f[{##}, -1], ChartLabels -> Placed[f[{##}, 1], After]] &@@ LIST
   # Get the list produced by Take as input and produce a bar chart

f[x_, y_] := Flatten[Take[x, All, y]]
   # Auxiliary to get the list of the first or second element of lists of lists x_
     dependending upon y
   # So f[{##}, -1] is the list of counters
   # and f[{##}, 1] is the list of words (labels for the chart)

আউটপুট

Alt পাঠ্য http://i49.tinypic.com/2n8mrer.jpg

গাণিতিক গল্ফিংয়ের পক্ষে উপযুক্ত নয় এবং এটি কেবল দীর্ঘ, বর্ণনামূলক ক্রিয়াকলাপের কারণে। "রেগুলারএক্সপ্রেশন []" বা "স্ট্রিংস্প্লিট []" এর মতো কাজগুলি আমাকে কেবল শান্ত করে তোলে :(।

জিপফের ল টেস্টিং

Zipf আইন করে একটি প্রাকৃতিক ভাষা লেখার জন্য, অনুমান লগ (রেঙ্ক) বনাম লগ (ঘটনার) প্লটের একটি অনুসরণ করে রৈখিক সম্পর্ক।

আইনটি ক্রাইপোগ্রাফি এবং ডেটা সংকোচনের জন্য অ্যালগরিদম তৈরিতে ব্যবহৃত হয়। (তবে এটি এলজেডাব্লু অ্যালগরিদমের "জেড" নয়)

আমাদের পাঠ্যে, আমরা এটি নিম্নলিখিত দিয়ে পরীক্ষা করতে পারি

 f[x_, y_] := Flatten[Take[x, All, y]]; 
 ListLogLogPlot[
     Reverse[f[{##}, -1]], 
     AxesLabel -> {"Log (Rank)", "Log Counter"}, 
     PlotLabel -> "Testing Zipf's Law"]
 & @@
 Take[
  SortBy[
    Tally[
       StringSplit[ToLowerCase[b], RegularExpression["\\W+"]]
    ], 
   Last],
 -1000]

ফলাফল (বেশ ভাল লিনিয়ার)

Alt পাঠ্য http://i46.tinypic.com/33fcmdk.jpg

6> সম্পাদনা করুন (242 অক্ষর)

রেজেক্স রিফ্যাক্টরিং (আর কোনও ফাংশন সিলেক্ট করবেন না)
1 চর শব্দ বাদ দেওয়া
"ফ" ফাংশনের আরও দক্ষ সংজ্ঞা

f = Flatten[Take[#1, All, #2]]&; 
BarChart[
     f[{##}, -1], 
     BarOrigin -> Left, 
     ChartLabels -> Placed[f[{##}, 1], After], 
     Axes -> None] 
& @@
  Take[
    SortBy[
       Tally[
         StringSplit[ToLowerCase[Import[i]], 
          RegularExpression["(\\W|\\b(.|the|and|of|to|i[tns]|or)\\b)+"]]
       ],
    Last],
  -22]

7 → 199 টি অক্ষর সম্পাদনা করুন

BarChart[#2, BarOrigin->Left, ChartLabels->Placed[#1, After], Axes->None]&@@ 
  Transpose@Take[SortBy[Tally@StringSplit[ToLowerCase@Import@i, 
    RegularExpression@"(\\W|\\b(.|the|and|of|to|i[tns]|or)\\b)+"],Last], -22]
  • এবং ( / ) যুক্তি fদিয়ে প্রতিস্থাপন করা হয়েছে ।TransposeSlot#1#2
  • আমাদের কোনও দুর্গন্ধযুক্ত বন্ধনী প্রয়োজন নেই ( যেখানে সম্ভব তার f@xপরিবর্তে ব্যবহার করুন f[x])


9
আপনি কি মনে করেন "রেগুলারএক্সপ্রেসন" খারাপ? আমি যখন "সিস্টেম.টেক্সট.আরেগুলারএক্সপ্রেসনস.রেগেক্স.স্প্লিট" সি # সংস্করণে টাইপ করছিলাম তখন অবজেক্ট-সি কোড না পাওয়া অবধি: "স্ট্রিংউইথকন্টেন্টসঅফফায়াল", "এনম্যারেটসব্রাস্টিংস ইনগ্র্যাং", "এনএসএসস্ট্রিংএইংরেজি", এবং সংযুক্তঅর্টারস " ।
গাবে

2
@ গ্যাবে ধন্যবাদ ... আমি এখন অনেক ভাল বোধ করছি স্পেনীয় ভাষায় আমরা "ম্যাল দে মথোস, কনসুয়েলো দে টন্টোস" বলে .. "" অনেক ঝামেলা, বোকা লোকেরা মুক্তি পেয়েছে "এর মতো কিছু: ডি
ডাঃ বেলিসারিয়াস

1
|i|কারণ আপনি ইতিমধ্যে হবে তা হচ্ছে আপনার Regex মধ্যে অপ্রয়োজনীয় .|
গাবে

1
আমি স্প্যানিশ উক্তি পছন্দ। আমি ইংরেজিতে সবচেয়ে কাছের জিনিসটি ভাবতে পারি তা হ'ল "দুর্দশাগ্রস্থতা সংস্থা"। এখানে আমার অনুবাদ প্রচেষ্টা: "এটি একটি বোকা যিনি কষ্ট পেয়েও একই পরিস্থিতিতে অন্যের কথা ভেবে সান্ত্বনা পান।" গাণিতিক প্রয়োগের বিস্ময়কর কাজ, বিটিডব্লিউ।
dreeves

@ ড্রিভস মূর্খতা সহজেই ভাষার বাধা ছাড়িয়ে যায় ... আপনি আমার ছোট ম্যাথমেটিক প্রোগ্রামটি দেখতে পেরে খুশি হলেন, আমি কেবল ভাষা শিখতে শুরু করছি
ডাঃ বেলিসারিয়াস

26

সি # - 510 451 436 446 434 426 422 চর (মিনিডেড)

সংক্ষিপ্ত নয়, তবে এখন সম্ভবত সঠিক! দ্রষ্টব্য, পূর্ববর্তী সংস্করণটি বারগুলির প্রথম লাইনটি প্রদর্শন করে না, বারগুলি সঠিকভাবে স্কেল করে না, ফাইলটি স্টিডিনের থেকে পাওয়ার পরিবর্তে ডাউনলোড করে এবং প্রয়োজনীয় সমস্ত সি # ভার্বোসটি অন্তর্ভুক্ত করে না। আপনি যদি সহজে সি # এর জন্য অতিরিক্ত ক্র্যাপের প্রয়োজন না হন তবে আপনি সহজেই অনেক স্ট্রোক শেভ করতে পারেন। সম্ভবত পাওয়ারশেল আরও ভাল করতে পারে।

using C=System.Console;   // alias for Console
using System.Linq;  // for Split, GroupBy, Select, OrderBy, etc.

class Class // must define a class
{
    static void Main()  // must define a Main
    {
        // split into words
        var allwords = System.Text.RegularExpressions.Regex.Split(
                // convert stdin to lowercase
                C.In.ReadToEnd().ToLower(),
                // eliminate stopwords and non-letters
                @"(?:\b(?:the|and|of|to|a|i[tns]?|or)\b|\W)+")
            .GroupBy(x => x)    // group by words
            .OrderBy(x => -x.Count()) // sort descending by count
            .Take(22);   // take first 22 words

        // compute length of longest bar + word
        var lendivisor = allwords.Max(y => y.Count() / (76.0 - y.Key.Length));

        // prepare text to print
        var toPrint = allwords.Select(x=> 
            new { 
                // remember bar pseudographics (will be used in two places)
                Bar = new string('_',(int)(x.Count()/lendivisor)), 
                Word=x.Key 
            })
            .ToList();  // convert to list so we can index into it

        // print top of first bar
        C.WriteLine(" " + toPrint[0].Bar);
        toPrint.ForEach(x =>  // for each word, print its bar and the word
            C.WriteLine("|" + x.Bar + "| " + x.Word));
    }
}

নীচে ফর্মটিতে ndণদাতার সাথে ইনলাইন করা (যা এটি 22 বার ধীর করে তোলে) সহ 422 টি অক্ষর (নির্বাচিত জায়গাগুলির জন্য ব্যবহৃত নিউলাইনগুলি ):

using System.Linq;using C=System.Console;class M{static void Main(){var
a=System.Text.RegularExpressions.Regex.Split(C.In.ReadToEnd().ToLower(),@"(?:\b(?:the|and|of|to|a|i[tns]?|or)\b|\W)+").GroupBy(x=>x).OrderBy(x=>-x.Count()).Take(22);var
b=a.Select(x=>new{p=new string('_',(int)(x.Count()/a.Max(y=>y.Count()/(76d-y.Key.Length)))),t=x.Key}).ToList();C.WriteLine(" "+b[0].p);b.ForEach(x=>C.WriteLine("|"+x.p+"| "+x.t));}}

স্মার্ট গাধাটি ফাইলটি ইনলাইনে ডাউনলোড করার জন্য +1। :)
sarnold

1
ম্যাট এর উত্তর থেকে ছোট URL টি চুরি করুন।
indiv

2
অনুমানটি বলেছিল ফাইলটি অবশ্যই পাইপযুক্ত বা একটি আরগস হিসাবে পাস করতে হবে। আপনি যদি ধরে নিলেন যে আর্গগুলিতে [0] স্থানীয় ফাইলের নাম রয়েছে তবে আপনি এটি (নতুন ওয়েবক্লিয়েন্ট ()) এর পরিবর্তে আরগস [0] ব্যবহার করে যথেষ্ট ছোট করতে পারবেন Download ডাউনলোডস্ট্রিং (@ " গুটেনবার্গ. org / ফাইলস / ১১ / ১১) । txt " ) -> এটি আপনাকে প্রায় 70 টি অক্ষর
থোরিয়া

1
এখানে একটি সংস্করণ রয়েছে যা ওয়েবক্লিয়েন্ট কলকে আরগস 0 এর সাথে প্রতিস্থাপন করে, স্ট্রিমরেডারকে কল দেয় এবং কয়েকটি অতিরিক্ত স্থান সরিয়ে দেয়। মোট চর গণনা = 413 var a = Regex.Replace ((নতুন স্ট্রিমরিডার (আরোগস [0]))। ) .Where (এক্স =>! (নতুন [] { "", "এবং", "এর", "থেকে", "একটি", "আমি", "এটা", "এ", "বা", " হল "})। রয়েছে (x) এর)। GroupBy (এক্স => x) এর .Select (ছ => নতুন {W = g.Key, গ = g.Count ()})। OrderByDescending (এক্স => XC)। এড়িয়ে যান (1) .টেক (22)। টোললিস্ট (); var এম = এ। অর্ডারবাইডিসেন্ডিং (x => এক্সসি) _ ', এক্সসি * (80-মেগাওয়াট দৈর্ঘ্য -4) / এমসি) + "|" + এক্সডাব্লু));
থোরিয়া

"নতুন" স্ট্রিমরিডার "" ব্যবহার না করে "নোংরা। ফাইল.আরএডএলটেক্সট (আরগস [0]) বা কনসোল.আইন.আরডটওএন্ড () আরও ভাল। পরবর্তী ক্ষেত্রে আপনি এমনকি আপনার মেইন () থেকে আর্গুমেন্ট সরাতে পারেন। :)
রোটসর

25

পার্ল, 237 229 209 অক্ষর

(রুবি সংস্করণটিকে আরও নোংরা গল্ফ ট্রিক্সের split/[^a-z/,lcসাথে পুনরায় প্রতিস্থাপন করার জন্য পুনরায় আপডেট করা হয়েছে, এটি প্রতিস্থাপন করা হয়েছে lc=~/[a-z]+/gএবং অন্য জায়গায় খালি স্ট্রিংয়ের জন্য একটি চেক মুছে ফেলা হয়েছে These এগুলি রুবি সংস্করণ দ্বারা অনুপ্রাণিত হয়েছিল, তাই যেখানে creditণ জমা হয় credit

আপডেট: এখন পার্ল সাথে 5.10! প্রতিস্থাপন printসঙ্গে say, এবং ব্যবহার ~~একটি এড়াতে map। এটি কমান্ড লাইনে অনুরোধ করা উচিত perl -E '<one-liner>' alice.txt। যেহেতু পুরো স্ক্রিপ্টটি এক লাইনে রয়েছে, একে ওয়ান-লাইনার হিসাবে লিখতে কোনও অসুবিধা হওয়া উচিত নয় :)।

 @s=qw/the and of to a i it in or is/;$c{$_}++foreach grep{!($_~~@s)}map{lc=~/[a-z]+/g}<>;@s=sort{$c{$b}<=>$c{$a}}keys%c;$f=76-length$s[0];say" "."_"x$f;say"|"."_"x($c{$_}/$c{$s[0]}*$f)."| $_ "foreach@s[0..21];

নোট করুন যে এই সংস্করণটি কেসটির জন্য স্বাভাবিক করে তোলে। এটি কোনও সমাধান সংক্ষিপ্ত করে না, যেহেতু অপসারণের ,lcজন্য (লোয়ার-কেসিংয়ের জন্য) A-Zআপনার স্প্লিট রেজেক্সে যুক্ত হওয়া দরকার, সুতরাং এটি ধোয়া।

আপনি যদি এমন কোনও সিস্টেমে থাকেন যেখানে নিউলাইনটি একটি চরিত্র এবং দুটি নয় তবে আপনি এটির জায়গায় দুটি নতুন অক্ষর দ্বারা আক্ষরিক নিউলাইন ব্যবহার করে সংক্ষিপ্ত করতে পারেন \n । তবে, আমি উপরের নমুনাটি সেভাবে লিখিনি, কারণ এটি "পরিষ্কার" (হা)!


এখানে বেশিরভাগই সঠিক, তবে দূরবর্তী পর্যায়ে যথেষ্ট কম নয়, পার্ল সমাধান:

use strict;
use warnings;

my %short = map { $_ => 1 } qw/the and of to a i it in or is/;
my %count = ();

$count{$_}++ foreach grep { $_ && !$short{$_} } map { split /[^a-zA-Z]/ } (<>);
my @sorted = (sort { $count{$b} <=> $count{$a} } keys %count)[0..21];
my $widest = 76 - (length $sorted[0]);

print " " . ("_" x $widest) . "\n";
foreach (@sorted)
{
    my $width = int(($count{$_} / $count{$sorted[0]}) * $widest);
    print "|" . ("_" x $width) . "| $_ \n";
}

অপেক্ষাকৃত পঠনযোগ্য থাকাকালীন নীচেরটি যত কম তা পেতে পারে। (392 অক্ষর)

%short = map { $_ => 1 } qw/the and of to a i it in or is/;
%count;

$count{$_}++ foreach grep { $_ && !$short{$_} } map { split /[^a-z]/, lc } (<>);
@sorted = (sort { $count{$b} <=> $count{$a} } keys %count)[0..21];
$widest = 76 - (length $sorted[0]);

print " " . "_" x $widest . "\n";
print"|" . "_" x int(($count{$_} / $count{$sorted[0]}) * $widest) . "| $_ \n" foreach @sorted;

এখনই কয়েকটি বাগ রয়েছে; ফিক্সিং এবং সংক্ষিপ্তকরণ
জেএসবি ձոգչ

4
এটি যখন দ্বিতীয় শব্দটি প্রথমটির চেয়ে অনেক দীর্ঘ হয়, তখন এটি কেস করে না?
জোয়

1
উভয় foreachগুলি forএস হিসাবে লেখা যেতে পারে । 8 টি অক্ষর নিচে। তারপরে আপনার কাছে রয়েছে grep{!($_~~@s)}map{lc=~/[a-z]+/g}<>, যা আমি বিশ্বাস করি grep{!(/$_/i~~@s)}<>=~/[a-z]+/gআরও 4 নিচে নামার জন্য এটি লেখা যেতে পারে । এর " "সাথে প্রতিস্থাপন করুন $"এবং আপনি আরও 1 টি নিচে ...
জায়েদ

sort{$c{$b}-$c{$a}}...আরও দুটি বাঁচাতে। এছাড়াও আপনি শুধু পাস করতে পারেন %cপরিবর্তে keys %cকরার sortফাংশন এবং চার সংরক্ষণ আরও অনেক কিছু।
ভিড়

20

উইন্ডোজ পাওয়ারশেল, 199 টি অক্ষর

$x=$input-split'\P{L}'-notmatch'^(the|and|of|to|.?|i[tns]|or)$'|group|sort *
filter f($w){' '+'_'*$w
$x[-1..-22]|%{"|$('_'*($w*$_.Count/$x[-1].Count))| "+$_.Name}}
f(76..1|?{!((f $_)-match'.'*80)})[0]

(শেষ লাইন বিরতি প্রয়োজনীয় নয়, তবে পাঠযোগ্যতার জন্য এখানে অন্তর্ভুক্ত করা হয়েছে))

( আমার এসভিএন সংগ্রহস্থলে বর্তমান কোড এবং আমার পরীক্ষার ফাইলগুলি পাওয়া যায় I আমি আশা করি যে আমার পরীক্ষার কেসগুলি সর্বাধিক সাধারণ ত্রুটিগুলি ধরা দেয় (বারের দৈর্ঘ্য, রেজেক্স ম্যাচিংয়ের সমস্যা এবং আরও কয়েকটি)))

অনুমিতি:

  • ইনপুট হিসাবে মার্কিন ASCII। এটি সম্ভবত ইউনিকোডের সাথে অদ্ভুত হয়ে যায়।
  • লেখায় কমপক্ষে দুটি অবিরাম শব্দ

ইতিহাস

রিল্যাক্সড ভার্সন (137), যেহেতু এখনই এটি আলাদাভাবে গণনা করা হয়েছে, স্পষ্টত:

($x=$input-split'\P{L}'-notmatch'^(the|and|of|to|.?|i[tns]|or)$'|group|sort *)[-1..-22]|%{"|$('_'*(76*$_.Count/$x[-1].Count))| "+$_.Name}
  • প্রথম বারটি বন্ধ করে না
  • অ-প্রথম শব্দের দৈর্ঘ্যের জন্য অ্যাকাউন্ট করে না

অন্যান্য সমাধানের তুলনায় এক অক্ষরের বার দৈর্ঘ্যের বিভিন্নতা হ'ল পাওয়ারশেল যখন ভাসমান-পয়েন্ট সংখ্যাগুলিকে পূর্ণসংখ্যায় রূপান্তরিত করেন তখন কাটা কাটার পরিবর্তে বৃত্তাকার ব্যবহার করে। যেহেতু কার্যটির জন্য কেবল আনুপাতিক বারের দৈর্ঘ্য প্রয়োজন এটি যথাযথ হওয়া উচিত।

অন্যান্য সমাধানের তুলনায় আমি দীর্ঘতম বারের দৈর্ঘ্য নির্ধারণে কিছুটা ভিন্ন পদ্ধতি গ্রহণ করেছি কেবলমাত্র চেষ্টা করে এবং সর্বোচ্চ দৈর্ঘ্যটি গ্রহণের ক্ষেত্রে যেখানে কোনও লাইন 80 টি অক্ষরের বেশি নয়।

বর্ণিত একটি পুরানো সংস্করণ এখানে পাওয়া যাবে


চিত্তাকর্ষক, মনে হচ্ছে পাওয়ারশেলটি গল্ফের জন্য উপযুক্ত পরিবেশ। বারের দৈর্ঘ্যের বিষয়টি বিবেচনা করে আপনার দৃষ্টিভঙ্গি হ'ল আমি সেই অনুমানের বর্ণনার (যা তেমন উজ্জ্বল নয়, স্বীকার করছি) ঠিক বর্ণনা করার চেষ্টা করেছি।
ক্রিস্টোফিড

1
@ ক্রিস্টোফিড: আমার অভিজ্ঞতায় (অ্যানার্কি গল্ফ, কিছু প্রজেক্ট এলারের কাজ এবং এটির মজাদার জন্য আরও কিছু কাজ), পাওয়ারশেল সাধারণত রুবির চেয়ে কিছুটা খারাপ এবং প্রায়শই পার্ল এবং পাইথনের সাথে বাঁধা বা আরও ভাল। যদিও গল্ফস্ক্রিপ্টের জন্য কোনও মিল নেই। তবে যতদূর আমি দেখতে পাচ্ছি, এটি সবচেয়ে সংক্ষিপ্ত সমাধান হতে পারে যা সঠিকভাবে বার দৈর্ঘ্যের জন্য দায়ী ;-)
জোয়

স্পষ্টতই আমি ঠিক ছিলাম। পাওয়ারশেল আরও ভাল করতে পারে - আরও ভাল! মন্তব্য সহ একটি বর্ধিত সংস্করণ সরবরাহ করুন।
গাবে

জোহানেস: আপনি চেষ্টা করেছেন -split("\b(?:the|and|of|to|a|i[tns]?|or)\b|[^a-z]")? এটা আমার জন্য কাজ করে.
গাবি

আউটপুট স্ট্রিংটি বিভক্ত করতে ভুলবেন না: "|$('_'*($w*$_.count/$x[0].count))| $($_.name) "(বা শেষ স্থানটি মুছে ফেলুন, এটি স্বয়ংক্রিয়ভাবে সাজানো হিসাবে)। এবং -split("(?:\b(?:the|and|of|to|a|i[tns]?|or)\b|[^a-z])+")ফাঁকা (বা ব্যবহার [-2..-23]) অন্তর্ভুক্ত না করে আপনি আরও কিছু সঞ্চয় করতে ব্যবহার করতে পারেন ।
গাবে

19

রুবি, 215, 216 , 218 , 221 , 224 , 236 , 237 অক্ষর

আপডেট 1: হুর ! এটির সাথে একটি টাই এর জাতীয় Bangs ' সমাধান । আর কেটে ফেলার উপায় ভাবতে পারি না :)

আপডেট 2: একটি নোংরা গল্ফ কৌশল খেল। পরিবর্তিত eachহয়েছেmap1 টি অক্ষর সংরক্ষণ হয়েছে :)

আপডেট 3: +2 এ পরিবর্তিত File.readহয়েছে IO.readArray.group_byখুব ফলপ্রসূ ছিল না, এটি reduce+6 এ পরিবর্তিত হয়েছিল । কেস সংবেদনশীল চেক প্রয়োজন পরে লো কেসিং পরে প্রয়োজন হয় নাdowncaseরেজেক্স +1 এ । অবতরণ ক্রম অনুসারে বাছাই করা খুব সহজেই +6 মানটিকে অগ্রাহ্য করে। মোট সঞ্চয় +15

আপডেট 4: [0]পরিবর্তে .first, +3। (@ Shtééf)

আপডেট 5: lস্থানে পরিবর্তনশীল প্রসারিত করুন , +1। sস্থানে পরিবর্তনশীল প্রসারিত করুন , +2। (@ Shtééf)

আপডেট 6: প্রথম লাইনের ইন্টারপোলেশন পরিবর্তে স্ট্রিং সংযোজন ব্যবহার করুন, +2। (@ Shtééf)

w=(IO.read($_).downcase.scan(/[a-z]+/)-%w{the and of to a i it in or is}).reduce(Hash.new 0){|m,o|m[o]+=1;m}.sort_by{|k,v|-v}.take 22;m=76-w[0][0].size;puts' '+'_'*m;w.map{|x,f|puts"|#{'_'*(f*1.0/w[0][1]*m)}| #{x} "}

আপডেট 7: প্রথম পুনরাবৃত্তিটি সনাক্ত করতে আমি পুরো হুপলা পেরিয়ে গিয়েছিলাম উদাহরণের ভেরিয়েবলগুলি ব্যবহার করে লুপের অভ্যন্তরে । আমার যা কিছু পেয়েছে তা +1, যদিও সম্ভবত সম্ভাবনা রয়েছে। পূর্ববর্তী সংস্করণ সংরক্ষণ করা, কারণ আমি বিশ্বাস করি এটি একটি কালো যাদু। (@ Shtééf)

(IO.read($_).downcase.scan(/[a-z]+/)-%w{the and of to a i it in or is}).reduce(Hash.new 0){|m,o|m[o]+=1;m}.sort_by{|k,v|-v}.take(22).map{|x,f|@f||(@f=f;puts' '+'_'*(@m=76-x.size));puts"|#{'_'*(f*1.0/@f*@m)}| #{x} "}

পঠনযোগ্য সংস্করণ

string = File.read($_).downcase

words = string.scan(/[a-z]+/i)
allowed_words = words - %w{the and of to a i it in or is}
sorted_words = allowed_words.group_by{ |x| x }.map{ |x,y| [x, y.size] }.sort{ |a,b| b[1] <=> a[1] }.take(22)
highest_frequency = sorted_words.first
highest_frequency_count = highest_frequency[1]
highest_frequency_word = highest_frequency[0]

word_length = highest_frequency_word.size
widest = 76 - word_length

puts " #{'_' * widest}"    
sorted_words.each do |word, freq|
  width = (freq * 1.0 / highest_frequency_count) * widest
  puts "|#{'_' * width}| #{word} "
end

ব্যবহার করা:

echo "Alice.txt" | ruby -ln GolfedWordFrequencies.rb

আউটপুট:

 _________________________________________________________________________
|_________________________________________________________________________| she 
|_______________________________________________________________| you 
|____________________________________________________________| said 
|_____________________________________________________| alice 
|_______________________________________________| was 
|___________________________________________| that 
|____________________________________| as 
|________________________________| her 
|_____________________________| with 
|_____________________________| at 
|____________________________| s 
|____________________________| t 
|__________________________| on 
|__________________________| all 
|_______________________| this 
|_______________________| for 
|_______________________| had 
|_______________________| but 
|______________________| be 
|_____________________| not 
|____________________| they 
|____________________| so 

3
"পি" "পুটস" এর শর্টকাট নয়? যে কয়েক শেভ করতে পারে।
rfusca

1
খুশী হলাম। scanযদিও আপনার ব্যবহার আমাকে আরও ভাল ধারণা দিয়েছে, তাই আমি আবার এগিয়ে এসেছি :)।
জেএসবি ձոգչ

2
আপনাকে বারগুলি স্কেল করতে হবে যাতে দীর্ঘতম শব্দটির সাথে এর বারটি 80 টি অক্ষরের সাথে খাপ খায়। ব্রায়ানের পরামর্শ অনুসারে, একটি দীর্ঘ দ্বিতীয় শব্দটি আপনার প্রোগ্রামটি ভেঙে দেবে।
গাবে

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

1
এখন, আমি ভুল হলে আমাকে সংশোধন করুন, তবে "ডাউনসেস" ব্যবহারের পরিবর্তে, আপনি কেন রেকেক্সপ কেস সংবেদনশীল পতাকাটি ব্যবহার করবেন না, যা 6-7 বাইট সংরক্ষণ করে, তাই না?
st0le

19

পাইথন ২.x, অক্ষাংশীয় পদ্ধতি = 227 183 অক্ষর

import sys,re
t=re.split('\W+',sys.stdin.read().lower())
r=sorted((-t.count(w),w)for w in set(t)if w not in'andithetoforinis')[:22]
for l,w in r:print(78-len(r[0][1]))*l/r[0][0]*'=',w

বাস্তবায়নে স্বাধীনতার অনুমতি দিয়ে, আমি একটি স্ট্রিং কনটেনটেশন নির্মাণ করেছি যাতে বর্জনের জন্য অনুরোধ করা সমস্ত শব্দ থাকে ( the, and, of, to, a, i, it, in, or, is) - পাশাপাশি এটি দুটি কুখ্যাত "শব্দ" sএবং tউদাহরণ থেকে বাদ দেয় - এবং আমি বিনামূল্যে বর্জনের জন্য ছুঁড়ে দিয়েছিলাম an, for, he। আমি অ্যালিস, কিং জেমস বাইবেল এবং জারগন ফাইলের শব্দের কর্পাসের বিরুদ্ধে এই সমস্ত শব্দের সমস্ত বক্তব্য চেষ্টা করেছি তা দেখার জন্য যে স্ট্রিং দ্বারা ভুল শব্দে বাদ দেওয়া হবে এমন কোনও শব্দ রয়েছে কিনা তা দেখার জন্য। এবং এভাবেই আমি দুটি বর্জনীয় স্ট্রিং দিয়ে শেষ করেছি: itheandtoforinisএবং andithetoforinis

পুনশ্চ. কোডটি ছোট করার জন্য অন্যান্য সমাধানগুলি থেকে ধার করা b

=========================================================================== she 
================================================================= you
============================================================== said
====================================================== alice
================================================ was
============================================ that
===================================== as
================================= her
============================== at
============================== with
=========================== on
=========================== all
======================== this
======================== had
======================= but
====================== be
====================== not
===================== they
==================== so
=================== very
=================== what
================= little

অর্থহীন বাক্য

শব্দগুলি উপেক্ষা করার বিষয়ে, কেউ ভাবেন যে সেগুলিকে ইংরেজিতে সর্বাধিক ব্যবহৃত শব্দগুলির তালিকা থেকে নেওয়া হবে। এই তালিকাটি ব্যবহৃত পাঠ্য কর্পাসের উপর নির্ভর করে । প্রতি (সবচেয়ে জনপ্রিয় তালিকার এক http://en.wikipedia.org/wiki/Most_common_words_in_English , http://www.english-for-students.com/Fre , http: // www। sporcle.com/games/common_english_words.php ), শীর্ষ দশটি শব্দ হ'ল :the be(am/are/is/was/were) to of and a in that have I

অ্যালিস ইন ওয়ান্ডারল্যান্ডের পাঠ্যের the and to a of it she i you said
শীর্ষ 10 শব্দগুলি হ'ল জারগন ফাইলের শীর্ষ 10 শব্দ (v4.4.7)the a of to and in is that or for

সুতরাং প্রশ্ন কেন or সমস্যাটিকে উপেক্ষা করার তালিকায় অন্তর্ভুক্ত করা হয়েছিল, শব্দটি যখন এটি জনপ্রিয়তার 30 তমthat (সপ্তম সর্বাধিক ব্যবহৃত) নয় । ইত্যাদি ইত্যাদি তাই আমি বিশ্বাস করি যে উপেক্ষা করা তালিকাটি কার্যকরভাবে সরবরাহ করা উচিত (বা বাদ দেওয়া যেতে পারে)।

বিকল্প ধারণাটি কেবল ফলাফল থেকে শীর্ষ 10 শব্দগুলি এড়িয়ে যাওয়া হয় - যা আসলে সমাধানটি সংক্ষিপ্ত করবে (প্রাথমিক - শুধুমাত্র 11 তম থেকে 32 তম এন্ট্রি প্রদর্শন করতে হবে)।


পাইথন ২.x, নিয়মিত পন্থা = = 277 243 অক্ষর

উপরের কোডটিতে অঙ্কিত চার্টটি সরল করা হয়েছে (বারগুলির জন্য কেবল একটি অক্ষর ব্যবহার করে)। যদি কেউ সমস্যার বর্ণনা থেকে চার্টটি হ'ল পুনরুত্পাদন করতে চায় (যা প্রয়োজন ছিল না), এই কোডটি এটি করবে:

import sys,re
t=re.split('\W+',sys.stdin.read().lower())
r=sorted((-t.count(w),w)for w in set(t)-set(sys.argv))[:22]
h=min(9*l/(77-len(w))for l,w in r)
print'',9*r[0][0]/h*'_'
for l,w in r:print'|'+9*l/h*'_'+'|',w

বাদ দিতে আমি 10 টি শব্দের কিছুটা এলোমেলো পছন্দ নিয়ে একটি বিষয় নিয়েছি the, and, of, to, a, i, it, in, or, is যাতে সেগুলি কমান্ড লাইন প্যারামিটার হিসাবে পাস করতে হয়:
python WordFrequencyChart.py the and of to a i it in or is <"Alice's Adventures in Wonderland.txt"

এটি 213 অক্ষর + 30, যদি আমরা কমান্ড লাইন = 243 এ পাস করা "আসল" উপেক্ষা তালিকার জন্য অ্যাকাউন্ট করি

পুনশ্চ. দ্বিতীয় কোড সমস্ত শীর্ষ শব্দের দৈর্ঘ্যের জন্য "সামঞ্জস্য "ও করে, সুতরাং এগুলির কোনওটিই অবক্ষয়ের ক্ষেত্রে উপচে পড়বে না।

 _______________________________________________________________
|_______________________________________________________________| she
|_______________________________________________________| superlongstringstring
|_____________________________________________________| said
|______________________________________________| alice
|_________________________________________| was
|______________________________________| that
|_______________________________| as
|____________________________| her
|__________________________| at
|__________________________| with
|_________________________| s
|_________________________| t
|_______________________| on
|_______________________| all
|____________________| this
|____________________| for
|____________________| had
|____________________| but
|___________________| be
|___________________| not
|_________________| they
|_________________| so

এখনও অবধি দুর্দান্ত সমাধান যদিও শব্দটি উপেক্ষা শব্দের প্রয়োগ করা হয়নি (এখনও) এবং বারগুলি এই মুহুর্তে কিছুটা প্রাথমিক।
ক্রিস্টোফিড

@ ক্রিস্টোফিড: এটি সেখানে ছিল, তবে কোনও "ব্যবহারকারী গাইড" ছিল না।
সবেমাত্র

আপনার ভাষা এবং সমাধানগুলির তালিকা সম্পর্কিত: দয়া করে এমন সমাধানগুলি সন্ধান করুন যা বিভাজনগুলি \Wব্যবহার করে বা \bএকটি রেজেক্সে ব্যবহার করে কারণ সেগুলি সম্ভবত অনুমান অনুসারে হয় না , যার অর্থ তারা অঙ্কগুলিতে বিভক্ত হবে না _এবং তারা স্ট্রিং শব্দগুলি স্ট্রিং থেকে সরিয়ে ফেলতে পারে না meaning যেমন the_foo_or123bar। তারা পরীক্ষার পাঠ্যে উপস্থিত নাও হতে পারে তবে সেই ক্ষেত্রে স্পেসিফিকেশনটি বেশ পরিষ্কার।
জোয়

আশ্চর্যজনক কাজ নাস, আমি এইটিকে অনুকূল করার চেষ্টা করে একটি বিকেল কাটিয়েছি এবং কেবল একটি উন্নতি পেয়েছি। আপনি sys.argvহ্যাকটি সরিয়ে এবং ব্যবহার করে এটি 239 টি re.findall(r'\b(?!(?:the|and|.|of|to|i[tns]|or)\b)\w+',sys.stdin.read().lower())
অক্ষরে

12

হাস্কেল - 366 351 344 337 333 টি অক্ষর

( mainপাঠযোগ্যতার জন্য যুক্ত হওয়া একটি লাইন ব্রেক এবং শেষ লাইনের শেষে কোনও লাইন ব্রেকের প্রয়োজন নেই))

import Data.List
import Data.Char
l=length
t=filter
m=map
f c|isAlpha c=toLower c|0<1=' '
h w=(-l w,head w)
x!(q,w)='|':replicate(minimum$m(q?)x)'_'++"| "++w
q?(g,w)=q*(77-l w)`div`g
b x=m(x!)x
a(l:r)=(' ':t(=='_')l):l:r
main=interact$unlines.a.b.take 22.sort.m h.group.sort
  .t(`notElem`words"the and of to a i it in or is").words.m f

এটি কীভাবে কাজ করে তা আর্গুমেন্টটি interactপিছনের দিকে পড়ে দেখা যায় :

  • map f ছোট বর্ণমালা বর্ণানুক্রমিক, স্থানের সাথে সমস্ত কিছু প্রতিস্থাপন করে।
  • words শব্দের একটি তালিকা তৈরি করে, পৃথকীকরণের সাদা স্থান ছেড়ে দেয়।
  • filter (notlelem words "the and of to a i it in or is")নিষিদ্ধ শব্দ সহ সমস্ত এন্ট্রি বাতিল করে দেয়।
  • group . sort শব্দগুলি বাছাই করে, এবং অভিন্নকে তালিকায় দলবদ্ধ করে।
  • map hঅভিন্ন শব্দের প্রতিটি তালিকাকে ফর্মের একটি অংশে ম্যাপ করুন (-frequency, word)
  • take 22 . sort অবতরণ ফ্রিকোয়েন্সি (প্রথম টিপল এন্ট্রি) দ্বারা টিপলগুলি বাছাই করে এবং কেবল প্রথম 22 টি টিপল রাখে।
  • b মানচিত্র বারে tuples (নীচে দেখুন)
  • a শীর্ষস্থানীয় দণ্ডটি সম্পূর্ণ করতে আন্ডারস্কোরগুলির প্রথম লাইনটি প্রস্তুত করে।
  • unlines এই নতুন লাইনের সাথে একসাথে যোগ হয়।

কৌতুকপূর্ণ বিটটি সঠিকভাবে বারের দৈর্ঘ্য পাচ্ছে। আমি ধরে নিয়েছি যে কেবলমাত্র বারের দৈর্ঘ্যের দিকে গণনা আন্ডারস্কোর, সুতরাং ||শূন্য দৈর্ঘ্যের একটি বার হবে। ফাংশন bমানচিত্রের c xউপরে x, যেখানে xহিস্টোগ্রামের তালিকা। সম্পূর্ণ তালিকাটি পাস করা হয়েছে c, যাতে প্রতিটি অনুরোধ cকল করে নিজের জন্য স্কেল ফ্যাক্টরটি গণনা করতে পারে u। এইভাবে, আমি ভাসমান-পয়েন্টের গণিত বা যুক্তিগুলি ব্যবহার করা এড়িয়ে চলি, যার রূপান্তর ফাংশন এবং আমদানি অনেকগুলি অক্ষর খায়।

ব্যবহারের কৌশলটি নোট করুন -frequency। এই প্রয়োজনীয়তা সরিয়ে ফেলা হবে যেহেতু বাছাই (আরোহী) হবে স্থান বৃহত্তম ফ্রিকোয়েন্সি সাথে শব্দগুলো প্রথম। পরে, ফাংশনে , দুটি মানগুলি গুণিত হয়, যা প্রত্যাখ্যানকে বাতিল করে দেয়।reversesort-frequencyu-frequency


খুব সুন্দর কাজ (উত্সাহিত হবে তবে এই থ্রেডের সমস্ত দুর্দান্ত উত্তর সহ আজকের ভোটের সংখ্যা খুব কম)।
ক্রিস্টোফিড

এটি আমার চোখকে এমনভাবে ব্যাথা দেয় যা বর্ণনা করার বিষয়ে এমনকি ভাবতেও বেদনাদায়ক হয়, তবে আমি এটিকে স্পষ্টত কোডে বিপরীত ইঞ্জিনিয়ারিংয়ের মাধ্যমে হাসকলকে অনেক কিছু শিখেছি। ঠিক আছে স্যার। :-)
ওভেন এস।

এটি বাস্তবে মোটামুটি মুর্খবাদী হাস্কেল এখনও সত্যই কার্যকর নয়, যদিও। সংক্ষিপ্ত নামগুলি এটিকে সত্যিকারের চেয়ে আরও খারাপ দেখায়।
টমাস

@ থমাস: আপনি এটি আবার বলতে পারেন। :-)
ওভেন এস

1
divআসলে সরানো যায় না ! চেষ্টা করে দেখুন - আউটপুটটি ভুল। কারণ হ'ল divপূর্বে *নির্ভুলতা হ্রাস করার আগে doing
এমটিএনভিউমার্ক

11

জাভাস্ক্রিপ্ট 1.8 (স্পাইডারমোনকি) - 354

x={};p='|';e=' ';z=[];c=77
while(l=readline())l.toLowerCase().replace(/\b(?!(the|and|of|to|a|i[tns]?|or)\b)\w+/g,function(y)x[y]?x[y].c++:z.push(x[y]={w:y,c:1}))
z=z.sort(function(a,b)b.c-a.c).slice(0,22)
for each(v in z){v.r=v.c/z[0].c
c=c>(l=(77-v.w.length)/v.r)?l:c}for(k in z){v=z[k]
s=Array(v.r*c|0).join('_')
if(!+k)print(e+s+e)
print(p+s+p+e+v.w)}

দুঃখের বিষয়, for([k,v]in z)রাইনো সংস্করণ থেকে স্পাইডারমনকিতে কাজ করতে চান বলে মনে হয় না, এবং readFile()এটি ব্যবহারের চেয়ে কিছুটা সহজ readline()তবে 1.8 পর্যন্ত এগিয়ে যাওয়া আমাদের আরও কয়েকটি লাইন কাটতে ফাংশন ক্লোজার ব্যবহার করতে দেয় ....

পাঠযোগ্যতার জন্য সাদা স্থান যুক্ত করা হচ্ছে:

x={};p='|';e=' ';z=[];c=77
while(l=readline())
  l.toLowerCase().replace(/\b(?!(the|and|of|to|a|i[tns]?|or)\b)\w+/g,
   function(y) x[y] ? x[y].c++ : z.push( x[y] = {w: y, c: 1} )
  )
z=z.sort(function(a,b) b.c - a.c).slice(0,22)
for each(v in z){
  v.r=v.c/z[0].c
  c=c>(l=(77-v.w.length)/v.r)?l:c
}
for(k in z){
  v=z[k]
  s=Array(v.r*c|0).join('_')
  if(!+k)print(e+s+e)
  print(p+s+p+e+v.w)
}

ব্যবহার: js golf.js < input.txt

আউটপুট:

 _________________________________________________________________________ 
| _________________________________________________________________________ | সে
| _______________________________________________________________ | আপনি
| ____________________________________________________________ | বললেন
| ____________________________________________________ | এলিস
| ______________________________________________ | ছিল
| ___________________________________________ | যে
| ___________________________________ | যেমন
| ________________________________ | তার
| _____________________________ | এ
| _____________________________ | সঙ্গে
| ____________________________ | গুলি
| ____________________________ | টি
| __________________________ | চালু
| _________________________ | সব
| _______________________ | এই
| ______________________ | জন্য
| ______________________ | ছিল
| ______________________ | কিন্তু
| _____________________ | থাকা
| _____________________ | না
| ___________________ | তারা
| ___________________ | সুতরাং

(বেস সংস্করণ - বার প্রস্থ সঠিকভাবে পরিচালনা করে না)

জাভাস্ক্রিপ্ট (গণ্ডার) - 405 395 387 377 368 343 304 অক্ষর

আমি মনে করি আমার বাছাইয়ের যুক্তি বন্ধ, তবে .. আমি ডুনো। ব্রেনফার্ট স্থির।

মাইনযুক্ত (গালি দেওয়া কখনও কখনও \nহিসাবে ব্যাখ্যা করা হয় ;):

x={};p='|';e=' ';z=[]
readFile(arguments[0]).toLowerCase().replace(/\b(?!(the|and|of|to|a|i[tns]?|or)\b)\w+/g,function(y){x[y]?x[y].c++:z.push(x[y]={w:y,c:1})})
z=z.sort(function(a,b){return b.c-a.c}).slice(0,22)
for([k,v]in z){s=Array((v.c/z[0].c)*70|0).join('_')
if(!+k)print(e+s+e)
print(p+s+p+e+v.w)}

আহ, স্যার। আমি বিশ্বাস করি এটি আপনার গেন্টলেট। আপনার দ্বিতীয় আমার সাথে কথা বলতে।
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

2
বিটিডব্লিউ-- আমি i[tns]?কিছুটা পছন্দ করি । খুব গোপনে।
dmckee --- প্রাক্তন মডারেটর বিড়ালছানা

@ ডিএমকেকে - ভাল খেলেছি, আমি মনে করি না যে আমি আপনার ৩6 beat টি পরাজিত করতে পারি, আপনার প্রাপ্য উপভোগ উপভোগ করতে পারি :)
ম্যাট

আপনি অবশ্যই 336 টি পরাজিত করতে পারেন ... একটি 23 টি চরিত্রের কাটা উপলব্ধ রয়েছে - .replace(/[^\w ]/g, e).split(/\s+/).map(আপনার .replace(/\w+/g,একই ফাংশনটি প্রতিস্থাপন এবং ব্যবহার করা যেতে পারে .map... এছাড়াও নিশ্চিত হন না যে রাইনো function(a,b)b.c-a.cআপনার সাজানোর ক্রিয়াটির পরিবর্তে (স্পাইডারমনকি করেন) সমর্থন করে, তবে তা হবে শেভ {return }... b.c-a.cএটি a.c<b.cবিটিডব্লিউর জন্য আরও ভাল সাজান ... এই পরিবর্তনগুলি সহ নীচে একটি স্পাইডারমনকি সংস্করণ সম্পাদনা করা
gnarf

আমি আমার স্পাইডারমনকি সংস্করণটিকে শীর্ষে স্থানান্তরিত করেছি যেহেতু এটি বার প্রস্থের সীমাবদ্ধতার সাথে সঙ্গতিপূর্ণ ... এছাড়াও আপনার আসল সংস্করণে আরও কয়েকটি অক্ষর ছাঁটাতে পরিচালিত হয়েছে একটি একক প্রতিস্থাপন (), এবং ?:যদিও থেকে কাজ করার জন্য দুর্দান্ত বেস সহ কয়েকটি আইএফএস গল্ফ করেছে !
gnarf

11

পিএইচপি সিএলআই সংস্করণ (450 অক্ষর)

এই সমাধানটি সর্বশেষ প্রয়োজনটিকে বিবেচনা করে যা বেশিরভাগ শুদ্ধবাদীরা দৃin়তার সাথে উপেক্ষা করার জন্য বেছে নিয়েছিল। এটি 170 অক্ষর কাস্ট করেছে!

ব্যবহার: php.exe <this.php> <file.txt>

minified:

<?php $a=array_count_values(array_filter(preg_split('/[^a-z]/',strtolower(file_get_contents($argv[1])),-1,1),function($x){return !preg_match("/^(.|the|and|of|to|it|in|or|is)$/",$x);}));arsort($a);$a=array_slice($a,0,22);function R($a,$F,$B){$r=array();foreach($a as$x=>$f){$l=strlen($x);$r[$x]=$b=$f*$B/$F;if($l+$b>76)return R($a,$f,76-$l);}return$r;}$c=R($a,max($a),76-strlen(key($a)));foreach($a as$x=>$f)echo '|',str_repeat('-',$c[$x]),"| $x\n";?>

মানব পাঠযোগ্য:

<?php

// Read:
$s = strtolower(file_get_contents($argv[1]));

// Split:
$a = preg_split('/[^a-z]/', $s, -1, PREG_SPLIT_NO_EMPTY);

// Remove unwanted words:
$a = array_filter($a, function($x){
       return !preg_match("/^(.|the|and|of|to|it|in|or|is)$/",$x);
     });

// Count:
$a = array_count_values($a);

// Sort:
arsort($a);

// Pick top 22:
$a=array_slice($a,0,22);


// Recursive function to adjust bar widths
// according to the last requirement:
function R($a,$F,$B){
    $r = array();
    foreach($a as $x=>$f){
        $l = strlen($x);
        $r[$x] = $b = $f * $B / $F;
        if ( $l + $b > 76 )
            return R($a,$f,76-$l);
    }
    return $r;
}

// Apply the function:
$c = R($a,max($a),76-strlen(key($a)));


// Output:
foreach ($a as $x => $f)
    echo '|',str_repeat('-',$c[$x]),"| $x\n";

?>

আউটপুট:

|-------------------------------------------------------------------------| she
|---------------------------------------------------------------| you
|------------------------------------------------------------| said
|-----------------------------------------------------| alice
|-----------------------------------------------| was
|-------------------------------------------| that
|------------------------------------| as
|--------------------------------| her
|-----------------------------| at
|-----------------------------| with
|--------------------------| on
|--------------------------| all
|-----------------------| this
|-----------------------| for
|-----------------------| had
|-----------------------| but
|----------------------| be
|---------------------| not
|--------------------| they
|--------------------| so
|-------------------| very
|------------------| what

যখন একটি দীর্ঘ শব্দ থাকে, বারগুলি সঠিকভাবে সমন্বয় করা হয়:

|--------------------------------------------------------| she
|---------------------------------------------------| thisisareallylongwordhere
|-------------------------------------------------| you
|-----------------------------------------------| said
|-----------------------------------------| alice
|------------------------------------| was
|---------------------------------| that
|---------------------------| as
|-------------------------| her
|-----------------------| with
|-----------------------| at
|--------------------| on
|--------------------| all
|------------------| this
|------------------| for
|------------------| had
|-----------------| but
|-----------------| be
|----------------| not
|---------------| they
|---------------| so
|--------------| very

11

পাইথন 3.1 - 245 229 চ্যাটার

আমার ধারণা, কাউন্টার ব্যবহার করা প্রতারণার মতো :) :) আমি প্রায় এক সপ্তাহ আগে এটি সম্পর্কে পড়েছিলাম, সুতরাং এটি কীভাবে কাজ করে তা দেখার উপযুক্ত সুযোগ ছিল।

import re,collections
o=collections.Counter([w for w in re.findall("[a-z]+",open("!").read().lower())if w not in"a and i in is it of or the to".split()]).most_common(22)
print('\n'.join('|'+76*v//o[0][1]*'_'+'| '+k for k,v in o))

প্রিন্ট আউট:

|____________________________________________________________________________| she
|__________________________________________________________________| you
|_______________________________________________________________| said
|_______________________________________________________| alice
|_________________________________________________| was
|_____________________________________________| that
|_____________________________________| as
|__________________________________| her
|_______________________________| with
|_______________________________| at
|______________________________| s
|_____________________________| t
|____________________________| on
|___________________________| all
|________________________| this
|________________________| for
|________________________| had
|________________________| but
|______________________| be
|______________________| not
|_____________________| they
|____________________| so

একেএক্সের সমাধান থেকে কিছু কোড "ধার করা" হয়েছিল।


প্রথম লাইনটি অনুপস্থিত। এবং বারের দৈর্ঘ্য সঠিক নয়।
জোয়

আপনার কোডে মনে হচ্ছে open('!')স্টিডিন থেকে পড়ে - কোন সংস্করণ / ওএস চালু আছে? নাকি আপনার ফাইলটির নাম '' দিতে হবে?!
নাস বনভ

ফাইলটির নাম দিন! " :) দুঃখিত যে এটি অস্পষ্ট ছিল, এবং আমার এটি উল্লেখ করা উচিত ছিল।
স্যাম ডোলান

11

পার্ল, 205 191 189 টি অক্ষর / 205 অক্ষর (সম্পূর্ণরূপে বাস্তবায়িত)

কিছু অংশ পূর্বের পার্ল / রুবি সাবমিশন দ্বারা অনুপ্রাণিত হয়েছিল, দু'জনের অনুরূপ মতামত স্বতন্ত্রভাবে এসেছিল, অন্যগুলি আসল। সংক্ষিপ্ত সংস্করণে আমি অন্যান্য জমাগুলি থেকে দেখে / শিখেছি এমন কিছু বিষয় অন্তর্ভুক্ত করে।

মূল:

$k{$_}++for grep{$_!~/^(the|and|of|to|a|i|it|in|or|is)$/}map{lc=~/[a-z]+/g}<>;@t=sort{$k{$b}<=>$k{$a}}keys%k;$l=76-length$t[0];printf" %s
",'_'x$l;printf"|%s| $_
",'_'x int$k{$_}/$k{$t[0]}*$l for@t[0..21];

সর্বশেষ সংস্করণ 191 টি অক্ষরের নীচে:

/^(the|and|of|to|.|i[tns]|or)$/||$k{$_}++for map{lc=~/[a-z]+/g}<>;@e=sort{$k{$b}<=>$k{$a}}keys%k;$n=" %s
";$r=(76-y///c)/$k{$_=$e[0]};map{printf$n,'_'x($k{$_}*$r),$_;$n="|%s| %s
"}@e[0,0..21]

সর্বশেষতম সংস্করণ 189 টি অক্ষরে নেমে এসেছে:

/^(the|and|of|to|.|i[tns]|or)$/||$k{$_}++for map{lc=~/[a-z]+/g}<>;@_=sort{$k{$b}<=>$k{$a}}keys%k;$n=" %s
";$r=(76-m//)/$k{$_=$_[0]};map{printf$n,'_'x($k{$_}*$r),$_;$n="|%s| %s
"}@_[0,0..21]

এই সংস্করণটি (205 চর) পরে আর কী পাওয়া যাবে তার চেয়ে দীর্ঘ শব্দের সাথে রেখার জন্য অ্যাকাউন্ট করে।

/^(the|and|of|to|.|i[tns]|or)$/||$k{$_}++for map{lc=~/[a-z]+/g}<>;($r)=sort{$a<=>$b}map{(76-y///c)/$k{$_}}@e=sort{$k{$b}<=>$k{$a}}keys%k;$n=" %s
";map{printf$n,'_'x($k{$_}*$r),$_;$n="|%s| %s
";}@e[0,0..21]

10

পার্ল: 203 202 201 198 195 208 203/231 অক্ষর

$/=\0;/^(the|and|of|to|.|i[tns]|or)$/i||$x{lc$_}++for<>=~/[a-z]+/gi;map{$z=$x{$_};$y||{$y=(76-y///c)/$z}&&warn" "."_"x($z*$y)."\n";printf"|%.78s\n","_"x($z*$y)."| $_"}(sort{$x{$b}<=>$x{$a}}keys%x)[0..21]

প্যাথলজিকাল কেসটির জন্য নির্দেশিত আচরণ (বৈশ্বিক বার-স্কোচিং) সহ বিকল্প, সম্পূর্ণ বাস্তবায়ন যেখানে গৌণ শব্দটি উভয় জনপ্রিয় এবং দীর্ঘ ৮০ টিরও বেশি সংখ্যার সাথে মিলিত হতে পারে ( এই প্রয়োগটি ২৩১ অক্ষর ):

$/=\0;/^(the|and|of|to|.|i[tns]|or)$/i||$x{lc$_}++for<>=~/[a-z]+/gi;@e=(sort{$x{$b}<=>$x{$a}}keys%x)[0..21];for(@e){$p=(76-y///c)/$x{$_};($y&&$p>$y)||($y=$p)}warn" "."_"x($x{$e[0]}*$y)."\n";for(@e){warn"|"."_"x($x{$_}*$y)."| $_\n"}

স্পেসিফিকেশনটি কোথাও উল্লেখ করে নি যে এটি বন্ধ করতে হবে, তাই আমি প্রিন্টের পরিবর্তে পার্লের সতর্কতা () ব্যবহার করেছি - সেখানে চারটি অক্ষর সংরক্ষণ করা হয়েছে। পূর্বাভাসের পরিবর্তে মানচিত্র ব্যবহৃত হয়েছে, তবে আমার মনে হয়েছে বিভাজনে এখনও আরও কিছু সঞ্চয় থাকতে পারে (জয়েন ())। তবুও, এটি 203 এ নেমেছে - এটি হয়ত ঘুমায়। কমপক্ষে পার্ল এখন "শেল, গ্রেপ, টিআর, গ্রেপ, সাজান, ইউনিক, সাজান, মাথা, পার্ল" এখনকার জন্য চার্ট গণনা;) এর অধীনে রয়েছে

পিএস: রেডডিট বলেছেন "হাই";)

আপডেট: অ্যাসাইনমেন্ট এবং অন্তর্নিহিত স্কেলার রূপান্তর যোগদানের পক্ষে জয়েন্ট () সরানো হয়েছে। নিচে ২০২-এ। এছাড়াও দয়া করে নোট করুন যে আমি 2 টি অক্ষর ছাঁটাই করার ruleচ্ছিক "1-অক্ষরের শব্দের উপেক্ষা করুন" নিয়মের সুযোগ নিয়েছি, তাই মনে রাখবেন ফ্রিকোয়েন্সি গণনা এটি প্রতিফলিত করবে।

আপডেট 2: প্রথম স্থানে <> ব্যবহার করে একটি গুলিতে ফাইল আনার জন্য killing / হত্যা করার জন্য অ্যাস্পেইড অ্যাসাইনমেন্ট এবং অন্তর্নিহিত যোগদান। একই আকার, কিন্তু nastier। (! $ Y) {} এর জন্য $ y || {} && এর জন্য অদলবদল করা হয়েছে, আরও 1 টি চর => 201 সংরক্ষণ করেছেন।

আপডেট 3: মানচিত্রের ব্লক থেকে এলসি সরিয়ে নিয়ে লোয়ারসেকিংয়ের প্রথম দিকে (lc <>) নিয়ন্ত্রণ নিয়েছেন - আর প্রয়োজন নেই বলে উভয় রেইজেক্সগুলি আর ব্যবহার / i বিকল্পে সরিয়ে নিয়েছেন। Appতিহ্যবাহী পার্লগল্ফের জন্য সুস্পষ্ট শর্তাধীন x? Y: z কনস্ট্রাক্ট || অন্তর্নিহিত শর্তসাপেক্ষ নির্মান - /^...$/i?1:$x{$ } ++ for /^...$/mittedmitted$x{$ + ++ তিনটি অক্ষর সংরক্ষিত! => 198, 200 বাধা ভেঙেছে। খুব শীঘ্রই ঘুম হতে পারে ... সম্ভবত।

আপডেট 4: ঘুম বঞ্চনা আমাকে উন্মাদ করে তুলেছে। আমরা হব. আরও উন্মাদ। এটি কেবল সাধারণ খুশির পাঠ্য ফাইলগুলিকে বিশ্লেষণ করতে হবে তা নির্ধারণ করে, এটি যদি কোনও শূন্য স্থানে যায় তবে আমি তা ছেড়ে দিয়েছি। দুটি অক্ষর সংরক্ষণ করা হয়েছে। 1-চর সংক্ষিপ্ততর (এবং আরও অনেক গল্ফিশ) এর সাথে "দৈর্ঘ্য" প্রতিস্থাপন করা হয়েছে y /// গ - আপনি আমাকে শুনছেন, গল্ফস্ক্রিপ্ট ?? আমি তোমার জন্য আসছি!!! ফোঁপানি

আপডেট 5: স্লিপ ডিপ আমাকে 22 বরো সীমা এবং পরবর্তী-লাইন সীমাবদ্ধতা সম্পর্কে ভুলে গেছে। যারা পরিচালনা করেছেন তাদের সাথে 208 এ ব্যাক আপ করুন। খুব খারাপ নয়, এটি পরিচালনা করতে 13 টি অক্ষর বিশ্বের শেষ নয়। পার্লের রেজেক্স ইনলাইন ইওল দিয়ে চারপাশে খেলেছে, তবে এটি উভয় কাজে পেতে এবং চরগুলি সংরক্ষণ করতে সমস্যা হচ্ছে ... হ্যাঁ। বর্তমান আউটপুট মেলে উদাহরণ আপডেট।

আপডেট 6: অপসারণহীন ধনুর্বন্ধনী রক্ষা করা (...) এর জন্য, যেহেতু সিনট্যাকটিক ক্যান্ডি ++ আনন্দের সাথে এর বিপর্যয় ঘটাতে দেয়। চাস থেকে ইনপুট ধন্যবাদ। ওভেনস (আমার ক্লান্ত মস্তিষ্ককে স্মরণ করিয়ে দিচ্ছে), সেখানে i [tns] চরিত্রের ক্লাস পেয়েছি। 203 এ ফিরে যান।

আপডেট 7: দ্বিতীয় ভাগের কাজ যুক্ত করা, চশমাগুলির সম্পূর্ণ বাস্তবায়ন (প্যাথলজিকাল উদাহরণস্বরূপ কেস ছাড়াই মূল বৈশিষ্টের উপর ভিত্তি করে বেশিরভাগ লোকেরা করছেন কাটাকাটির পরিবর্তে মাধ্যমিক দীর্ঘ-শব্দের জন্য সম্পূর্ণ বার-স্কোচিং আচরণ সহ)

উদাহরণ:

 _________________________________________________________________________
|_________________________________________________________________________| she
|_______________________________________________________________| you
|____________________________________________________________| said
|_____________________________________________________| alice
|_______________________________________________| was
|___________________________________________| that
|____________________________________| as
|________________________________| her
|_____________________________| with
|_____________________________| at
|__________________________| on
|__________________________| all
|_______________________| this
|_______________________| for
|_______________________| had
|_______________________| but
|______________________| be
|_____________________| not
|____________________| they
|____________________| so
|___________________| very
|__________________| what

প্যাথলজিকাল কেসের বিকল্প প্রয়োগ উদাহরণ:

 _______________________________________________________________
|_______________________________________________________________| she
|_______________________________________________________| superlongstringstring
|____________________________________________________| said
|______________________________________________| alice
|________________________________________| was
|_____________________________________| that
|_______________________________| as
|____________________________| her
|_________________________| with
|_________________________| at
|_______________________| on
|______________________| all
|____________________| this
|____________________| for
|____________________| had
|____________________| but
|___________________| be
|__________________| not
|_________________| they
|_________________| so
|________________| very
|________________| what

আপনি ধ্বসে দ্বারা থামুন শব্দের জন্য Regex খাটো করতে পারেন is|in|it|iমধ্যে i[snt]?- এবং তারপর সেখানে ঐচ্ছিক নিয়ম সঙ্গে কোনো পার্থক্য আর নেই। (এইচএম, আমি কোনও পার্ল লোককে কীভাবে রিজেেক্স: ডি করতে হবে তা বলার বিষয়ে চিন্তা করিনি) - কেবল এখন সমস্যা: আমাকে আবার দেখতে হবে পার্লের থেকে আরও ভাল হওয়ার জন্য আমি কীভাবে আমার নিজের সমাধান থেকে তিনটি বাইট ছাঁটাই করতে পারি: - |
জোয়

ঠিক আছে, আমি আগে যা বলেছিলাম তার অংশটিকে উপেক্ষা করুন। এক-অক্ষরের শব্দের উপেক্ষা করা বয়সের সাথে না করার চেয়ে খাটো।
জোয়

প্রতিটি বাইট গণনা করা হয়;) আমি নিউলাইন ট্রিকটি করাকে বিবেচনা করেছি, তবে আমি বুঝতে পেরেছিলাম যে এটি আসলে একই সংখ্যক বাইট, যদিও এটি কম মুদ্রণযোগ্য অক্ষর ছিল। এখনও এটিকে আরও সঙ্কুচিত করতে পারি কিনা তা নিয়ে এখনও কাজ করছি :)
সিনটাএর

আহ্, কেস নরমালাইজেশন আমাকে 209 এ ছুঁড়ে ফেলেছে else আমি আর কী কাটতে পারি তা দেখছি না। যদিও পাওয়ারশেল পার্লের চেয়ে কম হতে পারে। ;-)
জোয়ে

আপনি যেখানে শীর্ষস্থানীয় 22 শব্দগুলিতে আউটপুট সীমাবদ্ধ রেখেছেন তাও আমি দেখতে পাচ্ছি না বা যেখানে আপনি নিশ্চিত করেছেন যে দীর্ঘ দ্বিতীয় শব্দটি মোড়া না।
গাবে

9

এফ #, 452 অক্ষর

স্ট্রেটফারওয়ার্ড: aশব্দ-গণনা জোড়ার ক্রম পান, প্রতি কলামে গুণমানের সেরা শব্দ-গণনা খুঁজে বের করুন k, তারপরে ফলাফলগুলি মুদ্রণ করুন।

let a=
 stdin.ReadToEnd().Split(" .?!,\":;'\r\n".ToCharArray(),enum 1)
 |>Seq.map(fun s->s.ToLower())|>Seq.countBy id
 |>Seq.filter(fun(w,n)->not(set["the";"and";"of";"to";"a";"i";"it";"in";"or";"is"].Contains w))
 |>Seq.sortBy(fun(w,n)-> -n)|>Seq.take 22
let k=a|>Seq.map(fun(w,n)->float(78-w.Length)/float n)|>Seq.min
let u n=String.replicate(int(float(n)*k)-2)"_"
printfn" %s "(u(snd(Seq.nth 0 a)))
for(w,n)in a do printfn"|%s| %s "(u n)w

উদাহরণ (আমার কাছে আপনার চেয়ে আলাদা ফ্রিক গণনা রয়েছে, কেন তা নিশ্চিত না):

% app.exe < Alice.txt

 _________________________________________________________________________
|_________________________________________________________________________| she
|_______________________________________________________________| you
|_____________________________________________________________| said
|_____________________________________________________| alice
|_______________________________________________| was
|___________________________________________| that
|___________________________________| as
|________________________________| her
|_____________________________| with
|_____________________________| at
|____________________________| t
|____________________________| s
|__________________________| on
|_________________________| all
|_______________________| this
|______________________| had
|______________________| for
|_____________________| but
|_____________________| be
|____________________| not
|___________________| they
|__________________| so

আমার নিজের সমাধানটি প্রকৃতপক্ষে কিছুটা দূরে ছিল (কিছুটা আলাদা স্পেকের কারণে), সমাধানগুলি এখন মিলছে ;-)
ক্রিস্টোফিড


2
(@ রোটার: অলৌকিক, যেটি দেওয়া আমার সবচেয়ে প্রাচীন সমাধান))
ব্রায়ান

আমি বাজি ধরছি আপনি বিভাজন, মানচিত্র এবং ফিল্টার পর্যায়ে মার্জ করে এটিকে কিছুটা ছোট করতে পারেন। আমি আরও আশা করতাম যে আপনার এতগুলি সংখ্যার দরকার নেই float
গাবে

বাসা বাঁধার কাজগুলি সাধারণত পাইপলাইন অপারেটর ব্যবহারের চেয়ে কম হয় না |>?
জোয়

8

পাইথন 2.6, 347 অক্ষর rs

import re
W,x={},"a and i in is it of or the to".split()
[W.__setitem__(w,W.get(w,0)-1)for w in re.findall("[a-z]+",file("11.txt").read().lower())if w not in x]
W=sorted(W.items(),key=lambda p:p[1])[:22]
bm=(76.-len(W[0][0]))/W[0][1]
U=lambda n:"_"*int(n*bm)
print "".join(("%s\n|%s| %s "%((""if i else" "+U(n)),U(n),w))for i,(w,n)in enumerate(W))

আউটপুট:

 _________________________________________________________________________
|_________________________________________________________________________| she 
|_______________________________________________________________| you 
|____________________________________________________________| said 
|_____________________________________________________| alice 
|_______________________________________________| was 
|___________________________________________| that 
|____________________________________| as 
|________________________________| her 
|_____________________________| with 
|_____________________________| at 
|____________________________| s 
|____________________________| t 
|__________________________| on 
|__________________________| all 
|_______________________| this 
|_______________________| for 
|_______________________| had 
|_______________________| but 
|______________________| be 
|_____________________| not 
|____________________| they 
|____________________| so 

1
আপনি লাইনটি হারাতে পারেন bm=(76.-len(W[0][0]))/W[0][1]যেহেতু আপনি কেবল একবার বিএম ব্যবহার করছেন (পরের লাইনটি তৈরি করুন U=lambda n:"_"*int(n*(76.-len(W[0][0]))/W[0][1]), 5 টি অক্ষর মুছুন। এছাড়াও: আপনি কোড গল্ফিংয়ে 2-বর্ণের পরিবর্তনশীল নামটি কেন ব্যবহার করবেন? ;-)
ক্রিস্টোফিড

শেষ লাইনে মুদ্রণের পরে স্থানটি প্রয়োজনীয় নয়, একটি চরিত্রকে শেভ করে
ক্রিস্টোফিড

1
দ্বিতীয় সর্বাধিক ঘন শব্দটি খুব দীর্ঘ হয়, তখন কেসটি বিবেচনা করে না?
জোয়ি

@ ক্রিস্টোফিড: কারণ আমি সেই কোডটি দেখছিলাম খুব দীর্ঘকাল ধরে। : পি ভাল ধরা। @ জোহানেস: এটিও ঠিক করা যেতে পারে, হ্যাঁ। নিশ্চিত না যে আমি যখন এটি লিখেছিলাম তখন অন্যান্য সমস্ত বাস্তবায়ন এটি করেছিল।
একেএস

7

* sh (+ curl), আংশিক সমাধান

এটি অসম্পূর্ণ, তবে এর নরকের জন্য, এখানে শব্দ-ফ্রিকোয়েন্সিটি 192 বাইটে সমস্যার অর্ধেক গণনা করা হচ্ছে:

curl -s http://www.gutenberg.org/files/11/11.txt|sed -e 's@[^a-z]@\n@gi'|tr '[:upper:]' '[:lower:]'|egrep -v '(^[^a-z]*$|\b(the|and|of|to|a|i|it|in|or|is)\b)' |sort|uniq -c|sort -n|tail -n 22

7

গাওক - 336 (মূলত 507) অক্ষর

(আউটপুট বিন্যাস স্থির করার পরে; সংকোচনের জিনিস ঠিক করা; টুইট করা; আবার টুইট করা; সম্পূর্ণ অপ্রয়োজনীয় বাছাইয়ের পদক্ষেপ অপসারণ; আবারও টুইট করা; আবারও (উফ এই ফরম্যাটিংটি ভেঙে ফেলেছে)) আরও কিছু টুইট; ম্যাট এর চ্যালেঞ্জ গ্রহণ করার জন্য আমি মরিয়াভাবে টুইট করি আরও কিছু; কয়েকটি সংরক্ষণের জন্য অন্য একটি জায়গা খুঁজে পেয়েছি তবে বারের দৈর্ঘ্যের বাগটি ঠিক করতে দু'জনকে ফিরিয়ে দিয়েছেন)

হে হে! আমি মুহুর্তে [ম্যাট এর জাভাস্ক্রিপ্ট] [1] সমাধান কাউন্টার চ্যালেঞ্জের চেয়ে এগিয়ে আছি ! ;) এবং [একেএসএক্সের অজগর] [2]।

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

এটি সমস্ত ভয়াবহভাবে অদক্ষ, আমি যে সমস্ত গল্ফফিকেশনগুলি করেছি এটির সাথে এটি বেশ ভয়াবহ হতে চলেছে।

minified:

{gsub("[^a-zA-Z]"," ");for(;NF;NF--)a[tolower($NF)]++}
END{split("the and of to a i it in or is",b," ");
for(w in b)delete a[b[w]];d=1;for(w in a){e=a[w]/(78-length(w));if(e>d)d=e}
for(i=22;i;--i){e=0;for(w in a)if(a[w]>e)e=a[x=w];l=a[x]/d-2;
t=sprintf(sprintf("%%%dc",l)," ");gsub(" ","_",t);if(i==22)print" "t;
print"|"t"| "x;delete a[x]}}

কেবল স্পষ্টতার জন্য লাইন বিরতি: এগুলি প্রয়োজনীয় নয় এবং এটি গণনা করা উচিত নয়।


আউটপুট:

$ gawk -f wordfreq.awk.min < 11.txt 
 _________________________________________________________________________
|_________________________________________________________________________| she
|_______________________________________________________________| you
|____________________________________________________________| said
|____________________________________________________| alice
|______________________________________________| was
|__________________________________________| that
|___________________________________| as
|_______________________________| her
|____________________________| with
|____________________________| at
|___________________________| s
|___________________________| t
|_________________________| on
|_________________________| all
|______________________| this
|______________________| for
|______________________| had
|_____________________| but
|____________________| be
|____________________| not
|___________________| they
|__________________| so
$ sed 's/you/superlongstring/gI' 11.txt | gawk -f wordfreq.awk.min
 ______________________________________________________________________
|______________________________________________________________________| she
|_____________________________________________________________| superlongstring
|__________________________________________________________| said
|__________________________________________________| alice
|____________________________________________| was
|_________________________________________| that
|_________________________________| as
|______________________________| her
|___________________________| with
|___________________________| at
|__________________________| s
|__________________________| t
|________________________| on
|________________________| all
|_____________________| this
|_____________________| for
|_____________________| had
|____________________| but
|___________________| be
|___________________| not
|__________________| they
|_________________| so

রিডেবল; 633 টি অক্ষর (মূলত 949):

{
    gsub("[^a-zA-Z]"," ");
    for(;NF;NF--)
    a[tolower($NF)]++
}
END{
    # remove "short" words
    split("the and of to a i it in or is",b," ");
    for (w in b) 
    delete a[b[w]];
    # Find the bar ratio
    d=1;
    for (w in a) {
    e=a[w]/(78-length(w));
    if (e>d)
        d=e
    }
    # Print the entries highest count first
    for (i=22; i; --i){               
    # find the highest count
    e=0;
    for (w in a) 
        if (a[w]>e)
        e=a[x=w];
        # Print the bar
    l=a[x]/d-2;
    # make a string of "_" the right length
    t=sprintf(sprintf("%%%dc",l)," ");
    gsub(" ","_",t);
    if (i==22) print" "t;
    print"|"t"| "x;
    delete a[x]
    }
}

ভাল কাজ, ভাল আপনি একটি যুক্ত / মন্তব্যযুক্ত সংস্করণ অন্তর্ভুক্ত করেছেন ;-)
ক্রিস্টোফিড

7

সাধারণ LISP, 670 টি অক্ষর

আমি একজন এলআইএসপি নবাগত এবং এটি গণনার জন্য হ্যাশ টেবিল ব্যবহার করার চেষ্টা (যাতে সম্ভবত সবচেয়ে কমপ্যাক্ট পদ্ধতি নয়)।

(flet((r()(let((x(read-char t nil)))(and x(char-downcase x)))))(do((c(
make-hash-table :test 'equal))(w NIL)(x(r)(r))y)((not x)(maphash(lambda
(k v)(if(not(find k '("""the""and""of""to""a""i""it""in""or""is"):test
'equal))(push(cons k v)y)))c)(setf y(sort y #'> :key #'cdr))(setf y
(subseq y 0(min(length y)22)))(let((f(apply #'min(mapcar(lambda(x)(/(-
76.0(length(car x)))(cdr x)))y))))(flet((o(n)(dotimes(i(floor(* n f)))
(write-char #\_))))(write-char #\Space)(o(cdar y))(write-char #\Newline)
(dolist(x y)(write-char #\|)(o(cdr x))(format t "| ~a~%"(car x))))))
(cond((char<= #\a x #\z)(push x w))(t(incf(gethash(concatenate 'string(
reverse w))c 0))(setf w nil)))))

সঙ্গে চালানো যেতে পারে উদাহরণস্বরূপ cat alice.txt | clisp -C golf.lisp

পাঠযোগ্য ফর্ম হয়

(flet ((r () (let ((x (read-char t nil)))
               (and x (char-downcase x)))))
  (do ((c (make-hash-table :test 'equal))  ; the word count map
       w y                                 ; current word and final word list
       (x (r) (r)))  ; iteration over all chars
       ((not x)

        ; make a list with (word . count) pairs removing stopwords
        (maphash (lambda (k v)
                   (if (not (find k '("" "the" "and" "of" "to"
                                      "a" "i" "it" "in" "or" "is")
                                  :test 'equal))
                       (push (cons k v) y)))
                 c)

        ; sort and truncate the list
        (setf y (sort y #'> :key #'cdr))
        (setf y (subseq y 0 (min (length y) 22)))

        ; find the scaling factor
        (let ((f (apply #'min
                        (mapcar (lambda (x) (/ (- 76.0 (length (car x)))
                                               (cdr x)))
                                y))))
          ; output
          (flet ((outx (n) (dotimes (i (floor (* n f))) (write-char #\_))))
             (write-char #\Space)
             (outx (cdar y))
             (write-char #\Newline)
             (dolist (x y)
               (write-char #\|)
               (outx (cdr x))
               (format t "| ~a~%" (car x))))))

       ; add alphabetic to current word, and bump word counter
       ; on non-alphabetic
       (cond
        ((char<= #\a x #\z)
         (push x w))
        (t
         (incf (gethash (concatenate 'string (reverse w)) c 0))
         (setf w nil)))))

আপনি কিছু ইনপুট আকার শেভ করতে একটি কাস্টম রিডার ম্যাক্রো ইনস্টল করার চেষ্টা করেছেন?
হারুন

অ্যারন আসলে এটি কেবলমাত্র এই কাজ করা আমার পক্ষে তুচ্ছ ছিল না ... :-) আসল গল্ফিং অংশের জন্য আমি কেবলমাত্র একটি অক্ষরের ভেরিয়েবল ব্যবহার করেছি এবং এগুলি সবই। যাইহোক, এই স্কেল সমস্যার জন্য সিএলে অন্তর্নিহিত কিছুটা উচ্চতর উচ্চারণের পাশাপাশি ("কনটেনেটেট 'স্ট্রিং", "সেটফ" বা "গেটাহাস" হত্যাকারী ... পাইথনটিতে তারা "+", "=", "[]" ) তবুও আমি এটি আরও অনেক খারাপ অনুভব করেছি যা আমি এমনকি যৌক্তিক স্তরেও প্রত্যাশা করতাম। এক অর্থে আমার মনে হয়েছে যে লিসপ ঠিক আছে, তবে সাধারণ লিসপ তাই-ই হয় এবং নামকরণের বাইরেও (সিএল-এর সাথে আমার অভিজ্ঞতা শূন্যের কাছাকাছি হওয়ায় এটি একেবারেই অন্যায় মন্তব্য করে পুনরায় পড়া)।
6502

সত্য। স্কিমটি একক নেমস্পেসের সাথে গল্ফিংকে আরও সহজ করে তুলবে। পুরো জায়গা জুড়ে স্ট্রিং-সংযোজনের পরিবর্তে, আপনি (লেটারাক ((একটি স্ট্রিং-অ্যাপেন্ড) (বি গেটাহাস)) ... (একটি "এক্স" "ইজ") ...)
হারুন

6

সি (828)

এটি অপ্রচলিত কোডের মতো দেখতে অনেকটা দুর্দান্ত এবং স্ট্রিং, তালিকা এবং হ্যাশের জন্য গ্লিব ব্যবহার করে। চর গণনা 828wc -m বলে । এটি একক-চর শব্দ বিবেচনা করে না। বারের সর্বাধিক দৈর্ঘ্য গণনা করতে, এটি কেবল প্রথম 22 টি নয়, সবার মধ্যে দীর্ঘতম সম্ভাব্য শব্দটি বিবেচনা করে। এটি কি অনুমান থেকে কোনও বিচ্যুতি?

এটি ব্যর্থতাগুলি পরিচালনা করে না এবং এটি ব্যবহৃত মেমরিটি মুক্তি দেয় না।

#include <glib.h>
#define S(X)g_string_##X
#define H(X)g_hash_table_##X
GHashTable*h;int m,w=0,z=0;y(const void*a,const void*b){int*A,*B;A=H(lookup)(h,a);B=H(lookup)(h,b);return*B-*A;}void p(void*d,void*u){int *v=H(lookup)(h,d);if(w<22){g_printf("|");*v=*v*(77-z)/m;while(--*v>=0)g_printf("=");g_printf("| %s\n",d);w++;}}main(c){int*v;GList*l;GString*s=S(new)(NULL);h=H(new)(g_str_hash,g_str_equal);char*n[]={"the","and","of","to","it","in","or","is"};while((c=getchar())!=-1){if(isalpha(c))S(append_c)(s,tolower(c));else{if(s->len>1){for(c=0;c<8;c++)if(!strcmp(s->str,n[c]))goto x;if((v=H(lookup)(h,s->str))!=NULL)++*v;else{z=MAX(z,s->len);v=g_malloc(sizeof(int));*v=1;H(insert)(h,g_strdup(s->str),v);}}x:S(truncate)(s,0);}}l=g_list_sort(H(get_keys)(h),y);m=*(int*)H(lookup)(h,g_list_first(l)->data);g_list_foreach(l,p,NULL);}

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

ঠিক আছে ... সবগুলিকে একটি লাইনে রাখুন (প্রিপ্রোক ম্যাক্রোস আশা করুন) এবং স্মৃতিমুক্ত না করেই একটি ফল দেওয়া হয়েছে (এবং আরও দুটি স্পেস অপসারণ করা হয়েছে ... "অবলম্বন" এর উপর কিছুটা উন্নতি করা যেতে পারে, যেমন *v=*v*(77-lw)/m929 দেবে)। .. তবে আমি মনে করি এটি খুব ছোট করার কোনও উপায় না
পেলে

আমার মনে হয় আপনি অন্তত স্থানান্তর করতে পারেন int cমধ্যে mainঘোষণা এবং mainপরোক্ষভাবে হয় int(যেমন কোন untyped আর্গুমেন্ট আমি যতদূর জানি হয়,): main(c){...}। আপনি সম্ভবত শুধু 0পরিবর্তে লিখতে পারে NULL
জোয়ি

এটি করা ... অবশ্যই সাথে -Wallবা -std=c99পতাকা সহ কিছুটা সতর্কতা ট্রিগার করবে ... তবে আমি মনে করি এটি কোনও কোড-গল্ফের জন্য অর্থহীন, তাই না?
শিনটেকজৌ

উফ, স্বল্প-ব্যবধান সময়ের সম্পাদনার জন্য দুঃখিত, ... Without freeing memory stuff, it reaches 866 (removed some other unuseful space)লোকেরা যাতে মনে করতে না পারে যে ফ্রি-মেমরির সংস্করণটির মধ্যে পার্থক্য রয়েছে: আমাকে এখন আর নো-ফ্রি-মেমরির সংস্করণ রয়েছে আরও "উন্নতি"।
শিনটেকজৌ

6

পার্ল, 185 চর

200 (কিছুটা ভাঙ্গা) 199 197 195 193 187 185 অক্ষর। শেষ দুটি নিউলাইন উল্লেখযোগ্য। অনুমান সঙ্গে মেনে চলা।

map$X{+lc}+=!/^(.|the|and|to|i[nst]|o[rf])$/i,/[a-z]+/gfor<>;
$n=$n>($:=$X{$_}/(76-y+++c))?$n:$:for@w=(sort{$X{$b}-$X{$a}}%X)[0..21];
die map{$U='_'x($X{$_}/$n);" $U
"x!$z++,"|$U| $_
"}@w

প্রথম লাইনে বৈধ শব্দের সংখ্যা গণনা করে %X

দ্বিতীয় লাইনটি সর্বনিম্ন স্কেলিং ফ্যাক্টরটি গণনা করে যাতে সমস্ত আউটপুট লাইন <= 80 টি অক্ষর হয়।

তৃতীয় লাইন (দুটি নিউলাইন অক্ষর ধারণ করে) আউটপুট উত্পাদন করে।


এটি স্ট্রিং শব্দগুলিকে "foo_the_bar" এর মতো স্ট্রিং থেকে সরবে না। লাইনের দৈর্ঘ্যও অনেক দীর্ঘ (স্পেসটি পুনরায় পড়ুন: "বার + স্পেস + শব্দ + স্পেস <= 80 অক্ষর")
জো

5

জাভা - 886 865 756 744 742 744 752 742 714 680 চর

  • প্রথম 742 এর পূর্বে আপডেট : উন্নত রেজেক্স, অপ্রয়োজনীয় প্যারামিটারাইজড প্রকারগুলি সরানো, অতিরিক্ত অতিরিক্ত সাদা স্থান সরানো।

  • আপডেট 742> 744 অক্ষর : নির্দিষ্ট দৈর্ঘ্যের হ্যাক স্থির করে। এটি কেবলমাত্র 1 ম শব্দের উপর নির্ভরশীল, অন্য শব্দের নয় (এখনও)। কোডটি সংক্ষিপ্ত করার জন্য বেশ কয়েকটি জায়গা পাওয়া গেছে ( \\sরেজেক্সে প্রতিস্থাপন এবং ArrayListপ্রতিস্থাপনে Vector)। আমি এখন কমন্স আইও নির্ভরতা অপসারণ এবং স্টিডিন থেকে পড়ার জন্য একটি ছোট উপায় খুঁজছি।

  • আপডেট 744> 752 অক্ষর : আমি কমন্স নির্ভরতা অপসারণ করেছি। এটি এখন স্টিডিনের কাছ থেকে পড়ে। স্টিডিনে পাঠ্য আটকান এবং Ctrl+Zফলাফল পেতে আঘাত করুন ।

  • আপডেট 752> 74৪২ টি অক্ষর : আমি অপসারণ করেছি publicএবং একটি স্থান দিয়েছি , 2 এর পরিবর্তে 1 টি শ্রেণিকাম তৈরি করেছি এবং এটি এখন এক-অক্ষরের শব্দের উপেক্ষা করছে।

  • আপডেট 2৪২> 14১৪ অক্ষর : কার্লের মন্তব্য অনুসারে আপডেট হয়েছে: অপসারণ করা রিন্ডন্ড্যান্ট অ্যাসাইনমেন্ট (2৪২> 30৩০), (30৩০> 8২৮) m.containsKey(k)দ্বারা প্রতিস্থাপন m.get(k)!=null, লাইনের (ing২৮> 14১৪) স্ট্রাস্টিং চালু করেছে।

  • আপডেট 714> 680 অক্ষর : রোটসের মন্তব্য অনুসারে আপডেট হয়েছে: অযথা castালাই অপসারণ করতে বারের আকারের গণনা উন্নত split()এবং অপ্রয়োজনীয় অপসারণের জন্য উন্নত replaceAll()


import java.util.*;class F{public static void main(String[]a)throws Exception{StringBuffer b=new StringBuffer();for(int c;(c=System.in.read())>0;b.append((char)c));final Map<String,Integer>m=new HashMap();for(String w:b.toString().toLowerCase().split("(\\b(.|the|and|of|to|i[tns]|or)\\b|\\W)+"))m.put(w,m.get(w)!=null?m.get(w)+1:1);List<String>l=new Vector(m.keySet());Collections.sort(l,new Comparator(){public int compare(Object l,Object r){return m.get(r)-m.get(l);}});int c=76-l.get(0).length();String s=new String(new char[c]).replace('\0','_');System.out.println(" "+s);for(String w:l.subList(0,22))System.out.println("|"+s.substring(0,m.get(w)*c/m.get(l.get(0)))+"| "+w);}}

আরও পঠনযোগ্য সংস্করণ:

import java.util.*;
class F{
 public static void main(String[]a)throws Exception{
  StringBuffer b=new StringBuffer();for(int c;(c=System.in.read())>0;b.append((char)c));
  final Map<String,Integer>m=new HashMap();for(String w:b.toString().toLowerCase().split("(\\b(.|the|and|of|to|i[tns]|or)\\b|\\W)+"))m.put(w,m.get(w)!=null?m.get(w)+1:1);
  List<String>l=new Vector(m.keySet());Collections.sort(l,new Comparator(){public int compare(Object l,Object r){return m.get(r)-m.get(l);}});
  int c=76-l.get(0).length();String s=new String(new char[c]).replace('\0','_');System.out.println(" "+s);
  for(String w:l.subList(0,22))System.out.println("|"+s.substring(0,m.get(w)*c/m.get(l.get(0)))+"| "+w);
 }
}

আউটপুট:

 _________________________________________________________________________
| _________________________________________________________________________ | সে
| _______________________________________________________________ | আপনি
| ____________________________________________________________ | বললেন
| _____________________________________________________ | এলিস
| _______________________________________________ | ছিল
| ___________________________________________ | যে
| ____________________________________ | যেমন
| ________________________________ | তার
| _____________________________ | সঙ্গে
| _____________________________ | এ
| __________________________ | চালু
| __________________________ | সব
| _______________________ | এই
| _______________________ | জন্য
| _______________________ | ছিল
| _______________________ | কিন্তু
| ______________________ | থাকা
| _____________________ | না
| ____________________ | তারা
| ____________________ | সুতরাং
| ___________________ | খুব
| __________________ | কি

এটি বেশ সুন্দরভাবে চুষে ফেলেছে যে জাভা নেই String#join()এবং বন্ধ রয়েছে (এখনও)।

রোটসর সম্পাদনা করুন:

আপনার সমাধানে আমি বেশ কয়েকটি পরিবর্তন করেছি:

  • একটি স্ট্রিং দিয়ে প্রতিস্থাপন তালিকা []
  • আমার নিজের স্ট্রিং অ্যারে ঘোষণা করার পরিবর্তে 'আরগস' যুক্তিটি পুনরায় ব্যবহার করুন। .ToArray () এর তর্ক হিসাবে এটি ব্যবহার করেছেন
  • স্ট্রিংবফারকে স্ট্রিংয়ের মাধ্যমে প্রতিস্থাপন করা হয়েছে (হ্যাঁ, হ্যাঁ, দুর্দান্ত অভিনয়)
  • প্রারম্ভিক থামার সাথে বাছাই-বাছাইয়ের সাথে জাভা বাছাই করা প্রতিস্থাপন করা হয়েছে (কেবলমাত্র প্রথম 22 টি উপাদান খুঁজে পাওয়া দরকার)
  • একক বিবৃতিতে কিছু পূর্বে ঘোষণা একত্রিত
  • আউটপুটটির সীমাবদ্ধ রেখাটি খুঁজে পাওয়া অ-প্রতারণামূলক অ্যালগরিদমকে কার্যকর করেছে। এফপি ছাড়াই এটি বাস্তবায়ন করেছে।
  • পাঠ্যের 22 টিরও কম স্বতন্ত্র শব্দ থাকা অবস্থায় প্রোগ্রাম ক্র্যাশ হওয়ার সমস্যাটি স্থির করে
  • পঠন ইনপুটটির একটি নতুন অ্যালগরিদম প্রয়োগ করেছে, যা দ্রুত এবং ধীর একের চেয়ে 9 টি অক্ষর দীর্ঘ।

কনডেন্সড কোডটি 688 711 684 অক্ষর দীর্ঘ:

import java.util.*;class F{public static void main(String[]l)throws Exception{Map<String,Integer>m=new HashMap();String w="";int i=0,k=0,j=8,x,y,g=22;for(;(j=System.in.read())>0;w+=(char)j);for(String W:w.toLowerCase().split("(\\b(.|the|and|of|to|i[tns]|or)\\b|\\W)+"))m.put(W,m.get(W)!=null?m.get(W)+1:1);l=m.keySet().toArray(l);x=l.length;if(x<g)g=x;for(;i<g;++i)for(j=i;++j<x;)if(m.get(l[i])<m.get(l[j])){w=l[i];l[i]=l[j];l[j]=w;}for(;k<g;k++){x=76-l[k].length();y=m.get(l[k]);if(k<1||y*i>x*j){i=x;j=y;}}String s=new String(new char[m.get(l[0])*i/j]).replace('\0','_');System.out.println(" "+s);for(k=0;k<g;k++){w=l[k];System.out.println("|"+s.substring(0,m.get(w)*i/j)+"| "+w);}}}

দ্রুত সংস্করণ ( 720 693 অক্ষর)

import java.util.*;class F{public static void main(String[]l)throws Exception{Map<String,Integer>m=new HashMap();String w="";int i=0,k=0,j=8,x,y,g=22;for(;j>0;){j=System.in.read();if(j>90)j-=32;if(j>64&j<91)w+=(char)j;else{if(!w.matches("^(|.|THE|AND|OF|TO|I[TNS]|OR)$"))m.put(w,m.get(w)!=null?m.get(w)+1:1);w="";}}l=m.keySet().toArray(l);x=l.length;if(x<g)g=x;for(;i<g;++i)for(j=i;++j<x;)if(m.get(l[i])<m.get(l[j])){w=l[i];l[i]=l[j];l[j]=w;}for(;k<g;k++){x=76-l[k].length();y=m.get(l[k]);if(k<1||y*i>x*j){i=x;j=y;}}String s=new String(new char[m.get(l[0])*i/j]).replace('\0','_');System.out.println(" "+s);for(k=0;k<g;k++){w=l[k];System.out.println("|"+s.substring(0,m.get(w)*i/j)+"| "+w);}}}

আরও পঠনযোগ্য সংস্করণ:

import java.util.*;class F{public static void main(String[]l)throws Exception{
    Map<String,Integer>m=new HashMap();String w="";
    int i=0,k=0,j=8,x,y,g=22;
    for(;j>0;){j=System.in.read();if(j>90)j-=32;if(j>64&j<91)w+=(char)j;else{
        if(!w.matches("^(|.|THE|AND|OF|TO|I[TNS]|OR)$"))m.put(w,m.get(w)!=null?m.get(w)+1:1);w="";
    }}
    l=m.keySet().toArray(l);x=l.length;if(x<g)g=x;
    for(;i<g;++i)for(j=i;++j<x;)if(m.get(l[i])<m.get(l[j])){w=l[i];l[i]=l[j];l[j]=w;}
    for(;k<g;k++){x=76-l[k].length();y=m.get(l[k]);if(k<1||y*i>x*j){i=x;j=y;}}
    String s=new String(new char[m.get(l[0])*i/j]).replace('\0','_');
    System.out.println(" "+s);
    for(k=0;k<g;k++){w=l[k];System.out.println("|"+s.substring(0,m.get(w)*i/j)+"| "+w);}}
}

আচরণের উন্নতি ছাড়া সংস্করণটি 615 টি অক্ষর:

import java.util.*;class F{public static void main(String[]l)throws Exception{Map<String,Integer>m=new HashMap();String w="";int i=0,k=0,j=8,g=22;for(;j>0;){j=System.in.read();if(j>90)j-=32;if(j>64&j<91)w+=(char)j;else{if(!w.matches("^(|.|THE|AND|OF|TO|I[TNS]|OR)$"))m.put(w,m.get(w)!=null?m.get(w)+1:1);w="";}}l=m.keySet().toArray(l);for(;i<g;++i)for(j=i;++j<l.length;)if(m.get(l[i])<m.get(l[j])){w=l[i];l[i]=l[j];l[j]=w;}i=76-l[0].length();String s=new String(new char[i]).replace('\0','_');System.out.println(" "+s);for(k=0;k<g;k++){w=l[k];System.out.println("|"+s.substring(0,m.get(w)*i/m.get(l[0]))+"| "+w);}}}

আপনি কি পুরোপুরি যোগ্যতাসম্পন্ন নামটি IOUtilsআমদানির পরিবর্তে ব্যবহার করতে পারবেন না? আমি যতদূর দেখতে পাচ্ছি আপনি কেবল একবারে এটি ব্যবহার করছেন।
জোয়

5
সবচেয়ে দীর্ঘতম বারটি ঠিক 75 টি অক্ষর হবে তা ধরে নিয়ে আপনি ধরণের প্রতারিত হয়েছিলেন। আপনাকে নিশ্চিত করতে হবে যে কোনও বার + শব্দটি 80 টি অক্ষরের বেশি নয়।
গাবে

শব্দের পরে আপনি একটি জায়গা মিস করছেন। ;)
st0le

আমি যখন আমার উত্তরটি ছাঁটাই করছিলাম তখন আমি আশা করছিলাম যে আমি বালাসকের জমাতে পেরেছি। আমার কাছে এখনও 200 চরিত্র আছে, উঘ! আমি আশ্চর্য হয়েছি যে এটি কত দিন কমন্স আইও এবং 75 চরের অনুমান ছাড়া থাকবে।
জনাথন ফাউস্ট

1
দেখে মনে হচ্ছে আপনি bস্ট্রিংবুফারের পরিবর্তে একটি স্ট্রিং তৈরি করে কিছু অক্ষর শেভ করতে পারেন । পারফরম্যান্সটি কী হবে তা নিয়ে আমি ভাবতে চাই না, যদিও (বিশেষত আপনি যখন একবারে একটি চরিত্র যুক্ত করছেন)।
মাইকেল ময়র্স

4

স্কেলা 2.8, 311 314 320 330 332 336 341 375 টি অক্ষর

দীর্ঘ শব্দ সমন্বয় সহ। অন্যান্য সমাধানগুলি থেকে ধার নেওয়া ধারণা।

এখন স্ক্রিপ্ট হিসাবে ( a.scala):

val t="\\w+\\b(?<!\\bthe|and|of|to|a|i[tns]?|or)".r.findAllIn(io.Source.fromFile(argv(0)).mkString.toLowerCase).toSeq.groupBy(w=>w).mapValues(_.size).toSeq.sortBy(-_._2)take 22
def b(p:Int)="_"*(p*(for((w,c)<-t)yield(76.0-w.size)/c).min).toInt
println(" "+b(t(0)._2))
for(p<-t)printf("|%s| %s \n",b(p._2),p._1)

সাথে চালাও

scala -howtorun:script a.scala alice.txt

বিটিডাব্লু, 314 থেকে 311 টি অক্ষরের সম্পাদনাটি কেবলমাত্র 1 টি অক্ষর মুছে ফেলে। কেউ এর আগে গণনা ভুল (উইন্ডোজ সিআর?) পেয়েছে?


4

ক্লোজার 282 কঠোর

(let[[[_ m]:as s](->>(slurp *in*).toLowerCase(re-seq #"\w+\b(?<!\bthe|and|of|to|a|i[tns]?|or)")frequencies(sort-by val >)(take 22))[b](sort(map #(/(- 76(count(key %)))(val %))s))p #(do(print %1)(dotimes[_(* b %2)](print \_))(apply println %&))](p " " m)(doseq[[k v]s](p \| v \| k)))

কিছুটা আরও সুস্পষ্টভাবে:

(let[[[_ m]:as s](->> (slurp *in*)
                   .toLowerCase
                   (re-seq #"\w+\b(?<!\bthe|and|of|to|a|i[tns]?|or)")
                   frequencies
                   (sort-by val >)
                   (take 22))
     [b] (sort (map #(/ (- 76 (count (key %)))(val %)) s))
     p #(do
          (print %1)
          (dotimes[_(* b %2)] (print \_))
          (apply println %&))]
  (p " " m)
  (doseq[[k v] s] (p \| v \| k)))

4

স্কালা, 368 অক্ষর

প্রথমত, 592 টি অক্ষরে একটি স্পষ্ট সংস্করণ:

object Alice {
  def main(args:Array[String]) {
    val s = io.Source.fromFile(args(0))
    val words = s.getLines.flatMap("(?i)\\w+\\b(?<!\\bthe|and|of|to|a|i|it|in|or|is)".r.findAllIn(_)).map(_.toLowerCase)
    val freqs = words.foldLeft(Map[String, Int]())((countmap, word)  => countmap + (word -> (countmap.getOrElse(word, 0)+1)))
    val sortedFreqs = freqs.toList.sort((a, b)  => a._2 > b._2)
    val top22 = sortedFreqs.take(22)
    val highestWord = top22.head._1
    val highestCount = top22.head._2
    val widest = 76 - highestWord.length
    println(" " + "_" * widest)
    top22.foreach(t => {
      val width = Math.round((t._2 * 1.0 / highestCount) * widest).toInt
      println("|" + "_" * width + "| " + t._1)
    })
  }
}

কনসোল আউটপুটটি এর মতো দেখাচ্ছে:

$ scalac alice.scala 
$ scala Alice aliceinwonderland.txt
 _________________________________________________________________________
|_________________________________________________________________________| she
|_______________________________________________________________| you
|_____________________________________________________________| said
|_____________________________________________________| alice
|_______________________________________________| was
|____________________________________________| that
|____________________________________| as
|_________________________________| her
|______________________________| at
|______________________________| with
|_____________________________| s
|_____________________________| t
|___________________________| on
|__________________________| all
|_______________________| had
|_______________________| but
|______________________| be
|______________________| not
|____________________| they
|____________________| so
|___________________| very
|___________________| what

আমরা কিছু আক্রমণাত্মক মিনিফিনিং করতে পারি এবং এটি 415 টি অক্ষরে নামিয়ে আনতে পারি:

object A{def main(args:Array[String]){val l=io.Source.fromFile(args(0)).getLines.flatMap("(?i)\\w+\\b(?<!\\bthe|and|of|to|a|i|it|in|or|is)".r.findAllIn(_)).map(_.toLowerCase).foldLeft(Map[String, Int]())((c,w)=>c+(w->(c.getOrElse(w,0)+1))).toList.sort((a,b)=>a._2>b._2).take(22);println(" "+"_"*(76-l.head._1.length));l.foreach(t=>println("|"+"_"*Math.round((t._2*1.0/l.head._2)*(76-l.head._1.length)).toInt+"| "+t._1))}}

কনসোল সেশনটি এর মতো দেখাচ্ছে:

$ scalac a.scala 
$ scala A aliceinwonderland.txt
 _________________________________________________________________________
|_________________________________________________________________________| she
|_______________________________________________________________| you
|_____________________________________________________________| said
|_____________________________________________________| alice
|_______________________________________________| was
|____________________________________________| that
|____________________________________| as
|_________________________________| her
|______________________________| at
|______________________________| with
|_____________________________| s
|_____________________________| t
|___________________________| on
|__________________________| all
|_______________________| had
|_______________________| but
|______________________| be
|______________________| not
|____________________| they
|____________________| so
|___________________| very
|___________________| what

আমি নিশ্চিত যে কোনও স্কালার বিশেষজ্ঞ আরও ভাল করতে পারে।

আপডেট: মন্তব্যগুলিতে টমাস 368 টি অক্ষরে একটি আরও সংক্ষিপ্ত সংস্করণ দিয়েছেন:

object A{def main(a:Array[String]){val t=(Map[String, Int]()/:(for(x<-io.Source.fromFile(a(0)).getLines;y<-"(?i)\\w+\\b(?<!\\bthe|and|of|to|a|i|it|in|or|is)".r findAllIn x) yield y.toLowerCase).toList)((c,x)=>c+(x->(c.getOrElse(x,0)+1))).toList.sortBy(_._2).reverse.take(22);val w=76-t.head._1.length;print(" "+"_"*w);t map (s=>"\n|"+"_"*(s._2*w/t.head._2)+"| "+s._1) foreach print}}

সুস্পষ্টভাবে, 375 টি অক্ষরে:

object Alice {
  def main(a:Array[String]) {
    val t = (Map[String, Int]() /: (
      for (
        x <- io.Source.fromFile(a(0)).getLines
        y <- "(?i)\\w+\\b(?<!\\bthe|and|of|to|a|i|it|in|or|is)".r.findAllIn(x)
      ) yield y.toLowerCase
    ).toList)((c, x) => c + (x -> (c.getOrElse(x, 0) + 1))).toList.sortBy(_._2).reverse.take(22)
    val w = 76 - t.head._1.length
    print (" "+"_"*w)
    t.map(s => "\n|" + "_" * (s._2 * w / t.head._2) + "| " + s._1).foreach(print)
  }
}

383 অক্ষর:object A{def main(a:Array[String]){val t=(Map[String, Int]()/:(for(x<-io.Source.fromFile(a(0)).getLines;y<-"(?i)\\w+\\b(?<!\\bthe|and|of|to|a|i|it|in|or|is)".r findAllIn x) yield y.toLowerCase).toList)((c,x)=>c+(x->(c.getOrElse(x,0)+1))).toList.sortBy(_._2).reverse.take(22);val w=76-t.head._1.length;print(" "+"_"*w);t map (s=>"\n|"+"_"*(s._2*w/t.head._2)+"| "+s._1) foreach print}}
টমাস জঙ্গ

অবশ্যই, বোধগম্য জন্য সর্বদা সুবিধাজনক! নিস!
pr1001

3

জাভা - 896 অক্ষর

931 চর

1233 অক্ষর অপঠনযোগ্য করে তুলেছে

1977 অক্ষর "সঙ্কুচিত"


আপডেট: আমি আক্রমণাত্মকভাবে চরিত্রের সংখ্যা হ্রাস করেছি। আপডেট হওয়া অনুমান অনুযায়ী একক-বর্ণের শব্দের বাদ দেয়।

আমি সি # এবং লিনকিউকে এতটা enর্ষা করি।

import java.util.*;import java.io.*;import static java.util.regex.Pattern.*;class g{public static void main(String[] a)throws Exception{PrintStream o=System.out;Map<String,Integer> w=new HashMap();Scanner s=new Scanner(new File(a[0])).useDelimiter(compile("[^a-z]+|\\b(the|and|of|to|.|it|in|or|is)\\b",2));while(s.hasNext()){String z=s.next().trim().toLowerCase();if(z.equals(""))continue;w.put(z,(w.get(z)==null?0:w.get(z))+1);}List<Integer> v=new Vector(w.values());Collections.sort(v);List<String> q=new Vector();int i,m;i=m=v.size()-1;while(q.size()<22){for(String t:w.keySet())if(!q.contains(t)&&w.get(t).equals(v.get(i)))q.add(t);i--;}int r=80-q.get(0).length()-4;String l=String.format("%1$0"+r+"d",0).replace("0","_");o.println(" "+l);o.println("|"+l+"| "+q.get(0)+" ");for(i=m-1;i>m-22;i--){o.println("|"+l.substring(0,(int)Math.round(r*(v.get(i)*1.0)/v.get(m)))+"| "+q.get(m-i)+" ");}}}

"রিডেবল":

import java.util.*;
import java.io.*;
import static java.util.regex.Pattern.*;
class g
{
   public static void main(String[] a)throws Exception
      {
      PrintStream o = System.out;
      Map<String,Integer> w = new HashMap();
      Scanner s = new Scanner(new File(a[0]))
         .useDelimiter(compile("[^a-z]+|\\b(the|and|of|to|.|it|in|or|is)\\b",2));
      while(s.hasNext())
      {
         String z = s.next().trim().toLowerCase();
         if(z.equals(""))
            continue;
         w.put(z,(w.get(z) == null?0:w.get(z))+1);
      }
      List<Integer> v = new Vector(w.values());
      Collections.sort(v);
      List<String> q = new Vector();
      int i,m;
      i = m = v.size()-1;
      while(q.size()<22)
      {
         for(String t:w.keySet())
            if(!q.contains(t)&&w.get(t).equals(v.get(i)))
               q.add(t);
         i--;
      }
      int r = 80-q.get(0).length()-4;
      String l = String.format("%1$0"+r+"d",0).replace("0","_");
      o.println(" "+l);
      o.println("|"+l+"| "+q.get(0)+" ");
      for(i = m-1; i > m-22; i--)
      {
         o.println("|"+l.substring(0,(int)Math.round(r*(v.get(i)*1.0)/v.get(m)))+"| "+q.get(m-i)+" ");
      }
   }
}

এলিসের আউটপুট:

 _________________________________________________________________________
|_________________________________________________________________________| she
|_______________________________________________________________| you
|_____________________________________________________________| said
|_____________________________________________________| alice
|_______________________________________________| was
|____________________________________________| that
|____________________________________| as
|_________________________________| her
|______________________________| with
|______________________________| at
|___________________________| on
|__________________________| all
|________________________| this
|________________________| for
|_______________________| had
|_______________________| but
|______________________| be
|______________________| not
|____________________| they
|____________________| so
|___________________| very
|___________________| what

ডন কুইক্সোটের আউটপুট (গুটেনবার্গ থেকেও):

 ________________________________________________________________________
|________________________________________________________________________| that
|________________________________________________________| he
|______________________________________________| for
|__________________________________________| his
|________________________________________| as
|__________________________________| with
|_________________________________| not
|_________________________________| was
|________________________________| him
|______________________________| be
|___________________________| don
|_________________________| my
|_________________________| this
|_________________________| all
|_________________________| they
|________________________| said
|_______________________| have
|_______________________| me
|______________________| on
|______________________| so
|_____________________| you
|_____________________| quixote

8
পুরো কার্প, জাভাতে এটি খাটো করার কোনও উপায় নেই? আমি আশা করি আপনি ছেলেরা চরিত্রের সংখ্যার ভিত্তিতে অর্থ প্রদান করবেন এবং কার্যকারিতা দ্বারা নয় :-)
নাস বানভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.