গিয়ার ট্রেন, আবর্তন


16

গিয়ারগুলি মেশানো গিয়ারের আকারের উপর নির্ভর করে বিভিন্ন পরিমাণ গতি স্থানান্তর করে।

গিয়ার ট্রেন

জ্যাকের একটি মেশিন রয়েছে, যা গিয়ার ট্রেনটি ঘোরায়। তবে আপনি শেষ গিয়ারের গতি জানেন না।

ভাগ্যক্রমে, আপনি দুর্দান্ত কোড গল্ফার, যাতে আপনি তাকে সহায়তা করতে পারেন!

তাহলে আমার কি করা উচিৎ?

প্রতিটি গিয়ারটি 2 টি সংখ্যা দ্বারা উপস্থাপিত হয়, অভ্যন্তরীণ গিয়ারের ব্যাসার্ধ এবং বাহ্যিক গিয়ারের ব্যাসার্ধ।

যদি গিয়ারটি Aহয় [a,b]এবং গিয়ার Bহয় [c,d]তবে তার গতি Aএবং গতির মধ্যে অনুপাত Bহবে c:b

গিয়ারগুলির একটি তালিকা দেওয়া হয়েছে (২-টিউপলগুলির তালিকা), শেষ গিয়ারের গতি আউটপুট করুন।

আপনি প্রথম গিয়ারের গতি ধরে নিতে পারেন 1

উদাহরণস্বরূপ কাজ

ধরা যাক আমাদের ইনপুট [[6,12],[3,10],[5,8]]

প্রথম গিয়ার, এর [6,12]গতি হবে 1

তারপরে, দ্বিতীয় গিয়ারটির [3,10]গতি হবে 1*12/3 = 4

তারপরে, শেষ গিয়ারটির [5,8]গতি হবে 4*10/5 = 8

Testcases

input                    output
[[1,1],[2,2]]            0.5     (1/2)
[[1,2],[1,2],[1,2]]      4       (2/1*2/1)
[[6,12],[3,10],[5,8]]    8       (12/3*10/5)

বিধি

বেসিক বিধি প্রযোজ্য।


6
যেহেতু আপনি ভাসমান পয়েন্ট আউটপুটটিকে মঞ্জুরি দিচ্ছেন, সম্ভবত আপনার সঠিক ফলাফল কী হবে তা স্পষ্ট করে বলা উচিত।
মার্টিন ইন্ডার

আমরা কি টিপলগুলির তালিকার পরিবর্তে সমতল তালিকা হিসাবে ইনপুট নিতে পারি?
ফাঁস নুন

মত, 'হ্যাঁ [6,12,3,10,5,8]। আপনি যদি এটি ব্যবহার করতে চান তবে এটি উল্লেখ করুন।

11
এটি একটি বাজে অন্যায়ের। আমার একটি আলাদা 7-বাইট সংস্করণ ছিল যা আমি পোস্ট করিনি কারণ আমি এটিকে কম আকর্ষণীয় বলে বিবেচনা করেছি। এটি ফ্ল্যাটিং না করে 6 বাইট হত। এই জাতীয় পরিস্থিতি এড়াতে দয়া করে পরের বারে স্যান্ডবক্স ব্যবহার করার বিষয়টি বিবেচনা করুন।
ডেনিস

উত্তর:


8

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

foldr1(/).tail.init

মত একটি ফ্ল্যাট তালিকা দেওয়া [a,b,c,d,e,f], tail.initপ্রথম ও শেষ উপাদান সরিয়ে ফেলা হবে, এবং তারপর foldr1(/)বিভাগের একটি ক্যাসকেড সৃষ্টি b/(c/(d/e))))যে পর্যায়ক্রমে আউট কাজ করে *এবং /: b/c*d/e


তবে প্রশ্নটিতে বলা হয়েছে যে প্রোগ্রামগুলি ফ্ল্যাট তালিকা নয়, 2-টিউপুলের তালিকা পেয়েছে
ডিসপ্লে নাম

