বর্ণমালা হিস্টোগ্রাম


33

এক বা একাধিক শব্দ [a-z]+এবং শূন্য বা আরও বেশি স্থানের সমন্বয়ে একটি ইনপুট বাক্য দেওয়া হয়েছে, ইনপুট বাক্যটির অক্ষর বিতরণের একটি ASCII- আর্ট হিস্টোগ্রাম (বার গ্রাফ) আউটপুট দিন।

হিস্টোগ্রামটি অবশ্যই অনুভূমিকভাবে বিভক্ত করা উচিত, অর্থাত বাম থেকে ডানদিকে বর্ণানুক্রমিকভাবে নীচে বরাবর লেটার কী সহ একটি Y- অক্ষের লেবেলযুক্ত 1-এবং প্রতি 5 ইউনিট থাকবে। ওয়াই-অক্ষটি অবশ্যই পাঁচটি সংক্ষিপ্ততম একাধিক হতে হবে যা সর্বনিম্নতম বারের চেয়ে কম লম্বা এবং ডানদিকে আবদ্ধ হওয়া আবশ্যক। এক্স-অক্ষটি কোনও ফাঁক ছাড়াই ইনপুট বর্ণগুলি দিয়ে লেবেলযুক্ত। উদাহরণস্বরূপ, ইনপুটটির a bb ddলেবেল থাকা উচিত abdএবং না ab d, এড়িয়ে যাওয়া c। বারগুলি নিজেরাই যে কোনও সামঞ্জস্যপূর্ণ ASCII চরিত্রটি দিয়ে তৈরি হতে পারে - আমি Xএখানে আমার উদাহরণগুলিতে ব্যবহার করব ।

test example

5-

   X
   X   X
1-XXXXXXXX
  aelmpstx

যেহেতু সেখানে তিন e, দুজন tএবং একটি রয়েছে almsx

আরও উদাহরণ:

the quick brown fox jumped over the lazy dogs

5-
      X         X
      X         X
     XX  X      X  X XX
1-XXXXXXXXXXXXXXXXXXXXXXXXXX
  abcdefghijklmnopqrstuvwxyz


now is the time for all good men to come to the aid of their country

10-
              X
              X
              X  X
      X       X  X
 5-   X       X  X
      X   X   X  X
      X  XX XXXX X
   XXXXX XXXXXXX X
 1-XXXXXXXXXXXXXXXXXX
   acdefghilmnorstuwy

a bb ccc dddddddddddd

15-


      X
      X
10-   X
      X
      X
      X
      X
 5-   X
      X
     XX
    XXX
 1-XXXX
   abcd

a bb ccccc

5-  X
    X
    X
   XX
1-XXX
  abc

আই / ও এবং বিধি

  • ইনপুট যে কোনও যুক্তিসঙ্গত বিন্যাসে এবং যে কোনও সুবিধাজনক পদ্ধতিতে নেওয়া যেতে পারে । এর অর্থ হ'ল আপনি যদি সর্বকাপের ক্ষেত্রে বড় আকারের ইনপুট নিতে পারেন তবে যদি এটি আপনার কোডটির জন্য আরও অর্থ দেয়।
  • শীর্ষস্থানীয় / পিছনের নিউলাইনগুলি বা অন্যান্য সাদা স্থান pচ্ছিক, যদি অক্ষরগুলি যথাযথভাবে সরে যায় line
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরে আসতে পারেন।
  • আউটপুট কনসোলে থাকতে পারে, স্ট্রিংগুলির তালিকা হিসাবে ফিরে আসে, একক স্ট্রিং হিসাবে ফিরে আসে ইত্যাদি can
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

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

ইনপুটটি কি খালি থাকার গ্যারান্টিযুক্ত?
ডিজাইমা

2
শুধু দুল হওয়া, কিন্তু এটি কোনও হিস্টোগ্রাম নয় , এটি একটি বার চার্ট। এখনও একটি দুর্দান্ত চ্যালেঞ্জ!
এয়ারড কোয়েনেরিংহিং

4
একটি তুফিয়ান পদ্ধতি হল বর্ণগুলি উপস্থাপন করা অক্ষরের বাইরে তৈরি করা এবং পৃথক লেবেল সারি না থাকা।
dmckee

2
হিস্টগ্রাম চরিত্রটি সামঞ্জস্যপূর্ণ হতে হবে, তবে প্রতিটি ক্ষেত্রে বা প্রতিটি ক্ষেত্রেই?
অ্যাডম

উত্তর:



7

আর , 239 230 বাইট

K=table(el(strsplit(gsub(" ","",scan(,"")),"")));m=matrix(" ",L<-sum(K|1)+1,M<-(M=max(K))+-M%%5+1);m[2:L,M]=names(K);m[1,M-g]=paste0(g<-c(1,seq(5,M,5)),"-");m[1,]=format(m[1,],j="r");for(X in 2:L)m[X,M-1:K[X-1]]=0;write(m,1,L,,"")

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

