Hướng dẫn execution timed out in python - quá thời gian thực thi trong python

Khi tôi đang cố gắng giải quyết vấn đề trên các mã hóa, hãy gặp lỗi này.

Mã của tôi vượt qua tất cả các bài kiểm tra nhưng không được tối ưu hóa. Bạn có lời khuyên nào không?

Vấn đề: https://www.codewars.com/kata/551DD1F424B7A4CDAE0001F0

JavaScript:

function whoIsNext(names, r){
  let drinker;
  for(let a = 1 ; a <= r; a++){
    drinker = names[0]
    names.shift()
    names.push(drinker, drinker)
  }
  return drinker
}

Hướng dẫn execution timed out in python - quá thời gian thực thi trong python

Fzs

15.4K12 Huy hiệu vàng40 Huy hiệu bạc47 Huy hiệu đồng12 gold badges40 silver badges47 bronze badges

Hỏi ngày 11 tháng 8 năm 2020 lúc 14:06Aug 11, 2020 at 14:06

1

Mã của bạn hoạt động, nhưng vì nó mất một thời điểm trong đầu vào cuối cùng, do thời gian thực hiện, nó bị 'lỗi'. Mã nên được cải thiện.

Đây là đề xuất của tôi (thay vì đẩy các giá trị trong một mảng lớn, mọi thứ được lưu trữ trong một mảng mảng), xem ví dụ nhanh chóng này:

const whoIsNext = (names, r) => {
  names = names.map(n => [n,1]);
  let qi = 0, j = 0;
  while (j < r) {
    j += names[qi][1]*=2;
    qi = (qi+1) % names.length;
  }
  return names[(names.length+qi-1)%names.length][0];
}

//The last test case in codewars
const result = whoIsNext(["Sheldon", "Leonard", "Penny", "Rajesh", "Howard"], 7230702951);
console.log(result);

Đã trả lời ngày 11 tháng 8 năm 2020 lúc 14:55Aug 11, 2020 at 14:55

Hướng dẫn execution timed out in python - quá thời gian thực thi trong python

k0ok0ok0o

1041 Huy hiệu bạc7 Huy hiệu đồng1 silver badge7 bronze badges

1

Mã của bạn là chính xác và hoạt động nhưng phải mất quá nhiều thời gian cho tất cả các hoạt động của mảng một cách đặc biệt khi R đang trở nên tuyệt vời. Vì vậy, có một cách tiếp cận khác cần thiết:

Hãy xem nếu với số lượng người uống R có thể được thỏa mãn nếu không quá giảm r về số lượng người uống này và nhân đôi những người uống rượu. Đi điều này trên cho đến khi những người uống rượu thỏa mãn r. Bây giờ bạn chỉ phải chia r thông qua số mà mỗi người uống ban đầu đã được nhân lên và bạn có được người uống.
Now you have only to divide r through the number each original drinker was multiplied and you get the drinker.

function whoIsNext(names, r){
  let drinker;
  let multi = 1;
  let length = names.length;
  while (r>multi*length) {
    r -= multi*length;
    multi *= 2;
  }
  return names[parseInt((r-1)/multi)];
}

let names = [ "Sheldon", "Leonard", "Penny", "Rajesh", "Howard"];
console.log(whoIsNext(names, 1)); // == "Sheldon"
console.log(whoIsNext(names, 52));// == "Penny"
console.log(whoIsNext(names, 7230702951)); // == "Leonard"
// for (i=1; i<=100; i++) {console.log(i, whoIsNext(names, i))}

Đã trả lời ngày 11 tháng 8 năm 2020 lúc 15:57Aug 11, 2020 at 15:57

SaschasaschaSascha

4.4963 Huy hiệu vàng13 Huy hiệu bạc34 Huy hiệu đồng3 gold badges13 silver badges34 bronze badges

3

Đây là giải pháp của tôi:

function whoIsNext(names, r) {
    let foundedInArray = names.length

    while (r > foundedInArray) {
        r -= foundedInArray
        foundedInArray *= 2
    }

    return (names[Math.ceil(r/(foundedInArray/names.length) - 1)])
}

Như bạn có thể thấy trên mảng: ['a', 'b', 'c'], sẽ có "chuỗi" này: "ABC |['A', 'B', 'C'], there will be this "string": "ABC|AABBCC|AAAABBBBCCCC|...".

Vấn đề là bạn luôn thêm hai lần các phần tử của "trường trước" (cách nhau bởi một thanh dọc). Như bạn có thể thấy, tôi ở điều khiển đầu tiên, nếu độ dài của "Hàng đợi mở rộng lớn hơn hoặc giống như giá trị r", thì trong khi Cykle I giảm giá trị này, bởi vì tôi chỉ nhìn vào "một phần hiện đại của mảng". Sau đó, tôi chỉ cần trả về giá trị để tôi biết rằng phần phóng đại của trường có độ dài của trường ban đầu. Vì vậy, tôi thực tế chia số và làm tròn nó xuống để có được chỉ số mong muốn của trường gốc.r", then in while cykle I reduce this value, because I am looking only in "currently enlarged part of array". Then I simply return the value so that I know that the magnified part of the field is n times the length of the original field. So I de facto divide the number and round it down to get the desired index of the original field.

Xin lỗi vì ngữ pháp của tôi và cũng có thể giải thích phức tạp về mã.

  • Danh sách mục

Hướng dẫn execution timed out in python - quá thời gian thực thi trong python

Dharman ♦

28.3K21 Huy hiệu vàng75 Huy hiệu bạc128 Huy hiệu đồng21 gold badges75 silver badges128 bronze badges

Đã trả lời ngày 21 tháng 5 năm 2021 lúc 13:54May 21, 2021 at 13:54

1

Làm cách nào để sửa lỗi thời gian chờ trong Python?

Trong Python, sử dụng stdin.readline () và stdout.write () thay vì đầu vào và in.Đảm bảo rằng giá trị đầu vào cho các trường hợp thử nghiệm được truyền ở định dạng dự kiến.use the stdin. readline() and stdout. write() instead of input and print. Ensure that the input value to test cases is passed in the expected format.

Việc thực hiện hết thời gian trong Python là gì?

Hầu hết các mã trải nghiệm thực thi thời gian ra ghi chú đang làm việc với các vòng lặp.Vì vậy, điều đầu tiên cần chú ý sẽ là vòng lặp (nếu có) bên trong mã của bạn.Hãy chắc chắn rằng các vòng lặp không mất quá nhiều thời gian để chạy, bởi vì Sololearn thực hiện phép đo an toàn để giới hạn thời gian để mã thực thi.. So first thing to pay an attention to would be loop (if there's any) inside your code. Make sure the loops don't take too long to run, because SoloLearn implements a safety measurement to limit the time for code to execute.

Thực hiện hết thời gian?

Thời gian chờ thực hiện quy trình công việc là thời gian tối đa mà việc thực thi quy trình làm việc có thể được thực thi (có trạng thái mở) bao gồm các thử lại và mọi cách sử dụng tiếp tục như mới.

Tại sao thực thi lại hết thời gian?

Như tôi đã đề cập trên chủ đề khác, nếu bạn đang thấy lỗi "thực hiện hết thời gian", thì quá trình (một bản sao của perfrun.exe) chạy màn hình đã bị giết do vượt quá bộ hẹn giờ "giao dịch chết".the process (a copy of perfRun.exe) which runs the monitor has been killed due to exceeding the "dead transaction" timer.