1
মন্তব্যে একটি ফ্ল্যাট তালিকা অনুমোদিত ছিল।
xnor



5

সি, 115 123 121 83 80 76 71 70 বাইট

4 বাইট সংরক্ষিত @ লিক্যুনকে ধন্যবাদ!

আমার প্রথম গল্ফ, সম্ভবত সেরা নয়।

c;float r=1;float g(a,s)int*a;{for(;c<s-2;)r*=a[++c]/a[++c];return r;}

একটি অ্যারে এবং আকার নেয়।

Ungolfed:

int counter;
float ret=1;
float gear(int *arr, int size) {
    for(; counter < size-2; )
        ret = ret * arr[++counter] / arr[++counter];
    return ret;
}

5
পিপিসিজিতে আপনাকে স্বাগতম! :)
মার্টিন ইন্ডার

আপনি সমর্থন করতে পারেন সর্বাধিক সংখ্যা কত? পিপিসিজিতে আপনাকে স্বাগতম!
ফাঁস নুন

j;float r=1;float f(int a[]){for(;j<sizeof a;)r=r*a[j++]/a[j++];return r;}(পরীক্ষিত নয়)
লিকি নুন

জে ++, ++ জ এবং আকার -২ নয়। 4 টি বাইট সংরক্ষণ করা হয়েছে। ধন্যবাদ!
বেটস্যাগ

দেখে মনে হচ্ছে আমরা পাস করা অ্যারের আকারটি পরিমাপ করতে পারি না। আমি উত্তর সম্পাদনা করেছি।
betseg

4

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

a=>(t=1,a.reduce((x,y)=>(t*=x[1]/y[0],y)),t)

একটি সমতল অ্যারে জন্য 37 বাইট:

a=>1/a.slice(1,-1).reduce((x,y)=>y/x)

(উদাহরণস্বরূপ) হাস্কেলের মতো নয়, reduceRightএটি এমন দীর্ঘ নাম যা এটি reduceভুল উপায়ে সস্তা এবং শেষে পরিসংখ্যান গ্রহণ করে।


অনুপ্রেরণা উত্তর সেখানে ... আমি এর চেয়ে কম যেতে পারতাম না ...
ওয়াল ওয়েস্ট


3

জে, 8 বাইট

%/@}:@}.

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

ব্যবহার

>> f =: %/@}:@}.

>> f 1 1 2 2
<< 0.5

>> f 1 2 1 2 1 2
<< 4

>> f 6 12 3 10 5 8
<< 8

যেখানে >>STDIN এবং<< হয়।

ব্যাখ্যা

Jডান থেকে বাম ডিফল্টগুলিতে "হ্রাস করুন" , যা কয়েকটি বাইট বন্ধ করেছে: পি

divide       =: %
reduce       =: /
atop         =: @
remove_first =: }.
remove_last  =: }:

f =: (divide reduce) atop (remove_last) atop (remove_first)

3

গণিত, 26 বাইট

#2/#&~Fold~#[[-2;;2;;-1]]&

একটি নামবিহীন ফাংশন যা মানগুলির সমতল দৈর্ঘ্যের তালিকা নেয় এবং সঠিক ফলাফলটি (প্রয়োজনে ভগ্নাংশ হিসাবে) প্রদান করে।

বিপরীত তালিকার উপরে (প্রথম এবং শেষ উপাদানটি সরিয়ে দেওয়ার পরে) ভাঁজ বিভাগের অন্যান্য উত্তরগুলির মতো একই পন্থাটি ব্যবহার করে।


2

এমএটিএল , 9 বাইট

6L)9L&)/p

ইনপুট ফর্ম্যাট এগুলির মধ্যে যে কোনও একটি:

[[6,12],[3,10],[5,8]]
[6,12,3,10,5,8]
[6 12 3 10 5 8]

সম্পাদনা (30 জুলাই, 2016): লিঙ্কযুক্ত কোডটি ভাষার সাম্প্রতিক পরিবর্তনের সাথে খাপ খাইয়ে প্রতিস্থাপন 9Lকরে 1L

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

