আমি কি নিখুঁত (সংখ্যা)?


26

এটি আমার প্রথম চ্যালেঞ্জ!

পটভূমি

নিখুঁত সংখ্যাটি একটি ধনাত্মক পূর্ণসংখ্যার, এটি নিজে বাদে তার সমস্ত বিভাজকের যোগফলের সমান।
তাই 6নিখুঁত সংখ্যা 1 + 2 + 3 = 6
অন্যদিকে 12না, কারণ 1 + 2 + 3 + 4 + 6 = 16 != 12

কার্য

আপনার কাজটি সহজ, একটি প্রোগ্রাম লিখুন, যা দেওয়া nহিসাবে এই বার্তাগুলির মধ্যে একটি মুদ্রণ করবে :

আমি একটি নিখুঁত সংখ্যা, কারণ d1 + d2 + ... + dm = s == n
আমি নিখুঁত সংখ্যা নই, কারণd1 + d2 + ... + dm = s [<>] n

যেখানে বাদে
d1, ... dmসমস্ত বিভাজন রয়েছে । সমস্ত বিভাজকের যোগফল (আবার, ছাড়া )। হয় হয় (যদি ) বা (যদি ) হয়।nn
sd1, ..., dmn
[<>]<s < n>s > n

উদাহরণ

জন্য nহচ্ছে 6"আমি একটি নিখুঁত সংখ্যা কারণ 1 + 2 + 3 = 6 == 6":
জন্য nহচ্ছে 12: "আমি না একটি নিখুঁত সংখ্যা am, কারণ 1 + 2 + 3 + 4 + 6 = 16 > 12"
জন্য nহচ্ছে 13: "আমি নিখুঁত সংখ্যা নই, কারণ 1 = 1 <13"

বিধি

  • nআপনার ভাষার মানের চেয়ে বড় নয় int
  • আপনি nস্ট্যান্ডার্ড ইনপুট থেকে, কমান্ড লাইন আর্গুমেন্ট থেকে বা কোনও ফাইল থেকে পড়তে পারেন ।
  • আউটপুট বার্তাটি স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করতে হবে এবং আউটপুটে কোনও অতিরিক্ত অক্ষর উপস্থিত হতে পারে না (এটির পিছনে সাদা স্থান বা নিউলাইন থাকতে পারে)
  • আপনি কোনও বিল্ট-ইন বা লাইব্রেরি ফাংশন ব্যবহার করতে পারবেন না যা আপনার জন্য টাস্কটি সমাধান করবে (বা এর মূল অংশ)। না GetDivisors()বা এরকম কিছু।
  • অন্যান্য সমস্ত স্ট্যান্ডার্ড ফাঁকগুলি প্রযোজ্য।

বিজয়ী

এটি তাই বাইট জেতে সংক্ষিপ্ততম কোড !


@ অরলপ এটি নয়, আমি চ্যালেঞ্জটি সম্পাদনা করেছি, তার জন্য ধন্যবাদ।
জেরেজস

7
আপনি কেন =এবং ==একই সমীকরণে ব্যবহার করবেন ? ওটা কোন অর্থ প্রকাশ করে না. এটি d1 + d2 + ... + dm = s = nআইএমও হওয়া উচিত ।
orlp

আপনি উদাহরণ এবং ইনপুট উদাহরণস্বরূপ কিছু ইনপুট এবং আউটপুট দিতে পারেন?
জাগারব

14
@ জেরেজেস এটি অযৌক্তিক। কিছু বরাদ্দ করা হচ্ছে না। কেবল তুলনা করা।
orlp

1
@orlp এটি উদ্দেশ্য।
জেরেজস

উত্তর:


4

পাইথ, 81 বাইট

