Bazen, önümde beliren sayıyı çarpanlara ayırmaya çalışıyorum¹¹, bir süre sonra düşündüğümden daha kolay olduğunu anlıyorum. Al 2156
örneğin: sonunda hem aklıma geliyor 21
ve 56
katları olan 7
ve bu yüzden kesinlikle 2156 = 21 x 100 + 56
de bir katıdır 7
.
Göreviniz, bu tür bir tesadüf nedeniyle faktörü daha kolay olan sayıları tanımlayan bir kod yazmaktır.
Daha kesin:
n
Girdi olarak pozitif bir tamsayı alan bir program veya işlev yazın ve her biri bir çarpı olmak üzere iki pozitif tamsayı elde etmek için ikiye bölünebilecek bir bölen d
(daha büyük 1
) varsa bir gerçek değer döndürür ; değilse yanlış bir değer döndürür.n
d
- "İkiye kesilmiş", ne düşündüğünüzü ifade eder:
n
iki ana üs-10 tamsayı üretmek için bir noktada bir ön yarıda ve bir arka yarıya bölünmüş olağan taban-10 temsili . İkinci tamsayı (bu pozitif bir tamsayı olması gerektiğini ancak not bölme böylece lider sıfır varsa Tamam1230
içine123
ve0
geçerli değildir). - Gerçeği ve sahte değerler, girdiye bağlı olabilir. Örneğin, sıfırdan farklı bir tamsayı seçtiğiniz dilde kaba ise, böleni
d
veya bu konu için "parçalarından" birinin
(veyan
kendisinin) geri gönderebilirsiniz . - Örneğin, sette en az iki rakam olan herhangi bir çift sayı
{2, 4, 6, 8}
bir gerçeğe uygun değer sağlar: sadece ilk çift basamaktan sonra ayırın. Ayrıca, örneğin, herhangi bir asal sayın
, herhangi bir tek basamaklı sayı gibi, sahte bir değer verecektir. - Asal bölenleri dikkate almanın yeterli olduğunu unutmayın
d
. - Girişin geçerli olduğunu varsayabilirsiniz (yani, pozitif bir tamsayı).
Bu kod golf , yani bayt cinsinden en kısa kod kazanır. Ancak tüm dillerde çözümler açıktır, bu nedenle genel olarak en kısa kod değil, her dilde en kısa kod için çaba gösterebiliriz.
Test durumları
(Yalnızca bir truthy veya sahte değer vermeniz gerekir; aşağıdaki açıklamalar sadece açıklama yoluyla verilir.) Truthy değerleri veren bazı girdiler:
39 (3 divides both 3 and 9)
64 (2 divides both 6 and 4)
497 (7 divides both 49 and 7)
990 (splitting into 99 and 0 is invalid; but 9 divides both 9 and 90)
2233 (11 divides both 22 and 33)
9156 (3 divides both 9 and 156; or, 7 divides both 91 and 56)
11791 (13 divides both 117 and 91)
91015 (5 divides both 910 and 15)
1912496621 (23 divides both 1912496 and 621; some splittings are multiples of 7 as well)
9372679892 (2473 divides both 937267 and 9892; some splittings are multiples of 2 as well)
Sahte değerler veren bazı girdiler:
52
61
130 (note that 13 and 0 is not a valid splitting)
691
899
2397
9029
26315
77300 (neither 7730 and 0 nor 773 and 00 are valid splittings)
2242593803
¹ evet bunu gerçekten yapıyorum