অঙ্কের পণ্য


10

প্রদত্ত ধনাত্মক পূর্ণসংখ্যার সংখ্যা এন এর জন্য, সর্বনিম্ন প্রাকৃতিক এম এটি সন্ধানের জন্য একটি সম্পূর্ণ প্রোগ্রাম লিখুন যাতে এম এর অঙ্কগুলির গুণমান N সমান হয়। এন ১,০০,০০,০০০ এর চেয়ে কম হয়। যদি কোনও এম উপস্থিত না থাকে, মুদ্রণ -1। আপনার কোড কোনও ক্ষেত্রে 10 সেকেন্ডের বেশি গ্রহণ করা উচিত নয়।

Sample Inputs
1
3
15
10 
123456789
32
432
1296

Sample Outputs
1
3
35
25
-1
48
689
2899

4
1দান 1করা একটি গুরুত্বপূর্ণ পরীক্ষার কেস।
পিটার টেলর

1
আপনি আরও জটিল কেসগুলি যুক্ত করুন, যেমন আমি নীচের তিনটি ব্যবহার করেছি: 32, 432, 1296. যদি আপনি কোডারের জন্য অনুশীলন হিসাবে না রেখে থাকেন।
মেল্লামোকব

@ এস-চিহ্ন 26, এহ। ক্ষুদ্রতম সংখ্যা।
fR0DDY

আমি বিশ্বাস করি মজা করার জন্য আমাদের স্পষ্টত 387420489 (9 ^ 9) এবং 1000000000 পরীক্ষা করা উচিত।
asoundmove

2
কারণ এটি একটি পুরানো প্রশ্ন এবং ওপি নিষ্ক্রিয়, ভবিষ্যতের পোস্টগুলির জন্য এটি কেবল একটি নোট: বর্তমান মান ("কোন মেশিনে?) অনুসারে" 10 সেকেন্ড "অস্পষ্ট
ব্যবহারকারী 202729

উত্তর:


4

গল্ফস্ক্রিপ্ট, 45 43 40 অক্ষর

~9{{1$1$%!{\1$/1$}*}12*(}8*>{];-1}*]$1or

এমন সংস্করণ প্রতিস্থাপন করে যা ক্ষুদ্র প্রাইমগুলিকে শক্তিতে দলবদ্ধ করে না এবং এটি করার সময় 8 টি অক্ষর সংরক্ষণ করে। দ্রষ্টব্য: 12 = তল (9 লগ 10 / লগ 5)

স্বীকৃতি: @ মেল্লামোকব থেকে কৌতুক উপহাস করে দুটি অক্ষর সংরক্ষণ করা হয়েছে; 3 @ নবাবের ইঙ্গিত দিয়ে সংরক্ষণ করা হয়েছে।


1
কি! আপনি পরীক্ষা না করে গল্ফস্ক্রিপ্ট লিখতে পারেন? +1, 123456789 ব্যতীত, দেখতে ভাল লাগছে, এটি আমার মেশিনে 1 মিনিটেরও বেশি সময় নেয় এবং আমি প্রক্রিয়াটি মেরে ফেলেছি। 12345আমাকে -1 দিন, সুতরাং 123456789আমি যদি দীর্ঘ সময় অপেক্ষা করতে পারি তবে এটির পক্ষেও কাজ করা উচিত ।
আপনি

@ এস মার্ক, ধন্যবাদ দেখে মনে হচ্ছে আমি নিষ্পাপ ফ্যাক্টরিয়েশন অ্যালগরিদম দিয়ে দূরে যেতে পারি না।
পিটার টেলর

@ পিটার: আরও জটিল মামলার জন্য ভুল উত্তর দেয়। 32 -> 22222, হওয়া উচিত 48. 432 -> 2222333, হওয়া উচিত 689. 1296 -> 22223333, 2899 হওয়া উচিত etc. ইত্যাদি
মেল্লামব্যাক

@ মেল্লামোকব, ভালো কথা। আমার মনে হয় আমাকে আবার লিখতে হবে এবং পরীক্ষা করতে হবে।
পিটার টেলর

বাহ, 17 অক্ষর কম। আমার আরও ভাল অ্যালগরিদম দরকার, লল!
মেল্লামোকব

6

জাভাস্ক্রিপ্ট ( 84 78 76 74 72 70 68)

n=prompt(m="");for(i=9;i-1;)n%i?i--:(m=i+m,n/=i);alert(n-1?-1:m?m:1)

http://jsfiddle.net/D3WgU/7/

সম্পাদনা করুন: অন্যান্য সমাধান থেকে নেওয়া ইনপুট / আউটপুট ধারণা এবং সংক্ষিপ্ত আউটপুট যুক্তি।

