Oposto da raiz digital!


19

Também conhecida como [raiz analógica]

( Oposto da raiz digital! );)

A raiz digital de um número é a soma contínua de seus dígitos até que seja um único dígito; por exemplo, a raiz digital de 89456 é calculada da seguinte forma:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

A raiz digital de 89456 é 5.

Dado um dígito como entrada via STDIN , imprima / retorne todos os possíveis números de dois dígitos que possuem essa raiz digital. Se você precisar, ele pode incluir-se, por exemplo, 05

Estas são todas as entradas e saídas possíveis:

(Você escolhe se deseja ou não incluir o zero inicial para o próprio dígito)

I / O

0 => 0 ou 00 ou nada

1 => 01 e / ou 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Verifique se 1 não retorna 100

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

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

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

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

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

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

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

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

Sem brechas padrão , e é um , então a resposta mais curta em bytes vence.

Parabéns a Heeby Jeeby Man por sua incrível resposta cerebral de 46 bytes!


11
o próprio número conta como um número de dois dígitos? (05)?
Destructible Lemon


5
Qual deve ser a saída para 0? E, novamente, em um caso como este, onde há apenas 10 entradas possíveis, seria de grande benefício fornecer as saídas em seu desafio.
FryAmTheEggman 29/05

11
Sua decisão sobre como lidar com zero invalida muitas das respostas postadas. Seria bom informar aos participantes que você tomou uma decisão.
FryAmTheEggman 29/05

2
o oposto de uma raiz digital é uma raiz analógica?
Tuskiomi

Respostas:


5

Pyke, 6 bytes

ITV
9+

Experimente aqui!

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 bytes

Retorna 0para 0ou uma variedade de soluções caso contrário.

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

Demo


3
Um voto negativo sem nenhum comentário não ajuda muito a melhorar a resposta ...
Arnauld

Para alguns, pode não estar claro qual parte é a função codegolf real e qual parte é uma demonstração. Pode ser uma boa ideia colocar a função em si logo abaixo da linha JavaScript .
David Mulder

@DavidMulder Obrigado pela sugestão. Na verdade, é assim que respondo na maioria das vezes. Atualizada.
Arnauld

Ótima solução! Desculpe por arrastar uma solução antiga, mas você pode soltar o +para salvar outro byte? Embora não funcionasse com stdin string dessa maneira, suponho.
Craig Ayre

@CraigAyre Eu não tenho certeza de onde isso +veio ... Atualizado. Obrigado!
Arnauld 12/01

8

05AB1E , 13 12 9 bytes

-3 bytes graças a Adnan

тL<ʒSOSOQ

Experimente online!

Explicação

т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

Eu acho que você pode substituir o loop infinito por SOSO, uma vez que o número nunca será maior do que 99.
Adnan

@ Adnan Não pense, garanto que ele pode.
Erik the Outgolfer

11
тL<não é realmente mais curto do que simples 99Ý. ;)
Erik the Outgolfer

11
@EriktheOutgolfer Bem, eu provavelmente estava tentando muito salvar um byte lá; D
kalsowerus 29/17/17

2
Principal "link"? Desde quando 05AB1E tem links? Não é geléia.
Andrew Savinykh

7

Haskell , 21 bytes

f pega um número inteiro e retorna uma lista de números inteiros.

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

Experimente online!

  • Começa com o dígito de gera o intervalo com cada nono número até um limite de 99, exceto no caso complicado de 0.
  • Para parar cedo 0, usa esse poder 0^d==1para 0e ==0para todos os outros dígitos. Assim, 99^0^0^d1para, 0mas 99para qualquer outra coisa.


7

Brain-Flak , 46 bytes

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

Experimente online!

Explicação

Esta resposta usa uma idéia da resposta da Megatom, ou seja, usar a altura da pilha como a diferença entre o contador de loop e o incremento. Como respostas anteriores, esta resposta possui um loop externo grande para capturar todos os zeros. Dentro do loop, pressionamos 10 para atuar como um contador e, em seguida, iniciamos outro loop aninhado. Nesse loop, decrementamos o contador em 1

({}[()])

Em seguida, exibimos os dois itens principais, que são o contador e o último item que calculamos. Nós os adicionamos à altura da pilha para contrabalançar a decrementação e, em seguida, pressionamos isso duas vezes, uma vez para a saída e outra para que possa ser consumida para calcular o próximo resultado. Pressionar as coisas duas vezes significa que acidentalmente pressionamos um valor adicional que precisa ser removido no final da execução.

A razão pela qual isso apenas supera o Megatom é a resposta do Megatom é forçada a obter a altura da pilha enquanto o último resultado ainda está na pilha. Isso significa que eles são forçados a usar um bastante caro [()]para diminuir o total em um. Ao mover a duplicata para o final do loop, sou capaz de evitar ter que usar [()]o custo de uma adicional {}no final do programa. Se a Megatom usasse essa estratégia, sua resposta seria:

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

também 46 bytes.

Flacidez Cerebral , 52 bytes

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

Experimente online!

Explicação

O loop externo principal faz um caso especial para a entrada de zero. Se zero for inserido, saltamos sobre o loop inteiro, zeramos o zero e depois não produzimos nada. Caso contrário, entramos no loop. Aqui pressionamos o loop 10 vezes cada vez, adicionando 9 ao topo da pilha, mantendo os valores antigos. Como 9 preserva somas digitais, isso nos dará o próximo valor. Depois que o loop expirar, usamos o zero gerado para sair do loop, que é exibido {}no final.

Brain-Flak , 56 bytes

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

Experimente online!

Explicação

