Lihatlah tabel multiplikasi tujuh dari 7 × 0 hingga 7 × 9:
0, 7, 14, 21, 28, 35, 42, 49, 56, 63
Jika kita hanya melihat angka di tempatnya, kita mendapat permutasi dari angka 0 hingga 9:
0, 7, 4, 1, 8, 5, 2, 9, 6, 3
Pertimbangkan untuk mengambil bilangan bulat desimal positif N dan mengganti setiap digit D dalam N dengan digit di tempat 7 × D.
Misalnya, 15209
menjadi 75403
karena 1
peta 7
, 5
peta 5
, 2
peta 4
, 0
peta 0
, dan 9
peta 3
.
Sekarang mari kita ulangi proses ini dengan bilangan bulat desimal baru ini sampai kita melihat siklus, yaitu sampai bilangan bulat yang telah kita lihat muncul.
Misalnya, dengan 15209
kita mendapatkan siklus
15209 -> 75403 -> 95801 -> 35607 -> 15209 -> repeats...
^
|
cycle restarts here
Sebagai contoh lain, 505
memiliki siklus pendek
505 -> 505 -> repeats...
^
|
cycle restarts here
Ternyata untuk setiap N siklus ini akan selalu mengandung tepat 1 atau 4 bilangan bulat yang berbeda. (Saya akan menyerahkan kepada Anda untuk mencari tahu mengapa itu terjadi.) Yang menarik adalah jika Anda menjumlahkan semua bilangan bulat yang berbeda dalam satu siklus, Anda hampir selalu mendapatkan bilangan bulat desimal yang hanya terdiri dari 2
'dan 0
'.
Misalnya, 15209 + 75403 + 95801 + 35607 = 222020.
N = 505 adalah salah satu pengecualian. Satu-satunya bilangan bulat dalam siklus adalah 505 sehingga jumlah totalnya adalah 505 itu sendiri.
Berikut adalah jumlah siklus untuk N = 1 hingga 60:
N sum
1 20
2 20
3 20
4 20
5 5
6 20
7 20
8 20
9 20
10 200
11 220
12 220
13 220
14 220
15 220
16 220
17 220
18 220
19 220
20 200
21 220
22 220
23 220
24 220
25 220
26 220
27 220
28 220
29 220
30 200
31 220
32 220
33 220
34 220
35 220
36 220
37 220
38 220
39 220
40 200
41 220
42 220
43 220
44 220
45 220
46 220
47 220
48 220
49 220
50 50
51 220
52 220
53 220
54 220
55 55
56 220
57 220
58 220
59 220
60 200
Kami akan menyebutnya Urutan Jumlah Siklus Tujuh.
Tantangan
Tulis program atau fungsi yang mengambil dalam bilangan bulat desimal positif N dan mencetak atau mengembalikan, dalam desimal, istilah yang sesuai dari Urutan Jumlah Siklus Tujuh.
Misalnya, jika inputnya adalah 95801
, outputnya seharusnya 222020
. Jika inputnya adalah 505
, output seharusnya 505
. Jika inputnya adalah 54
, output seharusnya 220
.
Kode terpendek dalam byte menang.
sumber
Jawaban:
Pyth, 14 byte
Tidak yakin, mengapa semua orang menentukan hasilnya dengan melihat pola dalam angka. Cukup melakukan prosesnya, menghitung semua angka lingkaran dan menjumlahkannya lebih pendek. Setidaknya dalam Pyth ;-)
Cobalah online: Demonstrasi atau Test Suite
Btw, ini jawaban kode-golf ke-200 saya. Jadi posting ini memberi saya lencana kode-golf Gold.
Penjelasan:
sumber
.u
Python 2, 69 byte
Fungsi ini mudah dijelaskan:
Golf dapat ditingkatkan, saya sebagian besar memposting untuk berbagi metode. Bahasa dengan regex asli harus memungkinkan solusi singkat.
Pernyataan alternatif dari fungsi tersebut adalah
sumber
Python 2, 63 byte
Argumen input diharapkan berupa string.
sumber
strip
bertingkah seperti ini.CJam, 16 byte
Menggunakan algoritma yang sama seperti orang lain:
Suite uji. (Menghasilkan semua hasil dari 1 hingga input.)
Penjelasan
sumber
JavaScript (ES6),
5451 byteMenggunakan metode xnor :
Disimpan 3 byte berkat @charlie !
Penjelasan
Uji
Tampilkan cuplikan kode
Metode naif, 102 byte
Tampilkan cuplikan kode
sumber
n=>/[^05]/.test(n)?`${n}0`.replace(/./g,d=>+d&&2):n
n=>n-(s=`${n}`.replace(/[^0]/g,5))?s*4:n
s*4
trik itu luar biasa! Saya rasa Anda harus memposting ini sebagai jawaban yang terpisah karena metode ini cukup berbeda dan jauh lebih pendek daripada saya. :)Mathematica,
837760 karakterTidak disatukan
sumber
JavaScript (ES5), 40 byte
Ini adalah evolusi dari solusi user81655 , menggunakan pendekatan alternatif yang dijelaskan oleh xnor .
Penjelasan
Jumlah digit bukan nol dalam siklus 4 selalu 20, karena siklus digit dapat melalui 1 → 7 → 9 → 3, atau 2 → 4 → 8 → 6, atau 5 → 5 → 5 → 5 → 5. Jadi mengganti setiap digit dengan 5 tidak mengubah jumlahnya.
Tindakan penggantian itu digunakan kembali untuk membedakan 4-siklus dari 1-siklus - jika hasil penggantian berbeda dari input, maka itu adalah 4-siklus, kalau tidak itu adalah 1-siklus.
NB: String template
`${n}`
hanya untuk keterbacaan,(n+'')
memiliki panjang yang sama.sumber
n=>(s=[...`${n}`].map(d=>+d&&5).join``)^n?s*4:n
sed, 26 byte
/[^05]/{s/[^0]/2/g;s/$/0/}
(Pandangan lain tentang pendekatan "ganti dengan 2".)
Contohnya
echo '500' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'
→500
echo '501' | sed '/[^05]/{s/[^0]/2/g;s/$/0/}'
→2020
sumber
Perl 6 ,
68 55 53 3633 byteIni jelas merupakan cara yang salah untuk melakukan ini, jika angka hanya terdiri dari
5
s dan0
s itu akan mengembalikan objek Match, jika tidak maka akan menggantikan semuanya kecuali0
dengan a2
, dan tambahkan a0
sampai akhir.(Objek Pencocokan akan berperilaku seperti angka jika Anda menggunakannya sebagai satu)
Meskipun karena itu salah, itu membuatnya mudah untuk menunjukkan angka langka dengan memanggil
gist
metode.pemakaian:
sumber