DEV Community

Yasin Azadpour
Yasin Azadpour

Posted on

Advented of code 2021 day 1

خب قضیه از این قرار که باید ۲۵ چالش برنامه نویسی حل کینم تا هم امتیاز بگیریم و هم تو کارمون بهتر بشیم

همون طور که انتظار میره از مثال های آسون شروع میشه

قسمت اول

تو چالش اول هونظور که زیردریای داره پایین میره یه سری اعداد رو صفحه ظاهر میشن که ورودی پازل ماست

ماباید تمام اون اعدادی رو که از عدد قبلی خودش کوچیک تر هستن رو پیدا کنیم
قاعدتا چون اولین عدد هیچ عدد قبلی نداره به حساب نمیاد

خودش هم یه مثال زده


* 199 (N/A - no previous measurement)
+ 200 (increased)
+ 208 (increased)
+ 210 (increased)
- 200 (decreased)
+ 207 (increased)
+ 240 (increased)
+ 269 (increased)
- 260 (decreased)
+ 263 (increased)
Enter fullscreen mode Exit fullscreen mode

تو این مثال جواب میشه 7 چون هفت تا عدد وجود داشته که نسبت به عدد قبلی خودش افزایش پیدا کرده.

بعد از اینکه فایل ورودی رو دریافت کردیم میریم سراغ حل مسله با استفاده از یه زبان برنامه نویسی
البته که میتونید اینا رو دستی هم حساب کنید :)
اینجا ما از پایتون استفاده میکنیم

خوندن دیتا

قدم اول اینکه ما ورودی پازل رو بخونیم و دیتا های اون رو تمیز کنیم

‍‍

with open("input.txt") as f:
    lines = f.readlines()
    numbers = [int(i.strip()) for i in lines]
Enter fullscreen mode Exit fullscreen mode

حرکت روی دیتا و محاسبه

قدم بعدی اینه که با یه حلقه ی for یا حر شیوه که میتونیم روی دیتا حرکت کنیم و ببینیم که آیا افزایش پیدا کرده یا نه

# create a variable containing the first number for first itration
prev_num = numbers[-1]

# in start result is 0
result = 0

for i in numbers:
    # check if the previous value is lower than the current value, increase count by 1
    if i > prev_num:
        result += 1

    # update the prev_num for the next iteration 
    prev_num = i

print(f"[ part1: {result} ]")
Enter fullscreen mode Exit fullscreen mode

قسمت دوم

حالا گفته که اندازه گیری این اعداد به تنهایی مفید و کا آمد نیست و نویز زیادی در داده ها وجود داره
به از میانگین اندازه ها به دست اومده از سه پنجره استفاده میکنیم

خودش یه همچین مثالی زده


‍‍‍‍

199  A      
200  A B    
208  A B C  
210    B C D
200  E   C D
207  E F   D
240  E F G  
269    F G H
260      G H
263        H
Enter fullscreen mode Exit fullscreen mode

یعنی در واقع یه همچین چیزی

سه تا سه می زنیم و بعد با هم مقایسه میکینم

A: 607 (N/A - no previous sum)
B: 618 (increased)
C: 618 (no change)
D: 617 (decreased)
E: 647 (increased)
F: 716 (increased)
G: 769 (increased)
H: 792 (increased)
Enter fullscreen mode Exit fullscreen mode

در این مثال جواب 5هست

حالا میریم سراغ نوشتن یه برنامه برای اینکار

‍‍‍‍

# in start result is 0
result = 0

size = len(numbers)

# create a variable containing the sum of the first three-measurement sliding window
prev_window = sum(numbers[:3])

# iterate over the size of the depths file 
for i in range(3, size):
    # calculate the current three-measurement sliding window
    curr_window = prev_window + numbers[i] - numbers[i-3]

    # check if the previous value is lower than the current value, increase count by 1
    if prev_window < curr_window:
        result += 1 

    # update the prev_window for the next iteration 
    prev_window = curr_window

print(f"[ part2: {result} ]")
Enter fullscreen mode Exit fullscreen mode

و در آخر فقط چون استفاده از پایتون برای من راحته اینجا ازش استفاده کردیم وگرنه میتونید از هر زبان برنامه نویسی دیگه ای هم استفاده کنید
حتی میتونید دستی حساب کنید ولی چرا؟

Discussion (0)