Di fronte alla radice digitale!


19

Conosciuta anche come [radice analogica]

( Di fronte alla radice digitale! );)

La radice digitale di un numero è la somma continua delle sue cifre fino a quando non è una singola cifra, ad esempio, la radice digitale di 89456 viene calcolata in questo modo:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

La radice digitale di 89456 è 5.

Data una cifra come input tramite STDIN , stampa / restituisce tutti i possibili numeri a due cifre che hanno quella radice digitale. Se necessario, può includere se stesso, ad esempio 05

Questi sono tutti i possibili ingressi e uscite:

(Puoi scegliere se includere o meno lo zero iniziale per la cifra stessa)

I / O

0 => 0 o 00 o niente

1 => 01 e / o 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Assicurarsi che 1 non restituisca 100

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

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

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

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

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

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

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

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

Nessuna scappatoia standard , ed è , quindi vince la risposta più breve in byte.

Congratulazioni a Heeby Jeeby Man per la sua straordinaria risposta da 46 byte a scaglie di cervello!


1
il numero stesso conta come un numero a due cifre? (05)?
Limone distruttibile


5
Quale dovrebbe essere l'output per 0? E ancora, in un caso come questo in cui ci sono solo 10 possibili input, sarebbe di grande beneficio fornire gli output nella tua sfida.
FryAmTheEggman,

1
La tua decisione su come gestire zero invalida molte delle risposte che sono state pubblicate. Sarebbe premuroso far sapere ai partecipanti che hai preso una decisione.
FryAmTheEggman,

2
l'opposto di una radice digitale è una radice analogica?
tuskiomi,

Risposte:


5

Pyke, 6 byte

ITV
9+

Provalo qui!

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 byte

Ritorni 0per 0o una serie di soluzioni altrimenti.

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

dimostrazione


3
Un downvote senza alcun commento non aiuta molto a migliorare la risposta ...
Arnauld

Per alcuni potrebbe non essere chiaro quale parte sia l'attuale funzione codegolfata e quale parte sia una dimostrazione. Potrebbe essere una buona idea mettere la funzione stessa direttamente sotto la riga JavaScript .
David Mulder,

@DavidMulder Grazie per il suggerimento. In realtà è così che rispondo la maggior parte delle volte. Aggiornato.
Arnauld,

Bella soluzione! Ci scusiamo per il trascinamento di una vecchia soluzione, ma potresti lasciar perdere +per salvare un altro byte? Anche se non funzionerebbe con la stringa stdin in questo modo, suppongo.
Craig Ayre,

@CraigAyre Non sono sicuro da dove +provenga ... Aggiornato. Grazie!
Arnauld,

8

05AB1E , 13 12 9 byte

-3 byte grazie ad Adnan

тL<ʒSOSOQ

Provalo online!

Spiegazione

т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

Penso che puoi sostituire il ciclo infinito con SOSO, poiché il numero non sarà mai maggiore di 99.
Adnan,

@Adnan Non pensare, ti assicuro che può.
Erik the Outgolfer,

1
тL<non è molto più corto del semplice 99Ý. ;)
Erik the Outgolfer,

1
@EriktheOutgolfer Beh, probabilmente stavo cercando di salvare un byte lì; D
kalsowerus,

2
"Collegamento" principale? Da quando 05AB1E ha collegamenti? Non è Jelly.
Andrew Savinykh,

7

Haskell , 21 byte

f accetta un numero intero e restituisce un elenco di numeri interi.

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

Provalo online!

  • Inizia con la cifra de genera l'intervallo con ogni 9 ° numero fino a un limite di 99, ad eccezione del caso complicato di 0.
  • Per fermarsi presto 0, usa quella potenza 0^d==1per 0e ==0per tutte le altre cifre. Così 99^0^0^d1per 0ma 99per qualsiasi altra cosa.


7

Brain-Flak , 46 byte

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

Provalo online!

Spiegazione

