āĻāĻ¤ āĻā§āĻ°ā§āĻˇā§āĻŽā§ āĻāĻŽāĻŋ āĻ
āĻāĻļ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĻ˛āĻžāĻŽ
Google Summer of Code 2019-āĻ āĻāĻāĻāĻ¨ āĻ
āĻāĻļāĻā§āĻ°āĻšāĻŖāĻāĻžāĻ°ā§ āĻšāĻŋāĻ¸ā§āĻŦā§, āĻāĻŽāĻŋ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻāĻ°ā§āĻāĻŋ
āĻāĻ āĻĒā§āĻ¸ā§āĻā§ āĻāĻŽāĻŋ āĻšāĻžāĻ¸āĻā§āĻ˛ā§āĻ° āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧāĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤ āĻ¯āĻĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽāĻāĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻŽā§āĻ˛āĻŋāĻ, āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻļā§āĻ˛ā§āĻ¤ā§ āĻāĻāĻŋāĻā§ āĻ¸ā§āĻ¨ā§āĻĻāĻ°āĻāĻžāĻŦā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻāĻŽāĻžāĻā§ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§āĻā§ āĻāĻŦāĻ āĻŦā§āĻļ āĻ āĻ¨ā§āĻ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻā§āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻŋ āĻŽā§āĻ¨āĻžāĻĄ āĻā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻ°āĻŽāĻžāĻ°āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§ āĻ¸ā§āĻĨāĻŋāĻ° āĻšāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻāĻŽāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§
āĻāĻŽāĻžāĻ° āĻ¨āĻžāĻŽ āĻā§āĻ¯āĻžāĻ¸āĻŋāĻ˛āĻŋ āĻāĻ˛āĻĢā§āĻ°āĻ, āĻāĻŽāĻŋ āĻ¸ā§āĻ¨ā§āĻ āĻĒāĻŋāĻāĻžāĻ°ā§āĻ¸āĻŦāĻžāĻ°ā§āĻ HSE-āĻāĻ° āĻāĻ¤ā§āĻ°ā§āĻĨ āĻŦāĻ°ā§āĻˇā§āĻ° āĻāĻžāĻ¤ā§āĻ°āĨ¤ āĻāĻā§ āĻŦā§āĻ˛āĻā§ āĻ˛āĻŋāĻā§āĻāĻŋāĻ˛āĻžāĻŽ
āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§
āĻā§āĻŽāĻŋāĻāĻž
āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻ
āĻāĻļāĻā§āĻ°āĻšāĻŖāĻāĻžāĻ°ā§ āĻāĻžāĻ¤ā§āĻ°āĻĻā§āĻ° āĻŦā§āĻ˛āĻā§ āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āĻāĻ¤ā§āĻ¸āĻžāĻšāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻž āĻāĻŽāĻžāĻā§ āĻŦā§āĻ˛āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽ āĻĻāĻŋāĻ¯āĻŧā§āĻā§
āĻĒā§āĻ°āĻļā§āĻ¨āĻ¯ā§āĻā§āĻ¤ āĻā§āĻĄ āĻ¸āĻš āĻĒā§āĻ˛ āĻ°āĻŋāĻā§āĻ¯āĻŧā§āĻ¸ā§āĻ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§
āĻāĻĒāĻ¨āĻŋ āĻāĻŽāĻžāĻ° āĻāĻžāĻā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ (āĻāĻāĻ°ā§āĻāĻŋāĻ¤ā§)
āĻāĻ āĻĒā§āĻ¸ā§āĻāĻāĻŋ āĻĒāĻžāĻ āĻāĻā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ-āĻāĻ° āĻŽā§āĻ˛āĻŋāĻ āĻ§āĻžāĻ°āĻŖāĻžāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻ¯āĻĻāĻŋāĻ āĻāĻŽāĻŋ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ˛ā§ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻĻ āĻ¸ā§āĻŽāĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦāĨ¤
āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧāĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧāĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§āĻ°āĻžāĻĢ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸āĻšāĻ āĻā§āĻ°āĻžāĻĢ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻ¸ā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻāĻŋ āĻ¸ā§āĻāĻž: āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻ°āĻž āĻŦāĻžāĻŽ āĻŦāĻž āĻĄāĻžāĻ¨ āĻāĻžāĻā§ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ°āĻžāĻāĻŋ āĻāĻŦāĻ āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ°ā§āĻ§āĻĒā§āĻ°ā§āĻŖ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻāĻ¨ āĻāĻŽāĻ°āĻž āĻĻāĻžāĻŦāĻŋ āĻāĻ°āĻŋ āĻ¯ā§ āĻā§āĻ°āĻžāĻĢāĻāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻāĻā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤: āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻ°āĻž āĻŦāĻžāĻŽ āĻāĻžāĻā§ āĻāĻŋāĻā§ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ°āĻžāĻāĻŋāĨ¤ āĻ¸ā§āĻĒāĻˇā§āĻāĻ¤āĻ, āĻāĻ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻļā§āĻĻā§āĻ° āĻ āĻŦāĻļā§āĻ¯āĻ āĻĄāĻžāĻ¨ āĻ˛ā§āĻŦā§ āĻļā§āĻ¯āĻŧā§ āĻĨāĻžāĻāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ°āĻ, āĻāĻ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻļā§āĻĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻļā§āĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻŦāĻžāĻŽ āĻ˛ā§āĻŦā§ āĻļā§āĻ¤ā§ āĻšāĻŦā§, āĻāĻŦāĻ āĻ¤āĻžāĻāĨ¤ āĻāĻŽāĻ°āĻž āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ¤ā§ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯āĻžāĻā§āĻāĻŋ āĻ¯āĻ¤āĻā§āĻˇāĻŖ āĻ¨āĻž āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻ āĻāĻļā§ āĻāĻāĻ¨āĻ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻŽāĻ°āĻž āĻļā§āĻ°ā§ āĻāĻ°ā§āĻāĻŋ āĻ¯ā§āĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻļā§āĻĻā§āĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻāĻ°āĻŋāĨ¤
āĻāĻāĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻļāĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¯āĻĻāĻŋ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻā§āĻ°āĻžāĻĢā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻā§āĻĄāĻŧ āĻāĻā§āĻ° āĻā§āĻāĻā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻāĻ āĻŋāĻ¨ āĻ¨āĻ¯āĻŧ, āĻ¯āĻž āĻāĻāĻāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧ āĻā§āĻ°āĻžāĻĢā§ āĻŦā§āĻ¯āĻžāĻĒāĻāĻāĻžāĻŦā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ (āĻāĻŦāĻ āĻŦā§āĻļ āĻ¸ā§āĻĒāĻˇā§āĻāĻ¤āĻ) āĻ āĻ¸āĻŽā§āĻāĻŦāĨ¤ āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻ¸āĻ āĻŋāĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻļāĻ¨ āĻāĻā§, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§ āĻā§āĻ°āĻžāĻĢāĻāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧāĨ¤
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤, āĻāĻ āĻ
ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ
āĻāĻāĻāĻžāĻŦā§, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¸ā§āĻāĻŋāĻŽā§ āĻāĻ¸ā§āĻāĻŋāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻā§āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻ°āĻžāĻĢā§āĻ° āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻā§āĻ˛āĻŋ āĻ āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻļā§āĻ¯āĻŧāĻžāĻ°āĻā§āĻ˛āĻŋ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻŋ, āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻŦāĻ°āĻžāĻŦāĻ° āĻ āĻā§āĻ°āĻ¸āĻ° āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻāĻžāĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ āĻ¯āĻžāĻ¤ā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻž āĻāĻā§, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻā§ āĻŦāĻ˛āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§ āĻā§āĻ°āĻžāĻĢāĻāĻŋ āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯ā§ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļā§āĻ°ā§āĻˇāĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻāĻŋ āĻāĻžāĻ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤āĻā§āĻ˛āĻŋ āĻĻā§āĻā§āĻāĻŋ, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻĒāĻžāĻ°ā§āĻāĻŋāĻļāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻŖāĻ¨āĻžāĻ° āĻŦāĻŋāĻļā§āĻĻā§āĻ§āĻ¤āĻž
āĻšāĻžāĻ¸ā§āĻā§āĻ˛ā§ āĻāĻŽāĻ°āĻž āĻ§āĻ°ā§ āĻ¨āĻŋāĻ āĻ¯ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŖāĻ¨āĻž āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻ¯āĻžāĻāĻšā§āĻ, āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°ā§āĻĻāĻžāĻ¯āĻŧ āĻāĻŋāĻā§ āĻŽā§āĻĻā§āĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻā§āĻ¨ āĻāĻĒāĻžāĻ¯āĻŧ āĻĨāĻžāĻāĻŦā§ āĻ¨āĻžāĨ¤ āĻŽā§āĻā§āĻ, āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻŖāĻ¨āĻž āĻāĻ¤ āĻ āĻ˛āĻ¸ āĻ¯ā§ āĻāĻāĻāĻŋ āĻ¨ā§āĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻŋāĻā§ āĻāĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻāĻžāĻ°āĻŖāĨ¤ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§ āĻāĻāĻŽāĻžāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŖāĻ¨āĻž āĻāĻāĻ°āĻāĻŽ āĻŦāĻžāĻ§ā§āĻ¯ āĻāĻ°āĻž āĻšāĻ¯āĻŧ "āĻ āĻļā§āĻĻā§āĻ§" āĻŽā§āĻ¨āĻžāĻĄ āĻāĻāĻ
Monads āĻšāĻ˛ āĻāĻŖāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°āĻžāĻ° āĻāĻāĻāĻŋ āĻāĻĒāĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻāĻžāĻŦ Haskell āĻŽāĻ§ā§āĻ¯ā§. āĻ¤āĻžāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻž āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻž āĻāĻ āĻĒā§āĻ¸ā§āĻā§āĻ° āĻ¸ā§āĻ¯ā§āĻā§āĻ° āĻŦāĻžāĻāĻ°ā§āĨ¤ āĻāĻāĻ°ā§āĻāĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻĒāĻĄāĻŧāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻŋ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¯ā§ āĻāĻŋāĻā§ āĻŽā§āĻ¨āĻžāĻĄ, āĻ¯ā§āĻŽāĻ¨ IO, āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻŽā§āĻ¯āĻžāĻāĻŋāĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ āĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦāĻā§āĻ˛āĻŋ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ°ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŖāĻ¨āĻž āĻŦāĻŋāĻļā§āĻĻā§āĻ§āĨ¤
āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻāĻžāĻŦ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻŽā§āĻ¨āĻžāĻĄ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻŦ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻāĻŦāĻ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻ¤āĻ¤ā§āĻ¤ā§āĻŦ: āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§āĻ¨āĻžāĻĄ āĻāĻāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§āĨ¤ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻŽā§āĻ¨āĻžāĻĄ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦ:
- āĻšāĻ¯āĻŧ ea āĻšāĻ˛ āĻāĻāĻāĻŋ āĻāĻŖāĻ¨āĻž āĻ¯āĻž āĻāĻžāĻāĻĒ a-āĻāĻ° āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻŦāĻž āĻāĻžāĻāĻĒ e-āĻāĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻ¨āĻŋāĻā§āĻˇā§āĻĒ āĻāĻ°ā§āĨ¤ āĻāĻ āĻŽā§āĻ¨āĻžāĻĄā§āĻ° āĻāĻāĻ°āĻŖ āĻāĻŦāĻļā§āĻ¯āĻŋāĻ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻžāĻ° āĻ āĻ¨ā§āĻ°ā§āĻĒ: āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻ§āĻ°āĻž āĻŦāĻž āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻšāĻ˛ āĻ¯ā§ āĻŽā§āĻ¨āĻžāĻĄ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻ¯ā§āĻā§āĻ¤āĻŋāĻāĻāĻžāĻŦā§ āĻšāĻžāĻ¸āĻā§āĻ˛ā§āĻ° āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ¤ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻāĻ¨ āĻ āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻāĻžāĻˇāĻžāĻā§āĻ˛āĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤
- āĻ¸ā§āĻā§āĻ sa āĻšāĻ˛ āĻāĻāĻāĻŋ āĻāĻŖāĻ¨āĻž āĻ¯āĻž āĻāĻžāĻāĻĒ a-āĻāĻ° āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§ āĻāĻŦāĻ s āĻāĻžāĻāĻĒā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ¯ā§āĻā§āĻ¯ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°ā§āĨ¤
- āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻāĻāĻŋ. āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻŽā§āĻ¨āĻžāĻĄ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻāĻŖāĻ¨āĻž āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§ āĻ¯āĻž āĻ¯ā§ āĻā§āĻ¨ā§ āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŋāĻā§āĻ āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ¯āĻŧā§ āĻŦāĻžāĻ§āĻžāĻā§āĻ°āĻ¸ā§āĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻŽāĻ°āĻž āĻšāĻ¯āĻŧāĻ¤ā§ āĻŽā§āĻ¨āĻžāĻĄāĻĒā§āĻ˛āĻžāĻ¸ āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦ, āĻ¯āĻž āĻŦāĻŋāĻĒāĻ°ā§āĻ¤ āĻĒā§āĻ°āĻāĻžāĻŦ āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§: āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻŖāĻ¨āĻž āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻŽāĻžāĻ¨ āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¯ā§ āĻā§āĻ¨ā§ āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻžāĻ§āĻžāĻā§āĻ°āĻ¸ā§āĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨
āĻāĻŽāĻžāĻĻā§āĻ° āĻĻā§āĻāĻŋ āĻĄā§āĻāĻž āĻāĻžāĻāĻĒ āĻāĻā§, āĻā§āĻ°āĻžāĻĢ a āĻāĻŦāĻ Bigraph ab, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋ a āĻāĻžāĻāĻĒā§āĻ° āĻŽāĻžāĻ¨ āĻ¸āĻš āĻ˛ā§āĻŦā§āĻ˛āĻ¯ā§āĻā§āĻ¤ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ¸āĻš āĻā§āĻ°āĻžāĻĢāĻā§āĻ˛āĻŋāĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻāĻ°ā§ āĻāĻŦāĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋ a āĻāĻŦāĻ āĻĄāĻžāĻ¨ āĻāĻžāĻāĻĒā§āĻ° āĻŽāĻžāĻ¨ āĻ¸āĻš āĻ˛ā§āĻŦā§āĻ˛āĻ¯ā§āĻā§āĻ¤ āĻŦāĻžāĻŽ-āĻĒāĻžāĻļā§āĻ° āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ¸āĻš āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧ āĻā§āĻ°āĻžāĻĢāĻā§āĻ˛āĻŋāĻā§ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§ āĻāĻžāĻāĻĒ b āĻāĻ° āĻŽāĻžāĻ¨ āĻ¸āĻš āĻ˛ā§āĻŦā§āĻ˛āĻ¯ā§āĻā§āĻ¤ āĻĒāĻžāĻ°ā§āĻļā§āĻŦ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĨ¤
āĻāĻā§āĻ˛āĻŋ āĻāĻ˛āĻāĻž āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋāĻ° āĻĒā§āĻ°āĻāĻžāĻ° āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻ˛āĻāĻž āĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻĻā§āĻŦāĻŋāĻĒāĻā§āĻˇā§āĻ¯āĻŧ āĻā§āĻ°āĻžāĻĢā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¨ā§āĻāĨ¤ āĻāĻŽāĻŋ āĻ¸ā§āĻŦāĻā§āĻāĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻŽāĻ¤ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¤ā§āĻ°āĻŋ.
āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¸ā§āĻŦāĻžāĻā§āĻˇāĻ° āĻ¸āĻš āĻ¸āĻšāĻžāĻ¯āĻŧāĻ āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛āĻŋāĻ°āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§:
-- ĐĄĐŋиŅĐžĐē ŅĐžŅĐĩĐ´ĐĩĐš Đ´Đ°ĐŊĐŊОК вĐĩŅŅиĐŊŅ.
neighbours :: Ord a => a -> Graph a -> [a]
-- ĐĐžŅŅŅОиŅŅ двŅĐ´ĐžĐģŅĐŊŅĐš ĐŗŅĐ°Ņ ĐŋĐž ĐŗŅĐ°ŅŅ и ŅŅĐŊĐēŅии, Đ´ĐģŅ ĐēĐ°ĐļдОК вĐĩŅŅиĐŊŅ
-- вŅĐ´Đ°ŅŅĐĩĐš ĐĩŅ Đ´ĐžĐģŅ и ĐŋĐžĐŧĐĩŅĐēŅ в ĐŊОвОК Đ´ĐžĐģĐĩ, иĐŗĐŊĐžŅиŅŅŅ ĐēĐžĐŊŅĐģиĐēŅĐŊŅĐĩ ŅŅĐąŅĐ°.
toBipartiteWith :: (Ord a, Ord b, Ord c) => (a -> Either b c)
-> Graph a
-> Bigraph b c
-- ĐĄĐŋиŅĐžĐē вĐĩŅŅиĐŊ в ĐŗŅĐ°ŅĐĩ
vertexList :: Ord a => Graph a -> [a]
ХиĐŗĐŊĐ°ŅŅŅĐ° ŅŅĐŊĐēŅии, ĐēĐžŅĐžŅŅŅ ĐŧŅ ĐąŅĐ´ĐĩĐŧ ĐŋиŅĐ°ŅŅ, вŅĐŗĐģŅдиŅ ŅĐ°Đē:
type OddCycle a = [a]
detectParts :: Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)
āĻāĻāĻŋ āĻĻā§āĻāĻž āĻ¸āĻšāĻ āĻ¯ā§ āĻāĻā§āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¯āĻĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻŦāĻŋāĻ°ā§āĻ§āĻĒā§āĻ°ā§āĻŖ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻā§āĻāĻā§ āĻĒāĻžāĻ, āĻ¤āĻŦā§ āĻŦāĻŋāĻā§āĻĄāĻŧ āĻāĻā§āĻ°āĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻā§āĻ° āĻāĻĒāĻ°ā§ āĻĨāĻžāĻā§āĨ¤ āĻāĻāĻāĻžāĻŦā§, āĻāĻāĻŋ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤ āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻĨā§āĻā§ āĻļā§āĻˇ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻŦāĻāĻŋāĻā§ āĻā§āĻā§ āĻĢā§āĻ˛āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻ¨āĻŽā§āĻŦāĻ°āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸āĻšāĻ¯ā§āĻā§ āĻ ā§āĻ¯āĻžāĻ°ā§ āĻŦāĻāĻžāĻ¯āĻŧ āĻ°ā§āĻā§ āĻāĻā§āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻŋāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻŽā§āĻ¨āĻžāĻĄā§āĻ° āĻĢāĻžāĻāĻā§āĻāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ°āĻŋāĻāĻžāĻ°āĻļāĻ¨ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻāĻŋ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ°āĻā§āĻˇāĻŖāĻžāĻŦā§āĻā§āĻˇāĻŖ āĻāĻ°āĻž āĻšāĻŦā§: āĻāĻŽāĻžāĻĻā§āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¸āĻŋāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻĨā§āĻā§ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§ āĻĒāĻžāĻĨ āĻĨā§āĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ§āĻžāĻ°āĻŖāĻž āĻāĻŋāĻ˛ Either monad āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž, āĻ¯āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻāĻžāĻŦāĻā§āĻ˛āĻŋāĻā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°ā§ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻ¯āĻŧāĨ¤ āĻāĻŽāĻŋ āĻ˛āĻŋāĻā§āĻāĻŋāĻ˛āĻžāĻŽ āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒā§āĻ° āĻā§āĻŦ āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻāĻŋāĻ˛āĨ¤ āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻāĻŽāĻŋ āĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§ āĻĒāĻžāĻāĻāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°ā§āĻāĻŋ āĻāĻŦāĻ āĻ āĻŦāĻļā§āĻˇā§ āĻ āĻ¨ā§āĻ¯ āĻāĻāĻāĻŋāĻ¤ā§ āĻ¸ā§āĻĨāĻŋāĻ° āĻšāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŽāĻžāĻĻā§āĻ° āĻļā§āĻ¯āĻŧāĻžāĻ° āĻļāĻ¨āĻžāĻā§āĻ¤āĻāĻžāĻ°ā§āĻ° āĻāĻāĻāĻŋ āĻ¸āĻšāĻ¯ā§āĻā§ āĻ
ā§āĻ¯āĻžāĻ°ā§ āĻŦāĻāĻžāĻ¯āĻŧ āĻ°āĻžāĻāĻ¤ā§ āĻšāĻŦā§ - āĻāĻāĻŋ āĻ°āĻžāĻā§āĻ¯ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŋāĻā§āĨ¤ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻ¤, āĻā§āĻ¨ā§ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦ āĻļāĻ¨āĻžāĻā§āĻ¤ āĻšāĻ˛ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĨāĻžāĻŽāĻžāĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻšāĻ¯āĻŧ āĻŽā§āĻ¨āĻžāĻĄ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ
āĻĨāĻŦāĻž āĻŽā§āĻ¨āĻžāĻĄāĻĒā§āĻ˛āĻžāĻ¸ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻšāĻ˛ āĻ¯ā§ āĻšāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻĻāĻŋ āĻāĻŖāĻ¨āĻž āĻŦāĻ¨ā§āĻ§ āĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻŦāĻ āĻšāĻ¯āĻŧāĻ¤ āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¤āĻĨā§āĻ¯ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§āĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ˛āĻžāĻĻāĻž āĻŽāĻžāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ (āĻāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ°āĻžāĻā§āĻ¯ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻā§), āĻāĻŽāĻ°āĻž āĻšāĻ¯āĻŧāĻ¤ā§ āĻŦā§āĻā§ āĻ¨āĻŋāĻāĨ¤ āĻāĻŦāĻ āĻāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§ āĻ¯āĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĻā§āĻāĻŋ āĻŽā§āĻ¨āĻžāĻĄā§āĻ° āĻĒā§āĻ°āĻāĻžāĻŦ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ, āĻ¤āĻāĻ¨ āĻ¤āĻžāĻ°āĻž āĻŦā§āĻ°āĻŋāĻ¯āĻŧā§ āĻāĻ¸ā§
āĻā§āĻ¨ āĻāĻŽāĻŋ āĻ¯ā§āĻŽāĻ¨ āĻāĻāĻāĻŋ āĻāĻāĻŋāĻ˛ āĻāĻžāĻāĻĒ āĻāĻ¯āĻŧāĻ¨? āĻĻā§āĻāĻŋ āĻāĻžāĻ°āĻŖāĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻ āĻ¨ā§āĻ°ā§āĻĒ āĻšāĻ¤ā§ āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻāĻ. āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻ¤, āĻŦāĻŋāĻā§āĻĄāĻŧ āĻ˛ā§āĻĒ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻĨā§āĻā§ āĻĢāĻŋāĻ°ā§ āĻāĻ¸āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻŋāĻ°ā§āĻ§ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻŽāĻžāĻ¨āĻā§ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ¯āĻž āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻŽā§āĻ¨āĻžāĻĄā§ āĻāĻ°āĻž āĻ āĻ¨ā§āĻ āĻ¸āĻšāĻāĨ¤
āĻāĻāĻāĻžāĻŦā§ āĻāĻŽāĻ°āĻž āĻāĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒā§āĻ¤ā§.
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE ScopedTypeVariables #-}
data Part = LeftPart | RightPart
otherPart :: Part -> Part
otherPart LeftPart = RightPart
otherPart RightPart = LeftPart
type PartMap a = Map.Map a Part
type OddCycle a = [a]
toEither :: Ord a => PartMap a -> a -> Either a a
toEither m v = case fromJust (v `Map.lookup` m) of
LeftPart -> Left v
RightPart -> Right v
type PartMonad a = MaybeT (State (PartMap a)) [a]
detectParts :: forall a. Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)
detectParts g = case runState (runMaybeT dfs) Map.empty of
(Just c, _) -> Left $ oddCycle c
(Nothing, m) -> Right $ toBipartiteWith (toEither m) g
where
inVertex :: Part -> a -> PartMonad a
inVertex p v = ((:) v) <$> do modify $ Map.insert v p
let q = otherPart p
msum [ onEdge q u | u <- neigbours v g ]
{-# INLINE onEdge #-}
onEdge :: Part -> a -> PartMonad a
onEdge p v = do m <- get
case v `Map.lookup` m of
Nothing -> inVertex p v
Just q -> do guard (q /= p)
return [v]
processVertex :: a -> PartMonad a
processVertex v = do m <- get
guard (v `Map.notMember` m)
inVertex LeftPart v
dfs :: PartMonad a
dfs = msum [ processVertex v | v <- vertexList g ]
oddCycle :: [a] -> [a]
oddCycle c = tail (dropWhile ((/=) last c) c)
āĻ¯ā§āĻāĻžāĻ¨ā§ āĻŦā§āĻ˛āĻ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽā§āĻ° āĻŽā§āĻ˛āĨ¤ āĻāĻŽāĻŋ āĻāĻ° āĻāĻŋāĻ¤āĻ°ā§ āĻāĻŋ āĻāĻāĻā§ āĻ¤āĻž āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦāĨ¤
- inVertex āĻšāĻ˛ āĻāĻā§āĻ°āĻ¤āĻž-āĻĒā§āĻ°āĻĨāĻŽ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§āĻ° āĻ āĻāĻļ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽāĻŦāĻžāĻ° āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻŋāĨ¤ āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻļā§āĻ°ā§āĻˇāĻ¸ā§āĻĨāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻ¨āĻŽā§āĻŦāĻ° āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻļā§āĻĻā§āĻ° āĻāĻĒāĻ° onEdge āĻāĻžāĻ˛āĻžāĻāĨ¤ āĻāĻāĻžāĻ¨ā§āĻ āĻāĻŽāĻ°āĻž āĻāĻ˛ āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻŋ: āĻ¯āĻĻāĻŋ msum āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻ¸ā§āĻāĻžāĻ¨ā§ vertex v āĻĒā§āĻļ āĻāĻ°āĻŋāĨ¤
- onEdge āĻšāĻ˛ āĻ¸ā§āĻ āĻ āĻāĻļ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻŋāĨ¤ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĻā§āĻŦāĻžāĻ° āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ āĻ¨ā§āĻ¯ āĻĻāĻŋāĻā§āĻ° āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻāĻŋ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¨āĻž āĻšāĻ˛ā§ āĻāĻāĻŋ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻŋāĨ¤ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻšāĻ˛ā§, āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤āĻāĻŋ āĻŦāĻŋāĻ°ā§āĻ§āĻĒā§āĻ°ā§āĻŖ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻāĻŽāĻ°āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻ¤āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻŽāĻžāĻ¨āĻāĻŋ āĻĢā§āĻ°āĻ¤ āĻĻāĻŋāĻ - āĻ°āĻŋāĻāĻžāĻ°āĻļāĻ¨ āĻ¸ā§āĻā§āĻ¯āĻžāĻā§āĻ° āĻāĻā§āĻŦāĻžāĻ°ā§ āĻāĻĒāĻ°ā§, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ āĻ¨ā§āĻ¯ āĻ¸āĻŦ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻā§āĻ˛āĻŋ āĻĢā§āĻ°āĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
- āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻāĻžāĻ°ā§āĻā§āĻā§āĻ¸ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻā§āĻ¸ āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻāĻŦāĻ āĻ¨āĻž āĻšāĻ˛ā§ āĻāĻāĻŋāĻ¤ā§ āĻāĻžāĻ°ā§āĻā§āĻā§āĻ¸ āĻāĻžāĻ˛āĻžāĻ¯āĻŧāĨ¤
- dfs āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļā§āĻ°ā§āĻˇāĻŦāĻŋāĻ¨ā§āĻĻā§āĻ¤ā§ processVertex āĻāĻžāĻ˛āĻžāĻ¯āĻŧāĨ¤
āĻāĻāĻžāĻ¨ā§āĻ āĻļā§āĻˇ.
INLINE āĻļāĻŦā§āĻĻā§āĻ° āĻāĻ¤āĻŋāĻšāĻžāĻ¸
INLINE āĻļāĻŦā§āĻĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŋāĻ˛ āĻ¨āĻž; āĻāĻāĻŋ āĻĒāĻ°ā§ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ¯āĻāĻ¨ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°ā§āĻāĻŋ, āĻ¤āĻāĻ¨ āĻāĻŽāĻŋ āĻĻā§āĻāĻ¤ā§ āĻĒā§āĻ˛āĻžāĻŽ āĻ¯ā§ āĻ -āĻāĻ¨āĻ˛āĻžāĻāĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖāĻāĻŋ āĻāĻŋāĻā§ āĻā§āĻ°āĻžāĻĢā§ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻ§ā§āĻ° āĻāĻŋāĻ˛āĨ¤ āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻāĻ¤āĻāĻžāĻŦā§ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻāĻ āĻāĻžāĻ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°ā§, āĻāĻāĻŋ āĻāĻŽāĻžāĻā§ āĻŦā§āĻ¯āĻžāĻĒāĻāĻāĻžāĻŦā§ āĻ āĻŦāĻžāĻ āĻāĻ°ā§āĻā§āĨ¤ āĻāĻŽāĻ¨āĻāĻŋ āĻ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤, GHC āĻāĻ° āĻāĻāĻāĻŋ āĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¸āĻš āĻ āĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻā§āĻ¨āĻ āĻ˛āĻā§āĻˇāĻŖā§āĻ¯āĻŧ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤
GHC āĻā§āĻ° āĻāĻāĻāĻĒā§āĻ āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ āĻ¸āĻĒā§āĻ¤āĻžāĻš āĻ āĻ¤āĻŋāĻŦāĻžāĻšāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻ āĻāĻ¨āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻ¨ āĻĻāĻŋāĻ¯āĻŧā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§āĻāĻŋāĨ¤ GHC 8.4.4 āĻāĻŦāĻ GHC 8.6.5 āĻāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻŋāĻā§ āĻ¸āĻŽāĻ¯āĻŧā§ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻžāĻ° āĻ¨āĻŋāĻā§ āĻĨā§āĻā§ āĻāĻāĻŋ āĻāĻ°āĻž āĻŦāĻ¨ā§āĻ§ āĻāĻ°ā§ āĻĻā§āĻ¯āĻŧāĨ¤
āĻāĻŽāĻŋ āĻšāĻžāĻ¸āĻā§āĻ˛ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ-āĻ āĻāĻŽāĻ¨ āĻŽāĻ¯āĻŧāĻ˛āĻžāĻ° āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻļāĻž āĻāĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻ, āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻžāĻ°āĻ°āĻž āĻŽāĻžāĻā§ āĻŽāĻžāĻā§ āĻā§āĻ˛ āĻāĻ°ā§, āĻāĻŦāĻ āĻ¤āĻžāĻĻā§āĻ° āĻāĻā§āĻāĻŋāĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻāĻžāĻ¨āĻŋ āĻ¯ā§ āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻāĻ¨āĻ˛āĻžāĻāĻ¨ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻ āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§ āĻāĻ¨āĻ˛āĻžāĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ°āĻā§ āĻāĻāĻāĻŋ āĻāĻā§āĻāĻŋāĻ¤ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ°āĻŖāĨ¤
āĻāĻ°āĻĒāĻ°ā§ āĻā§ āĻšāĻ˛ā§?
āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻāĻŽāĻŋ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŽāĻ¨āĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻšāĻĒāĻā§āĻ°āĻĢāĻ-āĻāĻžāĻ°ā§āĻĒ āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°ā§āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻļā§āĻˇ āĻāĻŋāĻ˛āĨ¤
āĻā§āĻāĻ˛ āĻ¸āĻžāĻŽāĻžāĻ° āĻ
āĻĢ āĻā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ, āĻāĻŽāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻāĻ¯āĻŧā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ
āĻāĻŋāĻā§āĻāĻ¤āĻž āĻ
āĻ°ā§āĻāĻ¨ āĻāĻ°ā§āĻāĻŋ, āĻ¯āĻž āĻāĻŽāĻžāĻā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻā§āĻ°ā§āĻˇā§āĻŽā§ āĻā§āĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻā§ āĻāĻ¨ā§āĻāĻžāĻ°ā§āĻ¨āĻļāĻŋāĻĒ āĻĒā§āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§āĻ¨āĻŋ (āĻāĻŽāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻ¨āĻ āĻ¯ā§ āĻāĻ āĻāĻžāĻ¯āĻŧāĻāĻžāĻāĻŋ āĻšāĻžāĻŦāĻ°ā§āĻ° āĻā§āĻāĻžāĻ¨ā§ āĻĻāĻ°ā§āĻļāĻāĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻ¤āĻāĻž āĻĒāĻ°āĻŋāĻāĻŋāĻ¤, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻ¯āĻŧā§āĻāĻāĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻāĻ¯āĻŧā§ āĻ¨āĻŋāĻ¯ā§āĻā§āĻ¤ āĻšāĻ¤ā§ āĻā§āĻ°ā§āĻˇā§āĻŽ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨), āĻ¤āĻŦā§ āĻāĻ āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤āĻāĻŋ āĻ
āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻ¸ā§āĻŽāĻ¯āĻŧāĻāĻ° āĻāĻāĻ¤ā§āĻ° āĻ¸āĻžāĻĨā§āĻ āĻāĻŽāĻžāĻā§ āĻĒāĻ°āĻŋāĻāĻ¯āĻŧ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻāĻŋāĻ¯āĻŧā§āĻā§, āĻāĻ¤āĻŋāĻšā§āĻ¯āĻāĻ¤ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻāĻŽāĻžāĻ° āĻ
āĻāĻŋāĻā§āĻāĻ¤āĻž āĻĨā§āĻā§ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯āĻāĻžāĻŦā§ āĻāĻ˛āĻžāĻĻāĻžāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com