এমন একটি প্রোগ্রাম লিখুন যা তার উত্স এবং এর আউটপুটে মোট অক্ষরের সংখ্যা এবং প্রতিটি অক্ষরের ফ্রিকোয়েন্সি আউটপুট করে। আপনাকে অবশ্যই উদাহরণে বর্ণিত ফর্ম্যাটটি অনুসরণ করতে হবে।
উদাহরণ
যদি আপনার কোড ছিল
abb1
এর আউটপুট হতে হবে
My source has 4 characters.
1 is "a"
2 are "b"
1 is "1"
Besides unquoted numbers, my output has 383 characters.
34 are "
"
79 are " "
63 are """
2 are "'"
2 are ","
4 are "."
2 are "1"
2 are "B"
2 are "I"
2 are "M"
39 are "a"
4 are "b"
6 are "c"
4 are "d"
38 are "e"
3 are "g"
5 are "h"
4 are "i"
4 are "m"
3 are "n"
8 are "o"
3 are "p"
2 are "q"
38 are "r"
12 are "s"
8 are "t"
7 are "u"
3 are "y"
It's good to be a program.
(আউটপুট অবশ্যই stdout যেতে হবে।)
লক্ষ করুন, উদাহরণস্বরূপ, আউটপুটে দুটি মূলধনযুক্ত মি আছে। My
একটির জন্য এবং একটির জন্য 2 are "M"
। এটি অবশ্যই সমস্ত অক্ষরের জন্য সত্য ধরে রাখতে হবে যাতে আউটপুট কোনওভাবেই নিজের সাথে বিপরীত হয় না।
অসম্পূর্ণযোগ্য ফ্রিকোয়েন্সি সেটগুলি এড়ানোর জন্য আউটপুটে অব্যক্ত নম্বরগুলি উপেক্ষা করা হয়। উদাহরণস্বরূপ, 1 is "1"
উভয় 1 টি গণনা করা হলে ভুল is এটি পড়া উচিত 2 are "1"
, কিন্তু তারপরে আবার কেবল 1 জন রয়েছে।
ফর্ম্যাট স্পষ্টকরণ
"এক" অক্ষর সংঘটনগুলির জন্য অবশ্যই ব্যবহার করা উচিত।
"are" অবশ্যই একাধিক অক্ষরের উপস্থিতির জন্য ব্যবহার করা উচিত।
"is" কখনই আউটপুট অক্ষরের তালিকায় উপস্থিত হওয়া উচিত নয় কারণ এটি অত্যধিক হবে।
1 is 'Z'
জেডকে নিজেই বোঝায় তাই পুরো লাইনটি মুছে ফেলা যায়।তিনটি পূর্ণ-বাক্য বাক্যাংশ অবশ্যই অক্ষরের ফ্রিকোয়েন্সি তালিকার সাথে অবশ্যই উপস্থিত হবে (উদাহরণ হিসাবে দেখায়)। সুতরাং আপনার আউটপুট শুরু
My source...
এবং দিয়ে শেষ হবে...be a program.
। দ্রষ্টব্য যে আউটপুট শেষে কোনও নতুন লাইন নেই।চরিত্রের ফ্রিকোয়েন্সিগুলি তাদের কোনও ক্রমে তালিকাবদ্ধ করে।
নিউলাইনগুলি একটি অক্ষর হিসাবে গণনা করে (যদি তারা \ r \ n হয়)।
ফর্ম্যাট পরীক্ষক
নিম্নলিখিত পাইথন স্ক্রিপ্টটি আপনার কোড এবং এর আউটপুটটিকে স্ট্রিং হিসাবে গ্রহণ করে এবং জোর দেয় যে আউটপুটটির কোনও বিরোধ নেই। কিছু ভুল হলে এটি একটি দরকারী ত্রুটি বার্তা সরবরাহ করে। আপনি অনলাইনে http://ideone.com/6H0ldu এ এটি চালিয়ে , সিডিএডি এবং আউটপুট স্ট্রিংগুলি প্রতিস্থাপন করে, তারপরে চালাতে পারবেন। এটি কখনই মিথ্যা ইতিবাচক বা নেতিবাচকতা দেবে না (এটির ত্রুটি মুক্ত বলে ধরে))
#Change the CODE and OUTPUT strings to test your program
CODE = r'''abb1'''
OUTPUT = r'''My source has 4 characters.
1 is "a"
2 are "b"
1 is "1"
Besides unquoted numbers, my output has 383 characters.
34 are "
"
79 are " "
63 are """
2 are "'"
2 are ","
4 are "."
2 are "1"
2 are "B"
2 are "I"
2 are "M"
39 are "a"
4 are "b"
6 are "c"
4 are "d"
38 are "e"
3 are "g"
5 are "h"
4 are "i"
4 are "m"
3 are "n"
8 are "o"
3 are "p"
2 are "q"
38 are "r"
12 are "s"
8 are "t"
7 are "u"
3 are "y"
It's good to be a program.'''
#######################################################
import re
amountPattern = r'(\d+) (is|are) "(.)"\n'
class IntrospectionException(Exception):
pass
def getClaimedAmounts(string, errorOnIs):
groups = re.findall(amountPattern, string, re.DOTALL)
for amount, verb, char in groups:
if verb == 'is':
if errorOnIs:
raise IntrospectionException('\'1 is "%s"\' is unnecessary' % char)
elif amount != '1':
raise IntrospectionException('At "%s", %s must use "are"' % (char, amount))
elif verb == 'are' and amount == '1':
raise IntrospectionException('At "%s", 1 must use "is"' % char)
amounts = {}
for amount, verb, char in groups:
if char in amounts:
raise IntrospectionException('Duplicate "%s" found' % char)
amounts[char] = int(amount)
return amounts
def getActualAmounts(string):
amounts = {}
for char in string:
if char in amounts:
amounts[char] += 1
else:
amounts[char] = 1
return amounts
def compareAmounts(claimed, actual):
for char in actual:
if char not in claimed:
raise IntrospectionException('The amounts list is missing "%s"' % char)
for char in actual: #loop separately so missing character errors are all found first
if claimed[char] != actual[char]:
raise IntrospectionException('The amount of "%s" characters is %d, not %d' % (char, actual[char], claimed[char]))
if claimed != actual:
raise IntrospectionException('The amounts are somehow incorrect')
def isCorrect(code, output):
p1 = r'^My source has (\d+) characters\.\n'
p2 = r'Besides unquoted numbers, my output has (\d+) characters\.\n'
p3 = r"It's good to be a program\.$"
p4 = '%s(%s)*%s(%s)*%s' % (p1, amountPattern, p2, amountPattern, p3)
for p in [p1, p2, p3, p4]:
if re.search(p, output, re.DOTALL) == None:
raise IntrospectionException('Did not match the regex "%s"' % p)
claimedCodeSize = int(re.search(p1, output).groups()[0])
actualCodeSize = len(code)
if claimedCodeSize != actualCodeSize:
raise IntrospectionException('The code length is %d, not %d' % (actualCodeSize, claimedCodeSize))
filteredOutput = re.sub(r'([^"])\d+([^"])', r'\1\2', output)
claimedOutputSize = int(re.search(p2, output).groups()[0])
actualOutputSize = len(filteredOutput)
if claimedOutputSize != actualOutputSize:
raise IntrospectionException('The output length (excluding unquoted numbers) is %d, not %d' % (actualOutputSize, claimedOutputSize))
splitIndex = re.search(p2, output).start()
claimedCodeAmounts = getClaimedAmounts(output[:splitIndex], False)
actualCodeAmounts = getActualAmounts(code)
compareAmounts(claimedCodeAmounts, actualCodeAmounts)
claimedOutputAmounts = getClaimedAmounts(output[splitIndex:], True)
actualOutputAmounts = getActualAmounts(filteredOutput)
compareAmounts(claimedOutputAmounts, actualOutputAmounts)
def checkCorrectness():
try:
isCorrect(CODE, OUTPUT)
print 'Everything is correct!'
except IntrospectionException as e:
print 'Failed: %s.' % e
checkCorrectness()
স্কোরিং
এটি কোড-গল্ফ। স্বল্পতম অক্ষরের সাথে জমাটি জিততে পারে। বৈধ হওয়ার জন্য জমাগুলি অবশ্যই ফর্ম্যাট পরীক্ষককে পাস করতে হবে pass স্ট্যান্ডার্ড লুফোলগুলি প্রয়োগ হয়, যদিও আপনি নিজের উত্স কোড এবং / অথবা আপনার আউটপুটকে হার্ডকোডটি পড়তে পারেন ।
r'''CODE'''
) ব্যবহার করুন ।