\BS=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  b in Percent   !-A single Rule. For now, only single branches 0 can be matched, not whole subtree structures "#$%&'()*A complete grammar file +OMethods to get the initial garden and the updated code when a plant multiplies ,-:Called at the beginning of a season, to aquire the garden .=Given a plant, returns the genome to be used for a seedling. /Text to display on the screen 0Main loop observers 124Called once per season, before the main loop starts 3ACalled once per tick, with the current tick number corresponding 1 light angle and the current state of the garden 4?Also called once per tick, with a function that calculates the < information that should be displayed given a point in time 5ECalled before the main loop quits, with the last state of the garden 6'Called once before program termination 7$Representation of what is on screen 89:;<=>?Named variants of a Plant, for more expressive type signatures ?:A GrowingPlant can be growing in one of these three ways: @'value indicates the current state [0..1] A#value indicates the growth target BC=A straight, untagged plant with length zero and no branches. DE!a bit redundant, but what shells FGHIJK,Sideways position, relative to Plant origin LVertical distance from bottom MDistance from root NOA plant, which is PAa stipe with a length (factor of stipeLength), an angle relative ? to the parent stipe and a list of plants sprouting at the end QRSTUVWANamed variants of a Planted, for more expressive type signatures XA plant with metainformatoin YZ%Position in the garden, interval [0,1] [$Id of the user that owns this plant \Name of the owner of the plant ]Lsystem in use ^!Actual current form of the plant _`@Named variants of a garden, for more expressive type signatures aRA list of plants, together with their position in the garden, in the interval [0,1] b Light angle c User Tag defd  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefbcba`_XYZ[\]^WVOPQRSTUCDEFGHIJKLMN?BA@>=789:;<0123456+,-./d*)(ef!"#$%&'   b    !"#$%&'"#$%&'()*+,-./,-./0123456123456789:;<89:;<=>?BA@@ABC DEFGHIJKLMNDEFGHIJKLMNOPQRSTUPQRSTUVWXYZ[\]^YZ[\]^_`abcdef gKPuts the length of the current segment in the additional information field hijklm-Apply a function to each Planted in a Garden nQApply a function to each Planted in a Garden, with an extra argument from a list 4You need to make sure that the list is long enough! o+Apply a function to the Plant in a Planted ghijklmno ghijklmno ghijklmno ppppqrstuv*Light and growths interpolation frequency w&Plant length growth per Day and Light M1 means: Can grow one stipeLength during one day, when catching the sunlight 3 with one branch of (projected) length screenwidth x/Plants up to this size get an boost in growths yAMinimum growths for plants of size less then smallPlantBoostSize zgCost (in light units) per (sum for all branches (length * distance), to limit the growth of the plants {9Cost (in length growths equivalent) per seed to be grown |HBranch translucency. Proportion of light that is let through by a plant }Length of one day, in seconds ~ 5Minimum radial angular distance between two branches qrstuvwxyz{|}~qrstuvwxyz{|}~qrstuvwxyz{|}~  from http: www.pdas.com/ lineint.htm ALines are annotated with its plant, identified by the extra data !Add lightning from a given angle FAnnotates each piece of the garden with the amount of line it attacts ;Helper to apply a function that works on lines to a garden Slightly shifts angles IFor a Garden, calculates the maximum size to the left, to the right, and  maximum height   1Length reductions are silenty turned into no-ops  JGiven the fraction of the time passed, returnes the angle of the sunlight "Calculates the length to be grown EFor a GrowingGarden, calculates the current amount of light and then ? advance the growth. This ought to be called after applyGenome =For all Growing plants that are done, find out the next step N If new plants are to be created, these are returned via their position, next  to their parent plant. IApplies an L-System to a Plant, putting the new length in the additional  information field EApplies Growth at given fraction, leaving the target length in place CLets a garden grow for the given number of days, while keeping the & observer informed about any changes. Run in real time, e.g. call  *Who to notify about the state of the game !Where do get the plant code from Maximum days to run     !"#$%&'()*+,,-./012345567899:;<=>??@ABCDEFGHIJJKLMNOPQRSTUUVWXYZ[\]]^_`abcdefghijklmnopqrstuvwxyz{|}~   L-seed-0.2Lseed.Geometry.Generator Lseed.DataLseed.Data.FunctionsLseed.Grammar.ParseLseed.ConstantsLseed.Geometry Lseed.LSystemLseed.StipeInfo Lseed.LogicLseed.MainloopGeometryGenerator translatedrotatedaddLinerunGeometryGenerator LengthDescrAdditionalRelative AdditionalAbsolute GrammarActionBlossom AddBranches SetLength ConditionNumCond UserTagIsOrAndAlwaysCmpGEGreaterEqualsLessLE Matchable MatchDistance MatchAngleMatchDirectionMatchSubLength MatchLength MatchSubLight MatchLight GrammarRulegrName grPrioritygrWeight grConditiongrActionWeightPriority GrammarFile GardenSource getGardengetUpdatedCodegetScreenMessageObserverobInitobStateobGrowingState obFinished obShutdown ScreenContentscGarden scLightAnglescTime scMessageAnnotatedPlant GrowingPlant GrowthState GrowingSeed EnlargingToNoGrowth StipeInfosiLength siSubLengthsiLight siSubLightsiAngle siDirectionsiOffsetsiHeight siDistancesiGrowthPlantpDatapLengthpAnglepUserTag pBranchesAnnotatedPlantedGrowingPlantedPlanted plantPosition plantOwnerplantOwnerNamegenome phenotypeAnnotatedGarden GrowingGardenGardenAngleUserTagconstGardenSourcedefaultPriority defaultWeightplantPieceLengthsplantWeightedPieceLengthsweightedPlantLength plantLength plantTotalSumsubPieceAccumulate mapGarden zipWithGarden mapPlanted parseGrammar groundLevelbudSize stipeLength blossomSize stipeWidth ticksPerDaygrowthPerDayAndLightsmallPlantBoostSizesmallPlantBoostLength costPerLengthseedGrowthCost lightFalloff dayLengthminAngleLinePoint crossPointplantedToLinesplantToGeometry gardenToLines lightenLines lightPolygonsallKindsOfStuffWithAngle lightenGardenmapLine gardenOffset applyLSystem conformsTocalcLengthDescrannotateGarden annotatePlanttimeSpanFractionformatTimeInfo lightAngleremainingGrowth growGarden applyGenome growPlanted applyGrowth applyGrowth' lseedMainLoop transformed inititalPlant nullObserverParserpFilepRule pConditionpActionpBranchpGrowpBlossompSetTageps tickLength lineLengthwindychooseWeighted normAngle doesBlossombaseGHC.Conc threadDelay