pengantar
Desimal akan berakhir jika memiliki jumlah digit desimal yang terbatas. Misalnya, 0,4 (2/5) berakhir karena memiliki satu angka desimal.
Sebuah desimal murni periodik jika memiliki angka desimal angka tak terbatas dan tidak memiliki angka desimal sebelum pengulangannya (bagian dari desimal yang berulang.) Misalnya, 0,142857142857142… (1/7) murni periodik karena ia memiliki pengulangan berulang 142857, yang mulai berulang segera setelah titik desimal.
Suatu desimal pada akhirnya periodik jika memiliki angka desimal angka tak terhingga dan memiliki angka desimal angka hingga sebelum berulang (bagian dari desimal yang berulang.) Misalnya, 0.16666666666666666 ... (1/6) akhirnya periodik karena repetend 6 mulai berulang setelah 1.
Tugas Anda
Tulis sebuah program atau fungsi yang, ketika diberi angka p dan q (bilangan bulat, 0 <= p < q <= 100), akan menentukan apakah representasi desimal p / q berakhir, murni periodik, atau akhirnya periodik.
Anda harus keluaran a
jika itu Pengakhiran (yaitu 0,1), b
jika Murni periodik (yaitu 0,333 ...), atau c
jika itu Akhirnya periodik (yaitu 0,166 ...), di mana a
, b
dan c
apapun yang berbeda, string konstan pilihan Anda.
Uji kasus
0/1 => Terminating
0/2 => Terminating
1/2 => Terminating
0/3 => Terminating
1/3 => Purely Periodic
2/3 => Purely Periodic
0/4 => Terminating
1/4 => Terminating
2/4 => Terminating
3/4 => Terminating
0/5 => Terminating
1/5 => Terminating
2/5 => Terminating
3/5 => Terminating
4/5 => Terminating
0/6 => Terminating
1/6 => Eventually Periodic
2/6 => Purely Periodic
3/6 => Terminating
4/6 => Purely Periodic
5/6 => Eventually Periodic
0/7 => Terminating
1/7 => Purely Periodic
2/7 => Purely Periodic
3/7 => Purely Periodic
4/7 => Purely Periodic
5/7 => Purely Periodic
6/7 => Purely Periodic
0/8 => Terminating
1/8 => Terminating
2/8 => Terminating
3/8 => Terminating
4/8 => Terminating
5/8 => Terminating
6/8 => Terminating
7/8 => Terminating
0/9 => Terminating
1/9 => Purely Periodic
2/9 => Purely Periodic
3/9 => Purely Periodic
4/9 => Purely Periodic
5/9 => Purely Periodic
6/9 => Purely Periodic
7/9 => Purely Periodic
8/9 => Purely Periodic
0/10 => Terminating
1/10 => Terminating
2/10 => Terminating
3/10 => Terminating
4/10 => Terminating
5/10 => Terminating
6/10 => Terminating
7/10 => Terminating
8/10 => Terminating
9/10 => Terminating
0/11 => Terminating
1/11 => Purely Periodic
2/11 => Purely Periodic
3/11 => Purely Periodic
4/11 => Purely Periodic
5/11 => Purely Periodic
6/11 => Purely Periodic
7/11 => Purely Periodic
8/11 => Purely Periodic
9/11 => Purely Periodic
10/11 => Purely Periodic
0/12 => Terminating
1/12 => Eventually Periodic
2/12 => Eventually Periodic
3/12 => Terminating
4/12 => Purely Periodic
5/12 => Eventually Periodic
6/12 => Terminating
7/12 => Eventually Periodic
8/12 => Purely Periodic
9/12 => Terminating
10/12 => Eventually Periodic
11/12 => Eventually Periodic
0/13 => Terminating
1/13 => Purely Periodic
2/13 => Purely Periodic
3/13 => Purely Periodic
4/13 => Purely Periodic
5/13 => Purely Periodic
6/13 => Purely Periodic
7/13 => Purely Periodic
8/13 => Purely Periodic
9/13 => Purely Periodic
10/13 => Purely Periodic
11/13 => Purely Periodic
12/13 => Purely Periodic
0/14 => Terminating
1/14 => Eventually Periodic
2/14 => Purely Periodic
3/14 => Eventually Periodic
4/14 => Purely Periodic
5/14 => Eventually Periodic
6/14 => Purely Periodic
7/14 => Terminating
8/14 => Purely Periodic
9/14 => Eventually Periodic
10/14 => Purely Periodic
11/14 => Eventually Periodic
12/14 => Purely Periodic
13/14 => Eventually Periodic
0/15 => Terminating
1/15 => Eventually Periodic
2/15 => Eventually Periodic
3/15 => Terminating
4/15 => Eventually Periodic
5/15 => Purely Periodic
6/15 => Terminating
7/15 => Eventually Periodic
8/15 => Eventually Periodic
9/15 => Terminating
10/15 => Purely Periodic
11/15 => Eventually Periodic
12/15 => Terminating
13/15 => Eventually Periodic
14/15 => Eventually Periodic
Anda dapat menemukan semua kasus uji di sini .
Anda diizinkan untuk memilih 3 nilai Anda sendiri untuk output, tetapi harus jelas yang mana itu.
Ingat, ini adalah kode-golf , jadi kode dengan jumlah byte terkecil menang.
Petunjuk
Mengakhiri:
Faktorisasi utama dari denominator terminasi terminasi dalam bentuk paling sederhana hanya terdiri dari 2s dan 5s.
Murni periodik:
Faktorisasi utama dari penyebut desimal murni periodik dalam bentuk paling sederhana tidak termasuk 2s atau 5s.
Akhirnya Berkala:
Faktorisasi utama dari penyebut desimal periodik akhirnya dalam bentuk paling sederhana termasuk setidaknya satu 2 atau 5, tetapi juga termasuk angka lainnya.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Jawaban:
Jelly , 10 byte
Terima penyebut dan pembilang (dalam urutan itu) sebagai argumen. Mengembalikan 0 untuk mengakhiri, 1 untuk murni periodik, dan 2 untuk akhirnya periodik. Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
JavaScript (ES6),
70..6853 byteMengembalikan 0 untuk mengakhiri, benar untuk murni periodik dan salah untuk akhirnya periodik.
Bagaimana itu bekerja
Apa yang kami lakukan di sini sebenarnya mensimulasikan pembagian dengan tangan:
a?...:0
- Jika pembilangnya nol, kita berhenti di sini dan kembali0
. Urutannya berakhir .(s[a]^=a)?...:x==a
- Jika kita pernah menemukan pembilang ini sebelumnya, itu berarti bahwa urutannya periodik dan akan berulang selamanya. Kami berhenti di sini dan kembalitrue
jikaa
sama dengan nilai pertamax
dari urutan ( murni periodik ) ataufalse
jika tidak ( akhirnya berkala ).f(a*10%b,b,s,x||a)
- Lain, kita gandakan pembilangnyaa
dengan 10. Kita menghitung sisa pembagian dengan penyebutb
. Dan kami mengulangi prosesnya dengan menggunakan sisa ini sebagai pembilang baru. (Kami juga meneruskana
sebagai nilai pertama dari urutan jika belum disimpanx
.)Contoh
sumber
Python,
626159 byteMencetak 1 untuk akhirnya periodik, 2 untuk murni periodik, dan 4 untuk mengakhiri.
Memverifikasi semua kasus uji pada repl.it .
sumber
*r
harus dilakukanf(1, *(2, 3), 4)
setara denganf(1, 2, 3, 4)
.f=(n,d,...r)=>n in r?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
in
melayani tujuan yang sangat berbeda di JS daripada di Python):f=(n,d,...r)=>~r.indexOf(r)?~(n>0?n==r[0]:2):f(10*n%d,d,...r,n)
f=(n,d,...r)=>~(i=r.indexOf(n))?n&&!i:f(10*n%d,d,...r,n)
akan bekerja juga.Perl,
494645 byteTermasuk +3 untuk
-p
Didasarkan pada ide elegan Dennis tetapi diimplementasikan dengan cara perlish
Berikan nomor input pada STDIN
termninating.pl
:Mencetak 2 jika terminasi. 1 jika periodik dan tidak ada jika akhirnya periodik
sumber
Batch, 247 byte
Menggunakan trik gcd10 cepat saya dari Fraksi ke desimal yang tepat . Jelas saya bisa menyimpan banyak byte dengan menggunakan format output khusus.
sumber
@if %d%==1 (echo T)else if %d%==%e% (echo P)else echo E
untuk menghemat 42 byte?JavaScript (ES6),
91888579757478 byteKeluaran
NaN
untuk penghentian,1
untuk murni periodik, danInfinity
untuk akhirnya periodik.Cuplikan tes
Tampilkan cuplikan kode
Penjelasan
Pertama, kita membagi n dan d dengan gcd (d, n) , untuk mengurangi pecahan menjadi bentuk yang paling sederhana. Ini memungkinkan kita menghindari situasi seperti 2/6 di mana hasilnya akan dihitung sebagai murni periodik. Kami juga mendefinisikan variabel t sebagai gcd (d, 10) ; ini akan digunakan nanti.
Pemeriksaan pertama adalah apakah n adalah 0 atau d adalah 1 . Jika n * (d-1) adalah 0, kita kembali
+f
, atau NaN : pecahannya berakhir .Pemeriksaan selanjutnya adalah apakah t adalah 1 . Jika demikian, kita mengembalikan 1 : fraksi ini murni periodik .
Jika t adalah tidak 1 , kita membagi d oleh t , menjalankan seluruh fungsi lagi, dan bagi dengan 0. Jika n / (d / t) adalah terminating, hasil ini NaN / 0 = NaN : fraksi tersebut mengakhiri . Kalau tidak, ia mengembalikan 1/0 = Infinity : fraksi akhirnya periodik .
sumber
Infinity
semua nilai-nilai itu.n
... Terima kasih telah menunjukkannya.Mathematica, 41 byte
Output
{3,1,2}
jika input memiliki ekspansi desimal terminasi,{2,3,1}
jika input memiliki ekspansi desimal murni periodik, dan{3,2,1}
jika input memiliki ekspansi desimal akhirnya secara berkala.Berdasarkan trik licik: jika
d
adalah penyebut dari fraksi dalam istilah terendah, maka pembagi umum terbesar darid
dan10^d
samad
jikad
hanya memiliki 2s dan 5s dalam faktorisasi utamanya; sama dengan1
jikad
tidak memiliki 2s atau 5s dalam faktorisasi utamanya; dan sama dengan bilangan bulat di antara jikad
memiliki 2s / 5s dan bilangan prima lainnya.The
Ordering
Fungsi hanya melaporkan di mana unsur-unsur terkecil, terkecil berikutnya, dan terbesar dari tiga yang, dengan ikatan patah kiri ke kanan.Cacat: mengembalikan varian keluaran
{1,2,3}
daripada{3,1,2}
jika inputnya adalah 0.Mathematica, 46 byte, sesat
Kembali
a[[1]]
jika input memiliki ekspansi desimal terminasi,b[[1]]
jika input memiliki ekspansi desimal murni periodik, danb[a]
jika input memiliki ekspansi desimal akhirnya secara berkala. Melempar kesalahan dalam semua kasus!Seperti di atas, kita ingin tahu apakah pembagi umum terbesar sama dengan 1, d, atau di suatu tempat di antaranya. Logaritma dasar-d dari gcd itu sama dengan 0, 1, atau sesuatu di antaranya.
Sekarang kita mulai menyiksa Mathematica.
b[a][[n]]
menunjukkan bagiann
th dari ekspresib[a]
. Jadib[a][[1]]
kembalia
;b[a][[0]]
pengembalianb
; danb[a][[x]]
dimanax
angka antara 0 dan 1, membuat Mathematica melempar kesalahan "Bagian :: pkspec1: Ekspresix
tidak dapat digunakan sebagai spesifikasi bagian." dan pengembalian tidakb[a][[x]]
dievaluasi.Ini sudah membedakan tiga kasus dengan tepat, kecuali bahwa output untuk kasus akhirnya periodik adalah
b[a][[x]]
, yang tidak konstan karenax
merupakan logaritma aktual dari sesuatu. Jadi kita berlaku[[1]]
untuk output yang sudah dijelaskan. Karena bagaimana Mathematica mewakili secara internalb[a][[x]]
, hasilnyab[a][[x]][[1]]
sederhanab[a]
. Di sisi lain, menerapkan[[1]]
untuka
hasil dalam kesalahan yang berbeda "Bagian :: partd:. Bagian spesifikasi [[1]] lebih panjang dari kedalaman objek" dan pengembalian tidaka[[1]]
dievaluasi (dan juga untukb
).Cacat: kebohongan tentang input 0,
b[a]
bukannya kembalia[[1]]
.sumber
C 173 Bytes
Mengambil dua bilangan bulat dari stdin, mencetak 1 untuk murni periodik, -1 untuk akhirnya periodik, dan 0 untuk terminasi.
Tidak Disatukan:
Setengah golf:
sumber
Sebenarnya , 15 byte
Ini didasarkan pada jawaban Dennis 'Jelly . 0 berakhir, 1 murni periodik, dan 2 akhirnya periodik. Saran golf diterima. Cobalah online!
Tidak melakukanolf
sumber
Mathematica, 44 byte
Pengembalian
Null
untuk Pengakhiran,True
untuk murni periodik, danFalse
untuk akhirnya periodik.Penjelasan
Temukan ekspansi desimal N. (angka berulang dikelilingi oleh kepala tambahan
List {}
).Periksa apakah elemen terakhir ekspansi desimal adalah a
List
.Jika kondisi di atas adalah
True
, periksa apakah seluruh ekspansi desimal terdiri dari satu hal. (SEBUAHList
dihitung sebagai satu entitas). (pengembalianTrue
atauFalse
)(Jika kondisinya demikian
False
, maka aNull
dikembalikan karena tidak ada argumen ketiga untukIf
)sumber
Pyth ,
3127 byteMemasukkan
Anda bisa mencobanya di sini . Mencetak 1 untuk akhirnya periodik, 2 untuk murni periodik, dan 0 untuk mengakhiri. Ini adalah pertama kalinya saya menjawab dalam codegolf. Semua saran dipersilahkan.
Penjelasan
Perhatikan bahwa [2,3] difilter oleh [2,5] = [2] tetapi [2,3,5] - [2,5] = [3].
sumber
PARI / GP, 64 byte
Tidak menghasilkan apa pun untuk diakhiri, 0 untuk murni dan 1 untuk akhirnya periodik.
Tidak terlalu mewah, saya berharap sesuatu yang lebih baik ketika saya mulai.
sumber
05AB1E ,
1611 byteDisimpan 5 byte berkat @Adnan!
Mencetak 0 untuk Purely Periodic, 1 untuk Terminating, dan 10 untuk akhirnya Periodic.
Penjelasan:
Input diambil sebagai p baris baru q .
Cobalah online!
sumber
I
. Lebih lanjut, konstanta yang ditentukan sebelumnya10
adalahT
. Sama untuk2B
, yaitub
:).¿²r/fTrÖbÙJ
kode terakhir :).PHP, 126 Bytes
Mencetak 0 untuk diakhiri dan 1 untuk murni periodik 2 untuk akhirnya. Biarkan saya jelaskan jika pembilang dua kali dalam array di sini memulai sesi periodik jika diakhiri
echo end($a);
nilainya0
Jika Anda tidak percaya saya letakkan$t=count($a)>$d?2:0;
di loopUntuk membuatnya lebih jelas, silakan tambahkan
print_r($a);
atauvar_dump($a);
ataujson_encode($a);
setelah loopAnda dapat melihat satu pembilang dua kali atau nol pada akhir array jika pembilang dua kali menghitung item antara dua item dan Anda bisa mendapatkan panjang periodik dan Anda dapat melihat posisi oleh pembilang pertama di mana periodik dimulai
Jadi setelah itu kita dapat menemukan posisi dan panjang urutan periodik dengan
if($t){echo $p=array_search(end($a),$a);echo $l=count($a)-$p-1;}
Visualisasikan yang periodik
Output memvisualisasikan istilah periodik
Cara lain dengan 130 Bytes
Versi yang Diperluas
sumber
[3,30,35,32,2,20,41,39,19,31,45,26,48,3]