Обновить
1004.27

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга

Never gonna give Differential Calculus up или решаем уравнение Лапласа на теле Рика Эстли в пару строчек 🕺🏼

Пример создания и использования граничной сетки для решения уравнений на её основе в WLJS Notebook

Улыбочку! 📸

img = (* Drag n drop фотографию Рика *);  

Применяем фильтр, чтобы оставить только силуэт

MeanShiftFilter[%, 5, 1] // Binarize // ColorNegate

Делаем сетку для решения уравнения из ч/б изображения

ξ = ImageMesh[%]

Ищем собственные значения и векторы (первые 6) оператора Лапласа aka решаем волновое уравнение

{vals, funs} = NDEigensystem[ {
  -Laplacian[u[x, y], {x, y}], 
  DirichletCondition[u[x, y] == 0, True]
}, 
u[x, y], Element[{x, y}, ξ], 6];

Рисуем первые 6 решений и их "энергии"

Grid@
 Partition[
  Table[ContourPlot[
    funs[[i]], Element[{x, y}, ξ], 
    PlotRange -> All, ImageSize->300, 
    PerformanceGoal->"Speed", PlotLabel -> vals[[i]] 
  ], {i, Length[vals]}], 3]

Результат

Never Give up on Differential Calculus
Never Give up on Differential Calculus

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии1

Не время менять работу, AI специалисты всё ещё на коне.

Недавно вышла статья от одного из крупнейших международных консалтинговых агенств Robert Half, на тему какие профессии будут востребованы в ИТ сфере в 2025 году. 

Агенство прогнозирует что ИИ специалисты по прежнему будут занимать лидирующие позиции по востребованности и уровню зарплат. 

Так же представлены в алфавитном порядке 12 самых востребованных профессий на 2025 год. Из неинтересного там появилась новая профессия - Специалист по этике ИИ. 

А из интересного то что в список попали ИТ Бизнес-аналитики. 

Это подтверждает мои догадки о том что 2025 год будет годом в котором косты на Data Science будут срезать.

Список из 12 самых оплачиваемых ИТ профессий в США:

1. AI ethicist

2. AI product manager

3. Business analyst

4. Cybersecurity engineer

5. Data engineer

6. Database administrator

7. ERP integration manager

8. Machine learning engineer

9. Network engineer

10. IT Project manager

11. QA analyst 

12. Software engineer

Источник: https://www.roberthalf.com/us/en/insights/career-development/highest-paying-it-jobs

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Как не умереть от голода работая в ИТ

Я наткнулся на вакансию от компании "Первый Бит" в Москве. Условия оплаты указаны в описании: сдельная зарплата начинается от 25 тысяч рублей на испытательном сроке, увеличивается до 70-90 т.рублей через 6-9 месяцев и превышает 100 т.рублей через год.

https://hh.ru/vacancy/105297559

Меня заинтересовало, кто может быть целевой аудиторией этой вакансии, готовой работать за 25 тысяч рублей в месяц в Москве. Не секрет, что Москва — это город приезжих, и большинство потенциальных соискателей не имеют собственного жилья. Это значит, что им придется арендовать квартиру или комнату.

Предлагаемая зарплата явно недостаточна для покрытия аренды жилья и транспортных расходов. В Новой Москве студия за пределами МКАД стоит от 30 тысяч рублей в месяц. Даже если делить аренду с кем-то, это будет около 15 тысяч рублей с человека, не считая коммунальных услуг. Транспортные расходы на поездки из таких районов также составят значительную сумму — около 5-7 тысяч рублей.

Я бы не обратил внимание на эту вакансию, если бы не знал о ситуации в компаниях, занимающихся интеграцией 1С. Они испытывают дефицит кадров, хотя, возможно, и в меньшей степени, чем другие ИТ-отрасли.

На мой взгляд, данная вакансия не привлекает специалистов. Чтобы увеличить интерес к ней, компании следует выровнять зарплату по рыночным стандартам и предлагать стажерам минимум 45 тысяч рублей до вычета налогов. Это значительно увеличит поток молодых специалистов, заинтересованных в этой позиции.

Теги:
Всего голосов 6: ↑4 и ↓2+2
Комментарии6

Из рабочего чата, залипательное — хороша почти каждая строчка, даже мелкий текст по периметру :)

Максимальное качество, в котором нашёл — ссылка
Максимальное качество, в котором нашёл — ссылка

Теги:
Всего голосов 48: ↑48 и ↓0+64
Комментарии6

