শব্দের দৈর্ঘ্যের অনুভূমিক গ্রাফ


28

ইনপুট

শূন্যস্থানগুলির যে কোনও সংখ্যার দ্বারা পৃথক শব্দের একটি তালিকা।

আউটপুট

একটি অনুভূমিক ASCII আর্ট গ্রাফ, যেখানে এন-তম লাইনটি *এন-তম শব্দটি দীর্ঘ হিসাবে অনেকগুলি নক্ষত্র ( ) দ্বারা গঠিত ।

ব্যবহারের উদাহরণ

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

> This is an example histogram of word length
****
**
**
*******
*********
**
****
******

> a aa aaa aaaa aaaaa
*
**
***
****
*****

> double space  example
******
*****
*******

রেফারেন্স বাস্তবায়ন

নির্দিষ্টকরণের বিষয়ে সন্দেহের ক্ষেত্রে, আপনার প্রোগ্রামের আউটপুটটি সমস্ত ইনপুটগুলির নীচে নীচের প্রোগ্রামের সাথে ঠিক মেলে।

puts gets.chomp.split.map{|word| '*' * word.length}.join("\n")

তাহলে কি একটি ট্রেলিং নিউলাইন অনুমোদিত? আঙ্গুলগুলি অতিক্রম করে
বিটা ডিকায়

@ বেটাডেহে হ্যাঁ, অনুমোদিত ...........
ক্যারিডরক

ইনপুটটির কি কখনও অগ্রণী বা পিছনের স্থান থাকবে?
PhiNotPi

8
আপনি যা বর্ণনা করছেন তা হিস্টোগ্রাম নয়। একটি হিস্টগ্রাম এক্স লাইনে x অক্ষরের সাথে শব্দের সংখ্যা প্রদর্শন করবে। প্রথম উদাহরণে, লাইন 1 টিতে 0 টি তারকাচিহ্ন থাকবে (দৈর্ঘ্যের 1 টি নয়) লাইন 2 তে 3 টি তারকাচিহ্ন থাকবে (যা, একটি, এর) এবং আরও অনেক কিছু।
nitro2k01

1
ঠিক আছে, আমি বুঝতে পেরেছি আপনি ঠিক বলেছেন। অনুভূমিক এটি হয়।
nitro2k01

উত্তর:


24

রেটিনা , 5 + 3 = 8 বাইট

 +
\n
.
*

প্রতিটি লাইন তার নিজস্ব ফাইলে যায় তাই আমি প্রতিটি অতিরিক্ত ফাইলের জন্য 1 বাইট যুক্ত করেছি। এছাড়াও, \nএকটি বাস্তব নিউলাইন দিয়ে প্রতিস্থাপন করা উচিত।

প্রতিটি জোড় লাইনের একটি প্যাটার্ন-রিপ্লেসমেন্ট জুটি। +এক বা একাধিক স্পেসের সাথে মেলে এবং এটি একটি নতুন লাইনের সাথে প্রতিস্থাপন করে। একটি নিউলাইন ব্যতীত অন্য. কোনও চরিত্রের সাথে মেলে এবং এটি এটির সাথে প্রতিস্থাপন করে । এটি বিশ্বব্যাপী প্রয়োগ করা হয়, তাই প্রতিটি অক্ষর a এর সাথে প্রতিস্থাপিত হয় ।**


11

পাইথ, 9 বাইট

jm*ld\*cz

ব্যাখ্যা:

jm*ld\*cz
       cz    chop input on whitespace
 m           map to
   ld        length of the segment
  *  \*      number of asterisks
j            joined on newlines


10

আর - 33

write(gsub(".","*",scan(,"")),"")

কোথায়

  • scan(,"") স্টিডিন থেকে পড়ে এবং সাদা-স্পেসে একটি অক্ষর ভেক্টরে বিভক্ত হয়।
  • gsub(".", "*", ...)সমস্ত অক্ষর প্রতিস্থাপন *
  • write(..., "") ডিফল্ট বিভাজক হিসাবে "\ n" দিয়ে প্রসারিত করে।

