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!

FantaC
fonte
11
o próprio número conta como um número de dois dígitos? (05)?
Destructible Lemon
2
Desafio inverso
FryAmTheEggman
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
Azul
fonte
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

Arnauld
fonte
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
kalsowerus
fonte
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.
Ørjan Johansen
fonte
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.

Assistente de Trigo
fonte
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
Fatalizar
fonte
5

Bash ,31 27 bytes

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

Experimente online!

anterior

eval echo {$1..$(($1?99:0))..9}
marcosm
fonte
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
Uriel
fonte
5

Brain-Flak , 48 bytes

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

Experimente online!

Eu posso adicionar uma explicação mais tarde.

MegaTom
fonte
Brilhante! Tentei combinar o +9 com o comprimento para fazer um contador, mas nunca pensei em fazer o contrário
Jo King
11
Ainda não acabou : P
Assistente de trigo
4

Mathematica, 25 bytes

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

trabalha para 0

J42161217
fonte
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

Gelatina , 12 bytes

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

Experimente online!

Como funciona

⁵²Ḷµ,³%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
fireflame241
fonte
11
Quando eu uso 1 como argumento, ele também fornece 100, que não são dois dígitos
FantaC
Isso não divide os casos 0 e 9.
Ørjan Johansen
Isso ainda não funciona para0
caird coinheringaahing
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)
Mego
fonte
@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

Jörg Hülsermann
fonte
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
Brincadeira
fonte
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).

Christoph
fonte
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]
Uriel
fonte
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

R , 23 bytes

pryr::f(x+0:(10*!!x)*9)

Experimente online!

O link do TIO usa em function(x)vez de pryr::f, pois o TIO não possui o pryrpacote instalado.

Nitrodon
fonte
2

Pyke, 6 bytes (versão antiga)

Confirmação de trabalho

TXU#sq

Explicação:

TX     -   10**2
  U    -  range(^)
   #   - filter(^)
    s  -   digital_root(^)
     q -  ^==input
Azul
fonte
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!

gastropner
fonte
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
Neil
fonte
11 bytes ?
somente ASCII
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!

gggg
fonte
1

Clojure, 33 bytes

(fn[n](if(> n 0)(range n 100 9)))
user84207
fonte
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

Alonoaky
fonte
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

Tom Tanner
fonte
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
Bubbler
fonte