Готовы вывести свои веб-приложения на новый уровень? 💻

Тогда новый бесплатный курс «Веб-разработка на практике» — для вас!

Внутри — подробные инструкции о разработке и деплое проектов с реальными примерами, а также полезные советы для начинающих веб-разработчиков. Изучение займет меньше часа. После прохождения вы научитесь создавать веб-приложения, работать с API, автоматизировать процессы и деплоить проекты. 

В рамках курса

🔹Разрабатываем и разворачиваем приложение на FastAPI . 

🔹Разбираемся, как написать Docker-файл и настроить конфигурацию nginx, чтобы задеплоить веб-приложение.

🔹Показываем, как создать и настроить мини-приложение ВКонтакте для отслеживания погоды, а после — задеплоить на облачный сервер.

Переходите в Академию Selectel, чтобы ознакомиться со всеми материалами! 

Теги:
Всего голосов 11: ↑10 и ↓1+13
Комментарии0

Как обрабатывать 5 млн изменяющихся форм в минуту с SLI 99.99% — Кирилл Грищук

Опубликовали запись доклада секции «Разработка» с Ural Digital Weekend 2024.

При разработке сервиса, от которого зависят все сценарии организации, необходимо предусмотреть все возможные и невозможные сценарии, в рамках доклада поговорим о доступности данных и способе их получения клиентам, рассмотрим различные подходы и определим, когда стоит выбирать нестандартный способ, поделюсь ошибками, которые мы совершили.

Ссылка на запись доклада в ВКонтакте.

Ссылка на презентацию: https://goo.su/qHW9

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

Почему умирает OpenHarmony

Если вы откроете проект на gitee.com вы увидите что проект включает в себя больше 700 (семисот!) репозиториев. Секрет в том что ни один из этих проектов в отдельном репозитории не компилируется независимо! Один знакомый разработчик, который работает с этим богатством, рассказал мне, что чтобы скомпилировать какой либо из проектов составляющих OpenHarmony вы должны скачать и скомпилировать минимум 450 репозиториев! Дело в том что даже отдельные приложения такие как mailBox, storage с СМС-ками, с контактами, видео плеер, ... которые, казалось бы, должны быть отдельными приложениями таковыми не являются. Они все компилируются как части одной монолитной прошивки смартфона (как части операционной системы) и вы не можете скомпилировать их без компиляции всей системы, такая опция просто не предусмотрена.

Поэтому OpenHarmony превратилась в огромного монстра который уже не может даже шевелиться от собственной тяжести. Внутренние связи и зависимости между функциями приложений и зависимостями ядра и системных библиотек никто не контролирует, они постоянно дублируются все в новых и новых модификациях, входят в противоречие друг другом, генерируют противоречивые потоки данных, копии данных, несовместимые интерфейсы, ... все это подобно раковой опухоли которая разъедает-разрывает носителя изнутри.

Каждый новый добавленный в OpenHarmony репозиторий приближает видимый крах проекта.

Интересно как обстоят дела у Андроида в этом смысле.

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии1

Реализация FABRIK на WL в пару строк

Текущая реализация далека от оптимальной, но она хорошо подходит для демонстрации работы алгоритма. Среда исполнения используется WLJS Notebook aka Jupyter + Observable для WL

Виджет с работающим алгоритмом
Виджет с работающим алгоритмом

Мы создадим цепочку из точек и свяжем их в сегментированную линию фиксированной длины

