পাইম ভ্যালিডিটার প্রোগ্রাম


11

এমন একটি প্রোগ্রাম লিখুন যা একটি ফাংশনকে সংজ্ঞায়িত করে যা "ব্যবহারকারী দ্বারা আপনি যা চান বা ইনপুটযুক্ত কোনও কিছু" নামের একটি স্ট্রিং ভেরিয়েবল পাইম কিনা তা পরীক্ষা করতে পারে। (পাইম = একটি গল্প বা কবিতা যাতে শব্দ দৈর্ঘ্য π এর অঙ্কগুলি উপস্থাপন করে ( উইকিপিডিয়া থেকে ))

কিছু উদাহরণ:

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 অক্ষর শব্দ
  • "পাইম নামে একটি পরিবর্তনশীল" - সুতরাং প্যারামিটারের নামটি পাইম হওয়া উচিত? না, এটি হয়নি, প্রশ্নের পাঠ্য সংশোধন হয়েছে
  • একটি মজাদার বোনাস একটি সমাধান হতে পারে যা নিজেই পাইম হয় যদি আপনার সমাধানটি পাইম হয় তবে আপনাকে * 0.5 বোনাস পাবেন
  • তর্কের খাতিরে কি _ সর্বদা বিরামচিহ্ন? এটি সিদ্ধান্ত নিতে পারেন এটি বিরামচিহ্ন কিনা বা তা না হলে
  • এটি স্পষ্ট নয় যে "কোন ধরণের বিরামচিহ্ন" বলতে আমি কী বোঝাতে চাইছি,। '"?!;; ())
  • সুতরাং অঙ্কগুলি গণনা করা উচিত? এবং আইন জরিমানা মিথ্যা হবে? অঙ্কগুলি অক্ষর হিসাবে বিবেচনা করা উচিত, আইন সূক্ষ্ম = মিথ্যা; আইন ঠিক আছে = সত্য

মন্তব্য

  • এপিএল সমাধানটি বাইটে গণনা করা উচিত
  • যদি আপনার সমাধান পাই এর 100+ অঙ্কের জন্য কাজ করে তবে আপনি * 0.8 বোনাস পাবেন
  • প্রচুর আগ্রহের কারণে শেষের দিনটি ভবিষ্যতে আরও এক দিন।

6
আমাদের কতগুলি সংখ্যা পরিচালনা করতে হবে?
মেরিনাস

5
"পাইম নামে একটি পরিবর্তনশীল" - সুতরাং প্যারামিটারের নামটি অবশ্যই হওয়া উচিতpiem ? এটি সমস্ত বর্তমান উত্তরকে ভুল উপস্থাপন করে।
ইনগো বার্ক

2
একটি মজাদার বোনাস একটি সমাধান হতে পারে যা নিজেই পাইম।
ব্রিটিশিয়া

5
আগ্রহের বিষয় হিসাবে, পিআই-তে 0 এর কীভাবে ব্যাখ্যা করা উচিত? এড়িয়ে গেছেন বা 10 টি অক্ষরের শব্দ?
মিকিটি

3
এটি এমন এক লজ্জার বিষয় যে আপনি খুব গুরুত্বপূর্ণ প্রশ্নের জবাব দেন না, তবুও আপনি ইতিমধ্যে শেষের তারিখে সম্পাদনা করেছেন।
ইনগো বার্ক

উত্তর:


3

এপিএল (39)

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

এটি এপিএল ইন্টারপ্রেটারের পাই ধ্রুবক সরবরাহ করে এমন সমস্ত অঙ্ক ব্যবহার করে 99 এর সীমাতে to -৪-বিট সংস্করণে সম্ভবত আরও অংক রয়েছে। যদিও প্রদত্ত উদাহরণগুলিতে কাজ করার জন্য 16 ডিজিট যথেষ্ট।

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

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

এই সংস্করণটি এমন কোনও স্ট্রিং গ্রহণ করবে যেখানে প্রথম এন অঙ্কগুলি সঠিক।


আপনার কোডটি শর্টস তবে এটি ইউনিকোড নয় ... আমি আপনাকে জয়ের জন্য প্রাপ্য কিনা তা নিয়ে ভাবতে হবে, জাভাস্ক্রিপ্ট সংস্করণটি এর চেয়ে কিছুটা বেশি লম্বা ... যাইহোক আমি এই উত্তরটিকে উড়িয়ে দিয়েছি।
ক্যারিডরক

1
@মারিনাস প্রশ্নটি উল্লেখ করে না যে জমাগুলি অক্ষর বা বাইট দ্বারা স্কোর করা উচিত কিনা, তবে ডিফল্টটি বাইট (ট্যাগ উইকি অনুসারে) হয়, তাই আমি মনে করি আপনার স্কোর 60 এর কাছাকাছি।
মার্টিন এন্ডার

