Monday Mini-Golf: Serangkaian pertanyaan kode-golf pendek , diposting (mudah-mudahan!) Setiap hari Senin.
(Maaf saya terlambat lagi; saya jauh dari komputer saya pada dasarnya kemarin dan hari ini.)
Kami programmer (terutama pegolf-kode) pasti suka urutan bilangan bulat sewenang-wenang. Kami bahkan memiliki seluruh situs yang didedikasikan untuk urutan ini yang saat ini memiliki sekitar 200.000 entri. Dalam tantangan ini, kami akan menerapkan serangkaian rangkaian ini lagi.
Tantangan
Tantangan Anda adalah menulis sebuah program atau fungsi yang menggunakan bilangan bulat N , dan mengeluarkan urutan bilangan bulat 10, di mana setiap bilangan bulat berikutnya ditentukan dengan cara ini:
- Mulai dari 1.
Untuk setiap digit D dalam representasi basis 10 integer sebelumnya:
- Jika D adalah 0, tambahkan satu ke integer saat ini.
- Jika tidak, kalikan bilangan bulat saat ini dengan D .
Detail
- Anda dapat berasumsi bahwa 0 < N <2 31 .
- Anda harus mengeluarkan setiap bilangan bulat dalam urutan, mulai dengan nomor input, hingga angka kurang dari 10 tercapai.
- Outputnya bisa berupa array, atau string yang dipisahkan oleh spasi, koma, baris baru, atau kombinasi dari semuanya.
- Ruang trailing dan / atau baris baru diizinkan, tetapi bukan tanda koma.
- Seharusnya tidak pernah ada nol terkemuka.
Contohnya
Contoh 1: 77
Contoh ini cukup mudah:
77 = 1*7*7 = 49
49 = 1*4*9 = 36
36 = 1*3*6 = 18
18 = 1*1*8 = 8
Dengan demikian, output yang tepat adalah 77 49 36 18 8
.
Contoh 2: 90
Di sini kita memiliki:
90 = 1*9+1 = 10
10 = 1*1+1 = 2
Jadi hasilnya akan 90 10 2
.
Contoh 3: 806
Baca persamaan dari kiri ke kanan:
806 = 1*8+1*6 = 54 (((1*8)+1)*6)
54 = 1*5*4 = 20
20 = 1*2+1 = 3
Output seharusnya 806 54 20 3
.
Kasus uji
Angka pertama di setiap baris adalah input, dan baris penuh adalah output yang diharapkan.
77 49 36 18 8
90 10 2
249 72 14 4
806 54 20 3
1337 63 18 8
9999 6561 180 9
10000 5
8675309 45369 3240 25 10 2
9999999 4782969 217728 1568 240 9
1234567890 362881 2304 28 16 6
Sebagai referensi, inilah bilangan bulat berikutnya yang tepat dari 10 hingga 100:
Current | Next
--------+-----
10 | 2
11 | 1
12 | 2
13 | 3
14 | 4
15 | 5
16 | 6
17 | 7
18 | 8
19 | 9
20 | 3
21 | 2
22 | 4
23 | 6
24 | 8
25 | 10
26 | 12
27 | 14
28 | 16
29 | 18
30 | 4
31 | 3
32 | 6
33 | 9
34 | 12
35 | 15
36 | 18
37 | 21
38 | 24
39 | 27
40 | 5
41 | 4
42 | 8
43 | 12
44 | 16
45 | 20
46 | 24
47 | 28
48 | 32
49 | 36
50 | 6
51 | 5
52 | 10
53 | 15
54 | 20
55 | 25
56 | 30
57 | 35
58 | 40
59 | 45
60 | 7
61 | 6
62 | 12
63 | 18
64 | 24
65 | 30
66 | 36
67 | 42
68 | 48
69 | 54
70 | 8
71 | 7
72 | 14
73 | 21
74 | 28
75 | 35
76 | 42
77 | 49
78 | 56
79 | 63
80 | 9
81 | 8
82 | 16
83 | 24
84 | 32
85 | 40
86 | 48
87 | 56
88 | 64
89 | 72
90 | 10
91 | 9
92 | 18
93 | 27
94 | 36
95 | 45
96 | 54
97 | 63
98 | 72
99 | 81
100 | 3
Anda dapat menemukan daftar ini diperluas menjadi 10.000 di sini .
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek yang valid dalam byte menang. Tiebreaker pergi ke pengiriman yang mencapai jumlah byte terakhirnya terlebih dahulu. Pemenang akan dipilih Senin depan, 19 Oktober. Semoga beruntung!
Sunting: Selamat kepada pemenang Anda, @isaacg , menggunakan Pyth lagi untuk 14 byte !
|*GHhG
menghemat satu byte lebih?H*GHhG
.PowerShell,
9291908887 bytesumber
(...)
untuk meningkatkan output otomatis ... Saya perlu mengingatnya di masa depan.Pip ,
282523 byteMengambil nomor sebagai argumen baris perintah dan menampilkan urutan pada baris yang berurutan.
Penjelasan:
Sekarang saya senang saya berubah
P
dari pernyataan ke operator beberapa revisi yang lalu.Pa
adalah ekspresi yang mengevaluasia
nilai tetapi juga mengeluarkannya, jadi saya dapat mencetaka
dan secara bersamaan menguji apakah menggunakan kurang dari sepuluht>Pa
.sumber
CJam,
26252422 byteatau
Cobalah online.
Bagaimana itu bekerja
Kedua program pada dasarnya melakukan hal yang sama; yang pertama adalah pendekatan rekursif, yang kedua adalah pendekatan berulang. Saya akan jelaskan dulu, yang menurut saya lebih menarik.
sumber
Minkolang 0.7 ,
5246 byteWoohoo bersarang loop!
Penjelasan
sumber
Mathematica, 66 byte
sumber
Python 3, 74,
76byteSudah ada jawaban Python di sini dengan mengurangi, jadi saya ingin melakukannya tanpa itu. Itu harus disebut dengan int.
sumber
Python,
8580 byteIni sekarang dengan benar mencetak seluruh daftar, bukan hanya nilai pertama.
sumber
g=
.K5 , 24 byte
Mengumpulkan daftar item saat beriterasi ke titik tertentu adalah tepat yang dilakukan oleh operator pemindaian
\
. Pada setiap iterasi, saya pertama-tama melemparkan nomor ke string dan kemudian mengevaluasi setiap karakter (.:'$:
), dan meledak nomor ke dalam digit-nya. Lalu saya melakukan pengurangan (/
) dimulai dengan 1 dan menggunakan lambda{(x*y;x+1)@~y}
. Dalam hal inix
adalah nilai yang mengurangi dany
masing-masing istilah urutan.Dalam aksi:
sumber
Julia,
938988868377 byteIni menciptakan fungsi rekursif
f
yang mencetak elemen urutan pada garis yang terpisah.Tidak Disatukan:
Cobalah online
Disimpan 6 byte berkat Dennis!
sumber
n>9
sesuai dengan contoh kedua. Juga,f(n)=(println(n);if(d=n>9)for i=reverse(digits(n)) i<1?d+=1:d*=i end;f(d)end)
sedikit lebih pendek.Ruby
83, 72 byteAsli dinyatakan sebagai fungsi:
Saya mencoba menggunakan
Enumerator.new
tetapi menggunakan banyak byte :-(Ditingkatkan menggunakan rekursi:
sumber
C # & LINQ,
165146 bytej (untuk jarvis) adalah fungsi rekursif. r adalah Daftar int dari hasilnya.
diuji dalam LINQPAD:
sumber
int n = 1
bisaint n=1
, dll.Haskell, 71 byte
Penggunaan:
g 8675309
->[8675309,45369,3240,25,10,2]
.sumber
Matlab, 108
sumber
Java 8, 148 Bytes
diformat
sumber
Jelly , 9 byte
Cobalah online!
sumber