Berlawanan dengan akar digital!

19

Juga dikenal sebagai [analog root]

( Berlawanan dengan akar digital! );)

Root digital dari angka adalah penjumlahan terus-menerus dari digit-digitnya hingga menjadi satu digit, misalnya, root digital 89456 dihitung seperti ini:

8 + 9 + 4 + 5 + 6 = 32

3 + 2 = 5

Root digital 89456 adalah 5.

Diberi digit sebagai input melalui STDIN , cetak / kembalikan semua kemungkinan dua digit angka yang memiliki akar digital itu. Jika Anda memerlukannya, ia dapat menyertakan dirinya sendiri, misalnya 05

Ini semua input dan output yang mungkin:

(Anda bisa memilih apakah akan memasukkan nol di depan untuk digit itu sendiri)

I / O

0 => 0 atau 00 atau tidak sama sekali

1 => 01 dan / atau 1, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91 - Pastikan 1 tidak mengembalikan 100

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

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

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

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

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

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

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

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

Tidak ada celah standar , dan ini , jadi jawaban tersingkat dalam byte menang.

Selamat untuk Heeby Jeeby Man atas jawaban 46 byte otaknya yang menakjubkan!

FantaC
sumber
1
apakah nomor itu sendiri dihitung sebagai angka dua digit? (05)?
Destructible Lemon
2
Inverse challenge
FryAmTheEggman
5
Berapa output untuk 0? Dan lagi, dalam kasus seperti ini di mana hanya ada 10 input yang mungkin, akan sangat bermanfaat untuk memasok output dalam tantangan Anda.
FryAmTheEggman
1
Keputusan Anda tentang cara menangani nol membatalkan banyak jawaban yang diposkan. Akan menjadi pertimbangan untuk memberi tahu para peserta bahwa Anda telah membuat keputusan.
FryAmTheEggman
2
Apakah kebalikan dari akar digital adalah akar analog?
tuskiomi

Jawaban:

5

Pyke, 6 byte

ITV
9+

Coba di sini!

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

JavaScript (ES6), 27 31 30 byte

Kembali 0untuk 0atau berbagai solusi sebaliknya.

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

Demo

Arnauld
sumber
3
Pengunduran diri tanpa komentar apa pun tidak banyak membantu meningkatkan jawaban ...
Arnauld
Bagi sebagian orang mungkin tidak jelas bagian mana yang merupakan fungsi codegolfed yang sebenarnya, dan bagian mana yang merupakan demonstrasi. Mungkin ide yang bagus untuk meletakkan fungsi itu sendiri tepat di bawah garis JavaScript .
David Mulder
@ Davidvidul Terima kasih atas sarannya. Sebenarnya itulah cara saya menjawab sebagian besar waktu. Diperbarui.
Arnauld
Solusi bagus! Maaf karena menyeret solusi lama, tetapi bisakah Anda membatalkannya +untuk menyimpan byte lain? Meskipun itu tidak akan bekerja dengan string stdin seperti itu kurasa.
Craig Ayre
@CraigAyre Saya tidak yakin dari mana +asalnya ... Diperbarui. Terima kasih!
Arnauld
8

05AB1E , 13 12 9 byte

-3 byte terima kasih kepada Adnan

тL<ʒSOSOQ

Cobalah online!

Penjelasan

т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
sumber
Saya pikir Anda dapat mengganti loop tak terhingga dengan SOSO, karena jumlahnya tidak akan pernah lebih besar dari 99.
Adnan
@ Adnan Jangan berpikir, saya jamin dia bisa.
Erik the Outgolfer
1
тL<tidak benar-benar lebih pendek dari polos 99Ý. ;)
Erik the Outgolfer
1
@EriktheOutgolfer Yah, saya mungkin berusaha keras untuk menyelamatkan byte di sana; D
kalsowerus
2
"Tautan" utama? Sejak kapan 05AB1E memiliki tautan? Itu bukan Jelly.
Andrew Savinykh
7

Haskell , 21 byte

f mengambil bilangan bulat dan mengembalikan daftar bilangan bulat.

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

Cobalah online!

  • Mulai dengan angka ddan menghasilkan kisaran dengan setiap angka ke-9 hingga batas 99, kecuali untuk kasus rumit 0.
  • Untuk berhenti lebih awal 0, gunakan kekuatan 0^d==1untuk 0dan ==0untuk semua digit lainnya. Jadi 99^0^0^dmemberi 1untuk 0tetapi 99untuk hal lain.
Ørjan Johansen
sumber
7

Brain-Flak , 46 byte

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

Cobalah online!

Penjelasan

Jawaban ini menggunakan ide dari jawaban Megatom yaitu menggunakan ketinggian tumpukan sebagai perbedaan antara penghitung lingkaran dan kenaikan. Seperti jawaban sebelumnya, jawaban ini memiliki lingkaran luar yang besar untuk menangkap semua nol. Di dalam loop kami mendorong 10 untuk bertindak sebagai penghitung, kami kemudian memulai loop bersarang lainnya. Dalam loop ini kita mengurangi counter dengan 1

