প্রয়োগ বিভাজন


15

আপনার পছন্দসই ভাষায় একটি বিভাগ অ্যালগরিদম প্রয়োগ করুন যা পূর্ণসংখ্যা বিভাগ পরিচালনা করে। এটির জন্য কেবল ইতিবাচক সংখ্যাগুলি হ্যান্ডেল করা দরকার - তবে বোনাস পয়েন্টগুলি যদি এটি নেতিবাচক এবং মিশ্র-সাইন বিভাগটিও পরিচালনা করে। ভগ্নাংশের ফলাফলের জন্য ফলাফলগুলি গোল করা হয়।

প্রোগ্রাম নাও থাকতে পারে /, \, divবা অনুরূপ অপারেটর। এটি অবশ্যই একটি রুটিন হতে হবে যা ভাষার দেশীয় বিভাজন ক্ষমতা ব্যবহার করে না।

আপনাকে কেবল 32-বিট বিভাজন পর্যন্ত পরিচালনা করতে হবে। বারবার বিয়োগ ব্যবহার করার অনুমতি নেই।

ইনপুট

নতুন লাইন বা স্পেস দ্বারা পৃথক স্টিডিনে দুটি ইনপুট নিন (আপনার পছন্দ)

740 
2

আউটপুট

এই ক্ষেত্রে, আউটপুট হবে 370

সমাধানটি যা সংক্ষিপ্ততম জেতা।


হয় 740,2ইনপুট জন্য এছাড়াও অনুমতি? অর্থাৎ কমা আলাদা হয়েছে?
gnibbler

"ভগ্নাংশের ফলাফলের জন্য ফলাফলগুলি বৃত্তাকারে পরিণত হয়" - ঠিক আছে, সুতরাং স্পষ্টতই ইনপুটটি একটি অ-সংখ্যার সংখ্যারও ফলস্বরূপ হতে পারে ... তবে বিভাজক বিভক্তের চেয়ে বড় হওয়ার বিষয়ে কী বলা যায় (বলুন, 5 এবং 10) - এটি কি অনুমোদিত বা না?
অরেল বালি

@gnibber এটি ঠিক আছে, তবে প্রোগ্রামের বিবরণে এটি পরিষ্কার করুন।
টমাস হে

2
ক্ষতিকারক এবং অন্যান্য গণিত ফাংশন ব্যবহার করে কি সত্যই অনুমোদিত? তারা পর্দার আড়ালে বিভাগ ব্যবহার করে, কারণ অনেকগুলি সমাধান অবিচল করছে
মিং-টাং

2
এটি সবচেয়ে স্বল্পতম সময় তবে আমি কোডটি কাউকে দেখিনি
ফুক্লভ

উত্তর:


27

পাইথন - 73 টি অক্ষর

কমা দ্বারা পৃথক ইনপুট নেয়, যেমন 740,2

from math import*
x,y=input()
z=int(exp(log(x)-log(y)))
print(z*y+y<=x)+z

5
এটি, আমার বন্ধু, ভাল
আমির

"740,2" এর আউটপুট 369 this এটি কি সঠিক?
এভেলেক্স

@ ইলেভেক্স, হওয়া উচিত ছিল <=, এটি ঠিক করে এটিকে আরও ছোট করে দেওয়া হোক :)
গনিবল

14

জাভাস্ক্রিপ্ট, 61

A=Array,P=prompt,P((','+A(+P())).split(','+A(+P())).length-1)

এটি লভ্যাংশের দৈর্ঘ্যের ,,,,,,(6) দৈর্ঘ্য তৈরি করে এবং বিভাজকের উপর বিভক্ত হয় ,,,(3), ফলস্বরূপ 3 দৈর্ঘ্যের অ্যারে তৈরি হয় ['', '', ''], যার দৈর্ঘ্য আমি তার পরে একটিকে বিয়োগ করি। অবশ্যই দ্রুততম নয়, তবে আশা করি আকর্ষণীয় তবুও!


2
আমার প্রিয় বাস্তবায়ন এখন পর্যন্ত এখানে। দুর্দান্ত কোডের জন্য অভিনন্দন!
টমাস এডিং

আমি এটিকে আরও ছোট করার চেষ্টা করেছি। A=Array,P=prompt,P((''+A(+P())).split(','+A(+P())).length)
pimvdb

10

জাভাস্ক্রিপ্ট - 36 টি অক্ষর