jd[+WK-QsJf!%QTStQ"I am"" not""a perfect number, because"j" + "J\=sJ@c3"==<>"._KQ

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

                                 implicit: Q = input number
               StQ               the range of numbers [1, 2, ..., Q-1]
          f                      filter for numbers T, which satisfy:
           !%QT                     Q mod T != 0
         J                       save this list of divisors in J
      -QsJ                       difference between Q and sum of J
     K                           save the difference in K

jd[                              put all of the following items in a list
                                 and print them joined by spaces: 
                  "I am"           * "I am"
   +WK                  " not"       + "not" if K != 0
"a perfect number, because"        * "a perfect ..."
j" + "J                            * the divisors J joined by " + "
       \=                          * "="
         sJ                        * sum of J
            c3"==<>"               * split the string "==<>" in 3 pieces:
                                        ["==", "<", ">"]
           @        ._K              and take the (sign of K)th one (modulo 3)
                       Q           * Q

9

জাভা, 255 270 বাইট (বেস 17 এ স্টিল এফএফ)

class C{public static void main(String[]a){int i=new Integer(a[0]),k=0,l=0;a[0]=" ";for(;++k<i;)if(i%k<1){l+=k;a[0]+=k+" ";}}System.out.print("I am "+(l==i?"":"not ")+"a perfect number, because "+a[0].trim().replace(" "," + ")+" = "+l+(l==i?" == ":l<i?" < ":" > ")+i);}}

এবং আরও পঠনযোগ্য সংস্করণ:

class C {
    public static void main(String[] a) {
        int i = new Integer(a[0]), k = 0, l = 0;
        a[0] = " ";
        for(; ++k<i ;){
            if (i % k == 0) {
                l += k;
                a[0] += k + " ";
            }
        }
        System.out.print("I am " + (l == i ? "" : "not ") + "a perfect number, because " + a[0].trim().replace(" "," + ") + " = " + l + (l == i ? " == " : l < i ? " < " : " > ") + i);
    }
}

পূর্বে বিজোড় সংখ্যার জন্য কাজ করেনি, তাই আমাকে কয়েকটি জিনিস টুইট করতে হয়েছিল। কমপক্ষে আমি আবার বাইট কাউন্ট দিয়ে ভাগ্যবান হয়েছি। :)


l == আমি 255 এর বেশি কাজ করব?
দেওয়ানা

আমি জানি আপনার বাইট গণনাটি যদি নষ্ট করে তবে আপনি একটি [0] এর সর্বশেষ তিনটি (চারটি) ঘটনাকে 'স্ট্রিং বি' দিয়ে প্রতিস্থাপন করে তাদের জায়গায় 'বি' ব্যবহার করে অক্ষর সংরক্ষণ করতে পারেন
ক্রেগ

6

আর, 158 163 157 153 143 141 বাইট

আমার মনে হয় গল্ফের জন্য এখনও জায়গা আছে।
সম্পাদনা করুন: দিয়ে প্রতিস্থাপন if(b<n)'<'else if(b>n)'>'else'=='করা হয়েছে c('<'[b<n],'>'[b>n],'=='[b==n])paste(...)একটি দিয়ে প্রতিস্থাপিত হয় rbind(...)[-1]। আরও কয়েকটা বাইটের জন্য @ প্ল্যানাপাসকে ধন্যবাদ

n=scan();a=2:n-1;b=sum(w<-a[!n%%a]);cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n)

Ungolfed

n<-scan()             # get number from stdin
w<-which(!n%%1:(n-1)) # build vector of divisors
b=sum(w)              # sum divisors
cat('I am',           # output to STDOUT with a space separator
    'not'[b!=n],      # include not if b!=n
    'a perfect number, because',
    rbind('+',w)[-1], # create a matrix with the top row as '+', remove the first element of the vector
    '=',
    b,                # the summed value
    c(                # creates a vector that contains only the required symbol and ==
        '<'[b<n],     # include < if b<n
        '>'[b>n],     # include > if b>n
        '=='
    )[1],             # take the first element 
    n                 # the original number
)

টেস্ট রান

> n=scan();b=sum(w<-which(!n%%1:(n-1)));cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n)
1: 6
2: 
Read 1 item
I am a perfect number, because 1 + 2 + 3 = 6 == 6
> n=scan();b=sum(w<-which(!n%%1:(n-1)));cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n)
1: 12
2: 
Read 1 item
I am not a perfect number, because 1 + 2 + 3 + 4 + 6 = 16 > 12
> n=scan();b=sum(w<-which(!n%%1:(n-1)));cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n)
1: 13
2: 
Read 1 item
I am not a perfect number, because 1 = 1 < 13
> 

বিবাহবিচ্ছেদকারীদের +মধ্যে সাইন ইন হওয়া উচিত ।
জেরেজস

@ জেরেজেস আমি সবেমাত্র তা লক্ষ্য করেছি এবং
শিগগিরই

