рдПрдХ рд╕реЗрд▓реНрдпреВрд▓рд░ рдСрдЯреЛрдореЗрдЯрди рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЧреНрд░рд┐рдб рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдо рднреА рд╣реЛрддреЗ рд╣реИрдВред рдмрд╛рд░-рдмрд╛рд░ рдЧреНрд░рд┐рдб рдХреЗ рджреГрд╢реНрдп рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд┐рдб рд╕реЗрд▓ рдХреЛ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдХрд┐рд╕реА рдХреЛ рдЬрдЯрд┐рд▓ рдФрд░ рдЬрдЯрд┐рд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рдХрд╕рд┐рдд рдЬреАрд╡ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдирд┐рдпрдо рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реЛрдВред
рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░, рдкреНрд░рдХрд╛рд░ рдФрд░ рдЖрдпрд╛рдо рд╣реИрдВред рд╕рдВрднрд╡рдд: рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрди рдХреЙрдирд╡реЗ рдХрд╛ рдЧреЗрдо рдСрдл рд▓рд╛рдЗрдл (рдЬреАрдУрдПрд▓) рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рдЧреНрд░рд┐рдб рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдореЗрдВ рдПрдХ рдмрд╛рдЗрдирд░реА рд╡реИрд▓реНрдпреВ (рд▓рд╛рдЗрд╡ рдпрд╛ рдбреЗрдб) рд╣реЛрддреА рд╣реИред рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд╛рде рд╡рд╛рд▓реЗ рдирд┐рдпрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрд╢рд┐рдХрд╛ рдореГрдд рдпрд╛ рдЬреАрд╡рд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рдирд┐рдпрдореЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рдЬреАрд╡рд┐рдд рдХреЛрд╢рд┐рдХрд╛ рдЕрдХреЗрд▓реЗрдкрди рд╕реЗ рдорд░ рдЬрд╛рддреА рд╣реИ рдЕрдЧрд░ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ 2 рд╕реЗ рдХрдо рдЬреАрд╡рд┐рдд рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдпрджрд┐ рддреАрди рд╕реЗ рдЕрдзрд┐рдХ рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдЬреАрд╡рд┐рдд рд╣реИрдВ, рддреЛ рд╡рд╣ рдУрд╡рд░рдкреЙрдкреБрд▓реЗрд╢рди рд╕реЗ рдорд░ рдЬрд╛рддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдХреЛрдИ рдХреЛрд╢рд┐рдХрд╛ "рдЬреАрд╡рд┐рдд" рд╣реИ рддреЛ рдЙрд╕рдХреЗ рдЖрд╕-рдкрд╛рд╕ 2 рдпрд╛ 3 рдЬреАрд╡рд┐рдд рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реИрдВред рдПрдХ
рдореГрдд рдХреЛрд╢рд┐рдХрд╛ рдХреЗ рдЬреАрд╡рди рдореЗрдВ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдареАрдХ 3 рдЬреАрд╡рд┐рдд рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдПрдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдореГрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдПрдХ рдЧреЛрдПрд▓ рдорд╢реАрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдХрдИ рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрди рдХрд╛ рдПрдХ рдФрд░ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдЖрдпрд╛рдореА рд╣реИ; рдЗрд╕реЗ рдПрд▓рд┐рдореЗрдВрдЯрд░реА рд╕реЗрд▓реНрдпреБрд▓рд░ рдСрдЯреЛрдореИрдЯрди (ECA) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд╣рдо рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕ рдСрдЯреЛрдореЗрдЯрди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреЛ рдмреВрд▓рд┐рдпрди рдорд╛рдиреЛрдВ рдХреЗ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬреАрдУрдПрд▓ рд░рд╛рдЬреНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЖрдпрд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕ рдСрдЯреЛрдореЗрдЯрди рдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЗрд╕ рдСрдЯреЛрдореЗрдЯрди рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдкреВрд░реЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдЖрдпрд╛рдореЛрдВ (рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрдЬрд╛рдп) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ GOL рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдорд╢реАрди рдореЗрдВ рд╕реЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ 0 рдпрд╛ 1 рд╣реИ, рд▓реЗрдХрд┐рди GOL рд╕реЗрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ 8 рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, ECA рд╕реЗрд▓ рдЕрдкрдбреЗрдЯреЗрдб рд╣реИ рдЬреЛ рдХрд┐ рдмрд╛рдПрдВ рдкрдбрд╝реЛрд╕реА, рджрд╛рдПрдВ рдкрдбрд╝реЛрд╕реА, рдФрд░ рдЦреБрдж рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИ!
рдирд┐рдпрдореЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВ: рд╢реАрд░реНрд╖ рддреАрди рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдирд┐рдпрдо рдХрд╛ рдЗрдирдкреБрдЯ рд╣реИрдВ, рдФрд░ рдиреАрдЪреЗ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдЬрд╣рд╛рдВ рдХрд╛рд▓рд╛ 1 рд╣реИ рдФрд░ рд╕рдлреЗрдж 0. рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдкреИрдЯрд░реНрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕рднреА рдХреЛ рдЫреЛрдбрд╝рдХрд░ 0 рд╣реИ рдордзреНрдп рд╕реЗрд▓ рдореЗрдВред