({}[()])

Lalu kami memunculkan dua item teratas, yaitu penghitung dan item terakhir yang kami hitung. Kami menambahkan ini ke ketinggian tumpukan untuk mengimbangi penurunan decrementation, kami kemudian mendorong ini dua kali, sekali untuk output dan sekali sehingga dapat dikonsumsi untuk menghitung hasil berikutnya. Mendorong sesuatu dua kali berarti kita secara tidak sengaja mendorong nilai tambahan yang perlu dihapus pada akhir eksekusi.

Alasan mengapa ini hanya mengalahkan Megatom adalah jawaban Megatom dipaksa untuk mendapatkan tumpukan tinggi sementara hasil terakhir masih di tumpukan. Ini berarti mereka terpaksa menggunakan yang agak mahal [()]untuk mengurangi total satu per satu. Dengan memindahkan duplikat ke akhir loop saya dapat menghindari harus menggunakan [()]dengan biaya tambahan {}pada akhir program. Jika Megatom menggunakan strategi ini, jawabannya akan terlihat seperti:

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

juga 46 byte.

Brain-Flak , 52 byte

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

Cobalah online!

Penjelasan

Outerloop utama membuat case khusus untuk input nol. Jika nol adalah input, kita melompati seluruh loop, pop nol dan kemudian tidak menghasilkan apa-apa. Kalau tidak, kita memasuki loop. Di sini kita mendorong loop 10 kali setiap kali menambahkan 9 ke atas tumpukan, menjaga nilai-nilai lama. Karena 9 mempertahankan jumlah digital, ini akan memberi kita nilai selanjutnya. Setelah loop telah kedaluwarsa, kami menggunakan nol yang dihasilkannya untuk keluar dari loop yang kemudian muncul {}di akhir.

Brain-Flak , 56 byte

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

Cobalah online!

Penjelasan

Versi ini bekerja sangat mirip dengan yang terakhir, kecuali kita mengulangi 9 kali, bukannya 10 meninggalkan nilai aslinya. Untuk melakukan ini, kita harus mengatur ulang cara kita menangani memori sedikit. Semua byte yang mungkin telah kita simpan menggunakan metode ini dimasukkan ke dalam pembersihan.

Wisaya Gandum
sumber
46 tidak mempertahankan nomor asli :(
Jo King
@ JoKing Ya, itu hanya kasus 2 digit. Yang menurut saya adalah semacam niat dari pertanyaan itu, sehingga membuat saya cukup senang.
Wheat Wizard
Pekerjaan yang baik! Anda mendapatkan hadiahnya.
FantaC
5

Brachylog , 12 byte

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

Cobalah online!

Penjelasan

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

Bash ,31 27 byte

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

Cobalah online!

sebelumnya

eval echo {$1..$(($1?99:0))..9}
marcosm
sumber
bagaimana seseorang menemukan halaman manual / bantuan bash /? tentang "{x..y..z}"? disebut apakah itu?
Olivier Dulac
menemukannya: di halaman manual, cari [^.] \. \. [^.]: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}

Bagaimana?

⍵,10⍴9 - input gabungan dengan 10 9 s ( ⍵ 9 9 9 9 9 9 9 9 9 9).

+\ - jumlah kumulatif.

(×⍵)/ - perluas waktu signum - di mana signum memberi 1 untuk 1-9 dan 0 untuk 0.

Cobalah online!

Dyalog APL, 24 byte

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

Membutuhkan ⎕IO←0 .

Bagaimana?

                      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
sumber
5

Brain-Flak , 48 byte

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

Cobalah online!

Saya dapat menambahkan penjelasan nanti.

MegaTom
sumber
Cemerlang! Saya mencoba menggabungkan +9 dengan panjang untuk membuat counter, tetapi saya tidak pernah berpikir untuk melakukannya sebaliknya
Jo King
1
Ini belum berakhir : P
Wheat Wizard
4

Mathematica, 25 byte

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

bekerja untuk 0

J42161217
sumber
Tidak berhasil 0. Ini juga tidak akan termasuk angka-angka yang digit-digitnya berjumlah lebih dari 9. (mis. Tidak 9akan ada 99dalam output).
JungHwan Min
Saya mengerti apa yang kamu maksud. Apakah Anda hanya memeriksa kode "saya"? menyebabkan banyak kode di sini tidak berfungsi untuk 0 ...
J42161217
1
Nah, saya cenderung fokus pada kode Mathematica karena itu bahasa yang saya tahu paling baik. Tidak bermaksud menargetkan Anda atau apa pun. Saya minta maaf jika sepertinya begitu.
JungHwan Min
semua tetap dan berfungsi
J42161217
Apa? Tidak ada builtin?
OldBunny2800
4

Jelly , 12 byte

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

Cobalah online!

Bagaimana itu bekerja

