=== будет возвращать true|false, Вам надо чтобы все вернули true.
0.5. На счет логики - имеется коллекция сущностей, каждая из которых имеет некоторое число, представляющее собой шанс выпадения той или иной сущности. В данном примере сумма шансов может быть больше, потому как значения интерполируются. По итогу, функция выбирает некий шанс от [0; max], где max - это сумма всех шансов сущностей. Далее функция перебирает всю коллекцию и проверяет, лежит ли выбранный шанс в определенном интервале [накопленный_шанс; накопленный_шанс + текущий_шанс), и если это так, то вернет текущий элемент из цикла; нет - добавит к накопленному шансу шанс текущего элемента. Написано сложно, работает просто:1. Всего 1.3.0 <= 1 (Да) И 1 < 0 + 0.7 (Нет) -> В накопленный шанс добавляем 0.7.0.7 <= 1 (Да) И 1 < 0.7 + 0.25 (Нет) -> В накопленный шанс добавляем 0.25, становится 0.95.0.95 <= 1 (Да) И 1 < 0.95 + 0.25 (Да) -> Мы попали в интервал, возвращаем Spoon.
Z при парсинге будет добавлять таймзону. Например у меня +6 GMT. По итогу получу не 10 часов, а 16 часов. Без Z - получу 10. Но с датами лучше работать используя таймзону. Иначе может случится так, что пользователь окажется в прошлом.
side, она возвращает всего три значения: -1, 0 и 1. В данном случае, если отрезки соединять по часовой стрелке, то функция возвращает -1.