Questa risposta utilizza un'idea della risposta di Megatom, ovvero l'uso dell'altezza dello stack come differenza tra il contatore di loop e l'incremento. Come le risposte precedenti, questa risposta ha un ampio ciclo esterno per catturare tutti gli zeri. All'interno del loop spingiamo 10 per agire come contatore, quindi iniziamo un altro loop nidificato. In questo ciclo decrementiamo il contatore di 1

({}[()])

Quindi pop i primi due elementi, che sono il contatore e l'ultimo elemento che abbiamo calcolato. Aggiungiamo questi all'altezza dello stack per controbilanciare la decrementazione, quindi spingiamo due volte, una volta per l'output e una volta in modo che possa essere consumato per calcolare il risultato successivo. Spingere le cose due volte significa che spingiamo accidentalmente un valore aggiuntivo che deve essere rimosso alla fine dell'esecuzione.

Il motivo per cui questo batte appena Megatom è che la risposta di Megatom è costretta a raggiungere le altezze dello stack mentre l'ultimo risultato è ancora nello stack. Ciò significa che sono costretti a usare un metodo piuttosto costoso [()]per ridurre il totale di uno. Spostando il duplicato alla fine del ciclo sono in grado di evitare di doverlo utilizzare [()]al costo di un ulteriore {}alla fine del programma. Se Megatom dovesse usare questa strategia la sua risposta sarebbe simile a:

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

anche 46 byte.

Brain-Flak , 52 byte

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

Provalo online!

Spiegazione

L'outerloop principale costituisce un caso speciale per l'immissione di zero. Se viene immesso zero, saltiamo sull'intero loop, pop zero e quindi non viene emesso nulla. Altrimenti entriamo nel loop. Qui spingiamo il loop 10 volte ogni volta aggiungendo 9 in cima allo stack, mantenendo vecchi valori. Dal momento che 9 conserva somme digitali, questo ci porterà al valore successivo. Una volta scaduto il loop, usiamo lo zero che ha generato per uscire dal loop, che viene quindi visualizzato {}alla fine.

Brain-Flak , 56 byte

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

Provalo online!

Spiegazione

Questa versione funziona in modo molto simile all'ultima, tranne per il fatto che ripetiamo 9 volte anziché 10, tralasciando il valore originale. Per fare questo dobbiamo riorganizzare un po 'il modo in cui gestiamo la memoria. Tutti i byte che potremmo aver salvato usando questo metodo vengono messi in cleanup.


