টয়লেট পেপার রহস্য


36

আজ আপনাকে একটি খুব ব্যবহারিক সমস্যা সমাধান করতে হবে: আপনার টয়লেট পেপার রোলটিতে নির্দিষ্ট সংখ্যক শীট থাকা আপনার কতটি লুপের দরকার? আসুন কিছু ঘটনা দেখুন:

  • খালি টয়লেট পেপার সিলিন্ডারের ব্যাস 3.8 সেন্টিমিটার
  • টয়লেট পেপারের এক শীটের দৈর্ঘ্য 10 সেমি।
  • টয়লেট পেপারের এক শীটের পুরুত্ব 1 মিমি।

আপনি প্রথমবার সিলিন্ডারের চারপাশে মোড়ানোর আগে এটির পরিধিটি 3.8 * পিআই সেন্টিমিটার হয়। প্রতিবার আপনি যখন সিলিন্ডারের চারপাশে একটি চাদর মুড়ে রাখেন তখন এর ব্যাসার্ধ .1 দ্বারা বৃদ্ধি পায়, সুতরাং এর পরিধিটি 2 * পিআই দ্বারা বৃদ্ধি পায়। টয়লেট পেপারের এন শিটের জন্য কতগুলি লুপ লাগে তা জানতে এই তথ্যটি ব্যবহার করুন । (দ্রষ্টব্য: পাই এর একটি আনুমানিক ব্যবহার করুন যা কমপক্ষে 3.14159 এর মতো নির্ভুল)।

পরীক্ষার কেস :

এন = 1 :

  • 10 / (3.8 * পাই) = .838 লুপ

n = 2 :

  • (আমরা কতগুলি পূর্ণ লুপ তৈরি করতে পারি?) 1 পূর্ণ লুপ = 3.8 * পাই = 11.938।
  • (1 ম লুপের পরে আমরা কতটুকু রেখেছি?) 20 - 11.938 = 8.062
  • (বাকী টুকরোটি কতটা দ্বিতীয় লুপ তৈরি করে?) 8.062 / (4 * পাই) = .642 লুপগুলি
  • উত্তর: 1.642 লুপস

n = 3 :

  • 1 ম পূর্ণ লুপ = 3.8 * পাই = 11.938, দ্বিতীয় পূর্ণ লুপ = 4 * পাই = 12.566
  • 30 - 11.938 - 12.566 = 5.496
  • 5.496 / (4.2 * পাই) = .417
  • উত্তর: 2.417 লুপস

n = 100 => 40.874


35
রাম রাম! ঘন মিমি? আপনি কি নিশ্চিত যে আপনি টয়লেট পেপার ব্যবহার করছেন, না কার্ডবোর্ড?
ডিজিটাল ট্রমা


2
এই অনুমানের অধীনে যে টয়লেট পেপার পদক্ষেপ নেয় না তবে ক্রমাগত ব্যাসার্ধকে বাড়িয়ে তোলে , আপনি অনুরোধিত ফলাফলের জন্য একটি বদ্ধ ফর্মের আনুমানিক পেতে পারেন। এটা কি যথেষ্ট? nloops = sqrt(n+11.34)*0.0564189 - 0.19
flawr

2
প্রস্তাবিত পরীক্ষার মামলা: 100->40.874
ডেনিস

1
ট্রিপল-প্লাই কার্ডবোর্ড ?! এখন যে ঘন!
mbomb007

উত্তর:


13

পাইথ, 27 23 বাইট

+fg0=-QJc*.n0+18T50)cQJ

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

ব্যাখ্যা

                            Q = input number (implicit)
 f                 )        increment T from 1, for each T:
             +18T             add 18 to T, get radius
         *.n0                 multiply by pi to, get half the circumference
        c        50           divide by 50, get circumference in sheets
       J                      save it to J
    =-Q                       decrement Q by it
  g0                          use this T if Q is now <= 0
+                           add
                     Q        Q (now <= 0)
                    c J       divided by J (the last circumference)
                            and print (implicit)