10

পাইথন 3, 43 বাইট:

for w in input().split():print('*'*len(w))

সিনট্যাক্স ত্রুটিটি নির্দেশ করার জন্য @ বেটাডেকে ধন্যবাদ ।

নমুনা রান:

> This is an example histogram of word length
****
**
**
*******
*********
**
****
******

(নীচের স্ট্রিংটি পাঠ্যের পরিবর্তে আক্ষরিক হিসাবে প্রবেশ করা হয়েছে)

> 'example\twith\nweird\rwhite   space'
*******
****
*****
**********

বোনাস: উল্লম্ব হিস্টোগ্রাম

আমার ত্রুটিটি দেখানোর জন্য @ কারিডরককে ধন্যবাদ যা বোনাসগুলিতে 1 থেকে বহু সারি তৈরি করেছে।

l=[len(x)for x in input().split()]
for i in range(len(l)-1,0,-1):print(''.join(['*'if j>=i else' 'for j in l]))

ডেমো:

> This is an example histogram of word length
   **   
   **  *
   **  *
*  ** **
*  ** **
********
********

বোনাস: উল্লম্ব হিস্টোগ্রাম (উল্টো দিকে)

l=[len(x)for x in input().split()]
for i in range(len(l)-1):print(''.join(['*'if j>i else' 'for j in l]))

ডেমো:

> This is an example histogram of word length
********
********
*  ** **
*  ** **
   **  *
   **  *
   **   

উল্লম্ব এক দ্বারা বন্ধ
ক্যারিডরক

6

আর, 38 বাইট (মন্তব্যে কিছু সহায়তার সাথে)

cat(gsub(" +|$","\n",gsub("\\S","*",x)))

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

  • gsub এর সাথে সমস্ত নো-স্পেস প্রতিস্থাপন করে *
  • দ্বিতীয় gsubযোগ \nপ্রতিটি উপাদান শেষে (সম্পর্কে newline)
  • cat সেই অনুযায়ী মুদ্রণ

ডেমো


6

> <> , 38 37 বাইট

অভিশাপ আপনি ডাবল স্পেস কেস * মাছ কাঁপায় *।

<v&0
 >i:84*=?v0(?;67*o&1&
 \ &0o?&a/

আপনি এটি অনলাইনে চেষ্টা করতে পারেন (আপনাকে যা করতে হবে তা হ'ল নীচের কাছের ক্ষেত্রটি দিয়ে ইনপুট দেওয়া এবং তারপরে Giveবোতামটি টিপুন)। আরও গল্ফ করার পরামর্শগুলি সর্বদা স্বাগত, বিশেষত দ্বিতীয় এবং তৃতীয় লাইনের সামনে সেই অপব্যয় স্থানগুলি সরিয়ে নেওয়ার জন্য ধারণা।

অতিরিক্ত স্থানগুলির জন্য যদি আপনাকে অতিরিক্ত নতুন লাইন প্রিন্ট করার অনুমতি দেওয়া হয় তবে কোডটি একটি বৃহত 27 বাইট হতে পারে :

>i:84*=?v0(?;67*o
^     oa<

ব্যাখ্যা

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

লাইন 1:

<v&0
<      redirects flow leftward
   0   pushes 0 onto the stack
  &    pops 0 and puts it in the register 
 v     redirects flow downward

লাইন 2:

>i:84*=?v0(?;67*o&1&
>                     redirects flow leftward
 i:                   pushes input and then duplicates it
   84*                pushes 32 (the space character numerically)
      =?v             pops 32 and input and redirects flow downward if they're equal
         0(?;         pops input and terminates if input is less than 0*
             67*o     pushes 42 (asterisk) and prints it
                 &1&  pushes register value and then puts 1 in the register

*in ><>, the command i returns -1 if no input is given

লাইন 3:

এনবি এই লাইনটি বিপরীতে যায়, তাই ডান থেকে বামে পড়ুন।

 ^ &0o?&a<
         <  redirects flow leftward
        a   pushes 10 (newline) onto the stack
     o?&    prints a newline if the register is not 0
   &0       sets the register to 0
 ^          redirects flow upwards (back to the second line)

মূলত, ইনপুটটি (যা একবারে একটি অক্ষর পড়া হয়) তা নিশ্চিত করার জন্য প্রোগ্রাম পরীক্ষাটি কোনও স্থান নয় এবং তারপরে একটি তারকাচিহ্ন প্রিন্ট করে। কোনও ইনপুট না থাকলে এটি শেষ হয় (ইনপুট মান -1)। এটি অতিরিক্ত নতুন লাইনগুলি প্রিন্ট না করে তা নিশ্চিত করার জন্য এটি নিবন্ধকের মানটি ব্যবহার করে যা এটি 0 বা 1 তে সেট করে I যখন 1একটি নক্ষত্র ছাপানোর পরে নিবন্ধকের মান সেট করে ); প্রোগ্রামটি শেষ হয়ে গেলে তারা স্ট্যাকের উপরে থাকে কিন্তু কিছুই করে না।

আমি এটা বিভ্রান্তিকর একটি বিট যেহেতু আমি ব্যবহৃত হতে পারে জানি 84*এবং 67*পরিবর্তে " "এবং "*"যথাক্রমে, কিন্তু যে ছিল কারণ আমি কারনের জন্য প্রোগ্রামে স্ট্রিং নির্বাণ মত মনে হয়নি।



6

জাভাস্ক্রিপ্ট ES6

ফাংশন, 46 টি চর

f=s=>s.replace(/\S/g,'*').replace(/\s+/g,'\n')

প্রোগ্রাম, 55 টি চর

alert(prompt().replace(/\S/g,"*").replace(/\s+/g,"\n"))

আপনার ফাংশনটি প্রকৃতপক্ষে 46 টি অক্ষর দীর্ঘ এবং আপনার প্রোগ্রামটি 55
অ্যাড্রয়েটজুইজ

@ অন্ধকার 3560, সংশোধন করার জন্য আপনাকে ধন্যবাদ। আমি "f=s=>s.replace(/\S/g,'*').replace(/\s+/g,'\n')".lengthদৈর্ঘ্যটি পরিমাপ করতে পছন্দ করেছি এবং ভুলে গেছি \
কিউয়েরটি

6

পার্ল, 16 বাইট (15 অক্ষর + -p)

y/ /
/s;s/./*/g

হিসাবে চালান:

$ perl -pe 's/ +/
/g;s/./*/g' <<< 'This is a test'
****
**
*
****

একটি অতিরিক্ত বাইট সংরক্ষণ করা হয়েছে, @ThisSuitIsBlackNot এর জন্য ধন্যবাদ , এর y///sআগে আমার মুখোমুখি হয়নি !


এটি দুর্দান্ত! প্রথম প্রতিস্থাপনের প্রতিলিপিতে পরিবর্তন করে আপনি 1 বাইট সংরক্ষণ করতে পারেন:y/ /\n/s;
এইসুটসআইবল্যাকনট

পছন্দ করুন ধন্যবাদ!
ডম হেস্টিংস

5

গেম, 11 9 টি অক্ষর

 =\n
?=\*

নমুনা রান:

bash-4.3$ gema ' =\n;?=\*' <<< 'This is an example histogram of word length'
****
**
**
*******
*********
**
****
******

bash-4.3$ gema ' =\n;?=\*' <<< 'a aa aaa aaaa aaaaa'
*
**
***
****
*****

bash-4.3$ gema ' =\n;?=\*' <<< 'double space  example'
******
*****
*******

5

পিএইচপি 5.3, 55 53 51 50 বাইট

<?for(;$i<strlen($a);){echo$a{$i++}!=' '?'*':"
";}


ব্যবহার:
স্ক্রিপ্টটি কল করুন এবং একটি বৈশ্বিক চলক (def ক)
php -d error_reporting=0 script.php?a="This is an example histogram of word length"

আউটপুট সংজ্ঞা দিন:

****
**
**
*******
*********
**
****
******

4

জাভা, ১০২ বাইট

class R{public static void main(String[]a){for(String s:a)System.out.println(s.replaceAll(".","*"));}}

4

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

putStr.unlines.map(>>"*").words

ব্যবহারের উদাহরণ:

Main> putStr.unlines.map(>>"*").words $ "This is an example histogram of word length"
****
**
**
*******
*********
**
****
******

আপনি প্রতিস্থাপন করতে পারে putStr.সঙ্গে f=বাইট গণনা কম, বা ব্যবহারের main=interact$পরিবর্তে putStr.stdin থেকে পড়া এবং এটি একটি সম্পূর্ণ প্রোগ্রাম করতে
HEGX64

@ HEGX64: কিন্তু f=unlines.map(>>"*").wordsঅনুরূপ কিছু প্রদান করে "****\n**\n**\n"এবং অনুরোধ হিসাবে "অনুভূমিক ASCII আর্ট গ্রাফ" আউটপুট দেয় না।
নিমি

4

সিজেম, 11 বাইট

@ অপ্টিমাইজারের পরে একটি চৌকস 10 বাইট সমাধান খুঁজে পেয়ে সিজেমে দ্বিতীয় স্থান অর্জনের জন্য প্রতিযোগিতা করা। এটি একটি সরল 11 বাইট সমাধান:

lS%:,'*f*N*

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

বিকল্প সমাধান যা দুটি মানচিত্রের পরিবর্তে লুপ ব্যবহার করে, 11 বাইটও:

lS%{,'**N}/

প্রথম সমাধানের জন্য ব্যাখ্যা:

l     Get input.
S%    Split at spaces.
:,    Apply length operator to each word.
'*f*  Map each length to corresponding repetitions of '*.
N*    Join with newlines.

4

জাভাস্ক্রিপ্ট (ES6), 37

f=s=>s.replace(/./g,m=>m<"!"?`
`:'*')

শুধুমাত্র একটি ব্যবহার করে সংক্ষিপ্ত সংস্করণ replace


2
দাম্মিত, আমি সবেমাত্র আমার ES6 ফাংশনটি 38 বাইট শেষ করেছি। আমি লজ্জা পেয়ে পালাতে গিয়ে আমার উপভোগ করুন! : ডি
মেয়রমন্তি

4

জে, 10 বাইট

   '*'$~$&>;:'This is an example histogram of word length'
****     
**       
**       
*******  
*********
**       
****     
******

বোনাস: উল্লম্ব (12 বাইট)

   |:'*'$~$&>;:'This is an example histogram of word length'
********
********
*  ** **
*  ** **
   **  *
   **  *
   **   
    *   
    *   

বোনাস: উল্টানো উল্লম্ব (14 বাইট)

   |.|:'*'$~$&>;:'This is an example histogram of word length'
    *   
    *   
   **   
   **  *
   **  *
*  ** **
*  ** **
********
********

3

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

একটি দুর্দান্ত একটি লাইনার :)

print(''.join(map(lambda x:"*"*len(x)+"\n"*int(x!=""),input().split())))

আউটপুট:

>>> print(''.join(map(lambda x:"*"*len(x)+"\n"*int(x!=""),input().split())))
Hello world  how are you?
*****
*****
***
***
****

এখানে একটি ট্রেলিং নিউলাইন রয়েছে। যদি আপনি এটি ছাড়া চান, আপনি 5 বাইট যোগ করতে হবে:

print(''.join(map(lambda x:"*"*len(x)+"\n"*int(x!=""),input().split()))[:-1])

3

জুলিয়া, 50 বাইট

s->print(join(["*"^length(w)for w=split(s)],"\n"))

এটি একটি নামহীন ফাংশন তৈরি করে যা স্ট্রিংটিকে ইনপুট হিসাবে গ্রহণ করে এবং STDOUT- এ প্রিন্ট করে।

Ungolfed:

function f(s::String)
    # Construct a vector of horizontal bars
    bars = ["*"^length(w) for w in split(s)]

    # Join the bars with newlines
    j = join(bars, "\n")

    # Print the result to STDOUT
    print(j)
end

3

জাভাস্ক্রিপ্ট (ES5)

প্রোগ্রাম, 54 অক্ষর

alert(prompt().replace(/\S/g,'*').replace(/ +/g,'\n'))

ফাংশন, 60 টি অক্ষর

function(i){return i.replace(/\S/g,'*').replace(/ +/g,'\n')}

ব্যবহারের উদাহরণ:

var h=function(i){return i.replace(/\S/g,'*').replace(/ +/g,'\n')},
d=document,g=d.getElementById.bind(d),i=g('i'),o=g('o')
i.onchange=function(){o.textContent=h(i.value)}
<input id="i"/>
<pre id="o"></pre>


3

মতলব - 54 বাইট

s=input('');o=repmat('*',1,numel(s));o(s==32)=char(10)

এটি কনসোল থেকে চলবে, থেকে ইনপুটটিতে একটি স্ট্রিং নেবে stdinএবং অনুভূমিক শব্দ গ্রাফটি এতে আউটপুট দেবে stdout:

উদাহরণস্বরূপ:

>> s=input('');o=repmat('*',1,numel(s));o(s==32)=char(10)
'This is an example histogram of word length'
o =
****
**
**
*******
*********
**
****
******

অথবা আমরা কিছু অভিনব আকার দেওয়ার চেষ্টা করতে পারি:

>> s=input('');o=repmat('*',1,numel(s));o(s==32)=char(10)
'a aa aaa aaaaaa aaaaaaaaaa aaaaaaaaaaa aaaaaaaaaa aaaaaa aaa aa a aa aaa aaaaaa aaaaaaaaaa'
o =
*
**
***
******
**********
***********
**********
******
***
**
*
**
***
******
**********

খুব চালাক পদ্ধতির!
লুইস মেন্ডো

3

মতলব / অকটভে, 75 বাইট

বেনামে ফাংশন ব্যবহার করা:

@(s)char(arrayfun(@(n)repmat('*',1,n),diff([0 find([s 32]==32)])-1,'un',0))

একটি ভুল চিহ্নিত করার জন্য হোকিকে ধন্যবাদ যা শেষ শব্দটি সনাক্ত হতে বাধা দিয়েছে।

উদাহরণ ব্যবহার (মতলব):

>> @(s)char(arrayfun(@(n)repmat('*',1,n),diff([0 find([s 32]==32)])-1,'un',0)) % define function
ans = 
    @(s)char(arrayfun(@(n)repmat('*',1,n),diff([0,find([s,32]==32)])-1,'un',0))
>> ans('This is an example histogram of word length') % call function
ans =
****     
**       
**       
*******  
*********
**       
****     
******   

অথবা এটি অনলাইনে চেষ্টা করুন (অক্টেভ)।


3

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

পরিবর্তনের জন্য বেশ প্রতিযোগিতামূলক। যান গ্যাজেট আনারি অপারেটরদের যান। আমিও কিছু ফাংশন উপর যে বাম বন্ধনী বিস্মরণ মত রাখা -splitএবং -replaceএখানে ব্যবহৃত, ঐচ্ছিক।

%{$_-split"\s+"-replace".","*"}

পাইপলাইন ইনপুট (পাওয়ারশেলের জন্য স্টিডিনের সমতুল্য) মাধ্যমে কল করা:

PS C:\Tools\Scripts\golfing> "a aa aaa" | %{$_-split"\s+"-replace".","*"}
*
**
***

বোনাস হিসাবে, যদি আমরা পরিবর্তে কমান্ড-লাইন আর্গুমেন্টগুলি ব্যবহার করতে পারি তবে আমরা 20 বাইটে নামতে পারি এবং ইনপুট হিসাবে একক স্ট্রিং ছাড়া এবং ছাড়া উভয় ক্ষেত্রেই কাজ করতে পারি:

$args-replace".","*"

PS C:\Tools\Scripts\golfing> .\horizontal-graph-word-length.ps1 "double space  example"
******
*****
*******

PS C:\Tools\Scripts\golfing> .\horizontal-graph-word-length.ps1 double space  example
******
*****
*******

3

জাভাস্ক্রিপ্ট (ES6)

নতুন সমাধান (39 বাইট):

s=>[...s].map(c=>c==' '?`
`:'*').join``

রেজেক্স সমাধান (42 বাইট):

s=>s.replace(/\S/g,"*").replace(/ +/g,`
`)

নন-রেজেক্স সলিউশন (by১ বাইট):

s=>s.split(" ").map(v=>"*".repeat(v.length)).filter(a=>a!="").join(`
`)

এই সমাধানগুলি বেনামে ফাংশন সংজ্ঞায়িত করে। তাদেরকে ভেরিয়েবলগুলিতে বরাদ্দ করুন বা তাদের মতো কল করুন:

(s=>s.replace(/\S/g,"*").replace(/ +/g,`
`))("[your string here]")

(s=>s.split(" ").map(v=>"*".repeat(v.length)).filter(a=>a!="").join(`
`))("[your string here]")

2

এসডাব্লুআই-প্রোলগ, 40 বাইট

a([A|T]):-(A=32,nl;put(42)),(T=[];a(T)).

কোড স্ট্রিং সহ বলা হয়, যেমন a(`This is an example histogram of word length`).


2

স্টাটা, 72 বাইট

di _r(a)
token "$a"
while ("`1'")!=""{
di _d(`=length("`1'")')"*"
ma s
}

Ungolfed

display _request(a) //get input via prompt
tokenize "$a" //split a by spaces into the variables 1,2,...
while ("`1'")!=""{ //while the first variable is not empty
display _dup(`=length("`1'")')"*" //display "*" duplicated for every character in variable 1.
macro shift //move variable 2 to 1, 3 to 2, etc.
}

নোট করুন যে এই কোডটি অনলাইন দোভাষীগুলিতে কাজ করে না এবং অবিহীন মালিকানাধীন স্টাটা দোভাষী দরকার।


2

সি ++ 14, 107 106 বাইট

#include<iostream>
main(){std::string s;for(;std::cin>>s;){for(char c:s)std::cout<<'*';std::cout<<'\n';}}


2

ও, 22 বাইট

i' /rl{e{'.'*%p}{;}?}d

ব্যাখ্যা

i                         Read the user input
 ' /r                     Split on spaces and reverse
     l{             }d    For each element
       e           ?      If it's not empty
        {'.'*%            Replace every char with an asterick
              p}          And print it
                {;}       Else, just pop it off the stack

2

মরীচি, 92 বাইট

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

'''''''>`++++++)v
vgLsP-(---`<''P'<
>rnp+v
  >Sv>++v
    (>`v+
    H^ )+
^Sp`@p'<+
^  @++++<


1

awk

 awk '{for(i=1;i<=NF;i++){while(k++<length($i)){printf "*"};k=0;print ""}}'

উদাহরণ

 echo "this is programming" | awk '{for(i=1;i<=NF;i++){while(k++<length($i)){printf "*"};k=0;print ""}}'

আউটপুট: -

****
**
***********
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.