ডিসারিয়াম দ্বিধা


31

ডিসারিয়াম দ্বিধা

একটি ডিসারিয়াম এমন একটি সংখ্যার হিসাবে সংজ্ঞায়িত করা হয় যার:

নিজ নিজ অবস্থানের সাথে চালিত এর অঙ্কগুলির যোগফল মূল সংখ্যার সমান


আপনার কার্য :

বিভেদ হিসাবে শ্রেণিবদ্ধ সংখ্যাগুলির সাথে আপনার এক অদ্ভুত আবেশ রয়েছে। বৈষম্যের উপায়গুলি অনুসরণ করার প্রয়োজনীয়তা আপনার মধ্যে এতটাই দুর্দান্ত যে আপনি কোনও প্রদত্ত বইতে নন-ডিসারিয়াম সংখ্যাযুক্ত পৃষ্ঠাটি পড়তে অস্বীকার করছেন। আপনার দুটি বিগ সমস্যা রয়েছে:

  1. তোমার অধ্যাপক মাত্র পৃষ্ঠা থেকে আপনার পাঠ্যপুস্তক পড়তে নিয়োগ nপৃষ্ঠায়m
  2. আপনি গত সপ্তাহে আপনার মাথায় সত্যিই আঘাত করেছেন এবং কোনও সংখ্যাকে ডিসঅরিয়াম হিসাবে বিবেচনা করা হয় তবে কীভাবে প্রোগ্রামিকভাবে নির্ধারণ করবেন তা মনে হয় না।

সময় মূল উপাদান তাই আপনার পাতাগুলি পড়তে হবে তা নির্ধারণের জন্য কোডটি যতটা সম্ভব সংক্ষিপ্ত হওয়া দরকার।

আপনি একজন সমেত পরিসীমার মধ্যে disarium সব শনাক্ত করতে হবে nমাধ্যমে m

অসম্পূর্ণতার উদাহরণ :

89 = 8 1 + 9 2

135 = 1 1 + 3 2 + 5 3

518 = 5 1 + 1 2 + 8 3

এটি কোড-গল্ফ, তাই বাইটসের ন্যূনতম সংখ্যাটি জয়!

এখানে A032799 এর সম্পূর্ণ ক্রম রয়েছে ।


@ ফ্যাটালাইজ পরিসীমা অন্তর্ভুক্ত, আমি এটি সম্পাদন করতে প্রশ্নটি সম্পাদনা করব।
ক্রেগআর 8806

কোনও গ্যারান্টিযুক্ত সীমা আছে nএবং mকি? খুব বড় বিভেদ আছে (12157692622039623539), উত্তরগুলি কি এটি সনাক্ত করতে সক্ষম হবে?
লিন

@ লিন প্রদত্ত যে ইতিমধ্যে বেশ কয়েকটি সমাধান রয়েছে, আমি বলব সীমার কোনও সীমাবদ্ধতা থাকা উচিত নয়।
ক্রেগআর 8806

2
@Lynn। কোনও বিচ্ছিন্নতা> 22 ডিজিট নেই, সুতরাং কোনও উপায়ে ইতিমধ্যে সীমাবদ্ধ।
ম্যাড পদার্থবিজ্ঞানী

3
@ মিস্তাহা ফিজিনস দয়া করে প্রশ্নের নীচে ওইআইএস লিঙ্কটিতে যান। আপনি একটি প্রমাণ পাবেন যা দেখায় যে ডিসারিয়াম ক্রমটি আসলেই সীমাবদ্ধ।
ক্রেগআর 8806

উত্তর:


11

পার্ল 6 , 40 39 বাইট

{grep {$_==sum .comb Z**1..*},$^a..$^b}

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

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

{                                     }  # A lambda.
                              $^a..$^b   # Range between the two lambda arguments.
 grep {                     },           # Return numbers from that range which satisfy:
               .comb Z  1..*             #  Digits zipped with the sequence 1,2,3,...,
                      **                 #  with exponentiation operator applied to each pair,
           sum                           #  and those exponents summed,
       $_==                              #  equals the number.

8

পাইথন 2, 98 89 88 84 বাইট

lambda n,m:[x for x in range(n,m+1)if sum(int(m)**-~p for p,m in enumerate(`x`))==x]

ভয়ঙ্কর। সংক্ষিপ্ত হবে। আরও ভাল দেখতে শুরু করা

এখানে আমার পুনরাবৃত্ত প্রচেষ্টা (86 বাইট):

f=lambda n,m:[]if n>m else[n]*(sum(int(m)**-~p for p,m in enumerate(`n`))==n)+f(n+1,m)