ব্যাখ্যা, দয়া করে?
কনর ও'ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ যোগ করা হয়েছে। পাইথকে ব্যাখ্যা করা সবসময়ই মজাদার।
পূর্কাকুডারী

2
আপনার ব্যাখ্যাটি
সার্ফিনের

10

হাস্কেল, 59 46 44 বাইট

5 / পাই এর স্কেল ফ্যাক্টর প্রয়োগ করা হয়, যাতে একটি কাগজের সিলিন্ডারের পরিধি 19,20,21 ... সেমি হয় এবং একটি শীট 50 / পাই সেন্টিমিটার হয়।

নামবিহীন ফাংশনটি ব্যবহার করে এক্সনোরকে 2 বাইট সংরক্ষণ করা।

x!s|s>x=1+(x+1)!(s-x)|1>0=s/x
(19!).(50/pi*)

একটি সুন্দর পুনরাবৃত্তি পদ্ধতি। নোট করুন যে আপনার কাছে অন্যান্য লাইন থাকলেও ( নামহীন ফাংশন সমর্থন না করা সত্ত্বেও) নামহীন ফাংশনগুলি মঞ্জুরিপ্রাপ্ত , যাতে শেষ লাইনটি পয়েন্টফ্রি হতে পারে (19!).(50/pi*)
xnor

বাহ, জল থেকে আমার পদ্ধতির ঘা!
সিআর ড্রস্ট


5

হাস্কেল, 97 বাইট

p&((m,x):(n,y):z)|y<p=p&((n,y):z)|1>0=m+(p-x)/(y-x)
t=(&zip[0..](scanl(+)0$map(*pi)[0.38,0.4..]))

&অপারেটর থেকে ফিল্টারিংকে একটি takeWhileবিবৃতিতে স্থানান্তরিত করে এটি আরও গল্ফ করতে সক্ষম হতে পারে তবে এটি গল্ফিংয়ের ভাষা নয় যা এটি তুলনামূলকভাবে প্রতিযোগিতামূলক বলে মনে হয়।

ব্যাখ্যা

পূর্ণ লুপ সমন্বিত দৈর্ঘ্যের টয়লেট পেপারের স্ট্রিমটি প্রথম হিসাবে গণনা করা হয় scanl (+) 0 (map (* pi) [0.38, 0.4 ..]]। আমরা সম্পূর্ণ বিপ্লব সংখ্যার সাথে এগুলি জিপ করি, যা প্রকারভেদে প্রকারটিও বেছে নেবে Double। আমরা &এটি বর্তমান সংখ্যার সাথে পাস করি যা আমরা গণনা করতে চাই, কল করুন p

&তালিকায় প্রক্রিয়াকরণ (Double, Double)(ক) তার ডান দিকে জোড়া এগিয়ে কুঁদন পর্যন্ত snd . head . tailবেশী চেয়ে p, এই স্থিতিতে বিন্দু snd . headকম p

এই সারির যে পরিমাণ পূরণ করা হয়েছে তার অনুপাত পেতে, এটি (p - x)/(y - x),এখন পর্যন্ত করা লুপের সামগ্রিক পরিমাণে এটি গণনা করে যোগ করে।


4

সি ++, 72 বাইট

float f(float k,int d=19){auto c=d/15.9155;return k<c?k/c:1+f(k-c,d+1);}

আমি এখানে সি ++ ব্যবহার করেছি কারণ এটি ব্যাসার্ধটি আরম্ভ করার জন্য এখানে ডিফল্ট ফাংশন আর্গুমেন্টগুলি সমর্থন করে।

পুনরাবৃত্তি একটি- forলুপ ব্যবহারের চেয়ে সংক্ষিপ্ত কোড উত্পাদন করে বলে মনে হচ্ছে । এছাড়াও, এর autoপরিবর্তে float- 1 বাইট কম!


1
আপনি আমাকে প্রায় বোকা বানিয়েছিলেন, অ্যাডিয়াসের dজন্য ব্যবহার করে r...
টবি

3

লুয়া, 82 বাইট

