Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save EntaltsevSN/129f708432f9c6a1a6060c33bd1f129f to your computer and use it in GitHub Desktop.

Select an option

Save EntaltsevSN/129f708432f9c6a1a6060c33bd1f129f to your computer and use it in GitHub Desktop.
Задача на подъём черепашки на гору
// Объявляем постоянные переменные
const target = 100,
walking = 50,
sleeping = 30;
// Объявляем динамические переменные
let pathPassed = 0,
daysElapsed = 0,
log = [];
// Учитывать дни со сном или без
const isCountAFullDay = false;
// Если считать полные дни со сном, то день, когда черепашка забралась на гору не учитывается
// Объявляем запись в журнал пройденных дней
const logADay = () =>
log.push({ day: daysElapsed, path: pathPassed })
// Объявляем процесс подъема на гору
const beginClimbing = () => {
// Объявляем процесс подъема за день
const climbADay = () => {
pathPassed += walking;
return pathPassed >= target;
}
// Обозначаем процесс сна в день
const sleepADay = () =>
pathPassed -= sleeping;
// Объявляем проверку на достижение цели
const isPathPassed = () =>
pathPassed >= target;
// Объявляем процесс проведения дня
const spendADay = () => {
!isCountAFullDay && daysElapsed++;
climbADay()
isPathPassed()
? completeClimbing()
: upToNextDay()
}
// Объявляем переход на следующий день
const upToNextDay = () => {
isCountAFullDay && daysElapsed++;
sleepADay();
logADay();
spendADay();
}
// Объявляем завершение пути
const completeClimbing = () => {
const report = log
.map(({ day, path }) =>
`За ${day} день пройден путь в ${path} м`
).join('. ');
const result =
`На подъём на гору понадобилось ${daysElapsed} ${isCountAFullDay ? 'полных' : ''} дней.`
alert(`${report}. ${result}`);
}
// Начинаем подъём с первого дня
spendADay();
}
beginClimbing();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment