Tout est dans le titre ...
Prenez comme entrée un entier positif n>=12
et ... faites ce que le titre dit.
Oui, il s’agit du document OEIS A187924 .
Quelques cas de test
12 -> 912
13 -> 11713
14 -> 6314
15 -> 915
16 -> 3616
17 -> 15317
18 -> 918
19 -> 17119
20 -> 9920
40 -> 1999840
100-> 99999999999100
C'est du code-golf . Le code le plus court en octets gagne!
Réponses:
Befunge, 81 octets
Essayez-le en ligne!
Peut traiter au moins n = 70, après quoi certaines valeurs vont déborder de la taille de la pile dans la plupart des implémentations, et pour celles qui ne le font pas, cela prendra tellement de temps qu'il ne vaut pas la peine d'attendre pour le savoir.
Compte tenu de ces contraintes, nous ne cherchons même pas à gérer des valeurs de n supérieures à 99, ce qui signifie que nous pouvons plus facilement vérifier si la valeur se termine par n en comparant simplement la valeur modulo 100 à n .
Vous trouverez ci-dessous une ventilation plus détaillée du code.
Lire n à partir de stdin et enregistrer dans la mémoire.
Initialisez la valeur de test v à 0 et démarrez la boucle principale en incrémentant v en avant.
Testez si
v%n == 0
, et sinon, revenez au début de la boucle principale.Testez si
v%100 == n
, et sinon, revenez au début de la boucle principale.Faites la somme des chiffres dans v en ajoutant à plusieurs reprises v modulo 10 et en divisant v par 10.
Testez si la somme est égale à n et si ce n'est pas le cas, revenez au début de la boucle principale.
Sinon, affichez v et quittez.
la source
05AB1E , 14 octets
Essayez-le en ligne!
Explication
Les solutions nécessitant de gros préfixes expireront sur TIO
la source
JavaScript (ES6),
5554 octetsPrend l'entrée sous forme de chaîne. Nécessite un navigateur avec prise en charge de la récursivité pour des résultats plus larges. Edit: 1 octet enregistré grâce à @Arnauld.
la source
eval([s,...a].join`-`)?
fonctionnerait aussi, bien que ce ne soit pas plus court ...||
.Brachylog v2,
12 à10 octetsEssayez-le en ligne!
Il s'agit d'une soumission de fonction qui prend une entrée
.
et produit une sortie?
(l'inverse de la convention normale; toutes les fonctions de Brachylog ont exactement deux arguments, qui peuvent être des arguments d'entrée ou de sortie, mais le langage n'impose l'utilisation d'aucun argument particulier). Normalement, nous ne considérons pas que les conventions relatives à l’utilisation des arguments soient pertinentes chez PPCG .Explication
Une version précédente de cette solution avait un cas spécial (
Ḋ|
c'est-à-dire "renvoyer les chiffres littéralement") pour les chiffres uniques, mais la question indique apparemment qu'il n'est pas nécessaire de vérifier cela (merci à @DLosc de l'avoir intercepté). J'ai donc supprimé il. (La solution telle qu'elle est écrite ne fonctionnera pas à un chiffre car Brachylog ne considérera pas 1 comme une possibilité d'inconnu dans une multiplication, afin d'éviter des boucles infinies; ses multiplications sont arbitraires.)Donc, cette réponse va maintenant pour une traduction à peu près directe de la spécification. En commençant par
?
(la sortie / nombre que nous essayons de trouver; un prédicat de Brachylog commence toujours implicitement par?
), nous utilisonsa₁.
pour affirmer qu’il a.
(l’entrée) un suffixe. Ensuite;A×?
signifie que nous pouvons multiplier (×
) le résultat par quelque chose (;A
) pour produire?
(la sortie). Enfin,ẹ+
somme (+
) les digits (ẹ
) de?
, et il y a par défaut une assertion implicite à la fin de chaque programme Brachylog que le résultat final produit.
. Donc, en d'autres termes, ce programme est ".
est un suffixe de?
,.
multiplié par quelque chose est?
,.
est la somme du chiffre de?
", ce qui est très proche d’une traduction littérale du programme original.Le
≜
est nécessaire pour que la condition de somme de chiffres soit appliquée. Je suppose que quelque chose à propos deẹ
ne pas aimer les inconnus, alors le≜
dit à Brachylog d'utiliser une approche de force brute pour cette partie du programme plutôt que l'algèbre.la source
Haskell , 72 octets
Essayez-le en ligne!
Notez que le nombre trouvé moins n doit être un multiple de n et de 10 ^ longueur (n).
Inspiré par Laikoni et totalement humain
la source
lcm n(10^length(show n))
enlcm(10^length(show n))n
pour 1 octetAlice , 35 octets
Essayez-le en ligne!
Explication
Ce programme offre un très bon mélange et une bonne interaction entre les modes Cardinal (traitement des nombres entiers) et Ordinal (traitement des chaînes).
Le cadre habituel pour les défis avec des E / S décimales qui fonctionnent largement en mode Cardinal:
Et le programme actuel:
la source
Java (OpenJDK 8) ,
13611010392 octets-26 grâce à JollyJoker
-7 encore grâce à JollyJoker
-11 grâce à Oliver Grégoire
Essayez-le en ligne!
Je dois aimer Java! Il se pourrait bien que j'utilise une approche inefficace, mais je n'ai pas de fonction de somme de contrôle intégrée ni de double conversion en chaîne pour vérifier la fin du nombre d'octets de coûts ...
Ungolfed:
la source
(""+i).endsWith(""+a)
devrait marcher.n/=10
au lieu den=n/10
trop. En outre,i+=a
dans la boucle for pour que vous puissiez ignorer la vérification de la divisibilité.Mathematica, 72 octets
-18 octets de @MartinEnder
Essayez-le en ligne!
Voici une autre version de Martin Ender
Cette approche peut aller jusqu'à
n=40
(41 dépasse la limite d'itération par défaut)Mathematica, 65 octets
Essayez-le en ligne!
la source
Python 2 , 74 octets
Cette solution suppose que
n <= sys.maxint
.Essayez-le en ligne!
la source
str(x)
par l'x
arrière-tiques deux fois pour sauver 6 octets (comment voulez - vous échapper en arrière-tiques dans le dos-tiques?).`
coche la barre oblique inverse à l'intérieur des backticks.L
qui pourrait gâcher l'algorithme.C (gcc)
7169 octets, échoue sur 100J'ai essayé avec long et% 1000 mais expire
-2 octets grâce à steadybox
Essayez-le en ligne
la source
Husk ,
20 1917 bytesMerci @Zgarb pour -2 octets!
Essayez-le en ligne!
la source
C # (.NET Core) ,
90 8483 + 18 = 101 octetsEssayez-le en ligne!
(""+n)
dans certains endroits etn.ToString()
dans d’autres.la source
n=>{for(int i=n;n%100!=i|n%i>0|(""+n).Sum(c=>c-'0')!=i;n++);return n;}
enregistre 20 octets.n%100
? Et sin>100
?Julia, 70 octets
la source
¬x=(n=x;while sum(digits(n))!=x||!endswith("$n","$x");n+=x;end;n)
Vous pouvez économiser 5 octets avec cela. Essayez-le en ligne!Ohm v2 , 16 octets
Essayez-le en ligne!
la source
Pip , 18 octets
Algorithme inspiré par la réponse d' Emigna . Essayez-le en ligne!
Comment ça marche
la source
JavaScript REPL (ES5),
6059 octetsla source
Haskell , 75 octets
Essayez-le en ligne!
Explication:
Je me demande si la partie "termine dans
n
" peut être raccourcie. J'ai aussi essayéshow n`elem`scanr(:)""(show x)
, mais c'est plus long.la source
Ruby ,
65 63 5453 octetsEssayez-le en ligne!
la source
Pyth ,
22 à21 octetsEssayez-le ici!
la source
Haskell , 75 octets
Essayez-le en ligne!
la source
PowerShell , 84 octets
Essayez-le en ligne!
Construction simple mais longues commandes. Le délai d'expiration sur TIO expire
n=100
, mais si nous définissons explicitement lai
proximité, il génère correctement.Ceci est juste une
for
boucle simple qui continue tant que l'une des conditions est vraie. Les trois conditions sont 1)$i%$n
, c’est-à-dire que nous avons un reste; 2)$i-notmatch"$n$"
, c’est-à-dire que l’expression rationnelle ne correspond pas aux deux derniers chiffres; et 3)([char[]]"$i"-join'+'|iex)-$n
, c’est-à-dire que les chiffres additionnés ne sont pas égaux à$n
(vérifié ici par simple soustraction, car les valeurs non nulles sont vraies). À l'intérieur de la boucle, nous incrémentons simplement$i
.Ainsi, si nous n’avons pas de reste, que les expressions rationnelles correspondent et que les nombres sont égaux, les trois conditions sont remplies.
$false
et nous sortons de la boucle. En conséquence, nous pouvons simplement laisser$i
le pipeline en place, et la sortie est implicite.la source
PHP, 73 + 1 octets
Courez comme un tuyau avec
-R
.boucles
$i
par multiples de<input>
jusqu’àsum_of_digits-<input>
ettail_of_i-$n
sont faussaires; puis imprimei
.la source
m4, 210 octets
Définit une macro
f
qui calcule la réponse. C'est un peu lent - de manière inhabituelle - mais je vous promets que cela fonctionne.Je pensais que m4 serait bien, car il traite les entiers comme des chaînes par défaut, mais c'est assez mauvais.
la source
Scala, 120 octets
Cela fonctionne jusqu'à
n = 70
, après quoi les entiers débordent. Pour un caractère supplémentaire, leInt
peut changer enLong
et autoriser des valeurs pourn > 100
de soient calculées.Voici la version un peu plus longue non-lisée:
la source
R , 115 octets
Essayez-le en ligne!
Fonction R terrible. Incrémente
F
(commence à0
)n
jusqu'à ce qu'une valeur satisfaisant les propriétés requises soit trouvée, qu'elle renvoie ensuite. L'utilisation deany
sur undouble
expression envoie un avertissement pour chaque itération de la boucle, mais n'affecte pas l'exactitude.Le délai d'attente sur TIO est dépassé pour les entrées suffisamment importantes (n = 55 ou plus), mais il convient de calculer correctement la solution compte tenu du temps / espace suffisant.
la source
Perl 5,
4644 + 1 (-p) = 45 octets2 octets économisés grâce à Xcali, impossible de trouver mieux
première réponse
Essayez-le en ligne
la source
Gelée ,
2221 octetsEssayez-le en ligne!
Edit: compressé sur une seule ligne
Explication
Cela m'a pris beaucoup d'heures pour écrire parce que j'apprends Jelly mais maintenant que j'ai terminé, je suis tellement satisfait. Pendant longtemps, je n’ai pas réalisé que j’avais besoin de ce logiciel
¤
et j’ai été incapable de le faire fonctionner. Regarder [ce] [1] code bien expliqué m'a aidé à sceller l'accord. Beaucoup d'autres réponses de Jelly dans PPCG m'ont également guidé.la source
Javascript, 224 octets
function getNumber(x){if(x<12){return!1};const sumDigits=(x)=>x.toString().split('').map(Number).reduce((a,b)=>a+b,0);for(let i=2;i<9999;i++){if((x*i-x)%(Math.pow(10,x.toString().length))==0&&sumDigits(x*i)==x){return x*i}}}
Un-golf:Utilisation: 1. getNumber (12) 2. getNumber (13) 3. ....
la source
getNumber
ousumDigits
.J ,
3733 octetsEssayez-le en ligne!
La présélection du compteur d’itérations est environ 5 fois plus rapide mais plus longue de 5 octets:
Essayez-le en ligne!
Incrémentation de 100, 27 octets :
Essayez-le en ligne!
la source
Python 2 , 70 octets
Essayez-le en ligne!
la source