n=... l,c,p=10*n,11.938042,0 while l>c do l,c,p=l-c,c+.628318,p+1 end print(p+l/c)

একটি সাধারণ উদ্দেশ্যমূলক ভাষার পক্ষে খারাপ নয় তবে উত্সর্গীকৃত গল্ফিং ভাষার বিরুদ্ধে খুব প্রতিযোগিতামূলক নয়। ধ্রুবকগুলি পাইটির সাথে পূর্বোক্ত হয়, বর্ণিত নির্ভুলতার সাথে।


কোন ধরণের ইনপুট গ্রহণ করবেন সে সম্পর্কে ওপি সুনির্দিষ্ট ছিল না, তাই আমি এর সূচনাটি ছেড়ে দিয়েছিলাম n, তবে বাকীগুলি যেমন রয়েছে তেমন চলবে (যেমন ছিল?)। যাইহোক, এখন এটি nকমান্ড লাইন থেকে নেয় ; জন্য যেমন 3 চাদর এটা হিসাবে চালানো lua tp.lua 3
ক্রিপটাইচ মনিকার সাথে

এটি ঠিক এই প্রশ্নের নিয়ম নয়, তবে একটি সাধারণ নীতি। প্রশ্ন অন্যথায় না বললে, হার্ডকোডিং ইনপুট জমাটিকে একটি স্নিপেট করে তোলে, যা ডিফল্টরূপে অনুমোদিত নয় । সাইট-প্রশস্ত ডিফল্ট সম্পর্কে আরও তথ্য কোড গল্ফ ট্যাগ উইকিতে পাওয়া যাবে ।
ডেনিস

আমি "পুরো প্রোগ্রাম বা ফাংশন" অংশ সম্পর্কে জানতাম তবে জানতাম না যে "ইনপুটটিকে হার্ডকোডিং জমাটি একটি ছোটখাট করে তোলে"। স্পষ্ট করার জন্য ধন্যবাদ। আমি মনে করি এটি আসলে একটি ফাংশন হিসাবে দীর্ঘতর হবে!
ক্রিপটাইচ মনিকার সাথে

3

জাভাস্ক্রিপ্ট, 77 বাইট

function w(s,d,c){d=d||3.8;c=d*3.14159;return c>s*10?s*10/c:1+w(s-c/10,d+.2)}


3
পিপিসিজিতে আপনাকে স্বাগতম! আপনি যদি চান, আপনি জাভাস্ক্রিপ্ট ES6 ব্যবহার করতে পারেন, এবং এটি 55 বাইটে পেতে পারেন:w=(s,d=3.8,c=d*3.14159)=>c>s*10?s*10/c:1+w(s-c/10,d+.2)
ডাউনওয়েট

3

সি, 87 বাইট

float d(k){float f=31.831*k,n=round(sqrt(f+342.25)-19);return n+(f-n*(37+n))/(38+2*n);}

পুরো লুপের সংখ্যার জন্য একটি সুস্পষ্ট সূত্র ব্যবহার করে:

floor(sqrt(100 * k / pi + (37/2)^2) - 37/2)

আমি প্রতিস্থাপিত 100 / piদ্বারা 31.831, এবং প্রতিস্থাপিত floorসঙ্গে round, বিরক্তিকর সংখ্যা বাঁক -18.5একটি পরিষ্কার করতে -19

এই লুপগুলির দৈর্ঘ্য

pi * n * (3.7 + 0.1 * n)

পুরো দৈর্ঘ্য থেকে এই দৈর্ঘ্যটি বিয়োগ করার পরে, কোডটি যথাযথ পরিধির দ্বারা বাকী অংশকে ভাগ করে দেয়।


কেবল এটি পরিষ্কার করার জন্য - এই সমাধানটির জটিলতা রয়েছে O(1), অনেকগুলি (সমস্ত?) অন্যান্য সমাধানের বিপরীতে। সুতরাং এটি লুপ বা পুনরাবৃত্তির চেয়ে কিছুটা দীর্ঘ।


2

সি #, 113 বাইট

