একটি দেখে দেখে ওজনের একটি সেট ভারসাম্য করুন


32

সমীকরণ আইন

সংক্ষিপ্ত বিবরণ

3 টি একক-অঙ্কের ইতিবাচক পূর্ণসংখ্যার একটি ইনপুট দেওয়া যা ওজনের একটি সেট উপস্থাপন করে, তার উপর রাখা ওজনের সাথে একটি সাসের একটি ASCII উপস্থাপনা আউটপুট দেয় যাতে এটি কেন্দ্রীয় পিভটের চারপাশে ভারসাম্য বজায় থাকে, লিভারের প্রভাবগুলি বিবেচনায় নিয়ে থাকে।

প্রতিটি সংখ্যার এর মান সমান ওজন থাকে। প্রতিটি সংখ্যার টর্কটি ওজনকে কেন্দ্র থেকে অক্ষরের অক্ষরে দূরত্বকে বাড়িয়ে দেয়। ঢেঁকিকল ভারসাম্য হতে হয়, তাহলে ঢেঁকিকল বাম ওজন এর সমষ্টি ঘূর্ণন সঁচারক বল ডান দিকের লোকদের মত যে সমান নয় এই

ইনপুট

1-9 এর পরিসীমা 3 টি পূর্ণসংখ্যা। আপনি পূর্ণসংখ্যার ইনপুট করতে পারেন তবে সুবিধাজনক, যেমন একটি টুপল, 3 টি কমা-বিভাজিত মান ইত্যাদি your তবে আপনার প্রোগ্রামটি অবশ্যই কোনও ক্রমে সংখ্যার ইনপুট হ্যান্ডেল করতে সক্ষম হবে (অর্থাত মানগুলি সাজানো হবে না)। সদৃশ নম্বরগুলি ইনপুট (উদাহরণস্বরূপ 2,3,2) হতে পারে।

ইনপুটগুলি সর্বদা গাণিতিকভাবে একটি বৈধ আউটপুট দেওয়ার অনুমতি দেয়, অন্যথায় ইনপুটটি বৈধ নয়।

আউটপুট

আউটপুটটি তার উপরে রাখা ওজনের সাথে সওয়ের 2-লাইনের ASCII উপস্থাপনা হওয়া উচিত। প্রথম লাইনে অঙ্কগুলি রয়েছে, এগুলি দেখায় ভারসাম্য বজায় রাখার জন্য ব্যবধানযুক্ত।

নম্বরগুলি স্কেলের খুব ঠিক কেন্দ্রে স্থাপন করা যাবে না, যেখানে দূরত্ব এবং সুতরাং টর্কটি শূন্য হবে। কেন্দ্রের বৈধ দূরত্বগুলি পিভটের বাম বা ডান সমেত 1-10 টি অক্ষর থেকে শুরু করে।

সংখ্যার দ্বারা অচিহ্নিত ফাঁকা স্থানগুলিতে 18 আন্ডারস্কোর অক্ষর (প্রতিটি কেন্দ্রে আন্ডারস্কোর এবং 10, সংখ্যায় দখল করা 3 অবস্থান বিয়োগ) are শেষ লাইনে একটি একক ক্যারেট অক্ষরটি স্কেলটির কেন্দ্রের সাথে সামঞ্জস্য করে, পিভটকে উপস্থাপন করে।

উদাহরণ

ইনপুট:

4,7,2

আউটপুট:

________7___42_______
          ^

7 * 2 = 4 * 2 + 2 * 3

সংখ্যাগুলি উভয় পক্ষের আউটপুট হতে পারে, উদাহরণস্বরূপ এটি বৈধ হবে:

_______24___7________
          ^

2 * 3 + 4 * 2 = 7 * 2

যতক্ষণ ভারসাম্য বজায় থাকে ততক্ষণ স্কেলগুলিতে নম্বর স্থাপন করা যেতে পারে, যেমন:

ইনপুট:

3,1,5

আউটপুট:

_____5________1__3___
          ^

5 * 5 = 1 * 4 + 3 * 7

অথবা

____5________1_____3_
          ^

5 * 6 = 1 * 3 + 3 * 9

অথবা

____5___________1_3__
          ^

5 * 6 = 1 * 6 + 3 * 8

ইত্যাদি

আপনার প্রোগ্রামে কেবলমাত্র বৈধ আউটপুটগুলির একটি আউটপুট করতে হবে। ইনপুটটি বৈধ না হলে এটির একটি ত্রুটি আউটপুট করতে হবে না।