1
ডান এনকোডিং দেওয়া হয়েছে এটি প্রতিটি চরিত্রের জন্য 1 বাইট। এপিএল সব পরে দশক পরে ইউনিকোডের পূর্বাভাস দেয়।
মেরিনাস

1
@ মারিনাস ফেয়ার পয়েন্ট! আপনি কি কোনও নির্দিষ্ট (বিদ্যমান) এনকোডিং জানেন যা এতে আসলে কাজ করবে?
মার্টিন এন্ডার

2
@ মার্টিনব্যাটনার: আইবিএম কোডপেজ 907 একটি, তবে অনেকগুলি ভার রয়েছে।
মেরিনাস

7

জাভাস্ক্রিপ্ট (169) (140) (137) (135) (63) পাই এর 17 সংখ্যার জন্য

আমার সংস্করণ 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
}

পাই এর 32 সংখ্যার জন্য পুরানো সংস্করণ (169):

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 টি সংখ্যা ব্যবহার করছি।
flawr

@ ইনগোবার্ক আপনাকে অনেক ধন্যবাদ, শুধু কি কাজ করে তা পরীক্ষা করে।
flawr

দুঃখিত, কিছু মনে করবেন না। কাজ করে বলে মনে হচ্ছে না। : / 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)*''}/)}

ব্যাখ্যা

  • ইনপুট একটি ল্যাম্বডায় যুক্তি হিসাবে নেওয়া হয়। এটি প্রত্যাশা করে a String
  • পাই 999দশমিক দশক পর্যন্ত গণনা করা হয় এবং .সরানো দিয়ে স্ট্রিংয়ে পরিণত হয় ।
  • কবিতা থেকে বিরাম চিহ্নগুলি সরানো হয় এবং এটি পৃথক কথায় বিভক্ত হয়। "Let's"দুটি শব্দ হিসাবে গণনা করা হয়: "Let"এবং "s"
  • ব্যবহারের Array#map, শব্দ আকারের প্রতিটি শব্দ রূপান্তর করতে তাদেরকে মধ্যে কনক্যাটেনেট String
  • একটি রেজিএক্সপ্যাক্স ব্যবহার করে, পরীক্ষা করা দুটি Stringএকই অক্ষর দিয়ে শুরু হয় কিনা তা পরীক্ষা করুন ।

আমি 100+ অঙ্কগুলি পরিচালনা করার জন্য বোনাস প্রয়োগ করেছি। _এই সমাধানে বিরামচিহ্ন হিসাবে পরিচালনা করা হয় না।


মনে রাখবেন আপনি _বিরামচিহ্ন হিসাবে আচরণ করছেন না ।
মার্টিন এন্ডার

ভাল বিক্ষোভ. তর্কের খাতিরে কি _ সর্বদা বিরামচিহ্ন? যেমন বাক্য সম্পর্কে কি My nickname on Stack Overflow is britishtea_500
ব্রিটিশিয়া

এটি ছিল কেবল একটি পর্যবেক্ষণ। ওপি এখানে বিশদ সম্পর্কে ঠিক সুনির্দিষ্ট নয়।
মার্টিন এন্ডার

যথেষ্ট ফর্সা। সমস্যাটি নির্দিষ্ট না হওয়া পর্যন্ত আমি আপাতত উত্তরটি রেখে দেব :)
ব্রিটিশিয়া

বিগডিসিমাল ব্যবহার করে আপনার পিআই অঙ্কের কোনও সীমা নেই? চমৎকার (+1)
এডিসি 65

4

গণিত, 123 বাইট * 0.8 = 98.4

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

এখন পর্যন্ত প্রায় দীর্ঘতম জমা, তবে:

  • এটি পাই এর যে কোনও সংখ্যার জন্য কাজ করে।
  • এটি সেই জায়গাগুলিতে শব্দ বিভাজন না করে প্রয়োজনীয় সমস্ত ASCII অক্ষর এবং লাইন ব্রেকটি সরিয়ে দেয়।
  • এটি পাইতে 0-অঙ্কগুলি সঠিকভাবে পরিচালনা করে (10-অক্ষরের শব্দ হিসাবে)

যদি এটি পাই এর সংখ্যার জন্য কাজ করে তবে আপনি একটি 0.8 বোনাস পাবেন
ক্যারিডরক

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 অঙ্ক, 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

এটি একটি ইনলাইন টেবিলের মূল্যবান ফাংশন তৈরি করে যা শব্দের গণ্ডি সনাক্ত করতে পুনরাবৃত্ত সিটিই ব্যবহার করে।

একটি স্কেলার ফাংশন তৈরি করে যা শব্দ এবং পিআই থেকে 31 দশমিক (প্রথম 0) এর মধ্য দিয়ে চলে che এটি নিম্নলিখিত উপায়ে বলা হয়

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

0

সিজেম, 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

নোডজেএস 32 সংখ্যা 230 বাইট

আমি এটি জেএসের সাথে সংক্ষিপ্ত করতে পারি না: ডি

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');

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