Kesirleri yanlış şekilde azaltmak
Bu kod golf mücadelesinde yanlış şekilde azaltılabilen ancak yine de aynı sayıya ulaşabilen kesirler bulmak zorundasınız.
Not: Kesirleri yanlış şekilde azaltmak burada tam bir tanımlamaya sahiptir, ayrıntılara bakın.
Misal:
64/16 = 6 4/1 6 = 4/1 = 4
Tabii ki her iki 6'yı da vuramazsınız ama burada hala doğru değerle sonuçlanırsınız. Bu meydan okumada bunun gibi örnekler bulmalısınız.
ayrıntılar
nGirdi olarak bir pozitif tamsayıyı kabul eden ve çıktılar halinde / kesirlerin bir listesini / dizisini format olarak döndüren bir işlev / program yazmanız gerekir
numerator1,denominator1,numerator2,denominator2,...
Program, her kesir a/biçin a+b=nve yanlış şekildea,b>0 azaltılıp azaltılamayacağını bulmalıdır . (Konvansiyonel şekilde azaltılabilir mi, yoksa çok sayıda azaltma olasılığı olup olmadığı önemli değil, sadece en az bir şekilde yanlış şekilde azaltmak mümkün olmalıdır .)
Tanımı hatalı bir şekilde: bir kısmı azaltılabilir yanlış bir şekilde , ancak ve ancak, a ve b ardışık basamak göründüğünü aynı sıra ve sen substring kaldırmak fraksiyon kalır değeri aynı ise.
Örnek: 1536/353, 16 / 3'e 'indirgenebilir' ancak bu iki değer eşit değildir, bu nedenle bu kesri yanlış şekilde azaltamazsınız .
Yanlış yolu azaltma tanımının , doğru şekilde azaltılmış kesirler de içerebileceğini unutmayın: geçerli bir adım olsa bile yanlış yolu110/10 = 11/1 azaltma tanımı dahilindedir .
puanlama
En az bayt sayısı kazanır. Bir tamsayıyı kabul eden ve stdin / stdout kullanan bir dizi veya program döndüren bir işlev veya program yazabilir veya bir değişkene n kaydedilmiş olduğunu ve programın sonunda listenin başka bir değişkene kaydedilmesi gerektiğini düşünebilirsiniz.
Test senaryoları
Lütfen aşağıdaki test vakalarını ekleyin (Hangisini eklemem gerektiğini söyle, bu kesirlerden kaç tanesinin olduğunu / kaç örnek beklediğini bilmiyorum)
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
1010/10 = 101/1 && 1010/10 /= 110/1
n=147) yanlış: 49/89 != 4/8.