table এখানে ভারী উত্তোলন, চরিত্রগুলিকে পৃথক করে, বাছাই করা এবং তাদের গণনা ফিরিয়ে দেওয়া হয়।

সমস্ত কিছু কেবল অফসেটগুলি মুদ্রণের জন্য সঠিক তা নিশ্চিত করছে, যা আসকি-শিল্প চ্যালেঞ্জের "আসল" কাজ।

একটি বাগ নির্দেশ করার জন্য @llnan ধন্যবাদ ।

অ্যার্ট্রনবুলকে এই scanপদ্ধতির জন্য ধন্যবাদ , 2 বাইট বাদ দিয়ে।



@ আর্টারনবুল তার পরে আরও কয়েকটি বাইট ছুঁড়ে ফেললাম, ধন্যবাদ!
জিউসেপে

6

gnu সেড- আর, 516 490 278 249 + 1 বাইট

s/$/:ABCDEFGHIJKLMNOPQRSTUVWXYZ /
:a
s/(.)(:.*\1)/\2\1/I
ta
s/[A-Z]+/ /g
h
z
:b
s/ \w/ /g
G
s/:/&I/g
/:II{5}+ *$/M!bb
s/[a-z]/X/g
G
s/:(I{5}+|I)\b/0\1-/g
s/:I*/  /g
s/ (\w)\1*/\1/g
s/$/; 10123456789I0/
:c
s/(.)I(.*\1(I?.))|;.*/\3\2/
/\nI/s/^/ /Mg
tc

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


আমি নিশ্চিত যে এটির উন্নতি হতে পারে তবে এখনকার জন্য, এটি সিডে তৈরি করা বিবেচনা করে ভাল হওয়া উচিত, যেখানে আপনার স্থানীয় গাণিতিক বা বাছাই নেই। সুতরাং আমি মিথ্যা বললাম, এটি যথেষ্ট ভাল ছিল না, তাই আমি এটি আরও 212 বাইট দ্বারা উন্নত (পুনরায় লিখে) করেছি, গরুর কোয়াক থেকে শৃঙ্খলা সংক্রান্ত অ্যালগরিদম সম্পর্কিত একটি টিপ দিয়ে, যা আমাকে ডেসিম্যাল রূপান্তরকে আরও সংক্ষিপ্ত করে তুলতে একটি ধারণা দিয়েছে।
অভ্যন্তরীণ কাজের বিবরণ:

s/$/:ABCDEFGHIJKLMNOPQRSTUVWXYZ /
:a
s/(.)(:.*\1)/\2\1/I
ta
s/[A-Z]+/ /g
h
z

এটি ইনপুটটি বাছাই করে এবং ফাঁকা স্থানগুলি সহ গোষ্ঠীগুলিকে পৃথক করে। এটি প্রথমে একটি বড় হাতের বর্ণমালা প্লাস স্পেসটি কোলন দ্বারা পৃথক করে শেষে যুক্ত করে কাজ করে। তারপরে এটি প্রতিটি চরিত্রকে কোলনের সামনে একটি লুপে কেস-সংবেদনশীল প্রতিস্থাপন ব্যবহার করে কোলনের পিছনে মিলে যাওয়া চরিত্রে স্থানান্তরিত করে। তারপরে বড় হাতের অক্ষরগুলি স্পেস দ্বারা প্রতিস্থাপিত হয় এবং স্ট্রিংটি হোল্ডিং স্পেসে অনুলিপি করা হয়।

:b
s/ \w/ /g
G
s/:/&I/g
/:II{5}+ *$/M!bb

এই লুপটি প্রতিটি অক্ষর গোষ্ঠীর আকার এক এক করে হ্রাস করে বাছাই করা মূল লাইনটি সংযোজন করে এবং বাছাইয়ের পরে থাকা কোলনের পরে অ্যানারি কাউন্টার বাড়িয়ে কাজ করে। 5 * n + 1 সংখ্যার একটি খালি লাইন না পৌঁছানো পর্যন্ত এটি লুপ হয় (যেহেতু শেষ লাইনটি শেষ পর্যন্ত হোয়াইটস্পেসে ফলাফল দেয়)। লুপের পরে প্যাটার্ন স্পেসটি দেখতে এরকম কিছু দেখাচ্ছে:

:IIIIII           
:IIIII           
:IIII           
:III  e         
:II  ee     t    
:I a eee l m p s tt x   

তারপরে বিন্যাসটি নিম্নলিখিত:

s/[a-z]/X/g            # makes bars consistent
G                      # appends line that becomes x-axis
s/:(I{5}+|I)\b/0\1-/g  # moves zero in front of line 1 or 5-divisible
                       # lines for the decimal conversion and adds -
s/:I*/  /g             # removes numbers from other lines
s/ (\w)\1*/\1/g        # collapses groups of at least 1 into 1
                       # character, deleting the space before it
                       # so that only size-0-groups have spaces