4 রাইট সংরক্ষণ করার জন্য @ রডকে ধন্যবাদ ! rangeথেকে enumerateইত্যাদি।


স্যুইচিংয়ে enumerate, আপনি int(n)পরিবর্তে ব্যবহার করতে পারেনint(`x`[p])
রড

7

পার্ল, 43 বাইট

map{say if$_==eval s/./+$&**$+[0]/gr}<>..<>

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

রেগেক্স সত্যই শক্তিশালী, ছেলেরা।

ব্যাখ্যা

কোডটি প্রথমটি করে যেটি ইনপুট হিসাবে দুটি পূর্ণসংখ্যা পড়া হয় <>এবং এর সাথে প্রথম থেকে দ্বিতীয় পর্যন্ত একটি পরিসীমা তৈরি করে ..। তখনই মান ব্যবহার mapএই পরিসীমা মাধ্যমে পুনরুক্তি করতে ফাংশন, এবং প্রতিটি মান নিম্নলিখিত কোড প্রয়োগ করা হয়: say if$_==eval s/./+$&**$+[0]/gr। এটিকে গীবির মতো মনে হয়, এবং এটি একরকম, তবে এখানে যা ঘটছে তা সত্যি।

mapপরোক্ষভাবে পরিবর্তনশীল তার বর্তমান মান সঞ্চয় করে $_। অনেক পার্ল ফাংশন এবং ক্রিয়াকলাপ যখন কোনও কিছুই না দেওয়া হয় তখন এই মানটি ব্যবহার করে। এর মধ্যে নিয়মিত প্রকাশ থাকে যেমন s///সাবস্টিটিউশন অপারেটর।

একটি প্রতিস্থাপন রেজেক্সের চারটি অংশ রয়েছে:

  1. স্ট্রিং হেরফের হতে হবে। সাধারণত, অপারেটরটি =~স্ট্রিংয়ে একটি রেজেক্স প্রয়োগ করতে ব্যবহৃত হয়, তবে যদি এই অপারেটরটি অনুপস্থিত থাকে তবে রেগেক্সটি অন্তর্ভুক্ত ভেরিয়েবলের সাথে প্রয়োগ করা হয় $_, যা mapফাংশনের মাধ্যমে আমাদের বর্তমান সংখ্যাটি অন্তর্ভুক্ত করে।
  2. স্ট্রিং অনুসন্ধান করতে। এই ক্ষেত্রে, আমরা ওয়াইল্ডকার্ড দ্বারা চিহ্নিত কোনও একক অ-নিউলাইন অক্ষর অনুসন্ধান করছি .। বাস্তবে, আমরা প্রতিটি স্বতন্ত্র অঙ্ক ক্যাপচার করছি।
  3. স্ট্রিং সঙ্গে প্রতিস্থাপন। আমরা +গাণিতিক প্রকাশের পরে একটি প্লাস চিহ্নটি প্রতিস্থাপন করছি , কিছু ম্যাজিকাল পার্ল ভেরিয়েবলের সাথে মিশ্রিত যা সবকিছুকে উল্লেখযোগ্যভাবে সহজ করে তোলে।

বিশেষ স্কেলার ভেরিয়েবল $&সর্বদা সর্বশেষ সফল রেগেক্স ক্যাপচারের সম্পূর্ণতা ধারণ করে, যা এই ক্ষেত্রে একক অঙ্ক। বিশেষ অ্যারে ভেরিয়েবল @+সর্বদা শেষ সফল ম্যাচের পোস্টম্যাচ অফসেটের একটি তালিকা থাকে , অর্থাত ম্যাচের পরে পাঠ্যের সূচক । অবিলম্বে নিম্নলিখিত পাঠ্য $+[0]ইনডেক্স হয় । এর ক্ষেত্রে , আমরা অঙ্কটি ক্যাপচার করি এবং তত্ক্ষণাত্ পাঠ্যের ইনডেক্সটি (যথা )) হয় 1, যা আমাদের প্রকাশক। সুতরাং, আমরা (1) এর শক্তিতে (1) বাড়াতে চাই এবং 1 পেতে চাই। আমরা 2টিকে 2 এর পাওয়ার বাড়াতে চাই এবং 9 পেতে চাই We আমরা 3 এর পাওয়ারে 5 বাড়াতে চাই এবং 125 পেতে চাই।$_$&135113535$&$+[0]