নোট

  • এটি তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে
  • প্রোগ্রামটি স্ট্যান্ড-অলোন বা ফাংশন হতে পারে যা সংখ্যাকে ইনপুট হিসাবে গ্রহণ করে এবং একটি স্ট্রিং দেয়।
  • শেষ লাইনে নিউলাইন এবং হোয়াইট-স্পেস অনুসরণ করা alচ্ছিক
  • আপনি জানা না থাকলে কি একটি ঢেঁকিকল , এটা একটি টলটলায়মানভাবে-টলমল করা বা teeterboard নামে পরিচিত হচ্ছে।

এখানে একটি পেস্ট বৈধ ইনপুট এবং সমাধানগুলি দেখায় (কিছু সদৃশ সহ)
সামগাক

11
একটি দুর্দান্ত প্রথম চ্যালেঞ্জ! একটি আকর্ষণীয় সমস্যা এবং একটি সম্পূর্ণ স্পেক।
এক্সনর

2
অ্যালগোরিদমিকভাবে, একটি সম্পূর্ণ-সংখ্যক ভেক্টর দেওয়া, এটি আপনাকে সমস্ত পৃথক এন্ট্রি সহ একটি পুরো-সংখ্যাযুক্ত অর্থোগোনাল ভেক্টর সন্ধান করতে বলে।
গর্বিত হাসেলেলার

উত্তর:


13

সিজেম, 40 39 38 বাইট

q~21Ue]e!{21,Af-Aest.*:+!}=0'_erNAS*'^

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

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

q~                                     e# Read and evaluate the input.
  21Ue]                                e# Append zeroes to achieve a length of 21.
       e!                              e# Push all unique permutations.
         {               }=            e# Find the first permutation such that:
          21,                          e#  Push [0 ... 20].
             Af-                       e#  Subtract 10 from each.
                Aest                   e#  Replace the element at index 10 with the
                                       e#  current time (ms since epoch) to push
                                       e#  [-10 ... -1 <big number> 1 ... 10].
                    .*                 e#  Multiply each number of the permutation
                                       e#  by the corresponding distance.
                      :+               e#  Add the products.
                                       e#  The timestamp makes sure that this sum
                                       e#  is non-zero for a non-zero element in
                                       e#  the middle of the permutation.    
                        !              e#  Push the logical NOT of the sum.
                           0'_er       e# Replace zeroes with underscores.
                                NAS*'^ e# Push a linefeed, ten spaces and a caret.

5

সিজেম, 46 44 বাইট

'_21*q~K,Am3m*{___&=*Afm1$.*:+!}=.{\t}NAS*'^

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

প্রথমত, একটি পর্যবেক্ষণ: আমাদের কখনই সাসা'র প্রান্তে দুটি অঙ্ক রাখার দরকার নেই। যখনই এটি একটি বৈধ সমাধান, কমপক্ষে অন্য একটি বৈধ সমাধান (চ্যালেঞ্জের মন্তব্যে পেস্টবিন অনুসারে) থাকে।

'_21*   e# Push a string of 21 underscores.
q~      e# Read and eval input.
K,      e# Push the array [0 1 .. 19 20]
Am      e# Remove the 10. This is now an array of all valid positions on the seesaw.
3m*     e# Get all 3-tuples of valid positions.
{       e# Select the first tuple for which the following block yields a truthy result.
  ___   e# Make three copies of the tuple.
  &=    e# Intersect the last two copies and check for equality with the first one.
        e# This yields 1 if all positions are distinct, and 0 otherwise.
  *     e# Repeat the original tuple that many times. That is, if the positions are
        e# distinct, leave the tuple unchanged. Otherwise, replace it with an empty array.
  Afm   e# Subtract 10 from each position to get its weight.
  1$    e# Copy the input digits.
  .*    e# Take the pairwise product of weights and digits. If the weights are empty
        e# (because they were not unique), this will just yield a list of the digits.
  :+    e# Sum the weighted digits. If the weights were not unique, this will just sum
        e# the digits and will always be positive.
  !     e# Logical NOT - give 1 if the sum was 0, or 0 otherwise.
}=
.{\t}   e# For each pair of digit and position, replace that position in the underscore
        e# string with the corresponding digit.
N       e# Push a newline.
AS*     e# Push ten spaces.
'^      e# Push a caret.

5

জাভা, 519 414 321 বাইট

static int f(int a,int b,int c){int i,j,k;for(i=-10;i<=10;i++)for(j=i+1;j<=10;j++)for(k=j+1;k<=10;k++){if(a*i+b*j+c*k==0&&i!=0&&j!=0&&k!=0){for(int q=0;q<21;q++){if(q==10+i)p(a);else if(q==10+j)p(b);else if(q==10+k)p(c);else p('_');}p("\n          ^\n");return 0;}}return 0;}static void p(Object a){System.out.print(a);}}

গল্ফ করার আমার প্রথম প্রচেষ্টা।

আপনি এটি দিয়ে কল করতে পারেন f(a,b,c)এখানে চেষ্টা করুন

সম্পাদনা: চেক করার জন্য ব্যবহৃত izlin পদ্ধতি(a*i+b*j+c*k)==0

সম্পাদনা: ধন্যবাদ, গল্ফিং পরামর্শের জন্য জে আট্কিন।


1
আপনি স্বাক্ষর পরিবর্তন করে কয়েক বাইট সংরক্ষণ করতে পারবেন pকরার Object aএবং অন্যান্য 2 এর জায়গায় এটি ব্যবহার System.out.print(ln)গুলি।
জে আতকিন

1
এবং যেহেতু aশুধুমাত্র একবার ব্যবহৃত হয়, আপনি এটি ইনলাইন করতে পারেন।
জে আতকিন

5

Pyth, 67 58 53 49 বাইট

পাইথের বিশাল পক্ষে এটি কিছুটা অনুভূত হয় তবে ভাষাটি এত ছোট করতে সক্ষম হওয়ার জন্য আমি তেমন পরিচিত নই। সাব 50 বাইট, আমি অবশেষে এটি দিয়ে খুশি!

V.c-KrT-011Z3FY.pQIqs*VNYZjkm?}dN@YxNd\_K+*dT\^.q

উদাহরণস্বরূপ, ইনপুটটি পূর্ণসংখ্যার অ্যারের হিসাবে প্রত্যাশিত [1,2,3]এখানে চেষ্টা করুন।

Explaination:

V.c-KrT-011Z3FY.pQIqs*VNYZjkm?}dN@YxNd\_K+*dT\^.q
                                                       Implicit: Q = eval(input())
     rT-011                                            Create range from 10 to -10
    K                                                  Store in K
   -       Z                                           Drop 0 from the above
V.c         3                                          For N in (combinations of the above of size 3)
             FY.pQ                                     For Y in (permutations of input)
                     *VNY                              Multiply each element in N by the corresponding element in Y
                    s                                  Take the sum
                  Iq     Z                             If it's equal to zero:
                            m           K              For d in K (K = [10, ..., -10])
                             ?}dN                      Is d in N?
                                 @YxNd                 If so, get corresponding value from Y
                                      \_               Otherwise, get '_'
                          jk                           Join the resulting array into a string (implicit print)
                                         +*dT\^        Join 10 spaces and '^', implicit print
                                               .q      Break all loops and exit

এবং পরিশেষে, কিছু উদাহরণ ইনপুট এবং আউটপুট:

[1,1,1] ->
1__________1_______1_
          ^

[2,9,5] ->
2____5_________9_____
          ^

[9,8,5] ->
5____8______________9
          ^

4

সি - 237 228 বাইট

i,j,k;f(a,b,c){char o[]="_____________________\n          ^";for(i=-10;i<9;i+=i+1?1:2){for(j=i+1;j<11;j+=j+1?1:2){for(k=j+1;k<11;k+=k+1?1:2){if((a*i+b*j+c*k)==0){o[i+10]=a+48;o[j+10]=b+48;o[k+10]=c+48;printf("%s",o);return;}}}}}

আপনি এটি দিয়ে কল করতে পারেন f(a,b,c)

এখানে চেষ্টা করুন

উদাহরণ ফলাফল:

f(4,7,2):
4_____________7_2____
          ^         

f(3,1,5)
3____1___________5___
          ^       

3

পাইথন 2.7 235 226 219 বাইট

def s(n,p=__import__("itertools").permutations):
 l=["_"]*21
 for p,q in[[(a,x+10),(b,y+10),(c,10-z)]for a,b,c in p(n,3)for x,y,z in p(range(1,11),3)if x!=y and a*x+b*y==c*z][0]:l[q]=`p`
 return`l`[2::5]+"\n"+" "*10+"^"

কিছু প্রাথমিক উদাহরণ দিয়ে এটি পরীক্ষা করা - (1,1,1),(1,2,1),(3,1,5),(4,7,2)ফলাফলগুলি:

(1, 1, 1)
_______1___11________
          ^
(1, 2, 1)
_____1_____12________
          ^
(3, 1, 5)
________5__3_____1___
          ^
(4, 7, 2)
_2_________47________
          ^

সমস্ত সম্ভাব্য ইনপুটগুলির আউটপুট এখানে আটকানো হয়েছে


"".join(l) -> 'l'[2::5]এটি একটি বাইট সংক্ষিপ্ত (ব্যাকটিক্স সহ কোটগুলি প্রতিস্থাপন করুন)।
কেড

এছাড়াও, আপনি যদি কোনও ফাংশন থেকে কোনও প্রোগ্রামে আপনার দৃষ্টিভঙ্গি পরিবর্তন করতে ইচ্ছুক হন তবে আপনি এটিকে 222 বাইটে নামিয়ে দিতে পারেন।
কেড

@ সামগাক উফ! আমার খারাপ, ভেবেছি আমি প্রশ্নটি সঠিকভাবে পড়েছি। আরও 2 টি বাইট :(
কামেমেহেহ

@ ভিওজ- দুর্দান্ত টিপ। সম্পর্কে জানতাম না repr। :)
কামাহেহেহা

3

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

একটি ব্রুট-ফোর্স দ্রবণ যা নেস্ট লুপগুলির একটি গুচ্ছ এবং কয়েকটি পরীক্ষা ব্যবহার করে।

$p=explode(',',$argv[$i=1]);for(;$i<=10;$i++)for($j=1;$j<=10;$j++)
for($k=1;$k<=10;$k++)if($j-$k)for($l=0;$l<3;$l++){$q=array_shift($p);
if($i*$q==$j*$p[0]+$k*$p[1]){$o=str_repeat('_',21);$o[10-$i]=$q;$o[10+$j]=$p[0];
$o[10+$k]=$p[1];echo($o."\n          ^\n");}array_push($p,$q);}

সর্বদা হিসাবে, এটিকে একটি ফাইলের মধ্যে রাখুন (আসুন এটির নাম দিন seesaw.php) লাইনগুলিতে যোগ করুন (পাঠযোগ্যতার জন্য এখানে বিভক্ত করুন), পিএইচপি চিহ্নিতকারী ( <?php) ফাইলের শুরুতে (প্রযুক্তিগতভাবে এটি প্রোগ্রামের অংশ নয়) রাখুন এবং আপনি ' যেতে ভাল।

মৃত্যুদন্ডের উদাহরণ:

$ php seesaw.php 9,2,1
_________9_2_____1___
          ^
_________9__2__1_____
          ^
_________9_1__2______
          ^
________9_____2_____1
          ^
________9______2__1__
          ^
________9_____1__2___
          ^
________9___1_____2__
          ^
_______9_________1__2
          ^
____2______9_1_______
          ^
___2_______9___1_____
          ^
__2________9_____1___
          ^
_2_________9_______1_
          ^

এটি সমস্ত সমাধান উত্পন্ন করে এবং প্রদর্শন করে (কোনও প্রতিচ্ছবি ছাড়াই), তবে এটি সদৃশগুলি স্ট্রিপ করে না (যখন ইনপুট মানগুলিতে সদৃশ থাকে)।


3

জুলিয়া, 154 বাইট

f(a,b,c)=(x=replace(join(first(filter(p->p⋅[-10:-1,1:10]==0,permutations([a,b,c,zeros(Int,17)])))),"0","_");print(x[1:10]*"_"*x[11:20]*"\n"*" "^10*"^"))

অবহেলিত + ব্যাখ্যা:

function f(a,b,c)
    # Create a 20-element array of the input with 17 zeros
    z = [a,b,c,zeros(Int,17)]

    # Get the set of all permutations of z such that the dot product
    # of the permutation with the distances is 0
    d = filter(p -> p  [-10:-1,1:10] == 0, permutations(z))

    # Join the first element of d into a string and replace all of
    # the zeros with underscores
    x = replace(join(first(d)), "0", "_")

    # Print the output
    print(x[1:10] * "_" * x[11:20] * "\n" * " "^10 * "^")
end

2

সি, 252 (214) বাইট

কমান্ড লাইনে আর্গুমেন্ট হিসাবে a, b, c দিয়ে কল করুন।

e=48;main(_,v,x,y,z,a,b,c)char**v;{char s[]="_____________________\n          ^";x=*v[1]-e;y=*v[2]-e;z=*v[3]-e;for(a=-1;a+11;--a)for(b=-10;b-11;++b)_=a*x+b*y,!b|b==a|_%z?0:(c=-_/z,c&c<11&c>-11?s[a+10]=x+e,s[b+10]=y+e,s[c+10]=z+e,puts(s),exit(0):0);} 

যদি প্রধান বাদ দেওয়া যায় তবে কোনও ফাংশনের জন্য বাইট গণনাটি 214 এ নেমে যায়।

a,b,c;f(x,y,z){char s[]="_____________________\n          ^";for(a=-1;a+11;--a)for(b=-10;b-11;++b)!b|b==a|(a*x+b*y)%z?0:(c=-(a*x+b*y)/z,c&&c<11&&c>-11?s[a+10]=x+48,s[b+10]=y+48,s[c+10]=z+48,puts(s),b=10,a=-b:0);}

উভয়ই প্রথম ওজন বাম দিকে রাখার একই কৌশল ব্যবহার করে, তারপরে সম্ভাব্য দ্বিতীয় ওজনের অবস্থানের পাশাপাশি স্ক্যান করে তৃতীয় ওজন গণনা করে। এটি একটি অভ্যন্তরীণ লুপ অপসারণের অনুমতি দেয়।

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