Tôi đã thử thách google foobar nhưng đã hết thời gian trong thử thách sau đây, tôi đang cố gắng xem tôi đã làm gì sai.Google foobar gearing_up_for_destruction
Challenge
Là trợ lý cá nhân Commander Lambda, bạn đã được giao nhiệm vụ cấu hình bánh răng định hướng trục của ngày tận thế của thiết bị LAMBCHOP. Nó sẽ khá đơn giản - chỉ cần thêm các bánh răng để tạo tỷ lệ xoay thích hợp. Nhưng vấn đề là, do cách bố trí của LAMBCHOP và hệ thống dầm và ống phức tạp hỗ trợ nó, các chốt sẽ hỗ trợ các bánh răng được cố định tại chỗ.
Kỹ sư của LAMBCHOP đã cung cấp cho bạn danh sách xác định vị trí của các nhóm chốt dọc theo các dầm hỗ trợ khác nhau. Bạn cần phải đặt một bánh răng trên mỗi chốt (nếu không các bánh răng sẽ va chạm với chốt không có). Các kỹ sư có rất nhiều bánh răng ở tất cả các kích cỡ khác nhau được lưu trữ, vì vậy bạn có thể chọn các bánh răng có kích thước bất kỳ, từ bán kính 1 trở lên. Mục tiêu của bạn là xây dựng một hệ thống mà bánh răng cuối cùng quay với tốc độ gấp đôi (trong vòng quay mỗi phút hoặc vòng/phút) của bánh răng đầu tiên, bất kể hướng nào. Mỗi bánh răng (ngoại trừ lần cuối) chạm và xoay bánh răng trên chốt tiếp theo ở bên phải. Cho một danh sách các số nguyên dương khác biệt có tên là chốt đại diện cho vị trí của mỗi chốt dọc theo dầm hỗ trợ, viết câu trả lời hàm (pegs), nếu có giải pháp, trả về danh sách hai số nguyên dương a và b đại diện tử số và mẫu số của bán kính bánh răng đầu tiên ở dạng đơn giản nhất của nó để đạt được mục tiêu trên, chẳng hạn bán kính = a/b. Tỷ lệ a/b phải lớn hơn hoặc bằng 1. Không phải tất cả cấu hình hỗ trợ nhất thiết sẽ có khả năng tạo tỷ lệ xoay thích hợp, vì vậy nếu nhiệm vụ là không thể, câu trả lời hàm (chốt) sẽ trả về danh sách [-1, -1]. Ví dụ, nếu các chốt được đặt tại [4, 30, 50], thì bánh răng đầu tiên có thể có bán kính là 12, bánh răng thứ hai có bán kính là 14 và bán kính cuối cùng là bán kính là 6. Do đó, thiết bị cuối cùng sẽ quay nhanh gấp hai lần cái đầu tiên. Trong trường hợp này, các chốt sẽ là [4, 30, 50] và câu trả lời (chốt) sẽ trả về [12, 1].
Các chốt danh sách sẽ được sắp xếp theo thứ tự tăng dần và sẽ chứa ít nhất 2 và không quá 20 số nguyên dương riêng biệt, tất cả nằm trong khoảng từ 1 đến 10000.
trường hợp thử nghiệm
Inputs:
(int list) pegs = [4, 30, 50]
Output:
(int list) [12, 1]
Inputs:
(int list) pegs = [4, 17, 50]
Output:
(int list) [-1, -1]
giải pháp hiện tại của tôi là như sau
def answer(pegs):
n = len(pegs)
g = range(n)
k = pegs[1] - pegs[0]
for i in range(0,k,2):
g[0] = i
for j in range(1,n):
g[j] = (pegs[j] - pegs[j-1]) - g[j-1]
if any(b < 1 for b in g):
continue
if 1.0*g[0]/g[-1] == 2.0:
return [g[0],1]
return [-1, -1]
tôi chỉ có thể nhận được 6 trường hợp thử nghiệm để vượt qua bây giờ tôi đã chạy ra khỏi thời gian nhưng tôi tò mò giải pháp phù hợp là gì
Wow, có vẻ như bạn đã làm rất nhiều công việc trên đó .. Câu trả lời chi tiết tuyệt vời. – sulavvr
Cảm ơn câu trả lời chi tiết. Theo cùng một logic, công thức có thể được đơn giản hóa nếu bạn coi nó là hệ phương trình tuyến tính và giải quyết r0, r1, r2 ... rn với nghịch đảo ma trận. Nghịch đảo của ma trận hệ số có một mẫu và rất dễ tính toán. Sự khác biệt duy nhất giữa số chẵn lẻ và số chẵn là câu trả lời cuối cùng phải được chia cho 3 cho số chẵn. –