Cho hai số N và x, tìm số lượng các chữ số x có tích các chữ số là N
limits: N(<10^6) and x(<12)
Sample Input:
8 3
Sample Output:
10
Cho hai số N và x, tìm số lượng các chữ số x có tích các chữ số là N
limits: N(<10^6) and x(<12)
Sample Input:
8 3
Sample Output:
10
Câu trả lời:
~10\?.10/\,>{10base{*}*1$=},,\;
Input: Mong đợi các số N
và x
làm đối số dòng lệnh (cách nhau bởi khoảng trắng).
Chương trình có thể được thử nghiệm ở đây .
Code took longer than 5 seconds to run, so it was aborted.
với các thông số đảo ngược. :)
x
vượt lên trên 4. Ví dụ: nếu tôi chạy nó trên máy của mình với các tham số 3 5
tôi nhận được kết quả sau hơn 30 giây. Vì vậy, 3 8
tôi đoán đó có thể là vài giờ ...
{h.&t~lℕẹ≜×}ᶜ
{h.&t~lℕẹ≜×}ᶜ
{ }ᶜ Count the number of
≜ values at this point
&t formed via taking the last element of the input,
ℕ generating an integer
~l of that length,
ẹ and splitting it into digits
× such that the product of those digits
h. is the first element of {the input}
Một mẹo chơi golf gọn gàng được sử dụng ở đây là không giống như hầu hết tất cả các phép ẩn dụ, ᶜ
hoàn toàn không quan tâm đến giá trị thực tế .
(thường được sử dụng để xây dựng một đầu ra cho các phép ẩn dụ); như vậy, .
có thể được sử dụng như bất kỳ biến nào khác (lưu một byte vì nó xuất hiện ngầm trước đó }
). Không có nhãn hiệu ngầm ở bất cứ đâu ở đây, vì vậy tôi đã phải thêm một nhãn hiệu rõ ràng bằng cách sử dụng ≜
để đưa ra ᶜ
một cái gì đó để đếm.
def f(N:Int,x:Int,s:Int=1):Int=if(s==N&&x==0)1 else
if(s>N||x==0)0 else
((1 to 9).map(i=>f(N,x-1,s*i))).sum
phiên bản vô văn hóa, gỡ rối:
def findProduct (N: Int, sofar: Int, togo:Int, collected:String=""):Int={
if (sofar == N && togo == 0) {
println (collected)
1
} else
if (sofar > N || togo == 0) 0 else
(1 to 9).map (x=> findProduct (N, sofar*x, togo-1, collected + " " + x)).sum
}
Yêu cầu với đầu ra gỡ lỗi:
scala> findProduct (3, 1, 8)
1 1 1 1 1 1 1 3
1 1 1 1 1 1 3 1
1 1 1 1 1 3 1 1
1 1 1 1 3 1 1 1
1 1 1 3 1 1 1 1
1 1 3 1 1 1 1 1
1 3 1 1 1 1 1 1
3 1 1 1 1 1 1 1
res175: Int = 8
scala> findProduct (8, 1, 3)
1 1 8
1 2 4
1 4 2
1 8 1
2 1 4
2 2 2
2 4 1
4 1 2
4 2 1
8 1 1
res176: Int = 10
int Z(int n,int x){var i=(int)Math.Pow(10,x-1);return Enumerable.Range(i,i*9).Count(j=>(j+"").Aggregate(1,(a,c)=>a*(c-48))==n);}
Phương thức C # này trả về số lượng các x
chữ số có tích của các chữ số n
. Nó yêu cầu không gian tên System
và System.Linq
được nhập trong bối cảnh hiện tại.
Phiên bản trực tuyến: http://ideone.com/0krup
[:+/[=[:*/"1(10#~])#:(10^<:@])}.[:i.10^]
Tạo tất cả các x
số có chữ số, chuyển đổi từng số thành cơ sở 10, sau đó tìm sản phẩm của từng số và kiểm tra xem mỗi số có bằng với bên trái không, sau đó tìm tổng của mỗi boolean.
,’⁵*r/ḊDP€ċƓ
Lấy x làm đối số dòng lệnh và N trên đầu vào tiêu chuẩn.
,’⁵*r/ḊDP€ċƓ
, On {the input} and
’ {the input} minus 1
⁵* take 10 to the power of each of those numbers
r/ then form a range between them
Ḋ without its first element;
D treat each element as a list of digits,
P€ take the product of each of those digit lists,
ċ then count the number of times
Ɠ the value from standard input appears
Phần cứng là tạo danh sách các số có x chữ số; số thấp nhất như vậy là 10 x 1 , cao nhất là 10 x 1. Phạm vi ở đây được tạo thông qua lần đầu tiên tạo cặp ( x , x 1), sau đó lấy 10 cho sức mạnh của cả hai, sau đó tạo phạm vi giữa chúng. Phạm vi bao gồm cả hai điểm cuối theo mặc định; chỉ trong trường hợp N xảy ra là 0, chúng ta cần xóa đầu cuối của phạm vi (xuất hiện trước vì đó là phạm vi "ngược") Ḋ
.