Il 46 non conserva il numero originale :(
Jo King

@JoKing Sì, fa solo i casi a 2 cifre. Il che penso sia una specie dell'intenzione della domanda, quindi questo mi rende piuttosto felice.
Wheat Wizard

Bel lavoro! Hai guadagnato la taglia.
FantaC,


5

Brachylog , 12 byte

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

Provalo online!

Spiegazione

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

5

bash ,31 27 byte

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

Provalo online!

precedente

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

come si trovano le pagine man / bash help /? su "{x..y..z}"? come si chiama?
Olivier Dulac,

trovato: nella pagina man, cerca [^.] \. \. [^.]: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 byte

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

Come?

⍵,10⍴9- concatena l'input con 10 9s ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - somma cumulativa.

(×⍵)/ - espandi i tempi signum - dove signum dà 1 per 1-9 e 0 per 0.

Provalo online!

Dyalog APL, 24 byte

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

Richiede ⎕IO←0.

Come?

                      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 byte

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

funziona per 0


Non funziona per 0. Ciò non includerebbe anche i numeri le cui cifre si sommano a un numero maggiore di 9. (ad esempio 9, non dovrebbero avere 99nell'output).
JungHwan Min,

Capisco cosa intendi. Ispezioni solo i "miei" codici? perché molti codici qui non funzionano per 0 ...
J42161217

1
Welp, tendo a concentrarmi sul codice Mathematica perché è la lingua che conosco meglio. Non intendevo mirare a te o altro. Mi scuso se mi è sembrato.
JungHwan Min,

tutto risolto e funzionante
J42161217

Che cosa? Nessun builtin?
OldBunny2800,


4

In realtà , 18 byte

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

Provalo online!

Spiegazione:

╗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 byte

stampa i valori separati di sottolineatura

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

ERAè la costante più breve in PHP con il valore 131116. Puoi sostituirlo con l'alternativa noiosa 100o terminare il programma condie

Versione online


4

Brain-Flak , 54 52 byte

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

Provalo online!

La mia prima incursione con Brain-Flak e penso di aver fatto abbastanza bene. Chiunque abbia più esperienza ha consigli?

Come funziona:

{ 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
Buon lavoro! Benvenuti in Brain-Flak.
MegaTom,


3

PHP, 35

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

Crea l'intervallo [$argn, 100)con un passaggio di 9come array e lo stampa. Se l'input è 0, crea l'intervallo [0,0]=> array(0).


3

Python, 48 51 byte

3 byte salvati grazie a @WheatWizard

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

1
prova ~-xinvece di(x-1)
Wheat Wizard

1
sempre con la punta di @ WheatWizard, rimuovi lo spazio inif ~-x%9
Felipe Nardi Batista,

Ora puoi fare ~-n==~-x%9or x==nper salvare un byte
Wheat Wizard


Devo fare una domanda stupida ... Mi piacerebbe farcela. Come faccio a far funzionare questo codice? Qui sto imparando alcuni costrutti (principalmente l'operatore ~)
Allen Fisher

2

R , 23 byte

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

Provalo online!

Il collegamento TIO utilizza function(x)invece di pryr::f, poiché TIO non ha il pryrpacchetto installato.


2

Pyke, 6 byte (vecchia versione)

Impegno di lavoro

TXU#sq

Spiegazione:

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


2

C (gcc) , 55 byte

f()non è necessario in realtà essere chiamato con nessun argomento; l' nè proprio lì, invece di fuori della funzione per salvare un byte.

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

Provalo online!


Puoi salvare 2 byte inserendo l' printfheader all'interno del loop: provalo online!
DLosc,

@DLosc, sì, ma inizia un numero troppo tardi.
Gastropner,

La formulazione potrebbe essere più chiara, ma la domanda consente di iniziare da (ad esempio) 10 anziché 1: "... tutti i possibili numeri a due cifre che hanno quella radice digitale. Se necessario , può includere [il singolo -digit number] stesso, ad es. 05. " In altre parole, è consentito, ma non necessario , includere il numero di una cifra nell'output .
DLosc

2

Carbone , 14 11 byte

I∧N⁺Iθ×⁹…¹¹

Provalo online! Il collegamento è alla versione dettagliata del codice. Modifica: salvato 2 byte non stampando nulla per zero input e 1 byte usando operazioni di vettorizzazione 3 byte grazie solo a @ ASCII. Spiegazione:

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


penso di aver appena trovato un'alternativa che stampa 0, qui
solo ASCII il

1

Julia 0.6 , 18 byte

Uso un ternario per catturare il 0caso e un intervallo n:9:99per creare i numeri. In julia un intervallo è un AbstractVectore può essere usato al posto di un numero reale Vectornella maggior parte dei casi, ma verrà stampato solo perché 1:9:91non soddisfa la sfida, quindi lo avvolgo [_;]per raccogliere il contenuto in un Vector.

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

Provalo online!




1

Clojure , 38 byte

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

o come funzione anonima che è di 29 byte

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

Provalo online!

grazie @steadybox


1
L 'output quando n=9manca l'ultimo numero 99,. Provalo online! Inoltre, è possibile salvare un byte rimuovendo lo spazio tra f[n]e (if(....
Steadybox

0

Perl 5, 62 byte

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

Ci sarà sicuramente un modo più breve


0

Gol> <> , 12 byte

I:ZhbF:N9+|;

Provalo online!

Come funziona

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.