অক্ষর গণনা - বিট বিট!


19

সরল অংশ: কেবলমাত্র ছাপার যোগ্য এএসসিআইআই-অক্ষর (স্পেস - টিলডে) যুক্ত একটি ইনপুট স্ট্রিং দেওয়া প্রতিটি অক্ষরের উপস্থিতির সংখ্যা গণনা করুন এবং ফলাফলটি কোনও সুবিধাজনক বিন্যাসে ফিরিয়ে দিন। একটি স্ট্রিং এর ফলাফল a%hda7aভালো কিছু হওয়া উচিত: a:3, %:1, h:1, 7:1, d:1। বাছাই করা অপ্রয়োজনীয়, ডিলিমিটার এবং ফর্ম্যাটগুলি alচ্ছিক তবে সহজেই বুঝতে হবে কোন সংখ্যাটি কোন অক্ষরের সাথে সামঞ্জস্য করে। আপনি এমন অক্ষরগুলি অন্তর্ভুক্ত করবেন না যা ইনপুট স্ট্রিংয়ে নেই ( a:3, b:0, c:0, d:1, ...ঠিক আছে না)।

আসল চ্যালেঞ্জ:

আপনার কোডের প্রতিটি অক্ষরকে একটি 8-বিট বাইনারি সংখ্যায় রূপান্তর করুন (বা 16-বিট আপনি যদি ইউটিএফ -16 বা অনুরূপ ব্যবহার করছেন) এবং শুরু হওয়া প্রতিটি অক্ষরকে গণনা করুন 0

প্রত্যেক অক্ষর (জন্য iগণনাকারী হয়), i%7বিট 1 আবশ্যক হতে 1। বিটগুলি ডান থেকে গণনা করা হয়। অন্যান্য সমস্ত বিট আপনি যা চান তা হতে পারে।

নীচের কোডটি উদাহরণ হিসাবে ব্যবহার করুন:

[f]-xif)#f

এটি বাইনারি রূপান্তরিত আমরা নীচে অ্যারে পেতে। প্রথম সংখ্যা (প্রতিনিধিত্বমূলক [একটি আছে 1যাতে এক ঠিক আছে 0'th অবস্থানে। দ্বিতীয় সংখ্যা (প্রতিনিধিত্বমূলক fএকটি আছে 11'st ভঙ্গিমায়, যাতে তিনি যে এক ঠিক আছে খুব। এই মত চালিয়ে, এবং আপনি দেখতে পাবেন উপরের কোডটি বৈধ।

সি 76543210 বিট নম্বর
- -------- ----------
[0101101 1   0 - ঠিক আছে
f 011001 1 0 1 - ঠিক আছে
] 01011 1 01 2 - ঠিক আছে
- 0010 1 101 3 - ঠিক আছে
x 011 1 1000 4 - ঠিক আছে
i 01 1 01001 5 - ঠিক আছে
f 0 1 100110 6 - ঠিক আছে
) 0010100 1   0 - ঠিক আছে
# 001000 1 1 1 - ঠিক আছে
f 01100 1 10 2 - ঠিক আছে

যদি আমরা কোডটি এতে পরিবর্তন করি: ]f[-xif)#fআমরা ক্রমটির নীচের সূচনাটি পেয়ে যাব:

C  76543210  Bit number
-  --------  ----------
]  01011101  0   <- OK
f  01100110  1   <- OK
[  01011011  2   <- Not OK
-  00101101  3   <- OK

আমরা দেখতে, তৃতীয় চরিত্র [একটি নেই 12nd অবস্থান (শূন্য সূচীবদ্ধ), এবং এই কোড অতএব বৈধ নয়।

পরীক্ষার কেস:

Input:
This is a string containing some symbols: ".#!".#&/#

Output:
   !  "  #  &  /  :  T  a  b  c  e  g  h  i  l  m  n  o  r  s  t  y  .
7  1  2  3  1  1  1  1  2  1  1  1  2  1  5  1  2  4  3  1  6  2  1  2

যেকোন যুক্তিসঙ্গত আউটপুট ফর্ম্যাটটি ঠিক আছে (যা আপনার পক্ষে সবচেয়ে সুবিধাজনক)। আপনি উদাহরণস্বরূপ থাকতে পারে: :7, !:1, ":2, #:3, &:1, /:1, T:1, a:2 ...বা [ ,7][!,1][",2][#,3][&,1]...। আউটপুটটি কোনও মানক উপায়ে রয়েছে (ফাংশন থেকে ফিরে, এসটিডিআউট প্রিন্ট করা হবে ইত্যাদি))

1i মডুলাস 7


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


6
অল্প সহায়তার জন্য, আপনি এখানে যে অক্ষরগুলি ব্যবহারের অনুমতি দিয়েছেন তা এখানে রয়েছে n%7> pastie.org/pastes/10985263/text
TidB

@ টিডবি ওয়েবসাইটটি অফলাইন আছে ??
রড

1
@ রড হ্যাঁ, প্যাস্তির মনে হচ্ছে কিছু সমস্যা আছে। পরিবর্তে পেস্টবিন ব্যবহার করে দেখুন
TidB

1
মনে রাখবেন যে নিউলাইনটি 00001010। এটিও কার্যকর হতে পারে! :)
স্টিভি গ্রিফিন

1
আরও কিছু সহায়তার জন্য, এখানে একটি বৈধতা স্ক্রিপ্ট আপনি ইউটিএফ -8 এনকোডিংয়ের জন্য ব্যবহার করতে পারেন। উদাহরণের মতো একটি স্ট্রিংয়ে কেবল ইনপুটকে আবদ্ধ করুন।
অ্যাডমবর্কবার্ক

উত্তর:


6

পাইকে, 1 6 বাইট

1cn;1c

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

1c     - chunk(size=1, input)
  n;1  - noop. 
     c - count(^)

এই কোডের অর্ধেকটি কেবল কোনও অপস ...

00110001 - 1
01100011 - c
01101110 - n
00111011 - ;
00110001 - 1
01100011 - c

@ এরিকথ আউটগল্ফারের একটি বৈধ পয়েন্ট রয়েছে। আমি পাই না যে এই ইনপুট ফর্ম্যাটটি বৈধ আছে, যদি না এটি পাইকেতে আসলে একটি নিয়মিত স্ট্রিং না থাকে। এটি ম্যাটল্যাব / অক্টাভেতে একটি বৈধ ইনপুট স্ট্রিং 'abc'==['a','b','c']হবে, সুতরাং এটি পাইকেতেও হতে পারে ...?
স্টিভি গ্রিফিন

@ স্টেভিগ্রিফিন এইভাবে পিকে সাধারণত স্ট্রিং পরিচালনা করে না। যদি তা ঠিক না থাকে তবে আমি ইনপুট ফর্ম্যাটটি স্যুইচিংয়ের বিষয়ে দেখতে পাচ্ছি তবে একটি অক্ষর তালিকাটি ডিফল্ট হিসাবে স্বীকৃত তালিকার অধীনে রয়েছে যদিও এটি এর অধীনে প্রতারণা হিসাবে গণ্য হতে পারে
ব্লু

5
অন্তর্নির্মিত 1-বাইট দিয়ে আপনার চ্যালেঞ্জটি ভঙ্গ করার জন্য দুঃখিত আমি মনে করি না যে আপনি আসলেই দুঃখিত, এবং চ্যালেঞ্জটি এর দ্বারা ভেঙে যায়নি :-)
লুইস মেন্ডো

2
এটি কোনও চরিত্রের তালিকা নয়; এটি স্ট্রিংয়ের একটি তালিকা। অক্ষরের তালিকাগুলি + 17 / -0 এ থাকলে , স্ট্রিং তালিকাগুলি + 2 / -2 এ থাকে , সুতরাং এটি সম্ভবত কোনও স্বীকৃত ডিফল্ট। @ স্টিভিগ্রিফিনের উচিত এটি বৈধ কিনা না তা সিদ্ধান্ত নেওয়া উচিত।
ডেনিস

1
পছন্দ করেছেন
নীল

6

পাইথ, 12 8 7 বাইট

-1 বাইট @ লভজোকে ধন্যবাদ

