উত্স কোডে অক্ষর গণনা করা হয়


12

এমন একটি প্রোগ্রাম লিখুন যা এর উত্স কোডে প্রতিটি অনন্য চরিত্রের উপস্থিতির সংখ্যার একটি তালিকা দেয়।

উদাহরণস্বরূপ, এই অনুমানমূলক প্রোগ্রামটি {Source_Print_1};এই আউটপুট উত্পাদন করা উচিত:

; 1
P 1
S 1
_ 2
c 1
e 1
i 1
n 1
o 1
p 1
r 2
t 1
u 1
{ 1
} 1

বিন্যাসটি এই উদাহরণটির সাথে মেলে। Extচ্ছিক চূড়ান্ত নিউলাইন বাদে কোনও বহিরাগত সাদা স্থানের অনুমতি নেই।

আপনার প্রোগ্রামটি উত্স ফাইল থেকে নিজস্ব উত্স কোডটি না পড়তে পারে।

তালিকাভুক্ত অক্ষর দুটি অর্ডারের একটি হতে হবে। হয় আপনার ভাষা দ্বারা ব্যবহৃত অক্ষর এনকোডিংয়ে অক্ষরের মানগুলির ক্রম (সম্ভবত ASCII), বা আপনার উত্সটিতে অক্ষরগুলি প্রদর্শিত হওয়ার ক্রম।

এই প্রশ্নের দ্বারা অনুপ্রাণিত এই মন্তব্যটি দ্বারা জানুয়ারী ডিভোরাক



1
একটি শূন্য দৈর্ঘ্যের প্রোগ্রামটি বেশ কয়েকটি ভাষায় কাজ করবে। এটি একটি মান ফাঁক হিসাবে গণনা ?
ডিজিটাল ট্রমা

2
চলুন ... হ্যাঁ
স্পার


1
@ ব্যবহারকারী23013 ভাল প্রশ্ন। আমি নিউলাইন বিবেচনা করি নি। আমার ধারণা আপনি যদি এগুলি অন্তর্ভুক্ত করেন তবে আমি একটি উত্তর গ্রহণ করব যা সেগুলি আক্ষরিকভাবে প্রিন্ট করে, তাই কোথাও ফাইলটিতে একটি ডাবল-নিউলাইন থাকবে new
স্পার

উত্তর:


7

সিজেম, 14 বাইট

{S2N`/}`{S2N}/

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

আউটপুটটি প্রথমে প্রদর্শিত হওয়ার ক্রমে রয়েছে:

{ 2
S 2
2 2
N 2
` 2
/ 2
} 2

এটি কেবল <SP>2<NL>প্রতিটি অক্ষরের সাথে যুক্ত হয় {S2N`/}


18

/// , 12 বাইট

  4
4 4

 4

একটি প্রচুর ধন্যবাদ আপনি @ ব্যবহারকারী ২৩০১৩ এ যান, যিনি আমার সিজে্যাম কোডের তুলনায় এই উন্নতির পরামর্শ দিয়েছিলেন, প্রক্রিয়াটির মধ্যে তাঁর নিজের সর্বোচ্চ স্কোরিং উত্তরটি ছাড়িয়ে যান।

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


সিজোম, 20 বাইট

''S5N'5S5N'NS5N'SS5N

এই পদ্ধতির কোনও অন্তর্নির্মিত অক্ষর গণনা ব্যবহার করা হয় না।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

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

''S5N e# Push a single quote, a space, the integer 5 and a linefeed.
'5S5N e# Push the character 5, a space, the integer 5 and a linefeed.
'NS5N e# Push the character N, a space, the integer 5 and a linefeed.
'SS5N e# Push the character S, a space, the integer 5 and a linefeed.

5
স্ট্যান্ডার্ড কুইন কৌশল ব্যবহার না করার জন্য +1।
মার্টিন ইন্ডার

আমি সত্যিই সত্যিই আশা করি যে এই নেতৃত্বের জন্য আবদ্ধ থাকে। আমি আনন্দের সাথে এর চতুষ্পদ অংশের উপর চেকমার্ক দেব।
স্পার

এখন নতুন লাইনের অনুমতি রয়েছে। আমি মনে করি এই উত্তরটি আপনার মধ্যে আরও ভালভাবে মার্জ করা উচিত।
জিমি 23013

@ ব্যবহারকারী23013: এটি আপনার সিজেএম উত্তরের চেয়েও ছোট। ধন্যবাদ!
ডেনিস

9

সিজোম, 20 বাইট

{`"_~"+$e`{)S@N}%}_~

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

আমরা প্রথমে সিজেমে স্ট্যান্ডার্ড কুইনগুলির একটি দিয়ে শুরু করি

