पायम सत्यापनकर्ता कार्यक्रम


11

एक प्रोग्राम लिखें जो एक फ़ंक्शन को परिभाषित करता है जो यह जांच सकता है कि क्या स्ट्रिंग स्ट्रिंग जिसे "कुछ भी आप चाहते हैं या उपयोगकर्ता द्वारा इनपुट किया जाता है" है या नहीं। (piem = एक कहानी या कविता जिसमें शब्द की लंबाई ) ( विकिपीडिया से ) के अंकों का प्रतिनिधित्व करती है )

कुछ उदाहरण:

myfunction("I am clearly wrong") # False
myfunction("How I want a drink, alcoholic of course, after the heavy lectures involving quantum mechanics") #True (Taken from Wikipedia)
myfunction("Law ' s fine") # True

आपको प्रसंस्करण से पहले किसी भी प्रकार का विराम चिह्न या नयापन हटाना चाहिए। शुद्ध कोड गोल्फ, सबसे छोटी जीत

अंतिम तिथि: 1/10/2014 की शाम

विभिन्न उत्तर

  • हमें कितने अंकों को संभालने की आवश्यकता है? 10 से अधिक
  • ब्याज के मामले में, पीआई में 0 की व्याख्या कैसे की जानी चाहिए? छोड़ दिया या 10 अक्षर शब्द? 10 अक्षरों के शब्दों के रूप में
  • "एक चर जिसे piem कहा जाता है" - इसलिए पैरामीटर का नाम piem होना चाहिए? नहीं, यह नहीं है, प्रश्न पाठ सही है
  • एक मजेदार बोनस एक ऐसा समाधान हो सकता है जो स्वयं एक piem है। यदि आपका समाधान एक piem है तो आपको * 0.5 बोनस मिलता है
  • तर्क के लिए, _ हमेशा विराम चिह्न है? आप यह तय कर सकते हैं कि यह विराम चिह्न है या यदि यह नहीं है
  • यह स्पष्ट नहीं है कि "किसी भी तरह के विराम चिह्न" से मेरा क्या मतलब है। '' ;;; ()
  • तो अंकों को गिना जाना चाहिए? और कानून का जुर्माना झूठा होगा? अंकों को अक्षरों के रूप में माना जाना चाहिए, कानून का जुर्माना = गलत; कानून ठीक है = सच है

टिप्पणियाँ

  • एपीएल समाधान को बाइट्स में गिना जाना चाहिए
  • यदि आपका समाधान पी के 100 + अंकों के लिए काम करता है तो आपको * 0.8 बोनस मिलता है
  • महान ब्याज की वजह से अंतिम तिथि भविष्य में एक दिन अधिक है।

6
हमें कितने अंकों को संभालने की आवश्यकता है?
मारिनस

5
"एक चर जिसे piem कहा जाता है" - इसलिए पैरामीटर का नाम होना चाहिए piem? वह सभी वर्तमान उत्तरों को गलत तरीके से प्रस्तुत करता है।
इंगो बुर्क

2
एक मज़ेदार बोनस एक ऐसा समाधान हो सकता है जो स्वयं एक piem है।
ब्रिटिश

5
ब्याज के मामले में, पीआई में 0 की व्याख्या कैसे की जानी चाहिए? छोड़ दिया या 10 अक्षर शब्द?
मिकट

3
यह एक शर्म की तरह है कि आप बहुत महत्वपूर्ण सवालों का जवाब नहीं देते हैं, फिर भी आप पहले से ही एक अंतिम तिथि में संपादित करते हैं।
इंगो बुर्क

जवाबों:


3

एपीएल (39)

{N≡(≢N←≢¨('\w+'⎕S'\0')⍵)↑⍎¨'_. '~⍨99⍕○1}

यह सभी अंकों का उपयोग करता है APL दुभाषिया के पीआई निरंतर प्रदान करता है, 99 की सीमा तक। मेरे मामले में (डायलाग एपीएल 14 32-बिट) 16 अंकों का था। 64-बिट संस्करण की संभावना अधिक अंक है। यद्यपि काम करने के लिए दिए गए उदाहरणों के लिए 16 अंक पर्याप्त हैं।

उस शब्द की मात्रा से अधिक वाले स्ट्रिंग विफल हो जाएंगे , भले ही वह सभी अंकों की जांच कर सके, यह सच था। (अन्य लेखों के बारे में भी यही बात है, जैसा कि इस लेखन में है।) उदाहरण के लिए, यदि केवल 10 अंक थे, तो 'मैं कैसे पीना चाहता हूँ' विफल हो जाएगा। यह तय किया जा सकता है, लेकिन 14 पात्रों की कीमत पर:

{(≢¨('\w+'⎕S'\0')⍵){∧/(⌊/≢¨⍺⍵)↑∨⌿⍺∘.=⍵}⍎¨'_. '~⍨99⍕○1}

वह संस्करण किसी भी स्ट्रिंग को स्वीकार करेगा जहां पहले N अंक सही हैं।


