Un nombre propre (également appelé nombre colombien ou devlali) est un nombre naturel x
, où l'équation n + <digit sum of n> = x
n'a de solution pour aucun nombre naturel n
. Par exemple, 21 n'est pas un nombre propre, comme en n = 15
résulte 15 + 1 + 5 = 21
. En revanche, 20 est un nombre propre, car aucun ne n
peut être trouvé qui satisfait une telle égalité.
Comme cette définition fait référence à la somme des chiffres, elle dépend de la base. Aux fins de ce défi, nous ne considérerons que les numéros de base 10, qui sont la séquence A003052 dans l'OEIS. Les numéros automatiques binaires ( A010061 ) et base 100 ( A283002 ) ont également été calalogués.
Le défi
Étant donné un entier positif x
en entrée, sortez une valeur véridique si x
est un nombre propre en base 10, et une valeur de falsey sinon. Pour des éclaircissements sur les valeurs de vérité et de falsey, reportez-vous à ce méta-post sur le sujet .
Vous pouvez écrire un programme ou une fonction complète, et l'entrée et la sortie peuvent être fournies sur l'un des canaux habituels. Les failles standard sont bien sûr interdites.
Il s'agit de code-golf , donc plus votre réponse est courte (en octets), mieux c'est!
Cas de test
Vérité:
1
3
5
7
9
20
31
86
154
525
Falsey:
2
4
6
8
10
15
21
50
100
500
Classements
Voici un extrait de pile permettant de générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Réponses:
Octave , 37 octets
Port de ma réponse MATL.
Essayez-le en ligne!
la source
Java (JDK 10) , 84 octets
Essayez-le en ligne!
Explication
Crédits
la source
n->{int i=n,r=0;for(;i-->0;)r=(""+i).chars().map(x->x-48).sum()+i==n?1:r;return r<1;}
i->{for(int n=i;i-->1;)i|=((""+i).chars().map(x->x-48).sum()+i^n)-1>>-1;return~i<0;}
05AB1E , 8 octets
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
Brachylog , 12 octets
Essayez-le en ligne!
Explication
la source
false.
ce qu'une valeur véridique par une méthode objective d'une manière quitrue.
ne l'est pas? Pour ma part, je ne pense pas, et il semble que cela serait soutenu par le méta consensusC (gcc) ,
706765 octetsEssayez-le en ligne!
Pour raser 2 autres octets, la valeur véridique renvoyée n'est plus 1, mais le nombre lui-même.
la source
Octave ,
494744 octetsEssayez-le en ligne!
Explication:
Essayer de faire l'opération sur une plage est fastidieux et long, car
num2str
renvoie une chaîne avec des espaces comme séparateurs s'il y a plus que le nombre d'entrée. Soustraire 48 donnerait donc quelque chose comme:1 -16 -16 2 -16 -16 3 -16 -16 4
pour une plage d'entrée 1 ... 4 . Se débarrasser de tous les-16
prend beaucoup d'octets.Par conséquent, nous le ferons avec une boucle utilisant
arrayfun
. Pour chacun des nombres k = 1 .. x , où x est l'entrée, nous additionnonsk
et sa somme de chiffres, et soustrayonsx
. Cela retournera un tableau de avec le résultat de cette opération pour chacun des nombres en k . Si l'un des nombres du tableau est un zéro, le nombre n'est pas un nombre propre.Pour les entrées
20
et21
, les sorties sont:Il n'y a que des éléments non nuls pour l'entrée
20
et au moins un élément non nul pour l'entrée21
. Cela signifie que20
c'est un nombre propre, et21
ne l'est pas.Octave traite un tableau avec au moins un zéro comme faux, comme on peut le voir sur la liaison TIO.
la source
MATL , 11 octets
La sortie est un tableau non vide, qui est vrai si toutes ses entrées sont non nulles et faux s'il contient un ou plusieurs zéros.
Essayez-le en ligne! Ou vérifiez tous les cas de test , y compris le test de véracité / fausseté.
Explication
Considérez l'entrée
n = 10
comme un exemple.la source
APL (Dyalog) , 14 octets
Essayez-le en ligne!
Comment?
la source
+/⍎¨∘⍕
->#+.⍎⍕
Gelée , 6 octets
Pour l'entrée n , cela renvoie [n] si n est un nombre propre, [] sinon.
Essayez-le en ligne!
Comment ça marche
la source
Pari / GP , 32 octets
Essayez-le en ligne!
la source
Haskell , 46 octets
Essayez-le en ligne!
la source
J ,
28, 24, 2221 octets-1 octet grâce à Conor O'Brien
-2 octets grâce à ngn
Essayez-le en ligne!
Explication:
i.
une liste 0 .. n-1( )"+
pour chaque élément de la liste.,.&.":
le convertir en une liste de chiffres,1#
trouver leur somme+
et l'ajouter à l'article$@-.
exclure la liste de l'argument et trouver la formela source
"0 i.
peut être"+i.
(-1 octet).-.@e.
->$@-.
[:(
)"+i.
->(
)"+@i.
Python 2,
7066 octetsEDIT: -4 grâce à @ user56656
la source
`i`
au lieu destr(i)
pour enregistrer 4 octets.[
et]
à l'intérieur dusum
lambda x:[i for i in range(x)if i+sum(map(int,`i`))==x]==[]
lambda x:all(i+sum(map(int,`i`))-x for i in range(x))
Pyth , 8 octets
Suite de tests.
Si l'échange de valeurs véridiques / fausses est autorisé, nous pouvons supprimer le
!
et obtenir 7 octets à la place. Une des suggestions de Sok m'a aidé à jouer au golf sur 2 octets.Explication
la source
.AmnQ+dsjdT
, je n'en avais aucune idée/
. Je n'ai pas utilisé Pyth correctement depuis longtemps, semble-t-il! +1/
compte essentiellement les occurrences d'un élément dans une liste. Je peux également utiliser}
, qui teste si un objet apparaît dans une liste, mais je pense que c'est le même nombre d'octets.S
n'est pas obligatoire - l'entrée sera un entier positif, donc avoir0
dans la liste de mappage ne sera pas un problème? Au moins, cela semble fonctionner pour les cas de test donnés.+sjdT
s'ajoutesjdT
àd
? Je n'ai jamais rien vu de telPerl 6 ,
3933 octetsEssaye le!
Un bloc nu avec un seul paramètre implicite, appelé ainsi:
Depuis
n + digits(n) >= n
, nous pouvons simplement calculer le nombre colombien pour tous les nombres jusqu'à notre valeur de requête et voir si l'un d'eux correspond. Donc, cela calcule le nombre colombien pour une entrée donnée:Que nous appliquons à toutes les valeurs jusqu'à notre objectif:
Mais nous nous soucions seulement de savoir si l'une d'entre elles correspond, pas quelles sont ces valeurs, donc comme l'a souligné @nwellenhof, nous pouvons grep:
Le reste est juste de la coercition à bool et enveloppé dans un bloc.
39 octets
Lien de test TIO fourni par @Emigna
@nwellenhof a souligné que l'utilisation de grep permettrait d'économiser 6 octets!
la source
{!grep $_,map {$_+[+] .comb},^$_}
pour 33 octets.Python 3 ,
60,56,55, 54 octetsEssayez-le en ligne!
-4 en utilisant tous les inverses au lieu de
-1 en changeant! = En ^ par @ jonathan-allan
-1 en utilisant les ensembles de @ovs
la source
Japt
-d!
, 6 octetsL'essayer
Original, 8 octets
Renvoie le numéro d'entrée pour véridique ou
0
pour falsey. Si seulement le tableau vide était falsey en JavaScript, cela pourrait être 7 octets.L'essayer
Explication
Alternative
L'essayer
la source
Rétine , 55 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez l'entrée
x
en unaire.Créez une plage de
x
bas en haut1
.Suffixez la valeur décimale de chacun
n
à sa valeur unaire.Faites une copie de
x
.Convertissez chaque chiffre décimal de
n
en unaire, ajoutant ainsi les chiffres à la copie existante den
.Vérifiez si
x
apparaît dans l'un des résultats.Inversez le résultat.
la source
JavaScript (ES6),
5251 octets1 octet enregistré grâce à @ l4m2
Renvoie 0 ou 1 .
Essayez-le en ligne!
la source
n=>(g=k=>k?n-eval([...k+'k'].join`+`)&&g(k-1):1)(n)
Haskell ,
6358 octetsEssayez-le en ligne!
la source
Perl 5
-a
, 34 octetsEssayez-le en ligne!
la source
Rubis , 38 octets
Essayez-le en ligne!
la source
Rétine , 24 octets
Essayez-le en ligne!
Cela pourrait être de 18 octets avec une entrée donnée en unaire, mais l'autre réponse Retina utilise également la décimale, donc j'ai pensé que l'utilisation de la décimale ferait une comparaison plus juste.
Explication
Convertissez l'entrée en unaire, en utilisant
_
comme chiffre unaire.À chaque position de la chaîne (c'est-à-dire au début, à la fin et entre chaque paire de caractères), insérez:,
$.`
la longueur du préfixe (ou la position indexée zéro de la correspondance)¶
,, un saut de ligne,,$`
le préfixe lui-même (c'est-à-dire une représentation unaire de la position indexée zéro). Par exemple, si l'entrée était3
et que nous aurions la représentation unaire___
, cela se traduirait par:En d'autres termes, nous obtenons une ligne pour chaque nombre de 0 à l'entrée (incluse), qui contient à la fois une représentation unaire et décimale de ce nombre.
Nous convertissons chaque chiffre en unaire, qui calcule efficacement la somme des chiffres sur chaque ligne et l'ajoute au nombre lui-même (le tout en unaire).
Lignes dédoublonnées. Cela ne supprime pas réellement les lignes en double mais les efface simplement en lignes vides. Donc, si un nombre de 0 à l'entrée plus sa somme de chiffres est égal à l'entrée, la dernière ligne sera effacée. Sinon, la dernière ligne reste en place.
Vérifiez s'il y a encore un caractère sur la dernière ligne. Nous ne pouvons pas l'utiliser
$
, car cela correspond également devant un saut de ligne de fin (qui est exactement là où nous ne voulons pas regarder).la source
Bash + GNU Coreutils, 91 octets
Retourne véridique ou fausse.
la source
Kotlin , 48 octets
Essayez-le en ligne!
Explication:
la source
Ajouter ++ , 27 octets
Essayez-le en ligne!
Comment ça marche
la source
Elixir ,
6665 octetsEssayez-le en ligne!
la source
Stax , 8 octets
Exécuter et déboguer
Explication
Équivalent ASCII:
fcE+|+x=
est un programme Stax qui produit tous les nombres dont la somme des chiffres ajoutés à lui-même est égale à l'entrée. Par exemple pour101
la sortie serait91
et100
, chacun sur une ligne distincte.Exécuter et déboguer
la source
Pyt , 7 octets
Essayez-le en ligne!
Si l'échange de valeurs vérité / fausse est autorisé,
¬
la fin peut être supprimée pour 6 octets.Explication:
la source
J , 20 octets
Essayez-le en ligne!
la source