p=prompt;alert(p()*Math.pow(p(),-1))

5
এর সাথে প্রতিস্থাপন alertকরা pআপনাকে কিছু অতিরিক্ত অক্ষর তৈরি করবে। :)
কেসি চু


8

পাইথন - 72 টি অক্ষর

কমা দ্বারা পৃথক করা ইনপুট নেয়, যেমন 740,2

x,y=input();z=0
for i in range(32)[::-1]:z+=(1<<i)*(y<<i<=x-z*y)
print z

8

পাইথন, 37

পদক্ষেপ 1. আনারিতে রূপান্তর করুন।

পদক্ষেপ 2. ইউনিারি বিভাগের অ্যালগরিদম।

print('1'*input()).count('1'*input())

7

পাইথন - 41 টি অক্ষর

কমা দ্বারা পৃথক ইনপুট নেয়, যেমন 740,2

x,y=input();z=x
while y*z>x:z-=1 
print z

1
এটি, কিছু ক্ষেত্রে, ধারাবাহিকভাবে বিয়োগের চেয়ে খারাপ। উদাহরণস্বরূপ, ইনপুট 5,4। বিয়োগের ক্ষেত্রে লুপটি 4 বার চলবে তবে আমাদের কেবল একবার বিয়োগ করতে হবে।
আমির

6

পাইথন, 70

কিছুটা ক্রেজি আমি ভেবেছিলাম (কমা দ্বারা পৃথক ইনপুট ব্যবহার করে):

from cmath import*
x,y=input()
print round(tan(polar(y+x*1j)[1]).real)

আপনি যদি ছোট ফ্লোট নির্ভুলতা ত্রুটিগুলি গ্রহণ করেন তবে roundফাংশনটি বাদ দেওয়া যাবে be



3

পিএইচপি - 82 টি অক্ষর (বগি)

$i=fgets(STDIN);$j=fgets(STDIN);$k=1;while(($a=$j*$k)<$i)$k++;echo($a>$i?--$k:$k);

এটি খুব সহজ সমাধান, তবে - এটি ভগ্নাংশ বা বিভিন্ন লক্ষণগুলি পরিচালনা করে না (একটি অসীম লুপে ঝাঁপিয়ে পড়বে)। আমি এই সম্পর্কে বিস্তারিত যেতে হবে না, এটি মোটামুটি সহজ।

ইনপুটটি স্টিডিনে রয়েছে, একটি নতুন লাইনের দ্বারা পৃথক।

পিএইচপি - 141 টি অক্ষর (পূর্ণ)

$i*=$r=($i=fgets(STDIN))<0?-1:1;$j*=$s=($j=fgets(STDIN))<0?-1:1;$k=0;$l=1;while(($a=$j*$k)!=$i){if($a>$i)$k-=($l>>=2)*2;$k+=$l;}echo$k*$r*$s;

পূর্ববর্তীটির মতো ইনপুট এবং আউটপুট।

হ্যাঁ, এটি আগেরটির চেয়ে প্রায় দ্বিগুণ, তবে এটি:

  • ভগ্নাংশ সঠিকভাবে পরিচালনা করে
  • চিহ্নগুলি সঠিকভাবে পরিচালনা করে
  • কখনই অসীম লুপে যাবে না, দ্বিতীয় প্যারামিটারটি 0-থেকে থাকে তবে এটি শূন্য দ্বারা ভাগ হয় - অবৈধ ইনপুট

পুনরায় ফর্ম্যাট এবং ব্যাখ্যা:

$i *= $r = ($i = fgets(STDIN)) < 0 ? -1 : 1;
$j *= $s = ($j = fgets(STDIN)) < 0 ? -1 : 1;
                                    // First, in the parentheses, $i is set to
                                    // GET variable i, then $r is set to -1 or
                                    // 1, depending whether $i is negative or
                                    // not - finally, $i multiplied by $r ef-
                                    // fectively resulting in $i being the ab-
                                    // solute value of itself, but keeping the
                                    // sign in $r.
                                    // The same is then done to $j, the sign
                                    // is kept in $s.

$k = 0;                             // $k will be the result in the end.

$l = 1;                             // $l is used in the loop - it is added to
                                    // $k as long as $j*$k (the divisor times
                                    // the result so far) is less than $i (the
                                    // divided number).

