আনকমন ফ্যাক্টর নম্বর


15

একটি চ্যাট বার্তার উপর ভিত্তি করে

চ্যালেঞ্জ

একটি ইনপুট নম্বর দেওয়া হয়েছে n > 9, শীর্ষস্থানীয় শূন্যগুলি উপেক্ষা করে এর বিপরীতটি নির্মাণ করুন। এর পরে, যে সংখ্যা এবং তার রিভার্স প্রতিটি মৌলিক উত্পাদকই আপনাকে একটি তালিকা গঠন করা হবে না কমন আছে। ইনপুটটির আনকমন ফ্যাক্টর নম্বর তৈরি করতে সেগুলিগুলিকে একসাথে গুণ করুন।

অথবা, এটি অন্য কোনও উপায়ে বলতে গেলে: যদি rev(n)পূর্ণসংখ্যার দশমিক বিপরীতকে চিহ্নিত করে n, এর গুণফলের গুণফল গণনা করুন nএবং rev(n)এর বর্গ দ্বারা বিভক্ত করুন gcd(n, rev(n))

আউটপুট যে নম্বর।

কাজের উদাহরণ

উদাহরণস্বরূপ, এর 2244বিপরীতে 4422। প্রথমটির [2, 2, 3, 11, 17]প্রধান কারণগুলি এবং বিপরীতগুলির প্রধান কারণগুলি [2, 3, 11, 67]। সংখ্যাগুলি বহুগুণে নেই [2, 17, 67], তাই2278 আউটপুটও।

অন্য উদাহরণের জন্য, এর 1234বিপরীতে 4321। পণ্যটি হ'ল 5332114এবং জিসিডি 1তাই আউটপুট 5332114

আরও স্পষ্টতা

স্পষ্টতই একটি প্যালিনড্রমিক সংখ্যার তার বিপরীতগুলির সাথে তার সমস্ত কারণগুলি সমান হবে, সুতরাং এ জাতীয় ক্ষেত্রে আউটপুট 1( n*n/n^2)। স্পষ্টতই, উদাহরণস্বরূপ, আউটপুটটির জন্য সমস্ত কারণগুলির গুণন (যেমন, জিসিডি 1 - ইনপুট এবং এর বিপরীত সহ-প্রধান) হওয়াও সম্ভব 1234

বিধি

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

উদাহরণ

in
out

17
1207

208
41704

315
1995

23876
101222302

আমরা কি ধরে নিতে পারি ইনপুটটিতে নেতৃস্থানীয় জিরো থাকবে না?
মিঃ এক্সকোডার

1
@ মিঃ এক্সকোডার হাহ? আপনি মানে শূণ্যপুঞ্জের পিছনে?
এরিক আউটগলফার

@ এরিকথ আউটগল্ফার নো, নেতৃস্থানীয় শূন্যগুলি হ'ল আমার অর্থ। এছাড়াও
মিঃ এক্সকোডার

3
দ্বিতীয় পরীক্ষার 1995
কেসটি

1
ধন্যবাদ লুইস মেন্ডো ভাল সংযোজন।
অ্যাডমবর্কবার্ক

উত্তর:


6

05 এ বি 1 ই , 6 বাইট

কোড

‚D¿÷P

05AB1E ব্যবহার করে এনকোডিং । এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

‚        # Get the array [input, reversed(input)]
  D       # Duplicate that array
   ¿      # Calculate the GCD of the array
    ÷     # Divide each element in the array by the GCD
     P    # Product of that array

চ্যালেঞ্জটিতে প্রদত্ত সূত্রের একটি দুর্দান্ত, সহজ বিকল্প - +1। জাপটে একই চেষ্টা করে তবে এটি আমার কাছে আগে থেকে 2 বাইট বেশি দীর্ঘ হয়েছিল longer
শেগি

5

জে, 18 বাইট

".@|.@":(*%*:@+.)]

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

বিকল্পভাবে (দ্বিতীয়টির জন্য @ আদনানের পদ্ধতির কৃতিত্ব),