Esta versão funciona de maneira muito semelhante à última, exceto que repetimos 9 vezes em vez de 10, deixando de fora o valor original. Para fazer isso, precisamos reorganizar a maneira como lidamos com a memória um pouco. Todos os bytes que podemos ter salvado usando esse método são colocados em limpeza.


O 46 não preserva o número original :(
Jo King

@ JoKing Sim, apenas os casos de 2 dígitos. O que eu acho que é o tipo de intenção da pergunta, o que me deixa muito feliz.
Assistente de trigo

Bom trabalho! Você ganhou a recompensa.
FantaC 15/0118


5

Braquilog , 12 bytes

0g|g{t+₉}ᵃ¹⁰

Experimente online!

Explicação

0g               Input = 0, Output = [0]
  |              Or
   g{   }ᵃ¹⁰     Accumulate 10 times, starting with [Input]
     t+₉         Take the last element, add 9

5

Bash ,31 27 bytes

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

Experimente online!

anterior

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

como encontrar as páginas de manual / bash help /? sobre "{x..y..z}"? como isso é chamado?
Olivier Dulac

encontrou: na página do manual, procure [^.] \. \. [^.]: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 bytes

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

Quão?

⍵,10⍴9- concatene a entrada com 10 9s ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - soma acumulada.

(×⍵)/ - expanda os tempos de referência - em que a referência fornece 1 para 1-9 e 0 para 0.

Experimente online!

Dyalog APL, 24 bytes

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

Requer ⎕IO←0.

Quão?

                      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 bytes

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

trabalha para 0


Não funciona para 0. Isso também não inclui números cujos dígitos somam um número maior que 9. (por exemplo 9, não teriam 99na saída).
JungHwan Min

Eu vejo o que você quer dizer. Você inspeciona apenas os códigos "meus"? fazer com que muitos códigos aqui não funcionem para 0 ...
J42161217 de

11
Bem, costumo focar no código do Mathematica, porque essa é a linguagem que eu conheço melhor. Não pretendia atingir você ou algo assim. Peço desculpas se pareceu.
JungHwan Min

tudo fixo e funcionando #
J42161217 # 294217

O que? Não embutido?
OldBunny2800


4

Na verdade , 18 bytes

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

Experimente online!

Explicação:

╗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 29/05

4

PHP, 41 bytes

imprime valores separados por sublinhado

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

ERAé a constante de mais curto em PHP com o valor 131116. Você pode substituí-lo pela alternativa chata 100ou encerrar o programa comdie

Versão Online


4

Brain-Flak , 54 52 bytes

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

Experimente online!

Minha primeira incursão no Brain-Flak, e acho que me saí muito bem. Alguém com mais experiência tem conselhos?

Como funciona:

{ 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

11
Bom trabalho! Bem-vindo ao Brain-Flak.
MegaTom 12/01


3

PHP, 35

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

Cria o intervalo [$argn, 100)com uma etapa de 9como matriz e o imprime. Se a entrada for, 0ela cria o intervalo [0,0]=> array(0).


3

Python, 48 51 bytes

3 bytes salvos graças a @WheatWizard

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

11
tente em ~-xvez de(x-1)
Wheat Wizard

11
ainda com @ ponta do WheatWizard, remova o espaço emif ~-x%9
Felipe Nardi Batista

Agora você pode ~-n==~-x%9or x==nsalvar um byte
Assistente de Trigo


Eu preciso fazer uma pergunta boba ... Eu gostaria de fazer isso. Como faço para que esse código seja executado? Existem algumas construções aqui eu estou aprendendo sobre (principalmente o operador ~)
Allen Fisher




2

C (gcc) , 55 bytes

f()não precisa realmente ser chamado com nenhum argumento; o nestá lá em vez de fora da função para salvar um byte.

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

Experimente online!


Você pode economizar 2 bytes colocando o printfinterior do cabeçalho do loop: Experimente online!
DLosc

@DLosc myeah, mas depois começa um número tarde demais.
Gastropner

A redação poderia ser mais clara, mas a pergunta permite começar em (por exemplo) 10 em vez de 1: "... todos os possíveis números de dois dígitos que possuem essa raiz digital. Se você precisar , pode incluir [o único número de dígitos), por exemplo, 05. " Em outras palavras, incluir o número de um dígito na saída é permitido, mas não obrigatório .
DLosc

2

Carvão , 14 11 bytes

I∧N⁺Iθ×⁹…¹¹

Experimente online! Link é a versão detalhada do código. Editar: salvou 2 bytes por não imprimir nada para entrada zero e 1 byte usando operações de vetorização de 3 bytes graças a @ ASCII-only. Explicação:

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


Acho que encontrei uma alternativa que imprime 0, aqui
ASCII-only

1

Julia 0.6 , 18 bytes

Uso um ternário para entender o 0caso e um intervalo n:9:99para criar os números. Em julia, um intervalo é um AbstractVectore pode ser usado no lugar de um Vectornúmero real na maioria dos casos, mas ele será impresso apenas como o 1:9:91que não satisfaz o desafio, então eu o envolvo [_;]para coletar o conteúdo em um Vector.

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

Experimente online!




1

Clojure , 38 bytes

(defn f[n](if(pos? n)(range n 100 9)))

ou como função anônima com 29 bytes

(#(if(pos? %)(range % 100 9))n)

Experimente online!

obrigado @steadybox


11
A saída quando n=9está faltando o último número 99,. Experimente online! Além disso, você pode salvar um byte removendo o espaço entre f[n]e (if(....
Steadybox

0

Perl 5, 62 bytes

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

É provável que haja uma maneira mais curta


0

Gol> <> , 12 bytes

I:ZhbF:N9+|;

Experimente online!

Como funciona

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.