Я недавно прочитал, что есть люди, которые ходят без внутреннего монолога. 🤯 Я не знаю, как был сделан такой вывод и насколько научным мог быть подход к изучению этой темы. Для меня это невероятно! Я слышу (и, следовательно, подпеваю) в своей голове REM «Это конец света, каким мы его знаем» с вечера прошлой пятницы (как оказалось, это была пятница, 13-е, жутко). Четыре дня назад в Пуэрто-Рико первые результаты тестов на Covid-19 начали поступать из штаб-квартиры CDC в Атланте после 6 дней обработки. Пять положительных результатов и их подсчет. До этого правительственные чиновники были непреклонны в том, что у нас не было случаев здесь, в Пуэрто-Рико. Они также никого не тестировали, хотя мир боролся с этим неделями, если не месяцами, а Всемирная организация здравоохранения (ВОЗ) только что объявила вирус пандемией.

Для потомков я напомню, что Covid-19 - это болезнь, вызванная новым коронавирусом, и из краткого обзора ситуации на веб-сайте CDC:

Тем не менее, пара действительно тревожных вещей:

1. Население Пуэрто-Рико старше, чем в любом другом штате Соединенных Штатов; 20,7% пуэрториканцев на острове в возрасте 65 лет и старше (за ними следуют Мэн с 20,6%, Флорида с 20,5%, Западная Вирджиния с 19,9% и Вермонт, 19,4%.) / какие-американские-государства-самые-старые / »

2. Пуэрториканцы непропорционально сильно страдают астмой: Наше население страдает от самой высокой заболеваемости и смертности от астмы среди всех штатов и территорий Соединенных Штатов Америки. Из https://estadisticas.pr/files/BibliotecaVirtual/estadisticas/biblioteca/DS/DS_Informe_Vigilancia_Asma.pdf

3- Респираторные заболевания являются здесь большой проблемой для здоровья, но не единственными хроническими состояниями, которыми мы все вместе страдаем: Основными хроническими состояниями, диагностированными с медицинской точки зрения, о которых сообщили участники, были гипертония, беспокойство, ожирение, артрит, гиперхолестеринемия, депрессия, респираторные проблемы и т. Д. и диабет, о которых сообщили по крайней мере 20% участников . Из небольшого исследования, найденного здесь https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5898045/

4- Я ранее писал, что, как будто вышеупомянутых проблем было недостаточно, также имела место долгосрочная экономическая стагнация, растущая долговая ситуация, которая спровоцировала долговой кризис, и два крупных урагана в 2017 году, которые способствовали / усугубили кризис психического здоровья:



5- В моем доме меня особенно беспокоит следующее:



GIFNG
Лучшие GIF-файлы со всего Интернета www.gifng.com



Все это говорит о том, что это было напряженное время, и нетворкинг / собеседование в этих условиях особенно трудны. Но вперед.

В промежутках между случайными проектами, которые приходят мне в голову, я пытаюсь развить общие навыки программирования и недавно присоединился к Codewars. Постепенно я решаю проблемы и пытаюсь решить их на досуге. Вот как я наткнулся на этот, который называется «Вес за вес». В настоящее время я работаю над Javascript, хотя, когда вы создаете свою учетную запись Codewars, вы можете выбрать несколько языков программирования, на которых будете выполнять свои Katas (это то, что они называют своими проблемами кодирования).

Вот инструкции:

Я начал с создания функции и подумал над проблемой:

function weightForWeight(str){
}

Думаю, я сделал разумный первый шаг:

//Step 1: convert string of ASC ordered numbers into an array
    let weightedArr = str.split(' ');

Мне легче открыть страницу Javascript Repl и проверить каждые несколько строк, пока я ищу возможное решение. Под своей функцией я вызываю ее с помощью строки и console.log (weightedArr), чтобы увидеть, что weightForWeight («97 100 125») теперь равно [«97», «100», «125»]. Все идет нормально. Кроме того, я считаю полезным добавлять комментарии по всему коду, чтобы задокументировать свой мыслительный процесс. Поскольку массив чисел, которые на самом деле являются строками, мне сейчас не очень полезен:

//Step 2: convert the array of strings into an array of numbers
   let newElemsArr = [];
   for(let char of weightedArr){
       newElemsArr.push(parseInt(char));
   }

Это сплющенный цикл for, который я взял из моего курса Удеми по алгоритмам и структурам данных, который преподает замечательный Стивен Грайдер. Мне это нравится, и я стараюсь как можно больше использовать его, когда мне нужно перебирать материал. Как он говорит: всякий раз, когда вы используете классическую длинную форму цикла for, вы просто вводите много разных мест, где можно случайно сделать небольшую опечатку. (видео 10, на мин. 2). Синтаксис «for of» был введен в ES2015.

Опять же, я добавляю console.log (newElemsArr) и вызываю свою функцию, чтобы обнаружить, что newElemsArr выглядит так: [97, 100, 125] Я добавляю console.log (typeof (newElemsArr [0]) для хорошей оценки, и он подтверждает Сейчас я имею дело с массивом чисел.

//Step 3: find out the "weight" of each array element & create a JS object where the keys are these elements and the values are their weights
    let weightedDic = {};
    for(i=0; i<newElemsArr.length; i++){
        var num = newElemsArr[i];
        var sum = ('' + num).split('').reduce(function (sum, val) {
           return sum + +val }, 0);
    weightedDic[newElemsArr[i]] = sum;
    }

На данный момент я не могу поверить, насколько все гладко. Заметьте, я не мог использовать здесь более простой сглаженный цикл, хотя - поверьте мне - я пытался заставить его работать. Когда я console.log (weightedDic) и вызываю свою функцию, я получаю:

{ 97: 16, 100: 1, 125: 8 }

Это именно то, чего я хотел все это время! (Я чувствую себя сицилийцем, сидящим перед Человеком в черном, ведущим до смерти Битву Сообразительности!) Однако теперь я должен найти способ создать новый массив чисел, который отсортирован по веса. Если бы я работал с Ruby и / или Python, я не сомневаюсь, что это было бы проще и понятнее. Но, увы, Javascript, ты старая хитрая собака: я погуглил, исследовал и осмотрелся и нашел эту слишком сложную серию шагов для выполнения задачи.

//Step 4: sort the JS Object by its values
    let keys = Object.keys(weightedDic);
    let values = Object.values(weightedDic);
    let sortedVals = values.sort(sortNumber);
    function sortNumber(a,b) {
       return a - b;
    }

Я по крайней мере на полпути, потому что, когда я console.log (sortedVals), я получаю:

[ 1, 8, 16 ]

А теперь последний трюк: теперь, когда я получил значения в объекте weightedDic, отсортированном в их собственном массиве, мне нужно было найти способ создать массив ключей, следующих в том же порядке.

//Step 5: get the Object's keys in an array that follows the order of the sortedVals array
    let sortedArr = [];
    for(i=0; i<sortedVals.length; i++){
        sortedArr.push(Object.keys(weightedDic).find(key =>  
        weightedDic[key] === sortedVals[i]));
    }
    return sortedArr.join(' ').toString();

Когда я console.log (sortedArr.join (‘’) .toString ()), я получаю:

‘100 125 97’

Ура! К сожалению, я еще не закончил. Я прохожу один из двух тестов в среде CodeWars. В инструкциях есть немного больше, в которых рассказывается, как работать с ключами, имеющими одинаковое взвешенное значение, но, честно говоря, я не уверен, что хорошо понимаю эту часть. Я буду царапать его, пока не получу. В этом сценарии карантина, комендантского часа и конца дней у меня есть все время в мире… или нет? 🤔

* Некоторые могли уловить ссылку на название романа Милана Кундеры Невыносимая легкость бытия. В последнее время я много думал о моих любимых книгах с тех пор, как встретил одного из соучредителей этого замечательного приложения, Booksloth: https://www.booksloth.com/ (¡Hola X!) , на местном мероприятии Женщины в науке о данных несколько недель назад. Я достаточно вдохновлен, чтобы попытаться в одном из будущих постов блога написать обратный отсчет, похожий на этот здесь, но с книгами: