ডেকান্টিং সমস্যা


23

প্রদত্ত এন ডিক্যান্টারস (0 < এন <10) এর সাথে সি 0 ... সি এন -1 লিটার (0 < সি <50) এবং একটি লক্ষ্য জি লিটার ধরে রাখতে পারেন, দয়া করে নির্ধারণ করুন যে কেবলমাত্র এটি ব্যবহার করে সেই লক্ষ্যে পৌঁছানো সম্ভব কিনা? নিম্নলিখিত ক্রিয়া:

  • একটি ডিক্যান্টার পূরণ করুন
  • একটি ডিক্যান্টার খালি
  • একটি anেলে দেওয়া পুরো পূর্ণ না হওয়া বা pouredেলে দেওয়া একটি খালি না হওয়া অবধি এক ডেকান্টার থেকে অন্য toালা

লক্ষ্য পরিমাণ জি অবশ্যই একটি পাত্রে শেষে জল পরিমাণ হতে হবে। আপনার 'আউটপুট ডিক্যান্টার' থাকতে পারে না।

উদাহরণ

এন : 2
সি 0 : 5
সি 1 : 12
জি : 1
ফলাফল: হ্যাঁ

এন : 3
সি 0 : 6
সি 1 : 9
সি 2 : 21
জি : 5
ফলাফল: না

ইঙ্গিত: এটি সম্ভব কিনা তা গণনা করতে, সক্ষমতাগুলির GCD দ্বারা G বিভাজ্য কিনা তা পরীক্ষা করে দেখুন । এছাড়াও, এটি কোনও পাত্রে ফিট হবে তা নিশ্চিত করুন।

মনে রাখবেন, এটি , তাই সর্বনিম্ন সংখ্যক বাইট বিজয়ী কোড।

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

# Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes



"আউটপুট ডিক্যান্টার" আছে কি? আক্কা, আমার যদি আকার 1 এর একটি ডিক্যান্টার থাকে, কোনও ক্ষমতা কি সম্ভব?
নাথান মেরিল

নিবন্ধন করুন সংশোধন করা হয়েছে।
অলিভার নি

@ নাথানমেরিল নেই "আউটপুট ডিক্যান্টার"। আপনি প্রদত্ত ড্যানেকটারগুলির মধ্যে এটি পেতে সক্ষম হবেন।
অলিভার নি

9
এই একই চ্যালেঞ্জটি স্যান্ডবক্সযুক্ত ছিল ।
xnor

উত্তর:


5

জেলি , 9 8 7 বাইট

-1 বাইট @ ডেনিসকে ধন্যবাদ (এর :চেয়ে কম না হয়ে পূর্ণসংখ্যা বিভাগ ব্যবহার করুন )

Ṁ:a⁸g/ḍ

TryItOnline

কিভাবে?

Ṁ:a⁸g/ḍ - Main link: capacities, goal
Ṁ       - maximum capacity
 :      - integer division with goal (effectively not less than goal since non-0 is True)
  a     - and
   ⁸    - left argument (capacities)
    g/  - gcd reduce over list (gcd of capacities)
      ḍ - divides

17

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

l%n=n`mod`foldr1 gcd l<1&&any(>=n)l

এই কাগজটি এমন একটি ফলাফল প্রমাণ করে যা সমস্যাটিকে ব্যাপকভাবে সরল করে। প্রোপ 1 বলেছেন

উভয়ই ঠিক তখনই আপনি একটি লক্ষ্য অর্জন করতে পারেন:

  • সক্ষমতাগুলির একাধিক সাধারণ বিভাজক (জিসিডি),
  • সর্বাধিক সক্ষমতা

এটি উভয় কেন প্রয়োজনীয় তা পরিষ্কার It's ফলাফলের মূলটি হ'ল এই শর্তগুলির সাথে খাপ খোলার কোনও লক্ষ্য পরিমাণ উত্পাদন করতে একটি অ্যালগরিদম।

অপারেটর কল %মত [3,6,12]%9

একটি 37 বাইট বিকল্প:

l%n=elem n[0,foldr1 gcd l..maximum l]

আমি বিশ্বাস করি লক্ষ্য মাপসই করা হয়েছে এক ডিকেন্টার, এটি বৃহত্তম বোতল এর ভলিউম চেয়ে কম হওয়া উচিত (@ অলিভার এর মন্তব্য উপর ভিত্তি করে "তুমি দেওয়া ডিকেন্টার এক এটি পেতে সক্ষম হতে হবে।")।
এম-ক্রিজান