উজ্জ্বল rbindকৌতুক জন্য +1 ! আপনি যদি 2:n-1কোনও ভেরিয়েবলকে অর্পণ করেন তবে আপনি 2 টি অতিরিক্ত বাইট সংরক্ষণ করতে পারেন , বলুন a: which(!n%%1:(n-1)) এভাবে হয়ে যায় a[!n%%a]। (পুরো কোডটি তখনই রয়েছে n=scan();a=2:n-1;b=sum(w<-a[!n%%a]);cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n))
প্ল্যানাপাস

@ প্ল্যানাপাস ধন্যবাদ, আমি নিজেই এতে সন্তুষ্ট
মিকিটি

5

পাইথন 2, 183 173 170 বাইট

b=input();c=[i for i in range(1,b)if b%i<1];d=sum(c);print'I am %sa perfect number because %s = %d %s %d'%('not '*(d!=b),' + '.join(map(str,c)),d,'=<>='[cmp(b,d)%3::3],b)

উদাহরণ:

$ python perfect_number.py <<< 6
I am a perfect number because 1 + 2 + 3 = 6 == 6
$ python perfect_number.py <<< 12
I am not a perfect number because 1 + 2 + 3 + 4 + 6 = 16 > 12
$ python perfect_number.py <<< 13
I am not a perfect number because 1 = 1 < 13
$ python perfect_number.py <<< 100
I am not a perfect number because 1 + 2 + 4 + 5 + 10 + 20 + 25 + 50 = 117 > 100
$ python perfect_number.py <<< 8128
I am a perfect number because 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 4064 = 8128 == 8128

Xnor 13 বাইট সংরক্ষণ করার জন্য ধন্যবাদ !


4
'=<>'[cmp(b,d)]- বিপ্লবে যোগ দাও!
orlp

দুর্দান্ত, ধন্যবাদ! ওহ, অপেক্ষা করুন ... :)
সেলো

1
@ সেলিও আমি একই ধরণের সমাধান নিয়ে এসেছি। আপনি লিখতে পারেন b%i<1জন্য b%i==0। কারণ ['not ',''][int(d==b)], আপনার দরকার নেই int, কারণ পাইথন স্বয়ংক্রিয়ভাবে রূপান্তরিত হবে। তদতিরিক্ত, আপনি স্ট্রিং বহুবিধ ব্যবহার করতে পারেন "not "*(d!=b)
xnor

পরামর্শের জন্য @xnor ধন্যবাদ!
সেলেলো

1
@ সেলিও আপনি orlp এর পরামর্শ হিসাবে কাজ করার জন্য সামঞ্জস্য করতে পারেন "=<>="[cmp(b,d)%3::3]
xnor

4

জুলিয়া, 161 157 বাইট

n=int(ARGS[1])
d=filter(i->n%i<1,1:n-1)
s=sum(d)
print("I am ",s!=n?"not ":"","a perfect number, because ",join(d," + ")," = $s ",s<n?"<":s>n?">":"=="," $n")

Ungolfed:

# Read n as the first command line argument
n = int(ARGS[1])

# Get the divisors of n and their sum
d = filter(i -> n % i == 0, 1:n-1)
s = sum(d)

# Print to STDOUT
print("I am ",
      s != n ? "not " : "",
      "a perfect number, because ",
      join(d, " + "),
      " = $s ",
      s < n ? "<" : s > n ? ">" : "==",
      " $n")

4

সিজোম, 90 বাইট

"I am"rd:R{R\%!},:D:+R-g:Cz" not"*" a perfect number, because "D'+*'=+D:++'=C+_'=a&+a+R+S*

তুলনার জন্য, একক মুদ্রণ =83 বাইটে অর্জন করা যেতে পারে।

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

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

"I am"  e# Push that string.
rd:R    e# Read a Double from STDIN and save it in R.
{       e# Filter; for each I in [0 ... R-1]:
  R\%!  e# Push the logical NOT of (R % I).
},      e# Keep the elements such that R % I == 0.
:D      e# Save the array of divisors in D.
:+R-g   e# Add the divisors, subtract R and compute the sign of the difference.
:Cz     e# Save the sign in C and apply absolute value.
"not "* e# Repeat the string "not " that many times.

" a perfect number, because "

D'+*    e# Join the divisors, separating by plus signs.
'=+D:++ e# Append a '=' and the sum of the divisors.
'=C+    e# Add the sign to '=', pushing '<', '=' or '>'.
_'=a&   e# Intersect a copy with ['='].
+a+     e# Concatenate, wrap in array and concatenate.
        e# This appends "<", "==" or ">".