⁵²Ḷµ,³%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
sumber
1
Ketika saya menggunakan 1 sebagai argumen, ia juga memberi angka 100, yang bukan dua digit
FantaC
Ini tidak membagi 0 dan 9 kasus.
Ørjan Johansen
Ini masih tidak berhasil0
caird coinheringaahing
4

Sebenarnya , 18 byte

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

Cobalah online!

Penjelasan:

╗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
sumber
@FryAmTheEggman Diperbaiki.
Mego
4

PHP, 41 Bytes

mencetak nilai yang digarisbawahi menggarisbawahi

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

ERAadalah konstanta terpendek di PHP dengan nilai 131116. Anda dapat menggantinya dengan alternatif yang membosankan 100atau mengakhiri program dengandie

Versi Online

Jörg Hülsermann
sumber
4

Brain-Flak , 54 52 byte

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

Cobalah online!

Perampokan pertama saya dengan Brain-Flak, dan saya pikir saya telah melakukannya dengan cukup baik. Adakah yang lebih berpengalaman memiliki saran?

Bagaimana itu bekerja:

{ 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
Jo King
sumber
1
Kerja bagus! Selamat Datang di Brain-Flak.
MegaTom
3

PHP, 35

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

Buat rentang [$argn, 100)dengan langkah 9sebagai array dan cetaklah. Jika inputnya 0menciptakan range [0,0]=> array(0).

Christoph
sumber
3

Python, 48 51 byte

3 byte disimpan berkat @WheatWizard

lambda n:[x for x in range(100)if~-n==~-x%9or x==n]
Uriel
sumber
1
coba ~-xalih-alih(x-1)
Wheat Wizard
1
masih dengan tip @ WheatWizard, hapus spasi diif ~-x%9
Felipe Nardi Batista
Sekarang Anda dapat melakukan ~-n==~-x%9or x==nuntuk menyimpan byte
Wheat Wizard
Saya perlu mengajukan pertanyaan konyol ... Saya ingin menjalankan ini. Bagaimana cara menjalankan kode ini? Ada beberapa konstruksi di sini yang saya pelajari (terutama ~ operator)
Allen Fisher
2

R , 23 byte

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

Cobalah online!

TIO menggunakan tautan function(x)alih-alih pryr::f, karena TIO tidak pryrmenginstal paket.

Nitrodon
sumber
2

Pyke, 6 byte (versi lama)

Komitmen bekerja

TXU#sq

Penjelasan:

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

C (gcc) , 55 byte

f()tidak perlu dipanggil dengan argumen apa pun; yang nhanya ada bukannya di luar fungsi untuk menyimpan byte.

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

Cobalah online!

gastropner
sumber
Anda dapat menyimpan 2 byte dengan meletakkan bagian printfdalam header loop: Cobalah online!
DLosc
@Docosc myeah, tetapi kemudian mulai satu nomor terlambat.
gastropner
Kata-katanya bisa lebih jelas, tetapi pertanyaannya memungkinkan mulai dari (misalnya) 10 bukannya 1: "... semua kemungkinan dua digit angka yang memiliki akar digital itu. Jika Anda memerlukannya , ia dapat menyertakan [tunggal -digit angka] sendiri, mis. 05. " Dengan kata lain, termasuk nomor satu digit dalam output diizinkan tetapi tidak diperlukan .
DLosc
2

Arang , 14 11 byte

I∧N⁺Iθ×⁹…¹¹

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 2 byte dengan tidak mencetak apa pun untuk input nol dan 1 byte dengan menggunakan operasi vektorisasi 3 byte berkat hanya @ ASCII. Penjelasan:

         ¹¹ 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
sumber
11 byte ?
ASCII
Saya pikir saya baru saja menemukan alternatif yang mencetak 0, di sini
ASCII-hanya
1

Julia 0,6 , 18 byte

Saya menggunakan ternary untuk menangkap 0case, dan range n:9:99untuk membuat angka. Di julia suatu rentang adalah AbstractVectordan dapat digunakan sebagai pengganti angka aktual Vectordalam kebanyakan kasus, tetapi hanya akan dicetak karena 1:9:91tidak memenuhi tantangan, jadi saya membungkusnya [_;]untuk mengumpulkan konten menjadi a Vector.

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

Cobalah online!

gggg
sumber
1

Clojure, 33 byte

(fn[n](if(> n 0)(range n 100 9)))
pengguna84207
sumber
1

Clojure , 38 byte

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

atau sebagai fungsi anonim yaitu 29 byte

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

Cobalah online!

terima kasih @steadybox

Alonoaky
sumber
1
Output ketika n=9tidak ada nomor terakhir 99,. Cobalah online! Anda juga dapat menyimpan byte dengan menghapus spasi di antara f[n]dan (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}

Pasti ada jalan yang lebih pendek

Tom Tanner
sumber
0

Gol> <> , 12 byte

I:ZhbF:N9+|;

Cobalah online!

Bagaimana itu bekerja

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
sumber