Leave a comment

ext_2731264 July 20 2016, 10:30:45 UTC
Классно написано. Благодарю.

Пока только начал читать, не утерпел и реализовал проверку апории про обгон черепахи на JavaScript. Получилось, что когда черепаха проползёт расстояние равное 112 шагам, Ахиллес пронесётся мимо и уже будет на 8 шагов впереди. :)

Возможно, я где-то прогнал ).

onload = function(){
var limit = 10000;
var turtle = 1000;
var Achilles = 0;
var fl_overtake = false;
while(limit--){
if(Achilles >= turtle){
fl_overtake = true;
break;
}
turtle++;
Achilles += 10;
}
if(fl_overtake) document.body.innerHTML = 'Achilles: ' + Achilles + ' steps, turtle: ' + (turtle - 1000) + ' steps, difference: ' + (Achilles - turtle) + ' steps';
}

Reply

darkhon July 21 2016, 07:30:04 UTC
А вы считаете вовсе не то, что у Зенона написано. У вас черепаха сдвигается на условную 1, Ахиллес одновременно - на условные 10. Какое это имеет отношение к Зенону?

Reply

ext_2731264 July 21 2016, 08:00:40 UTC
Я это писал, когда только начал читать статью. Воспринял задачу слишком буквально. Как выяснилось позже, это чисто философская тема.

Вроде понял, что хотел сказать Зенон, но вот зачем это, - для меня загадка.

Reply

darkhon July 21 2016, 08:04:01 UTC
Ну так показывает парадоксальность мышления в "элементарных" вещах. Я тут несколько раз ссылку дал на статью по теме, см.

Reply

ext_2950933 July 22 2016, 14:17:35 UTC
А кто вас научил for цикл через while кодировать?

for(
let [turtle, Achilles] = [1e3, 0];
turtle != 1e4;
turtle += 1, Achilles += 10
){

if(Achilles >= turtle){
var format = (results, f) => Object.keys(results).map(k => f(k, results[k])).join()

document.body.innerHTML = format({Achilles: Achilles, turtle: turtle - 1000, difference: Achilles - turtle}, (k,v) => `${k}: ${v} steps`)
break;
}

}

//if(fl_overtake) document.body.innerHTML = `Achilles: ${Achilles} steps, turtle: ${turtle - 1000} steps, difference: ${Achilles - turtle} steps`;

Reply

ext_2731264 July 22 2016, 15:41:31 UTC
Вах, как современно. Только читается трудновато :)

Reply

ext_2950933 July 22 2016, 16:01:01 UTC
На самом деле читать трудно потому что функция format должна объявляться глобально. То что я перекодировал прогу в современном стиле это очень точно. Но проблема в том что в яваскрипте, даже самом совремненном, почему-то не стоит строгий запрет на функцию {}.map. Никто я думаю не станет отрицать что {a: a_value, b: b_value, c: c_value} с последующей .map(k,v => k + ':' + v + steps) выглядит куда понятнее чем (a + ": " + a_value + " steps, " ...). Хотя, если по-современному отождествлять читаемость с DRY, то есть противоположностью DRY, то да, текст совершенно не читаем. Кто может читать JPEG, например? Да никто. С другой стороны, распакованный bitmap прочтитать по пикселям -- пара пустяков. В этом по-видимому секрет, в долбанном DRY. Программисты вроде это уже осознали но пока ещё предлагают помнить о DRY вместе с напоминанием о том что предпочтение всё же должно отдаваться читаемости.

Reply

ext_2731264 July 22 2016, 16:18:33 UTC
Согласен, map в объектах бы очень пригодился. Ну может завезут в будущем.

Reply

ext_2731264 July 22 2016, 16:16:08 UTC
Семейство IE(Edge и 11 проверял) матерится на такое объявление переменных "let [turtle, Achilles] = [1e3, 0]".

Reply

ext_2950933 July 22 2016, 16:25:50 UTC
Сейчас единственный правильный браузер это Хром, а документация у Mozilla Firefox. Там вычитал что let вроде везде поддерживается, а вот до deconstructing assignment Microsoft не опустился.

> Согласен, map в объектах бы очень пригодился. Ну может завезут в будущем.

В JS7 обещали Object.entries(obj) который будет возвращать что-то типа нормального монадического Map, со всеми map и forEach.

Reply


Leave a comment

Up