সহজে-গুণিত সংখ্যাগুলি


34

আপনার কাজটি হ'ল দুটি সংখ্যা গুণ করা সহজ কিনা তা নির্ধারণ করা । এর অর্থ হ'ল তাদের বেস -10 দীর্ঘ গুণটির গুণমানের পদক্ষেপ এবং সংযোজন পদক্ষেপ উভয়কে লক্ষ্য করে জায়গাগুলির মানগুলির মধ্যে কোনও বহন (পুনরায় গ্রুপিং) নেই। এটি যখন ঘটে যখন প্রতিটি জোড়া অঙ্কের 9 বা তার কম দেওয়া হয় এবং প্রতিটি কলামের যোগফল 9 বা তার চেয়ে কম হয়।

উদাহরণস্বরূপ, 331এবং 1021গুণন করা সহজ:

   331
x 1021
------
+  331
  662
   0
331
------
337951

এবং একই সত্য (সর্বদা হিসাবে) আমরা যদি অন্য ক্রমে গুণ করি:

  1021
x  331
------
+ 1021
 3063
3063
------
337951

তবে, 431এবং 1021কলামগুলির মধ্যে ইঙ্গিত করা বহন করে , এবং এটি গুণ করা সহজ নয়:

   431
x 1021
------
+  431
  862
   0
431
------
440051
 ^^^

এছাড়াও, 12এবং 16গুণন করা সহজ নয় কারণ সংখ্যার ধাপে কোনও বাহন বহন না করা সত্ত্বেও, বহন 12 * 6করার সময় একটি ক্যারি ওভার ঘটে happens72

  12
x 16
----
+ 72
 12
----
 192

ইনপুট: দুটি ধনাত্মক পূর্ণসংখ্যা বা তাদের স্ট্রিং উপস্থাপনা। আপনি ধরে নিতে পারেন যে তারা আপনার ভাষার পূর্ণসংখ্যার ধরণকে উপচে ফেলবে না এবং তাদের পণ্যও প্রবাহিত করবে না।

আউটপুট: একক ধারাবাহিক মান যদি এগুলি গুণ করা সহজ হয় এবং অন্য কোনও সামঞ্জস্যপূর্ণ মান যদি না হয়।

পরীক্ষার কেস: প্রথম 5 গুণ করা সহজ, শেষ 5 টি নয়।

331 1021
1021 331
101 99
333 11111
243 201

431 1021
12 16
3 4
3333 1111
310 13

[(331, 1021), (1021, 331), (101, 99), (333, 11111), (243, 201)]
[(431, 1021), (12, 16), (3, 4), (3333, 1111), (310, 13)]

লিডারবোর্ড:


1
প্রতিটি সংখ্যার ইনপুট কি অঙ্কের তালিকা হতে পারে?
dylnan

@ অল্লান নং, যদিও স্ট্রিং বিকল্পের জন্য অক্ষরের একটি তালিকা ডিফল্টরূপে বৈধ।
xnor

উত্তর:


14

জেলি , 7 বাইট

Dæc/>9Ẹ

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

কনভলিউশন ব্যবহার করে (যা আমি জেলিকে অবদান রেখেছিলাম: ডি)

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

Dæc/>9Ẹ
D        converts to decimal list
 æc      convolution
    >9Ẹ  checks if any number is greater than 9

o বাহ সমঝোতা: ডিআই মনে করে যে এই প্রথম কোনও কোড-গল্ফে ব্যবহৃত কনভোলিউশনটি দেখছে: ডি +1
হাইপারনিউটারিনো



@ লুইস মেন্ডো না, এটি একটি আলাদা সমঝোতা।
এরিক আউটগলফার

বিটিডব্লিউ আপনি বুলেয়ান না করে <⁵Ạআউটপুট জন্য শেষ 3 বাইট প্রতিস্থাপন করতে পারেন ।
এরিক আউটগলফার

8

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