आपका कोड शॉर्ट्स है, लेकिन यह यूनिकोड नहीं है ... मुझे सोचना होगा कि क्या आप जीत के लायक हैं या नहीं, जावास्क्रिप्ट संस्करण इससे थोड़ा ही लंबा है ... वैसे भी मैंने इस जवाब को गलत ठहराया है।
कारिडोरक सिप

1
@marinus यह निर्दिष्ट नहीं करता है कि क्या सबमिशन पात्रों या बाइट्स द्वारा बनाए जाने चाहिए, लेकिन डिफ़ॉल्ट बाइट्स (टैग विकी के अनुसार) है, इसलिए मुझे लगता है कि आपका स्कोर 60 के करीब है।
मार्टिन एंडर

1
सही एन्कोडिंग को देखते हुए यह प्रति वर्ण 1 बाइट है। APL दशकों के बाद यूनिकोड से पहले का है।
मारिनस

1
@marinus फेयर पॉइंट! क्या आप किसी विशेष (मौजूदा) एन्कोडिंग को जानते हैं, जो वास्तव में काम करेगा?
मार्टिन एंडर

2
@ मार्टिनबटनर: आईबीएम कोडपेज 907 एक है, लेकिन इसमें लोड हैं।
मारिनस

7

पीआई के 17 अंकों के लिए जावास्क्रिप्ट (169) (140) (137) (135) (63) (63)

मेरे संस्करण में Law's fineऔर Law ' s fineदोनों सच लौटाएँ।

नवीनतम संस्करण (63) इंगो बुर्क और एचएसएल द्वारा

f=s=>!s.split(/\W+/).some((x,i)=>x.length-(Math.PI*1e16+'')[i])

पीआई के 17 अंकों के लिए नया संस्करण (135) (इनगो बर्क के लिए धन्यवाद):