সম্পাদনা 2:for লুপে অপ্রয়োজনীয় ধনুর্বন্ধনী সরিয়ে 2 টি অক্ষর সংরক্ষণ করা হয়েছে ।

সম্পাদনা 3: এর সাথে বিবৃতি whileহিসাবে লুপটি পুনরায় লিখে 2 টি অক্ষর সংরক্ষণ করা হয়েছে ।ifi++

সম্পাদনা করুন 4: সংরক্ষিত চলন্ত কাছাকাছি এবং এর অপারেশন কমিয়ে 2 অক্ষর i

5 সম্পাদনা করুন: যদি বিবৃতিটি আরও 2 টি অক্ষরে ত্রৈমাসিক বিন্যাসে রূপান্তর করে।

সম্পাদনা 6:i-- টেরিনারি এর সত্যিকারের অংশে সরানো 2 অক্ষর সংরক্ষণ করুন ++i


আপনি কেবল ফাংশনের জন্য অক্ষর গণনা করেছেন। এটি কি সম্পূর্ণ প্রোগ্রাম? আপনি কি এখানে এডোজোন ডটকম
fR0DDY

1
মনে হচ্ছে ideone এ spidermonkey সঙ্গে জাভাস্ক্রিপ্ট জন্য অনুরূপ ইনপুট মত তিনি লিঙ্ক - ideone.com/samples#sample_lang_112
আপনি

@ এফআর0 ডিডিওয়াই: ঠিক আছে, এখন এটি একটি সম্পূর্ণ প্রোগ্রাম :)
মেল্লামোকব

অবশেষে আমি আমার 69৯ টি চরিত্রকে কমিয়ে দিয়েছি তবে আপনি এখন একই ধরণের ধারণা এবং promptজিনিসটি দিয়ে তা করতে পারেন।
রাই-

m?m:1=>m||1
l4m2

4

জাভাস্ক্রিপ্ট, 88 72 78 74 69 68

জন্য (গুলি = '', i = 2, মি = ঢ = প্রম্পট (); আমি <মি আমি ++,) যখন {যদি (ঝ ((ঢ% i টি)!)> 9) {সতর্কতা (-1); ই ( )} N / = আমি; S + = আমি} সতর্কতা (গুলি)
4 টি অক্ষর দীর্ঘ, তবে আসলে একটি এক্সিকিউটেবল স্ক্রিপ্ট (কোনও ফাংশনের বিপরীতে)।

সম্পাদনা করুন: অন্যান্য জাভাস্ক্রিপ্ট থেকে ধারণাগুলি ব্যবহার করে, আমি এটি এটিকে হ্রাস করতে পারি:

for(s='',i=9,n=prompt();i>1;i--)for(;!(n%i);n/=i)s=i+s;alert(n-1?-1:s?s:1)

অবশেষে! একটি 69-অক্ষরের সমাধান, লুপের জন্য কেবল 1 ব্যবহার করে;)

for(s='',i=9,n=prompt();i>1;n%i?i--:[n/=i,s=i+s]);alert(n-1?-1:s?s:1)

ঠিক আছে, একটি কমা মুণ্ডিত।

for(i=9,n=prompt(s='');i>1;n%i?i--:[n/=i,s=i+s]);alert(n-1?-1:s?s:1)

গল্ফস্ক্রিপ্ট সমাধান হিসাবে একই সমস্যা। ইনপুটগুলি 32, 432 এবং 1296 এ ব্যর্থ হয় I আমি 9 থেকে শুরু করে পিছনের দিকে চলে যাওয়ার কারণ আছে এবং বামের পরিবর্তে ডানদিক থেকে কনটেনেট করার কারণ রয়েছে।
মেল্লামোকব


আমি "ন্যূনতম" অংশটি মিস করেছি, পরিবর্তন করেছি।
Ry-

@ এমনিটেক: এখনও ইনপুট '1' এর জন্য কাজ করে না। হ্যাঁ, আমাদের উত্তরগুলি প্রায় হুবহু এক হিসাবে প্রকাশিত হবে :-)
মেল্লামব্যাক

আহ, এটি আপনার চেয়ে 2 টি চরিত্রকে ছোট করতে সক্ষম হয়েছে! : ডি
রাই-

4

awk ( 63 61 59 58 57)

{for(i=9;i>1;$1%i?i--:($1/=i)<o=i o);print 1<$1?-1:o?o:1}

আমরা শুধুমাত্র একটি ইনপুট জন্য প্রোগ্রাম কল করছি। একাধিক ইনপুট কেবল নির্ভুলতা পরীক্ষা করতে দেওয়া হয়।
fR0DDY

3

পার্ল (75) (72)

$ d = শিফট; মানচিত্র {$ এম = $ _। $ এম, $ ডি / = $ _ অবধি $ d% $ _} বিপরীত ২.৯; প্রিন্ট $ d-1? -1: $ এম || 1

মেল্লামবকের জাভাস্ক্রিপ্ট কোড দ্বারা অনুপ্রাণিত; একটি পরামিতি দিয়ে চালানো বোঝানো


আপনি যদি প্যারামিটারের পরিবর্তে স্টিডিন ব্যবহার করেন তবে এটি কি ছোট হবে না?
সাউন্ডমেভ

3

গল্ফস্ক্রিপ্ট ( 60 57)

~[{9,{)}%{\.@%!},)\;.@@/.9>2$1>&}do])[.])@@{1>},+\9>[-1]@if$

~{9,{)}%{\.@%!},)\;.@@/.9>2$1>&}do])[.])@@{1>},+$\9>-1@if

সম্পাদন করা

ঠিক আছে, আমি মনে করি এই সংস্করণটি প্রতিটি ক্ষেত্রে এখন সঠিক আউটপুট দেয় :-)

সম্পাদনা 2

@ পিটারের পরামর্শ অনুসারে 3 টি চর বন্ধ করা হয়েছে।


1প্রদত্ত 1হওয়া একটি গুরুত্বপূর্ণ পরীক্ষার ক্ষেত্রে যে কারণে আমি উপরে মন্তব্য করেছি তা হ'ল এটি একটি ন্যক্কারজনক বিশেষ কেস - একমাত্র সংখ্যা যার জন্য 1আউটপুটে অঙ্ক প্রদর্শিত হবে। এবং এটি আপনার কোডটি ভঙ্গ করে, আমি ভয় করি।
পিটার টেলর

এটি 9 টিরও বেশি প্রাইম দ্বারা বিভাজ্য সংখ্যার জন্যও বিরতি দেয়
পিটার টেলর

@ পিটার: ঠিক আছে, আবার চেষ্টা করুন। আমি মনে করি এই সংস্করণটি এখন সমস্ত পরীক্ষার ক্ষেত্রে কাজ করে।
মেল্লামোকব