while(($a = $j * $k) != $i){        // Main loop - it is executed until $j*$k
                                    // equals $i - that is, until a result is
                                    // found. Because a/b=c, c*b=a.
                                    // At the same time, $a is set to $j*$k,
                                    // to conserve space and time.

    if($a > $i)                     // If $a is greater than $i, last step
        $k -= ($l >>= 2) * 2;       // (add $l) is undone by subtracting $l
                                    // from $k, and then dividing $l by two
                                    // (by a bitwise right shift by 1) for
                                    // handling fractional results.
                                    // It might seem that using ($l>>=2)*2 here
                                    // is unnecessary - but by compressing the
                                    // two commands ($k-=$l and $l>>=2) into 1
                                    // means that curly braces are not needed:
                                    //
                                    // if($a>$i)$k-=($l>>=2)*2;
                                    //
                                    // vs.
                                    //
                                    // if($a>$i){$k-=$l;$l>>=2;}

    $k += $l;                       // Finally, $k is incremented by $l and
                                    // the while loop loops again.
}

echo $k * $r * $s;                  // To get the correct result, $k has to be
                                    // multiplied by $r and $s, keeping signs
                                    // that were removed in the beginning.

আপনি এটিতে একটি বিভাগ অপারেটর ব্যবহার করেছেন, আপনি যদিও কিছুটা শিফট নিয়ে চলে যেতে পারেন। ;)
থমাস ও

@ থমাস ও হ্যাঁ ... আমি এখন এটি লক্ষ্য করেছি ... আমি আসলে কিছুটা স্থানান্তর নিয়ে ভাবছিলাম (যখন আমি এটিকে / / 10 এর পরিবর্তে / = 2 এ পরিবর্তন করেছি) - তবে এটি আরও একটি চর ছিল ... অনুমান আমি ' এটি যেভাবেই হোক ব্যবহার করতে হবে ... বিটিডব্লু যে মোটেই বিভাজন নয়: ডি।
অরেল বালি

প্রশ্নটি বলে যে আপনাকে স্টিডিন ব্যবহার করা দরকার, যা পিএইচপি সমর্থন করে।
কেভিন ব্রাউন

@ বাস 5098 আঃআহহহ ... ওহ ভাল, 4 টি অক্ষর অর্জন করেছেন ... স্থির
অরেল বালি

3

রুবি 1.9, 28 টি অক্ষর

(?a*a+?b).split(?a*b).size-1

বিভাগের বিশ্রাম, 21 টি অক্ষর