যদি ইনপুটটি ছিল 135, ফলাফলযুক্ত স্ট্রিং +1**1+3**2+5**3

  1. রেজেেক্স-সংশোধনকারী পতাকাগুলি। এখানে আমরা দুটি রেগেক্স পতাকা ব্যবহার করছি - /gএবং /r/gপ্রথমটি খুঁজে পাওয়ার পরে দোভাষীকে প্রতিস্থাপন চালিয়ে যেতে বলে (অন্যথায় আমরা শেষ করতাম +1**135)। /rদোভাষীকে মূল স্ট্রিংটি সংশোধন না করতে এবং তার পরিবর্তে স্ট্রিংটি প্রতিস্থাপনের পরে ফিরে আসার কথা বলে। এটি গুরুত্বপূর্ণ, কারণ অন্যথায় এটি ওভাররাইট $_হবে এবং তুলনার উদ্দেশ্যে আমাদের এটির প্রয়োজন।

পুরো প্রতিস্থাপনটি শেষ হয়ে গেলে, আমরা একটি গাণিতিক এক্সপ্রেশন পাই যা evalফাংশনটির সাথে মূল্যায়ন করা হয় । মূল সংখ্যাটির সাথে তুলনা করা হয় যার +1**1+3**2+5**3মধ্যে মূল্যায়ন করা 1 + 9 + 125 = 135হয় 135। যেহেতু এই দুটি সমান, কোড সংখ্যাটি মুদ্রণ করে।


সুন্দর সমাধান। (দ্রষ্টব্য যে এটি কাজ করবে না প্রথম ইনপুট 0 হয়, তবে আমি নিশ্চিত নই যে এটি গুরুত্ব দেয়)। map$_-eval s/./+$&**$+[0]/gr||say,<>..<>
দাদা

এবং :) এর "@+"চেয়ে 1 বাইট কম সংক্ষিপ্ত$+[0]
দাদা

7

জাভাস্ক্রিপ্ট (ES7), 105 91 89 88 83 79 82 81 বাইট

20 বি বাঁচানোর জন্য আরনাউল্ড এবং 6 বি বাঁচানোর জন্য ETHProductions ধন্যবাদ!

a=>b=>[...Array(b).keys()].filter(c=>c>=a&([...c+''].map(d=>c-=d**++e,e=0),!c))

ব্যবহার

একটি চলককে ফাংশনটি বরাদ্দ করুন এবং এটি সর্বনিম্ন এবং সর্বোচ্চ যুক্তি হিসাবে দিন। উদাহরণ:

f=a=>b=>[...Array(b).keys()].filter(c=>c>=a&([...c+''].map(d=>c-=d**++e,e=0),!c))
f(0)(90)

আউটপুট

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 89]

আরও গল্ফিং

এটি বেশ ভাল-গল্ফড বলে মনে হয় তবে উন্নতির জন্য সর্বদা জায়গা থাকে ... আমার মনে হয়।


হ্যাঁ, এটি আসলে খানিকটা খাটো। ধন্যবাদ!
লুক

1
আপনি দুটি বাইট সংরক্ষণ করতে পরিবর্তন d**(e+1)করতে পারেন d**-~e
ইটিএইচ প্রডাকশনগুলি

টিপ দেওয়ার জন্য ধন্যবাদ, এটি যুক্ত। পাইথনকে পরাজিত করার আগে আরও 2 বাইট ...
লুক

আপনি &পরিবর্তে ব্যবহার করতে পারেন &&। আরও একটি বাইট যেতে হবে ...
Arnauld

আমি স্রেফ এটি আমার স্থানীয় অনুলিপিতে পরিবর্তন করেছি ... অনুমান করুন আপনি দ্রুত ছিলেন।
লুক

6

জাভাস্ক্রিপ্ট (ফায়ারফক্স 52+), 68 বাইট

f=(n,m)=>(e=0,[for(d of t=n+'')t-=d**++e],t||alert(n),n-m&&f(n+1,m))

পুনরাবৃত্তি ফাংশন যা মাধ্যমে আউটপুট alert। ফায়ারফক্সের বিকাশকারী সংস্করণে কাজ করে, যা আপনি এই পৃষ্ঠায় ডাউনলোড করতে পারেন । ফায়ারফক্সের পূর্ববর্তী সংস্করণগুলি **অপারেটরটিকে সমর্থন করে না এবং অন্য কোনও ব্রাউজার [for(a of b)c]সিনট্যাক্স সমর্থন করে না।

পরীক্ষার স্নিপেট

এটি .mapঅ্যারে বোঝার Math.powপরিবর্তে এবং পরিবর্তে ব্যবহার করে **, সুতরাং এটি ES6 সমর্থনকারী সমস্ত ব্রাউজারে কাজ করা উচিত।