বাক্য গঠন সিনট্যাক্সে 2 টি স্ট্রিং হিসাবে ইনপুট নেয় (a)(b)। রিটার্নস falseসহজ জন্য অথবা trueসহজ নয় জন্য।

a=>b=>[...a].some((x,i,a)=>[...b].some(y=>(a[-++i]=~~a[-i]+x*y)>9))

পরীক্ষার মামলা


অল্টার। সংস্করণ (ত্রুটিযুক্ত), 64 55 52 বাইট

@ শ্যাগির পরামর্শ অনুসারে স্ট্রিংগুলি নিয়ে 3 টি বাইট সংরক্ষণ করা হয়েছে, যেমনটি @ লেকইনুন
নির্দেশ করেছেন, এই পদ্ধতিটি কিছু বড় নির্দিষ্ট পূর্ণসংখ্যায় ব্যর্থ হবে

বাক্য গঠন সিনট্যাক্সে 2 টি স্ট্রিং হিসাবে ইনপুট নেয় (a)(b)। রিটার্নস trueসহজ জন্য অথবা falseসহজ নয় জন্য।

a=>b=>/^.(0.)*$/.test((g=n=>[...n].join`0`)(a)*g(b))

পরীক্ষার মামলা

কিভাবে?

এখানে ধারণাটি হ'ল প্রতিটি ফ্যাক্টরের প্রতিটি ডিজিটের আগে জিরো serুকিয়ে স্পষ্টভাবে ক্যারিগুলি প্রকাশ করা।

উদাহরণ:

  • 331 x 1021 হয়ে 30301 এক্স 1000201 , যা দেয় 30307090501 পরিবর্তে 337951 । ফলাফলটিতে একটি নেতৃস্থানীয় শূন্য যুক্ত করে এবং সমস্ত সংখ্যা 2 দিয়ে ভাগ করে, এটি 03 03 07 09 05 01 হিসাবে লেখা যেতে পারে । সমস্ত গোষ্ঠী 10 টিরও কম , এর অর্থ হ'ল মান গুণনের কোনও বহন হত না।

  • 431 x 1021 40301 x 1000201 হয়ে যায় , যা 40309100501 দেয় এবং 04 03 09 10 05 01 হিসাবে লেখা যায় । এইবার, আমাদের কাছে একটি 10 রয়েছে যা মান গুণনের একটি বহন করে।


পারি ... অ্যালগরিদম সম্পর্কে আমাদের কি প্রাথমিক ব্যাখ্যা থাকতে পারে?
সম্পূর্ণমানবিক