".@|.@":(*%2^~+.)]
".@|.@":*/@(,%+.)]

জে, 15 বাইট (@ মাইল সমাধান)

*/@(,%+.)|.&.":

ব্যাখ্যা

এটি ওপি দ্বারা প্রদত্ত অ্যালগরিদমের কেবল একটি সরল বাস্তবায়ন।

".@|.@":(*%*:@+.)]
                 ]  n (input)
".@|.@":            n reversed
         *          Product of the two
          %         Divided by
              +.      GCD
           *:         Squared

ব্যাখ্যা, @ মাইল সমাধান

খুব চালাক.

*/@(,%+.)|.&.":
         |.&.":  Reverse digits
           &.":   Convert to string, apply next function, and undo conversion
         |.       Reverse
   (,%+.)        Divide n and reverse(n) by GCD of both
*/               Product

2
15 বাইট সহ*/@(,%+.)|.&.":
মাইল

@ মাইলস আমি আন্ডার ট্রিকটি পছন্দ করি
কোল

@ মাইলগুলি যা সত্যই চতুর।
জোনা

15 বাইট সংস্করণটি কেন আপনার প্রধান সমাধান হিসাবে জমা করবেন না?
শেগি

পছন্দ করুন আমার প্রবণতাটি "এটি আমার নিজের থেকে উল্লেখযোগ্যভাবে পৃথক" এর সাথে প্রতিক্রিয়া জানানো হয়েছিল তবে এটি আসলে মাত্র দুটি অপটিমাইজেশন। আমি পরে এটি আপডেট করতে হবে।
কোলে


3

দাম্মিট, আমার ঠিক একই ছিল ( DUপরিবর্তে )
ইটিএইচ প্রডাকশনগুলি

ইথ প্রডাকশনস হ্যাঁ একটি পূর্ণসংখ্যার অঙ্কগুলি বিপরীত করে কিন্তু পূর্বে পূর্ণসংখ্যায় রূপান্তর করে না।
এরিক আউটগলফার

2

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

সংখ্যাটি বিপরীত করতে এতগুলি বাইট :(

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

n=>n*(x=[...n].reverse().join``)/(g=(y,z)=>z?g(z,y%z):y)(n,x)**2

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

o.innerText=(f=
n=>n*(x=[...n].reverse().join``)/(g=(y,z)=>z?g(z,y%z):y)(n,x)**2
)(i.value="10");oninput=_=>o.innerText=f(i.value)
<input id=i min=10 type=number><pre id=o>



2

আর , 108 89 বাইট

-19 বেটস তার জিসিডি অ্যালগরিদমের জন্য প্ল্যানাপাসকে ধন্যবাদ

function(n){k=1:nchar(n)-1
q=1:n
(r=sum(n%/%10^k%%10*10^rev(k)))*n/max(q[!r%%q&!n%%q])^2}

এটি আকার 4*nবাইটের কমপক্ষে একটি ভেক্টর বরাদ্দ করার চেষ্টা করবে (এবং আমি মনে করি 4 টি হিসাবে বেশি), সুতরাং এটি যথেষ্ট পরিমাণের জন্য মেমরির ত্রুটি ছুঁড়ে দেবে n

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



1

এমএটিএল , 13 12 11 বাইট

tVPU*1MZdU/

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

ব্যাখ্যা

t      % Imoplicit input: number. Duplicate
VPU    % String representation, flip, evaluate. This reverses digits
*      % Multiply input and reversed-digit version
1M     % Push the input and reversed-digit version again
Zd     % Greatest common divisor
U      % Square
/      % Divide. Implicit display



1

জাপট , 13 12 11 বাইট


sw
*V/yU ²

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


ব্যাখ্যা

পূর্ণসংখ্যার অন্তর্নিহিত ইনপুট U। শুরুতে খালি লাইনটি নিম্নলিখিত লাইনটি ওভাররাইট করা থেকে বাধা দেয়U

sw

Uএকটি স্ট্রিং ( s) এ রূপান্তর করুন , এটি বিপরীত করুন ( w), পূর্বে একটি পূর্ণসংখ্যায় রূপান্তর করুন এবং ভেরিয়েবলকে বরাদ্দ করুন V

*V

গুন Uদ্বারা V

/

বিভক্ত করা.

yU

এর জিসিডি Vএবং U

²

চৌকাকৃতি। ফলাফল পূর্ণসংখ্যার অন্তর্নিহিত আউটপুট।


বিকল্প, 13 বাইট

আমি ব্যবহার করতে সক্ষম হতে চাই কারণ N

NpUsw)mxNry)×

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


জিসিডি সহ স্মার্ট ট্রিক। আমি মনে করি যে অ্যালগরিদম সম্ভবত বর্তমান জেলি সমাধানের চেয়ে কম হতে পারে ...
ETH প্রোডাকশনগুলি

জেলির জিসিডিতে ইথ প্রডাকশনগুলি দীর্ঘ হওয়া শেষ করে ...
এরিক দ্য আউটগল্ফার

@ এরিকথ আউটগল্ফার আমার একটি 8-বাইট সংস্করণ রয়েছে "তবে এটিতে দুটি ডায়াডের ফলাফল বিভক্ত করা আছে এবং আমি কীভাবে সঠিকভাবে এটি করব তা নিশ্চিত নই ...
ইটিএইচ প্রডাকশনগুলি


1

x86 মেশিন কোড, 39 বাইট

;;; Obtain a "reversed" version of the input value.
;;; 
;;; To do this, each iteration of a loop, we take the input value modulo 10,
;;; add that to our accumulator (EDI), multiply the accumulator by 10, and
;;; divide the input value by 10. x86's DIV instruction does both modulo and
;;; division as a single operation, with the cost of clobbering two output
;;; registers (EAX and EDX). We clobber the input value throughout the loop
;;; (the way we know we're done is when it becomes 0---that means that we have
;;; pulled all of the digits off of it), so we need to save a copy of it first.
89 C8           mov    eax, ecx     ; make copy of input
31 FF           xor    edi, edi     ; clear accumulator
6A 0A           push   10
5E              pop    esi          ; set ESI to 10
             Reverse:
0F AF FE        imul   edi, esi     ; accumulator *= 10
99              cdq                 ; zero EDX in preparation for division
F7 F6           div    esi          ; EDX:EAX / 10 (EAX is quot, EDX is rem)
01 D7           add    edi, edx     ; accumulator += remainder
85 C0           test   eax, eax     ; was quotient 0?
75 F4           jnz    Reverse      ; if not, keep looping and extracting digits

;;; At this point, EAX is 0 (clobbered throughout the loop),
;;; ECX still contains a copy of our original input, and
;;; EDI contains the 'reversed' input.
89 C8           mov    eax, ecx     ; make another copy of the input
F7 E7           mul    edi          ; multiply input (implicit EAX operand)
                                    ;  by 'reversed', with result in EDX:EAX
                                    ;  (note: EDX will be 0)

;;; Compute the greatest common denominator (GCD) of the input and
;;; the 'reversed' values, using a subtraction-based algorithm.
             GCD_0:
39 CF           cmp    edi, ecx     ; compare the two values
72 02           jb     GCD_1        ; go to GCD_1 if less than
87 F9           xchg   ecx, edi     ; swap values
             GCD_1:
29 F9           sub    ecx, edi     ; subtract
75 F6           jnz    GCD_0        ; if sum != 0, go back to the top

;;; Square the GCD.
0F AF FF        imul   edi, edi

;;; Divide the product of input and 'reversed' by the square of the GCD.
;;; Remember from above that the product of input and 'reversed' is in
;;; the EAX register, and we can assume EDX is 0, so we don't need to do
;;; a CDQ here in preparation for the division. Using EAX as the implicit
;;; source operand saves us a byte when encoding DIV.
F7 F7           div    edi

