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
n
Girdi 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/b
için a+b=n
ve 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
.