Suis-je parfait (nombre)?

26

Ceci est mon premier défi!

Contexte

Le nombre parfait est un entier positif, qui est égal à la somme de tous ses diviseurs, sauf lui-même.
Il en 6est de même du nombre parfait, depuis 1 + 2 + 3 = 6.
D'un autre côté 12, non 1 + 2 + 3 + 4 + 6 = 16 != 12.

Tâche

Votre tâche est simple, écrivez un programme qui, pour acquis n, imprimera l'un de ces messages:

Je suis un nombre parfait, parce d1 + d2 + ... + dm = s == n
que je ne suis pas un nombre parfait, parce qued1 + d2 + ... + dm = s [<>] n


d1, ... dmsont tous les diviseurs de nsauf pour n.
sest la somme de tous les diviseurs d1, ..., dm(encore une fois, sans n).
[<>]est <(si s < n) ou >(si s > n).

Exemples

Pour nêtre 6: "Je suis un nombre parfait, car 1 + 2 + 3 = 6 == 6"
Pour nêtre 12: "Je ne suis pas un nombre parfait, car 1 + 2 + 3 + 4 + 6 = 16> 12"
Pour nêtre 13: "Je ne suis pas un nombre parfait, car 1 = 1 <13"

Règles

  • nn'est pas plus grand que la norme de votre langue int.
  • Vous pouvez lire à npartir d'une entrée standard, d'arguments de ligne de commande ou d'un fichier.
  • Le message de sortie doit être imprimé sur la sortie standard et aucun caractère supplémentaire ne peut apparaître dans la sortie (il peut y avoir un espace de fin ou une nouvelle ligne)
  • Vous ne pouvez pas utiliser de fonctions intégrées ou de bibliothèque qui résoudraient la tâche (ou sa partie principale) pour vous. Non GetDivisors()ou quelque chose comme ça.
  • Toutes les autres failles standard s'appliquent.

Gagnant

C'est le donc le code le plus court en octets gagne!

Zereges
la source
@orlp Ce n'est pas le cas, j'ai édité le défi, merci pour ça.
Zereges
7
Pourquoi utilisez-vous =et ==dans la même équation? Ça n'a aucun sens. Ce devrait être l' d1 + d2 + ... + dm = s = nOMI.
orlp
Pourriez-vous donner un exemple d'entrée et de sortie, par exemple avec les entrées 6 et 12?
Zgarb
14
@Zereges C'est absurde. Rien n'est attribué. Seulement comparé.
orlp
1
@orlp C'est prévu.
Zereges

Réponses:

4

Pyth, 81 octets

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

Essayez-le en ligne: démonstration ou suite de tests

Explication:

                                 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
Jakube
la source
9

Java, 255 270 octets (toujours FF en base 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);}}

Et une version plus lisible:

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);
    }
}

Auparavant, cela ne fonctionnait pas pour les nombres impairs, j'ai donc dû modifier quelques éléments. Au moins, j'ai de nouveau eu de la chance avec le nombre d'octets. :)

TNT
la source
l == je travaillerai plus de 255?
dwana
Je sais si cela ruine votre nombre d'octets, mais vous pouvez enregistrer un caractère en remplaçant les trois dernières (sur quatre) occurrences d'un [0] par un "String b" et utiliser "b" à leur place
Craig
6

R, 158 163 157 153 143 141 octets

Encore de la place pour jouer au golf, je pense.
Modifier: remplacé if(b<n)'<'else if(b>n)'>'else'=='par c('<'[b<n],'>'[b>n],'=='[b==n]). Le paste(...)est remplacé par un rbind(...)[-1]. Merci @plannapus pour quelques octets supplémentaires.

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)

Non golfé

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
)

Essai

> 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
> 
MickyT
la source
Il devrait y avoir une +connexion entre les diviseurs.
Zereges
@Zereges Je viens de le remarquer et je le corrigerai sous peu
MickyT
+1 pour le rbindtour brillant ! Vous pouvez enregistrer 2 octets supplémentaires si vous attribuez 2:n-1à une variable, par exemple a: which(!n%%1:(n-1)) devient ainsi a[!n%%a]. (Le code complet étant alors 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))
plannapus
@plannapus Merci, j'en ai été très content moi-même.
MickyT
5

Python 2, 183 173 170 170 octets

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)

Exemples:

$ 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

Merci à xnor pour avoir économisé 13 octets!

Celeo
la source
4
'=<>'[cmp(b,d)]- rejoignez la révolution!
orlp
Excellent, merci! Oh, attendez ... :)
Celeo
1
@Celeo J'ai trouvé une solution similaire. Vous pouvez écrire b%i<1pour b%i==0. Pour ['not ',''][int(d==b)], vous n'avez pas besoin de int, car Python se convertira automatiquement. De plus, vous pouvez utiliser la mulitplication de chaînes "not "*(d!=b).
2015
@xnor merci pour les suggestions!
Celeo
1
@Celeo Vous pouvez ajuster la suggestion d'orlp pour qu'elle fonctionne comme "=<>="[cmp(b,d)%3::3].
xnor
4

Julia, 161 157 octets

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")

Non golfé:

# 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")
Alex A.
la source
4

CJam, 90 octets

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

A titre de comparaison, l'impression d'un seul = peut être réalisée en 83 octets.

Essayez-le en ligne dans le interpréteur CJam .

Comment ça marche

"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.
Dennis
la source
2

Perl, 148 octets

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

Avec des sauts de ligne:

