মারাত্মক ত্রুটি চ্যালেঞ্জ


20

উদ্দেশ্য

একটি রুটিন যে মুদ্রণযোগ্য ASCII অক্ষর একটি স্ট্রিং গ্রহণ লিখুন গুলি , এবং একটি স্ট্রিং হিসেবে একই অক্ষর ধারণকারী ফেরৎ গুলি , তাই পুনর্বিন্যস্তভাবে কোনো দুই-অক্ষর প্রদর্শিত হয় একাধিকবার সাবস্ট্রিং। প্রোগ্রামটি একটি আধুনিক কম্পিউটারে প্রতিটি বেঞ্চমার্কের স্ট্রিংগুলি প্রতিটি মিনিটের নীচে প্রক্রিয়া করতে হবে (নীচে দেখুন) । আমি সর্বনিম্ন স্কোরিং উত্তরে 50 টি rep এর একটি বিশেষ বোনাসও দেব যা এক মিনিটের মধ্যে কোনও বৈধ 30-অক্ষরের স্ট্রিং প্রসেস করে ।

উদাহরণস্বরূপ, ইনপুট দেওয়া হলে Mississippi, একটি বৈধ আউটপুট হবে issiMspiips(কোনও দ্বি-অক্ষরের সাবস্ট্রিংগুলি দু'বার প্রদর্শিত হবে না), যখন একটি অবৈধ আউটপুট হবে ipMsispiiss(যেহেতু স্ট্রাস্টিংটি isদুটিবার প্রদর্শিত হবে)।

রুটিন এর রূপ নিতে পারে:

  • stdin(বা সমতুল্য) বা কমান্ড লাইন থেকে সম্পূর্ণ প্রোগ্রাম পড়া , এবং stdout(বা সমমানের) এ আউটপুট প্রদান
  • একটি ফাংশন একটি একক স্ট্রিং আর্গুমেন্ট গ্রহণ করে এবং একটি স্ট্রিং ফেরত

আপনি ধরে নিতে পারেন ইনপুট স্ট্রিং সর্বদা কমপক্ষে একটি বৈধ আউটপুট স্বীকার করে।

চ্যালেঞ্জ

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

আপনার উত্স কোডে যে কোনও দুটি লাইন অদলবদল করা অবশ্যই একটি মারাত্মক ত্রুটি তৈরি করবে। "মারাত্মক ত্রুটি" দ্বারা, আমরা নিম্নলিখিত শর্তগুলির উল্লেখ করি:

  • সংস্থাপক / দোভাষী সাথে একটি মারাত্মক ত্রুটি ঘোষণা করে উত্স কোডটি সংকলন করতে ব্যর্থ
  • রুটিনটি একটি রানটাইম মারাত্মক ত্রুটি বা একটি অবিবাহিত রানটাইম ব্যতিক্রম সহ বন্ধ হয়
  • রুটিনটি একটি আকস্মিক, অস্বাভাবিক প্রোগ্রাম সমাপ্তিতে বাধ্য করা হয় যা কোনও সম্ভাব্য ত্রুটি বার্তা এবং / অথবা স্ট্যাক ডাম্প ব্যতীত কোনও প্রকারের আউটপুট তৈরি করে না

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

উদাহরণস্বরূপ, কোড

aaaa
bbbb
cccc

ঘনীভূত হবে

aaaabbbbcccc

মূল্যায়ন করার আগে।

এই মোডে, মারাত্মক ত্রুটি শর্তটি যে কোনও দুটি কোড ব্লক অদলবদল করতে প্রযোজ্য (এবং এভাবে নিউলাইনগুলি সরে যাওয়ার আগে উত্স কোডে লাইনগুলি অদলবদল করতে)। সুতরাং উপরের উদাহরণে রুটিনগুলি aaaaccccbbbb, bbbbaaaaccccএবং ccccbbbbaaaaসমস্তগুলি অবশ্যই সংকলনের সময় বা রানটাইমগুলিতে মারাত্মক ত্রুটি তৈরি করে।

এই বিকল্প মোড ব্যবহার করে জমা দেওয়ার ক্ষেত্রে এটির ব্যবহার ঘোষণা করা উচিত।

স্কোরিং

যাক এন হতে আপনার সোর্স ফাইলে খালি নয় এমন textlines সংখ্যা সঙ্গে এন ≥ 5. আসুন c দ্বারা গঠিত বাইটের সংখ্যা হতে দীর্ঘতম textline আপনার সোর্স ফাইলে (বাইট দৈর্ঘ্য দ্বারা), কোনো চিহ্ন সম্পর্কে newline গণনা না।

একটি জমা দেওয়ার স্কোর সি ( এন + 10) দ্বারা দেওয়া হয় ।

সর্বনিম্ন স্কোর সহ জমাটি বিজয়ী।

ভাগ্য সুপ্রসন্ন হোক. ;)

