/// Свёртка календарной даты в число судьбы суток. /// /// Та же школа, что на экране психоматрицы: день, месяц и год свёртываются /// по отдельности, затем складываются. 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 words = { 1: 'один', 2: 'два', 3: 'три', 4: 'четыре', 5: 'пять', 6: 'шесть', 7: 'семь', 8: 'восемь', 9: 'девять', 11: 'одиннадцать', 22: 'двадцать два', 33: 'тридцать три', }; static const Map 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', ); } }