Bài toán tập thể dục trong thời gian giãn cách áp dụng method each_slice và each_cons của mảng trong ruby

Gần đây, Charlotte không thể đến phòng tập thể dục, vì cô ấy đang đang phải ở nhàn do Covid-19. Cô ấy đang cố gắng chống đẩy nhiều lần và luôn ghi chép cẩn thận về số lần chống đẩy mà mình thực hiện mỗi ngày. Tổng số lần chống đẩy của mỗi ngày đã

Gần đây, Charlotte không thể đến phòng tập thể dục, vì cô ấy đang đang phải ở nhàn do Covid-19. Cô ấy đang cố gắng chống đẩy nhiều lần và luôn ghi chép cẩn thận về số lần chống đẩy mà mình thực hiện mỗi ngày. Tổng số lần chống đẩy của mỗi ngày đã được thêm vào một mảng Ruby:

daily_push_up_totals = [10, 15, 25, 27, 30, 50, 55, 55, 60, 62, 62, 65, 65, 66]

Charlotte muốn biết hai điều: tổng số lần chống đẩy mà cô ấy thực hiện mỗi tuần và số lần chống đẩy tăng lên giữa hai ngày liên tiếp nhiều nhất.

Để tính tổng số lần chống đẩy mà Charlotte đã thực hiện mỗi tuần, cách tiếp cận đầu tiên sẽ là sử dụng each_slice. Phương thức Array này chia mảng thành các phần và truyền từng phần cho block. Số lượng giá trị trong mỗi phần được chuyển vào dưới dạng tham số. Ví dụ:

daily_push_up_totals.each_slice(7) { |week_totals| print weekly_totals }

Kết quả sẽ là:

daily_push_up_totals.each_slice(7) { |week_totals| puts "Weekly total: #{week_totals.sum} }

Chúng ta đã chia mảng thành các phần có bảy phần tử, vì vậy tất cả những gì chúng ta cần làm để có được tổng số lần chống đẩy hàng tuần là cộng từng phần bằng cách sử dụng sum:

daily_push_up_totals.each_slice(7) { |week_totals| puts "Weekly total: #{week_totals.sum} }

Kết quả là:

    Weekly total: 212
    Weekly total: 445

Vậy làm thế nào chúng ta có thể tìm ra số lần chống đẩy tăng lên giữa hai ngày liên tiếp nhiều nhất của Charlotte? Hãy thử sử dụng each_cons. Phương thức Array này cung cấp cho block có sẵn n phần tử liên tiếp, bắt đầu từ phần tử đầu tiên và lần lượt lần lượt. Một ví dụ sẽ làm rõ hơn:

daily_push_up_totals.each_cons(2){ |values| print values }

Sẽ trả về:

 [10, 15][15, 25][25, 27][27, 30]...

Do đó, việc tính toán số lần chống đẩy tăng lên giữa hai ngày liên tiếp nhiều nhất là một trường hợp tìm kiếm sự khác biệt giữa từng cặp tổng hàng ngày này và tìm ra giá trị lớn nhất:

daily_push_up_totals.each_cons(2).map{ |day1, day2| day2 - day1 }.max

Chúng ta đã hoàn tất – Charlotte từ bây giờ sẽ có thể theo dõi tiến trình tập thể dục của mình bất kể việc dãn cách diễn ra bao lâu.

Nguần dich ở đây

Nguồn: viblo.asia

Bài viết liên quan

Sự Khác Nhau Giữa Domain và Hosting Là Gì?

Sự khác nhau giữa domain và hosting là gì? Bài này giải thích ngắn và dễ hiểu nh

Shared Hosting hay VPS Hosting: Lựa chọn nào dành cho bạn?

Bài viết giải thích rõ shared hosting và vps hosting là gì và hướng dẫn chọn lựa

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=