рдЖрдк рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрдкрд░реЛрдХреНрдд рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреНрдпреЛрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ 0 рд╕реЗ 255 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдзреЗ рдИрд╕реАрдП рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдирд┐рдпрдореЛрдВ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддреНрд░рд╛рдЪрд╛рд░ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдирд┐рдпрдо рддрдХ0 рд╕реЗ 255 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХреЗрд╡рд▓ 8 рдЕрдВрдХреЛрдВ (рдКрдкрд░ рдкрд╣рд▓рд╛ рддреАрд░) рдХреЗ рд╕рд╛рде рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди (рджреВрд╕рд░реЗ рддреАрд░) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпреЗ рд╕реВрдЪрдХрд╛рдВрдХ 0 рд╕реЗ 7 рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ 3 рдЕрдВрдХреЛрдВ (рддреАрд╕рд░реЗ рддреАрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди 3 рдЕрдВрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдВрдХ, рд╣рдореЗрдВ рддреНрд░реИрдорд╛рд╕рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЪреМрдерд╛ рддреАрд░)ред
рдирд┐рдпрдо рдкреАрдврд╝реА
рдЖрдЗрдП рдЙрдкрд░реЛрдХреНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди
get_rule
рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ, рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ 0 рд╕реЗ 255 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд░реВрдк ECA рдирд┐рдпрдо рджреЗрддрд╛ рд╣реИред
рд╣рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
const rule30 = get_rule(30); const output110 = rule30(1, 1, 0);
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
rule30(1,1,0)
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рд╕рднреА рддреАрди рдмрд╛рдЗрдирд░реА рдорд╛рди рдПрдХ рд╕рдВрдЦреНрдпрд╛ (110 = 6) рдореЗрдВ рдЬреБрдбрд╝ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ 30 рдореЗрдВ рдЙрд╕ рд╕реНрдерд┐рддрд┐ (6) рдкрд░ рдереЛрдбрд╝рд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗред рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ 30 00011110 рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди 0 рдкрд░ рд▓реМрдЯреЗрдЧрд╛ (рд╣рдо рджрд╛рдИрдВ рдУрд░ рдЧрд┐рдирддреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ 0 рд╕реЗ рдЧрд┐рдирддреА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ)ред
рдпрд╣ рдЬрд╛рдирдХрд░ рдХрд┐ рддреАрди рдмрд╛рдЗрдирд░реА рдЗрдирдкреБрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдПрдХ рдирдВрдмрд░ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЖрдЗрдП рдРрд╕реЗ
combine
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
const combine = (b1, b2, b3) => (b1 << 2) + (b2 << 1) + (b3 << 0);
рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдВрдЧрдд рдкрджреЛрдВ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдФрд░ рдлрд┐рд░ рддреАрди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░, рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдпреЛрдЬрди рдорд┐рд▓рддрд╛ рд╣реИред
get_rule
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рджреВрд╕рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд┐рдЯ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди
get_bit(num, pos)
рдмрдирд╛рдПрдВ, рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдирдВрдмрд░
num
рдкрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдкрд░ рдереЛрдбрд╝рд╛ рдорд╛рди рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдо рдореЗрдВ 141 рдирдВрдмрд░ 10001101 рд╣реИ, рдЗрд╕рд▓рд┐рдП
get_bit(2, 141)
рдХреЛ
1
рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░
get_bit(5, 141)
рдХреЛ
0
рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
get_bit(num,pos)
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рд╕рдВрдЦреНрдпрд╛ рдХреА рдПрдХ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯ рдХреЛ рджрд╛рдИрдВ рдУрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ, рдФрд░ рдлрд┐рд░ рдирдВрдмрд░ 1 рдХреЗ рд╕рд╛рде рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди "AND" рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
const get_bit = (num, pos) => (num >> pos) & 1;
рдЕрдм рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрди рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
const get_rule = num => (b1, b2, b3) => get_bit(num, combine(b1, b2, b3));
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЦреНрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдИрд╕реАрдП рдирд┐рдпрдо рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдХрджрдо рдЙрдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред
рдирд┐рдпрдо рджреГрд╢реНрдп
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдСрдЯреЛрдореЗрдЯрд╛ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
canvas
рдПрд▓рд┐рдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
canvas
рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ html рдмреЙрдбреА рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
window.onload = function() { const canvas = document.createElement('canvas'); canvas.width = 800; canvas.height = 800; document.body.appendChild(canvas); };
canvas
рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рд╣реИ ред рд╕рдВрджрд░реНрдн рд╣рдореЗрдВ рдЖрдХреГрддрд┐рдпреЛрдВ рдФрд░ рд░реЗрдЦрд╛рдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрдорддреМрд░ рдкрд░
canvas
рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ
canvas
рдХреЗ
getContext
рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
const context = canvas.getContext('2d');
рдкреИрд░рд╛рдореАрдЯрд░
'2d'
рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдПрдХ рд╕рдВрджрд░реНрдн, рдПрдХ рдИрд╕реАрдП рдирд┐рдпрдо, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдкреИрдорд╛рдиреЗ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА, рдирд┐рдпрдо рдХреЛ
canvas
рдкрд░ рдЦреАрдВрдЪрддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЧреНрд░рд┐рдб рд▓рд╛рдЗрди рдЙрддреНрдкрдиреНрди рдФрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ; рдХреЛрдб рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
function draw_rule(ctx, rule, scale, width, height) { let row = initial_row(width); for (let i = 0; i < height; i++) { draw_row(ctx, row, scale); row = next_row(row, rule); } }
рд╣рдо рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдкрдВрдХреНрддрд┐ рд╣реИред рдпрд╣ рд░реЗрдЦрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдордзреНрдп рдХрдХреНрд╖ рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рднреА рд╢реВрдиреНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ 1 рдФрд░ 0. рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрдВрдХреНрддрд┐ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рдо рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрдиред рдлрд┐рд░ рд╣рдо рдмрд╕ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдФрд░ рдирдП рдЪрд░рдгреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдпрд╣ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЧреНрд░рд┐рдб рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
initial_row
,
draw_row
рдФрд░
next_row
ред
initial_row
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдп рд╣реИред рдпрд╣ рд╢реВрдиреНрдп рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд╕рд░рдгреА рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рддрддреНрд╡ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред
function initial_row(length) { const initial_row = Array(length).fill(0); initial_row[Math.floor(length / 2)] = 1; return initial_row; }
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирд┐рдпрдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП
next_row
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХрд╛ рдорд╛рди рдирд┐рдпрдо рдХреЛ рдирд┐рдХрдЯрддрдо рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ рдкреБрд░рд╛рдиреА рдкрдВрдХреНрддрд┐ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
const next_row = (row, rule) => row.map((_, i) => rule(row[i - 1], row[i], row[i + 1]));
рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдзреЛрдЦрд╛ рджрд┐рдпрд╛? рдПрдХ рдирдИ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рдХрд╛ рдХреЛ рддреАрди рдЕрдиреНрдп рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкрдВрдХреНрддрд┐ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рджреЛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
next_row[0]
row[-1]
рд╕реЗ
next_row[0]
рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдпрд╣ рдЕрдиреБрдХреНрд░рдо рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд░рдгреА рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
undefined
рд▓реМрдЯрддрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐
(undefined >> [ ])
(
combine
рдлрд╝рдВрдХреНрд╢рди рд╕реЗ) рд╣рдореЗрд╢рд╛ 0. рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ рд╕рд░рдгреА рдХреЗ рдмрд╛рд╣рд░ 0 рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдХреБрдЫ рд╕реБрдВрджрд░ рдмрдирд╛рдПрдВрдЧреЗ, рддрд╛рдХрд┐ рд╣рдореЗрдВ рдорд╛рдл рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕рдХреЗ рдмрд╛рдж
draw_row
рдлрдВрдХреНрд╢рди рдЖрддрд╛ рд╣реИ; рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ!
function draw_row(ctx, row, scale) { ctx.save(); row.forEach(cell => { ctx.fillStyle = cell === 1 ? '#000' : '#fff'; ctx.fillRect(0, 0, scale, scale); ctx.translate(scale, 0); }); ctx.restore(); ctx.translate(0, scale); }
рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рд╣рдо рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдХрдо рд╕реЗ рдХрдо 5 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
fillStyle
рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рднрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд░рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "#f55"
, рд╕рд╛рде рд╣реА рдПрдХ рдврд╛рд▓ рдпрд╛ рдкреИрдЯрд░реНрдиред рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрд╢рд┐рдХрд╛рдУрдВ 1 рд╕реЗ рдиреЗрддреНрд░рд╣реАрди рдЕрд▓рдЧ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдХрд░рддреЗ рд╣реИрдВредfillRect(x, y, w, h)
рдЪреМрдбрд╝рд╛рдИ w рдФрд░ рдКрдБрдЪрд╛рдИ h рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ (x, y) рд╕реЗ рдПрдХ рдЖрдпрдд рдЦреАрдВрдЪрддрд╛ рд╣реИ fillRect(x, y, w, h)
рдЕрдиреБрд╕рд╛рд░ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЖрдпрддреЗрдВ рд╕рд░рд▓ рд╡рд░реНрдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрди рд╕рднреА рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рдореВрд▓ рдореЗрдВ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ translate
рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВредtranslate(x, y)
рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдзрд┐ рддрддреНрд╡реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрджреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЧреНрд░рд┐рдб рд╕реЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдмрд╕ рдПрдХ рд╕реЗрд▓ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдирдпрд╛ рд╕реЗрд▓ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣редsave()
рдФрд░ restore()
рдХрд╛ рдЙрдкрдпреЛрдЧ translate
рдФрд░ рдЕрдиреНрдп рд╕рдордиреНрд╡рдп рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд╕рдХреЗрдВ ( рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рджрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░, рдЬрдм рд╣рдордиреЗ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдЪрд▓реЗ рдЧрдП, рддреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрд╣рд╛рд▓ рд╣реЛ рдЧрдП рдФрд░ рд╣рдо рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯ рдЖрдПред рдлрд┐рд░ рд╣рдо рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕
draw_rule
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рднрд╛рдЧ рд╣реИрдВред рд╣рдо
canvas
рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
window.onload
рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рднреА рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
window.onload = function() { const width = 1000;
рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде
canvas
рдЖрдпрд╛рдореЛрдВ рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред рддрдм рд╣рдо
cell_scale
рдФрд░ 'cells_down' рдХреА рдЧрдгрдирд╛
cell_scale
рддрд╛рдХрд┐ рдЧреНрд░рд┐рдб рдкреВрд░реЗ
canvas
рднрд░ рджреЗ, рдЬрдмрдХрд┐ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдЪреМрдХреЛрд░ рд░рд╣рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо
canvas
рднреАрддрд░ рд╢реЗрд╖ рдЧреНрд░рд┐рдб рдХреЗ "рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди" рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╣ рд╕рдм рд╣реИ! рдкреВрд░рд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
рдЬреАрдердм рдФрд░
рдХреЛрдбрдкреЗрди рдкрд░ рд╣реИ :
рдЪрд▓ рд░рд╣рд╛ рд╣реИ
рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд╕рднреА 256 рдирд┐рдпрдореЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдпрд╛ рддреЛ рдкреБрдирд░рд╛рд╡реГрддрд┐, рдХреЛрдб рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рд▓реЛрдб рдкрд░ рдПрдХ рдирд┐рдпрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдиреЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЗрди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рднреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдмрд╣реБрдд рд░реЛрдорд╛рдВрдЪрдХ рд╣реИред
рдЖрдк рд╕реНрдЯреЗрдЯрд┐рдХ "рдареЛрд╕ рд╢реВрдиреНрдп рдФрд░ рдПрдХ рдЗрдХрд╛рдИ" рдХреЗ рдмрдЬрд╛рдп рдСрдЯреЛрдореЗрдЯрди рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдФрд░ рднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВред
initial_row
рдлрдВрдХреНрд╢рди рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
function random_initial_row(width) { return Array.from(Array(width), _ => Math.floor(Math.random() * 2)); }
рдиреАрдЪреЗ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рд▓рд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддрд╛ рд╣реИред
рд░реИрдВрдбрдо рд╕реЛрд░реНрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧрдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкрд╣рд▓реВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ! рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХреЗрд╡рд▓ рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рддрдХ рд╣реА рд╕реАрдорд┐рдд рдХреНрдпреЛрдВ рд░рдЦреЗрдВ? (2 рд╕реЗ 3 рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕рдВрдХреНрд░рдордг 256 рд╕реЗ 7 625 597 484 987 рдкрд░ рдирд┐рдпрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рддрд╛ рд╣реИ!) рд╡рд░реНрдЧреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдХреНрдпреЛрдВ рд╣реЛ? рдХреЗрд╡рд▓ 2 рдЖрдпрд╛рдо рдХреНрдпреЛрдВ? рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд┐рдпрдо рдХреНрдпреЛрдВ?
ECA рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ
draw_rule
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдЬреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде
draw_rule
, рдФрд░ рдлрд┐рд░ рдЗрди рд░реЗрдЦрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд░рдВрдЧреЛрдВ рд╕реЗ рднрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╡рд┐рднрд╛рдЬрди рд░реЗрдЦрд╛рдПрдБ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛рдиреА рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд░рдВрдЧ рджрд┐рдЦрд╛рдирд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдФрд░ рднреА рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд┐рдорд┐рдЯреНрд░реАрдЬрд╝, рджреЛрдиреЛрдВ рдЕрдХреНрд╖реАрдп (рдордзреНрдп рдкрдВрдХреНрддрд┐) рдФрд░ рджрд░реНрдкрдг (рдирд┐рдЪрд▓рд╛ рдкрдВрдХреНрддрд┐) рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдпреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЖрдкрдХреЛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗ, рд▓реЗрдХрд┐рди
рдЗрд╕ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди
рдХрд░реЗрдВ , рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдХреЛрдб рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реЗрд▓реБрд▓рд░ рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ!
рд╕реМрднрд╛рдЧреНрдп рд╣реИ