সুবিধার্থে, এটি আসলে কাগজে ব্যবহৃত সংজ্ঞা এবং আমি ভুল পড়া, তাই এটি একটি সহজ ফিক্স।
xnor

6

05 এ বি 1 ই , 9 8 9 বাইট

সিপি -1222 এনকোডিং ব্যবহার করে

ZU¿%²X>‹‹

ব্যাখ্যা

          # true if
   %      # target size modulo
ZU¿       # gcd of decanter sizes
        ‹ # is smaller than
    ²X>‹  # target size is less than or equal to max decanter size

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

লুই মেন্ডোর এমএটিএল উত্তর থেকে ট্রিকের চেয়ে কম ব্যবহার করে 1 বাইট সংরক্ষণ করা হয়েছে


1
কৌতুকের চেয়ে কম ব্যবহার ... যা আমি ডেনিসের কাছ থেকে শিখেছি :-)
লুইস মেন্ডো

আসল উত্তরটি এখনও 9 বাইট ;-)
ইটিএইচ প্রোডাকশনস

পছন্দ করুন দেখে মনে হচ্ছে আমি কেবলমাত্র ব্যাখ্যা এবং টিআইও লিঙ্কটি আপডেট করেছি, আসল কোডটি নয়। ধন্যবাদ :)
Emigna

5

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

&Zd\&G<~a<

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

এটি @ xnor এর পদ্ধতির ব্যবহার করে

&Zd    % Take array C as input. Compute the gcd of its elements
\      % Take number G as input. Compute that number modulo the above. Call this A
&G     % Push the two inputs again: C, then G
<~a    % Gives 1 if some element of C is at least G; 0 otherwise. Call this B
<      % Gives true if A is 0 and B is 1; otherwise gives false

5

এক্সেল: 43 বাইট

=AND(MOD(A10,GCD(A1:A9))=0,A10<=MAX(A1:A9))

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

কীভাবে ব্যবহার করবেন:
A1-A10 ব্যতীত অন্য যে কোনও জায়গায় এই সূত্রটি রাখুন।
তারপরে আপনার ডেক্যান্ট হোল্ডিং ভলিউমগুলিকে A1: A9 (কারণ ডেকেন্টগুলির সংখ্যা স্থির করা হয়েছে) এবং এ 10 তে লক্ষ্য ইনপুট করুন। সাজসজ্জাবিহীন কোষগুলি ফাঁকা রেখে দেওয়া উচিত। আপনি যেখানেই সূত্র রেখেছেন ফলাফলটি অন্তর্ভুক্ত করবে। আপনি যদি লক্ষ্যটি অর্জন করতে পারেন সত্য, যদি না পারেন তবে মিথ্যা।


5

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

(n,a)=>a.some(e=>n<=e)&n%a.reduce(g=(d,e)=>d?g(e%d,d):e)<1

@ এক্সনরের উত্তরের আর একটি বন্দর। হ্যাঁ, আমি reduceআবার ব্যবহার করতে হবে!


3
বিকল্প উপ-ফাংশন: e=>n<=eএকটি ভিজ্যুয়াল প্যালিনড্রোম;)
ইটিএইচ প্রোডাকশনস

4

রেটিনা , 39 বাইট

\d+
$*
^(?>(1+)(,?\1)*;)(\1+)$(?<=\3.+)

ইনপুটটি ড্যানিটারগুলির একটি কমা-বিচ্ছিন্ন তালিকা হওয়া উচিত, তারপরে সেমিকোলন, টার্গেট ভলিউম অনুসরণ করা উচিত। উদাহরণ:

6,9,21;5

আউটপুট হ'ল 0(মিথ্যা) বা 1(সত্যবাদী)।

এটি অনলাইন চেষ্টা করুন!(প্রথম লাইন একটি লাইনফিড-বিচ্ছিন্ন পরীক্ষা স্যুট সক্ষম করে))

ব্যাখ্যা

\d+
$*

এটি কেবল ইনপুটটিকে অ্যানারিতে রূপান্তর করে। এরপরে আমরা কেবল একটি একক রেজেক্সের সাথে বৈধ ইনপুটগুলি মেলে:

