घातक त्रुटि चुनौती


20

उद्देश्य

एक ऐसी दिनचर्या लिखें, जो मुद्रण योग्य ASCII वर्णों की एक स्ट्रिंग को स्वीकार करता है, s , और एक स्ट्रिंग देता है जिसमें s , समान अक्षर होते हैं , ताकि कोई भी दो-वर्ण प्रतिस्थापन एक से अधिक बार न दिखाई दे। कार्यक्रम को एक आधुनिक कंप्यूटर पर प्रत्येक बेंचमार्क स्ट्रिंग्स (नीचे देखें) को एक मिनट के भीतर संसाधित करना होगा । मैं सबसे कम स्कोरिंग उत्तर के लिए 50 प्रतिनिधि के विशेष बोनस को भी पुरस्कार दूंगा जो किसी भी वैध 30-वर्ण स्ट्रिंग को एक मिनट के भीतर संसाधित करता है ।

उदाहरण के लिए, इनपुट को देखते हुए Mississippi, एक वैध आउटपुट होगा issiMspiips(कोई दो-चरित्र सब्सट्रिंग दो बार दिखाई नहीं देगा), जबकि एक अवैध आउटपुट होगा ipMsispiiss(चूंकि प्रतिस्थापन isदो बार दिखाई देता है)।

दिनचर्या का रूप ले सकते हैं:

  • stdin(या समतुल्य) या कमांड लाइन, और आउटपुट stdout(या समतुल्य) से पढ़ने का पूरा कार्यक्रम
  • एक फ़ंक्शन एक एकल स्ट्रिंग तर्क को स्वीकार करता है और एक स्ट्रिंग लौटाता है

आप मान सकते हैं कि इनपुट स्ट्रिंग हमेशा कम से कम एक वैध आउटपुट को स्वीकार करती है।

चुनौती

आपकी दिनचर्या में कोड की 5 या अधिक पंक्तियाँ शामिल होनी चाहिए जो नई सूचियों से अलग हो। खाली लाइनें (जिसमें केवल व्हॉट्सएप वाली लाइनें शामिल हैं) को सभी संदर्भों में नजरअंदाज कर दिया जाता है और कुल पंक्ति गणना की ओर गिनती नहीं की जाती है।

अपने स्रोत कोड में किसी भी दो लाइनों को स्वैप करने से एक घातक त्रुटि उत्पन्न होनी चाहिए । "घातक त्रुटि" द्वारा, हम निम्न में से किसी भी स्थिति का उल्लेख करते हैं:

  • स्रोत कोड संकलक / दुभाषिया के साथ एक घातक त्रुटि की घोषणा करने में विफल रहता है
  • नियमित रनटाइम घातक त्रुटि या एक अनहेल्ड रनटाइम अपवाद के साथ गर्भपात होता है
  • दिनचर्या को एक अचानक, असामान्य कार्यक्रम समाप्ति में मजबूर किया जाता है जो संभावित त्रुटि संदेश और / या स्टैक डंप को छोड़कर किसी भी प्रकार का कोई उत्पादन नहीं करता है

वैकल्पिक रूप से , कोड के सन्निहित ब्लॉक जिनमें कोई नई रेखा वर्ण नहीं है, का उपयोग लाइनों के स्थान पर किया जा सकता है। इन ब्लॉकों को प्रत्येक को स्रोत फ़ाइल में अपनी लाइन पर प्रदर्शित किया जाना चाहिए, इस समझ के साथ कि स्रोत कोड संकलित / व्याख्या किए जाने से पहले नए सिरे से छीन लिए जाते हैं।

उदाहरण के लिए, कोड

aaaa
bbbb
cccc

के लिए घनीभूत होगा

aaaabbbbcccc

मूल्यांकन किए जाने से पहले।

इस मोड में, किसी भी दो कोड ब्लॉक को स्वैप करने के लिए घातक त्रुटि की स्थिति लागू होती है (और इस तरह से नए कोड के बाहर निकलने से पहले स्रोत कोड में लाइनों को स्वैप करने के लिए)। इसलिए उपर्युक्त उदाहरण में रूटीन aaaaccccbbbb, bbbbaaaaccccऔर ccccbbbbaaaaरनटाइम या रनटाइम में सभी को घातक त्रुटियों का उत्पादन करना चाहिए।

इस वैकल्पिक मोड का उपयोग करने वाले सबमिशन को इसके उपयोग की घोषणा करनी चाहिए।

स्कोरिंग

चलो n हो अपने स्रोत फ़ाइल में गैर खाली textlines की संख्या, के साथ n ≥ 5. Let c द्वारा शामिल बाइट की संख्या हो सबसे लंबे समय तक textline अपने स्रोत फ़ाइल में (बाइट लंबाई से), किसी भी अनुगामी न्यू लाइन गिनती नहीं।

