Mengurangi pecahan dengan cara yang salah
Dalam tantangan kode-golf ini Anda harus menemukan pecahan yang dapat direduksi dengan cara yang salah tetapi masih berakhir dalam jumlah yang sama.
Catatan: mengurangi pecahan dengan cara yang salah di sini memiliki definisi yang tepat, lihat detailnya.
Contoh:
64/16 = 6 4/1 6 = 4/1 = 4
Tentu saja Anda tidak bisa hanya menyerang kedua 6es tetapi di sini Anda masih berakhir dengan nilai yang benar. Dalam tantangan ini, Anda harus menemukan contoh seperti ini.
Detail
Anda harus menulis fungsi / program yang menerima satu bilangan bulat positif n
sebagai input dan output / mengembalikan daftar / array fraksi dalam format
numerator1,denominator1,numerator2,denominator2,...
Program harus mencari tahu untuk setiap fraksi a/b
dengan a+b=n
dan a,b>0
apakah itu dapat dikurangi dengan cara yang salah . (Tidak masalah apakah jika dapat dikurangi dengan cara konvensional atau apakah ada banyak kemungkinan pengurangan, itu hanya harus dimungkinkan untuk menguranginya dengan cara yang salah dalam setidaknya satu cara.)
Definisi cara yang salah: Fraksi dapat dikurangi dengan cara yang salah jika dan hanya jika urutan angka yang sama berturut-turut muncul dalam a dan b dan jika nilai fraksi tetap sama jika Anda menghapus substring.
Contoh: 1536/353 dapat 'direduksi' menjadi 16/3 tetapi kedua nilai tersebut tidak sama sehingga Anda tidak dapat mengurangi fraksi ini dengan cara yang salah .
Perhatikan bahwa definisi mengurangi cara yang salah juga dapat mencakup fraksi yang dikurangi dengan cara yang benar: 110/10 = 11/1
ada dalam definisi mengurangi cara yang salah meskipun itu merupakan langkah yang valid.
Mencetak gol
Jumlah byte terkecil yang menang. Anda dapat menulis fungsi atau program yang menerima bilangan bulat dan mengembalikan array atau program yang menggunakan stdin / stdout atau Anda dapat mempertimbangkan dan disimpan dalam variabel dan pada akhir program daftar harus disimpan dalam variabel lain.
Uji kasus
Harap sertakan berikut testcases (Katakan padaku mana yang harus saya tambahkan, saya tidak tahu berapa banyak fraksi yang ada / berapa banyak contoh yang diharapkan)
n=80 (64/16 should be in this list)
n=147 (98/49 should be in this list)
n=500 (294/196 should be in this list) WRONG since 294+196 != 500 Thanks Falko
sumber
1010/10 = 101/1 && 1010/10 /= 110/1
n=147
) tidak benar:49/89 != 4/8
.Jawaban:
Python 2 -
183180input harus disimpan dalam
n
, output akan disimpan dalaml
.Kasus uji:
n = 80:
n = 147:
n = 490:
Jika duplikat dalam output dilarang, ia mendapat 10 karakter lebih lama:
sumber
Haskell,
207206 (209?) KarakterJika tidak dapat mengembalikan rasio yang sama lebih dari sekali (400/400 = 40/40 = 4/4), gunakan
f n=nub[...
untuk memfilternya.Mengembalikan daftar pasangan. Daftar pasangan dua elemen harganya sama. Daftar fraksi aktual akan membutuhkan impor
Data.Ratio
atau kualifikasi penuhData.Ratio.%
(yang juga bertabrakan dengan%
fungsi yang didefinisikan di sini)uji kasus (dengan
nub
):ungolfed dan berkomentar :
sumber
Python 2 - 236
sumber
Python 3 - 302
Catatan: Karena kesulitan penguraian, tidak ada pecahan dengan angka 0 dalam (jadi tidak ada pecahan yang dihitung menggunakan metode yang benar).
Dengan n = 80:
Dengan n = 147
Dengan n = 500
sumber
n=80
cetakan ini[[64, 16], [65, 26]]
, tapi jelas65 + 26 = 91 > 80
.if
menjadi satu besarif
denganand
menghubungkan semua kondisi? Menghemat beberapa karakter, saya pikir.10/70
,20/60
dan30/50
?