// https://psychology.tips/types-of-temperament-and-their-meaning/ let temperaments = { Sanguine: { name: "Сангвиник", chance: 20, // 20% explanation: "Жизнерадостный, энергичный и общительный, легко адаптируется к новым ситуациям и любит активную жизнь.", }, Choleric: { name: "Холерик", chance: 15, // 15% explanation: "Целеустремленный и решительный, склонен к лидерству и быстрому принятию решений, хотя иногда проявляет вспыльчивость.", }, Melancholic: { name: "Меланхолик", chance: 35, // 35% explanation: "Чувствительный и задумчивый, склонен к глубоким размышлениям и эмоциональной глубине, часто сосредоточен на деталях.", }, Phlegmatic: { name: "Флегматик", chance: 30, // 30% explanation: "Спокойный и уравновешенный, редко подвержен стрессу и предпочитает стабильность, хороший слушатель.", }, }; let psychosocialTypes = { DonKihot: { name: "Дон Кихот", chance: 10, // 10% explanation: "Интуитивно-логический экстраверт, склонен к исследованию новых идей и подходов, сочетая интуицию возможностей и структурную логику.", }, Duma: { name: "Дюма", chance: 8, // 8% explanation: "Сенсорно-этический интроверт, мягкий, ориентированный на гармонию и комфорт, использует сенсорику ощущений и этику эмоций.", }, Gyugo: { name: "Гюго", chance: 9, // 9% explanation: "Этико-сенсорный экстраверт, энергичный, выражающий эмоции, склонен к мотивации и поддержке, управляет этикой эмоций и сенсорикой ощущений.", }, Robespier: { name: "Робеспьер", chance: 7, // 7% explanation: "Логико-интуитивный интроверт, рационален, склонен к анализу и систематизации, использует структурную логику и интуицию возможностей.", }, Zhukov: { name: "Жуков", chance: 10, // 10% explanation: "Сенсорно-логический экстраверт, решителен, настойчив, лидер по натуре, использует сенсорику силы и деловую логику.", }, Yesenin: { name: "Есенин", chance: 8, // 8% explanation: "Интуитивно-этический интроверт, мечтателен, склонен к глубоким переживаниям, управляет интуицией времени и этикой эмоций.", }, Napoleon: { name: "Наполеон", chance: 10, // 10% explanation: "Сенсорно-этический экстраверт, харизматичен, уверен в себе, лидер, использует сенсорику силы и этику отношений.", }, Balzac: { name: "Бальзак", chance: 6, // 6% explanation: "Интуитивно-логический интроверт, пессимистичен, видит риски и угрозы, использует интуицию времени и структурную логику.", }, JackLondon: { name: "Джек Лондон", chance: 10, // 10% explanation: "Логико-интуитивный экстраверт, ориентирован на достижение целей, новые идеи и эффективность.", }, Draizer: { name: "Драйзер", chance: 7, // 7% explanation: "Этико-сенсорный интроверт, принципиален, привержен моральным стандартам, использует этику отношений и сенсорику силы.", }, Shtirlic: { name: "Штирлиц", chance: 9, // 9% explanation: "Логико-сенсорный экстраверт, логичен, ориентирован на достижения, использует структурную логику и сенсорику силы.", }, Geksli: { name: "Гексли", chance: 8, // 8% explanation: "Интуитивно-этический экстраверт, жизнерадостен, легко находит общий язык, использует интуицию возможностей и этику эмоций.", }, Gaben: { name: "Габен", chance: 10, // 10% explanation: "Сенсорно-логический интроверт, спокойный, ценит комфорт, управляет сенсорикой ощущений и деловой логикой.", }, MaximGorkiy: { name: "Максим Горький", chance: 8, // 8% explanation: "Логико-сенсорный интроверт, методичен, привержен порядку, использует структурную логику и сенсорику силы.", }, Hamlet: { name: "Гамлет", chance: 9, // 9% explanation: "Этико-интуитивный экстраверт, склонен к драматичности, использует этику эмоций и интуицию времени.", }, Dostoevskiy: { name: "Достоевский", chance: 8, // 8% explanation: "Этико-интуитивный интроверт, чувствителен, склонен к самопожертвованию, использует этику отношений и интуицию возможностей.", }, }; let archetypesAccordingToCarlJung = { SimpleMinded: { name: "Простодушный", chance: 7, // 7% explanation: "Символизирует невинность и открытость, избегает конфликтов, ищет безопасности.", }, GoodFellow: { name: "Славный малый", chance: 8, // 8% explanation: "Добрый, отзывчивый, старается помогать и поддерживать других.", }, Warrior: { name: "Воин", chance: 10, // 10% explanation: "Смелый и решительный, стремится преодолевать трудности и защищать слабых.", }, Caregiver: { name: "Опекун", chance: 9, // 9% explanation: "Заботливый и ответственный, стремится защищать и заботиться о других.", }, Seeker: { name: "Искатель", chance: 10, // 10% explanation: "Любознательный и независимый, стремится к новым знаниям и открытиям.", }, Lover: { name: "Любовник", chance: 8, // 8% explanation: "Эмоциональный и страстный, стремится к гармонии и близости с другими.", }, Rebel: { name: "Бунтарь", chance: 7, // 7% explanation: "Протестует против устоявшихся норм, стремится к переменам и свободе.", }, Creator: { name: "Творец", chance: 9, // 9% explanation: "Ориентирован на создание и креативность, стремится создавать новое.", }, Ruler: { name: "Правитель", chance: 10, // 10% explanation: "Стремится к порядку и контролю, управляет другими и поддерживает стабильность.", }, Magician: { name: "Маг", chance: 6, // 6% explanation: "Ищет скрытые знания и трансформацию, стремится изменить реальность.", }, Sage: { name: "Мудрец", chance: 9, // 9% explanation: "Стремится к знаниям и мудрости, анализирует и ищет истину.", }, Jester: { name: "Шут", chance: 7, // 7% explanation: "Игривый и остроумный, стремится разрушить шаблоны и принести радость.", }, }; // Функция для генерации случайной комбинации типа и архетипа function getPsychosocialTypeAndArchetype() { // Функция для вычисления суммарного шанса в объекте function getTotalChance(obj) { return Object.values(obj).reduce((sum, item) => sum + item.chance, 0); } // Функция для случайного выбора элемента на основе нормализованных шансов function getRandomElement(obj, totalChance) { const rand = Math.random() * totalChance; let cumulativeChance = 0; for (const key in obj) { cumulativeChance += obj[key].chance; if (rand < cumulativeChance) { return obj[key]; } } } // Суммарные шансы для каждого набора const totalTemperamentChance = getTotalChance(temperaments); const totalPsychosocialChance = getTotalChance(psychosocialTypes); const totalArchetypeChance = getTotalChance(archetypesAccordingToCarlJung); // Выбор случайного типа, архетипа и темперамента const temperament = getRandomElement(temperaments, totalTemperamentChance); const psychosocialType = getRandomElement(psychosocialTypes, totalPsychosocialChance); const archetype = getRandomElement(archetypesAccordingToCarlJung, totalArchetypeChance); return { temperament: temperament, psychosocialType: psychosocialType, archetype: archetype, }; } dv.psychoTypes = { getPsychosocialTypeAndArchetype, };