এবং পরিশেষে, একাকার থেকে দশমিক রূপান্তরকারী থেকে যায়:

s/$/; 10123456789I0/
:c
s/(.)I(.*\1(I?.))|;.*/\3\2/
/\nI/s/^/ /Mg
tc

এটি মূলত একটি স্ট্রিং যুক্ত করে যেখানে রূপান্তর সম্পর্কিত জ্ঞান। আপনি এটিকে ব্যাখ্যা করতে পারবেন: স্থান: -> 1 এবং 0-> 1-> 2-> 3-> 4-> 5-> 6-> 7-> 8-> 9-> আই 0। প্রতিস্থাপনের অভিব্যক্তিটি s/(.)I(.*\1(I?.))|;.*/\3\2/বাছাইকরণের অনুরূপ কাজ করে, (.)Iরূপান্তরকরণের স্ট্রিংয়ে I এর সামনের (.*\1(I?.))দিকের একটি চরিত্রের দ্বারা I এর [[ ] অক্ষরের পরিবর্তে [ ] এবং যদি আমার কোনও বাকী না থাকে, এটি সরিয়ে দেয় সংযুক্ত স্ট্রিং [ |;.*]। বিকল্প [ /\nI/s/^/ /Mg] প্রয়োজনে প্যাডিং যুক্ত করে।

26 বাইট দ্বারা আকার কমিয়ে আনার জন্য এবং সংক্ষিপ্ত আকারে বাছাই করা অ্যালগরিদমের জন্য গরু কোয়াকে ধন্যবাদ ।


পিপিসিজিতে স্বাগতম, এবং প্রথম প্রথম উত্তর!
ক্রিটসি লিথোস

\wকিছু বাইট সংরক্ষণ করতে আপনি বেশ কয়েকটি জায়গায় (শব্দের অক্ষরের সাথে মেলে) ব্যবহার করতে পারেন । এছাড়াও :b ... tbসহজভাবে হতে পারে s/\B\w/X/gs/:/:,/gপূর্ববর্তী বিকল্পগুলি সংশোধন করে আপনি এর অনুসরণকারী রেখাটি সরিয়ে ফেলতে পারেন । আপনি তাকান করতে goo.gl/JvD7Rs (sed প্রোগ্রাম সংক্ষিপ্ত Tio লিঙ্ক) দেখতে আমি কি মানে।
ক্রিটিকি লিথোস

1
আপনি বাছাই করা অ্যালগরিদমকে উন্নত করতে পারেন, ইঙ্গিত: ইনপুটটিতে সংযোজন চেষ্টা zyx...cbaকরুন।
ক্রিটসি লিথোস

দশমিক রূপান্তরকারী উজ্জ্বল একাকার! ইতি অন্তত 30 এক চেয়ে খাটো বাইট sed মধ্যে golfing জন্য টিপস
Kritixi Lithos

5

ডায়ালগ এপিএল , 109 97 96 95 93 88 বাইট

{⊖(⍉r),⍨⍕↑(⊂'')@{1@0~⍵∊1,5×⍵}⍳≢⍉↑r←↑r,⍨⊂' -','   - '⍴⍨5×⌈5÷⍨≢1↓⍉↑r←↓{⍺,∊⍕¨0×⍵}⌸⍵[⍋⍵]∩⎕A}

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

প্রয়োজন ⎕IO←0

ওয়ে অনেকগুলি বাইট ধন্যবাদ সংরক্ষিত আদম এবং গরু হাতুড়ে !


শেষ বিটের জন্য, আপনি চেষ্টা করতে পারেন ⍵[⍋⍵]~' '(পাশ দিয়ে যাওয়ার আগে স্থানগুলি বাছাই এবং সরিয়ে
ফেলুন

'X'/⍨≢∊⍕¨×
অ্যাডাম

এবং ⍵>0×⍵
ক্রিটিকি লিথোস

আপনার টিআইও লিঙ্কটিতে একটি অপ্রয়োজনীয় শিরোনাম রয়েছে।
অ্যাডম

2⌷⍴≢⍉দুবার
অ্যাডাম

5

05AB1E , 58 47 বাইট

áê©S¢Z5‰`Ā+L5*1¸ì'-«ð5×ý#À¦Áí.Bís'X×ζ‚ζJR»,®3ú,

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

-11 বাইটস @ এমিগানাকে ধন্যবাদ


হয়তো এই সাহায্য করতে পারেন? তাদের একসঙ্গে বেঁধে দেওয়ার জন্য সময় নেই তবে তারা কিছুটা অনুপ্রেরণা দিতে পারে।
এমিগিনা

@ এমিগনা আমার একটি চেহারা হবে, আমার চেয়ে অবশ্যই আলাদা :)।
যাদু অক্টোপাস উরন

আমি এমনিগা 57 বাইট এটি সেলাই করার পরে ... আমি অনুকূলিত করার জন্য খুব বেশি চেষ্টা না করে দেওয়া। এটি অনলাইন চেষ্টা করুন!
যাদু অক্টোপাস উরন

কিছু পুনর্গঠন এবং অপ্টিমাইজেশন সহ 47 বাইট
এমিগানা

আপনার চিঠিগুলি নির্দিষ্ট ইনপুটগুলির জন্য এক্স এর সাথে সামঞ্জস্য করে না। tio.run/##AVUAqv8wNWFiMWX//…
mbomb007

3

পাইথন 2 , 192 বাইট

s=input()
d={c:s.count(c)for c in s if' '<c}
h=-max(d.values())/5*-5
for y in range(h,-1,-1):print('%d-'%y*(y%5==2>>y)).rjust(len(`-h`))+''.join(('X '[y>v],k)[y<1]for k,v in sorted(d.items()))

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

ব্যাখ্যা

লাইন 2 হস্তোগ্রামের মানগুলিকে মোটামুটি সোজা উপায়ে গণনা করে, ত্যাগ করছে ' '

লাইন 3 ব্যবহারসমূহ কম্পিউটিং এর কৌতুক ceil(x/5)হিসাবে -(-x/5): আমরা সূত্র ব্যবহার করে 5 পরবর্তী একাধিক পর্যন্ত সর্বোচ্চ ফ্রিকোয়েন্সি সুসম্পন্ন -x/5*-5। এই h

লাইন 4 হ'ল hনীচে থেকে 0অন্তর্ভুক্ত পর্যন্ত প্রতিটি লুপ মুদ্রণ:

  • y%5==2>>yআমরা যদি একটি লেবেল মুদ্রণ করি। এটি তখন y∈ {1, 5, 10, 15, 20,…}

    (এই সূত্রটি আরও সংক্ষিপ্ত হতে পারে We 1, 5, 10,…}, এবং 0 বা মিথ্যা বা অন্য সমস্ত মানের জন্য একটি নেতিবাচক পূর্ণসংখ্যার জন্য আমাদের কেবল 1 বা সত্যের দরকার ))y

  • আমরা লেবেলকে (বা খালি স্থান) স্পেসে ন্যায়সঙ্গত করি len(`-h`): এটি একটি ঝরঝরে ওয়ান-বাইট সংরক্ষণের len(`h`)+1!

  • তারপরে, আমরা Xএই সারির (যদি y≥ 1) বা অক্ষরগুলি (যদি y= 0) হয়, এর dজন্য আরোহী ক্রমে মুদ্রণ করি ।


1
সঙ্গে দুর্দান্ত টিক সৃষ্টি '%d-'%y*(y%5==2>>y)। আমি যদি আমার উত্তরে এটি ব্যবহার করি তবে কি আপত্তি করবেন?
dylnan

-~-(y%5*~-y)খুব বেশি কাজ করে তবে দুর্ভাগ্যক্রমে এটি আরও একটি বাইট হয়।
dylnan

2

কাঠকয়লা , 62 বাইট

≔E²⁷⟦⟧ηFθ⊞§η⌕βιι≔⊟ηθ≦LηP⭆β⎇§ηκιω↑↑ΦηιF÷⁺⁹⌈η⁵«≔∨×⁵ι¹ιJ±¹±ι←⮌⁺ι-

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔E²⁷⟦⟧η

27 তালিকার একটি তালিকা তৈরি করুন Create

Fθ⊞§η⌕βιι

ছোট অক্ষরের বর্ণমালার অবস্থানের সাথে সম্পর্কিত প্রতিটি ইনপুট অক্ষরকে তালিকায় চাপ দিন। ছোট ছোট অক্ষরগুলি 27 তম তালিকায় ঠেলাঠেলি করে।

≔⊟ηθ

তালিকার 27 তম উপাদানটি বাতিল করুন।

≦Lη

তালিকার সমস্ত উপাদানগুলির দৈর্ঘ্য নিন।

P⭆β⎇§ηκιω

অ-শূন্য তালিকার উপাদানগুলির সাথে সম্পর্কিত ছোট হাতের অক্ষরগুলি মুদ্রণ করুন।

↑↑Φηι

অ-শূন্য তালিকার উপাদানগুলি উপরের দিকে মুদ্রণ করুন। যেহেতু এটি পূর্ণসংখ্যার অ্যারে, প্রতিটি পূর্ণসংখ্যা একটি (এখন উল্লম্ব) লাইন হিসাবে প্রিন্ট করে, প্রতিটি পৃথক কলামে।

F÷⁺⁹⌈η⁵«

Y- অক্ষের টিক চিহ্নের সংখ্যা গণনা করুন এবং সেগুলি লুপ করুন।

≔∨×⁵ι¹ι

পরবর্তী টিক চিহ্নের অবস্থান গণনা করুন।

J±¹±ι

পরের টিকমার্কে ঝাঁপ দাও।

←⮌⁺ι-

বিপরীত এবং পিছনে টিকমার্ক মুদ্রণ করুন, কার্যকরভাবে ডান-প্রান্তিককরণ।


2

জেলি , 48 বাইট

কী আমার মাঠ পেরোতে হবে!

J’⁶D;”-Ɗ%5^ỊƲ?€Uz⁶ZU
ḟ⁶ṢµĠ¬;⁶$L%5Ɗ¿€;"@Qz⁶Ç;"$ṚY

একটি পূর্ণ প্রোগ্রাম ফলাফল মুদ্রণ করে (একক লিঙ্ক হিসাবে এটি অক্ষর এবং পূর্ণসংখ্যার তালিকা থেকে একটি তালিকা ফিরে আসবে [0,9])

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

J’⁶D;”-Ɗ%5^ỊƲ?€Uz⁶ZU - Link 1, get y-axis: list of columns (including x-axis & top-spaces)
J                    - range of length  [1,2,3,4,5,6,...,height+1] (+1 for x-axis)
 ’                   - decrement        [0,1,2,3,4,5,...] (line it up with the content)
             ?€      - if for €ach...
            Ʋ        - ...condition: last four links as a monad:
        %5           -   modulo by five
           Ị         -   insignificant? (1 for 0 and 1, else 0)
          ^          -   XOR (0 for 1 or multiples of 5 greater than 0, else 0)
  ⁶                  - ...then: literal space character
       Ɗ             - ...else: last three links as a monad:
   D                 -   decimal list of the number, e.g. 10 -> [1,0]
     ”-              -   literal '-' character
    ;                -   concatenate, e.g. [1,0,'-']
               U     - upend (reverse each)
                z⁶   - transpose with a filler of space characters
                  Z  - transpose
                   U - upend (i.e. Uz⁶ZU pads the left with spaces as needed)

ḟ⁶ṢµĠ¬;⁶$L%5Ɗ¿€;"@Qz⁶Ç;"$ṚY - Main link: list of characters
ḟ⁶                          - filter out space characters
  Ṣ                         - sort
   µ                        - start a new monadic chain, call that S
    Ġ                       - group indices of S by their values
     ¬                      - logical NOT (vectorises) (getting 0 for the X "characters")
             ¿€             - while for €ach...
            Ɗ               - ...condition: last three links as a monad:
         L                  -   length
          %5                -   modulo by five
        $                   - ...do: last two links as a monad:
      ;⁶                    -   concatenate a space character
                  Q         - deduplicate S (get the x-axis)
               ;"@          - zip with (") concatenation (;) with swapped arguments (@)
                   z⁶       - transpose a with filler of space characters
                        $   - last two links as a monad:
                     Ç      -   call last link (1) as a monad (get y-axis)
                      ;"    -   zip with concatenation (complete the layout)
                         Ṛ  - reverse (otherwise it'll be upside-down)
                          Y - join with newlines
                            - implicit print


2

রুবি , 250 248 234 188 173 157 153 বাইট

->s{a=s.scan(/\w/).sort|[]
m=-(c=a.map{|l|s.count l}).max/5*-5
m.downto(1).map{|i|(i%5<1||i<2?"#{i}-":'').rjust(m)+c.map{|l|l<i ?' ':?X}*''}<<' '*m+a*''}

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

ধন্যবাদ:

  • কম কড়া প্যাডিং সহ -16 বাইটের জন্য ডাইলান
  • সাথে গোল করে -২ বাইটের জন্য লিন-x/5*-5
  • কিরিল এল । -2 বাইটের জন্য স্বতন্ত্র অ্যারে উপাদানগুলি পেয়ে|[]

2

জাভা (জেডিকে 10) , 296 বাইট

s->{int d[]=new int[26],m=0;char a;for(int c:s.getBytes())m=c>32&&++d[c-=65]>m?(d[c]+4)/5*5:m;String r=m+"-",z=r.replaceAll("."," ");for(;m>0;r+="\n"+(--m%5<1|m==1&&m>0?z.format("%"+~-z.length()+"s-",m):z))for(a=0;a<26;a++)r+=d[a]>0?m>d[a]?" ":"x":"";for(a=64;a++<90;)r+=d[a-65]>0?a:"";return r;}

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

ক্রেডিট


@Aoemica সংশোধন করুন আমি এটা ঠিক করেছি.
অলিভিয়ার গ্রাগোয়ার

1
এটি খুব বেশি নয়, তবে আপনি 2 বাইট সংরক্ষণ করতে পারেন। --m%5==0হতে পারে --m%5<1, কারণ আপনারও &m>0চেক আছে। এবং m<=d[a]?"x":" "হতে পারে m>d[a]?" ":"x"
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন 2 বাইট 2 বাইট! আমি মনে করি না যে গল্ফ করার মতো অনেক কিছুই আছে, ভিন্ন ভিন্ন অ্যালগরিদম বাদে।
অলিভিয়ার গ্রাগোয়ার

1
আরও 1 টি বাইট এ পরিবর্তন (--m%5<1|m==1)&m>0করে--m%5<1|m==1&&m>0
কেভিন ক্রুইজসেন

1

পাইথ, 65 বাইট

J.tm+ed*hd\Xr8S-Qd)=+J*]d%_tlJ5_.e+?q<k2%k5.F"{:{}d}-",klQ*dhlQbJ

এখানে চেষ্টা করুন

ব্যাখ্যা

J.tm+ed*hd\Xr8S-Qd)=+J*]d%_tlJ5_.e+?q<k2%k5.F"{:{}d}-",klQ*dhlQbJ
J.tm+ed*hd\Xr8S-Qd)
     Get the bars.
                   =+J*]d%_tlJ5
     Round up the height to the next number that's 1 mod 5.
                               _.e+?q<k2%k5.F"{:{}d}-",klQ*dhlQbJ
     Stick the axis labels on.

1

জাভাস্ক্রিপ্ট (নোড.জেএস) , 262 256 বাইট

* 2 বাইট কমিয়ে দেওয়ার জন্য @ শ্যাগগিকে ধন্যবাদ

a=>[...a].map(x=>x>" "&&(d=c[x]=(c[x]||x)+"X")[m]?m=d.length-1:0,c={},m=i=0)&&Object.keys(c).sort().map(x=>[...c[x].padEnd(m)].map((l,j)=>A[m-j-1]+=l),A=[...Array(m+=6-m%5)].map(x=>(++i>=m||((D=m-i)%5&&m-i^1)?"":D+"-").padStart((m+" ").length)))&&A.join`
`

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


দ্রুত সঞ্চয়ী আমি আমার ফোনে স্পট করতে পারেন দম্পতি: 1.পৃথক অক্ষরের একটি অ্যারে হিসাবে ইনপুট নাও 2.প্রতিস্থাপন x!=" "সঙ্গে x>" "
শেগি

3.m=0সাথে i=m=0এবং map((x,i)=>সাথে প্রতিস্থাপন করুন map(x=>
শেগি

1

পাইথন 2 , 249 224 219 215 205 197 187 188 182 176 বাইট

def f(s):S=sorted(set(s)^{' '});C=map(s.count,S);P=max(C)+4;return zip(*(zip(*[('%d-'%y*(y%5==2>>y)).rjust(P)for y in range(P,0,-1)])+[(n*'#').rjust(P)for n in C]))+[[' ']*P+S]

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

রেখার প্রতিনিধিত্বকারী অক্ষরের তালিকার একটি তালিকা ফেরত দেয়।

  • প্রচুর অতিরিক্ত শ্বেত স্থান যোগ করে কিছু বাইট সংরক্ষণ করা হয়েছে।
  • map(list,yticks)সেখানে একটি অপ্রয়োজনীয় ছিল।
  • কিছু বাইট সংরক্ষণ করতে স্পেস প্যাডিং পরিবর্তিত হয়েছে।
  • আমি ভেবেছিলাম আমি বাছাই করছি তবে আমি ছিলাম না: +2 বাইট। তবে আমি একই সময়ে একজনকে স্বাধীনভাবে সংরক্ষণ করেছিলাম। y==1দ্বারা প্রতিস্থাপিত y<2
  • -6 বাইট পরিবর্তে ব্যবহার করে লিনকে ধন্যবাদ ।'%d-'%y*(y%5==2>>y)(`y`+'-')*(not y%5or y<2)

সামান্য শৃঙ্খলাবদ্ধ:

def f(s):
	S=sorted(set(s)^{' '})  # sorted list of unique letters (without ' ')
	C=map(s.count,S)        # count of each unique letter in the input
	P=max(C)+4              # used for padding and getting highest y tick
	B=[(n*'#').rjust(P)for n in C]     # create bars
	yticks = [('%d-'%y*(y%5==2>>y)).rjust(P)for y in range(P,0,-1)]  # create y ticks at 1 and multiples of 5
	yticks = zip(*yticks)                      # need y ticks as columns before combining with bars
	return zip(*(yticks+B))+[[' ']*P+S]        # zip ticks+bars then add row of sorted unique letters.

1

সি # (.নেট কোর) , 344 340 338 + 18 বাইট

জন্য 18 বাইট অন্তর্ভুক্ত using System.Linq;

সংরক্ষিত 6 বাইট @ কেভিন ক্রুজসেনকে ধন্যবাদ thanks

n=>{var l=n.Where(c=>c!=32).GroupBy(c=>c).OrderBy(c=>c.Key).ToDictionary(k=>k.Key,c=>c.Count());int h=(l.Values.Max()/5+1)*5,o=(h+"").Length+1,m=l.Keys.Count+o,t=h+1,i=0,j;var a=new string[t];for(string p,q;i<t;a[i++]=q)for(q=(p=i>0&i%5<1|i==1?i+"-":"").PadLeft(j=o);j<m;){var c=l.ElementAt(j++-o).Key;q+=i<1?c:l[c]>=i?'X':' ';}return a;}

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


আপনার এখান থেকে একটি জায়গা j< m;সরানো যেতে পারে। এবং মোট ইনটস -4 বাইটের জন্য int i=0,jহিসাবে স্থাপন করা যেতে পারে ,i=0,j। তবে আপনাকে 18 বাইট অন্তর্ভুক্ত করতে হবে using System.Linq;..
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন ধন্যবাদ, আমি এগুলি মিস করেছি। এবং আমি 18 বাইট যুক্ত করেছি।
ইয়ান এইচ।

আমার কাছ থেকে +1 ওহ, আর পরিবর্তন করে 2 আরও বেশি বাইট সংরক্ষণ করতে পারবেন for(;i<t;){string p=i>0&i%5<1|i==1?i+"-":"",q=p.PadLeft(o);for(j=o;j<m;){...}a[i++]=q;}করার for(string p,q;i<t;)for(p=i>0&i%5<1|i==1?i+"-":"",q=p.PadLeft(j=o);j<m;a[i++]=q){...}এটি অনলাইনে চেষ্টা করুন।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন থাটস সত্যিই চতুর, ধন্যবাদ!
ইয়ান এইচ।

1

বাশ + কোর্টিলস, 332 324 323 318 312 302 298 296 293 291 বাইট

c()(cut -d\  -f$@)
p=printf
cd `mktemp -d`
grep -o [^\ ]<<<$@|sort|uniq -c|c 7->a
sort -k2<a>b
r=$[`c 1 <a|sort -n|tail -1`+5]
s=${#r}
t()($p \ ;((i++<s))&&t;i=)
for((;--r;));{
((r%5&&r>1))&&t||$p %${s}s- $r;IFS='
'
for l in `<b`;{ ((r<=`c 1 <<<$l`))&&$p X||$p \ ;}
echo
}
t
c 2 <b|tr -d \\n

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

সটীক:

c()(cut -d\  -f$@)
p=printf              # saving a few bytes

cd `mktemp -d`        # for temp files

grep -o [^\ ]<<<$@    # grabs all non-space characters
    |sort|uniq -c     # get character frequency
    |c 7->a           # slightly hacky way of stripping leading spaces;
                      #     uniq -c adds 6 spaces in front of each line

sort -k2<a>b          # store frequencies sorted alphabetically in b

r=$[`                 # r = highest frequency +5:
    c 1 <a            #     get frequencies
    |sort -n|tail -1  #     get maximum frequency
    `+5]              #     +4 so at least one multiple of 5 is
                      #     labeled, +1 because r gets pre-decremented

s=${#r}                    # s = length of r as a string
t()($p \ ;((i++<s))&&t;i=) # pad line with s+1 spaces

for((;--r;));{         # while (--r != 0)
    ((r%5&&r>1))&&     # if r isn't 1 or a multiple of 5
        t||            #     then indent line 
        $p %${s}s- $r; # otherwise print right-aligned "${r}-"
        IFS='
'                      # newline field separator
    for l in `<b`;{          # for all letters and their frequencies:
        ((r<=`c 1 <<<$l`))&& #     if frequency <= current height 
            $p X||           #         then print an X
            $p \ ;}          #     otherwise print a space
    echo
}
t # indent x-axis labels
c 2 <b|tr -d \\n # print alphabetically sorted characters

3 বাইট সংরক্ষণ করার জন্য @ আইএনএম_ম্যাট্রিক্সকে ধন্যবাদ।


cat b<b3 টি অক্ষর সাশ্রয় হতে পারে
আইয়ানএম_ম্যাট্রিক্স 1

0

সি, 201 বাইট

char c[256],*p,d;main(int a,char **b){for(p=b[1];*p;p++)++c[*p|32]>d&*p>64?d++:0;for(a=(d+4)/5*5;a+1;a--){printf(!a||a%5&&a!=1?"    ":"%3i-",a);for(d=96;++d>0;c[d]?putchar(a?32|c[d]>=a:d):0);puts(p);}}

কমান্ড লাইন (প্রথম যুক্তি) থেকে ইনপুট নেওয়া হয়। কোডের আকার আরও কমাতে এক্স এর পরিবর্তে বিস্মৃত চিহ্নগুলি ব্যবহার করে। বাম দিকে কাউন্টার সর্বদা তিনটি অক্ষর দীর্ঘ।

জিসিসি এবং ঝনঝন সঙ্গে পরীক্ষিত।


for(p=b[1];*p;p++)সম্ভবত হতে পারে for(p=b[1]-1;*++p;), main(int a,char **b)সম্ভবত গল্ফ করা যেতে পারে m(a,b)char**b;
জোনাথন ফ্রেচ

যেহেতু a!=1বুলিয়ান হবে, a%5&&a!=1?তার সমতুল্য a%5&a!=1?বা হওয়া উচিত a%5&&~-a
জোনাথন ফ্রেচ

0

এক্সেল ভিবিএ, 316 বাইট

একটি বেনামে VBE তাত্ক্ষণিক উইন্ডো ফাংশন যা ঘর থেকে ইনপুট নেয় [A1]এবং ভিবিই তাত্ক্ষণিক উইন্ডোতে আউটপুট নেয় ।

For i=1To 26:Cells(2,i)=Len(Replace([Upper(A1)],Chr(i+64),11))-[Len(A1)]:Next:m=-5*Int(-[Max(2:2)]/5):l=Len(m)+1:For i=-m To-1:?Right(Space(l) &IIf(i=-1Xor i Mod 5,"",-i &"-"),l);:For j=1To 26:?IIf(Cells(2,j),IIf(Cells(2, j) >= -i, "X", " "),"");:Next:?:Next:?Spc(l);:For i=1To 26:?IIf(Cells(2,i),Chr(i+96),"");:Next

অবহেলিত সংস্করণ

Public Sub bar_graph()
    For i = 1 To 26
        ''  gather the count of the letter into cells
        Cells(2, i) = Len(Replace([Upper(A1)], Chr(i + 64), 11)) - [Len(A1)]
    Next
    m = -5 * Int(-[Max(2:2)] / 5)   ''  get max bar height
    l = Len(m) + 1                  ''  length of `m` + 1
    For i = -m To -1
        ''  print either a label or free space (y-axis)
        Debug.Print Right(Space(l) & IIf((i = -1) Xor i Mod 5, "", -i & "-"), l);
        For j = 1 To 26
            ''  print 'X' or ' ' IFF the count of the letter is positive
            If Cells(2, j) Then Debug.Print IIf(Cells(2, j) >= -i, "X", " ");
        Next
        Debug.Print                 ''  print a newline
    Next
    Debug.Print Spc(l);             ''  print spaces
    For i = 1 To 26
        ''  print the letters that were used (x-axis)
        Debug.Print IIf(Cells(2, i), Chr(i + 96), "");
    Next
End Sub


0

পাইথন 3 , 177 বাইট

lambda s:[[list(("%d-"%i*(i%5==2>>i)).rjust(len(q)))+["* "[s.count(c)<i]for c in q]for i in range(max(map(s.count,q))+4,0,-1)]+[[" "]*len(q)+q]for q in[sorted(set(s)-{' '})]][0]

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

এটি পাইথনের সবচেয়ে বাইট-দক্ষ পদ্ধতির নাও হতে পারে, তবে আমি সত্যিই এটি "সত্য ওয়ান-লাইনার" ল্যাম্বদা দিয়ে সমাধান করতে চেয়েছিলাম।

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


0

জাভাস্ক্রিপ্ট (ES8), 200 বাইট

অক্ষরের অ্যারে হিসাবে ইনপুট নেয়। একটি স্ট্রিং প্রদান করে।

s=>(s.sort().join``.replace(/(\w)\1*/g,s=>a.push(s[0]+'X'.repeat(l=s.length,h=h<l?l:h)),h=a=[]),g=y=>y--?(y<2^y%5?'':y+'-').padStart(`${h}_`.length)+a.map(r=>r[y]||' ').join``+`
`+g(y):'')(h+=5-~-h%5)

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

মন্তব্য

s => (                    // s[] = input array of characters (e.g. ['a','b','a','c','a'])
  s.sort()                // sort it in lexicographical order (--> ['a','a','a','b','c'])
  .join``                 // join it (--> 'aaabc')
  .replace(/(\w)\1*/g,    // for each run s of consecutive identical letters (e.g. 'aaa'):
    s => a.push(          //   push in a[]:
      s[0] +              //     the letter, which will appear on the X-axis
      'X'.repeat(         //     followed by 'X' repeated L times
        L = s.length,     //     where L is the length of the run (--> 'aXXX')
        h = h < L ? L : h //     keep track of h = highest value of L
    )),                   //   initialization:
    h = a = []            //     h = a = empty array (h is coerced to 0)
  ),                      // end of replace() (--> a = ['aXXX','bX','cX'] and h = 3)
  g = y =>                // g = recursive function taking y
    y-- ?                 //   decrement y; if there's still a row to process:
      (                   //     build the label for the Y-axis:
        y < 2 ^ y % 5 ?   //       if y != 1 and (y mod 5 != 0 or y = 0):
          ''              //         use an empty label
        :                 //       else:
          y + '-'         //         use a mark
      ).padStart(         //     pad the label with leading spaces,
        `${h}_`.length    //     using the length of the highest possible value of y
      ) +                 //     (padStart() is defined in ECMAScript 2017, aka ES8)
      a.map(r => r[y]     //     append the row,
                 || ' ')  //     padded with spaces when needed
      .join`` + `\n` +    //     join it and append a linefeed
      g(y)                //     append the result of a recursive call
    :                     //   else:
      ''                  //     stop recursion
)(h += 5 - ~-h % 5)       // call g() with h adjusted to the next multiple of 5 + 1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.