Członkowie Paranteli: Systematyzacja Identyfikacji
🕵🏻👤👥🫂👫👨👩👧👦.
⚠️🚫⛔ARTYKUŁ PODCZAS PRZYGOTOWYWANIA.⛔🚫⚠️
Krewni Wstępni: Agnaci.
1° (⁻¹P⁝F) 【2⚥】: Ojciec.
2° (⁻²P₂⁝FF) 【4⚥】: Dziadek ojczysty.
2° (⁻²P₂⁝FM) 【5⚥】: Babcia ojczysta.
3° (⁻³P₃⁝FFF) 【8⚥】: Pradziadek ojczysto-ojczysty.
3° (⁻³P₃⁝FFM) 【9⚥】: Prababcia ojczysto-ojczysta.
3° (⁻³P₃⁝FMF) 【10⚥】: Pradziadek macierzysto-ojczysty.
3° (⁻³P₃⁝FMM) 【11⚥】: Prababcia macierzysto-ojczysta.
Krewni Wstępni: Kognaci.
1° (⁻¹P⁝M) 【3⚥】: Matka.
2° (⁻²P₂⁝MF) 【6⚥】: Dziadek macierzysty.
2° (⁻²P₂⁝MM) 【7⚥】: Babcia macierzysta.
3° (⁻³P₃⁝MFF) 【12⚥】: Pradziadek ojczysto-macierzysty.
3° (⁻³P₃⁝MFM) 【13⚥】: Prababcia ojczysto-macierzysta.
3° (⁻³P₃⁝MMF) 【14⚥】: Pradziadek macierzysto-macierzysty.
3° (⁻³P₃⁝MMM) 【15⚥】: Prababcia macierzysto-macierzysta.
Krewni Zstępni.
1° (⁺¹C⁝S) 【1⚥2☍】: Syn.
2° (⁺²C₂⁝SS) 【1⚥4☍】: Wnuk.
2° (⁺²C₂⁝SD) 【1⚥5☍】: Wnuczka.
3° (⁺³C₃⁝SSS) 【1⚥8☍】: Prawnuk.
3° (⁺³C₃⁝SSD) 【1⚥9☍】: Prawnuczka.
3° (⁺³C₃⁝SDS) 【1⚥10☍】: Prawnuk.
3° (⁺³C₃⁝SDD) 【1⚥11☍】: Prawnuczka.
1° (⁺¹C⁝D) 【1⚥3☍】: Córka.
2° (⁺²C₂⁝DS) 【1⚥6☍】: Wnuk.
2° (⁺²C₂⁝DD) 【1⚥7☍】: Wnuczka.
3° (⁺³C₃⁝DSS) 【1⚥12☍】: Prawnuk.
3° (⁺³C₃⁝DSD) 【1⚥13☍】: Prawnuczka.
3° (⁺³C₃⁝DDS) 【1⚥14☍】: Prawnuk.
3° (⁺³C₃⁝DDD) 【1⚥15☍】: Prawnuczka.
Krewni Boczni: Zstępni Po Rodzicach.
【1⚥】
2° (⁼⁰G⁝B) 【1⚥2⚤】: Brat.
3° (⁺¹GC⁝BS) 【1♂4⚤】: Synowiec (Bratanek).
3° (⁺¹GC⁝BS) 【1♀4⚤】: Brataniec (Bratanek).
3° (⁺¹GC⁝BD) 【1♂5⚤】: Synowica.
3° (⁺¹GC⁝BD) 【1♀5⚤】: Bratanica.
4° (⁺²GC⁝BSS) 【1♂8⚤】: Wnuk stryjeczny.
4° (⁺²GC⁝BSS) 【1♀8⚤】: Wnuk cioteczny.
4° (⁺²GC⁝BSD) 【1♂9⚤】: Wnuczka stryjeczna.
4° (⁺²GC⁝BSD) 【1♀9⚤】: Wnuczka cioteczna.
4° (⁺²GC⁝BDS) 【1♂10⚤】: Wnuk stryjeczny.
4° (⁺²GC⁝BDS) 【1♀10⚤】: Wnuk cioteczny.
4° (⁺²GC⁝BDD) 【1♂11⚤】: Wnuczka stryjeczna.
4° (⁺²GC⁝BDD) 【1♀11⚤】: Wnuczka cioteczna.
2° (⁼⁰G⁝Z) 【1⚥3⚤】: Siostra.
3° (⁺¹GC⁝ZS) 【1⚥6⚤】: Siostrzeniec.
3° (⁺¹GC⁝ZD) 【1⚥7⚤】: Siostrzenica.
4° (⁺²GC⁝ZSS) 【1♂12⚤】: Wnuk wujeczny.
4° (⁺²GC⁝ZSS) 【1♀12⚤】: Wnuk siołeczny.
4° (⁺²GC⁝ZSD) 【1♂13⚤】: Wnuczka wujeczna.
4° (⁺²GC⁝ZSD) 【1♀13⚤】: Wnuczka siołeczna.
4° (⁺²GC⁝ZDS) 【1♂14⚤】: Wnuk wujeczny.
4° (⁺²GC⁝ZDS) 【1♀14⚤】: Wnuk siołeczny.
4° (⁺²GC⁝ZDD) 【1♂15⚤】: Wnuczka wujeczna.
4° (⁺²GC⁝ZDD) 【1♀15⚤】: Wnuczka siołeczna.
2° (⁼⁰PC⁝FS) 【1⚥2⚣】: Półbrat ojczysty.
2° (⁼⁰PC⁝MS) 【1⚥2⚢】: Półbrat macierzysty.
3° (⁺¹PC₂⁝FSS) 【1♂4⚣】: Półsynowiec (Półbratanek) ojczysty.
3° (⁺¹PC₂⁝FSS) 【1♀4⚣】: Półbrataniec (Półbratanek) ojczysty.
3° (⁺¹PC₂⁝MSS) 【1♂4⚢】: Półsynowiec (Półbratanek) macierzysty
3° (⁺¹PC₂⁝MSS) 【1♀4⚢】: Półbrataniec (Półbratanek) macierzysty
3° (⁺¹PC₂⁝FSD) 【1♂5⚣】: Półsynowica (Półbratanica) ojczysta.
3° (⁺¹PC₂⁝FSD) 【1♀5⚣】: Półbratanica ojczysta.
3° (⁺¹PC₂⁝MSD) 【1♂5⚢】: Półsynowica (Półbratanica) macierzysta.
3° (⁺¹PC₂⁝MSD) 【1♀5⚢】: Półbratanica macierzysta.
2° (⁼⁰PC⁝FD) 【1⚥3⚣】: Półsiostra ojczysta.
2° (⁼⁰PC⁝MD) 【1⚥3⚢】: Półsiostra macierzysta.
3° (⁺¹PC₂⁝FDS) 【1⚥6⚣】: Półsiostrzeniec ojczysty.
3° (⁺¹PC₂⁝MDS) 【1⚥6⚢】: Półsiostrzeniec macierzysty.
3° (⁺¹PC₂⁝FDD) 【1⚥7⚣】: Półsiostrzenica ojczysta.
3° (⁺¹PC₂⁝MDD) 【1⚥7⚢】: Półsiostrzenica macierzysta.
Krewni Boczni: Zstępni Po Ojczystych Dziadkach.
【2⚥】
3° (⁻¹PG⁝FB) 【2⚥2⚤】: Stryj.
4° (⁼⁰PGC⁝FBS) 【2⚥4⚤】: Brat stryjeczny.
4° (⁼⁰PGC⁝FBD) 【2⚥5⚤】: Siostra stryjeczna.
5° (⁺¹PGC₂⁝FBSS) 【2⚥8⚤】: Nieć.
5° (⁺¹PGC₂⁝FBSD) 【2⚥9⚤】: Nieściora.
5° (⁺¹PGC₂⁝FBDS) 【2⚥10⚤】: Nieć.
5° (⁺¹PGC₂⁝FBDD) 【2⚥11⚤】: Nieściora.
3° (⁻¹PG⁝FZ) 【2⚥3⚤】: Ciotka.
4° (⁼⁰PGC⁝FZS) 【2⚥6⚤】: Brat cioteczny.
4° (⁼⁰PGC⁝FZD) 【2⚥7⚤】: Siostra cioteczna.
5° (⁺¹PGC₂⁝FZSS) 【2⚥12⚤】: Nieć.
5° (⁺¹PGC₂⁝FZSD) 【2⚥13⚤】: Nieściora.
5° (⁺¹PGC₂⁝FZDS) 【2⚥14⚤】: Nieć.
5° (⁺¹PGC₂⁝FZDD) 【2⚥15⚤】: Nieściora.
3° (⁻¹P₂C⁝FFS) 【2⚥2⚣】: Półstryj ojczysty.
3° (⁻¹P₂C⁝FMS) 【2⚥2⚢】: Półstryj macierzysty.
3° (⁻¹P₂C⁝FFD) 【2⚥3⚣】: Półciotka ojczysta.
3° (⁻¹P₂C⁝FMD) 【2⚥3⚢】: Półciotka macierzysta.
Krewni Boczni: Zstępni Po Macierzystych Dziadkach.
【3⚥】
3° (⁻¹PG⁝MB) 【3⚥2⚤】: Wuj.
4° (⁼⁰PGC⁝MBS) 【3⚥4⚤】: Brat wujeczny.
4° (⁼⁰PGC⁝MBD) 【3⚥5⚤】: Siostra wuyjeczna.
5° (⁺¹PGC₂⁝MBSS) 【3⚥8⚤】: Nieć.
5° (⁺¹PGC₂⁝MBSD) 【3⚥9⚤】: Nieściora.
5° (⁺¹PGC₂⁝MBDS) 【3⚥10⚤】: Nieć.
5° (⁺¹PGC₂⁝MBDD) 【3⚥11⚤】: Nieściora.
3° (⁻¹PG⁝MZ) 【3⚥3⚤】: Ciotka.
4° (⁼⁰PGC⁝MZS) 【3⚥6⚤】: Brat siołeczny.
4° (⁼⁰PGC⁝MZD) 【3⚥7⚤】: Siostra siołeczna.
5° (⁺¹PGC₂⁝MZSS) 【3⚥12⚤】: Nieć.
5° (⁺¹PGC₂⁝MZSD) 【3⚥13⚤】: Nieściora.
5° (⁺¹PGC₂⁝MZDS) 【3⚥14⚤】: Nieć.
5° (⁺¹PGC₂⁝MZDD) 【3⚥15⚤】: Nieściora.
3° (⁻¹P₂C⁝MFS) 【3⚥2⚣】: Półwuj ojczysty.
3° (⁻¹P₂C⁝MMS) 【3⚥2⚢】: Półwuj macierzysty.
3° (⁻¹P₂C⁝MFD) 【3⚥3⚣】: Półsioła ojczysta.
3° (⁻¹P₂C⁝MMD) 【3⚥3⚢】: Półsioła macierzysta.
Krewni Boczni: Zstępni Po Ojczystych Pradziadkach.
【3⚥】 & 【4⚥】
4° (⁻²P₂G⁝FFB) 【4⚥2⚤】: Prastryj.
5° (⁻¹P₂GC⁝FFBS) 【4⚥4⚤】: Stryj stryjeczny.
5° (⁻¹P₂GC⁝FFBD) 【4⚥5⚤】: Ciotka stryjeczna.
6° (⁼⁰P₂GC₂⁝FFBSS) 【4⚥8⚤】: Brat przestryjeczny.
6° (⁼⁰P₂GC₂⁝FFBSD) 【4⚥9⚤】: Siostra przestryjeczna.
6° (⁼⁰P₂GC₂⁝FFBDS) 【4⚥10⚤】: Brat przestryjeczny.
6° (⁼⁰P₂GC₂⁝FFBDD) 【4⚥11⚤】: Siostra przestryjeczna.
4° (⁻²P₂G⁝FFZ) 【4⚥3⚤】: Praciotka.
5° (⁻¹P₂GC⁝FFZS) 【4⚥6⚤】: Stryj cioteczny.
5° (⁻¹P₂GC⁝FFZD) 【4⚥7⚤】: Ciotka cioteczna.
6° (⁼⁰P₂GC₂⁝FFZSS) 【4⚥12⚤】: Brat przecioteczny.
6° (⁼⁰P₂GC₂⁝FFZSD) 【4⚥13⚤】: Siostra przecioteczna.
6° (⁼⁰P₂GC₂⁝FFZDS) 【4⚥14⚤】: Brat przecioteczny.
6° (⁼⁰P₂GC₂⁝FFZDD) 【4⚥15⚤】: Siostra przecioteczna.
4° (⁻²P₂G⁝FMB) 【5⚥2⚤】: Prawuj.
5° (⁻¹P₂GC⁝FMBS) 【5⚥4⚤】: Stryj wujeczny.
5° (⁻¹P₂GC⁝FMBD) 【5⚥5⚤】: Ciotka wujeczna.
6° (⁼⁰P₂GC₂⁝FMBSS) 【5⚥8⚤】: Brat przewujeczny.
6° (⁼⁰P₂GC₂⁝FMBSD) 【5⚥9⚤】: Siostra przewujeczna.
6° (⁼⁰P₂GC₂⁝FMBDS) 【5⚥10⚤】: Brat przewujeczny
6° (⁼⁰P₂GC₂⁝FMBDD) 【5⚥11⚤】: Siostra przewujeczna.
4° (⁻²P₂G⁝FMZ) 【5⚥3⚤】: Prasioła.
5° (⁻¹P₂GC⁝FMZS) 【5⚥6⚤】: Stryj siołeczny.
5° (⁻¹P₂GC⁝FMZD) 【5⚥7⚤】: Ciotka siołeczna.
6° (⁼⁰P₂GC₂⁝FMZSS) 【5⚥12⚤】: Brat przesiołeczny.
6° (⁼⁰P₂GC₂⁝FMZSD) 【5⚥13⚤】: Siostra przesiołeczna.
6° (⁼⁰P₂GC₂⁝FMZDS) 【5⚥14⚤】: Brat przesiołeczny.
6° (⁼⁰P₂GC₂⁝FMZDD) 【5⚥15⚤】: Siostra przesiołeczna.
Krewni Boczni: Zstępni Po Macierzystych Pradziadkach.
【5⚥】 & 【6⚥】
4° (⁻²P₂G⁝MFB) 【6⚥2⚤】: Prastryj.
5° (⁻¹P₂GC⁝MFBS) 【6⚥4⚤】: Stryj stryjeczny.
5° (⁻¹P₂GC⁝MFBD) 【6⚥5⚤】: Ciotka stryjeczna.
6° (⁼⁰P₂GC₂⁝MFBSS) 【6⚥8⚤】: Brat przestryjeczny.
6° (⁼⁰P₂GC₂⁝MFBSD) 【6⚥9⚤】: Siostra przestryjeczna.
6° (⁼⁰P₂GC₂⁝MFBDS) 【6⚥10⚤】: Brat przestryjeczny.
6° (⁼⁰P₂GC₂⁝MFBDD) 【6⚥11⚤】: Siostra przestryjeczna.
4° (⁻²P₂G⁝MFZ) 【6⚥3⚤】: Praciotka.
5° (⁻¹P₂GC⁝MFZS) 【6⚥6⚤】: Stryj cioteczny.
5° (⁻¹P₂GC⁝MFZD) 【6⚥7⚤】: Ciotka cioteczna.
6° (⁼⁰P₂GC₂⁝MFZSS) 【6⚥12⚤】: Brat przecioteczny.
6° (⁼⁰P₂GC₂⁝MFZSD) 【6⚥13⚤】: Siostra przecioteczna.
6° (⁼⁰P₂GC₂⁝MFZDS) 【6⚥14⚤】: Brat przecioteczny.
6° (⁼⁰P₂GC₂⁝MFZDD) 【6⚥15⚤】: Siostra przecioteczna.
4° (⁻²P₂G⁝MMB) 【7⚥2⚤】: Prawuj.
5° (⁻¹P₂GC⁝MMBS) 【7⚥4⚤】: Stryj wujeczny.
5° (⁻¹P₂GC⁝MMBD) 【7⚥5⚤】: Ciotka wujeczna.
6° (⁼⁰P₂GC₂⁝MMBSS) 【7⚥8⚤】: Brat przewujeczny.
6° (⁼⁰P₂GC₂⁝MMBSD) 【7⚥9⚤】: Siostra przewujeczna.
6° (⁼⁰P₂GC₂⁝MMBDS) 【7⚥10⚤】: Brat przewujeczny
6° (⁼⁰P₂GC₂⁝MMBDD) 【7⚥11⚤】: Siostra przewujeczna.
4° (⁻²P₂G⁝MMZ) 【7⚥3⚤】: Prasioła.
5° (⁻¹P₂GC⁝MMZS) 【7⚥6⚤】: Stryj siołeczny.
5° (⁻¹P₂GC⁝MMZD) 【7⚥7⚤】: Ciotka siołeczna.
6° (⁼⁰P₂GC₂⁝MMZSS) 【7⚥12⚤】: Brat przesiołeczny.
6° (⁼⁰P₂GC₂⁝MMZSD) 【7⚥13⚤】: Siostra przesiołeczna.
6° (⁼⁰P₂GC₂⁝MMZDS) 【7⚥14⚤】: Brat przesiołeczny.
6° (⁼⁰P₂GC₂⁝MMZDD) 【7⚥15⚤】: Siostra przesiołeczna.
Powinowaci: Partnerzy Wstępnych, wraz z ichże Wstępnymi i Zstępnymi.
1° (⁻¹PE⁝MH) 【3⚥1⚭】: ojczym.
2° (⁻²PEP⁝MHF) 【3⚥2⚭】: dziadek ojczysty przybrany, ojciec ojczyma.
2° (⁻²PEP⁝MHM) 【3⚥3⚭】: babka ojczysta przybrana, matka ojczyma.
2° (⁼⁰PEC⁝MHS) 【3⚥2⚬】: brat przybrany.
2° (⁼⁰PEC⁝MHD) 【3⚥3⚬】: siostra przybrana.
1° (⁻¹PE⁝FW) 【2⚥1⚭】: macocha.
2° (⁻²PEP⁝FWF) 【2⚥2⚭】: dziadek macierzysty przybrany, ojciec macochy.
2° (⁻²PEP⁝FWM) 【2⚥3⚭】: babka macierzysta przybrana, matka macochy.
2° (⁼⁰PEC⁝FWS) 【2⚥2⚬】: brat przybrany.
2° (⁼⁰PEC⁝FWD) 【2⚥3⚬】: siostra przybrana.
2° (⁻²P₂E⁝FMH) 【5⚥1⚭】: dziadek ojczysty przybrany, ojczym ojca.
2° (⁻²PE⁝MMH) 【7⚥1⚭】: dziadek macierzysty przybrany, ojczym matki .
2° (⁻²P₂E⁝FFW) 【4⚥1⚭】: babka ojczysta przybrana, macocha ojca.
2° (⁻²P₂E⁝MFW) 【6⚥1⚭】: babka macierzysta przybrana, macocha matki .
Powinowaci: Partnerzy Probanta Wraz z Wstępnymi.
【1♂】 & 【1♀】
0° (⁼⁰E⁝W) 【1♂1⚭】: Żona.
1° (⁻¹EP⁝WF) 【1♂2⚭】: Teść.
1° (⁻¹EP⁝WM) 【1♂3⚭】: Teściowa.
2° (⁻²EP₂⁝WFF) 【1♂2⚭】: Prateść.
2° (⁻²EP₂⁝WFM) 【1♂3⚭】: Prateściowa.
2° (⁻²EP₂⁝WMF) 【1♂2⚭】: Prateść.
2° (⁻²EP₂⁝WMM) 【1♂3⚭】: Prateściowa.
0° (⁼⁰E⁝H) 【1♀1⚭】: Mąż.
1° (⁻¹EP⁝HF) 【1♀2⚭】: Świekier (Teść).
1° (⁻¹EP⁝HM) 【1♀3⚭】: Świekra (Teściowa).
2° (⁻²EP₂⁝HFF) 【1♀2⚭】: Praświekier.
2° (⁻²EP₂⁝HFM) 【1♀3⚭】: Praświekra.
2° (⁻²EP₂⁝HMF) 【1♀2⚭】: Praświekier.
2° (⁻²EP₂⁝HMM) 【1♀3⚭】: Praświekra.
Powinowaci: Zstępni Partnerów Probanta.
【1♂】 & 【1♀】
1° (⁺¹EC⁝WS) 【1♂2⚬】: Pasierb.
1° (⁺¹EC⁝WD) 【1♂3⚬】: Pasierbica.
2° (⁺²EC₂⁝WSS) 【1♂4⚬】: wnuk żony, wnuk przybrany, syn pasierba.
2° (⁺²EC₂⁝WSD) 【1♂5⚬】: wnuczka żony, wnuczka przybrana, córka pasierba.
2° (⁺²EC₂⁝WDS) 【1♂6⚬】: wnuk żony, wnuk przybrany, syn pasierbicy.
2° (⁺²EC₂⁝WDD) 【1♂7⚬】: wnuczka żony, wnuczka przybrana, córka pasierbicy.
1° (⁺¹EC⁝HS) 【1♀2⚬】: Pasierb.
1° (⁺¹EC⁝HD) 【1♀3⚬】: Pasierbica.
2° (⁺²EC₂⁝HSS) 【1♀4⚬】: wnuk męża, wnuk przybrany, syn pasierba.
2° (⁺²EC₂⁝HSD) 【1♀5⚬】: wnuczka męża, wnuczka przybrana, córka pasierba.
2° (⁺²EC₂⁝HDS) 【1♀6⚬】: wnuk męża, wnuk przybrany, syn pasierbicy.
2° (⁺²EC₂⁝HDD) 【1♀7⚬】: wnuczka męża, wnuczka przybrana, córka pasierbicy.
Powinowaci: Krewni Boczni Partnerów Probanta.
【1♂】 & 【1♀】
2° (⁼⁰EG⁝WB) 【1♂2⚯】: szurzy (brat żony, szwagier).
2° (⁼⁰EG⁝WZ) 【1♂3⚯】: świeść (siostra żony, szwagierka).
3° (⁺¹EGC⁝WBS) 【1♂4⚯】: pociotek (brataniec żony).
3° (⁺¹EGC⁝WBD) 【1♂5⚯】: pociotka (bratanica żony).
3° (⁺¹EGC⁝WZS) 【1♂6⚯】: pociotek (siostrzeniec żony).
3° (⁺¹EGC⁝WZD) 【1♂7⚯】: pociotka (siostrzenica żony).
4° (⁺²EGC₂⁝WBSS) 【1♂8⚯】: prapociotek (wnuk brata żony).
4° (⁺²EGC₂⁝WBSD) 【1♂9⚯】: prapociotka (wnuczka brata żony).
4° (⁺²EGC₂⁝WBDS) 【1♂10⚯】: prapociotek (wnuk brata żony).
4° (⁺²EGC₂⁝WBDD) 【1♂11⚯】: prapociotka (wnuczka brata żony).
4° (⁺²EGC₂⁝WZSS) 【1♂12⚯】: prapociotek (wnuk siostry żony).
4° (⁺²EGC₂⁝WZSD) 【1♂13⚯】: prapociotka (wnuczka siostry żony).
4° (⁺²EGC₂⁝WZDS) 【1♂14⚯】: prapociotek (wnuk siostry żony).
4° (⁺²EGC₂⁝WZDD) 【1♂15⚯】: prapociotka (wnuczka siostry żony).
2° (⁼⁰EG⁝HB) 【1♀2⚯】: dziewierz (brat męża, szwagier).
2° (⁼⁰EG⁝HZ) 【1♀3⚯】: zełwa (siostra męża, szwagierka).
3° (⁺¹EGC⁝HBS) 【1♀4⚯】: pociotek (synowiec męża).
3° (⁺¹EGC⁝HBD) 【1♀5⚯】: pociotka (synowica męża).
3° (⁺¹EGC⁝HZS) 【1♀6⚯】: pociotek (siostrzeniec męża).
3° (⁺¹EGC⁝HZD) 【1♀7⚯】: pociotka (siostrzenica męża).
4° (⁺²EGC₂⁝HBSS) 【1♀8⚯】: prapociotek (wnuk brata męża).
4° (⁺²EGC₂⁝HBSD) 【1♀9⚯】: prapociotka (wnuczka brata męża).
4° (⁺²EGC₂⁝HBDS) 【1♀10⚯】: prapociotek (wnuk brata męża).
4° (⁺²EGC₂⁝HBDD) 【1♀11⚯】: prapociotka (wnuczka brata męża).
4° (⁺²EGC₂⁝HZSS) 【1♀12⚯】: prapociotek (wnuk siostry męża).
4° (⁺²EGC₂⁝HZSD) 【1♀13⚯】: prapociotka (wnuczka siostry męża).
4° (⁺²EGC₂⁝HZDS) 【1♀14⚯】: prapociotek (wnuk siostry męża).
4° (⁺²EGC₂⁝HZDD) 【1♀15⚯】: prapociotka (wnuczka siostry męża).
Prezentowany system, jest rozszerzeniem systemu Aitzing - Sosa - Galton - Kekulé. U podstaw tej XVI wiecznej metody leży matematyka, podobnie też w moim dodatku.
Metoda Sosa: probant niezależnie od płci przyjmuje wartość 1, następne numery: mężczyźni - parzyste, kobiety - nieparzyste, ojciec osoby P przyjmuje wartość P=P*2, a matka - wartość P=1+P*2, dziecko - wartość P=⌊P/2⌋, numer pokolenia to G=1+⌊log2(P)⌋, numer kolejny w pokoleniu: od lewej O.L=1+P-2^(G-1), od prawej O.R=2^(G)-P.
Moje rozszerzenie wprowadza jawny numer linii przodków: ojczystych i macierzystych, oparty o numer Sosa osoby, wartość po pauzie to kolejność przodków z danej linii. Linie posiadają unikatowy numer, linie męskie - parzysty, a linie żeńskie - nieparzysty. [dla przejrzystości przyjmijmy że ($(x)$) oznacza zamianę systemu dziesiętnego na binarny; (‡(x)‡) oznacza odcięcie końcowych zer w liczbie binarnej, następnie konwertowanej na dziesiętną; (†(x)†) oznacza zliczenie końcowych zer w liczbie binarnej; dodatkowo wartość-R to odwrócona wartość-P, w taki sposób że: R=(2^(1+⌊log2(P)⌋)-1)-(P-2^⌊log2(P)⌋)].
Numer linii męskiej: y.a = 1+(‡($( P )$)‡);
Kolejność w linii męskiej: y.b = jeżeli O.L wynosi 1 to G, jeżeli nie to 1+(†($( P-2^⌊log2(P)⌋ )$)†);
Numer linii żeńskiej: x.a = 2+(‡($( R )$)‡);
Kolejność w linii żeńskiej: x.b = jeżeli O.R wynosi 1 to G, jeżeli nie to 1+(†($( 2^(1+⌊log2(P)⌋)-P-1 )$)†);
TypeScript:📜Skrypt przeliczający nr-Sosa 📖👁️🗨️
W celu zapewnienia lepszej czytelności należy zaznaczyć kod i skopiować do swojego edytora tekstu.
enum TypeGender {
MaleOrFemale = "⚥",
Male = "♂",
Female = "♀",
MaleAndFemale = "⚤"
}
interface TypeDecBin {
Dec:number;
Bin:string;
};
interface TypeNorRev {
Nor:TypeDecBin;
Rev:TypeDecBin;
};
interface TypeSexNorRev extends TypeNorRev{
Sex:TypeGender;
};
interface TypePersonId {
Sosa:{
Ego:TypeSexNorRev;
Dad:TypeSexNorRev;
Mom:TypeSexNorRev;
Kid:TypeSexNorRev;
};
Gene:{
Tier:TypeDecBin;
Sosa:{
Min:TypeDecBin;
Max:TypeDecBin;
};
Sort:[TypeNorRev,TypeNorRev];
};
Line:{
Dad:{
Gene:TypeDecBin;
Tier:TypeDecBin;
Name:TypeDecBin;
Sort:TypeDecBin;
};
Mom:{
Gene:TypeDecBin;
Tier:TypeDecBin;
Name:TypeDecBin;
Sort:TypeDecBin;
};
};
}
function createIdInfoForPerson(sosa:number):TypePersonId{
const SosaEgoGender = sosa<2 ? TypeGender.MaleOrFemale : (sosa)%2==0 ? TypeGender.Male : TypeGender.Female;
const SosaEgoNormal = Base2AndBase10(sosa);
const GeneTier = Base2AndBase10(Math.floor(Math.log2(sosa))+1);
const GeneSosaMin = Base2AndBase10(Math.pow(2,Math.floor(Math.log2(sosa))));
const GeneSosaMax = Base2AndBase10(Math.pow(2,Math.floor(Math.log2(sosa))+1)-1);
const SortNormal1 = Base2AndBase10(sosa+1-GeneSosaMin.Dec);
const SortNormal0 = Base2AndBase10(SortNormal1.Dec-1);
const SortRevers1 = Base2AndBase10(GeneSosaMax.Dec+1-sosa);
const SortRevers0 = Base2AndBase10(SortRevers1.Dec-1);
const SosaEgoRevers = Base2AndBase10(GeneSosaMax.Dec-SortNormal0.Dec);
const LineDadSort = Base2AndBase10(SortNormal1.Dec==1?GeneTier.Dec:Base2EndZerosCount(SortNormal0.Bin)+1);
const LineMomSort = Base2AndBase10(SortRevers1.Dec==1?GeneTier.Dec:Base2EndZerosCount(SortRevers0.Bin)+1);
const LineDadTier = Base2AndBase10(Base2EndZerosClear(SosaEgoNormal.Bin));
const LineMomTier = Base2AndBase10(Base2EndZerosClear(SosaEgoRevers.Bin));
const LineDadName = Base2AndBase10(LineDadTier.Dec+1);
const LineMomName = Base2AndBase10(LineMomTier.Dec+2);
const LineDadGene = Base2AndBase10(LineDadTier.Bin.length);
const LineMomGene = Base2AndBase10(LineMomTier.Bin.length);
const SosaDadGender = TypeGender.Male;
const SosaDadNormal = Base2AndBase10(SosaEgoNormal.Dec*2);
const SosaDadRevers = Base2AndBase10(SosaEgoRevers.Dec*2+1);
const SosaMomGender = TypeGender.Female;
const SosaMomNormal = Base2AndBase10(SosaEgoNormal.Dec*2+1);
const SosaMomRevers = Base2AndBase10(SosaEgoRevers.Dec*2);
const SosaKidGender = Math.floor(sosa/2)<2 ? TypeGender.MaleOrFemale : Math.floor(sosa/2)%2==0 ? TypeGender.Male : TypeGender.Female;
const SosaKidNormal = Base2AndBase10(Math.floor(SosaEgoNormal.Dec/2));
const SosaKidRevers = Base2AndBase10(Math.floor(SosaEgoRevers.Dec/2));
function Base2AndBase10(a:number):TypeDecBin {
return { Dec: a, Bin: Number(a).toString(2) };
}
function Base2EndZerosCount(a:string):number{
let r = 0;
let t = true;
const e = Array.from(a);
let l = e.length;
while (l>0 && t) {
if (e[l-1]=="0") {
r++
} else {
t = false;
}
l--;
}
return r;
}
function Base2EndZerosClear(a:string):number{
const c = a.replace(/[0]+$/,"");
const r = parseInt(c,2);
return r;
}
return {
Sosa:{
Ego:{Sex: SosaEgoGender, Nor: SosaEgoNormal, Rev: SosaEgoRevers},
Dad:{Sex: SosaDadGender, Nor: SosaDadNormal, Rev: SosaDadRevers},
Mom:{Sex: SosaMomGender, Nor: SosaMomNormal, Rev: SosaMomRevers},
Kid:{Sex: SosaKidGender, Nor: SosaKidNormal, Rev: SosaKidRevers}
},
Gene:{
Tier:GeneTier,
Sosa:{
Min:GeneSosaMin,
Max:GeneSosaMax
},
Sort:[{Nor:SortNormal0,Rev:SortRevers0},{Nor:SortNormal1,Rev:SortRevers1}]
},
Line:{
Dad:{
Gene:LineDadGene,
Tier:LineDadTier,
Name:LineDadName,
Sort:LineDadSort
},
Mom:{
Gene:LineMomGene,
Tier:LineMomTier,
Name:LineMomName,
Sort:LineMomSort
}
}
};
}
class SosaPlusDb{
IdDb:Map<number,TypePersonId> = new Map;
constructor(){}
setFromGivenSosa(sosa:number){
if(Number.isInteger(sosa) && sosa>0){
this.IdDb.set(sosa,createIdInfoForPerson(sosa));
}
}
setFromArraySosa(sosaArr:number[]){
for (const sosa of sosaArr) {
if(Number.isInteger(sosa) && sosa>0){
this.IdDb.set(sosa,createIdInfoForPerson(sosa));
}
}
}
setFromRangeSosa(sosaFirst:number,sosaLast:number){
for (let sosa = sosaFirst; sosa < sosaLast+1; sosa++) {
if(Number.isInteger(sosa) && sosa>0){
this.IdDb.set(sosa,createIdInfoForPerson(sosa));
}
}
}
get getData():Map<number,TypePersonId>{
return this.IdDb;
}
getOutFullAsJson():void{
const iterator = this.IdDb[Symbol.iterator]();
let Arr: TypePersonId[] = [];
for (const x of iterator) {
Arr.push(x[1]);
}
let Str = JSON.stringify(Arr);
console.log(Str);
}
getOutFullAsCsv():void{
const Col = ():string=>{
return `"Gene.Tier.Dec", "Gene.Tier.Bin", `
+`"Gene.Sosa.Min.Dec", "Gene.Sosa.Min.Bin", "Gene.Sosa.Max.Dec", "Gene.Sosa.Max.Bin", `
+`"Gene.Sort.0.Nor.Dec", "Gene.Sort.0.Nor.Bin", "Gene.Sort.0.Rev.Dec", "Gene.Sort.0.Rev.Bin", `
+`"Gene.Sort.1.Nor.Dec", "Gene.Sort.1.Nor.Bin", "Gene.Sort.1.Rev.Dec", "Gene.Sort.1.Rev.Bin", `
+`"Sosa.Ego.Sex", "Sosa.Ego.Nor.Dec", "Sosa.Ego.Nor.Bin", "Sosa.Ego.Rev.Dec", "Sosa.Ego.Rev.Bin", `
+`"Sosa.Dad.Sex", "Sosa.Dad.Nor.Dec", "Sosa.Dad.Nor.Bin", "Sosa.Dad.Rev.Dec", "Sosa.Dad.Rev.Bin", `
+`"Sosa.Mom.Sex", "Sosa.Mom.Nor.Dec", "Sosa.Mom.Nor.Bin", "Sosa.Mom.Rev.Dec", "Sosa.Mom.Rev.Bin", `
+`"Sosa.Kid.Sex", "Sosa.Kid.Nor.Dec", "Sosa.Kid.Nor.Bin", "Sosa.Kid.Rev.Dec", "Sosa.Kid.Rev.Bin", `
+`"Line.Dad.Gene.Dec", "Line.Dad.Gene.Bin", "Line.Dad.Tier.Dec", "Line.Dad.Tier.Bin", `
+`"Line.Dad.Name.Dec", "Line.Dad.Name.Bin", "Line.Dad.Sort.Dec", "Line.Dad.Sort.Bin", `
+`"Line.Mom.Gene.Dec", "Line.Mom.Gene.Bin", "Line.Mom.Tier.Dec", "Line.Mom.Tier.Bin", `
+`"Line.Mom.Name.Dec", "Line.Mom.Name.Bin", "Line.Mom.Sort.Dec", "Line.Mom.Sort.Bin" `
+"\n";
};
const Row = (x:TypePersonId):string =>{
return `"${x.Gene.Tier.Dec}", "${x.Gene.Tier.Bin}", `
+`"${x.Gene.Sosa.Min.Dec}", "${x.Gene.Sosa.Min.Bin}", "${x.Gene.Sosa.Max.Dec}", "${x.Gene.Sosa.Max.Bin}", `
+`"${x.Gene.Sort[0].Nor.Dec}", "${x.Gene.Sort[0].Nor.Bin}", "${x.Gene.Sort[0].Rev.Dec}", "${x.Gene.Sort[0].Rev.Bin}", `
+`"${x.Gene.Sort[1].Nor.Dec}", "${x.Gene.Sort[1].Nor.Bin}", "${x.Gene.Sort[1].Rev.Dec}", "${x.Gene.Sort[1].Rev.Bin}", `
+`"${x.Sosa.Ego.Sex}", "${x.Sosa.Ego.Nor.Dec}", "${x.Sosa.Ego.Nor.Bin}", "${x.Sosa.Ego.Rev.Dec}", "${x.Sosa.Ego.Rev.Bin}", `
+`"${x.Sosa.Dad.Sex}", "${x.Sosa.Dad.Nor.Dec}", "${x.Sosa.Dad.Nor.Bin}", "${x.Sosa.Dad.Rev.Dec}", "${x.Sosa.Dad.Rev.Bin}", `
+`"${x.Sosa.Mom.Sex}", "${x.Sosa.Mom.Nor.Dec}", "${x.Sosa.Mom.Nor.Bin}", "${x.Sosa.Mom.Rev.Dec}", "${x.Sosa.Mom.Rev.Bin}", `
+`"${x.Sosa.Kid.Sex}", "${x.Sosa.Kid.Nor.Dec}", "${x.Sosa.Kid.Nor.Bin}", "${x.Sosa.Kid.Rev.Dec}", "${x.Sosa.Kid.Rev.Bin}", `
+`"${x.Line.Dad.Gene.Dec}", "${x.Line.Dad.Gene.Bin}", "${x.Line.Dad.Tier.Dec}", "${x.Line.Dad.Tier.Bin}", `
+`"${x.Line.Dad.Name.Dec}", "${x.Line.Dad.Name.Bin}", "${x.Line.Dad.Sort.Dec}", "${x.Line.Dad.Sort.Bin}", `
+`"${x.Line.Mom.Gene.Dec}", "${x.Line.Mom.Gene.Bin}", "${x.Line.Mom.Tier.Dec}", "${x.Line.Mom.Tier.Bin}", `
+`"${x.Line.Mom.Name.Dec}", "${x.Line.Mom.Name.Bin}", "${x.Line.Mom.Sort.Dec}", "${x.Line.Mom.Sort.Bin}" `
+"\n";
}
let CSV:string = Col();
const iterator = this.IdDb[Symbol.iterator]();
for (const x of iterator) {
CSV += Row(x[1]);
}
console.log(CSV);
}
getOutTiny():void{
const iterator = this.IdDb[Symbol.iterator]();
console.log(" ");
console.log(" ╔"+"═".repeat(31)+"╗");
console.log(" ║ INFO WITH FORMAT TINY ║");
console.log("╔═════════╦════╩═══╦═══════════╦═══════════╦═══╩══════╦══════════╦══════════╗");
console.log("║ SEX+GEN ║ SOSA ║ LINE-Y ║ LINE-X ║ SOSA-DAD ║ SOSA-MOM ║ SOSA-KID ║");
for (const x of iterator) {
console.log( `║ ${x[1].Sosa.Ego.Sex} ${x[1].Gene.Tier.Dec} `.padEnd(10," ")
+`║ ${x[1].Sosa.Ego.Nor.Dec} `.padEnd(9," ")
+`║ ${x[1].Line.Dad.Name.Dec} — ${x[1].Line.Dad.Sort.Dec} `.padEnd(12," ")
+`║ ${x[1].Line.Mom.Name.Dec} — ${x[1].Line.Mom.Sort.Dec} `.padEnd(12," ")
+`║ ${x[1].Sosa.Dad.Nor.Dec} `.padEnd(11," ")
+`║ ${x[1].Sosa.Mom.Nor.Dec} `.padEnd(11," ")
+`║ ${x[1].Sosa.Kid.Nor.Dec} `.padEnd(11," ")+"║");
}
console.log("╚"+"═".repeat(9)+"╩"+"═".repeat(8)+"╩"+"═".repeat(11)+"╩"+"═".repeat(11)+"╩" +"═".repeat(10)+"╩"+"═".repeat(10)+"╩"+"═".repeat(10)+"╝");
}
}
// ======example usage =====
const AAA = new SosaPlusDb();
AAA.setFromGivenSosa(44);
AAA.setFromArraySosa([153,1324,9848]);
AAA.setFromArraySosa([153,1324,15432]);
AAA.setFromRangeSosa(1,32);
AAA.getOutTiny();
AAA.getOutFullAsCsv();
AAA.getOutFullAsJson();
// ======example usage =====
Rust:📜Skrypt przeliczający nr-Sosa 📖👁️🗨️
W celu zapewnienia lepszej czytelności należy zaznaczyć kod i skopiować do swojego edytora tekstu.
use std::collections::HashMap;
use std::fmt;
#[derive(Debug)]
struct TypeMain {
sosa: TypeSosa,
gene: TypeGene,
line: TypeLine,
}
#[derive(Debug)]
struct TypeSosa {
ego: TypeSexNorRev,
dad: TypeSexNorRev,
mom: TypeSexNorRev,
kid: TypeSexNorRev,
}
#[derive(Debug)]
struct TypeGene {
tier: TypeDecBin,
sosa: TypeMinMax,
sort: [TypeNorRev; 2],
}
#[derive(Debug)]
struct TypeLine {
dad: TypeLineInner,
mom: TypeLineInner,
}
#[derive(Debug)]
struct TypeLineInner {
gene: TypeDecBin,
tier: TypeDecBin,
name: TypeDecBin,
sort: TypeDecBin,
}
#[derive(Debug)]
struct TypeSexNorRev {
sex: String,
nor: TypeDecBin,
rev: TypeDecBin,
}
#[derive(Debug)]
struct TypeNorRev {
nor: TypeDecBin,
rev: TypeDecBin,
}
#[derive(Debug)]
struct TypeDecBin {
dec: u32,
bin: String,
}
#[derive(Debug)]
struct TypeMinMax {
min: TypeDecBin,
max: TypeDecBin,
}
#[derive(Debug)]
enum TypeGender {
MaleOrFemale,
Male,
Female,
MaleAndFemale,
}
fn create_id_info_for_person(sosa: u32) -> TypeMain {
let sosa_ego_gender = if sosa < 2 { TypeGender::MaleOrFemale } else if sosa % 2 == 0 { TypeGender::Male } else { TypeGender::Female };
let sosa_ego_normal = base2_and_base10(sosa);
let gene_tier = base2_and_base10((sosa as f64).log2().floor() as u32 + 1);
let gene_sosa_min = base2_and_base10((2_u32.pow((sosa as f64).log2().floor() as u32)) as u32);
let gene_sosa_max = base2_and_base10((2_u32.pow((sosa as f64).log2().floor() as u32 + 1) - 1) as u32);
let sort_normal_1 = base2_and_base10(sosa + 1 - gene_sosa_min.dec);
let sort_normal_0 = base2_and_base10(sort_normal_1.dec - 1);
let sort_revers_1 = base2_and_base10(gene_sosa_max.dec + 1 - sosa);
let sort_revers_0 = base2_and_base10(sort_revers_1.dec - 1);
let sosa_ego_revers = base2_and_base10(gene_sosa_max.dec - sort_normal_0.dec);
let line_dad_sort = base2_and_base10(if sort_normal_1.dec == 1 { gene_tier.dec } else { base2_end_zeros_count(&sort_normal_0.bin) + 1 });
let line_mom_sort = base2_and_base10(if sort_revers_1.dec == 1 { gene_tier.dec } else { base2_end_zeros_count(&sort_revers_0.bin) + 1 });
let line_dad_tier = base2_and_base10(base2_end_zeros_clear(&sosa_ego_normal.bin));
let line_mom_tier = base2_and_base10(base2_end_zeros_clear(&sosa_ego_revers.bin));
let line_dad_name = base2_and_base10(line_dad_tier.dec + 1);
let line_mom_name = base2_and_base10(line_mom_tier.dec + 2);
let line_dad_gene = base2_and_base10(line_dad_tier.bin.len() as u32);
let line_mom_gene = base2_and_base10(line_mom_tier.bin.len() as u32);
let sosa_dad_gender = TypeGender::Male;
let sosa_dad_normal = base2_and_base10(sosa_ego_normal.dec * 2);
let sosa_dad_revers = base2_and_base10(sosa_ego_revers.dec * 2 + 1);
let sosa_mom_gender = TypeGender::Female;
let sosa_mom_normal = base2_and_base10(sosa_ego_normal.dec * 2 + 1);
let sosa_mom_revers = base2_and_base10(sosa_ego_revers.dec * 2);
let sosa_kid_gender = if sosa / 2 < 2 { TypeGender::MaleOrFemale } else if sosa / 2 % 2 == 0 { TypeGender::Male } else { TypeGender::Female };
let sosa_kid_normal = base2_and_base10((sosa_ego_normal.dec / 2) as u32);
let sosa_kid_revers = base2_and_base10((sosa_ego_revers.dec / 2) as u32);
fn base2_and_base10(a: u32) -> TypeDecBin {
TypeDecBin {
dec: a,
bin: format!("{:b}", a),
}
}
fn base2_end_zeros_count(a: &str) -> u32 {
let mut r = 0;
let mut t = true;
let e: Vec<char> = a.chars().collect();
let mut l = e.len();
while l > 0 && t {
if e[l - 1] == '0' {
r += 1;
} else {
t = false;
}
l -= 1;
}
r
}
fn base2_end_zeros_clear(a: &str) -> u32 {
let c = a.trim_end_matches('0');
let r = u32::from_str_radix(c, 2).unwrap();
r
}
fn sex_char(x: TypeGender) -> String{
match x{
TypeGender::MaleOrFemale => String::from("⚥"),
TypeGender::Male => String::from("♂"),
TypeGender::Female => String::from("♀"),
TypeGender::MaleAndFemale => String::from("⚤")
}
}
TypeMain {
sosa: TypeSosa {
ego: TypeSexNorRev {
sex: sex_char(sosa_ego_gender),
nor: sosa_ego_normal,
rev: sosa_ego_revers,
},
dad: TypeSexNorRev {
sex: sex_char(sosa_dad_gender),
nor: sosa_dad_normal,
rev: sosa_dad_revers,
},
mom: TypeSexNorRev {
sex: sex_char(sosa_mom_gender),
nor: sosa_mom_normal,
rev: sosa_mom_revers,
},
kid: TypeSexNorRev {
sex: sex_char(sosa_kid_gender),
nor: sosa_kid_normal,
rev: sosa_kid_revers,
},
},
gene: TypeGene {
tier: gene_tier,
sosa: TypeMinMax {
min: gene_sosa_min,
max: gene_sosa_max,
},
sort: [
TypeNorRev {
nor: sort_normal_0,
rev: sort_revers_0,
},
TypeNorRev {
nor: sort_normal_1,
rev: sort_revers_1,
},
],
},
line: TypeLine {
dad: TypeLineInner {
gene: line_dad_gene,
tier: line_dad_tier,
name: line_dad_name,
sort: line_dad_sort,
},
mom: TypeLineInner {
gene: line_mom_gene,
tier: line_mom_tier,
name: line_mom_name,
sort: line_mom_sort,
},
},
}
}
struct SosaPlusDb {
id_db: HashMap<u32, TypeMain>,
}
impl SosaPlusDb {
fn new() -> Self {
SosaPlusDb {
id_db: HashMap::new(),
}
}
fn set_from_given_sosa(&mut self, sosa: u32) {
if sosa > 0 {
self.id_db.insert(sosa, create_id_info_for_person(sosa));
}
}
fn set_from_array_sosa(&mut self, sosa_arr: &[u32]) {
for &sosa in sosa_arr {
if sosa > 0 {
self.id_db.insert(sosa, create_id_info_for_person(sosa));
}
}
}
fn set_from_range_sosa(&mut self, sosa_first: u32, sosa_last: u32) {
for sosa in sosa_first..=sosa_last {
if sosa > 0 {
self.id_db.insert(sosa, create_id_info_for_person(sosa));
}
}
}
fn get_data(&self) -> &HashMap<u32, TypeMain> {
&self.id_db
}
fn get_out_full_as_csv(&self) {
let mut csv = String::new();
csv.push_str(
"\"Gene.Tier.Dec\", \"Gene.Tier.Bin\", \"Gene.Sosa.Min.Dec\", \"Gene.Sosa.Min.Bin\", \"Gene.Sosa.Max.Dec\", \"Gene.Sosa.Max.Bin\", \"Gene.Sort.0.Nor.Dec\", \"Gene.Sort.0.Nor.Bin\", \"Gene.Sort.0.Rev.Dec\", \"Gene.Sort.0.Rev.Bin\", \"Gene.Sort.1.Nor.Dec\", \"Gene.Sort.1.Nor.Bin\", \"Gene.Sort.1.Rev.Dec\", \"Gene.Sort.1.Rev.Bin\", \"Sosa.Ego.Sex\", \"Sosa.Ego.Nor.Dec\", \"Sosa.Ego.Nor.Bin\", \"Sosa.Ego.Rev.Dec\", \"Sosa.Ego.Rev.Bin\", \"Sosa.Dad.Sex\", \"Sosa.Dad.Nor.Dec\", \"Sosa.Dad.Nor.Bin\", \"Sosa.Dad.Rev.Dec\", \"Sosa.Dad.Rev.Bin\", \"Sosa.Mom.Sex\", \"Sosa.Mom.Nor.Dec\", \"Sosa.Mom.Nor.Bin\", \"Sosa.Mom.Rev.Dec\", \"Sosa.Mom.Rev.Bin\", \"Sosa.Kid.Sex\", \"Sosa.Kid.Nor.Dec\", \"Sosa.Kid.Nor.Bin\", \"Sosa.Kid.Rev.Dec\", \"Sosa.Kid.Rev.Bin\", \"Line.Dad.Gene.Dec\", \"Line.Dad.Gene.Bin\", \"Line.Dad.Tier.Dec\", \"Line.Dad.Tier.Bin\", \"Line.Dad.Name.Dec\", \"Line.Dad.Name.Bin\", \"Line.Dad.Sort.Dec\", \"Line.Dad.Sort.Bin\", \"Line.Mom.Gene.Dec\", \"Line.Mom.Gene.Bin\", \"Line.Mom.Tier.Dec\", \"Line.Mom.Tier.Bin\", \"Line.Mom.Name.Dec\", \"Line.Mom.Name.Bin\", \"Line.Mom.Sort.Dec\", \"Line.Mom.Sort.Bin\"\n",
);
for (_, person) in &self.id_db {
csv.push_str(&format!(
"\"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\", \"{}\"\n",
person.gene.tier.dec, person.gene.tier.bin, person.gene.sosa.min.dec, person.gene.sosa.min.bin, person.gene.sosa.max.dec, person.gene.sosa.max.bin, person.gene.sort[0].nor.dec, person.gene.sort[0].nor.bin, person.gene.sort[0].rev.dec, person.gene.sort[0].rev.bin, person.gene.sort[1].nor.dec, person.gene.sort[1].nor.bin, person.gene.sort[1].rev.dec, person.gene.sort[1].rev.bin, person.sosa.ego.sex, person.sosa.ego.nor.dec, person.sosa.ego.nor.bin, person.sosa.ego.rev.dec, person.sosa.ego.rev.bin, person.sosa.dad.sex, person.sosa.dad.nor.dec, person.sosa.dad.nor.bin, person.sosa.dad.rev.dec, person.sosa.dad.rev.bin, person.sosa.mom.sex, person.sosa.mom.nor.dec, person.sosa.mom.nor.bin, person.sosa.mom.rev.dec, person.sosa.mom.rev.bin, person.sosa.kid.sex, person.sosa.kid.nor.dec, person.sosa.kid.nor.bin, person.sosa.kid.rev.dec, person.sosa.kid.rev.bin, person.line.dad.gene.dec, person.line.dad.gene.bin, person.line.dad.tier.dec, person.line.dad.tier.bin, person.line.dad.name.dec, person.line.dad.name.bin, person.line.dad.sort.dec, person.line.dad.sort.bin, person.line.mom.gene.dec, person.line.mom.gene.bin, person.line.mom.tier.dec, person.line.mom.tier.bin, person.line.mom.name.dec, person.line.mom.name.bin, person.line.mom.sort.dec, person.line.mom.sort.bin,
));
}
println!("{}", csv);
}
fn get_out_tiny(&self) {
println!(" ");
println!(" ╔{}╗ ", "═".repeat(34));
println!(" ║ INFO WITH FORMAT TINY ║");
println!("╔══════════╦═══╩═══╦════════════╦════════════╦════╩══════╦═══════════╦═══════════╗");
println!("║ SEX+GEN ║ SOSA ║ LINE-Y ║ LINE-X ║ SOSA-DAD ║ SOSA-MOM ║ SOSA-KID ║");
for (key, value) in &self.id_db {
println!("║ {} {} ║ {} ║ {} — {} ║ {} — {} ║ {} ║ {} ║ {} ║", value.sosa.ego.sex, format!("{:<3}", value.gene.tier.dec), format!("{:<4}", value.sosa.ego.nor.dec), format!("{:<4}", value.line.dad.name.dec), format!("{:<2}", value.line.dad.sort.dec), format!("{:<4}", value.line.mom.name.dec), format!("{:<2}", value.line.mom.sort.dec), format!("{:<4}", value.sosa.dad.nor.dec), format!("{:<4}", value.sosa.mom.nor.dec), format!("{:<4}", value.sosa.kid.nor.dec));
}
println!("╚{}╩{}╩{}╩{}╩{}╩{}╩{}╝", "═".repeat(10), "═".repeat(7), "═".repeat(12), "═".repeat(12), "═".repeat(11), "═".repeat(11), "═".repeat(11));
}
}
// ======example usage =====
fn main() {
let mut aaa = SosaPlusDb::new();
aaa.set_from_given_sosa(44);
aaa.set_from_array_sosa(&[1, 4, 7]);
aaa.set_from_range_sosa(23, 26);
aaa.get_out_full_as_csv();
aaa.get_out_tiny();
}
// ======example usage =====
Krótka historia metody Aitzing - Sosa - Galton - Kekulé - Stradonitz - Ahnentafela 📖👁️🗨️
System swą popularność zawdzięcza czterem osobą:
-> 1590 <- Dolnoaustriacki szlachcic, katolik, uczony, pisarz, pionier genealogii i gazeciarstwa. Michael Freiherr von Aitzing / Eytzing (ur. ok. 1530 r. na Zamku-Schrattenthal [48°42'52"N 15°54'21"E] zm. w 1598 w Bonn [50°44'N 7°06'E]) około 1550r. studiował prawo w Leuven w Belgii, interesował się kartografią, matematyką, historią i językami. [ISBN 978-3-902684-35-6, S.50] W 1553 r. opublikował swoje pierwsze dzieło, podręcznik retoryki "Artis oratiae tabulae". Dużo podróżował i biegle władał kilkoma starożytnymi i nowożytnymi językami, takimi jak greka, łacina, hebrajski, hiszpański, włoski i flamandzki. [ISBN 3-7616-0858-6, S.481] Po ukończeniu studiów von Aitzing powrócił do Wiednia, cesarz Ferdynand I mianował go "nadwornym sługą", a także służył swoim następcom Maksymilianowi II i Rudolfowi II jako radca i szambelan do 1576 roku. W 1563 roku von Aitzing będący żonaty z Fuggerówną (szwabska rodzina tkacko-kupiecka z Augsburgu), uczestniczył w Soborze Trydenckim w imieniu cesarza i sejmu augsburskiego w 1566 roku. W 1568 roku był naocznym świadkiem egzekucji Lamorala z Egmond w Brukseli, gdzie prawdopodobnie przebywał jako "tajny zwiadowca" austriackiego dworu ["Allgemeine Deutsche Biographie" Band 5, Duncker & Humblot, Leipzig 1877, S.777], następnie sam został tam uwięziony, prawdopodobnie z powodów politycznych. Po uwolnieniu osiadł w Kolonii jako pisarz w 1581 roku. Von Aitzing narysował mapę Ziemi Świętej, która została wyryta w miedzi przez Fransa Hogenberga w 1582 roku. Stał się znany ze swojego dzieła "Leo Belgicus", napisanego po łacinie, które po raz pierwszy zostało opublikowane w 1583 roku. W 1590 roku Michael von Aitzing opublikował w Kolonii swoje dzieło "Thesaurus principum hac aetate in Europa viventium, quo progenitores eorum tam paterni quam materni simul ac fratres et sorores inde ab origine reconduntur, usque ad annum a Christo nato" w 1590 roku, w którym po raz pierwszy wydrukowano rodowody ponumerowane według owegoż systemu później zwanego system Sosa-Stradonitza. Mimo sukcesów dziennikarskich von Aitzing żył w Kolonii w wielkiej biedzie. W końcu przyjął zaproszenie elektora i arcybiskupa Bawarii Ernsta do Bonn, gdzie zmarł jako jego historiograf w 1598 roku.
-> 1676 <- Hiszpański franciszkanin, profesor teologii w królewskim klasztorze Santa Maria la Nova w Neapolu, słynny genealog. Jerónimo de Sosa (ur. XVII w, zm. w 1711r.) W 1676 roku w swoim dziele genealogicznym "Noticia de la Gran Casa de los marqueses de Villafranca." zastosował metodę numeracji przodków, którą po raz pierwszy zastosował austriacki szlachcic Michael Freiherr von Aitzing.
-> 1883 <- Brytyjski erudyta, eugenik, twórca ruchu eugenicznego w epoce wiktoriańskiej, antropolog, geograf, odkrywca, wynalazca, meteorolog, statystyk, psycholog, statystyk, genealog półbrat cioteczny Karola Darwina. Sir Francis Galton (ur. w 1822 w Sparbrook, Birmingham, zm. w 1911 w Haslemere, Surrey). Galton napisał ponad 340 artykułów i książek. Stworzył bardzo promowaną statystyczną koncepcję korelacji i regresji do średniej. Jako pierwszy zastosował metody statystyczne do badania różnic między ludźmi i dziedziczenia inteligencji, wprowadził wykorzystanie kwestionariuszy i ankiet do zbierania danych o społecznościach ludzkich, które były mu potrzebne do pracy genealogicznej i biograficznej oraz do badań antropometrycznych. Był pionierem eugeniki, sam ukuł ten termin. Jego książka "Hereditary Genius" (1869) była pierwszą społeczną naukową próbą zbadania dziedziczenia geniuszu. Jako badacz ludzkiego umysłu stworzył psychometrię (naukę o pomiarze zdolności umysłowych), psychologię różnicową i leksykalną hipotezę osobowości. Opracował metodę klasyfikacji odcisków palców, która okazała się przydatna w kryminalistyce. Jako inicjator nauk meteorologicznych opracował pierwszą mapę pogody, zaproponował teorię antycyklonów i jako pierwszy ustanowił kompletny zapis krótkoterminowych zjawisk klimatycznych w skali europejskiej. Nie piastował profesury uniwersyteckiej, a większość badań prowadził samodzielnie. Jego liczne zasługi zostały formalnie uznane, gdy w wieku 87 lat otrzymał tytuł Sir lub Rycerza Królestwa. Galton wymyślił termin eugenika (sztuczna selekcja w celu ulepszenia rasy ludzkiej) w 1883 roku i pozostawił wiele swoich obserwacji i wniosków także tych genealogicznych w książce "Inquiry into Human Faculty and Its Development".
-> 1898 <- Z pochodzenia czeski szlachcic później od 1895 niemiecki szlachcic nobilitowany przez cesarza Wilhelma II ("von Stradonitz" odnosi się do miejsca pochodzenia patrylinearnych przodków z Stradonic koło Kładna), niemiecki prawnik, prywatny uczony, heraldyk i genealog, popularyzator genealogicznego systemu numeracji przodków, Stephan von Stradonitz (ur. w 1863 w Gandawie, zm. w 1833 w Berlinie). W 1898 roku Kekulé von Stradonitz opublikował swoją interpretację metody Eytzingera / Aitzingera, Sosy i Galtona w swoim dziele "Ahnentafel-Atlas. Ahnentafeln zu 32 Ahnen der Regenten Europas und ihrer Gemahlinnen", Berlin: J. A. Stargardt, 1898–1904, zawierający 79 plansz genealogicznych władców Europy wraz z ich żonami. Metoda ta stała się najpowszechniejszą metodą numeracji przodków i jest znana jako metoda Sosa-Stradonitz lub Ahnentafel.
Numeracja ta jest też używana w informatyce do efektywnego adresowania węzłów drzewa binarnego w tablicy. Ta struktura danych jest używana na przykład do implementacji sterty, która jest podstawą procedury sortowania sterty. Jednak w przeciwieństwie do genealogii, w drzewie binarnym węzły nadrzędne są określane jako węzeł podrzędny, a węzły podrzędne są określane jako węzły nadrzędne.
📚 Szczegółowe omówienie metody (📜skryptu) 📖
Powyższa tabela przedstawia zestawienie implikacji numeru Sosa, dla początkowych 32 osób oraz paru odleglejszych.
Płeć (Sosa.Ego.Sex) otrzymujemy po uzyskaniu reszty z dzielenia numeru osoby (Sosa.Ego.Nor.Dec) przez 2, i tak wartość 0 oznacza mężczyznę, a wartość 1 oznacza kobietę, nie dotyczy to tylko osoby o numerze-Sosa wynoszącym 1.
Pokolenie (Gene.Tier.Dec) otrzymujemy po zlogarytmowaniu z podstawą 2 numeru osoby (Sosa.Ego.Nor.Dec), zaokrąglonego w dół do liczby całkowitej i dodaniu jedynki.
Numer Ojca (Sosa.Dad.Nor.Dec) to podwojony numer osoby, a Numer Matki (Sosa.Mom.Nor.Dec) to numer Ojca plus 1, numer Dziecka (Sosa.Kid.Nor.Dec) to numer osoby podzielony przez dwa i zaokrąglony w dół do liczby całkowitej.
Minimalny numer Sosa w obrębie pokolenia, jak i sumę osób w pokoleniu (Gene.Sosa.Min.Dec) otrzymujemy po podniesieniu 2 do potęgi wartości numeru pokolenia (Gene.Tier.Dec) pomniejszonej o 1.
Maksymalny numer Sosa w obrębie pokolenia, jak i sumę osób od 1 do obecnego pokolenia (Gene.Sosa.Max.Dec) otrzymujemy po pomniejszeniu o 1 wartości po podniesieniu 2 do potęgi wartości numeru pokolenia (Gene.Tier.Dec).
Kolejność w pokoleniu od lewej (Gene.Sort[1].Nor.Dec) otrzymujemy po odjęciu od numeru osoby (Sosa.Ego.Nor.Dec) powiększonego o 1, minimalnego numer Sosa w obrębie pokolenia (Gene.Sosa.Min.Dec).
Kolejność w pokoleniu od prawej (Gene.Sort[1].Rev.Dec) otrzymujemy po odjęciu od numeru (Gene.Sosa.Max.Dec) powiększonego o 1, numeru Sosa osoby (Gene.Sosa.Min.Dec).
.. numery (Gene.Sort[1]...) są o 1 większe od numerów (Gene.Sort[0]...).
Numer osoby odwrotny (Sosa.Ego.Rev.Dec) otrzymujemy po odjęciu numeru (Gene.Sort[0].Nor.Dec) od maksymalnego numeru Sosa w obrębie pokolenia (Gene.Sosa.Max.Dec).
.. numer (Line.Dad.Tier.Dec) otrzymujemy po przekształceniu (Sosa.Ego.Nor.Dec) na wartość w systemie dwójkowym (Sosa.Ego.Nor.Bin) następnie odcięciu końcowych zer, ponownej konwersji na system dziesiętny.
.. numer (Line.Mom.Tier.Dec) otrzymujemy po przekształceniu (Sosa.Ego.Rev.Dec) na wartość w systemie dwójkowym (Sosa.Ego.Rev.Bin) następnie odcięciu końcowych zer, ponownej konwersji na system dziesiętny.
Numer linii ojczystej (Line.Dad.Name.Dec) otrzymujemy po dodaniu 1 do numeru (Line.Dad.Tier.Dec).
Numer linii macierzystej (Line.Mom.Name.Dec) otrzymujemy po dodaniu 2 do numeru (Line.Mom.Tier.Dec).
Początek linii ojczystej w pokoleniu o numerze (Line.Dad.Gene.Dec) otrzymujemy po policzeniu ilości cyfr w binarnym numerze (Line.Dad.Tier.Bin).
Początek linii macierzystej w pokoleniu o numerze (Line.Mom.Gene.Dec) otrzymujemy po policzeniu ilości cyfr w binarnym numerze (Line.Mom.Tier.Bin).
Kolejność osoby w obrębie linii ojczystej (Line.Dad.Sort.Dec) otrzymujemy
jeżeli (Gene.Sort[1].Nor.Dec) wynosi 1, to wartość jest równa (Gene.Tier.Dec).
w przeciwnym razie wartość wynosi ilość końcowych zer w binarnej numerze (Gene.Sort[0].Nor.Bin).
Kolejność osoby w obrębie linii macierzystej (Line.Mom.Sort.Dec) otrzymujemy
jeżeli (Gene.Sort[1].Rev.Dec) wynosi 1, to wartość jest równa (Gene.Tier.Dec).
w przeciwnym razie wartość wynosi ilość końcowych zer w binarnej numerze (Gene.Sort[0].Rev.Bin).