বেঞ্চমার্ক স্ট্রিংস

Abracadabra Alacazam
Is Miss. Mississauga Missing?
Ask Alaska's Alaskans
GGGGAAAATTTTCCCCgggaaatttccc
A Man A Plan A Canal Panama

বড় হাতের অক্ষর কি ছোট হাতের অক্ষর থেকে আলাদা? অর্থাৎ ইনপুট হয় CooliO, আউটপুট oOoCli?
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান: হ্যাঁ বড় হাতের অক্ষরগুলি থেকে বড় হাতের অক্ষর পৃথক হয়। সাধারণভাবে, কেবলমাত্র অক্ষরগুলির ASCII কোড মান বিবেচনা করুন।
কোতো

পুনরাবৃত্তিগুলি কি ইনপুটটিতে উপস্থিত অক্ষরের জোড়গুলির মধ্যে সীমাবদ্ধ থাকে? যেমন Mspiisiipssবৈধ যেহেতু একমাত্র পুনরাবৃত্তি iiযা ঘটে না Mississippi?
টুইনাইট

@ টুইনাইট: এমনকি পুনরাবৃত্ত সাবস্ট্রিংগুলিও যেগুলি মূল স্ট্রিংয়ে উপস্থিত হয় না তা অনুমোদিত নয়।
COTO

আমি কি ইনপুট দৈর্ঘ্য সম্পর্কে কিছু অনুমান করতে পারি? (পটভূমি: একটি বিএফ সমাধানের জন্য একটি উজ্জ্বল ধারণা পেয়েছে)
পূর্কাকাডারী

উত্তর:


6

পিএইচপি, স্কোর = 289 (17 × (7 + 10))

পিএইচপি-র অন্তর্নির্মিত কার্যগুলি এটিকে খারাপভাবে করা বেশ সহজ করে তোলে। নিম্নলিখিত কোডটি একটি বৈধ ফলাফল প্রাপ্ত হওয়া পর্যন্ত কেবল স্ট্রিংটিকে বদলে দেয়:

function f($s){
while(preg_match(
'/(..).*?\1/',$s)
+preg_match('/(.'
.')\1\1/',$s))$s=
str_shuffle(
$s);return $s;}

benchmarks

নিম্নলিখিত কোড ব্যবহার করে গড় এবং সর্বোচ্চ নির্বাহের সময় গণনা করা হয়:

$s = 'Mississippi';
$t_total = 0;
$t_max = 0;
for ($i=0; $i<10; $i++) {
  $t0 = microtime(true);
  echo f($s);
  $t = microtime(true) - $t0;
  printf("  %10.7f\n",$t);
  $t_total += $t;
  if ($t > $t_max) $t_max = $t;
}
printf("Avg: %10.7f secs; Max: %10.7f secs\n",$t_total/$i, $t_max);

ফলাফল:

  • মিসিসিপি: গড়: 0.0002460 সেকেন্ড; সর্বাধিক: 0.0005491 সেকেন্ড
  • অ্যান্টিস্টিস্টিউশনেলমেন্ট: গড়: 0.0001470 সেকেন্ড; সর্বাধিক: 0.0002971 সেকেন্ড
  • নিউমোনল্ট্রামিকোস্কোপিক্সিলিকোভ্যালকানোকোনিওসিস: গড়: 0.0587177 সেকেন্ড; সর্বাধিক: 0.1668079 সেকেন্ড
  • ডোনাডাম্পফস্চিফাহার্টস্লেক্ট্রিজিটাটেনহুপ্টবিটিরিসবার্কবাউন্টার্টারবিটেনজেসেলস্যাফ্যাট * : গড়: 9.5642390 সেকেন্ড; সর্বাধিক: 34.9904099 সেকেন্ড
  • baaacadaeafbbcbdbebfccdcecfdde : গড়: 5.0858626 সেকেন্ড; সর্বাধিক: 9.8927171 সেকেন্ড

* আমি পরিবর্তিত äকরার aবহু-বাইট সমস্যা এড়ানোর জন্য
† এই কঠিন 30-অক্ষর স্ট্রিং আমি সঙ্গে আসা পর্যন্ত পারে। এটি আসলে কে = 'অ্যাবসিডিফ' এবং এন = 2 এর জন্য ডি ব্রুইজন ক্রমের প্রথম 30 টি অক্ষর, তাত্ক্ষণিক ম্যাচ এড়াতে প্রথম 'বি' স্থানান্তরিত করে।