হ্যাঁ, মনে হচ্ছে। আপনি প্রথমটি মুছে ফেলা করে সরাসরি একটি অক্ষর সংরক্ষণ করতে পারেন [- আপনি [যখন কোনও মূল্যায়ন করেন তখন স্ট্যাকটিতে যদি আপনার কিছু না থাকে তবে এটি স্ট্যাকের মধ্যে সমস্ত ]কিছু নেয়। এবং আপনি সম্ভবত -1অ্যারেরে আবৃত না হয়ে এবং ফাইনালটি না সরিয়ে শেষের কাছাকাছি দুটি অক্ষর সংরক্ষণ করতে পারেন $
পিটার টেলর

@ পিটার: ধন্যবাদ, আরও তিনটি চর সংরক্ষণ করা হয়েছে!
মেল্লামব্যাক

3

Haskell,

f n=head([m|m<-[1..10^9],product(map(read.return)$show m)==n]++[-1])

পরিবর্তন করে এক গৃহস্থালির কাজ কামিয়ে ফেলো (show m)করতে $show m
FUZxxl

1
এটি হওয়া উচিত নয় m<-[1..9^9].... অন্যথায় এটি একটি অসীম তালিকা ... তাই -1কখনই ঘটবে না .... আমি ভুল হলে আমাকে সংশোধন করুন।
st0le

আমার মনে হয় না এটি 10 ​​সেকেন্ডের মধ্যে কাজ করতে পারে ....
st0le

2

উইন্ডোজ পাওয়ারশেল, 87

if(($n="$args")-le1){$n;exit}(-1,-join(9..2|%{for(;!($n%$_)){$_;$n/=$_}}|sort))[$n-eq1]

2

পার্ল (68)

$x=pop;map{$_-=11;$x/=$_,$@=-$_.$@until$x%$_}1..9;print!$x?-1:$@||1

দেখে মনে হচ্ছে যে জঞ্জাল স্ক্রিপ্টে নেমযুক্ত লুপটি এড়ানোর জন্য @ মেল্লামোকব জাভাস্ক্রিপ্টে ব্যবহার করেছেন তবে এটি পার্লের জন্য ভাল অনুবাদ করতে পারে তবে এটি আরও অনেক শব্দাবলীর সামনে আসে কারণ আপনি foreachস্টাইল লুপটি আর ব্যবহার করতে পারবেন না । এটি একটি করুণ বিষয়ও যে পার্ল মনে করে না যে mapএকটি লুপ অন্যথায় redoকাজে আসবে।


2

স্কাল 106 চর:

def p(n:Int,l:Int=9):List[Int]=if(n<=9)List(n)else
if(l<2)List(-1)else
if(n%l==0)l::p(n/l,l)else
p(n,l-1)

পরীক্ষা ও আমন্ত্রণ:

scala> val big=9*9*9*8*8*8*7*7*7*5*3 
big: Int = 1920360960

scala> p(big)                        
res1: List[Int] = List(9, 9, 9, 8, 8, 8, 7, 7, 7, 5, 3)

প্রতিক্রিয়া সময়: অবিলম্বে, 2Ghz সিপিইউতে <1s <


2

জেলি , 18 13 10 বাইট

×⁵RDP$€io-

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

13-বাইট সমাধান:

×⁵RDP$€iµ’¹¬?

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

ইনপুট সহ ব্যাখ্যা N:

׳R              create a range from 1 to N * 100 (replace ³ with ⁵ for a faster execution time)
   DP$           define a function ($) to get the product of the digits of a number,
      €          apply that function to each element in the list,
       iµ        get the index of the input N in the list (or 0 if it's not there), and yeild it as the input to the next link,
         ’¹¬?    conditional: if the answer is 0, then subtract one to make it -1, otherwise, yeild the answer

18-বাইট সমাধান:

D×/
×⁵RÇ€i
Ç⁾-1¹¬?

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

D×/        product of digits function, takes input M
D          split M into digits,
 ×/        reduce by multiplication (return product of digits)

×⁵RÇ€i     range / index function
×⁵R        make a range from 1 to N*10,
   ǀ      run the above function on each of the range elements,
     i     get the index of N in the result, or 0 if it's not there

Ç⁾-1¹¬?    main function:
Ç    ¬?    run the line above and check if the answer is null (0)
 ⁾-1       if it is, return "-1",
    ¹      otherwise, return the answer (identity function).

শেষ লিঙ্কটি কেবলমাত্র 0 (জেলির ডিফল্ট মিথ্যা মান, কারণ সমস্ত তালিকাগুলি এক-সূচকযুক্ত) -1 এর সাথে প্রতিস্থাপন করবে। আপনি যদি 0 টি ওকে ভুয়া মান বিবেচনা করেন তবে প্রোগ্রামটি 8 বাইট


1
কিছু নোট: (1) আপনি প্রতিটি সহায়ক লিঙ্কটি কেবল একবার ব্যবহার করেন, তাই সহায়ক লিঙ্ক করার কোনও কারণ নেই। শুধু ব্যবহার করুন $ƊƲµ। (2) আউটপুট যখন স্ট্রিং -1এবং সংখ্যাটি -1অভিন্ন, সংখ্যা ব্যবহার করে 2 বাইট সংরক্ষণ করে। (3) Pজন্য সাধারণভাবে সংক্ষেপে হয় ×/। (4) ইনপুট ব্যর্থ 3125
ব্যবহারকারী 202729

@ user202729 আপনাকে অনেক ধন্যবাদ! আমি (1), (2) এবং (3) বাস্তবায়ন করেছি এবং তারা 6 বাইট সংরক্ষণ করেছে! যদি আমি ⁵ কে এ ³ এ পরিবর্তন করি তবে এটি 3125 ইনপুটটিতে কাজ করেছে তবে যথেষ্ট বিলম্বের পরে। আপনি কি জানেন যে আরও ভাল (এবং সংক্ষিপ্ত) উপায় আছে কিনা, বা আমার পদ্ধতির (যা আমি জানি সময়-জটিলতার দিক দিয়ে অবশ্যই দ্রুততম নয়) এটি যতটা ভাল পাবে?
হ্যারি

1
আমার মনে হয় _¬$কাজটি করা উচিত’¹¬?
ডাইলানান

1
o-এমনকি আরও খাটো।
ব্যবহারকারী 202729

@ অল্লান আপনাকে ধন্যবাদ - আমি লক্ষ্য করেছি যে µআমি কেবল এটি ছাড়া ব্যবহার করতে পারি$ 2 টি বাইট সংরক্ষণ ! তবে আমি বুঝতে পেরেছিলাম যে o-আমি কেবল পুরোটা বাদ দিতে পারি µএবং 3 বাইট সংরক্ষণ করতে পারি !
হ্যারি


0

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

f=lambda n,a=0,u=1,i=9:n<2and(a or 1)or-(i<2)or n%i<1and f(n/i,a+i*u,u*10)or f(n,a,u,i-1)

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

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

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