ব্যাখ্যা

6L    % Predefined literal: index from second to second-last element
)     % Apply index to implicit input. Removes first and last elements
9L    % Predefined literal: index for elements at odd positions
&)    % Two-output indexing. Gives an array with the odd-position elements
      % and the complementary array, with the even-position elements of the
      % original array
/     % Divide those two arrays element-wise
p     % Product of all entries. Implicitly display

1

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

(a,s=1)=>a.map((v,i)=>s*=(x=a[i+1])?v[1]/x[0]:1).pop()

ব্যবহার

f=(a,s=1)=>a.map((v,i)=>s*=(x=a[i+1])?v[1]/x[0]:1).pop()

document.write([
  f([[1,1],[2,2]]),
  f([[1,2],[1,2],[1,2]]),
  f([[6,12],[3,10],[5,8]])
].join('<br>'))

Ungolfed

function ( array ) {
  var s = 1;                                  // Set initial speed

  for ( var i = 0; i < array.length ; i++ ) { // Loop through array
    if ( array[i + 1] === undefined ) {       // If last element
      return s;                               // Return speed
    } else {                                  // Else
      s = s * ( array[i][0] / array[i+1][0])  // Calculate speed
    }
  }
}

অবশ্যই, গল্ফযুক্ত রূপটি কিছুটা আলাদা। এর সাথে .map()এটি অ্যারের প্রথম মানটিকে দ্বিতীয় চাকার পরে গতির সাথে, দ্বিতীয় মানটি তৃতীয় চাকার গতির সাথে প্রতিস্থাপন করে এবং সর্বশেষ মান এবং দ্বিতীয় চক্রের গত গতির সাথে দ্বিতীয় মানটি প্রতিস্থাপন করে। সুতরাং, আমরা ঠিক সঙ্গে শেষ উপাদান গ্রহণ .pop()


1

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

<?for($r=1;++$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i][0];echo$r;

জিইটি প্যারামিটার থেকে ইনপুট নেয় a; প্রিন্ট ফলাফল

$r1 দিয়ে আরম্ভ করে, তারপরে দ্বিতীয় থেকে শেষ টিপলটি পূর্বের প্রথম উপাদানটির সাথে গুণিত করতে এবং বর্তমান টিউলের দ্বিতীয় উপাদানটির মাধ্যমে ভাগ করে।


আমাকে মনে করিয়ে দেওয়ার জন্য জার্গকে ধন্যবাদ $_GET ; এটি 7 বাইট সংরক্ষণ করেছে


আরও মার্জিত সংস্করণ, 88 বাইট:

<?=array_reduce($a=$_GET[a],function($r,$x){return$r*$x[1]/$x[0];},$a[0][0]/end($a)[1]);

1
<?for($r=$i=1;$i<count($a=$_GET[a]);)$r*=$a[$i-1][1]/$a[$i++][0];echo$r;72 বাইটস
জার্গ হালসারম্যান

0

জাভাস্ক্রিপ্ট, 59 58 56 বাইট

a=>a.reduce((p,c)=>p*c[1]/c[0],a[0][0]/a[a.length-1][1])

ব্যাখ্যা

অ্যারে হ্রাস করুন এবং প্রতিটি দ্বিতীয় মান দিয়ে গুণ এবং প্রতিটি প্রথম মান দ্বারা ভাগ করুন। সুতরাং [[6,12],[3,10],[5,8]]এটি জন্য 12/6*10/3*8/5। অবশ্যই, প্রকৃত গণনার আমরা চেয়েছিলাম ছিল 12/3*10/5তাই আমরা যে প্রথম উপেক্ষা করতে /6এবং গত *8গুন দ্বারা *6ফিরে এবং বিভাজক /8ফিরে বাইরে। বাতিলকরণটি 6/8হ্রাসের প্রাথমিক মান হিসাবে সেট করেই সম্পন্ন করা হয় ।


আমি একই সমাধানে এসেছি। পোস্ট-অপারেশনগুলিকে *.../...প্রাথমিক মানটিতে যুক্ত করে আপনি দুটি বাইট সংরক্ষণ করতে পারেন 1
তিতাস