सबमिशन का स्कोर c ( n + 10) द्वारा दिया जाता है ।

सबसे कम स्कोर के साथ प्रस्तुत करने वाला विजेता है।

शुभकामनाएँ। ;)

बेंचमार्क स्ट्रिंग्स

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

क्या कैपिटल लेटर्स लोअरकेस लेटर्स से अलग होते हैं? यानी इनपुट है CooliO, आउटपुट oOoCli?
FryAmTheEggman

@FryAmTheEggman: हाँ। कैपिटल अक्षर लोअरकेस अक्षरों से भिन्न होते हैं। सामान्य तौर पर, वर्णों के केवल ASCII कोड मानों पर विचार करें।
सीओटीओ

क्या पुनरावृत्तियां इनपुट में दिखाई देने वाले पत्र जोड़े तक सीमित हैं? उदा Mspiisiipss। एकमात्र पुनरावृत्ति के बाद से वैध है iiजो इसमें नहीं होता है Mississippi?
ट्विनाइट नाइट

@TwiNight: यहां तक ​​कि मूल स्ट्रिंग में दिखाई देने वाले बार-बार होने वाले सबस्ट्रिंग की भी अनुमति नहीं है।
सीओटीओ

क्या मैं इनपुट लंबाई के बारे में कुछ भी मान सकता हूं? (पृष्ठभूमि: एक बीएफ समाधान के लिए एक शानदार विचार प्राप्त हुआ)
पुरकाकूदरी

जवाबों:


6

PHP, स्कोर = 289 (17 × (7 + 10))

PHP के अंतर्निहित कार्य इसे बुरी तरह से करने में काफी आसान बनाते हैं। निम्नलिखित कोड केवल स्ट्रिंग को फेरबदल करता है जब तक कि एक वैध परिणाम प्राप्त नहीं होता है:

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

मानक

निम्नलिखित कोड का उपयोग करके औसत और अधिकतम निष्पादन समय की गणना:

$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 सेकंड
  • बाकाडाएफ़बाकबड्बेफबैडस्केसेड : औसत: 5.0858626 सेकंड; अधिकतम: 9.8927171 सेकेंड

* मैं बहु-बाइट के मुद्दों से बचने के äलिए बदल गया aavoid
यह सबसे कठिन 30-वर्ण स्ट्रिंग था जिसके साथ मैं आ सकता था। यह वास्तव में के पहले 30 अक्षर है डी Bruijn अनुक्रम के लिए कश्मीर = 'abcdef' और एन = 2, पहले 'बी' के एक पल मैच से बचने के लिए ले जाया गया है।


5
यह वास्तव में संतुष्ट नहीं करता है > कार्यक्रम को आधुनिक कंप्यूटर पर एक मिनट के अंदर किसी भी वैध 30-वर्ण स्ट्रिंग को संसाधित करना होगा। , संभावित अनंत रनटाइम को देखते हुए।
बॉब

@ याकूब ने जवाब में कुछ बेंचमार्क जोड़े हैं। कोड अक्षम हो सकता है, लेकिन 30-वर्ण स्ट्रिंग को संसाधित करने में एक मिनट से अधिक समय लगने की संभावना है, मुझे लगता है, वास्तव में बहुत छोटा है।
१२:०२ पर स्क्विश ओस्सिफ्रेज

5

दिल्लोग एपीएल (11 (5 + 10) = 165)

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

प्रमाण:

  • लाइन्स 1 और 5 फ़ंक्शन को बाध्य करते हैं। उन के लिए किसी भी लाइन को स्वैप करने के परिणामस्वरूप एक फ़ंक्शन के बाहर हो सकता है, जो कि ए SYNTAX ERROR
  • लाइन 2 परिभाषित करता है b, इसलिए इसे लाइनों के लिए स्वैप नहीं किया जा सकता है 3या 4, जो निर्भर करता है b। वहाँ एक होगा VALUE ERROR। (और यह स्पष्ट रूप से साथ बदली नहीं किया जा सकता 1या 5तो।)
  • लाइन 3 परिभाषित करता है c, इसलिए इसे लाइन के लिए स्वैप नहीं किया जा सकता है 4, जो निर्भर करता है c। (और हम पहले से ही साबित कर चुके हैं कि कोई अन्य लाइन लाइन से बदली नहीं जा सकती 3।)
  • लाइन 4 लाइनों 2 और 3 से चर पर निर्भर करता है और इसलिए अंतिम होना चाहिए।

3
+1। लेकिन इसका क्या मतलब है ??
स्क्विश ओस्सिफ्रेज

4

APL (Dyalog), 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या एक तत्व तत्व 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

हास्केल एक बहुत ही सख्त भाषा है। उदाहरण के लिए, 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.