এ (এন) / বি (এন) সি (এন) সংখ্যা সহ গণনা করুন


15

তিনটি সংখ্যা ক্রম বিবেচনা করুন A, Bএবং C:

  • A: পুনরাবৃত্তি সম্পর্কের উপর ভিত্তি করে একটি ক্রম f(n) = f(n-1)+f(n-2), দিয়ে শুরু f(1) = 3, f(2) = 4। সুতরাং, ক্রমটি এভাবে শুরু হয়:3 4 7 11 18 29 47 76 ...
  • B: যৌগিক সংখ্যা , এটি সমস্ত সংখ্যার যা প্রাইমস (বা 1) নয়:4 6 8 9 10 12 14 15 16 ...
  • C: পাই এর অঙ্কগুলি: 3 1 4 1 5 9 2 6 5 ...

একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া N < 50হয়, ফাংশন আর্গুমেন্ট বা STDIN হিসাবে, দশমিক পয়েন্টের পরে অঙ্কগুলির A(N)/B(N)সাথে ভগ্নাংশের দশমিক মানটি প্রদান করে C(N)। রাউন্ডিংয়ের জন্য সাধারণ নিয়মগুলি প্রযোজ্য (এন + 1'তম 5 বা তার বেশি হলে গোল হয়) যদি এর নবম সংখ্যাটি piশূন্য হয় তবে একটি পূর্ণসংখ্যা মুদ্রণ করা উচিত। বৈজ্ঞানিক স্বরলিপি / স্ট্যান্ডার্ড ফর্ম 1000 এর চেয়ে বেশি সংখ্যার জন্য গৃহীত হয়।

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins

কিছু উদাহরণ:

N = 1: 0.750
N = 2: 0.7
N = 3: 0.8750
N = 4: 1.2
N = 6: 2.416666667
N = 10: 11.056
N = 20: 764.8750

অবশ্যই, স্ট্যান্ডার্ড কোড গল্ফ বিধি প্রযোজ্য।

যে কোনও আধুনিক ল্যাপটপে দুই মিনিটেরও কম সময়ে ফাংশনটি শেষ করতে হবে।


আপনি C(n)অঙ্কগুলি বললে , আমাদের কি 0 এর পিছনে অন্তর্ভুক্ত করতে হবে?
মাল্টেসেন

সময় সীমা কোন ইনপুটে প্রয়োগ হয়?
ডেনিস

@ ডেনিস, আপনি কি বোঝাতে চাইছেন N? যদি তা হয় তবে এন = 49 পর্যন্ত Or
স্টিভি গ্রিফিন

জাভাস্ক্রিপ্টের 16 এর সীমিত ভাসমান পয়েন্ট যথার্থতা রয়েছে ast অতীতে যে আপনি ভুল ফলাফল পেতে শুরু করেছেন। এটা ঠিক আছে?
ডাউনগোট

1
@ভিহান আমার সলিউশন (অপ্রকাশিত এটিএম) পাইয়ের প্রথম 49 অঙ্কগুলি স্ট্রিংয়ে সঞ্চয় করে। আপনি যদি এই বিষয়ে উদ্বিগ্ন হন তবে ফলস্বরূপ আপনার আরও 9 টিরও বেশি নির্ভুলতার প্রয়োজন নেই।
ETH প্রোডাকশনস

উত্তর:


9

পাইথ, 60 57 58 বাইট

.[K`.Rchu,eGsGQjT7e.ftPZQ)Je/u+/*GHhyHy^TQr^T3ZZT\0+xK\.hJ

পরীক্ষার জোতা

এটি বেশ সহজবোধ্য - পাই, ফিবোনাচি সিরিজ এবং কমপোজিটগুলি, সি (এন) অঙ্কগুলি, প্যাড থেকে সি (এন) অঙ্কগুলি এবং দশমিক বিন্দুর অঙ্কের অবস্থান গণনা করুন done

একটি): hu,eGsGQjT7

বি (ঢ): e.ftPZQ)

সি (ঢ): e/u+/*GHhyHy^TQr99ZZT

60 -> 57: পাই গণনায় এন = 1 বিশেষ কেস পরিষ্কার করেছেন।

57 -> 58: পুরো ইনপুট ব্যাপ্তির জন্য পাইয়ের জন্য উচ্চ পর্যাপ্ত নির্ভুলতা ব্যবহার করা হয়নি - 99 পুনরাবৃত্তিকে 1000 পুনরাবৃত্তিতে বাড়িয়েছে।

রাউন্ডিংয়ের বিষয়ে দ্রষ্টব্য: এটি পাইপনের "নিকটতম এমনকি" রাউন্ডিং সিস্টেমটি ব্যবহার করে, বরং ওপিকে "ইনফিনিটি" সিস্টেমের দিকে নির্দিষ্ট করে। তবে, পার্থক্যটি কেবল তখনই গুরুত্বপূর্ণ যখন রাউন্ডিং পয়েন্টটি অবিলম্বে নিম্নলিখিত অঙ্কগুলি হয় 5000..., উদাহরণস্বরূপ, 1.25 গোল করে 1 ডিজিটে । আমি ইনপুট ব্যাপ্তিটি পরীক্ষা করেছিলাম এবং এটি কখনই ঘটে না, তাই সঠিক ফলাফলটি সর্বদা ফিরে আসে।


2

পাওয়ারশেল, 420 বাইট (অযা) 378 বাইট

param($n);[int[]]$p="03141592653589793238462643383279502884197169399375"-Split'';$a=@(0,3,4);for($i=3;$i-lt50;$i++){$a+=$a[$i-1]+$a[$i-2]};$c=[char[]]"00001010111010111010111011111010111110111010111011111011111010111110111";$b=@(0);for($i=4;$i-le70;$i++){if($c[$i]-eq'1'){$b+=$i}};[double]$r=$a[$n]/$b[$n];$q=$p[$n+1];$s="";(0..($q-1))|%{$s+="0"};([math]::Round($r,$q,[MidpointRounding]::AwayFromZero)).ToString("0.$s")

প্রশ্নটি গোল করে কী করে তা গণনা করার জন্য, 41 বাইট সংরক্ষণের জন্য আইএএসএজিগকে ধন্যবাদ । মানে আমাকে ভয়ঙ্কর অন্তর্ভুক্ত করতে হবে না[MidpointRounding]::AwayFromZero করতে হবে না এবং এটিকে স্পষ্টভাবে একটি হিসাবে কাস্ট করার দরকার[double]

এই এক দুর্দান্ত মজা ছিল!

সম্প্রসারিত:

# Take input N
param($n)

# First digits of pi, stored as integer array
[int[]]$p="03141592653589793238462643383279502884197169399375"-Split''

# Fibonacci sequence A(N)
$a=@(0,3,4)
for($i=3;$i-lt50;$i++){
  $a+=$a[$i-1]+$a[$i-2]
}

# Zero-indexed bitmask for if the n-th integer is composite (1) or not (0)
$c=[char[]]"00001010111010111010111011111010111110111010111011111011111010111110111"

# Populate B(N) as an array using the $c mask
$b=@(0)
for($i=4;$i-le70;$i++){
  if($c[$i]-eq'1'){
    $b+=$i
  }
}

# Calculation Time!
$r=(a($n))/$b[$n]

# A small golf, as $p[$n+1] gets used a couple times
$q=$p[$n+1]

# Need to generate a string of zeroes for padding
$s=""
(0..($q-1))|%{$s+="0"}

# Round the number, then send it to a string so we get the necessary number of zeroes
([math]::Round($r,$q)).ToString("0.$s")

পাওয়ারশেলে পুনরাবৃত্তি হ'ল ... ধীর, আমরা কি বলব, তাই আমাদের তৈরি করতে হবে A(N) অন্য দিকটি করতে হবে এবং এটিকে একটি অ্যারেতে সংরক্ষণ করতে হবে, তারপরে এটি সূচী করুন।


পুরোনো

এছাড়াও, পবিত্র গরু, আউটপুট প্রয়োজনীয়তাগুলি এটিকে হত্যা করে। পাওয়ারশেল ডিফল্ট হিসাবে গোলাকার-থেকে-নিকটতম এক / কে / কোনও ব্যাংকারের রাউন্ডিং, যা গোলাকার শৈলীতে[MidpointRounding]::AwayFromZero স্যুইচ করার জন্য অসাধারণ ক্রিয়াপদ ব্যবহার করে । তারপরে, আমাদের তারপরে জিরোগুলিকে প্যাড করা দরকার, যদি কোনও হয়। ঐ দুটি প্রয়োজনীয়তা লাইনের গত কয়েক থেকে ঘুরে মিলিত 20 বাইট থেকে 102 বাইট (থেকে থেকে ) ... ঘেউ। [math]::Round($r,$q)$s=""+$s)


দুর্দান্ত বর্ণনা / মন্তব্য! [MidpointRounding]::AwayFromZeroএকা হিসাবে 32 টি অক্ষর প্রায় সত্যই খুব খারাপ / খারাপ ... =)
স্টিভি গ্রিফিন

1
আমার উত্তরে গোলাকার বিষয়ে আমার নোটটি দেখুন। পাওয়ারশেলের ডিফল্ট রাউন্ডিংটি ভাল হওয়া উচিত।
isaacg

1

জাভাস্ক্রিপ্ট (ES6), 302 বাইট

একটি শব্দ: অসম্পূর্ণ।

x=>{a=[0,3,4],b=[0],c='03141592653589793238462643383279502884197169399375';for(i=1;i<x;a[i+2]=a[i]+a[++i]);for(i=1,p=[];++i<70;v=p.every(x=>i%x),(v?p:b).push(i));r=''+Math.round(a[x]/b[x]*(l=Math.pow(10,c[x])))/l;if(x==33)return r;r.indexOf`.`<0&&(r+='.');while(!r[r.indexOf`.`+ +c[x]])r+='0';return r}

পাই এর প্রথম 49 টি অঙ্ক একটি স্ট্রিংয়ে সংরক্ষণ করা হয় এবং অন্য দুটি সিকোয়েন্স স্বয়ংক্রিয়ভাবে উত্পন্ন হয়। এটি প্রায় অর্ধেক পথ অবলম্বন করা হয়েছে; আমি (প্রায়) নিশ্চিত যে এর থেকে আরও 50 টি বাইট আমি গ্রাস করতে পারি।

সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে, এবং বাকিদের জন্য কাজ করা উচিত। ৪৯ এর বেশি বা ০ এরও কম কিছুতে ক্রাশ হয় (এটি কখনই এই পরিস্থিতিতে দেখা উচিত নয়)। আমি বিশেষত এর ফলাফলটি 0 এর জন্য পছন্দ করি:

NaN.

কেন এই অসম্পূর্ণ?
বিটা ক্ষয়

@ বেটাডেকে আমি বলতে চাইছিলাম আমি এখনও এটি গল্ফ করা শেষ করিনি। সময় পাবার সাথে সাথেই করব।
ETH প্রোডাকশনগুলি

1

অক্টেভ, 276 236 বাইট

সবার আগে আমি ভেবেছিলাম এই গাণিতিক সরঞ্জামগুলিতে কিছু সীমাহীন নির্ভুলতা ব্যবহার করা (এবং এটি সম্পর্কে কিছু জ্ঞান রিফ্রেশ করার জন্য) শীতল হবে তাই আমি কিছু অ্যালগরিদম লিখতে শুরু করি এবং শেষ পর্যন্ত জানতে piপেরেছিলাম যে মানটি এতটা সঠিক নয় যে আমি আবার অ্যারে ব্যবহার করতে হবে। আবার, কোন দুর্দান্ত সাফল্য:

function c(A)p="3141592653589793238462643383279502884197169399375";f=ones (1,50);f(1)=3;f(2)=4;for i=3:53f(i)=f(i-1)+f(i-2);end
i=0;x=1;while i<A
x++;for j=2:x/2
if mod(x,j)==0 i++;break;end end end
printf(["%." p(A) "f\n"],f(A)/x);end

এখনও বেশ পঠনযোগ্য, তাই না?

ব্যবহার

অষ্টভরে কপি-পেস্ট ফাংশন, cপ্রয়োজনীয় মানের যুক্তির সাথে কল ফাংশন :

>>> c(1)
0.750
>>> c(49)
407880480.04348

নিখুঁতকরণ:

  • বিকল্প endif, endforএবং অনুরূপ endযা একই ভাবে কাজ করে
  • iএকটি বাইট সংরক্ষণ করুন একটি পরিবর্তনশীল হ্রাস
  • num2str(str2num(p(A)))বাজে কথা অপসারণ :)

আমি পছন্দ করি আপনি একটি অক্টাভ সমাধান পোস্ট করেছেন (আমি নিজেই একজন ম্যাটল্যাব লোক!)। মনে রাখবেন যে এই কোডটি কেবল ম্যাটল্যাব নয়, অষ্টাভ। ম্যাটল্যাব ব্যবহার করে end, endifঅনেকগুলি বাইট সংরক্ষণ করা হয়নি। আপনার কাছে ম্যাটল্যাব জন্য প্রতীকী টুলবক্স আছে এরকম, তাহলে আপনি ব্যবহার করতে পারেন vpaপাই জন্য যথেষ্ট দশমিক পয়েন্ট পেতে হবে: vpa(sym(pi),49)। আমার এই ল্যাপটপে এটি নেই, সুতরাং আমি নিশ্চিত যে symসেখানে প্রয়োজনীয় কিনা তা নিশ্চিত নই , তবে যাইহোক বেশ কয়েকটি বাইট সংরক্ষণ করা উচিত =) এবং পাঠ্যযোগ্য কোড গল্ফে খুব ভাল জিনিস নয় =)
স্টিভি গ্রিফিন

x ++ একটি ম্যাটল্যাব কমান্ডও নয়। আমি জানতাম না যে দুজনের মধ্যে এত বড় পার্থক্য রয়েছে ... আইএমও, এটি হওয়া উচিত নয়। আমি মনে করি অষ্টাভে লিখিত সমস্ত কোড ম্যাটল্যাবের কাছে পোর্টেবল হওয়া উচিত (তবে ম্যাটল্যাবের আরও বিকল্প রয়েছে বলে আশেপাশের অন্যান্য উপায়ে নয়)।
স্টিভি গ্রিফিন

আপনার সম্পাদনা অনুমোদিত হয়েছে। আমার আশেপাশে মতলব নেই তাই আমি এটি পরীক্ষা করতে অক্ষম। আমি অক্টেভে আরও পাই দশমিক পেতে সমাধানের সন্ধান করছিলাম, তবে দুর্ভাগ্যক্রমে, কেবল অ্যারের চেয়ে কিছুই কম ছিল না। তবে বাদ whileদেওয়া endwhileএবং অনুরূপ কাজগুলি দুর্দান্ত, তাই আমি উত্তরটি কয়েকটি কম অক্ষর দিয়ে আপডেট করছি :)
জাকুজে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.