Files
999/lib/services/day_numerology.dart
T

90 lines
2.7 KiB
Dart

/// Свёртка календарной даты в число судьбы суток.
///
/// Та же школа, что на экране психоматрицы: день, месяц и год свёртываются
/// по отдельности, затем складываются. 11, 22 и 33 не свёртываются дальше.
class DayCode {
final int value;
final int reducedDay;
final int reducedMonth;
final int reducedYear;
final String word;
final String title;
const DayCode({
required this.value,
required this.reducedDay,
required this.reducedMonth,
required this.reducedYear,
required this.word,
required this.title,
});
String get formula => '$reducedDay + $reducedMonth + $reducedYear = $value';
String get clause =>
'Нумерологический код суток: $formula, знак «$word». '
'Мастер-числа 11, 22 и 33 не свёртываются.';
}
class DayNumerology {
static const Map<int, String> words = {
1: 'один',
2: 'два',
3: 'три',
4: 'четыре',
5: 'пять',
6: 'шесть',
7: 'семь',
8: 'восемь',
9: 'девять',
11: 'одиннадцать',
22: 'двадцать два',
33: 'тридцать три',
};
static const Map<int, String> titles = {
1: '1 — Первопроходец (Монада)',
2: '2 — Дипломат (Дуада)',
3: '3 — Творец (Триада)',
4: '4 — Строитель (Тетрада)',
5: '5 — Странник (Пентада)',
6: '6 — Хранитель очага (Гексада)',
7: '7 — Искатель истины (Септенер)',
8: '8 — Владыка материи (Октава)',
9: '9 — Мудрец (Эннеада)',
11: '11 — Духовный проводник',
22: '22 — Великий архитектор',
33: '33 — Служение и 33 ряда домов',
};
static int reduce(int n, {bool keepMaster = true}) {
var cur = n.abs();
while (cur > 9) {
if (keepMaster && (cur == 11 || cur == 22 || cur == 33)) return cur;
var sum = 0;
var x = cur;
while (x > 0) {
sum += x % 10;
x ~/= 10;
}
cur = sum;
}
return cur;
}
static DayCode ofDate(DateTime date) {
final day = reduce(date.day);
final month = reduce(date.month);
final year = reduce(date.year);
final value = reduce(day + month + year);
return DayCode(
value: value,
reducedDay: day,
reducedMonth: month,
reducedYear: year,
word: words[value] ?? '',
title: titles[value] ?? '$value',
);
}
}