6

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

Emigna ধন্যবাদ 2 বাইট সংরক্ষণ করা

ŸvygLySmOyQ—

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

Ÿ            # push [a .. b]
 vy          # for each
   gL        # push [1 .. num digits]
     yS      # push [individual digits]
       m     # push [list of digits to the power of [1..num digits] ]
        O    # sum
         yQ— # print this value if equal

ŸvygLySmOyQ—12 বাইট জন্য কাজ করা উচিত।
Emigna

5

পাইথন 3, 100 বাইট

lambda n,m:{*range(10),89,135,175,518,598,1306,1676,2427,2646798,0xa8b8cd06890f2773}&{*range(n,m+1)}

সংক্ষিপ্ততম পদ্ধতির নয়, তবে একটি দুর্দান্ত সুন্দর। চূড়ান্তভাবে অনেকগুলি বৈষম্য রয়েছে; একটি দুর্দান্ত প্রমাণের জন্য ওইআইএস পৃষ্ঠাটি দেখুন। এঁরা সকলেই।


এই ব্যবহার হার্ড-কোডিং যা ঘুলঘুলি হয় meta.codegolf.stackexchange.com/a/1063/55243 আমি সুপারিশ করবে আপনি পরিবর্তন আপনার উত্তর মান নিয়ম মাপসই
জর্জ

5
আমি মনে করি না যে এটি হার্ড-কোডিং নিয়ম লঙ্ঘন করে, কারণ প্রোগ্রামটি এখনও "কাজ করে" এবং আউটপুট হার্ড-কোডিং হয় না।
অ্যালেক্স হাওয়ানস্কি

4

আর, 100 বাইট

function(n,m,x=n:m)x[sapply(x,function(y)sum(as.integer(el(strsplit(c(y,""),"")))^(1:nchar(y)))==y)]

নামহীন ফাংশন যে লাগে nএবং m। আর হিসাবে সর্বদা, সংখ্যার ভেক্টরের মধ্যে পূর্ণসংখ্যা বিভাজন ক্লান্তিকর এবং প্রচুর বাইট খায়। এটি ফাংশনটি তুলনামূলকভাবে ধীর করে দেয় এবং কেবল 32-বিট পূর্ণসংখ্যার জন্য কাজ করে।


4

জেলি , 11 বাইট

D*J$S⁼
rÇÐf

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

@ মাইলসের কিছু সহায়তায় এটিকে 16 থেকে 11 এ নামান!

ব্যাখ্যা:

rÇÐf    Main link, arguments are m and n
r       Generate a list from m to n
 Ç      Invoke the helper link
  Ðf    And filter out all that don't return 1 on that link

D*J$S⁼  Helper link, determines if item is Disarium
D       Break input (the current item of our list in Main) into digits (135 --> [1, 3, 5])
  J$    Create a range from 1 to x, where x is the number of digits             [1, 2, 3]
 *      Raise each digit to the power of their respective index 
    S⁼  And return a 1 if the sum of powers is equal to the helper-link's input

আপনি Jসূচক পেতে ব্যবহার করতে পারেন । একটি সংক্ষিপ্ত উপায় হতে পারে D*J$S⁼আপনার দুটি লিঙ্ক এক সাথে
মাইল

প্রায় 20 সেকেন্ড আগে ঠিক এই সিদ্ধান্তে পৌঁছেছে। Thnx!
স্টেইনবার্গ

3

সিজেম , 23 বাইট

q~),\>{_Ab_,,:).#:+=},p

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

ব্যাখ্যা

q~                      Get and eval all input
  ),\>                  Get the range between m and n, inclusive
      {                 For each number in the range...
       _Ab               Duplicate and get the list of digits
          _,,:)          Duplicate the list, take its length, make the range from 1 to length
               .#        Vectorize with exponentiation; computes first digit^1, second^2, etc
                 :+      Sum the results
                   =     Compare to the original number
                    },  Filter the range to only numbers for which the above block is true
                      p Print nicely


3

পাইথন 2.X, 92 বাইট

lambda m,n:[k for k in range(m,n+1)if sum(int(j)**(i+1) for i,j in enumerate(list(`k`)))==k]

অকার্যকর শ্বেতস্পেস পরে (i+1), কিন্তু আপনি যখন প্রথম বন্ধনীর হাত থেকে মুক্তি পেয়ে যান তবে এটি কোনও সমস্যা নয় -~i
Yytsi

আমার চেষ্টাটি আপনার মতো হ'ল!
হ্যাশকোড 555