@totallyhuman আমি একটি ব্যাখ্যা যুক্ত করেছি (ওফ ... এবং একটি
বাগও

1
দেখে মনে হচ্ছে আপনার ইনপুটগুলি স্ট্রিং হিসাবে নিয়ে 3 বাইট সংরক্ষণ করতে সক্ষম হওয়া উচিত।
শেগি

3
আমার (তাত্ত্বিক) পাল্টা উদাহরণ খুঁজে পেতে আমাকে চিরকাল ধরে নিয়েছিল যা আপনার অ্যালগরিদম ব্যর্থ হবে: tio.run/##y0rNyan8/9/l8LJk/f///… ( 108মধ্যবর্তী অংশটি আপনার অ্যালগোরিদমকে বিভ্রান্ত করে )
লিকি নুন

পছন্দ করুন হ্যাঁ, এটি তাত্ত্বিকভাবে উপচে পড়তে পারে।
আর্নৌল্ড

6

এলিস , 30 বাইট

/Q.\d3-&+k!*?-n/ o @
\ic/*2&w~

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

আউটপুটগুলি 1সহজ এবং শক্ততার জন্য 0

যদি সংখ্যাটির যোগফল যদি অঙ্কের যোগফলের সমান হয় তবেই সংখ্যাগুলি গুণিত করা সহজ।

/i    Input both numbers as a single string
.     Duplicate this string
/*    Coerce into two integers and multiply
2&w   Push return address twice (do the following three times)
~\Q     Swap the top two stack entries, then reverse the stack
        This produces a 3-cycle, and the first iteration coerces
        the original input string into two integers
c       Convert into individual characters
\d3-&+  Add all numbers on the stack except the bottom two (i.e., add all digits)
k     Return to pushed address (end loop)
      At this point, all three numbers are replaced by their digit sums
!*?   Multiply the digit sums of the original two numbers
-     Subtract the digit sum of the product
n     Logical negate: convert to 1 or 0
/o@   Output as character and terminate

4

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

,j!U]Y+9>a

আউটপুটগুলি 0সহজ, শক্ততার জন্য 1

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

,       % Do twice
  j     %   Input as a string
  !     %   Transpose into a column vector of characters
  U     %   Convert each character to number. Gives a numeric column vector
]       % End
Y+      % Convolution, full size
9>      % Greatear than 1? Element-wise
a       % Any: true if there is some true entry. Implicitly display

4

আর , 135 110 109 86 বাইট

function(m,n)any(convolve(m%/%10^(nchar(m):1-1)%%10,n%/%10^(1:nchar(n)-1)%%10,,"o")>9)

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

স্ট্রিং হিসাবে ইনপুট নেয়।

এটি কুৎসিত তবে এটি কাজ করে ™

এটি এখন হিসাবে, একটি সংবর্তন পদ্ধতির ব্যবহার লিকি নূনের এর উত্তর , তাই এটি পূর্ণসংখ্যার যেমন ইনপুট নেয়, এবং আয় TRUEসংখ্যাবৃদ্ধি সংখ্যার কঠিন এবং FALSEসহজ জন্য সংখ্যাবৃদ্ধি জনকে।

পূর্বে সমঝোতার পদ্ধতির বন্দরে আমার সর্বদা কিছুটা সমস্যা ছিল তবে আজ অবশেষে আমি ডকুমেন্টেশনটি পড়েছি :

নোট করুন যে দুটি সিকোয়েন্সগুলির সমাবর্তনের সাধারণ সংজ্ঞা xএবং yদেওয়া হয়convolve(x, rev(y), type = "o")

যা ঠিক নির্বোধ। সুতরাং অঙ্কের এক্সট্রাকশনটির জন্য বিপরীত হয় nএবং এটি লিকি নুনের উত্তরের বন্দরে সমাধান হয়।


4

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

lambda n,m:any(sum(n/10**(k-j)%10*(m/10**j%10)for j in range(k+1))>9for k in range(n+m))

ইনপুট হিসাবে দুটি পূর্ণসংখ্যার গ্রহণ করে এবং ফেরত দেয় False(গুণ করা সহজ) বা True(না)।

এটি অনলাইন চেষ্টা করুন! (পরীক্ষার একটির ক্ষেত্রে খুব ধীর)



len(`n+m`)আসলে 40, 30 এর জন্য ব্যর্থ হবে ।
ডেনিস

len(`n+m`)+1?
ফাঁস নুন

যা 400, 300 এ ব্যর্থ হয় । len(`n`+`m`)যদিও করা উচিত।
ডেনিস

4

জাভাস্ক্রিপ্ট (নোড.জেএস) , 43 41 37 36 বাইট

এই উত্তরে স্ট্রিং ইন্টারপোলেশন ব্যবহার করার জন্য 4 টি বাইট সংরক্ষণের ধারণার জন্য @ ডেনিসকে ধন্যবাদ !

ধন্যবাদ @ ØrjanJohansen -1 এর জন্য!

a=>b=>eval(`0x${a}*0x${b}<0x${a*b}`)

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

অবশ্যই যখন গন্তব্য বেসটি মূল বেসের চেয়ে কম হয় (যেমনটি আমার জেলি উত্তরের মতো, বেসটি 2) <অবশ্যই অবশ্যই উল্টাতে হবে।


বেস রূপান্তরটি ব্যবহার করার জন্য প্রথমটি খুঁজে বের করার জন্য অভিনন্দন, যার জন্য আমি আপনাকে অনুগ্রহ দিচ্ছি!
xnor

3

ওল্ফ্রাম ভাষা (গণিত) , 75 66 65 56 বাইট

f:=#~FromDigits~x&
g:=Max@CoefficientList[f@#2f@#,x]<=9&

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

2 টি স্ট্রিং ইনপুট গ্রহণ করা

ব্যাখ্যা:

f:=#~FromDigits~x&                      (* Turns the number to a polynomial
                                           with the digits as coefficients      *)
g:=Max@CoefficientList[f@#2f@#,x]<=9&   (* Polynomial multiplication, and check
                                           whether all coefficients are smaller
                                           than 10                              *)

ইনপুট হিসাবে স্ট্রিং ব্যবহার করতে পরিবর্তন করার জন্য -9

ইনফিক্স অপারেটর ব্যবহারের জন্য -1

-9 জন্য ধন্যবাদ @MartinEnder Maxফাংশন


3

পাইথন 2 , 158 135 123 113 বাইট

-12 বাইট ধন্যবাদ লিকি নুন -10 বাইট ওভসকে ধন্যবাদ

a,b=input()
e=enumerate
l=[0,0]*len(a+b)
for i,x in e(a):
 for j,y in e(b):l[i-~j]+=int(x)*int(y)
print max(l)<10

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস চেষ্টা করে দেখুন


all(d[k]<10for k in d)কাজ করে না এটি কেবল পাইথন 3?
shooqie

1
@ শুকী হ্যাঁ, এটি হয় তবে এখন এটি একটি তালিকা সি:
রড


3

জুলিয়া 0.6 , 30 বাইট

~x=any(conv(digits.(x)...).>9)

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

ইনপুট হ'ল সংখ্যার trueদ্বিগুণ , আউটপুট শক্তিশালী সংখ্যাগুলির পক্ষে এবং সহজগুলির falseপক্ষে।

. উপাদান ভিত্তিক ফাংশন অ্যাপ্লিকেশন।

...convফাংশনের দুটি পৃথক ইনপুটগুলিতে টিপল (পূর্ণসংখ্যার অঙ্কের তালিকার তালিকা) প্রসারিত করে।



3

এসএনওবিএল 4 (সিএসএনওবিএল 4) , 268 264 247 246 243 131 বাইট

	DEFINE('D(A)')
	M =INPUT
	N =INPUT
	OUTPUT =EQ(D(M) * D(N),D(M * N)) 1	:(END)
D	A LEN(1) . X REM . A	:F(RETURN)
	D =D + X	:(D)
END

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

নাইট্রডন দ্বারা পদ্ধতির পোর্ট করে । আমি মনে করি এটি প্রথমবারের মতো এসএনওবোল-এ কোনও Dসংখ্যার অঙ্কের জন্য সংজ্ঞায়িত করেছি ।

	DEFINE('D(A)')					;* function definition
	M =INPUT					;* read input
	N =INPUT					;* read input
	OUTPUT =EQ(D(M) * D(N),D(M * N)) 1	:(END)	;* if D(M)*D(N)==D(M*N),
							;* print 1 else print nothing. Goto End
D	A LEN(1) . X REM . A	:F(RETURN)		;* function body
	D =D + X	:(D)				;* add X to D
END

পুরানো সংস্করণ, 243 বাইট:

	M =INPUT
	N =INPUT
	P =SIZE(M)
	Q =SIZE(N)
	G =ARRAY(P + Q)
Z	OUTPUT =LE(P)	:S(E)
	M LEN(P) LEN(1) . A
	J =Q
Y	GT(J)	:F(D)
	N LEN(J) LEN(1) . B
	W =I + J
	X =G<W> + A * B
	G<W> =LE(A * B,9) LE(X,9) X	:F(E)
	J =J - 1	:(Y)
D	P =P - 1	:(Z)
E
END

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

STDIN এ ইনপুটটি নিউলাইনগুলি দ্বারা পৃথক, STDOUT এ আউটপুট: গুণ করা সহজ জন্য একটি একক নতুন লাইন, এবং গুণন করা সহজ নয় জন্য কোনও আউটপুট।

এটি কোনও পুরষ্কার জিততে পারে না তবে এটি অন্য পদ্ধতির উপস্থাপন করে (ভাল, সত্যই এটি নির্বোধ পন্থা)। আমি মনে করি না এটি আমি কিউবিক্সে লিখতে পারি, তবে এসএনওবিওল এটি যেমন কাজ করেছে তেমন শক্ত।

যেহেতু এটি স্ট্রিং হিসাবে ইনপুট নেয়, সুতরাং এটি প্রতিটি ইনপুটের জন্য কমপক্ষে 512 অঙ্কের সাথে কাজ করবে; ARRAYSNOBOL এ কত বড় হতে পারে তা আমি 100% নিশ্চিত নই ।

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

	M =INPUT				;*read input
	N =INPUT				;*read input
	P =SIZE(M)				;*P = number of M's digits, also iteration counter for outer loop
	Q =SIZE(N)				;*Q = number of N's digits
	G =ARRAY(P + Q)				;*G is an empty array of length P + Q
Z	GE(P)	:F(T)				;*if P<0, goto T (outer loop condition)
	M LEN(P) LEN(1) . A			;*A = P'th character of M
	J =Q					;*J is the iteration counter for inner loop
Y	GT(J)	:F(D)				;*if J<=0, goto D (inner loop condition)
	N LEN(J) LEN(1) . B			;*B = J'th character of N
	W =I + J				;*W=I+J, column number in multiplication
	X =G<W> + A * B				;*X=G[W]+A*B, temp variable for golfing
	G<W> =LE(A * B,9) LE(X,9) X	:F(END)	;*if A*B<=9 and X<=9, G[W]=X otherwise terminate with no output
	J =J - 1	:(Y)			;*decrement J, goto Y
D	P =P - 1	:(Z)			;*decrement P, goto Z
T	OUTPUT =				;*set output to ''; OUTPUT automatically prints a newline.
END

2

কাঠকয়লা , 38 বাইট

≔E⁺θη⁰ζFLθFLη§≔ζ⁺ικ⁺§ζ⁺ικ×I§θιI§ηκ‹⌈ζχ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। -সংখ্যাগুলি গুণন করা সহজ যখন আউটপুটস। ব্যাখ্যা:

≔E⁺θη⁰ζ

জিরোসের zবড় অ্যারে (ইনপুটগুলির দৈর্ঘ্যের যোগফল) থেকে শুরু করুন ise

FLθFLη

ইনপুটগুলির সূচকের উপরে লুপ করুন qএবং h

§≔ζ⁺ικ⁺§ζ⁺ικ×I§θιI§ηκ

দীর্ঘ গুণটির এক ধাপ সম্পাদন করুন।

‹⌈ζχ

বহন করার জন্য পরীক্ষা করুন।



2

হাস্কেল, 82 81 বাইট

q=map$read.pure
f a=any(>9).concat.scanr((.(0:)).zipWith(+).(<$>q a).(*))(0<$a).q

স্ট্রিং হিসাবে নেওয়া সংখ্যাগুলি। রিটার্নস Falseভাবেই নম্বরগুলি যদি গুন করা এবং সহজ হয় Trueঅন্যথায়।

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

আমি মনে করি এটি @ লাইকোনির উত্তর থেকে যথেষ্ট আলাদা । কিভাবে এটা কাজ করে:

q                    -- helper function to turn a string into a list of digits

f a =                -- main function, first number is parameter 'a' 
      scanr    .q    -- fold the following function from the right (and collect
                     -- the intermediate results in a list) into the list of
                     -- digits of the second number
            0<$a     --   starting with as many 0s as there are digits in 'a'
                     -- the function is, translated to non-point free:
  \n c->zipWith(+)((*n)<$>q a)$0:c 
                     -- 'n': next digit of 'b'; 'c': value so far
        (*n)<$>a     --    multiplay each digit in 'a' with 'n'
        0:c          --    prepend a 0 to 'c'
        zipWith(+)   --    add both lists element wise
                     --    (this shifts out the last digit of 'c' in every step)
   concat            -- flatten the collected lists into a single list
 any(>9)             -- check if any number is >9

চমৎকার সমাধান! আমি আমদানি থেকে মুক্তি পাওয়ার উপায় খুঁজছিলাম, তবে সেগুলি আরও দীর্ঘস্থায়ী হয়েছিল।
লাইকোনি

2

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

সম্পাদনা:

  • -1 বাইট পরিবর্তন ==করতে <

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

?দুটি পূর্ণসংখ্যার এবং আয় একটি লাগে Bool। হিসাবে ব্যবহার করুন 331?1021Falseমানে গুণটি সহজ।

a?b=s(a*b)<s a*s b
s=sum.map(read.pure).show

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

  • sএকটি ফাংশন যা পূর্ণসংখ্যার অঙ্কের যোগফল গণনা করে। ( read.pureএকক অঙ্কের অক্ষরকে পূর্ণসংখ্যায় রূপান্তর করে))
  • যদি এক জোড়া সংখ্যার গুণন করা সহজ হয় তবে পণ্যের অঙ্ক অঙ্কটি অঙ্কের অঙ্কের সমান হয়।
  • বিপরীতে, দীর্ঘ গুণকালে যে কোনও বহন সেই আদর্শের থেকে পণ্যের অঙ্কের যোগফলকে হ্রাস করবে।




1

জেলি , 8 বাইট

;PDḄµṪ⁼P

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

আমার জাভাস্ক্রিপ্ট উত্তরের একটি বন্দর । বিদ্যমান জেলির উত্তরের চেয়ে কম নয় কারণ জেলিটির অন্তর্নির্মিত শক্তিশালী সমঝোতা রয়েছে।

দুটি সংখ্যার একটি তালিকা হিসাবে ইনপুট নিন। 1সহজ নয়, সহজ হিসাবে প্রত্যাবর্তন করে 0


ব্যাখ্যা:


;PDḄµṪ⁼P     Main link. Let input = [101, 99]
;P           Concatenate with product. Get [101, 99, 9999]
  D          Convert to decimal. Get [[1,0,1], [9,9], [9,9,9,9]]
   Ḅ         Convert from binary. Get [1 * 2^2 + 0 * 2^1 + 1 * 2^0, 
             9 * 2^1 + 9 * 2^0, 9 * 2^3 + 9 * 2^2 + 9 * 2^1 + 9 * 2^0]
             = [5, 27, 135]
    µ        With that value,
     Ṫ       Take the tail from that value. Get 135, have [5, 27] remain.
      ⁼      Check equality with...
       P       The product of the remaining numbers (5 and 17).

1

সি (জিসিসি) , 104 বাইট

মূলত "হাত দ্বারা" কে আর এর মধ্যে একটি গুণ করুন এবং কোনও কলাম 9 এর চেয়ে বেশি হয়ে গেলে রিটার্ন মান সেট করুন, কারণ এর অর্থ হ'ল একটি বহন ঘটেছে।

আশ্চর্যজনকভাবে, এটি আমার প্রথম প্রয়াসের চেয়ে কম ছিল যা যুক্তি হিসাবে স্ট্রিং নিয়েছিল took

f(a,b){int*q,r[10]={0},*p=r,R=0,B;for(;a;a/=10)for(q=p++,B=b;B;B/=10)R|=(*q+++=a%10*(B%10))>9;return R;}

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

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