double s(int n){double c=0,s=0,t=3.8*3.14159;while(n*10>s+t){s+=t;c++;t=(3.8+c*.2)*3.14159;}return c+(n*10-s)/t;}

Ungolfed:

double MysteryToiletPaper(int sheetNumber) 
    { 
        double fullLoops = 0, sum = 0, nextLoop = 3.8 * 3.14159; 

        while (sheetNumber * 10 > sum + nextLoop) 
        { 
            sum += nextLoop; 
            fullLoops++; 
            nextLoop = (3.8 + fullLoops * .2) * 3.14159; 
        } 

        return fullLoops + ((sheetNumber * 10 - sum) / nextLoop); 
    }

ফলাফল:

1 শীট জন্য

0,837658302760201

2 শীট জন্য

1,64155077524438

3 শীট জন্য

2,41650110749198

100 শীট জন্য

40,8737419532946


2

পিএইচপি, 101 বাইট

<?$p=pi();$r=3.8;$l=$argv[1]*10;$t=0;while($r*$p<$l){$t+=($l-=$r*$p)>0?1:0;$r+=.2;}echo$t+$l/($r*$p);

Ungolfed

<?
$pi = pi();
$radius = 3.8;
$length_left = $argv[1]*10;
$total_rounds = 0;
while ($radius * $pi < $length_left) {
    $total_rounds += ($length_left -= $radius * $pi) > 0 ? 1 : 0;
    $radius += .2;
}
echo $total_rounds + $length_left/( $radius * $pi );

আমি মনে করি এটি কিছুটা ছোট করা যেতে পারে তবে আমি ধারণার বাইরে চলে যাই।


2

পাইথন 3, 114 109 99 বাইট

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

  • গণনা করা স্তর সংখ্যার চেয়ে কম এক + + অবশেষ শীটের দৈর্ঘ্য / সাম্প্রতিকতম স্তর পরিধি

def f(n):
    l,s=0,[]
    while sum(s)<n:s+=[.062832*(l+19)];l+=1
    return len(s)-1+(n-sum(s[:-1]))/s[-1]

হালনাগাদ

  • -10 [16-05-09] আমার গণিত-প্রতিযোগিতাকে অনুকূলিত করেছে
  • -5 [16-05-04] ন্যূনতম লাইনের সংখ্যা

1

জাভাস্ক্রিপ্ট, 44 বাইট

w=(i,d=19,c=d/15.9155)=>i<c?i/c:1+w(i-c,d+1)

আমি অ্যানাটলিগের ধারণাটি ব্যবহার করেছি এবং কোডটিকে জাভাস্ক্রিপ্টে অনুবাদ করেছি।


1

> <>, 46 বাইট

a*0"Gq",:&a9+*\
?\:{$-{1+{&:&+>:{:})
;>{$,+n

প্রোগ্রাম শুরুর সময় শিটের সংখ্যাটি স্ট্যাকের উপস্থিতির প্রত্যাশা করে।

এটি নিবন্ধে 355/113 = 3.14159292...স্টোরেজ করে পাই এর আনুমানিক ব্যবহার pi/5করে। বর্তমান পুনরাবৃত্তির পরিধি স্ট্যাকের pi/5উপরে থাকে এবং প্রতিটি পুনরাবৃত্তিতে যোগ করা হয়।

সম্পাদনা করুন: পরিধিটি সরাসরি সঞ্চয় করতে রিফ্যাক্টর্ট - পূর্ববর্তী সংস্করণটি pi/10ব্যাস হিসাবে সংরক্ষণ করা হয়েছিল এবং 38এটি 2 বাইট দীর্ঘ ছিল started


0

পিএইচপি, 79 বাইট

function p($s,$d=3.8){$c=$d*pi();return $c>$s*10?$s*10/$c:1+p($s-$c/10,$d+.2);}

স্যান্ডবক্সে কোড চালান

আমি জাভাস্ক্রিপ্টের জন্য রস ব্র্যাডবেরির উত্তরটিকে পিএইচপি ফাংশনে অনুবাদ করেছি, যা পুনরাবৃত্তিযোগ্য।


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