প্রায়। তোমার কাছে আছে list('k'), যা আমার কাছে নেই। তবে, আপনি এখনও সাদা
স্থানটি

3

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

একটি সম্পূর্ণ প্রোগ্রামের পদ্ধতির, বর্তমানে ল্যাম্বদা সমাধানের সমান দৈর্ঘ্য।

a,b=input()
while a<=b:
 t=p=0
 for x in`a`:p+=1;t+=int(x)**p
 if t==a:print a
 a+=1

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


হুম। আমি প্রায় সঠিক উত্তর সম্পর্কে ভেবেছিলাম, কিন্তু সাথে বিভ্রান্তির কারণে বাতিল করা হয়েছে input()। খুব সুন্দর! +1 টি।
ইয়াতসি

3

জাপট, 15 বাইট

òV f_¥Zì £XpYÄÃx

এটি অনলাইন পরীক্ষা! এটি ছিল আমার ওবারাওকন এবং আমার মধ্যে একটি সহযোগিতা।

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

òV f_¥Zì £XpYÄÃx   // Implicit: U, V = input integers
òV                 // Create the inclusive range [U...V].
   f_              // Filter to only the items Z where...
               x   //   the sum of
      Zì           //   the decimal digits of Z,
         £XpYÄÃ    //   where each is raised to the power of (index + 1),
     ¥             //   is equal to Z.
                   // Implicit: output result of last expression

জাপটের সর্বশেষতম সংস্করণে xএকটি ফাংশনটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে, যা আমাদের আরও একটি বাইট গল্ফ করার অনুমতি দেয়:

òV f_¥Zì x@XpYÄ

এটি অনলাইন পরীক্ষা!


2

ক্লোজার, 107 বাইট

#(for[i(range %(inc %2)):when(=(int(apply +(map(fn[i v](Math/pow(-(int v)48)(inc i)))(range)(str i))))i)]i)

সমীকরণটি কার্যকর করা অত্যন্ত দীর্ঘ।


(.pow(-(int v)48M)
কিছুটা

2

টিআই-বেসিক, 85 বাইট

Input 
For(I,X,Y
If I<=9 or sum(I={89,135,175,518,598,1306,1676,2427,2646798,12157692622039623539
Disp I
End

আমি জানতাম না হার্ড-কোডিংয়ের অনুমতি দেওয়া হয়েছিল। :)
আবেল টম

@ আবেলটম ওয়েল, এটি সত্যই সহায়তা করে যে এই সিরিজের কেবলমাত্র 20 টি শর্ত রয়েছে। এছাড়াও, টিআই-বেসিকটিতে সংখ্যাকে স্ট্রিংয়ে রূপান্তর করতে প্রচুর বাইট লাগে। কেবলমাত্র অন্যান্য সমাধানগুলি int(log(প্রতিটি সংখ্যায় হবে এবং তারপরে শক্তিগুলি করবে। সম্ভবত এটি সংক্ষিপ্ত, তবে আমি এটি সন্দেহ করি।
টিমটেক

এই ইনপুট পদ্ধতিটি অত্যন্ত চতুর কিন্তু ধরণের স্কেচি। আপনার FUNCমোডে থাকা দরকার এবং আপনার ইনপুট পয়েন্টটি অন্তর্ভুক্ত করতে উইন্ডোটি সেট আপ করতে হবে। আমার কাছে যথেষ্ট পোর্টেবল মনে হয় না।
Jakob

@ জ্যাকব কর্নেল ডিফল্টরূপে ক্যালকটি FUNCমোডে রয়েছে, যদিও আপনি ইনপুট রেজোলিউশন সম্পর্কে যা বলছেন তা আমি দেখতে পাচ্ছি। তবে, গল্ফ করার ক্ষেত্রে এই পদ্ধতিটি বেশ সাধারণ। আপনি সবসময় Prompt X,Yপরিবর্তে পারে ।
টিমটেক

2

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

n#m=[i|i<-[n..m],i==sum(zipWith(^)(read.pure<$>show i)[1..])]

ব্যবহারের উদাহরণ 5 # 600-> [5,6,7,8,9,89,135,175,518,598]

iব্যাপ্তি প্রতিটি নম্বর পরীক্ষা করুন [n..m]। অঙ্কগুলি iস্ট্রিং ( show) এ রূপান্তর করে এবং প্রতিটি চরকে একটি এক উপাদান স্ট্রিং ( pure) তৈরি করে যা আবার পূর্ণসংখ্যায় রূপান্তরিত হয় ( read)। [1..]ফাংশনটির মাধ্যমে সেই সংখ্যাগুলির বুদ্ধি অনুসারে জিপ করুন ^এবং নিন sum


2

পিএইচপি, 92 91 88 বাইট

3 বাইট সংরক্ষিত ধন্যবাদ @ অ্যালেক্সহাউয়ানস্কি

for([,$n,$m]=$argv;$n<=$m;$s-$n++?:print"$s,")for($i=$s=0;_>$b=($n._)[$i++];)$s+=$b**$i;

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; একটি পিছনে কমা মুদ্রণ। সাথে চালাও -r


1
তিনটি দিয়ে সংরক্ষণ করুনfor([,$n,$m]=$argv;$n<=$m;
অ্যালেক্স হাওয়ানস্কি

অদ্ভুত যে মুদ্রণ সেখানে কাজ করে কিন্তু প্রতিধ্বনি হয় না। আমি অনুমান করি কারণ প্রতিধ্বনি কিছুই ফেরায় না - এমনকি শূন্যও নয়, অদ্ভুতভাবে।
অ্যালেক্স হাওয়ানস্কি

@ অ্যালেক্সহাউয়ানস্কি: এটিও আশ্চর্যের বিষয় "$n"[index]এবং "_$n"[index]পার্স ত্রুটিগুলি তৈরি করে "89"[index]এবং $s="$n";$s[index]পুরোপুরি ঠিক থাকে।
তিতাস

হুঁ হ্যাঁ, এটি প্রথমে অদ্ভুত বলে মনে হয় তবে ডকগুলি যাচাই করার পরে তারা স্পষ্টভাবে বলেছে যে বৈশিষ্ট্যটি কেবল স্ট্রিং লিটারেলের জন্যই কাজ করে।
অ্যালেক্স হাওয়ানস্কি

("_$n")[index]
হি হি

2

গণিত, 59 বাইট

Select[Range@##,Tr[(d=IntegerDigits@#)^Range@Length@d]==#&]&

দু'জন পূর্ণসংখ্যার যুক্তি গ্রহণ এবং পূর্ণসংখ্যার একটি তালিকা ফিরিয়ে দেওয়া নামহীন ফাংশন। (d=IntegerDigits@#)^Range@Length@dউপযুক্ত শক্তিগুলিতে একটি সংখ্যার অঙ্কের তালিকা তৈরি করে; Tr[...]==#এই সংখ্যাটি-শক্তিগুলির যোগফল মূল সংখ্যার সমান কিনা তা সনাক্ত করে।


2

ম্যাটল্যাব, 88 73 বাইট

@(n,m)find(arrayfun(@(n)n==sum((num2str(n)-48).^(1:log10(n)+1)),n:m))+n-1

আসল উত্তর:

function g(n,m);a=n:m;a(arrayfun(@(n)n==sum((num2str(n)-'0').^(1:floor(log10(n))+1)),a))

num2str(n)-'0'nএটির একটি অঙ্ককে তার অঙ্কগুলির মধ্যে বিভক্ত করে এবং একটি ভেক্টর এটির সংখ্যার সংখ্যার সাথে 1:floor(log10(n))+1এককে ধরে রাখে n। একটি বেনাম ফাংশনে গল্ফের জন্য 15 বাইট সংরক্ষণ করে লগ করার জন্য ধন্যবাদ ।


1

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

n!m=[x|x<-[n..m],x==x#(length.show)x]
0#i=0
n#i=(div n 10)#(i-1)+mod n 10^i

এটি অনলাইন চেষ্টা করুন! ব্যবহার:5 ! 175

এই চেক সীমার মধ্যে প্রতিটি সংখ্যা nথেকে mযদি তার একটি disarium নম্বর এবং অত: পর বেশ বড় জন্য ধীর m


দ্রুততম সংস্করণ: (93 বাইট)

n!m=[x|x<-[0..9]++[89,135,175,518,598,1306,1676,2427,2646798,12157692622039623539],x>=n,x<=m]

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


1

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

r[]={0,0};f(n){if(n)f(n/10),r[1]=pow((n%10),*r)+r[1]+.5,r[0]++;else*r=1,r[1]=0;}g(m,x){for(;m<=x;m++){f(m);if(m==r[1])printf("%d,",m);}}

টিআইও-তে পাউডার সংজ্ঞায়িত করানো শিরোনাম কারণ কোনও কারণে এটি স্বর অন্তর্ভুক্ত করে নি। আমার কম্পিউটারটি করেছে, তাই আমি এটি দিয়ে রোল করব।

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


1

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

&:"@tFYAtn:^s=?@

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

&:        % Input two n, m implicitly. Push array [n n+1 ... m]
"         % For each k in that array
  @       %   Push k
  tFYA    %   Duplicate. Convert to decimal digits
  tn:     %   Duplicate. Push [1 2 ... d], where d is the number of digits
  ^       %   Element-wise power
  s       %   Sum of array
  =       %   Compare with previous copy of k: is it equal?
  ?       %   If so
    @     %     Push k
          %   End, implicit
          % End, implicit
          % Display stack, implicit

1

ব্যাচ, 115 বাইট

@for %%d in (0 1 2 3 4 5 6 7 8 9 89 135 175 518 598 1306 1676 2427 2646798)do @if %%d geq %1 if %%d leq %2 echo %%d

ব্যাচটিতে কেবল 32-বিট পাটিগণিত রয়েছে যার শেষ ডিসারিয়াম সংখ্যার তুলনা করার কোনও উপায় নেই, তবে আপনি যদি স্ট্রিং তুলনাতে জোর দিয়ে থাকেন তবে 402 বাইটের জন্য:

@echo off
for %%d in (0 1 2 3 4 5 6 7 8 9 89 135 175 518 598 1306 1676 2427 2646798 12157692622039623539)do call:c %1 %%d&&call:c %%d %2&&echo %%d
exit/b
:c
call:p %1 %2
set r=%s%
call:p %2 %1
:g
if %r:~,1% lss %s:~,1% exit/b0
if %r:~,1% gtr %s:~,1% exit/b1
if %r%==%s% exit/b0
set r=%r:~1%
set s=%s:~1%
goto g
:p
set s=%1
set t=%2
:l
set s=0%s%
set t=%t:~1%
if not "%t%"=="" goto l

1

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

for i in range(input(),input()+1):x=sum(int(`i`[n])**-~n for n in range(len(`i`)));print("",x)[x==i]

আমার এখনও এটি চালানোর সুযোগ হয়নি (আমার ফোনে এটি করা)।


এটি কাজ করে না। ভুল বাক্য গঠন এবং সংশোধন করা হলে, কেবল বুলিয়ান মানগুলি মুদ্রণ করে। সূচক 0 থেকে শুরু হয়, এটিও ভুল। এছাড়াও, আপনার ভিতরে বর্গাকার বন্ধনীগুলির প্রয়োজন নেই sum
Yytsi

এটি অসম্পূর্ণ সংখ্যার জন্য পরীক্ষা করছে না।
হ্যাশকোডে 55

@ হ্যাশকোড 55, স্থির (?)
ড্যানিয়েল

@ টুকুএক্স, এখন এটি আমার মনে হয় কাজ করা উচিত
ড্যানিয়েল

আমি কম্পিউটারে নেই, তবে এটি প্রতিটি পুনরাবৃত্তির উপর একটি নতুন লাইন মুদ্রণ করা উচিত, যেখানে iএকটি ডিসারিয়াম। এটি অনুমোদিত কিনা তা আমার কোনও ধারণা নেই তবে আমি বলব না কারণ আউটপুটটি খুব ফাঁকা হয়ে যায়।
Yytsi

1

স্কালা, 132 129 বাইট

(% :Int,^ :Int)=>for(i<- %to^)if(((0/:(i+"").zipWithIndex)((z,f)=>{z+BigInt(f._1.toInt-48).pow(f._2+1).intValue}))==i)println(i)

129 সম্পাদন করা থেকে লুপ এর পরিবর্তনশীল নামের জন্য পরিবর্তন &করতে iসংরক্ষিত তিনটি স্পেস।


ব্যাখ্যা

ইনপুট সীমার প্রতিটি মানের জন্য:

  • এটিকে একটি স্ট্রিংয়ে রূপান্তর করুন +""
  • zipWithIndexঅঙ্ক এবং এর সূচকের চার্টযুক্ত টিপলগুলির একটি তালিকা উত্পাদন করতে ব্যবহার করুন
  • প্রতিটি তালিকার ইনট মান বিয়োগ 48 (0-9 অবধি লাইনগুলি) এর তালিকা সূচক সমেত একের পাওয়ার (at 1 এ শুরু করতে) পাওয়ার তালিকায় ফোল্ড করুন
  • ফলাফল যদি ইনপুটটির সাথে মিলে যায় তবে এটি মুদ্রণ করুন

মন্তব্য

অবশেষে কীভাবে foldএবং কীভাবে zipWithIndexকাজ করা যায় তা শিখতে পেয়েছি । আমি অসন্তুষ্ট নই intধর্মান্তর, কিন্তু আমি এর succinctness সঙ্গে আনন্দিত foldএবং zipWithIndex


1

অক্টাভা, 88 87 বাইট

বাইট (f (x) -48 বনাম f (x) - '0') সংরক্ষণের জন্য ম্যাটডাব্লুএইচকে ধন্যবাদ

@(n,m,f=@num2str,a=n:m)a(a==cell2mat(arrayfun(@(x){sum((f(x)-48).^(1:nnz(f(x))))},a)))

চালানোর জন্য:

>> f=@(n,m,f=@num2str,a=n:m)a(a==cell2mat(arrayfun(@(x){sum((f(x)-'0').^(1:nnz(f(x))))},a))) 
>> f(0,1000)
ans = 
      1     2     3     4     5     6     7     8     9    89   135   175   518   598

ব্যাখ্যা

@(n,m,                                              % Create an anonymous function and pass it n and m as paramteres
    f=@num2str,                                     % Will be using the num2str mehtod twice, set the variable f to the handle to save on bytes
        a=n:m)                                      % Create a vector 'a' and populate it with the numbers n through m
            a(a==                                   % Logically index into a, where the values of a match Disarium numbers
                cell2mat(                           % Convert the cell array returned by arrayfun into a matrix, so we can use it in the logical index
                    arrayfun(@(x){                  % Call the following function on every element of a, using the index named 'x'
                        sum(                        % Sum the matrix that results from the following computation
                            (f(x)-'0')              % Convert the value at index x into a string, then break it into a matrix by subtracting the string '0'.
                                                    % This results in the matrix [1 3 5] for the number 135.
                                .^                  % Compute the element-wise power with the following matrix
                                    (1:nnz(f(x)))   % Create a matrix with the range 1 to the length of the number at index x. This results in the matrix 
                                                    % [1 2 3] for the number 135.
                        )                           % Closes the sum statement
                    },a)                            % Closes the arrayfun statement, passing the matrix a to be operated on
                )
            )

1

সি 175 169 বাইট

f(a,b){for(j=a;j<b;j++){n,i=0,x=0;s=0;n=j;while(n!=0){n/=10;i++;}a[i];n=j;while(n!=0){a[i-x-1]=n%10;n/=10;x++;}for(x=0;x<i;x++)s+=(int)pow(a[x],x+1);if(j==s)printf("%d ",s);}}

অবরুদ্ধ সংস্করণ:

void f(int a, int b)
{

  for(int j=a; j<b;j++)
  {
    int n,i=0,x=0;
    int s=0;
    n=j;

   //Convert each number from 'n' to 'm' and store it in an int array 
   while(n)
   {
     n/=10;
     i++;     
   }
   int a[i]; 

   n=j;       
   while(n)
   {
    a[i-x-1]=n%10;
    n/=10;
    x++;     
   }

  //Calculate sum of digits powered with their respective position
  for(x=0;x<i;x++)
   s+=(int)pow(a[x], x+1);

   //Print Desarium
   if(j==s)
    printf("%d ", sum);     
 }

}

কোনওভাবে ছোট করা যেতে পারে, তবে আমি এখনই এটি দেখতে পাচ্ছি না।

@ টুক্কাএক্স 6 বাইট সংরক্ষণের জন্য ধন্যবাদ।


উভয় n!=0পরিবর্তন করা যেতে পারে n
ইয়াতসি

তুমি ঠিক বলেছো, তা বুঝেই যায়!
আবেল টম

0

জাভা

s->{long i=0,j=0,c,d;for(;j!=s;){String []f=Long.toString(i).split("");for(d=0,c=0;d<f.length;)c+=Math.pow(Long.valueOf(f[d]),++d);if(i==c)j++;}return i;}

ব্যাখ্যা

s    - index
i    - iteration variable
j    - matches
c    - sum of each digit^its index
d    - index of digit in i

0

পাইথন 3: 131 বাইট

n=int(input())
m=int(input())
R=[x for x in range(n,m+1)]
O=[sum(map(int,str(x)))for x in R]
F=[(x**(O.index(x)))for x in O]
L=[x for x in F for w in R if x==w]
print(list(set(L)))

এই কোডটি তৈরি করার পরে, এটি স্পষ্ট হয়ে উঠেছে যে সীমিত সংখ্যক বৈষম্য রয়েছে, সুতরাং এটি সমাধানের বড় ইনপুটগুলির পক্ষে শক্তিশালী এতগুলি তালিকা বোধগম্যতা ব্যবহার না করে স্পষ্টভাবে এইগুলি পরীক্ষা করা আরও সম্ভাব্য।

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

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