?a*a=~/(#{?a*b})\1*$/  

নমুনা:

a = 756
b = 20
print (?a*a+?b).split(?a*b).size-1  # => 37
print ?a*a=~/(#{?a*b})\1*$/         # => 16

রুবি 1.8 এর জন্য:

a = 756
b = 20
print ('a'*a+'b').split('a'*b).size-1  # => 37
print 'a'*a=~/(#{'a'*b})\1*$/          # => 16

NoMethodError: ব্যক্তিগত পদ্ধতি `বিভক্ত 'এর জন্য 69938 ডাকলেন Fixnum
rkj

@ আরকেজে, দুঃখিত, রুবি কেবলমাত্র 1.9। রুবি ১.৮ এ চালাতে আপনাকে অবশ্যই ('a'*a+'b').split('a'*b).size-1তিনটি অক্ষর বড় করতে হবে ।
এলবিজি

3

এপিএল (6)

⌊*-/⍟⎕

/এখানে বিভাজন নয়, কিন্তু foldr। যেমন, F/a b cহয় a F (b F c)। যদি আমি ব্যবহার করতে পারবেন না foldrকারণ এটি বলা হচ্ছে /, এটা 9 অক্ষর মধ্যে সম্পন্ন করা যেতে পারে:

⌊*(⍟⎕)-⍟⎕

ব্যাখ্যা:

  • : input()
  • ⍟⎕: map(log, input())
  • -/⍟⎕: foldr1(sub, map(log, input()))
  • *-/⍟⎕: exp(foldr1(sub, map(log, input())))
  • ⌊*-/⍟⎕: floor(exp(foldr1(sub, map(log, input()))))



2

হাস্কেল, 96 টি অক্ষর

main=getLine>>=print.d.map read.words
d[x,y]=pred.snd.head.filter((>x).fst)$map(\n->(n*y,n))[0..]

ইনপুটটি একক লাইনে রয়েছে।

কোডটি কেবলমাত্র বিভাজকটি নিয়ে dএবং সমস্ত সংখ্যার সাথে এটির গুণক করে উত্তর অনুসন্ধান করে n >= 0। দিন mলভ্যাংশ হও। সবচেয়ে বড় nযে n * d <= mউত্তর হতে নেওয়া হয়। কোড আসলে অন্তত পছন্দ nযেমন যে n * d > mতা থেকে এবং subtracts 1 কারণ আমি যেমন একটি তালিকা থেকে প্রথম উপাদান গ্রহণ করতে পারেন। অন্য ক্ষেত্রে, আমি শেষ নিতে হবে, কিন্তু অসীম তালিকা থেকে শেষ উপাদানটি গ্রহণ করা কঠোর পরিশ্রম। ঠিক আছে, তালিকাটি সীমাবদ্ধ হিসাবে প্রমাণিত হতে পারে তবে হাস্কেল ফিল্টারটি সম্পাদন করার সময় আরও ভাল জানেন না, তাই এটি অনির্দিষ্টকালে ফিল্টার করতে থাকে।


2

কমন লিস্প, ৪২ টি চরিত্র

(1-(loop as x to(read)by(read)counting t))

স্থান বা লাইন-বিভক্ত ইনপুট গ্রহণ করে


2

ব্যাশ, 72 64 টি অক্ষর

read x y;yes ''|head -n$x>f;ls -l --block-size=$y f|cut -d\  -f5

অসীম সংখ্যক নিউলাইনগুলি আউটপুট দিন, প্রথম এক্স নিন, এগুলিকে f নামক একটি ফাইলে রাখুন, তারপরে ব্লকের f এর আকার y এর আকার পান। আটটি চরিত্রের শেভ করার জন্য ম্যানটওয়ার্কের পরামর্শ নিয়েছিল।


"নতুন রেখাগুলি বা স্পেসগুলি (আপনার পছন্দ) দ্বারা পৃথক স্টিডিনে দুটি ইনপুট নিন", পরে আরও ভালভাবে স্থানটি পৃথক করা মানগুলি চয়ন করুন। যে ক্ষেত্রে আপনি লিখতে পারেন read x y। অপসারণের সাথে আরও কয়েকটি স্পেস কমিয়ে
64৪

1

পাইথন - 45 টি অক্ষর

কমা দ্বারা পৃথক করা ইনপুট নেয়, যেমন 740,2

x,y=input()
print-1+len((x*'.').split('.'*y))

1

পাইথন, 94 টি অক্ষর

একটি পুনরাবৃত্ত বাইনারি অনুসন্ধান:

a,b=input()
def r(m,n):return r(m,m+n>>1)if n*b>a else n if n*b+b>a else r(n,2*n)
print r(0,1)

1

পাইথন, 148

অন্যান্য সমাধানগুলি সংক্ষিপ্ত হতে পারে তবে সেগুলি কি ওয়েব স্কেল ?

এখানে একটি মার্জিত, ধ্রুবক-সময় সমাধান যা ক্লাউডের পাওয়ারকে উপকৃত করে।

from urllib import*
print eval(urlopen('http://tryhaskell.org/haskell.json?method=eval&expr=div%20'+raw_input()+'%20'+raw_input()).read())['result']

আমি কি এটি উল্লেখ করেছি হাস্কেল?


0

পাইথন, 46 বাইট

বোরিং বিয়োগের সমাধানটি কেউ পোস্ট করেনি, তাই আমি এটি করা থেকে বিরত থাকতে পারিনি।

A, B = ইনপুট ()
i = 0
যখন a> = b: a- = b; i + = 1
মুদ্রণ i

0

স্মলটাক , স্কেয়াক 4.x স্বাদ

পূর্ণসংখ্যার মধ্যে এই বাইনারি বার্তা সংজ্ঞায়িত করুন:

% d 
    | i |
    d <= self or: [^0].
    i := self highBit - d highBit.
    d << i <= self or: [i := i - 1].
    ^1 << i + (self - (d << i) % d)

একবার গল্ফড হয়ে গেলে, এই ভাগফলটি এখনও দীর্ঘ (88 টি):

%d|i n|d<=(n:=self)or:[^0].i:=n highBit-d highBit.d<<i<=n or:[i:=i-1].^1<<i+(n-(d<<i)%d)

তবে এটি যুক্তিসঙ্গতভাবে দ্রুত:

[0 to: 1000 do: [:n |
    1 to: 1000 do: [:d |
        self assert: (n//d) = (n%d)]].
] timeToRun.

-> আমার পরিমিত ম্যাক মিনিতে 127 এমএস (8 এমওপি / গুলি)

নিয়মিত বিভাগের তুলনায়:

[0 to: 1000 do: [:n |
    1 to: 1000 do: [:d |
        self assert: (n//d) = (n//d)]].
] timeToRun.

-> ৩১ এমএস, এটি মাত্র চারগুণ ধীর

আমি স্টিডিন পড়তে বা স্টডআউট লেখার জন্য চরিত্রগুলি গণনা করি না, স্কেয়াক স্ক্রিপ্টিংয়ের জন্য ডিজাইন করা হয়নি।

FileStream stdout nextPutAll:
    FileStream stdin nextLine asNumber%FileStream stdin nextLine asNumber;
    cr

অবশ্যই, আরও বোকা পুনরাবৃত্তি বিয়োগ

%d self>d and:[^0].^self-d%d+1

বা সাধারণ নির্বোধ গণনা

%d^(0to:self)findLast:[:q|q*d<=self]

খুব কাজ করতে পারে, কিন্তু সত্যিই আকর্ষণীয় নয়


0
#include <stdio.h>
#include <string.h>
#include <math.h>


main()
{
   int i,j,ans;
   i=740;
   j=2;

   ans = pow(10,log10(i) - log10(j));
   printf("\nThe answer is %d",ans);
}

0

ডিসি: 26 টি অক্ষর

?so?se0[1+dle*lo>i]dsix1-p

আমি স্বীকার করি যে এটি প্রায় দ্রুত সমাধান নয়।


0

পাইথন 54

কমা সীমিত ইনপুট নেয়।

  1. দৈর্ঘ্যের x এর বিন্দুগুলির একটি স্ট্রিং তৈরি করে
  2. একক কমা দিয়ে দৈর্ঘ্যের y বিন্দুর বিভাগগুলিকে প্রতিস্থাপন করে
  3. কমা গণনা করে।

শব্দগুলি কারণ কোডডের পরে একটি তালিকা দিয়ে মার্কডাউন মারা যায় ?:

x,y=input()
print("."*x).replace("."*y,',').count(',')

0

প্রশ্ন, 46

{-1+(#){x-y}[;y]\[{s[x-y]<>(s:signum)x}[y];x]}

q){-1+(#){x-y}[;y]\[{s[x-y]<>(s:signum)x}[y];x]}[740;2]
370
q){-1+(#){x-y}[;y]\[{s[x-y]<>(s:signum)x}[y];x]}[740;3]
246



0

পাইথন, 37

x,y=input()
print len(('0'*x)[y-1::y])

দৈর্ঘ্যের একটি স্ট্রিং তৈরি করে x( '0'*x) এবং প্রতিটি বাছাই করতে বর্ধিত স্লাইসিং ব্যবহার করেy সূচি থেকে শুরু তম অক্ষরy-1 । ফলাফলযুক্ত স্ট্রিংয়ের দৈর্ঘ্য মুদ্রণ করে।

জিনিবলারের মতো এটিতে কমা বিচ্ছিন্ন ইনপুট লাগে। এটি সরানোর জন্য 9চরগুলি ব্যয় হয় :

i=input
x,y=i(),i()
print len(('0'*x)[y-1::y])

0

অক্ষিপট 0.7.3, 33 বাইট (প্রতিযোগিতা নয়)

চ্যালেঞ্জের চেয়ে ভাষা নতুন। প্রথমে বিভাজকের সাথে স্পেস-বিভক্ত ইনপুট নেয়। শূন্য দ্বারা ভাগ করা অপরিজ্ঞাত।

\d+
$*
^(.+) (\1)+.*$
$#+
.+ .*
0

এটি অনলাইনে চেষ্টা করুন


আপনি এটি 25 বাইট হিসাবে গণনা করবেন? যদি আপনি অবিচ্ছিন্ন আশা করেন তবে আমি / ও আপনার উচিত তাই করা উচিত (এবং আমি মনে করি এটি 24 বাইট)। আপনি কেন 0 টি কেস পৃথকভাবে আচরণ করবেন তা নিশ্চিত নন: retina.tryitonline.net/…
মার্টিন

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