chain = Table[Exp[-ϕ]{-Cos[ϕ], Sin[ϕ]}, {ϕ, 0, π - π/7, π/7.0}];
Graphics[{
    Line[chain // Offload], Black, 
    PointSize[0.04], Point[chain // Offload], Red,
    EventHandler[Graphics`Canvas[], {
      "mousemove" -> handler
    }]
  },
  Axes->True, PlotRange->{{-1,0.2}, {0,0.4}}, ImageSize->400
]

Вы увидите окно с цепью, но цепь не будет реагировать на движение мыши. Нужен сам "решатель". Оригинальная статья опубликована в 2010 году, и алгоритм можно реализовать буквально влоб

handler = Function[target,
  Module[{
    buffer = chain, 
    origin = {-1,0}, 
    prev = chain, 
    lengths = Norm /@ (chain // Reverse // Differences) // Reverse
  },
    buffer = Table[With[{p = chain[[-i]]},
      If[i === 1,
        prev = target;
        target
      ,
    
        prev = prev - Normalize[(prev - p)] lengths[[1-i]];
        prev 
      ]
    ]   
    , {i, chain // Length}] // Reverse;

    buffer = Table[With[{p = buffer[[i]]},
      If[i === 1,
        prev = origin;
        origin
      ,
    
        prev = prev - Normalize[(prev - p)] lengths[[i-1]];
        prev 
      ]
    ]
    , {i, chain // Length}];

    chain = buffer;
   ]
];

После выполнения этой ячейки цепь оживет

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Одна линия, чтобы рассказать историю или Bad Apple на графике WL

Сначала получаем видеофайл анимации Bad Apple каким-либо образом и загружаем его в любую ячейку ввода. Извлечем один кадр

video = Import[FileNameJoin[{"attachments", "Touhou - Bad Apple.mp4"}], 
{"ImageList", All}];
img = video[[500]] // Thumbnail

Кстати, удобно, что Bad Apple выполнена в стиле теневой анимации, поэтому мы можем легко преобразовать любое изображение в сетку из 1 и 0. Если знать положение каждого темного пикселя, то не составит труда обойти их всех одной линией

img = img // ImageAdjust // Binarize;
pos = PixelValuePositions[img, 0];
{length, path} = FindShortestTour[pos];

Здесь нам не нужна длина, а только сам путь, который содержит индексы точек из pos, соединённых в нужном порядке для формирования кратчайшего маршрута через все тёмные пиксели

ListLinePlot[pos[[path]]]

Чтобы убрать угловатости, можно сгладить скользящим средним

ListLinePlot[MovingAverage[pos[[path]], 5]]

Если повторить это со всеми кадрами и стащить звук отдельный байт массив, то можно сделать такую анимацию в реальном времени.

Код полной анимации приведен в этой статье (EN).

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии2

Полезные ссылки и новости в дайджесте за сентябрь⛅

🦾 Анонсировали GoCloud Tech 2024 — IT-конференцию про облачные решения и русский AI, которая пройдет 24 октября онлайн и офлайн в Москве. Приходите послушать хардкорные доклады про облака, AI и изнанку наших сервисов, обменяться опытом и обсудить интересующие темы в неформальной обстановке: зарегистрироваться.

🎓 Запустили новый бесплатный курс Cloud.ru Cloud Fundamentals — про основы использования и внедрения облачных технологий, а еще сертификацию, чтобы вы могли официально подтвердить свои знания и навыки.

🔥 Предлагаем Evolution Managed Kubernetes по специальной цене — подключите сервис до 30 ноября 2024 года и используйте со скидкой 60% до конца 2025 года.

📺 Провели два вебинара:

И приглашаем на вебинары в октябре:

🦾 Поделились обновлениями наших облачных платформ в дайджесте на сайте. Например, теперь в общем доступе сервисы Evolution Bare Metal и Evolution Artifact Registry — подключайте! 

📄 Опубликовали заметки с саммита по вычислениям, памяти и хранению данных 2024 в статье Что нового слышно о шине CXL

🎧 Обсудили с лидером продукта Романом Тимониным, какие навыки станут ключевыми с приходом ChatGPT и почему важно доводить проекты до конца. Подкаст смотрите на YouTube, на RuTube или в VK.

До встречи в ноябре!

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Тестировал всякое для ATARI XL/XE и написал небольшую демку в 106 Байт.

Чтобы понимать куда именно смотреть - тут экран 48х24, то есть 1152 байта, но в ОЗУ весь экран представлен всего 48 байтами, еще 78 байт (кто захочет посчитать 48+78=126, тут просто кодом реализованы однотипные строки) для программирования видеочипа, которому объяснено, что каждая строка на экране смотрит на одну и ту же часть ОЗУ, так мы заполняем весь экран. Для получения нестандартного узора используется 8 байт и перепрограммирование таблицы символов. Рисунок изначально подбирается так чтобы формировался равномерный узор. Для плавности движения используется VSYNC, анимация реализована битовым сдвигом.

.include "atari.asm"
    *= $3000
	lda #48
?copy
	sta screen-1, y
	dey
	bpl ?copy
;	ldy #$00
	iny
?copydl
	lda #$42
	sta dlist2, y
	iny
	lda #<screen
	sta dlist2, y
	iny
	lda #>screen
	sta dlist2, y
	iny
	cpy #72
	bne ?copydl
	lda #>font_data
	sta CHBAS
	lda #$23
	sta SDMCTL
	lda #<dlist
	sta SDLSTL
	lda #>dlist
	sta SDLSTL+1
?main
	ldx #1
?start
	lda RTCLOK+2
?wait
	cmp RTCLOK+2
	beq ?wait
	dex
	bpl ?start
?ring
    lda font_data, x
	asl
	adc #00
	sta font_data, x
	inx
	cpx #08
	bne ?ring
	beq ?main
dlist
	.byte $70, $70, $70
dlist2
	*= dlist2+72
	.byte $41, <dlist, >dlist
screen
	*= $7400
font_data
	.byte ~11000011
	.byte ~10011001
	.byte ~00100100
	.byte ~01000010
	.byte ~01000010
	.byte ~00100100
	.byte ~10011001
	.byte ~11000011

upd: -1 байт от @vadimr

upd: -1

Теги:
Всего голосов 14: ↑14 и ↓0+17
Комментарии1

Я вот не понимаю, почему Го преподносится как  post-OOP язык, в то время как это явно пре-ООП язык, чисто императивный. Как Бейсик (который не Вижуал) или Паскаль.

И это явно не прогресс, а регресс в подходе к методологии.

Хотя, очевидно, он выигрывает у языков с управляемой средой, да. Управляемая среда (ВМ) требует слишком много ресурсов для старта и разогрева. А в микросервисах это вообще не нужно.

Теги:
Всего голосов 8: ↑4 и ↓4+2
Комментарии44

«Мидл Java‑разработчик» — до мидла за 6 месяцев

Курс «Мидл Java‑разработчик» от Яндекс Практикума поможет перейти от базовых навыков программирования к глубоким знаниям и практическим умениям, которые отличают новичка от мидл-специалиста. Программа обновляется раз в полгода, поэтому информация всегда актуальная.

Это курс для самостоятельного обучения. График гибкий: вы можете учиться в любое время, главное, закончить модуль в нужный срок и выполнить проект. Всего модулей 3, каждый из них длится 8 недель. Чтобы всё успевать, рекомендуем уделять учёбе 15—20 часов в неделю.

Проекты будут проверять опытные Java-разработчики из крупных компаний. В чате и на онлайн-воркшопах вам будут помогать наставники (практикующие senior разработчики и тимлиды). Они ответят на сложные вопросы и поделятся опытом.

Это курс профессиональной переподготовки, поэтому по его окончании вы получите диплом, если у вас есть высшее или среднее-специальное образование. Если нет, выдадим сертификат о прохождении курса и справку об обучении.

Ближайший старт — 21 ноября, ещё есть время всё взвесить. Мы подробно расписали программу каждого модуля, чтобы вы могли оценить, подходит ли вам курс. 

→ Узнать о курсе подробнее

Теги:
Всего голосов 8: ↑5 и ↓3+4
Комментарии0

Ближайшие события

Держите задачу на Python от Кирилла Быкова, наставника на курсе «Python-разработчик».

Дана отсортированная последовательность целых чисел и число k. Необходимо найти в этой последовательности число, максимально приближённое к k и вернуть его индекс.

Размер последовательности: 1 <= N <= 10^6

Число k: 0 <= k <= N

Индекс элемента: 0 <= index < N

Примеры:

[1, 3, 4, 7, 9, 12] k = 5
Ответ: 2 (число 4)
[1, 3, 4, 12, 15, 15, 18] k = 14
Ответ: 4 (первое число 15)

Решение не должно превышать по временно́й асимптотике O(log(N)), где N — длина массива. Если задача кажется легкой, попробуйте выполнить её без bisect.

Ждём ваших ответов в комментариях к посту.

Теги:
Всего голосов 5: ↑3 и ↓2+3
Комментарии9

Как бы выглядел Хабр в 1993 году.

Приветствую хабравчане, сидел я вечером за ПК, пил кофе и пришла ко мне идея, как бы Хабр выглядел в 1993 году на html 1.0.

Нашел старые сайты тех лет и попытался в простом варианте воспроизвести Хабр. Вот, что получилось. Довольно забавно:)

<HEADER>
<TITLE>Хабр</TITLE>
</HEADER>
<BODY>
<H1>Хабр</H1>

 <dt>Пришли статью, стань автором! <A NAME=69 HREF="">habr.mail.ru</A></dt>
<A NAME=69 HREF="">Моя лента</A>
<A NAME=69 HREF="">Все потоки</A>
<A NAME=69 HREF="">Разработка</A>
<A NAME=69 HREF="">Администрирование</A>
<A NAME=69 HREF="">Дизайн</A>
<A NAME=69 HREF="">Менеджмент</A>
<A NAME=69 HREF="">Маркетинг</A>
<A NAME=69 HREF="">Научпоп</A>


 <dl>
  <dt><H3>Вышел Linux версии 0.2</H3></dt>
  <dd>
Привет, Хабр!
Ядро Linux набирает обороты. Я расскажу как устроено ядро и почему многие энтузиасты выбирают Linux.
   </dd>
   <dd>
   <A NAME=69 HREF="">Читать</A>
    </dd>
 </dl>

 <dl>
  <dt><H3>Ричард Столман хоронит Windows</H3></dt>
  <dd>
В данной статье я приведу 10 причин, почему windows 3.1 и последующие её версии не будут иметь успеха.
   </dd>
   <dd>
   <A NAME=69 HREF="">Читать</A>
    </dd>
 </dl>

 <dl>
  <dt><H3>В программном обеспечении всё плохо</H3></dt>
  <dd>
 Программы тормозят, новые версии требуют всё более мощного железа им уже не хватает 386 процессора на целых 20mhz.

   </dd>
   <dd>
   <A NAME=69 HREF="">Читать</A>
    </dd>
 </dl>

  <dl>
  <dt><H3>Почему С самый лучшмй языка программирования</H3></dt>
  <dd>
Всем приве

Теги:
Всего голосов 13: ↑11 и ↓2+12
Комментарии15

«Мидл Android-разработчик» — новый курс Яндекс Практикума

Курс «Мидл Android-разработчик» — это углубленная 5-месячная программа, предназначенная для Android-разработчиков с опытом. Курс ориентирован на максимальное расширение прикладного кругозора разработчика. 

Каждые две недели студенты знакомятся с проблемой, которую надо решить, используя новую технологию или подход. Решение закрепляется выполнением проекта. Проекты дают возможность студентам познакомиться с большинством сфер рынка Android-приложений.

Вы научитесь тому, что отличает опытного разработчика от новичка:

  • Освоите современные архитектурные паттерны: научитесь применять принципы SOLID, Clean Architecture, а также работать с современными архитектурами UI, такими как TEA и MVI;

  • Сможете создавать сложные компоненты Jetpack Compose с анимациями, чтобы разрабатывать современные и эффективные пользовательские интерфейсы;

  • Изучите технологии, которые помогут решать разные задачи при разработке: интегрировать в приложения аудио и видео, разрабатывать функции с использованием геолокации;

  • Поймёте, как обеспечить стабильную работу приложения и оптимизировать его: освоите UI- и юнит‑тесты, научитесь настраивать CI/CD и оптимизировать приложение перед публикацией в Google Play.

Наши эксперты — опытные разработчики из Яндекса, Авито, Т-Банка и других топовых компаний, которые давно работают с Kotlin. Они составили программу, опираясь на свой опыт, поэтому вы будете учиться тому, что на самом деле пригодится.

Узнать о курсе подробнее

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии0

Интересный механизм генерации экрана для ATARI XL/XE. Из-за особенности работы видеочипа мы можем для каждой строки сканирования указать видеорежим и то, с какого участка памяти брать данные для строки.

На картинке можно увидеть зоны хода луча, когда он выключен, это Horizontal Retrace и Vertical Retrace, соответственно интервал между строками и между следующими кадрами. В эти интервалы можно выполнять код, который будет делать что-то интересное для нас. Тут будем переключать таблицы символов. Зачем это нужно? Есть текстовый режим графики 40х24 с пятью цветами, который можно использовать для игр, но мы сильно ограничены в рисовании контента динамически, так как это по сути спрайты ориентированные по знакоместам. Символы в XL/XE представлены таблицей в 128 штук (1024 байт) и мы можем рисовать изображение внутри кодовой таблицы, а потом выводить символы в виде текста. Кажется, что 128 символов не хватит чтобы заполнить экран в 40х24=960 байт, вот тут мы и получаем профит.

Новый экран будет (условно) выглядеть так:

ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$

И так 24 раза. После каждых 8 строк сканирования (1 знакоместо) мы сдвигаем кодовую таблицу на 40*8 байт, где уже готово изображение для второй порции строк и т.д. То есть рисуем в памяти где участок для кодовой таблицы, а видеочип рисует их как символы. Мы получаем динамическую генерацию экрана и 5 цветов.

Когда я такое придумал, то думал, что это изобретение века, но потом нашёл информацию о таком способе: Источник 1, источник 2.

Теги:
Всего голосов 2: ↑2 и ↓0+5
Комментарии0

Проблемы обучения программизьму — Тогда и Сейчас. В том числе про Python.

Наткнулся на огромную статью о том как полезно учить детей программированию на Python. А у меня есть парочка наблюдений — во многом по работе новичков с Питоном на CodeAbbey (мой бесплатный и опенсорсный сайт — задачи там идут с оооочень плавным нарастанием сложности — аж скучно порой).

Обращение и Вращение Строки

Развернуть строку или сдвинуть её на K символов. Сложность эти задачи представляют только в языке вроде Pascal / C — т.к. операцию нужно осуществить «на месте» — в «мутабельной» строке. А на Питоне строки иммутабельны и «решение» сводится к конструированию новой строки. В жизни такие операции редко нужны — но детям‑то важно логику в голове развивать!

Округление

А здесь наоборот. Питон — язык профессиональный и операция round ведёт себя статистически корректно, но не так как учат в школе: round(1.5) = 2, round(2.5) = 2, round(3.5) = 4 — это настраивается — но новички не читают доки — и могут биться над задачей часами.

Бесконечные целые

Цель задачки «Modular Calculator» — показать принцип модульной арифметики. В обычных языках пока этот принцип не уяснишь — задача не решается из‑за переполнения целых. На Питоне же её пишут «втупую» даже не поняв в чем задача‑то. Пришлось добавить «продвинутую» версию — там «втупую» не дождёшься окончания расчета.

Какие же выводы?

  1. Идеального языка для обучения пока нет. Быть может стоит изучать парочку разных!

  2. Курсы стремятся показать результат а не развивать мышление.

Теги:
Всего голосов 4: ↑3 и ↓1+5
Комментарии7

Не пытайтесь, это React Native + Flavor

Инсайт дня: React Native и flavor

В компании где я работаю, существует приложение написанное на нативных технологиях в лице — Kotlin/Swift.

Так вот, в приложение на андроид реализована система flavor, практически для более чем 80 компаний.

Попытка удешевить разработку, привела нас к React Native, так как у меня был немалый опыт разработки и работы с данным фреймворком.

С первого взгляда не было очевидно, но… оказывается в React Native поддержки подобного попросту нет от слова совсем.

Конечно, любой скажет «да ведь просто можно использовать переменную флейвора текущего приложения, и менять контент условностями» — но все не столь однозначно и просто… (ведь требование и цель использовать все преимущества этой концепции)

Как итог, если вы хотите реализовать концепцию flavor в полной мере, используя React Native (и вы четко понимаете как это работает в нативе) — то предупрежу сразу что у вас не получится, банально из‑за того, что вы получаете возможность настроить лишь ваши иконки и заголовки, ну и настройки на уровне андроид конфигов =)

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии1

Задачка от Т-Банка, тоже с собеседования - по сравнению с предыдущей что я показывал, от Яндекса, эта кажется ещё менее актуальной для рекрутинга в энтерпрайз - но я просто порадовался что смог её решить в live-coding режиме. Судите сами - хотели бы вы подобное встретить на собесе или нет :)))

Галя приехала на учёбу в большой университет в большом городе. Кампус расположен вдоль дороги, так что иногда между разными корпусами приходится ездить на автобусе. Галя студентка экономная и думает, как минимизировать стоимость билетов, если:

  • разовый билет стоит 5 копеек

  • безлимитный проездной на 2 дня - 18 копеек

  • проездной на 3 дня с лимитом 6 поездок - 22 копейки

Входные данные - массив - сколько поездок пришлось на каждый день в месяце, например:

2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3 4

(здесь ответ 51)

Как это решается? Если вы знаете про "динамическое программирование" (ДП) то наверное уже поняли что задача об этом - поэтому я и удивился встретив такую задачу на собесе - скорее всего нам это не понадобится в энтерпрайзе (хотя в олимпиадных задачках популярно). Если не знаете про ДП, представьте рекурсию - вы пробуете в цикле каждый из трёх типов билетов, ездите сколько он позволяет - и дальше снова вызываете эту функцию для оставшихся поездок. Просто с рекурсией вы не дождётесь окончания работы, но с "мемоизацией" получите то же ДП "навывоворот". Я возился минут 30, но повтороив задачу у себя на сайте увидел что друзья решают аж в 3-4 строчки (ну, на питоне с @cache).

Теги:
Всего голосов 4: ↑4 и ↓0+8
Комментарии12

Вклад авторов