{`"_~"}_~

যা স্ট্যাকের প্রথম ব্লককে ধাক্কা দেয়, এটি অনুলিপি করে এবং অনুলিপি চালায়, যা এটিকে শেষ পর্যন্ত সোর্স কোডটি প্রিন্ট করে তোলে।

তারপরে আমরা উত্স কোড থেকে অক্ষর গণনা গণনা করার জন্য যুক্তি যুক্ত করব:

{`"_~"+                         e# At this point, we have the full source code with us
       $e`                      e# Sort to get similar characters together and run RLE to
                                e# get count of each character as [count char] array
          {    }%               e# Run each array element through this loop
           )S@N                 e# Pop the character, put a space, rotate the count after
                                e# space and then finally put a newline after the trio
                 }_~            e# Second half of the standard quine explained above

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


4

পাইথন 3.5.0b1 , 107 73 বাইট

s="t='s=%r;exec(s)'%s;[print(c,t.count(c))for c in sorted({*t})]";exec(s)

স্বাভাবিক স্ট্রিং রিপ্লেসমেন্ট কুইনের পরিবর্তে, যা দুবার সবকিছু লেখার প্রয়োজন, এখানে একটি execকুইন।


3

গণিত, 101 বাইট

Apply[Print[#1, " ", #2] &, Tally[Characters[StringJoin[ToString[#0, InputForm], "[];"]]], {1}] & [];

দুর্ভাগ্যবশত, আমি হোয়াইটস্পেস সরানোর মত স্বাভাবিক golfing ঠাট কোন ব্যবহার করতে পারবেন না <>জন্য StringJoin, #পরিবর্তে #1, @প্রিফিক্স ফাংশন কলের জন্য বা @@@পরিবর্তে Apply[...,{1}], কারণ ToString[...,InputForm]মনে করে এটা প্রশংসনীয় মুদ্রণ সবকিছু আছে ...

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


InputFormবিরক্তিকর ... OutputFormআরও ভাল তবে এটি স্ট্রিংয়ের উদ্ধৃতি দেয় না।
LegionMammal978

2

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

main=putStr(unlines[s:' ':show t|(s,t)<-zip" \"'(),-0123456789:<=S[\\]aehilmnoprstuwz|"[3,3,3,3,3,41,4,1,6,19,12,5,5,2,2,2,2,3,2,2,2,3,3,3,2,2,2,4,2,2,4,2,3,2,5,5,3,2,2,2]])--178

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

  3
" 3
' 3
( 3
) 3
, 41
- 4
0 1
1 6
2 19
3 12
4 5
5 5
6 2
7 2
8 2
9 2
: 3
< 2
= 2
S 2
[ 3
\ 3
] 3
a 2
e 2
h 2
i 4
l 2
m 2
n 4
o 2
p 3
r 2
s 5
t 5
u 3
w 2
z 2
| 2 

1

ডার্ট - 214 127

একটি সরাসরি সংস্করণ:

main(){print("  22\n\" 3\n( 3\n) 3\n1 3\n2 15\n3 8\n4 1\n5 2\n8 2\n; 2\n\\ 23\na 2\ni 3\nm 2\nn 23\np 2\nr 2\nt 2\n{ 2\n} 2");}

"4" হ'ল সংখ্যাগুলি যোগ করার জন্য একটি মজাদার ফ্যাক্টর। ডার্টপ্যাডে দেখুন / চালান

মূল: আদর্শ গল্ফ করার জন্য স্ট্যান্ডার্ড কুইন কৌশল এবং ডার্টের ফাংশনগুলির নামগুলি কিছুটা দীর্ঘ।

main({m,v,q:r'''main({m,v,q:r''}'')''{m={};for(v in q.split(''))m[v]=m[v]==null?2:m[v]+2;m.forEach((k,v)=>print("$k $v"));}'''}){m={};for(v in q.split(''))m[v]=m[v]==null?2:m[v]+2;m.forEach((k,v)=>print("$k $v"));}

এটি ডার্টপ্যাডে দেখুন / চালান ।


0

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

main=mapM putStrLn[a:" "++show s|a<-[' '..],s<-[sum[2|b<-show"main=mapM putStrLn[a: ++show s|a<-[' '..],s<-[sum[2|b<-show,a==b]],s>0]",a==b]],s>0]

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

আউটপুট:

  8
" 4
' 4
+ 4
, 6
- 6
. 4
0 2
2 2
: 2
< 6
= 6
> 2
L 2
M 2
S 2
[ 8
] 8
a 10
b 4
h 4
i 2
m 6
n 4
o 4
p 4
r 2
s 12
t 4
u 4
w 4
| 4

(অতিরিক্ত একটি অতিরিক্ত নিউলাইন)

ব্যাখ্যা:

কোডটি হ'ল

main=mapM putStrLn[a:" "++show s|a<-[' '..],s<-[sum[2|b<-show"<code>",a==b]],s>0]

"<code>"প্রোগ্রাম কোডের একটি স্ট্রিং ছাড়া কোথায় "

aএকটি স্থান দিয়ে শুরু ascii অক্ষর মাধ্যমে যায়। sum[2|b<-show"<code>",a==b]স্ট্রিংয়ে অক্ষরটি কতবার উপস্থিত হয় তা গণনা করে প্রতিটি ঘটনা দুবার গণনা করা হয়। a:" "++show sবর্তমান চরিত্রের একটি স্ট্রিং, একটি স্থান এবং অক্ষর গণনা তৈরি করে। অবশেষে mapM putStrLnতালিকার প্রতিটি স্ট্রিং একটি পেছনের নিউলাইন দিয়ে মুদ্রণ করে।

সবচেয়ে শক্ত অংশটি "সঠিক গণনা পেয়েছিল । কেবল ব্যবহার করে b<-"<code>"শূন্য উদ্ধৃতি চিহ্ন গণনা করা যাবে কারণ স্ট্রিংটিতে কোনওটি নেই। ব্যবহার করে স্ট্রিংয়ের সামনে এবং প্রান্তে show"<code>"একটি যুক্ত "হয়, যার ফলশ্রুতি চারটি হয়। সুতরাং আমাকে কোডে দুটি অতিরিক্ত উদ্ধৃতি চিহ্ন রাখতে হয়েছিল, তাই a:' ':show sআমি (সংক্ষিপ্ত) ব্যবহারের পরিবর্তে a:" "++show s

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