m+d/Qd{
      { # remove all duplicated elements from the (implicit) input
m       # map each element (d) of the parameter (the set from previous operation)
   /Qd  # count the occurrences of d in Q
 +d     # concatenate with d

বাইনারি প্রতিনিধিত্ব

0110110 1 মি
001010 1 1 +
01100 1 00 ডি
0010 1 111 /
010 1 0001 কিউ
01 1 00100 ডি
0 1 111011 {

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


নিস! :) আউটপুট 13জন্য 111অদ্ভুত দেখায়, কিন্তু এটা ভুল বুঝে ভাবেন করা যাবে না (কোন একক অক্ষর হতে পারে না 13যে 1 বার ব্যবহৃত), তাই এই পুরোপুরি বৈধ!
স্টিভি গ্রিফিন

4

বেফুঞ্জ -93, 150 বাইট

={<{p+}3/}*77\%*7{7:\+{}{1g}+3/*77\%*7{7:}=:_{}{}={}{}{v#{}{}`x1:~
}-}=*}{2*}97}:<$}={$_v#}!:-*84g+3/*77\%*7{7:}=:}:}+}1{}<_{@#
}{}{}={}{}{}={^.},\={<

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

আমি এটি নিয়মিত বেফুঞ্জ প্রোগ্রাম হিসাবে লিখে শুরু করেছিলাম, যা আমি যথাসম্ভব গল্ফ করেছিলাম। আমি তখন প্রোগ্রামের বিভিন্ন চরিত্রগুলি কেবল অনুমোদিত অবস্থানে উপস্থিত হয়েছিল তা নিশ্চিত করার জন্য প্যাডিং যুক্ত করেছি। এই প্যাডিংটি বেফুঞ্জ -৩৩ এ অসমর্থিত কমান্ডগুলিকে উপেক্ষা করা হয়, এই বিষয়টির উপর নির্ভর করে, সুতরাং আমার কেবল অব্যবহৃত অক্ষরগুলির ক্রম দরকার ছিল যার বিটগুলি প্রয়োজনীয় অবস্থানগুলির সাথে সামঞ্জস্য করা হয়েছিল (আমি যে ক্রমটি ব্যবহার করেছি তা ছিল ={}{}{})।

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

প্রোগ্রামটির আকারের কারণে আমি সম্পূর্ণ চরিত্র বিশ্লেষণের তালিকা তৈরি করতে যাচ্ছি না, তবে এটি শুরু এবং শেষের একটি নমুনা:

= 00111101 0
{ 01111011 1
< 00111100 2
{ 01111011 3
p 01110000 4
+ 00101011 5
} 01111101 6
3 00110011 0
/ 00101111 1
...
{ 01111011 1
^ 01011110 2
. 00101110 3
} 01111101 4
, 00101100 5
\ 01011100 6
= 00111101 0
{ 01111011 1
< 00111100 2

লাইন বিরতিগুলিকে একটি নিউলাইন চরিত্র হিসাবে বিবেচনা করা হয়, সুতরাং হয় হয় 1 বা 3 অবস্থানে থাকবে।


3

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

u"G91x@=zD91x@uRD

গণনাটি, তারপরে সংশ্লিষ্ট চরিত্রটি প্রদর্শন করে সমস্ত নিউলাইন-পৃথক। সবচেয়ে বড় অসুবিধা হ'ল @যা 0b01000000; আমি আশা করি এটি না করে আমি কোনও উপায় খুঁজে পেতে পারি।

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

ব্যাখ্যা:

u"  % Implicit input. Take (u)nique characters and loop (") over them.
G   % Take the input a(G)ain
91x % Filler: push 91, delete immediately.
@   % Push current character of loop
=   % Check for equality with earlier G
z   % Count number of equal characters
D   % Display
91x % More filler!
@   % Get loop character again
uR  % Filler: two NOPs for the single-character @
D   % Display. Implicitly end loop.

এমএটিএল, 15 বাইট (সন্দেহজনক আউটপুট)

যদি কেবল স্ট্যাকের উপর দুটি সারি ভেক্টর রেখে দেওয়ার অনুমতি দেওয়া হয় ( এই মেটা পোস্ট অনুসারে ফাংশনের মতো আচরণ ), আমরা নীচে নামতে পারি

u"G91x@=zv]v!Gu

তবে এখানে, আউটপুটটি বেশ পরিচ্ছন্নভাবে অর্ডার করা হয়নি।


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

@ লুইস মেন্ডো আমি নিশ্চিত নই আপনার যদি 90 টি আলাদা ইনপুট অক্ষর থাকে তবে কোন কীটি কোন চরিত্রের অন্তর্গত তা বলা মুশকিল, সুতরাং আমি মনে করি যে অবশ্যই সেটিকে অবশ্যই না বলতে হবে। - Stewie গ্রিফিন 2 ঘন্টা আগে প্রস্তাবিত সংকর জবাবে (গন্য স্বতন্ত্রভাবে ছিল D'ডি, Guপ্রোগ্রাম শেষে), এবং আমি নিশ্চিত 15-বাইট সংস্করণ পর্যাপ্ত ভিন্ন হয় নই।
সংঘবদ্ধ

@ স্টেভি গ্রিফিন আপনি কি দেখতে পাচ্ছেন 15 বাইট সংস্করণ ( এটি অনলাইনে চেষ্টা করে দেখুন! ) ঠিক আছে কি না?
Sanchises

নিশ্চিত নয় যে স্টিভি এই পোস্টে পিং পাবেন, চ্যালেঞ্জ পোস্টটি আরও ভালভাবে ব্যবহার করুন
লুইস মেন্ডো

আপনার সম্পর্কে জানেন না, তবে আমি মনে করি না যে এটি এখানে সহজেই বোঝা গেছে :) আমি 17 বাইট সমাধানটি পছন্দ করি তবে উত্তরটিতে 15 বাইটটিও নির্বিঘ্নে বজায় রাখতে পারি! উপায় দ্বারা দুর্দান্ত উত্তর :)
স্টিভি গ্রিফিন

1

সিজেম, 14 বাইট

q__|_ @sfe=]zp

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

ASCII কোডগুলি প্রয়োজনীয় প্যাটার্নে ফিট করার জন্য ফিলার অক্ষর beforeোকানোর পূর্বে @এবং তার sপরে স্থানটি: স্থানটি কিছুই করে না এবংs কেবল একটি স্ট্রিংকে একটি স্ট্রিংয়ে রূপান্তর করে। তা ছাড়া, এটি চ্যালেঞ্জ কার্যটির একটি খুব সাধারণ এবং সোজাসাপ্টা বাস্তবায়ন:

q_ "ইনপুটটি পড়ুন এবং এর একটি অনুলিপি তৈরি করুন";
  : _ | "অনুলিপি পুনরুক্ত অক্ষর";
    _ "ধসে পড়া স্ট্রিংয়ের একটি অনুলিপি সংরক্ষণ করুন";
      @ "স্ট্যাকের শীর্ষে মূল ইনপুট স্ট্রিংটি টানুন";
       s "(এখানে কিছুই করে না");
        ফে = "ধসে পড়া স্ট্রিংয়ের প্রতিটি চরিত্রের জন্য, গণনা করুন ...";
                 "... আসল স্ট্রিংয়ে এটি সংখ্যার বার";
           ] z "ধসে পড়া স্ট্রিংয়ের সংরক্ষিত অনুলিপি সহ গণনাগুলি জুড়ুন";
             p "ফলাফলের স্ট্রিং উপস্থাপনা মুদ্রণ করুন";

ইনপুট জন্য foobar123, এই কোড আউটপুট [['f 1] ['o 2] ['b 1] ['a 1] ['r 1] ['1 2] ['2 2] ['3 1]]। যদি কেবল একটি লাইনে গণনা এবং অন্যটিতে সংশ্লিষ্ট অক্ষরগুলি মুদ্রণ করা থাকে তবে:

[1 2 1 1 1 2 2 1]
fobar123

একটি গ্রহণযোগ্য আউটপুট ফর্ম্যাট হিসাবে বিবেচিত হয়, তারপরে ]zমোট 12 বাইটের জন্য দুটি বাইট সংরক্ষণ করতে বাদ দেওয়া যেতে পারে । হ্যাঁ, সংক্ষিপ্ত কোডটি এখনও বিট প্যাটার্নের প্রয়োজনীয়তাটি পাস করবে।

পুনশ্চ. আমি এই চ্যালেঞ্জের জন্য একটি সাধারণ উত্স কোড পরীক্ষকও লিখেছি । ইনপুট হিসাবে কোডের একটি লাইন দেওয়া, এটি প্রথমে সেই লাইনটি প্রতিধ্বনিত করবে এবং তারপরে প্রতিটি অক্ষর ( n % 7) -th ASCII বিট দ্বারা প্রতিস্থাপিত করে একই লাইনটি মুদ্রণ করবে । যদি দ্বিতীয় লাইনটি সব থাকে তবে ইনপুটটি বৈধ।


1

জেলি , জেলির কোডপেজে 6 বাইট

ṢZṢṀŒr

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

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

বাইনারি প্রতিনিধিত্ব এবং ব্যাখ্যা:

  76543210 

Ṣ 1011011 1 ইনপুটটির    অক্ষর বাছাই করুন
জেড 010110 1 0 তালিকাটি স্থানান্তর করুন (এটি 1 ডি, সুতরাং এটি কার্যকরভাবে এটিকে একটি তালিকায় মুড়িয়ে দেয়)
10 10110 1 11 তালিকাটি বাছাই করুন (কোনও বিকল্প নেই, কারণ এটিতে কেবল একটি উপাদান রয়েছে)
00 1100 1 000 বৃহত্তম (অর্থাত্‍ কেবলমাত্র) উপাদানটি নিন
Œ 000 1 0011 দ্বি-বাইট কমান্ডের প্রথম বাইট
r 01 1 10010 রান-লেংথ এনকোড

এটি দেখা যায় যে দ্বিতীয়, তৃতীয় এবং চতুর্থ অক্ষর একে অপরকে বাতিল করে দেয় এবং আমাদের প্রয়োজনীয় বিট প্যাটার্নটি বজায় রাখতে কেবল সেখানে থাকে। Œrযদিও এটি খুব সুবিধাজনক, এবং প্রোগ্রামটি প্যাডিং করা যাতে আমরা এটি ব্যবহার করতে পারি তা বিল্টিনটি না করে সমস্যা সমাধানের চেষ্টা করার চেয়ে সম্ভবত আমাদের একটি ছোট প্রোগ্রাম দেয়।

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