Пра навыкі праграмавання
Нядаўна на працы давялося вырашаць даволі простую, і ў той жа час цікавую практычную задачу. Патрэбна было разлічыць і паказаць у адсотках запоўненасць бягучага ўзроўня гульні адносна агульнай колькасці ачкоў. Дадатковай складанасці дадаваў той факт, што крок паміж узроўнямі мог змяняцца.
Для аднаго ўзроўня разлічыць значэнне даволі лёгка. Я нават прапанаваў гэтую задачу сваяку, які займае месцы на школьных алімпіядах. І ён паспяхова зрабіў матэматычную частку, але калі дайшла справа да рашэння задачы цалкам, пачаліся складанасці. І прычына была ў тым, што яму бракавала навыкаў праграмавання.
Што за навыкі праграмавання?
Большасць аперацый ў праграмаванні – гэта аўтаматызацыя нейкіх дзеянняў, то бок паўтарэнее нейкай аперацыі над асобным элементам з набору нейкіх даных.
Так сама да навыкаў праграмавання адносіцца і ўменне выкарыстоўваць умоўныя аператары бінарнай логікі. Але з гэтым навыкам павінна быць прасцей, усе ж людзі умеюць рабіць высновы і прымаць рашэнні, як раз карыстаючыся такой логікай.
Камбінацыя ведаў пра магчымыя аперацыі над данымі і практычны вопыт і ствараюць тыя самыя навыкі праграмавання.
А навошта імі валодаць?
Апошні час вельмі актыўна развіваюцца розныя no-code інструменты, аўтары якіх заяўляюць, што любы чалавек, не ведаючы пэўную мову праграмавання, можа зрабіць нейкі карысны інструмент. І гэта праўда, калі чалавек валодае базавымі навыкамі праграмавання, інакш не атрымаецца. Таму развіваць навыкі праграмавання становіцца неабходнай задачай у наш час.
Нават зрабіць нейкія аперацыі над данымі ў Excel, гэта так сама пэўнага ўзроўню праграмаванне, хоць і ў вельмі спрошчаным выглядзе. Такіх задач будзе станавіцца ўсё болей, таму валодаць базавымі аперацыямі патрэбна, як і матэматыкай.
Алгарытм рашэння задачы
Вяртаючыся да задачы, рашэнне яе даволі простае і эфектыўнае, таму што патрабуе толькі адзін “праход” на набору ўзроўняў. Дастаткова разлічыць працэнт для кожнага ўзроўня па формуле (points - bottom) / (margin - bottom) * 100
, дзе:
points
- агульная колькасць ачкоў на балансе гульца
bottom
- колькасць ачкоў для папярэдняга ўзроўня
margin
- колькасць ачкоў для бягучага ўзроўня
Спіс узроўняў выглядае як калекцыя гранічных значэнняў ачкоў, па дасягненні якой павялічваецца ўзровень: [50, 75, 100, 150, 210]
Але тут яшчэ патрэбна ўлічваць той факт, што калі разлічыць паказчык для ўзроўня ніжэй за бягучы, то значэнні будуць заўседы больш за 100%, а калі разлічыць для ўзроўняў вышэй за бягучы, то значэнні будуць увогуле адмоўныя. Каб вырашыць гэтую праблему, дастаткова звярнуцца да ўбудаваных у любую мову праграмавання функцый min
і max
.
max(0, min(100, round((points - bottom) / (margin - bottom) * 100)))
Такім чынам, мы спачатку зробім усе значэнні, якія вышэй за 100 адсоткаў, роўнымі 100 адсоткам з дапамогай функцыі min
, то бок гэтыя ўзроўні ўжо гарантавана завершаны.
Для усіх адмоўных значэнняў зробім найменшае значэнее роўным 0 з дапамогай функцыі max
, то бок гэтыя ўзроўні яшчэ нават не пачыналіся. Ну а для бягучага ўзроўня атрымаем правільнае значэнне ў адсотках, адносна якога потым можна намаляваць палоску запаўнення.
Калі такі фармат разбораў задач вам цікавы, падтрымайце калі ласка падпіскай мой YouTube-канал, дзе хуткім часам я планую рабіць відэа-разборы.
Сябры, акрамя блога, я амаль што рэгулярна пішу адмысловую рассылку пра праграмванне і тэхналогіі, дзе раз на двы тыдні збіраю самыя цікавыя навіны тэхналогій і раблю агляд цікавых інструментаў, якія мне трапіліся. Таму хутчэй падпісвайцеся, каб не прапусціць штосці цікавае наступным разам!