5
এটি সত্যই সন্তুষ্ট হয় না > প্রোগ্রামটিকে একটি আধুনিক কম্পিউটারে এক মিনিটের মধ্যে কোনও বৈধ 30-অক্ষরের স্ট্রিংটি প্রক্রিয়া করতে হবে। , সম্ভাব্য অসীম রানটাইম বিবেচনা করে।
বব

@ Bob আমি উত্তরে কিছু মানদণ্ড যুক্ত করেছি। কোডটি অক্ষম হতে পারে, তবে 30-চরিত্রের স্ট্রিংটি প্রক্রিয়া করতে এক মিনিটেরও বেশি সময় লাগার সম্ভাবনাটি আমি মনে করি, এটি আসলে খুব ছোট।
squeamish ossifrage

5

ডায়ালগ এপিএল (11 (5 + 10) = 165)

f←{a←{⍴⍵}
b←a⌸2,/⍵
c←b⊢⍵[?⍨a⍵]
1∨.≠b:∇c⋄⍵
}

প্রমাণ:

  • 1 এবং 5 রেখাগুলি কার্যটি সীমাবদ্ধ করে। এগুলির জন্য যে কোনও লাইন অদলবদল করার ফলে কোনও ফাংশনের বাইরের ঘটনা ঘটবে যা a SYNTAX ERROR
  • লাইন 2 সংজ্ঞায়িত করে b, সুতরাং এটি লাইনগুলির জন্য অদলবদল করা যায় না 3বা 4যা নির্ভর করে b। একটি হবে VALUE ERROR। (এবং এটি স্পষ্টতই 1বা 5অন্যথায় পরিবর্তন করা যায় না ))
  • লাইন 3 সংজ্ঞায়িত করে c, তাই এটি লাইনের জন্য অদলবদল করা যায় না 4, যা নির্ভর করে c। (এবং আমরা ইতিমধ্যে প্রমাণ করেছি যে অন্য কোনও লাইন লাইন দিয়ে অদলবদল করা যাবে না 3))
  • লাইন 4 লাইন 2 এবং 3 লাইনগুলি থেকে চলকগুলির উপর নির্ভর করে এবং অতএব অবশ্যই শেষ হতে হবে।

3
+1 টি। তবে সব কি মানে ??
squeamish ossifrage

4

এপিএল (ডায়ালগ), 6 (5 + 10) = 90

{1∧.=
+/∘.≡⍨
2,/⍵:⍵
⋄∇⍵[
?⍨⍴⍵]}

আমি বিকল্পটি ব্যবহার করছি, তাই:

{1∧.=+/∘.≡⍨2,/⍵:⍵⋄∇⍵[?⍨⍴⍵]}

এটি একই পুরানো অ্যালগরিদম।


ব্যাখ্যা
2,/⍵ ইনপুট স্ট্রিং-এ অক্ষর জোড়াগুলির একটি অ্যারে দেয়
+/∘.≡⍨যে প্রতিটি জোড় সমান কতগুলি জোড় (নিজেই সহ)
1∧.=পরীক্ষা করে যে অ্যারের প্রতিটি উপাদান 1 সমান হয় এবং লজিকাল এবং ফলাফলগুলি একসাথে হয় কিনা তা পরীক্ষা করে

:⍵যদি এটি সত্য হয় ( 1), ইনপুট স্ট্রিংটি ফিরিয়ে দিন

∇⍵[?⍨⍴⍵] অন্যথায় ইনপুট স্ট্রিং স্ক্যাম্বল করুন এবং একটি পুনরাবৃত্ত কল করুন


সোয়াপিং

যদি লাইন 1 লাইন 2 দিয়ে অদলবদল করা থাকে, তবে আপনি শেষ করেন +/∘.≡⍨{...}যা দিয়ে দেয় কেবল ফাংশন এবং অপারেটরগুলির একটি জগাখিচুড়ি SYNTAX ERROR
লাইন 1 যদি 3 বা 4 লাইন দিয়ে অদলবদল করে থাকে তবে আপনার কোনও ফাংশন সংজ্ঞার বাইরে রয়েছে এবং এটি একটি SYNTAX ERROR
যদি লাইন 1 লাইন 5 এর সাথে অদলবদল করা হয় তবে একা ভারসাম্যহীন ধনুর্বন্ধনী তৈরি হতে পারে SYNTAX ERROR, তাই অন্য 4 টি সিনট্যাক্স ত্রুটি সম্পর্কে চিন্তা করবেন না।