R+      e# Append the input number.
S*      e# Join, separating by spaces.

2

পার্ল, 148 বাইট

$a=<>;$_=join' + ',grep{$a%$_==0}1..$a-1;$s=eval;print"I am ".($s==$a?'':'not ')."a perfect number because $_ = $s ".(('==','>','<')[$s<=>$a])." $a"

লাইন বিরতি সহ:

$a=<>;
$_=join' + ',grep{$a%$_==0}1..$a-1;
$s=eval;
print"I am ".($s==$a?'':'not ')."a perfect number because $_ = $s ".(('==','>','<')[$s<=>$a])." $a"

আমি এই উপর একটি অকর্মা ছিল করেছি এবং আপনার চারপাশের বাইরের বাম বন্ধনী সরিয়ে 10 বাইট সংরক্ষণ করতে পারবেন 'not 'এবং '==','>','<'বিবৃতি এবং থেকে সুইচিং .করতে ,(কিছুই কবে থেকে যোগ করা হয় printএকটি তালিকা ing)। আপনার অ্যাসাইনমেন্টগুলি প্রথমবার ব্যবহার করার পরে প্যারেন্সে স্থানান্তরিত করা একটি দম্পতিকে বাঁচায় এবং আপনি যদি যুক্তিটিকে কিছুটা পরিবর্তন করেন grep$a%_<1,1..($a=<>)-1এবং $a!=($s=eval)&&'not 'আপনার আরও কয়েকজন শেভ করা উচিত! আশা করি সব বুঝে যায়!
ডোম হেস্টিংস

2

লুয়া, 244 231 বাইট

Golfed:

n=io.read("*n")d={}s="1"t=1 for i=2,n-1 do if n%i==0 then table.insert(d,i)s=s.." + "..i t=t+i end end print(("I am%s a perfect number, because %s = %s"):format(t==n and""or" not", s, t..(t==n and" == "or(t>n and" > "or" < "))..n))

Ungolfed:

n=io.read("*n")
divisors={}
sequence="1"
sum=1
for i=2,n-1 do
    if n%i==0 then 
        table.insert(divisors,i)
        sequence=sequence.." + "..i
        sum=sum+i
    end
end

print(("I am%s a perfect number, because %s = %s"):format(sum==n and""or" not", sequence, sum..(sum==n and" == "or(sum>n and" > "or" < "))..n))

2

জাভাস্ক্রিপ্ট (ES6), 146

টেম্পলেট স্ট্রিং ব্যবহার করে এটি ফায়ারফক্স এবং সর্বশেষ ক্রোমে কাজ করে।

for(n=prompt(),o=t=i=1;++i<n;)n%i||(t+=i,o+=' + '+i)
alert(`I am ${t-n?'not ':''}a perfect number because ${o} = ${t} ${t<n?'<':t>n?'>':'=='} `+n)


2

রুবি, 174 160 155 136 134 128 122 বাইট

n=6;a=[*1...n].reject{|t|n%t>0};b=a.inject(:+)<=>n;print"I am#{" not"*b.abs} a perfect number, because ",a*?+,"<=>"[b+1],n

আরও 6 টি বাইট সংরক্ষণ করা হয়েছে :)

রুবীতে গল্ফ করার জন্য টিপসকে ধন্যবাদ


মুদ্রণ কমান্ডটি এখনও আমাকে বিরক্ত করে .. এবং যদি আমি বিবৃতি ত্রৈমাসিককে সংক্ষিপ্ত করার জন্য একটি উপায় খুঁজে বের করতে পারি? অন্য একটি ধারা দরকার যা আমি সরবরাহ করতে পারি না এবং কেবলমাত্র প্রতি কেস একটি কল গ্রহণ করে
ইউরি কাজাকভ

কেবল একটি মুদ্রণ বিবৃতি বাকি আছে :)
ইউরি কাজাকভ

1

সি #, 252 বাইট

class A{static void Main(string[]a){int i=int.Parse(a[0]);var j=Enumerable.Range(1,i-1).Where(o=>i%o==0);int k=j.Sum();Console.Write("I am "+(i!=k?"not ":"")+"a perfect number, because "+string.Join(" + ",j)+" = "+k+(k>i?" > ":k<i?" < ":" == ")+i);}}

1

হাসিয়াম , 285 বাইট

দাবি অস্বীকার: কমান্ড লাইন টিপে সমস্যাগুলির কারণে হাসিয়ামের কেবলমাত্র সর্বশেষতম সংস্করণে কাজ করে।

func main(){n=Convert.toNumber(args[0]);s=1;l="1";foreach(x in range(2,n-3)){if(n%x==0){l+=" + "+x;s+=x;}}if(s==n)println("I am a perfect number, because "+l+" = "+s+" == "+s);else {print("I am not a perfect number, because "+l+" = "+s);if(s>n)println(" > "+n);else println(" < "+n);}}

আরও পঠনযোগ্য সংস্করণ:

func main() {
    n = Convert.toNumber(args[0]);
    s = 1;
    l = "1";
    foreach(x in range(2, n - 3)) {
            if (n % x== 0) {
                    l += " + " + x;
                    s += x;
            }
    }
    if (s == n)
            println("I am a perfect number, because " + l + " = " + s + " == " + s);
    else {
            print("I am not a perfect number, because " + l + " = " + s);
            if (s > n)
                    println(" > " + n);
            else
                    println(" < " + n);
    }

}


1
১. আমি আমার কমান্ড-লাইনের যুক্তি পড়তে হাসিমকে বোঝাতে পারি না। যদি আমি মৃত্যুদণ্ড কার্যকর করি তবে mono src/Hassium/bin/Debug/Hassium.exe t.hs 6তা বলে System.ArgumentException: The file 6 does not exist.। ২. এটি এই সংস্করণটির সাথে কাজ করে না , যা এই চ্যালেঞ্জ পোস্ট হওয়ার আগে সর্বশেষতম প্রতিশ্রুতি। দয়া করে আপনার উত্তরে একটি অস্বীকৃতি যুক্ত করুন যাতে উল্লেখ করা হয় যে আপনার জমাটি প্রতিযোগিতামূলক।
ডেনিস

আমি এটি উইন্ডোজে চেষ্টা করেছি (এমভিএস ২০১৫ ব্যবহার করে নির্মিত) এবং একই ত্রুটি পেয়েছি।
জেরেজেস

এটি এমন একটি সমস্যা যা 15 মিনিট আগে আক্ষরিকভাবে আপডেট হয়েছিল। হাসিয়াম ক্লোন করুন এবং আবার সংকলন করুন। আমি ঠিক একই সমস্যার মধ্যে দৌড়াতে পেরে আমি খুব দুঃখিত।
জ্যাকব মিসিরিয়ান

1
এটি সর্বশেষতম সংস্করণে দুর্দান্ত কাজ করে। এখন আপনি যদি কেবল অস্বীকৃতি যোগ করতে পারতেন তবে আমি আমার ডাউনটোটটি সরিয়ে খুশি হব। (যাইহোক, আপনি @Dennisআপনার মন্তব্যে যোগ করে আমাকে পিং করতে পারেন Otherwise অন্যথায়, আমি আপনার জবাব সম্পর্কে অবহিত হই না))
ডেনিস

@ ডেনিস আমি এটি যুক্ত করে দিয়েছি। আপনার বিজ্ঞপ্তির জন্য আপনাকে ধন্যবাদ :)
জ্যাকব মিসিরিয়ান

1

ম্যাটল্যাব, 238

কখনই সমস্ত ভাষার মধ্যে সংক্ষিপ্ততম হতে যাবেনা, তবে এখানে ম্যাটল্যাবের সাথে আমার চেষ্টা রয়েছে:

n=input('');x=1:n-1;f=x(~rem(n,x));s=sum(f);a='not ';b=strjoin(strtrim(cellstr(num2str(f')))',' + ');if(s>n) c=' > ';elseif(s<n) c=' < ';else c=' == ';a='';end;disp(['I am ' a 'a perfect number, because ' b ' = ' num2str(s) c num2str(n)])

এবং এটি কিছুটা বেশি পঠনযোগ্য আকারে রয়েছে:

n=input();      %Read in the number using the input() function
x=1:n-1;        %All integers from 1 to n-1
f=x(~rem(n,x)); %Determine which of those numbers are divisors
s=sum(f);       %Sum all the divisors
a='not ';       %We start by assuming it is not perfect (to save some bytes)
b=strjoin(strtrim(cellstr(num2str(f')))',' + '); %Also convert the list of divisors into a string 
                                                 %where they are all separated by ' + ' signs.
%Next check if the number is >, < or == to the sum of its divisors
if(s>n)  
    c=' > ';    %If greater than, we add a ' > ' to the output string
elseif(s<n) 
    c=' < ';    %If less than, we add a ' < ' to the output string
else
    c=' == ';   %If equal, we add a ' == ' to the output string
    a='';       %If it is equal, then it is a perfect number, so clear the 'not' string
end

%Finally concatenate the output string and display the result
disp(['I am ' a 'a perfect number, because ' b ' = ' num2str(s) c num2str(n)])

আমি একটি ফাংশন ব্যবহার না করে আরও 2 বাইট সংরক্ষণ করতে পরিচালিত করেছি। পরিবর্তে আপনি কোডের লাইনটি চালান এবং এটি একটি ইনপুট হিসাবে নম্বরটির জন্য অনুরোধ করে। একবার চালান এটি শেষে আউটপুট প্রদর্শন করে।


1

পার্ল 6 , 138 বাইট

$_=get;
my$c=$_ <=>my$s=[+] my@d=grep $_%%*,^$_;
say "I am {
    'not 'x?$c
  }a perfect number, because {
    join ' + ',@d
  } = $s {
    «> == <»[1+$c]
  } $_"

(গণনাটি নিউলাইনগুলি এবং ইনডেন্টগুলি উপেক্ষা করে কারণ তাদের প্রয়োজন নেই)

@dবিভাজককে ধরে রাখা অ্যারে।
$sবিভাজকের যোগফলকে ধরে রাখে।
$cইনপুট এবং বিভাজকের যোগফলের মধ্যে তুলনার মান।
(কার্যকরভাবে $cঅন্যতম -1, 0, 1, কিন্তু সত্যিই এক Order::Less, Order::Sameঅথবা Order::More)

ইন 'not 'x?$c, ?$cএই ক্ষেত্রে কার্যকরভাবে একই হিসাবে abs $cএবং xস্ট্রিং পুনরাবৃত্তি অপারেটর।

«> == <»জন্য সংক্ষিপ্ত ( '>', '==', '<' )
যেহেতু $cএর একটি রয়েছে তাই আমাদের এটি -1,0,1তালিকাতে সূচকে ব্যবহার করতে সক্ষম হতে একে একে একে স্থানান্তরিত করতে হবে।

প্রযুক্তিগতভাবে এটি 2⁶⁴ এর উপরে সংখ্যাগুলির পক্ষে ভাল কাজ করবে, তবে 2¹⁶ এর উপরে সংখ্যাগুলির জন্য একটি অমিত পরিমাণ সময় নেয় ¹⁶


0

পাইথ, 84 বাইট

jd+,+"I am"*.aK._-QsJf!%QTtUQ" not""a perfect number, because"+.iJm\+tJ[\=sJ@"=<>"KQ

অবৈধ উত্তর, কারণ আমি বাস্তবায়ন করতে অস্বীকার করি =এবং ==একই সমীকরণে।


2
"একই সমীকরণে" প্রয়োগ = এবং == অস্বীকার করার জন্য +1।
theonlygusti

0

রুবি, 164 বাইট

->i{t=(1...i).select{|j|i%j==0};s=t.inject &:+;r=['==','>','<'][s<=>i];puts "I am #{'not ' if r!='=='}a perfect number, because #{t.join(' + ')} = #{s} #{r} #{i}"}

পরীক্ষা

irb(main):185:0> ->i{t=(1...i).select{|j|i%j==0};s=t.inject &:+;r=['==','>','<'][s<=>i];puts "I am #{'not ' if r!='=='}a perfect number, because #{t.join(' + ')} = #{s} #{r} #{i}"}.call 6
I am a perfect number, because 1 + 2 + 3 = 6 == 6

irb(main):186:0> ->i{t=(1...i).select{|j|i%j==0};s=t.inject &:+;r=['==','>','<'][s<=>i];puts "I am #{'not ' if r!='=='}a perfect number, because #{t.join(' + ')} = #{s} #{r} #{i}"}.call 12
I am not a perfect number, because 1 + 2 + 3 + 4 + 6 = 16 > 12

irb(main):187:0> ->i{t=(1...i).select{|j|i%j==0};s=t.inject &:+;r=['==','>','<'][s<=>i];puts "I am #{'not ' if r!='=='}a perfect number, because #{t.join(' + ')} = #{s} #{r} #{i}"}.call 13
I am not a perfect number, because 1 = 1 < 13

0

ইমাস লিস্প, 302 বাইট

(defun p(n)(let((l(remove-if-not'(lambda(x)(=(% n x)0))(number-sequence 1(- n 1)))))(setf s(apply'+ l))(format"I am%s a perfect number, because %s%s = %s %s %s"(if(= s n)""" not")(car l)(apply#'concat(mapcar'(lambda(x)(concat" + "(number-to-string x)))(cdr l)))s(if(= sum n)"=="(if(> sum n)">""<"))n)))

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

(defun perfect (n)
  (let ((l (remove-if-not '(lambda (x) (= (% n x) 0))
              (number-sequence 1 (- n 1)))))
    (setf sum (apply '+ l))
    (format "I am%s a perfect number, because %s%s = %s %s %s" (if (= sum n)"" " not") (car l)
        (apply #'concat (mapcar '(lambda (x) (concat " + " (number-to-string x))) (cdr l)))
        sum (if(= sum n)
            "=="
          (if(> sum n)
              ">"
            "<"))
        n)))

0

পাওয়ারশেল, 164 বাইট

$a=$args[0]
$b=(1..($a-1)|?{!($a%$_)})-join" + "
$c=iex $b
$d=$a.compareto($c)
"I am $("not "*!!$d)a perfect number, because $b = $c $(("==","<",">")[$d]) $a"

কয়েকটি সাধারণ এবং তেমন সাধারণ PoSh কৌশল নয়;

  • যোগফল তৈরি করুন, তারপরে এটিx সহ মূল্যায়ন করুন
  • জিটি, এলটি, একা অ্যারের সূচকের সাথে তুলনা করুন
  • !! $ d সত্য = = 1 কে $ d = 1 বা -1 এর জন্য এবং মিথ্যা == 0 $ d = 0 এর জন্য মূল্যায়ন করবে

0

awk, 150

n=$0{for(p=i=s=n>1;++i<n;)for(;n%i<1;p+=i++)s=s" + "i;printf"I am%s a perfect number, because "s" = "p" %s "n RS,(k=p==n)?_:" not",k?"==":p<n?"<":">"}

ইনপুটটির জন্য এটি সঠিক করতে কিছু বাইট নষ্ট করে 1। আমি আশা করি না এটি প্রত্যাশিত কিনা।

n=$0{
    for(p=i=s=n>1;++i<n;)
        for(;n%i<1;p+=i++)s=s" + "i;
    printf "I am%s a perfect number, because "s" = "p" %s "n RS,
           (k=p==n)?_:" not",k?"==":p<n?"<":">"
}

0

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

„I€ÜIѨ©OIÊi'€–}“€…íÀ‚³,ƒ«“®vy'+}\'=®ODI.S"==><"211S£sèIðý

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

ব্যাখ্যা:

Iۆ              # Push dictionary string "I am"
IѨ               # Push the divisors of the input-integer, with itself removed
   ©              # Store it in the register (without popping)
    O             # Get the sum of these divisors
     IÊi   }      # If it's not equal to the input-integer:
        '€–      '#  Push dictionary string "not"
“€…íÀ‚³,ƒ«“       # Push dictionary string "a perfect number, because"
®v   }            # Loop `y` over the divisors:
  y'+            '#  Push the divisor `y`, and the string "+" to the stack
      \           # Discard the final "+"
       '=        '# And push the string "="
®O                # Get the sum of the divisors again
  D               # Duplicate it
I.S               # Compare it to the input-integer (-1 if smaller; 0 if equal; 1 if larger)
   "==><"         # Push string "==><"
         211S£    # Split into parts of size [2,1,1]: ["==",">","<"]
              sè  # Index into it (where the -1 will wrap around to the last item)
I                 # Push the input-integer again
ðý                # Join everything on the stack by spaces
                  # (and output the result implicitly)

আমার এই 05AB1E ডগা দেখুন (অধ্যায় কিভাবে অভিধান ব্যবহার করতে হয়? ) কেন বুঝতে „I€Üহয় "I am", '€–হয় "not", এবং “€…íÀ‚³,ƒ«“হয় "a perfect number, because"

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