f=(s)=>{
s=s.split(/[!"#$%&'()*+, \-.\/:;<=>?@[\\\]^_`{|}~]+/);
p=Math.PI*1e16+'';
    r=0;
    for(a=s.length;a--;)r+=s[a].length!=p[a];
    return !r
}

पुराने अंक (169) 32 अंकों के लिए:

f=(s)=>{
s=s.split(/[!"#$%&'()*+, \-.\/:;<=>?@[\\\]^_`{|}~]+/);
p="31415926535897932384626433832795".split('');
    r=1;
    for(a=s.length;a--;)if(s[a].length!=p[a]){r=0};
    return r;
}

आप 3 बाइट्स को बचा सकते हैं:1e15*Math.PI+"2384626433832795"
xem

धन्यवाद =) इस बीच मैंने इसे इस विचार का उपयोग करके बदल दिया, लेकिन अब केवल पहले 17 अंकों का उपयोग कर रहा है।
दोष

@ IngoBürk बहुत बहुत धन्यवाद, बस जाँच करता है कि क्या काम करता है।
दोष

क्षमा करें, कभी मन नहीं। यह काम करने के लिए प्रतीत नहीं होता है। : / forलूप को इस तरह नहीं जोड़ा जा सकता है।
इंगो बुर्क

लेकिन जो काम करता है वह शुरुआती है r=0और फिर बस ओवर लूपिंग r+=s[a].length!=p[a](आप ;अंत में छोड़ सकते हैं )। फिर, वापस लौटें !r
इंगो बुर्क

7

रूबी, 113 101 79 (98 * 0.8)

require"bigdecimal/math"
x=->p{!(BigMath.PI(999).to_s[2..-1]!~/^#{p.scan(/\w+/).map(&:size)*''}/)}

व्याख्या

  • इनपुट को लंबोदर के तर्क के रूप में लिया जाता है। यह एक उम्मीद है String
  • पाई को 999दशमलव तक गणना की जाती है और .हटाए गए के साथ एक स्ट्रिंग में बदल दिया जाता है।
  • विराम चिह्नों को कविता से हटा दिया जाता है और इसे अलग-अलग शब्दों में विभाजित किया जाता है। "Let's"दो शब्दों के रूप में गिना जाता है: "Let"और "s"
  • Array#mapप्रत्येक शब्द को शब्द के आकार में बदलने के लिए उपयोग करें , उन्हें एक में बदलें String
  • Regexp का उपयोग करते हुए, जांचें कि क्या दो बनाए Stringगए समान वर्णों से शुरू होते हैं।

मैंने 100+ अंकों को संभालने के लिए बोनस लागू किया है। _इस समाधान में विराम चिह्न के रूप में संभाला नहीं है।


ध्यान दें कि आप _विराम चिह्न नहीं मान रहे हैं ।
मार्टिन एंडर

अच्छी तरह से देखा गया। तर्क के लिए, _ हमेशा विराम चिह्न है? जैसे वाक्यों का क्या My nickname on Stack Overflow is britishtea_500
ब्रिटिश

यह सिर्फ एक अवलोकन था। यहाँ विवरण के बारे में ओपी बिल्कुल विशिष्ट नहीं है।
मार्टिन एंडर

काफी उचित। मैं अब तक इसका जवाब छोड़ दूंगा जब तक कि यह समस्या में निर्दिष्ट न हो :)
britishtea

Bigdecimal का उपयोग करके आपके पास PI अंकों की कोई सीमा नहीं है? नाइस (+1)
edc65

4

गणितज्ञ, 123 बाइट्स * 0.8 = 98.4

f=#&@@RealDigits[Pi,10,Length[d=StringLength/@StringSplit@StringReplace[#,RegularExpression@"[!-.:-?]
"->""]/. 10->0]]==d&;

अब तक का सबसे लंबा सबमिशन, लेकिन:

  • यह पाई के किसी भी अंक के लिए काम करता है।
  • यह उन स्थानों में शब्दों को विभाजित किए बिना सभी आवश्यक ASCII वर्णों और लाइन ब्रेक को हटा देता है।
  • यह पाई में 0 अंकों को सही ढंग से संभालता है (10-अक्षर शब्दों के रूप में)

अगर यह पाई के अंकों की संख्या के लिए काम करता है, तो आपको
कारिडोरक

1

अजगर - 130 127 116 - 17 अंक पाई

जैसा कि @flawr के उत्तर में है , Law ' s fineऔर Law's fineदोनों सत्य हैं।

कार्यक्रम से 12 पात्रों को हटाने के लिए @ ईमिल का धन्यवाद ।

import re
f=lambda x:all(j==int("31415926535897932"[i])for i,j in enumerate([len(s)for s in re.findall("[\w]+",x)]))

आप lएक चर में बचत नहीं करके और लंबोदा का उपयोग करके फ़ंक्शन को परिभाषित करके 12 वर्णों को बचा सकते हैं ।
एमिल

1

जावा, 185

boolean f(String...s){s=s[0].replaceAll("\\W","~").replaceAll("~+","~").split("~");for(int i=0;i<s.length;){if(s[i].length()!=(int)(Math.PI*Math.pow(10,i++)%10))return 0>1;}return 1>0;}

1

अजगर 3, 17 अंक pi, 104

import re;f=lambda s:all(map(int.__eq__, map(int, '31415926535897932'), map(len,re.findall('[\w]+',s))))

आप ;पठनीयता के लिए एक नई पंक्ति के साथ बदल सकते हैं । इसके अलावा, कई रिक्त स्थान निकाले जा सकते हैं।
टॉस

1

अजगर 3 - 129

विराम चिह्न के लिए खाता नहीं है:

import math
f=lambda p:all(1if len(p.split(' ')[i])!=int(str(math.pi).replace('.','')[i])else 1for i in range(len(p.split(' '))))

0

टी-एसक्यूएल 488 383

और अब एक बड़े टी-एसक्यूएल समाधान के लिए :)

CREATE FUNCTION F(@s VARCHAR(MAX))RETURNS CHAR(6) AS BEGIN DECLARE @ CHAR='T',@p VARCHAR(50)='31415926535897932384626433832795028841971693993751',@i INT=0WHILE @='T'AND @s<>''BEGIN SET @i=PATINDEX('%[^a-z0-9]%',@s)IF @i=0RETURN'#True'IF @i-1<>LEFT(@p,1)RETURN'#False'SET @p=STUFF(@p,1,1,'')SET @s=STUFF(@s,1,@i,'')SET @s=STUFF(@s,1,PATINDEX('%[a-z0-9]%',@s)-1,'')END RETURN'#True'END

यह एक इनलाइन टेबल वैल्यू फ़ंक्शन बनाता है जो शब्द सीमाओं का पता लगाने के लिए एक पुनरावर्ती CTE का उपयोग करता है।

एक स्केलर फ़ंक्शन बनाता है जो इसे शब्दों और PI के माध्यम से 31 डेसीमल (पहले 0) के रास्ते बनाता है। इसे निम्नलिखित तरीके से कहा जाता है

SELECT dbo.f('SQL I golf, a large procedure is normal. Hefty not terse') --#True

0

CJam, 40

"
,.'\"?!;:"{-}/S%{,PAV#*iA%=V):V}/]0#)!

यह स्पष्ट नहीं है कि "किसी भी प्रकार के विराम चिह्न" का क्या अर्थ है; यह समाधान ,.'"?!;;पात्रों को हटा देता है ।


0

बैश और यूनिक्स उपकरण, 111

f() { grep ^"$(echo "$@"|grep -Po '[\w]+'|xargs -n1 sh -c 'echo ${#0}'|xargs|tr -d ' ')"<<<31415926535897932; 

0

NodeJS 32 अंक 230 बाइट्स

मैं इसे JS: D के साथ छोटा नहीं कर सकता

var p = "31415926535897932384626433832795", i = 0;
console.log(process.argv[2].split(/[\s,.]+/).every(function(w) {
    if (parseInt(p.charAt(i)) !== w.length) {
        return false;
    }
    i++;
    return true;
}) ? 'True' : 'False');

व्हाट्सएप को हटा दें।
रोहन झुनझुनवाला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.