$a=<>;
$_=join' + ',grep{$a%$_==0}1..$a-1;
$s=eval;
print"I am ".($s==$a?'':'not ')."a perfect number because $_ = $s ".(('==','>','<')[$s<=>$a])." $a"
faubi
la source
J'ai eu un coup de coude sur cela et vous pouvez économiser 10 octets en supprimant les parens externes autour de la 'not 'et des '==','>','<'déclarations et le passage de .la ,(puisque rien n'est ajouté lorsque printing une liste). Déplacer également vos affectations en parens la première fois qu'elles sont utilisées enregistre un couple, et si vous changez légèrement la logique grep$a%_<1,1..($a=<>)-1et $a!=($s=eval)&&'not 'vous devriez en raser un peu plus! J'espère que tout a du sens!
Dom Hastings
2

Lua, 244 231 octets

Golfé:

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))

Non golfé:

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))
Nikolai97
la source
2

JavaScript (ES6), 146

À l'aide de chaînes de modèles, il fonctionne dans Firefox et le dernier Chrome.

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)

edc65
la source
2

Ruby, 174 160 155 136 134 128 122 Octets

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

Enregistré 6 autres octets :)

Merci aux conseils pour jouer au golf à Ruby

Yuri Kazakov
la source
La commande d'impression me dérange toujours .. Et je dois trouver un moyen de raccourcir le ternaire if-statement? a besoin d'une clause else que je ne peux pas fournir et n'accepte qu'un seul appel par cas
Yuri Kazakov
il ne reste qu'une seule déclaration imprimée :)
Yuri Kazakov
1

C #, 252 octets

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);}}
Yitz
la source
1

Hassium , 285 octets

Avertissement: Fonctionne uniquement avec la dernière version de Hassium en raison de problèmes avec les arguments de ligne de commande.

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);}}

Version plus lisible:

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);
    }

}

Jacob Misirian
la source
1
1. Je n'arrive pas à convaincre Hassium de lire mes arguments en ligne de commande. Si j'exécute mono src/Hassium/bin/Debug/Hassium.exe t.hs 6, dit-il System.ArgumentException: The file 6 does not exist.. 2. Cela ne fonctionne pas avec cette version , qui est la dernière validation avant la publication de ce défi. Veuillez ajouter un avertissement à votre réponse indiquant que votre soumission n'est pas en concurrence.
Dennis
Je l'ai essayé sur Windows (construit à l'aide de MVS2015) et j'ai eu la même erreur.
Zereges
Il s'agit d'un problème qui a été mis à jour il y a 15 minutes. Clonez le Hassium et compilez à nouveau. Je suis vraiment désolé car j'ai rencontré exactement le même problème.
Jacob Misirian
1
Cela fonctionne très bien avec la dernière version. Maintenant, si vous pouviez simplement ajouter l'avertissement, je serais heureux de supprimer mon downvote. (Au fait, vous pouvez me cingler en ajoutant @Dennisà votre commentaire. Sinon, je ne suis pas informé de votre réponse.)
Dennis
@Dennis Je l'ai ajouté. Merci pour votre notification :)
Jacob Misirian
1

MATLAB, 238

Ne sera jamais la plus courte de toutes les langues, mais voici ma tentative avec MATLAB:

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)])

Et ceci sous une forme légèrement plus lisible:

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)])

J'ai réussi à économiser 2 octets de plus en n'utilisant pas de fonction. Au lieu de cela, vous exécutez la ligne de code et il demande le nombre en entrée. Une fois exécuté, il affiche la sortie à la fin.

Tom Carpenter
la source
1

Perl 6 , 138 octets

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

(Le décompte ignore les nouvelles lignes et les retraits, car ils ne sont pas nécessaires)

@dest le tableau contenant les diviseurs.
$sdétient la somme des diviseurs.
$cest la valeur de la comparaison entre l'entrée et la somme des diviseurs.
(Efficace $cest l' un -1, 0, 1mais est vraiment l' un des Order::Less, Order::Sameou Order::More)

Dans 'not 'x?$c, ?$cdans ce cas, est effectivement le même que abs $c, et xest l'opérateur de répétition de chaîne.

«> == <»est l'abréviation de ( '>', '==', '<' ).
Puisqu'il en $ca un -1,0,1, nous devons le décaler d'un pour pouvoir l'utiliser pour indexer dans une liste.

Techniquement, cela fonctionnera pour des nombres bien supérieurs à 2⁶⁴, mais cela prendra un temps excessif pour des nombres supérieurs à 2¹⁶.

Brad Gilbert b2gills
la source
0

Pyth, 84 octets

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

Réponse invalide, car je refuse de mettre en œuvre =et ==dans la même équation.

orlp
la source
2
+1 pour avoir refusé de "mettre en œuvre = et == dans la même équation".
theonlygusti
0

Rubis, 164 octets

->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}"}

Tester

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
Vasu Adari
la source
0

Emacs Lisp, 302 octets

(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)))

Version non golfée:

(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)))
Soupy
la source
0

Powershell, 164 octets

$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"

Quelques-unes des astuces PoSh courantes et moins courantes;

  • Créez la somme, puis évaluez-la avec iex
  • Comparativement à l'indexation du tableau gt, lt, eq
  • !! $ d sera évalué à true == 1 pour $ d = 1 ou -1, et false == 0 pour $ d = 0
tomkandy
la source
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?"<":">"}

Gaspillé quelques octets pour rendre cela correct pour l'entrée 1. Je ne sais pas si cela est prévu.

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?"<":">"
}
Cabbie407
la source
0

05AB1E , 58 octets

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

Essayez-le en ligne ou vérifiez tous les cas de test .

Explication:

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)

Voir cette astuce 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi „I€Üest "I am", '€–est "not"et “€…íÀ‚³,ƒ«“est "a perfect number, because".

Kevin Cruijssen
la source