^(?>(1+)(,?\1)*;)(\1+)$(?<=\3.+)

ভিতরের অংশটি (?>...)জিসিডি সন্ধান করে। আমরা সর্ববৃহৎ সাবস্ট্রিং সন্ধানের মাধ্যমে এটিটি প্রস্তুত 1+করি যার সাহায্যে আমরা সমস্ত ড্যানেকটারকে মেলাতে পারি ( ,কেবলমাত্র জিসিডির সম্পূর্ণ ম্যাচের পরে an চ্ছিক অনুমতি দেওয়া)। পারমাণবিক গোষ্ঠী ( (?>...)নিজেই) যাতে রেগেক্স ইঞ্জিনটি জিসিডির বিভাজনকারীদের সাথে ব্যাকট্র্যাক করতে না পারে যদি লক্ষ্য ভলিউমটি মিলে না যায় (অন্যথায় গ্রুপটি 1এক পর্যায়ে 1এককটির সাথে মিলে যায় এবং সমস্ত ইনপুট সত্য হবে) ।

একবার আমরা জিসিডিটি খুঁজে পেয়েছি, আমরা লক্ষ্যটির পরিমাণটি একটি সাধারণের সাথে একাধিক হিসাবে মিলিয়ে দেখার চেষ্টা করি (\1+)$

অবশেষে, আমরা যাচাই করেছিলাম যে লক্ষ্যমাত্রাটি বৃহত্তম ডেকান্টারের ক্ষমতার চেয়ে বেশি নয়, এটি নিশ্চিত করে যে কোনও ভোল্টারের সাথে ভলিউমটি মিলে যায় (?<=\3.+)



2

প্যারি / জিপি , 31 বাইট

বেশ সোজা। সর্বোচ্চ ( vecmax) পরীক্ষা করা খুব ব্যয়বহুল, আমি আরও আশ্চর্য হয়েছি যে এটি আরও ভাল করা যায়।

f(c,g)=g%gcd(c)<1&&vecmax(c)>=g

2

পার্ল, 47 বাইট

জন্য +2 অন্তর্ভুক্ত -ap

STDIN এর প্রথম লাইনে জার মাপ এবং দ্বিতীয় লাইনে লক্ষ্যযুক্ত জারের সাথে চালান:

decanter.pl; echo
2 5 12
1
^D

decanter.pl:

#!/usr/bin/perl -p
$_=($_<@G)>$_%$=;$=--while@G[@F]=grep$_%$=,@F

এই সমাধানটি অস্বাভাবিক কারণ এটি লাইন দ্বারা ইনপুট লাইনটি প্রসেস করে এবং তাদের প্রত্যেকটির জন্য কিছু আউটপুট করে। প্রথম লাইনের আউটপুটটি সাবধানে ফাঁকা হওয়ার জন্য ডিজাইন করা হয়েছিল যখন দ্বিতীয় লাইনটি সমাধানটি মুদ্রণ করে। দুটি বাইট হারিয়ে গেছে ()কারণ <এবং >পার্লটিতে অ-সহযোগী হওয়ার জন্য ডিজাইন করা হয়েছে।

রেজেক্স সমাধানটিও দুর্দান্ত তবে 49 বাইট:

#!/usr/bin/perl -p
s/\d+/1x$&/eg;$_=/^(?>(1+)( |\1)*:)(\1+)$/&/$3./

(রেটিনা সমাধান থেকে কিছু অংশ চুরি হয়েছে)

এর জন্য একটি এসটিডিআইএন-এ ইনপুট দেয় যাতে জারগুলি স্পেস দ্বারা পৃথক করা হয় এবং এর পরে লক্ষ্য ::

decanter.pl <<< "2 5 12:1"

এইটির জন্য একটি বিল্টিন gcd(21 বাইট) এবং max(7 বাইট) দিয়ে ভাষা হারাতে শক্ত ...


0

স্কালা, 90 53 বাইট

def h(g:Int,a:BigInt*)=a.max>g&&a.reduce(_ gcd _)%g<1

মূলত অন্যান্য উত্তরগুলির মতোই কাজ করে, তবে স্কালায় একটি অন্তর্নির্মিত জিসিডি ফাংশন নেই। স্কালার একটি বিল্ট.in গিসিডি ফাংশন রয়েছে তবে কেবল বিগইন্টের জন্য।

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