লাইন 5 লাইন 2/3/4 লাইন দিয়ে অদলবদল করা হয়, আবার আপনার একটি ফাংশন সংজ্ঞা বাইরে আছে । ( SYNTAX ERROR)

যদি লাইন 2 লাইন 3 দিয়ে অদলবদল করা হয়, আপনি শেষ করবেন 1∧.=2,/⍵:⍵। এই বাক্য গঠনটিকে গার্ড বলা হয় (এটিকে শর্তসাপেক্ষ হিসাবে ভাবেন)। পাহারা অবস্থা নির্ণয় করা আবশ্যক 0অথবা 1অথবা একটি 1-উপাদানের বিন্যাস 0বা 1। এখানে, এটি এর চেয়ে আরও জটিল কিছুতে মূল্যায়ণ করে (একটি স্কেলার যার মধ্যে একটি 2-উপাদান অ্যারে রয়েছে)। সুতরাং এটি একটি DOMAIN ERROR
যদি লাইন 2 লাইন 4 এর সাথে অদলবদল হয়, আপনি বিবৃতি পাবেন 1∧.=যা ∧.=প্রয়োজনীয় বাম আর্গুমেন্ট ছাড়াই ফাংশনটি প্রয়োগ করার চেষ্টা করে । ( SYNTAX ERROR)।

যদি লাইন 3 লাইন 4 এর সাথে অদলবদল করা হয়, আবার আপনি ফাংশন এবং অপারেটরগুলির গোলমাল 1∧.=+/∘.≡⍨পেতে পারেন ( যাতে আপনি পান) SYNTAX ERROR


বেঞ্চমার্ক
(মিলিসেকেন্ডে সংখ্যা)

Abracadabra Alacazam
11 1 3 5 2
Avg: 4.4

Is Miss. Mississauga Missing?
1260 2000 222 117 111
Avg: 742

Ask Alaska's Alaskans
7 2 3 3 4
Avg: 3.8

GGGGAAAATTTTCCCCgggaaatttccc
31 15 24 13 11
Avg: 18.8

A Man A Plan A Canal Panama
377 2562 23 301 49
Avg: 662.4

আমি এখনও বিভিন্ন বিভাজন সম্পর্কে চিন্তা করছি। এছাড়াও আমার কাছে কাজটি করার একটি নিয়মতান্ত্রিক, পদ্ধতিগত পদ্ধতি রয়েছে। আমি কেবল এটিকে একটি অ্যালগরিদম হিসাবে তৈরি করতে পারি না ("সংখ্যাগুলি ঠিক করার জন্য" সৃজনশীল অংশটি সরিয়ে ফেলুন) এবং এটি প্রতিবার কার্যকর হয়েছে তা নিশ্চিত করতে পারছি না।


0

হাস্কেল, 129 = 3x (33 + 10)

এটি বিকল্প মোড ব্যবহার করে।

imp
ort
 Da
ta.
Lis
t;a
%[]
=[[
]];
a%s
=[x
:j|
x<-
s,n
ot$
isI
nfi
xOf
[la
st 
a,x
]a,
j<-
(a+
+[x
])%
(s\
\[x
])]
;g 
s=[
]%s
!!0

বা পাঠযোগ্য আকারে:

import Data.List
a%[]=[[]]
a%s=[x:j|x<-s,not$isInfixOf[last a,x]a,j<-(a++[x])%(s\\[x])]
g s=[]%s!!0

হাস্কেল খুব কঠোর ভাষা is উদাহরণস্বরূপ, importঅবশ্যই প্রথম আসতে হবে; সংজ্ঞা sঅবশ্যই একত্রিত হওয়া উচিত; সমস্ত ধরণের অবশ্যই একমত হতে হবে এবং তাদের মধ্যে কাস্ট করার কোনও উপায় নেই, এবং আরও অনেক কিছু। এটি প্রায় অসম্ভব একটি মারাত্মক ত্রুটিযুক্ত বাড়ে। আসলে, একটি রানটাইম মারাত্মক ত্রুটি থাকা প্রায় অসম্ভব কাছাকাছি।

মনে রাখবেন যে যদি gকোনও বৈধ ফাংশন হয় তবে এর চেয়ে একটি ভুল টাইপ (এর চেয়ে অন্য যে কোনও ধরণের আলাদা [a]->[a]বা String -> Stringএর মত) থাকে তবে এটি মারাত্মক ত্রুটি কারণ gইনপুটগুলিতে প্রয়োগ করা অসম্ভব ।

আউটপুট:

Abracadabar Alaazcma
Is Miss. iMsiasusgsa sMniig?s
Ask Alasak's lAaankss
GGAGTGCAATACTTCCggagtaacttcc
A Man AP la nAC  aalnnaPama
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.