0

পাইথন 2, 52 বাইট

lambda x:reduce(lambda x,y:y/float(x),x[1:-1][::-1])

একটি বেনাম ফাংশন যা আর্গুমেন্টের মাধ্যমে সমতল তালিকাটির ইনপুট নেয় এবং আউটপুট দেয়।

এটি এক্সএনওরের উত্তরের মতো বিভাগ ক্যাসকেড ধারণাটি ব্যবহার করে ।

আইডিয়নে চেষ্টা করে দেখুন


0

পাইথন 3, 59 বাইট

lambda x:eval('/'.join('{}*{}'.format(*i)for i in x)[2:-2])

একটি বেনামে ফাংশন যা আর্গুমেন্টের মাধ্যমে একটি ফ্ল্যাটবিহীন তালিকার ইনপুট নেয় এবং আউটপুট দেয়।

কিভাবে এটা কাজ করে

ইনপুটটিতে প্রতিটি জোড় সংখ্যার জন্য, ফর্মের একটি স্ট্রিং 'int1*int2'তৈরি করা হয়। এই সমস্ত জোড়ায় যোগ দেওয়া /ফর্মের একটি স্ট্রিং দেয়'int1*int2/int3*int4/...' যা পছন্দসই গণনা, তবে এতে অনাকাঙ্ক্ষিত প্রথম এবং শেষের পূর্ণসংখ্যা অন্তর্ভুক্ত রয়েছে। এগুলি স্টিংয়ের প্রথম দুটি এবং শেষ দুটি অক্ষর কেটে কাটা পছন্দসই গণনা রেখে মুছে ফেলা হবে। এরপরে এটি মূল্যায়ন করে ফিরে আসে।

আইডিয়নে চেষ্টা করে দেখুন


0

পাস্কাল, 88 বাইট

একটি পুনরাবৃত্ত (এটি করতে হয়েছিল ..) ফাংশন যা একটি স্ট্যাটিক 2D অ্যারে এবং তার দৈর্ঘ্য (সারিগুলির সংখ্যা) একটি ইনপুট হিসাবে নেয়। অ্যারেতে কিছু পয়েন্টার ম্যাথ ব্যবহার করে।

function r(a:p;n:integer):double;begin r:=a[1]/a[2];if n=2then exit;r:=r*r(a+2,n-1);end;

ব্যবহারের উদাহরণ সহ অসম্পূর্ণ:

type
  p = ^double;
var
  n: integer = 3;
  garray: array [0..2, 0..1] of double;

function ratio(a: p; n: integer): double;
begin
  ratio := a[1] / a[2];
  if n=2 then
    Exit;
  ratio := ratio * ratio(a+2, n-1);
end;

begin
  garray[0,0] := 6; garray[0,1] := 12;
  garray[1,0] := 3; garray[1,1] := 10;
  garray[2,0] := 5; garray[2,1] := 8;
  writeln(ratio(@garray, n));
end.

0

আসলে, 14 বাইট

pXdX2@╪k`i/`Mπ

এটি অনলাইন চেষ্টা করুন!(বর্তমানে কাজ করছে না কারণ টিআইও কয়েকটি সংস্করণ পিছনে রয়েছে)

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

ব্যাখ্যা:

pXdX2@╪k`i/`Mπ
pXdX            remove the first and last elements
    2@╪k        push a list where each element is a list containing every two elements of the original list (chunk into length-2 lists)
        `i/`M   map division over each sublist
             π  product

0

আর, 64 বাইট

ভেক্টরাইজড পদ্ধতির সন্ধান করে এবং forলুপ এই ক্ষেত্রে সমতুল্য:

x=scan();prod(sapply(1:(sum(1|x)/2-1)*2,function(i)x[i]/x[i+1]))

বা forলুপ:

x=scan();for(i in 1:(sum(1|x)/2-1)*2)T=c(T,x[i]/x[i+1]);prod(T)}

`

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