Если бы рекрутёром был я...
Dec. 8th, 2014 06:50 pm(Навеяно http://knop.livejournal.com/380541.html)
...то при любом собеседовании на программистские должности, требующие математических способностей хотя бы в минимальной степени, соискатели получали бы у меня следующий вопрос.
Реализуйте на любом языке или псевдокоде операцию целочисленного деления с помощью операций с плавающей точкой. Обсудите возможные проблемы.
...то при любом собеседовании на программистские должности, требующие математических способностей хотя бы в минимальной степени, соискатели получали бы у меня следующий вопрос.
Реализуйте на любом языке или псевдокоде операцию целочисленного деления с помощью операций с плавающей точкой. Обсудите возможные проблемы.
no subject
Date: 2014-12-09 03:16 am (UTC)Помню, у меня была задача - использовать матицу 5х5 (проще всего), или уложиться в массив 5х1. Время выполнения каждой команды просчитывалось. Сейчас такого вообще не делают, поэтому все и тормозит...
no subject
Date: 2014-12-09 03:37 am (UTC)no subject
Date: 2014-12-09 03:48 am (UTC)Мне в свое время при максимуме в 56К на все нужно было уложиться в 5 секунд на все вычисления. Я не знаю, какими средствами это делают сейчас (да, производительность компьютеров сильно повысилась!), но дали бы мне в два раза больше памяти тогда - я бы делала чудеса:-) Даже при той же производительности:-)
А сейчас - скучно!
Помню, игрушку писала (кстати, до сих пор аналогов моей задумке нет:-), так уперлась в производительность компьютера. Позже, когда переносила эту игрушку на другую "платформу", пришлось специально задерджки по времени сделать. А изначально никаких задержек не требовалось, само по себе работало с нужной скоростью:-) За счет времени выполнения команд. В те времена даже "тетрис" работал на задержках не по времени, а запускали цикл команд:-)
no subject
Date: 2014-12-09 04:01 am (UTC)Впрочем, даже сейчас есть микропроцессоры, для которых нужно стараться упихивать (см. retroBSD, например), но в большинстве случаев нужно, чтобы "плац был подметен", а не чтобы программист был затрахан. На интервью же можно и спросить, почему для подметания плаца метла более удобна, чем лом.
кстати, до сих пор аналогов моей задумке нет
Правильнее будет сказать "до сих пор аналогов моей задумки не встречала".
Если хорошо искала, и все равно не нашла, напиши на джаваскрипте, чтобы в браузере работало. :)
no subject
Date: 2014-12-09 04:13 am (UTC)no subject
Date: 2014-12-09 04:15 am (UTC)no subject
Date: 2014-12-09 04:31 am (UTC)no subject
Date: 2014-12-09 04:33 am (UTC)Ну вот представь, что на первом уровне экран поделен на 4 поля. Цвет каждого поля меняется случайно. Чем выше уровень, тем чаще меняются цвета. По всем полям бегает "колобок" (управляется либо стрелками с клавиатуры, либо мышкой). Чем "теплее" цвет поля, тем больше очков зарабатывается. Грубо говоря, выгоднее "съесть" красное поле, чем синее. Поле поедается (гасится, становится черным), когда "колобок" добрался до середины (середина - это не один пиксель, а побольше, примерно размером с колобка:-)
На следующем уровне экран - 3х3 поля, затем - 4х4, 5х5 и т.п.
До этого уровня я сделала, работает. Причем ограничений не было, насколько я помню (на последних уровнях колобок ел любое поле, просто проходя по нему:-)
Что НЕ сделано: хищники. В съеденных (черных) полях должны появляться все хищники из сказки (в зависимости от уровня) и пытаться съесть колобка. Но хищники не могут заходить на цветные поля, которые колобок пока не съел.
no subject
Date: 2014-12-09 04:40 am (UTC)Более строго, нужно написать вещественную функцию от двух вещественных аргументов, которая, в тех случаях, когда оба вещественных аргумента численно равны неким целым числам А и В соответственно, в качестве результата возвращает число, численно равное результату целочисленного деления А на В. Поведение во всех прочих случаях произвольно.
Из арифметики можно пользоваться только четырьмя действиями с плавающей точкой и сравнениями.
no subject
Date: 2014-12-09 04:52 am (UTC)no subject
Date: 2014-12-09 04:53 am (UTC)C=0;
while (A>=0) {A-=B;c+=1;}
C-=1;
/* Заменил ++ и -- на +=1 и -=1, чтобы не нарушать правил игры */
no subject
Date: 2014-12-09 04:56 am (UTC)Но операция floor()-то хоть есть? Или ее тоже нет?
no subject
Date: 2014-12-09 05:01 am (UTC)no subject
Date: 2014-12-09 05:04 am (UTC)no subject
Date: 2014-12-09 05:06 am (UTC)А первый пентрикс, еще черно-белый, но уже графический, мы с мужем в командировке написали. Моя часть была графическая и математическая, его - все остальное.
Обсудите возможные проблемы
Date: 2014-12-09 05:15 am (UTC)no subject
Date: 2014-12-09 05:18 am (UTC)no subject
Date: 2014-12-09 05:20 am (UTC)Можно встроить такой "предохранитель":
if (A-B==A) {.....}
no subject
Date: 2014-12-09 06:18 am (UTC)Re: Обсудите возможные проблемы
Date: 2014-12-09 06:20 am (UTC)no subject
Date: 2014-12-09 06:23 am (UTC)Операции floor(), конечно, нет. Задание фактически эквивалентно реализации floor() с помощью четырех арифметических действий и сравнения.
no subject
Date: 2014-12-09 06:34 am (UTC)no subject
Date: 2014-12-09 06:35 am (UTC)no subject
Date: 2014-12-09 06:49 am (UTC)no subject
Date: 2014-12-09 06:58 am (UTC)no subject
Date: 2014-12-09 07:00 am (UTC)no subject
Date: 2014-12-09 07:06 am (UTC)Ну вот, люди даже знают какие потоки, а вот как бы сделать, чтобы сообщения передавать от одного к другому, полжизни занимались, а сказать затрудняются.
no subject
Date: 2014-12-09 09:24 am (UTC)no subject
Date: 2014-12-09 09:51 am (UTC){
if (x > 1.0)
{
double c = 2.0 * Int(x / 2.0);
if((x - c) >= 1.0) return c + 1.0;
return c;
}
if(x < 1.0) return 0.0;
return 1.0;
}
main()
{
double a, double b;
double int_result = Int(a/b);
}
no subject
Date: 2014-12-09 03:47 pm (UTC)no subject
Date: 2014-12-09 04:20 pm (UTC)no subject
Date: 2014-12-09 04:28 pm (UTC)no subject
Date: 2014-12-09 06:15 pm (UTC)no subject
Date: 2014-12-09 06:23 pm (UTC)no subject
Date: 2014-12-09 06:42 pm (UTC)no subject
Date: 2014-12-09 08:32 pm (UTC)no subject
Date: 2014-12-09 08:33 pm (UTC)no subject
Date: 2014-12-09 09:13 pm (UTC)no subject
Date: 2014-12-09 10:52 pm (UTC)no subject
Date: 2014-12-10 10:51 pm (UTC)double Int(double x) { double origx = x; double result = .0; while(x>1.0) x/=2.0; while(x<origx) { x*=2.0; result*=2.0; if(x-result>=1.0) result+=1.0; } return result; }еще более математичный вариант через переодичные функции, и обратные
вроде такого, без подробностей ( функции через разложение Тэйлора )
result = x - atan2( cos(2pi*x), sin(2pi*x) ) / 2*pi
no subject
Date: 2014-12-10 10:59 pm (UTC)