;;; The DIV instruction placed the quotient in EAX,
;;; which is what we want to return to the caller.
C3              ret

উপরের ফাংশনটি নির্দিষ্ট ইনপুট প্যারামিটারের "অস্বাভাবিক ফ্যাক্টর সংখ্যা" গণনা করে। রেজিস্টার-ভিত্তিক _ফেস্কল কল কলিং কনভেনশন অনুসরণ করে , প্যারামিটারটি ECXরেজিস্টারে পাস করা হয় । EAXসমস্ত x86 কলিং কনভেনশনগুলির মতো, ফলাফলটি রেজিস্টারে ফিরে আসে ।

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

এরকম কমপ্যাক্ট ফর্মটিতে লেখার জন্য এটি একটি ভয়ঙ্কর দীর্ঘ সময় নিয়েছিল তবে এটি একটি মজাদার অনুশীলন ছিল। প্যাঁচাল প্রচুর সবচেয়ে অনুকূল রেজিস্টার সিডিউলিং সম্ভব পেতে, এক্স 86 এর সীমাবদ্ধতার মধ্যে DIVনির্দেশ এর অন্তর্নিহিত operands এবং স্বল্প এনকোডিং ব্যবহার করার চেষ্টা MULএবং XCHGনির্দেশাবলী যখনই সম্ভব। আমি আরও কৌতূহলী হয়ে উঠছি যে কেউ এটি আরও ছোট করার জন্য অন্য কোনও উপায় সম্পর্কে ভাবতে পারে কিনা। শেষ পর্যন্ত আমার মস্তিষ্ক বেশ ভাজা হয়ে গেল। পরের বার আপনি একটি সংকলক দেখতে ধন্যবাদ! (যদিও এই হল উপায় কি একটি কম্পাইলার উৎপন্ন হবে বেশী ভালো কোড ... বিশেষ করে যদি আপনি আকার সীমাবদ্ধতার ছাড়া সামান্য এটা tweaked, ভালো জিনিস সরানোর XCHG।)




0

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

আমি ক্রিভ এরিটিম ধন্যবাদ ।

def f(n):g=int(`n`[::-1]);print n*g/gcd(n,g)**2
from fractions import*

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

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

দ্রষ্টব্য যে পাইথন 2 এ, আপনি এই math.gcd()পদ্ধতিটি ব্যবহার করতে পারবেন না এবং আপনাকে অবশ্যই এটি "হাত ধরে" করতে হবে।

y=lambda a,b:b and y(b,a%b)or a
def f(n):g=int(`n`[::-1]);print n*g/y(n,g)**2

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


পাইথন 3 এর gcdমতো রয়েছে fractions.gcd
সম্পূর্ণমানবিক

@ আইকরিওয়ারিটিম এ কারণেই আমি পাইথন ২ এ সমাধান করার সিদ্ধান্ত
নিয়েছি

... ওফস, আমি পাইথনকে বোঝাই 2 পাইথন 3 আছে math.gcd
সম্পূর্ণমানবিক

@ আইক্রিওয়ারিটিম সম্পন্ন হয়েছে।
মিঃ এক্সকোডার


0

জাভা 8, 158 150 148 138 125 123 116 107 + 19 বাইট

i->{int o,r,f,t=f=i;i=r=i.valueOf(""+new StringBuffer(t+"").reverse());while(t>0)t=i%(i=t);return f/i*r/i;}

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


1
যখন লুপ, আপনি প্রতিস্থাপন করতে পারেন t!=0 দ্বারা t>0, যেহেতু টি নেতিবাচক হতে হবে। f*r/(i*i)হিসাবে একই f/i*r/i। আপনি ড্রপ করতে পারেন f=t;এবং r=i;যদি তোমাদের মধ্যে নিয়োগ চেইন iএবং t
লুক

1
লুপটি while(t>0)t=i%(i=t);(-11 বাইট) হিসাবে লেখা যেতে পারে ।
নেভায়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.