En face de la racine numérique!


19

Également connu sous le nom de [racine analogique]

( En face de la racine numérique! );)

La racine numérique d'un nombre est la somme continue de ses chiffres jusqu'à ce qu'il s'agisse d'un seul chiffre, par exemple, la racine numérique de 89456 est calculée comme suit:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

La racine numérique de 89456 est 5.

Étant donné un chiffre saisi via STDIN , imprimez / renvoyez tous les nombres à deux chiffres possibles qui ont cette racine numérique. Si vous en avez besoin, il peut s’inclure, par exemple 05

Ce sont toutes les entrées et sorties possibles:

(Vous pouvez choisir d'inclure ou non le zéro de tête pour le chiffre lui-même)

E / S

0 => 0 ou 00 ou rien

1 => 01 et / ou 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Assurez-vous que 1 ne renvoie pas 100

2 => 02 et / ou 2, 11, 20, 29, 38, 47, 56, 65, 74, 83, 92

3 => 03 et / ou 3, 12, 21, 30, 39, 48, 57, 66, 75, 84, 93

4 => 04 et / ou 4, 13, 22, 31, 40, 49, 58, 67, 76, 85, 94

5 => 05 et / ou 5, 14, 23, 32, 41, 50, 59, 68, 77, 86, 95

6 => 06 et / ou 6, 15, 24, 33, 42, 51, 60, 69, 78, 87, 96

7 => 07 et / ou 7, 16, 25, 34, 43, 52, 61, 70, 79, 88, 97

8 => 08 et / ou 8, 17, 26, 35, 44, 53, 62, 71, 80, 89, 98

9 => 09 et / ou 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99

Pas de failles standard , et c'est du , donc la réponse la plus courte en octets l'emporte.

Félicitations à Heeby Jeeby Man pour sa réponse incroyable de 46 octets de brain-flak!


1
le nombre lui-même compte-t-il comme un nombre à deux chiffres? (05)?
Destructible Lemon


5
Quelle devrait être la sortie pour 0? Et encore une fois, dans un cas comme celui-ci où il n'y a que 10 entrées possibles, il serait très utile de fournir les sorties de votre défi.
FryAmTheEggman

1
Votre décision sur la façon de gérer zéro annule la plupart des réponses qui ont été publiées. Il serait judicieux de faire savoir aux participants que vous avez pris une décision.
FryAmTheEggman

2
l'opposé d'une racine numérique est-il une racine analogique?
tuskiomi

Réponses:


5

Pyke, 6 octets

ITV
9+

Essayez-le ici!

ITV\n9+ - if input: (don't print anything for 0 case)
 TV\n9+ -  repeat 10 times:
   \n   -    print ^
     9+ -   ^ += 9

9

JavaScript (ES6), 27 31 30 octets

Renvoie 0pour 0ou un tableau de solutions sinon.

n=>n&&[...1e9+''].map(_=>n+=9)

Démo


3
Un downvote sans aucun commentaire n'aide pas beaucoup à améliorer la réponse ...
Arnauld

Pour certains, il peut être difficile de savoir quelle partie est la fonction réelle de codegolfed et quelle partie est une démonstration. Il peut être judicieux de placer la fonction elle-même juste en dessous de la ligne JavaScript .
David Mulder

@DavidMulder Merci pour la suggestion. C'est en fait ainsi que je réponds la plupart du temps. Mis à jour.
Arnauld

Bonne solution! Désolé d'avoir fait glisser une ancienne solution, mais pourriez-vous supprimer le +pour enregistrer un autre octet? Bien que cela ne fonctionnerait pas avec la chaîne stdin de cette façon, je suppose.
Craig Ayre

@CraigAyre Je ne sais pas d'où cela +vient ... Mis à jour. Merci!
Arnauld

8

05AB1E , 13 12 9 octets

-3 octets grâce à Adnan

тL<ʒSOSOQ

Essayez-le en ligne!

Explication

тL<ʒSOSOQ   Main link. Argument n
тL<         List from 1 to 100, then decrement to get 0 to 99
   ʒ        Filter
    SOSO    Sum of all chars, twice
        Q   Compare to input

Je pense que vous pouvez remplacer la boucle infinie par SOSO, car le nombre ne sera jamais supérieur à 99.
Adnan

@Adnan Ne pense pas, je t'assure qu'il le peut.
Erik the Outgolfer

1
тL<n'est pas vraiment plus court que simple 99Ý. ;)
Erik the Outgolfer

1
@EriktheOutgolfer Eh bien, j'essayais probablement de faire des efforts pour y enregistrer un octet; D
kalsowerus

2
"Lien" principal? Depuis quand 05AB1E a des liens? Ce n'est pas Jelly.
Andrew Savinykh

7

Haskell , 21 octets

f prend un entier et retourne une liste d'entiers.

f d=[d,d+9..99^0^0^d]

Essayez-le en ligne!

  • Commence par le chiffre det génère la plage avec chaque 9ème nombre jusqu'à une limite de 99, sauf dans le cas délicat de 0.
  • Pour arrêter tôt pour 0, utilise cette puissance 0^d==1pour 0et ==0pour tous les autres chiffres. Ainsi 99^0^0^ddonne 1pour , 0mais 99pour tout le reste.


7

Brain-Flak , 46 octets

{((()()()()()){}){(({}[()])<(({}{}[]))>)}}{}{}

Essayez-le en ligne!

Explication

Cette réponse utilise une idée de la réponse de Megatom, à savoir utiliser la hauteur de la pile comme différence entre le compteur de boucle et l'incrément. Comme les réponses précédentes, cette réponse a une grande boucle externe pour attraper tous les zéros. À l'intérieur de la boucle, nous poussons 10 pour agir comme un compteur, puis nous commençons une autre boucle imbriquée. Dans cette boucle, nous décrémentons le compteur de 1

({}[()])

Ensuite, nous éclatons les deux premiers éléments, qui sont le compteur et le dernier élément que nous avons calculé. Nous les ajoutons à la hauteur de la pile afin de contrebalancer la décrémentation, nous poussons ensuite cela deux fois, une fois pour la sortie et une fois afin qu'elle puisse être consommée pour calculer le résultat suivant. Pousser les choses deux fois signifie que nous poussons accidentellement une valeur supplémentaire qui doit être supprimée à la fin de l'exécution.

La raison pour laquelle cela bat à peine Megatom est que la réponse de Megatom est forcée d'obtenir ses hauteurs de pile alors que le dernier résultat est toujours sur la pile. Cela signifie qu'ils sont obligés d'utiliser un produit assez cher [()]pour diminuer le total de un. En déplaçant le doublon à la fin de la boucle, je suis en mesure d'éviter d'avoir à utiliser [()]au prix d'un supplémentaire {}à la toute fin du programme. Si Megatom devait utiliser cette stratégie, sa réponse ressemblerait à ceci:

{<>((()()()()()){}){((({}[()])<>{}[]))<>}}<>{}

également 46 octets.

Brain-Flak , 52 octets

{((()()()()()){}){({}[()]<(({})((()()())){}{})>)}}{}

Essayez-le en ligne!

Explication

La boucle extérieure principale constitue un cas spécial pour l'entrée de zéro. Si zéro est entré, nous sautons sur toute la boucle, sautons zéro et ne sortons rien. Sinon, nous entrons dans la boucle. Ici, nous poussons la boucle 10 fois à chaque fois en ajoutant 9 en haut de la pile, en conservant les anciennes valeurs. Étant donné que 9 conserve les sommes numériques, cela nous donnera la valeur suivante. Une fois la boucle expirée, nous utilisons le zéro qu'elle a généré pour quitter la boucle qui est ensuite sautée par le {}à la fin.

Brain-Flak , 56 octets

{([(((()()())){}{})]){({}()<(({})<(({}{}))>)>)}}{}({}{})

Essayez-le en ligne!

Explication

Cette version fonctionne de manière très similaire à la dernière, sauf que nous bouclons 9 fois au lieu de 10 en laissant de côté la valeur d'origine. Pour ce faire, nous devons réorganiser un peu la façon dont nous gérons la mémoire. Tous les octets que nous aurions pu enregistrer en utilisant cette méthode sont mis en nettoyage.


Le 46 ne conserve pas le numéro d'origine :(
Jo King

@JoKing Oui, il ne fait que les cas à 2 chiffres. Je pense que c'est en quelque sorte l'intention de la question, ce qui me rend très heureux.
Wheat Wizard

Bon travail! Vous avez gagné la prime.
FantaC



5

Bash ,31 27 octets

seq $1 9 $(($1?99:0))|xargs

Essayez-le en ligne!

précédent

eval echo {$1..$(($1?99:0))..9}

comment trouve-t-on les pages de manuel / bash help /? sur "{x..y..z}"? comment appelle-t-on ceci?
Olivier Dulac

trouvé: dans la page de manuel, recherchez [^.] \. \. [^.]:brace expansion: (...) A sequence expression takes the form {x..y[..incr]}, where x and y are either integers or single characters, and incr, an optional increment, is an integer. (...) When the increment is supplied, it is used as the difference between each term. The default increment is 1 or -1 as appropriate.
Olivier Dulac

5

Dyalog APL, 15 octets

{(×⍵)/+\⍵,109}

Comment?

⍵,10⍴9- concaténer l'entrée avec 10 9s ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - somme cumulée.

(×⍵)/ - augmenter les temps de signum - où signum donne 1 pour 1-9 et 0 pour 0.

Essayez-le en ligne!

Dyalog APL, 24 octets

{⍵/⍨⎕=(⍵≠01+9|⍵-1}⍳100

Requiert ⎕IO←0.

Comment?

                      100   0 .. 99
              1+9|⍵-1       digit sum (⍵-1 mod 9 + 1)
        (⍵≠0              edge case for 0
     ⎕=                     equals to the input
 ⍵/⍨                        compress with the range


4

Mathematica, 25 octets

If[#==0,0,Range[#,99,9]]&

fonctionne pour 0


Ne fonctionne pas pour 0. Cela n'inclurait pas non plus les nombres dont les chiffres s'additionnent à un nombre supérieur à 9. (par exemple, 9il n'y en aurait pas 99dans la sortie).
JungHwan Min

Je vois ce que tu veux dire. Inspectez-vous uniquement "mes" codes? parce que beaucoup de codes ici ne fonctionnent pas pour 0 ...
J42161217

1
Welp, j'ai tendance à me concentrer sur le code Mathematica parce que c'est le langage que je connais le mieux. Je ne voulais pas vous cibler ou quoi que ce soit. Je m'excuse si cela vous a semblé.
JungHwan Min

tous fixes et fonctionnels
J42161217

Quelle? Pas intégré?
OldBunny2800

4

Gelée , 12 octets

⁵²Ḷµ,³%9EµÐf

Essayez-le en ligne!

Comment ça fonctionne

⁵²Ḷµ,³%9EµÐf
⁵             - literal 10
 ²            - square
  R           - lowered range: 0 to 99 inclusive.
   µ     µÐf  - filter based on:
    ,³          - element and input
      %9        - mod 9
        E       - are equal

1
Lorsque j'utilise 1 comme argument, il donne également 100, ce qui n'est pas à deux chiffres
FantaC

Cela ne divise pas les cas 0 et 9.
Ørjan Johansen


4

En fait , 18 octets

╗2╤DR⌠╜-9@%Y⌡░╜;)I

Essayez-le en ligne!

Explication:

╗2╤DR⌠╜-9@%Y⌡░╜;)I
╗                   save input to register 0
 2╤DR               range(1, 100)
     ⌠╜-9@%Y⌡░      elements in range where function returns truthy:
      ╜-              subtract from input
        9@%           mod 9
           Y          is equal to 0
              ╜;)   push a copy of the input on the top and the bottom of the stack
                 I  if input is truthy, return the filtered range, else return the input (special-cases 0)

@FryAmTheEggman Fixed.
Mego

4

PHP, 41 octets

imprime le soulignement des valeurs séparées

for(;100>$a=&$argn;$a+=$a?9:ERA)echo$a._;

ERAest la constante la plus courte en PHP avec la valeur 131116. Vous pouvez le remplacer par l'alternative ennuyeuse 100ou terminer le programme avecdie

Version en ligne


4

Brain-Flak , 54 52 octets

{<>((((()()())){}{})()){({}<(({})<>({}))><>[()])}}<>

Essayez-le en ligne!

Ma première incursion avec Brain-Flak, et je pense que j'ai plutôt bien réussi. Quelqu'un avec plus d'expérience a des conseils?

Comment ça fonctionne:

{ Don't do anything if input is 0
  <>((((()()())){}{})()) Switch to other stack and add 9 and 10
                         10 is the counter, 9 is to add to the current num
  { While counter
     (
       {} Pop the counter
       <(({})<>({}))> Get a copy of the 9, switch to the other stack and add it to a copy of the top of it. Use <...> to make it return 0
       <>[()] Switch to the other stack and decrement the counter
     ) 
  }
}<> Switch to the stack with the values on it

1
Bon travail! Bienvenue à Brain-Flak.
MegaTom


3

PHP, 35

print_r(range($argn,!!$argn*99,9));

Crée la plage [$argn, 100)avec un pas de 9tableau et l'imprime. Si l'entrée est, 0elle crée la plage [0,0]=> array(0).


3

Python, 48 51 octets

3 octets enregistrés grâce à @WheatWizard

lambda n:[x for x in range(100)if~-n==~-x%9or x==n]

1
essayez ~-xau lieu de(x-1)
Wheat Wizard

1
toujours avec le conseil de @ WheatWizard, supprimez l'espace dansif ~-x%9
Felipe Nardi Batista

Maintenant, vous pouvez faire ~-n==~-x%9or x==npour enregistrer un octet
Wheat Wizard


J'ai besoin de poser une question idiote ... J'aimerais lancer ceci. Comment faire exécuter ce code? Il y a quelques constructions ici que j'apprends (principalement l'opérateur ~)
Allen Fisher


2

Pyke, 6 octets (ancienne version)

Engagement de travail

TXU#sq

Explication:

TX     -   10**2
  U    -  range(^)
   #   - filter(^)
    s  -   digital_root(^)
     q -  ^==input


2

C (gcc) , 55 octets

f()n'a pas besoin d'être appelé avec un argument; le nest juste là au lieu de l'extérieur de la fonction pour enregistrer un octet.

f(n){for(scanf("%d",&n);n&&n<100;n+=9)printf("%d ",n);}

Essayez-le en ligne!


Vous pouvez économiser 2 octets en plaçant l' printfintérieur de l'en-tête de boucle: Essayez-le en ligne!
DLosc

@DLosc myeah, mais il commence un numéro trop tard.
gastropner le

La formulation pourrait être plus claire, mais la question permet de commencer à (par exemple) 10 au lieu de 1: "... tous les nombres à deux chiffres possibles qui ont cette racine numérique. Si vous en avez besoin , cela peut inclure [le single -numéro], par exemple 05. " En d'autres termes, l'inclusion du nombre à un chiffre dans la sortie est autorisée mais pas obligatoire .
DLosc

2

Fusain , 14 11 octets

I∧N⁺Iθ×⁹…¹¹

Essayez-le en ligne! Le lien est vers la version détaillée du code. Edit: sauvé 2 octets en n'imprimant rien pour une entrée nulle et 1 octet en utilisant les opérations de vectorisation 3 octets grâce à @ ASCII uniquement. Explication:

         ¹¹ Literal 11
        …   Range
       ⁹    Literal 9
      ×     Vector multiply
     θ      (First) input
    I       Cast to number
   ⁺        Vector add
  N         Input digit as a number
 ∧          Logical AND
I           Cast to string
            Implicitly print on separate lines


je pense que je viens de trouver une alternative qui imprime 0, ici
ASCII uniquement

1

Julia 0,6 , 18 octets

J'utilise un ternaire pour attraper le 0cas et une plage n:9:99pour créer les chiffres. En julia, une plage est un AbstractVectoret peut être utilisée à la place d'un nombre réel Vectordans la plupart des cas, mais elle s'imprimera simplement comme 1:9:91ce qui ne répond pas au défi, donc je l'enveloppe [_;]pour collecter le contenu dans un Vector.

n->n>0?[n:9:99;]:0

Essayez-le en ligne!





0

Perl 5, 62 octets

sub x{$f=$_[0];@x=("0$f",$f);push@x,map$f+$_*10,(1..9)if$f;@x}

Il y a forcément un chemin plus court


0

Gol> <> , 12 octets

I:ZhbF:N9+|;

Essayez-le en ligne!

Comment ça fonctionne

I:ZhbF:N9+|;

I             Take input as number
 :            Duplicate
  Z           Pop and skip one if nonzero
   h          If zero, print the top as number and halt
              Otherwise...
    bF....|   Repeat these commands 11 times
      :N      Print top as number, with newline
        9+    Add 9
           ;  Halt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.