text:
Pikmin franchise strategy guide/Treasure

In both Pikmin games, the goal of the game is to collect as much "treasures" as possible. In Pikmin 1, these "treasures" are the 30 parts of Captain Olimar's ship, the Dolphin. In Pikmin 2, these are actually treasures. To the everyday eye, however, the treasures are everyday, usually USA-based, objects.

Parts of the Dolphin
There are a total of 30 parts of the Dolphin.

Required Parts (25)

 * Main Engine: The very first, and most important, part in the game is the Main Engine, found always on Day 1, in the Impact Site.  It is required to make the ship blast off.  No enemies are encountered on the way to the Engine, but Olimar meets Red Pikmin on the way.  The loud Engine appears on the bottom of the ship.

 * Positron Generator: The Mad Scientist-remnsicient Positron Generator is the only other part in the Impact Site.  All colors of Pikmin are required to receive it, and it lies in the jaws of a Pearly Clam Clamp.  The Clam Garden itself is guarded by either a Mamuta (even days) or a Goolix (odd days).

 * Eternal Fuel Dynamo: The giant battery-like Eternal Fuel Dynamo is usually the third part acquired.  It is found wide out in the open in the Forest of Hope.

 * Shock Absorber: The pressure-resistant Shock Absorber, which closely resembles the Gravity Jumper, is found near the Nova Blaster in the Forest of Hope.  Of the two ways to reach the Shock Absorber, the earliest way possible is by throwing any color Pikmin onto the cliff next to the Nova Blaster, then taking Olimar up a log in the clearing with the Eternal Fuel Dynamo.  The later--but easier--way is by simply throwing Blue Pikmin onto the cliff near the log.

 * Whimsical Radar: The second-most important part of the ship (game-wise) is the Whimsical Radar, found atop the area border in the Forest of Hope.  Acquiring the Radar is one of the requirements to reaching the Forest Navel, and enables the Y Button command.  This command opens up a map of the area that shows the locations of walls, parts, Olimar, Pikmin, the Onions and the Dolphin, and water.  Yellow Pikmin are required to bring down the Radar.  The Whimsical Radar appears on the side of the Dolphin.

 * Geiger Counter: The elusive Geiger Counter, found in the Forest of Hope, has been swallowed by a Burrowing Snagret, a nasty, powerful enemy.  The Burrowing Snagret itself is in a whole flock of snagrets, and is located on the edge of a cliff.  All Pikmin colors are required to bring the Counter to the ship.  On the ship, the Counter appears on the compartment lid.

 * Radiation Canopy: Appearing surprisingly bigger before reaching the ship, the Radiation Canopy is found in the outskirts of the Forest of Hope.  Guarding it is a brutal insect known as an adult Armored Cannon Beetle.  Although the defeat isn't required, it is a great help to rid of the pest before removing the part.  Blue Pikmin are required to reach it.  On the ship, the Canopy appears atop Olimar's Cockpit.

 * Sagittarius: One of the two jewels in the game, the Sagittarius is found in the Forest of Hope.  Blue Pikmin are required to achieve it.  On the Dolphin, the Sagittarius appears as a small jewel.

 * Extraordinary Bolt: The Extraordinary Bolt...resembles a very large bolt.  Found near the Whimsical Radar in the Forest of Hope, the bolt is "supposed" to be very extraordinary.  Or so says the person who sold it to Olimar at a very expensive price.

 * Analog Computer: The Analog Computer is one of the two Computers in the game.  It is found in the outskirts of the steppe found in the Forest Navel.  Both Blue and Red Pikmin are required to bring it back to the Dolphin.  The Analog Computer combines with the regular computer to make a very smart, complex, and emotional complex computer with an attitude.

 * Anti-Dioxin Filter: The large Filter is found near the Gravity Jumper, in the pool of Wollywogs found in the Forest Navel.  On the Dolphin, the Filter encompasses the top half of the ship's outer hull (the Gloun Drive encompasses the lower half).  It filters out toxic exhaust released by the ship, enabling it to not damage a local environment.

 * Libra: The other jewel in the game is the Libra, found in the Forest Navel's outskirts, near the Analog Computer.  All colors of Pikmin are required to bring it back to the Dolphin, which then places it on the side opposite of the Saggittarius.

 * Guard Satellite: A vital part in the game is the Guard Satellite, found in the Forest Navel's outskirts opposite the steppe.  The Guard Satellite is held by one of the bosses in the game, the dreaded Beady Long Legs, a colossal, spider-like monster.  It may only be combated by Yellow Pikmin, but the part requires Red Pikmin to carry it back.  The Guard Satellite floats to the side of the Ship, opposite the Interstellar Radio.  Olimar notes that it must have been faulty before he was stranded, because it should have warned him of the asteroid.

 * Omega Stabilizer: The large Omega Stabilizer is a vital part found in the Forest Navel's dark depths.  Amidst the Wollywogs scattered around the dark area is a Puffstool, one of the bosses in the game (although not given acknowledgement like Beady Long Legs), which contains the Stabilizer.  The Puffstool, which has the capability to turn any Pikmin into Purple, or Zombie, Pikmin, is best trampled with Red Pikmin, due to the firey hazards located in various spots.  Red Pikmin are required to carry the part away.  On the ship, the Stabilizer forms two of the four wings around the engine.

 * Gravity Jumper: The Spring-resembling Gravity Jumper is found in the Forest Navel, surrounded by the pool.  Blue Pikmin are needed to take the part across the pond, and Red Pikmin are needed if the Fiery Blowhog Pit isn't empty.  The Gravity Jumper propels the ship into space by using the gravity of nearby planets as a slingshot.

 * Automatic Gear: The conspicuous Automatic Gear is located in the Forest Navel, very close to the Blue Pikmin.  Surrounded by Shearwigs, the safest way to the gear is via a stick on the nearby cliff (this happens to be the only way).  The grubs must be removed to take the gear to the ship.  The Automatic Gear supposedly works as an Auto-Pilot, enabling Olimar to focus on the finer points of flying.

 * Ionium Jet #1: The Ionium Jet #1 is located smack dab on the Forest Navel's steppe.  As such, Blue Pikmin are needed to extract it.  The hourglass-shaped jet is located to the side when on the Dolphin.  The Ionium Jet's primary use is to launch the ship into space.

 * Interstellar Radio: The other computer part in the game is the Interstellar Radio, located in the watery outskirts of the Distant Spring.  A white version of the Analog Computer, the Radio is found inside a low-flying Puffy Blowhog vulnerable to Blue Pikmin.  The Blue soldiers are also required to take the Radio back to the ship, where it then floats on the side opposite the Guard Satellite.  Olimar notes that the Radio could send a distress signal to Hocotate, but it would take too long for a rescue to reach him.

 * Bowsprit: The large Bowsprit is found in the Distant Spring.  It is guarded by an Armored Cannon Beetle, which happened to eat it.  As such, the monstrosity must be defeated.  Red Pikmin are required to take the part back to the Dolphin.  The Bowsprit covers the entire nose of the ship.  The part enables smoother flying in space.

 * Repair-Type Bolt: The Repair-Type Bolt is usually one of the first parts acquired in the Distant Spring, as it is visible upon landing.  Resembling a hockey puck with a wind-up key, the Gear requires Blue Pikmin to capture.

 * Ionium Jet #2: The other Ionium Jet is found in the Distant Spring.  It may be found in the waters deep in Bulbear territory, but requires Yellow Pikmin to reach.  This is one of the two required uses of Candypop Buds in the game.  The other is the Analog Computer.  A second use of the Ionium Jets is to release exhaust.

 * Chronos Reactor: The Chronos Reactor is located on a cliff near the second Exhaust Valve.  Blue Pikmin are required to capture the Reactor.  Upon being attached to the ship, the Chronos Reactor covers the Main Engine, making blast off much quieter.  The reactor converts the space-time continuum into energy for flight.

 * Gloun Drive: The immense Gloun Drive is found in the woody area of the Distant Spring, near the Zicronium Rotor and Pilot's Seat.  It requires Blue Pikmin to enable access to the Drive via a bridge.  The drive holds a good amount of the Dolphin's hull, and the possession of the Drive, along with the Filter, prevents a view of the ship's inside.

 * Zicronium Rotor: The Zicronium Rotor is found very close to the Gloun Drive and Pilot's Seat.  The Rotor requires little work after the acquisation of the Drive, but needs Blue Pikmin.

 * Pilot's Seat: The Pilot's Seat (which resembles the Space Float) is found in the walled area-filled section that also holds the Gloun Drive and the Zicronium Rotor (in the Distant Spring).  It is simply the cushion that Olimar sits on.

Optional Parts (5)

 * Nova Blaster: The rocket-like Nova Blaster is found in an alcove located in the Forest of Hope.  It is used to fire at objects, such as asteroids.

 * Space Float: The lifesaver called the Space Float is used incase of emergancy landing in water.  It also is used in case "Master Swimmer" Olimar needs help in the water.  The Space Float, found in the Forest Navel, has been devoured by a Breadbug.

 * UV Lamp: A giant lightbulb of a part, the UV Lamp is located in the Distant Spring atop a steppe-like maze.  It is a powerful light used for many things, such as tanning.

 * Massage Machine: The circular Massage Machine is very large, and in very dangerous territory.  Located in the beach on the other side of the lake in the Distant Spring, the closest part to it is the Interstellar Radio.  Guarding it are several Shearwigs and a Spotty Bulbear.  The main use of the Massage Machine is to massage.

 * Secret Safe: The penultimate Secret Safe, which is simply a giant Piggy Bank, holds all of Olimar's pokos.  It is the final part in the game--it has been devoured by the Emperer Bulblax found in the Final Trial.

Earth's Treasures
In Pikmin 2, the company Olimar works for goes into debt. After his ship, the Dolphin, is forced into being trashed, the debt leaves 10,000 pokos to be collected. With the help of new employee Louie, the original Pikmin, and the new Purple and White Pikmin, Olimar must collect the Terrestrial Treasures.

Succulent Series
This series is full of tasty fruits and berries.
 * Cupid's Grenade (Cherry): The Cupid's Grenade, which is really just a cherry, is worth 20 pokos.  Located in the Awakening Wood's Snagret Hole, it is found on one of the darker floors.  Olimar worries that one of the pits may be inedible.

Sales Pitch: Fate's tapestry has unraveled. Tomorrow weeps. Romance has fallen, love is madness. ... To mend the rift between two cross lovers, this is the ultimate weapon in cupid's arsenal.

 * Sunseed Berry (Strawberry): The large Sunseed Berry is an early treasure found atop a low cliff in the Awakening Wood.  Although this is but a sinister foreshadowing of the trials to come, it poses as a good test for beginners.  Olimar says that he received it on a beautiful day, and the treasure reminds him that nature can be wonderful even on a hostile planet.  The Sunseed Berry fascinates him.  It is worth 170 pokos.

Sales Pitch: This fruit is born with bright sunlight and cheerful warmth. Come, all you naysayers! One bite and even sad sacks will become foolhardy optimists. Eat one today and change your life!

 * Combustion Berry (Strawberry): The very large Combustion Berry is a later treasure found in the Awakening Wood's Snagret Hole, a cave located somewhat near the identical (but smaller) Sunseed Berry.  It is located in a garden void.  Upon collecting it, Olimar decides to take up the special job of tasting everything.  It is worth 190 pokos.

Sales Pitch: Everything is best in moderation. This fruit is the perfect example of too much of a good thing. Its devastating sweetness is like an act of violence on the palate, scouring with all succulence...

 * Seed of Greed (Chestnut): The chestnut called the Seed of Greed is quite hard to locate, being small.  It is found in the Wistful Wild, in the area that was once occupied by a Mamuta or Goolix.  The Seed is worth 70 pokos.  The plant that the seed derives from has berries that suck the nutrition from nearby plants.  Upon collecting it, Olimar wonders why the creatures in the Wistful Wild (which was once the Impact Site) have grown so hostile.

Sales Pitch: This item's docile efficiency evokes images of wealth and greed. Behold: life's essence!

 * Disguised Delicacy (Kiwi): The Diguised Delicacy, which is really just half of a kiwi, is found early in the Dream Den.  Upon acquiring this 40-poko fruit, Olimar thinks up a plan to cultivate the ample Terrestrial fruit on Hocotate, as it would rid the planet of world hunger!  He then laments about knowing nothing about agriculture.

 * Insect Condo (Apple): The Red Delicious Apple, which is called the Insect Condo, is worth 40 pokos, and is found on the 5th Sublevel of the Dream Den.  The Dream Den itself is found in the Wistful Wild.

 * Citrus Lump (Orange): The Citrus Lump is a treasure found very early in the game.  The rotten Orange, worth 180 pokos, is found in the Emergence Cave shortly before the Violet Candypop Buds.  The Emergence Cave, in turn, is found in the Valley of Repose.

Sales Pitch: The thick, acidic rind of this item is proof positive of its highly elevated mental functions. When I assess it, I am somehow reminded of a particularly hateful superior. Hurry up and devour it!

Earth Child Series
This series holds many vegetables and other plants.
 * Spiny Alien Treat (Artichoke): The Spiny Alien Treat, found in the Valley of Repose, is an artichoke worth 50 pokos.  It may be acquired by having White Pikmin search out atop a cliff overlooking the landing site.

 * Anxious Sprout (Asparagus): The Anxious Sprout, worth 50 pokos, is in actuallity nothing but a dried up asparagus head.  Found in a flower pot near the Sunseed Berry, the Anxious Sprout is a good test for beginners who have just received their White Pikmin.

Sales Pitch: A quick-growing plant. Good for garden hobbyists or for a snack. Use it however you see fit!

 * Child of the Earth (Potato): The potato lump, known as the Child of the Earth, is found late in the game, in the Cavern of Chaos.  Worth 40 pokos, White Pikmin are needed to retrieve it, as it is a "Child" of the Earth, found in the soil.

Sales Pitch: This plant has grown fat on the blessings of the land. Its nutritional value must be high!

 * Love Nugget (Tomato): The large tomato commonly known as the Love Nugget is found in the Citadel of Spiders, deep in the Perplexing Pool.  Like many of the plants in the game, the Love Nugget is worth a low amount--40 pokos.  Less than a bottlecap.

 * Infernal Vegetable (Jalapeño): The lean, mean, green vegetable is the Jalapeño Pepper, a.k.a. the Infernal Vegetable.  Located in the Cavern of Chaos, the Infernal Vegetable may be found on the same floor as the Child of the Earth.

 * Anti-Hiccup Fungus (Mushroom): As if Mario weren't covered in mushrooms to work magic, the Anti-Hiccup Fungus is said to cure hiccups.  Worth 30 pokos, the mushroom is located right next to the Dream Den.

Sales Pitch: One bite of this and the surprisingly earthy flavor will send your hiccups packing! Older individuals with a history of heart conditions should devour this with caution!

 * Toxic Toadstool (Toadstool): The Fly Agaric Toadstool, an extremely poisonous mushroom related to the fatal Death Cap, stars in the game as well.  Found partially buried in the White Flower Garden (located in the Awakening Wood), the oxygen-surrounded toadstool is a good test for beginners who haven't worked with the poison hazard.  Like the Anti-Hiccup Fungus, the Toxic Toadstool is worth 30 pokos.

 * Growshroom (Mushroom): The hallucigenic mushroom in the Nintendo series has had many names.  Of them, Magic Mushroom is the most famous.  Others include Sleepy Toadstools (Legend of Zelda: Link's Awakening), Super Mushrooms (Super Mario Bros.), Invincishrooms (Mario & Luigi: Superstar Saga), and now Growshrooms.  The Growshroom is Pikmin 2's hallucigenic mushroom, based on the Super Mushroom (the spots are slightly visible).  Olimar, having hallucinations, thinks he grows in size upon eating the mushroom.  It is worth 50 pokos.

Sales Pitch: Eat one of these and grow to twice your normal size! Perfect for skinny beings unable to pack on any girth.

 * Onion Replica (Onion): The misnomer of a treasure, the Onion Replica is an actual onion, dug up behind the landing site at the Perplexing Pool.  Olimar names it "Replica" to differentiate it from the Pikmin's Onions, which were named after the smaller onions of Hocotate.  Olimar reviews the Pikmin basics upon discovering the true onion.  It is worth 30 pokos.

Veggie Maniac's Series
This series is full of flora not fitting into the Succulent and Earth series.
 * Science Project (Clover): The four-leaf clover is a light, 20 poko treasure found in the Snagret Hole.  It is quite light, and Olimar decides to give it to his son.

 * Pilgrim Bulb (Gourd): A premature gourd, the Pilgrim Bulb is found underground.  It is worth 55 pokos.

 * Arboreal Frippery (Maple Leaf): A very light, easily missed treasure in the Perplexing Pool's Shower Room.  Located on the peaceful, flower-filled floor, the leaf (probably maple) is hidden in a sewer pipe.  It is worth 10 pokos.

Sales Pitch: Perfect for those who love natural designs in their home, this leaf applique is a bargain! Use it in pieces, or cover an entire wall in leafiness!

 * Conifer Spire (Pinecone): The Conifer Spire is a normal pinecone, found in the autumn existance of the Wistful Wild.  It is worth...15 pokos, and is found near the Hole of Heroes.

Sales Pitch: Life is full...but short! Is this one of those short-lived life-forms that changes shape as it ages? Even though it is dried out, it has not lost its unique charm.

 * Armored Nut (Acorn): The little acorn, hard to find, is located between the Conifer Spire and the Seed of Greed in the Wistful Wild.  Swallowed by a Creeping Chrysanthemum, it is found in the old landing site from the times of Pikmin 1.  It is worth 60 pokos.

Sales Pitch: This common, ordinary nut somehow reminds me of myself and fills me with sadness.

 * Corpulent Nut (Acorn): The bigger acorn, the Corpulent Nut is a corpulent acorn.  It is found early in the Hole of Heroes, and is worth 80 pokos.

Sales Pitch: This fellow has consumed more nutrients than necessary and now possesses superior fatness. In our harsh world, this is a lifestyle to envy!

Gourmet Series
This series is full of tasty food, minus sweets.
 * Meat of Champions (Ham): The giant Meat of Champions has a size that can rival the Gloun Drive.  One of the many "treasures" in the Giant Breadbug's lair, the ham of the Glutton's Kitchen is a big one.  It is worth 35 pokos.

 * Hideous Victual (Fried Egg): The burnt, Sunnyside-Up Egg is one of the many huge foods found in the Giant Breadbug's Lair in the Glutton's Kitchen.  Worth 100 pokos, it is worth the trouble (or at least when compared to the above three series).

 * Meat Satchel (Hot Dog): The large Meat Satchel is easily mistaken for a dead body of a Burrowing Snagret.  Engulfed by a Snagret, it may be found in the Snagret Hole.  40 pokos is what it's worth.

 * Taste Sensation (Sushi): The Taste Sensation is found in the Snagret Hole, on the same floor as the Combustion Berry.  Relatively near the landing site, the senstational sushi is worth 40 pokos.

 * Triple Sugar Threat (Ice Cream Shishcabob): Triple Sugar Threat=Snagret.  The Triple Sugar Threat, like the Meat Satchel, was devoured by a Snagret in the Snagret Hole.  It is worth 60 pokos.

Sweet Tooth's Hell Series
Full of tasty treats, pastries and chocolates populate the large Sweet Tooth Series.
 * Compelling Cookie (Cookie): The hard vanilla cookie with a spiral design is the Compelling Cookie, located in the Perplexing Pool's Submerged Castle.  Worth 10 pokos, one must decide if it is worth the trouble.

 * Sales Pitch: Is your plate conservative or adventuresome? Either way, this taste will ravish your mouth. For those who savor flavor, this new delicacy will have you questioning your ideas of taste.

 * Impenetrable Cookie (Cookie): The compelling hard vanilla cookie is now burnt.  The Impenetrable Cookie is found in the Cavern of Chaos, and is worth 25 pokos.

 * Bug Bait (Vanilla Wafer): The Bug Bait is a vanilla wafer found inside a Fiery Bulblax on the first floor of the Submerged Castle.  It is worth 15 pokos, and its worth is questionable.

 * Sales Pitch: I have a bad feeling about this particular item... I want to sell it with all possible speed... Bzzrpt! Bargain price available. Please! Buy this quickly! NOW!

 * Imperative Cookie (Pinwheel Cookie): Yet another cookie residing in the horrid Submerged Castle.  It is worth 25 pokos.

 * Comfort Cookie (Marble Cookie): Is it a cushion?  Or a cookie?  The Comfort Cookie is found in the Submerged Castle, and is worth 10 pokos.

 * Sales Pitch: With this, your legs will not fall asleep even when you sit with your feet tucked beneath you. The sugary material of this cushion infuses your whole body with warmth and comfort.

 * Succulent Mattress (Marble Cookie): The Succulent Mattress is a larger version of the Comfort Cookie.  It is worth 50 pokos.

 * King of Sweets (Dark Chocolate): Found in the Citadel of Spiders, the King of Sweets is basically Valentine Chocolate.  It is worth 15 pokos.

 * Enamel Buster (Chocolate): Found in the Cavern of Chaos, the Enamel Buster is another chocolate.  It is worth 60 pokos.

 * Diet Doomer (Strawberry Chocolate): An odd, pink-colored Valentine Chocolate, the Diet Doomer is found in the Submerged Castle.  It is worth 25 pokos.

 * Pale Passion (White Chocolate): The white chocolate called the Pale Passion is found in the Submerged Castle.  It is worth 25 pokos, like the Diet Doomer.

 * White Goodness (White Chocolate): The white chocolate with chocolate syrup is known as the White Goodness.  It is worth 60 pokos, like the Enamel Buster.

 * Chocolate Cushion (Chocolate Donut): The donut covered with chocolate icing is known as the Chocolate Cushion.  Found in the Submerged Castle, it is worth 40 pokos.

 * Sweet Dreamer (Strawberry Donut): The strawberry-iced donut is found in the Submerged Castle.  Worth 40 pokos, Olimar decides to give the Sweet Dreamer to his daughter.

 * Confection Hoop (Pastry Wheel): The wheel of sugary pastry, known as the Confection Hoop, is found in the Submerged Castle.  It is worth 60 pokos.

 * Pastry Wheel (Pastry Wheel): The wheel of more sugary pastry, known as the Pastry Wheel, is found in the Submerged Castle as well.  It is worth 35 pokos.

New Discovery Series
This series is full of scientific discoveries.
 * Possessed Squash (Pumpkin): The Jack-o-Lanturn, known as the Possessed Squash, is found in the Dream Den, usually caught by a Dweevil.  It is worth a wealthy 180 pokos.

 * Fossilized Ursidae (Wooden Bear Statue): Found atop a cliff near the Emergence Cave, the wooden bear requires Yellow Pikmin to catch.  It is worth 160 pokos.
 * Sales Pitch: Put this in a natural history museum and watch the visitors line up waving money! This giant statue was found on a savage planet and comes with its own rumored curse! Does it really come alive under a full moon? Own it and find out!

 * Colossal Fossil (Skull): Is it a prehistoric human?  Is it a simian?  Is it a rodent?  The Skull could be any of these, and is found deep in the Bulblax Kingdom, found in the Awakening Wood.  It is worth 140 pokos.
 * Sales Pitch: A colossal fossil for collectors of bone. Bones this big make bone houses seem not so crazy!

 * Leviathan Feather (Feather): The giant feather is found in the Snagret Hole's attic.  Worth 10 pokos, it is an easy find.

 * Olimarnite Shell (Ammonite Fossil): The Olimarnite Shell is a 40-poko fossil found in the Bulblax Kingdom.  Although not held by an enemy, the Olimarnite Shell is still hidden from the world.  White Pikmin are required to sniff out the treasure.

 * Fortified Delicacy (Shell): The Fortified Delicacy is a crustacean or mollusk's disposed shell.  Worth 60 pokos, the shell may be found buried in the Perplexing Pool, near the Shower Room.

 * Scrumptuous Shell (Scallop Shell): Remniscient of the Pearly Clam Clamp from the original Pikmin game, the Scrumptuous Shell is the top half of a scallop shell.  It is worth 60 pokos, and may be found in the Shower Room.

 * Memorial Shell (Scallop Shell): The Memorial Shell is the bottom half of a scallop shell.  It is worth 100 pokos (there is a pearl in it).  If one is looking for the shell, it may be found in the Citadel of Spiders.

 * Mysterious Remains (Lobster Claw): Very mysterious, the Mysterious Remains is actually the disembodied claw of a lobster.  It may be found inside the belly of an Emperer Bulblax inside the Cavern of Chaos.  It is additionally worth 150 pokos.

Ancient Secrets Series
This series holds archeological treasures, and is the counterpart of the paleontological treasures of the Discovery Series.
 * Crystal King (Crystal): The Crystal King is a large crystal found deep in the Bulblax Kingdom, inside an Orange Bulborb.  It is worth a wealthy 110 pokos.

 * Future Orb (Crystal Ball): The Future Orb is found later in the game, in the Dream Den.  Swallowed by a Greater Spotted Jellyfloat, it is worth a hefty 200 pokos.

 * Gyroid Bust (Gyroid): A Gyroid is a fire hydrent-like idol from the Animal Crossing games.  The Gyroid Bust is a cruel statue of one.  Found on the same floor as the Forged Courage, the Gyroid Bust is eerily located on a shrine.  It is worth 250 pokos.

 * Unknown Merit (Yen Cpin): From China, the Unknown Merit is a coin found in the Bulblax Kingdom.  It is worth 100 pokos.

 * Lustrous Element (Gold Coin): The priceless gold coin is called the Lustrous Element.  It is found late in the game, in the Hole of Heroes.  Swallowed randomly by either a Burrowing Snagret or a Pileated Snagret, the Lustrous Element is worth 1,000 pokos.

 * Mirrored Element (Silver Coin): Found in the Dream Den, the Mirrored Element is a silver version of the Lustrous Element.  It is worth 300 pokos.

Rebar Alloy Series
This series is full of metal, cooking-related treasures.

ARTICLE UNDER CONSTRUCTION


text:
The Legend of Zelda: Ocarina of Time/The Spirit Guide

The Spirit Guide is one of the three friendly Poes in The Legend of Zelda: Ocarina of Time. The others were the composers Sharp and Flat, although at first they attack Link. The Spirit Guide lives in the Haunted Wastelands, and can only be seen while using the Lens of Truth. It is the second trial in the desert, and leads Link to the Desert Colossus, although it actually seems to just go in circles.

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
The Legend of Zelda: The Wind Waker/Bosses/Jalhalla

Jalhalla is a fictional ghost from The Legend of Zelda: The Wind Waker.

Description
Jalhalla is the king of Poes (and apparently Ghinis as well), and so is very large, as is with most of the series' rulers. Jalhalla resembles a gigantic version of the Poes from Wind Waker, but has a differently shaped mask and a horribly bloated stomach.. Jalhalla's name is probably based on Valhalla, the Norse heaven for heroes and home of Odin. Jalhalla himself was probably based on Boolossus from Luigi's Mansion, as both are several ghosts merged together. The battle music when fighting Jalhalla is reminiscent of a French accordion.

Battle
Jalhalla is the boss of the Earth Temple. He was sent by Ganondorf to destroy the Earth Sage and last of the Zoras, Laruto. He also attempted to destroy Link and Medli when they tried to infiltrate the temple. Jalhalla could be beaten by reflecting light off of the Mirror Shield onto him, in which he would solidify. Once solid, Jalhalla could be thrown at a spiked pillar. On this occasion, Jalhalla would pop into tons of Poes, all running frantically. After a while, the Poes would merge back into Jalhalla. If all the Poes were to die, then Jalhalla would be powerless (Jalhalla himself was simply the cursed mask; the Poes were his body). When finding that his body's Poes were gone, Jalhalla attempted to escape through the roof, but a ray of light turned him solid as he was in the air. Jalhalla was destroyed when he crashed back into the ground and shattered.

He returns in Four Swords Adventures and is fought twice. The first time is just his mask which shoots fire and spins around, and is defeated by utilising the torches to reveal itself and then attacking. In his second attack he has his whole body. He attacks now with gusts of wind and with his lantern. Once again the torches must be lit to unmask it, but after attacking the body the ghost would swallow the unfortunate Link. Inside the Game Boy Advance the swallowed Link(s) must attack Jalhalla's soul. After that is destroyed he blows up for good.


text:
Talk:BASIC Programming/External Libraries

this page is wrong
missing content 148.135.104.65 (discuss) 07:52, 13 March 2024 (UTC)


text:
Wikibooks:Requests for import/Archives/2024/January

Translation:Manshu
Hello. In Wikisource there is a nearly complete translation of the old Chinese text Man shu, translated by a Wikisource user, see s:Translation:Manshu. Unfortunately, this text does not seem to be in accordance with Wikisource rules and it is quite possible it will be deleted, see the deletion discussion. At the same time it has been suggested there that it could be moved to Wikibooks. For this reason I would like to ask whether Wikibooks are interested in this text. -- Jan.Kamenicek (discuss • contribs) 23:07, 14 January 2024 (UTC)

 * Thanks for the heads-up! I do believe Wikibooks accepts annotated texts per WB:AT, as long as the annotation/commentary adds something additional (and this seems to be the case per the linked discussion). If it does get deleted at WS, I think it would be fine here. Cheers —Kittycataclysm (discuss • contribs) 23:32, 14 January 2024 (UTC)
 * @Kittycataclysm: The discussion on enWS is going to be closed soon, and barring surprise developments the outcome looks like delete. If Wikibooks wants this text it would be preferable if you could import it before we close the discussion so we don't have to do a later undelete+redelete dance. Xover (discuss • contribs) 09:06, 21 January 2024 (UTC)
 * ✅! Now at Manshu. It will need some adjusting of templates etc. —Kittycataclysm (discuss • contribs) 20:55, 21 January 2024 (UTC)


text:
User talk:81.15.98.38

Wasn't logged in
Hello, just wanted to say this was my edit and I was not logged in. Huldar98 (discuss • contribs) 10:50, 13 March 2024 (UTC)

title: User talk:81.15.98.38


text:
User:Jerimee/sandbox

Phonics Poems
Wikijunior:Early_phonics_readers

BL and BR
Boy Blue boldly brags Of brute bricks he had broken His brother then nags: "Blame the babe brashly spoken

Of broke blocks he blabs! Now bring a brown broom to brush And blow clean the slabs The blasted bricks make me blush."

OI
''Note, the poem below is constructed as if words like "boil" and "oil" are two syllables. AABCCCB rhyme scheme''

What turmoil I hear Moist noise anoints my ear A toiling pot Of boisterous oils Conjoins and embroils A noisy soup boils Boil it hot

''Fix it so it works with "coil" as one syllable. AABCCCB rhyme scheme with 6646664 syllable sequence. I did not consciously consider the qualitative metre of stressed and unstressed syllables.''

What moist turmoil I hear Noise loiters in my ear A toiling pot Of ointments and choice oils Conjoin as it embroils A boisterous soup boils Noisy and hot Wikijunior:The Soup Pot

title: User:Jerimee/sandbox


text:
Wikijunior:Boy Blue boldly brags

This is an early phonics reader to teach the digraphs 'bl' and 'br'.

Boy Blue boldly brags
Boy Blue boldly brags

Of brute bricks he had broken

His brother then nags:

"Blame the babe brashly spoken

Of broke blocks he blabs!

Now bring a brown broom to brush

And blow clean the slabs

The blasted bricks make me blush."

title: Wikijunior:Boy Blue boldly brags


text: Category:Book:Wikijunior:Boy Blue boldly brags


text:
Wikijunior talk:Boy Blue boldly brags

New Reader
This reader is designed to teach the digraphs "bl" and "br." Each line alternates between 5 and 7 syllables and the rhyme scheme is ABAB CDCD.

While the reader appears in Category:Shelf:Wikijunior_early_reader_books/all_books, I did not add it to Wikijunior:Early_phonics_readers. I don't know how to add it to Shelf:Wikijunior early reader books or the header of Category:Shelf:Wikijunior_early_reader_books.

I attempted to assign the reader a completion "Status" indicator of 25% - I did this arbitrarily. I authored this reader using the other wikijunior early phonics readers as examples. Jerimee (discuss • contribs) 00:32, 14 March 2024 (UTC)

title: Wikijunior talk:Boy Blue boldly brags


text: Category:Serrano recipes

title: Category:Serrano recipes


text: Category:Ancho chile recipes

title: Category:Ancho chile recipes


text: Category:Garam masala recipes

title: Category:Garam masala recipes


text:
Wikibooks:Reading room/Archives/2024/January

Reusing references: Can we look over your shoulder?
Apologies for writing in English.

The Technical Wishes team at Wikimedia Deutschland is planning to make reusing references easier. For our research, we are looking for wiki contributors willing to show us how they are interacting with references.

 * The format will be a 1-hour video call, where you would share your screen. More information here.
 * Interviews can be conducted in English, German or Dutch.
 * Compensation is available.
 * Sessions will be held in January and February.
 * Sign up here if you are interested.
 * Please note that we probably won’t be able to have sessions with everyone who is interested. Our UX researcher will try to create a good balance of wiki contributors, e.g. in terms of wiki experience, tech experience, editing preferences, gender, disability and more. If you’re a fit, she will reach out to you to schedule an appointment.

We’re looking forward to seeing you, Thereza Mengs (WMDE)

Proposal to globally ban Guido den Broeder
Hi, this is to let you all know that there is a proposal to ban User:Guido den Broeder at Requests for comment/Global ban for Guido den Broeder. You are receiving this notification as Guido den Broeder has made at least one edit to this wiki as per the Global bans policy. Best, --SHB2000 (discuss • contribs) 05:55, 13 January 2024 (UTC)

 * I have responded on nl:wikibooks. Please stop spamming pings. Guido den Broeder (discuss • contribs) 16:49, 13 January 2024 (UTC)
 * Its the rules, he MUST spam the pings on every wiki you have edited. If you read the message you'd know that. — L10nM4st3r / ROAR at me! 20:32, 13 January 2024 (UTC)

Vote on the Charter for the Universal Code of Conduct Coordinating Committee

 * You can find this message translated into additional languages on Meta-wiki.

Hello all,

I am reaching out to you today to announce that the voting period for the Universal Code of Conduct Coordinating Committee (U4C) Charter is now open. Community members may cast their vote and provide comments about the charter via SecurePoll now through 2 February 2024. Those of you who voiced your opinions during the development of the UCoC Enforcement Guidelines will find this process familiar.

The current version of the U4C Charter is on Meta-wiki with translations available.

Read the charter, go vote and share this note with others in your community. I can confidently say the U4C Building Committee looks forward to your participation.

On behalf of the UCoC Project team,

RamzyM (WMF) 18:07, 19 January 2024 (UTC)


text:
Template:Unblock/testcases

 This blocked user is asking that his or her block be reviewed: User: ([ block log] • [ active blocks] • [ global blocks] • [//tools.wmflabs.org/xtools/autoblock/?project=en.wikibooks.org&user= autoblocks] • contribs • deleted contribs • [ edit filter log] • change block settings • [ unblock])

Request reason:

Note: In some cases, you may not in fact be blocked, or your block has already expired. Please  [ check your block log] . If no blocks are listed, or the latest one has already expired, then you have been autoblocked by the automated anti-vandalism systems.

Administrator use only: If you ask the blocking administrator to comment on this request, please place  on the administrator's talk page. Then replace this template with the following:

If you decline the unblock request, replace this template with the following, substituting  with any specific rationale. If you do not edit the text after "decline=", a default reason why the request was declined will be inserted.

If you accept the unblock request, replace this template with the following, substituting  with your rationale:

title: Template:Unblock/testcases


text: Talk:Professionalism/Salami Slicing and the Least Publishable Unit


text:
User talk:184.94.160.149

March 2024
MathXplore (discuss • contribs) 14:28, 14 March 2024 (UTC)

title: User talk:184.94.160.149


text:
Theory of Formal Languages, Automata, and Computation/Grammars and the Chomsky Hierarchy

Grammars specify how the strings in a language can be generated. Grammars are finite representations of formal languages. In this chapter we describe four broad categories of grammars and corresponding categories of languages that the grammar categories represent. The grammars and languages are ancestrally related and were proposed by Chomsky as potential models for natural language. Thus, the four language (and grammar) classes are known as the Chomsky hierarchy, which are summarized in Figure ChomskyOverview. The broadest class of languages, those with the least restrictive grammars, are the unrestricted or Type 0 languages (grammars).

Unrestricted (Type 0) Grammars and Languages
A grammar is specified by a 4-tuple G = (V, Σ, P, S), where V is a finite set of variables, also called non-terminal symbols; Σ is the finite alphabet of the language being represented, also called the terminal symbols of the grammar; P is a finite set of productions; and S is the start symbol and is a member of V. V and Σ have the null intersection. Each production in P takes the form $$\alpha \rightarrow \beta$$, where $$\alpha$$ is a string of symbols from V+Σ and |$$\alpha$$| > 0; and where $$\beta$$ is also a string of symbols from V+Σ, but |$$\beta$$| $$\geq$$ 0 (i.e., $$\beta$$ can be the empty string, denoted by $$\varepsilon$$). This and no other restrictions is the definition of unrestricted or type 0 grammars (Figure GrammarDefinition). A grammar G specifies the strings of a language L(G) or LG. This definition of a type 0 grammar seems to allow $$\alpha$$ to be a string of only alphabet (terminal) symbols, but I have never seen an example of this in textbooks. An exercise below asks you to reflect on this issue further. Consider this simple grammar, GSimple = (V, Σ, P, S), where V = {S}, Σ = {0, 1}, P = {S $$\rightarrow$$ ε, S $$\rightarrow$$ 0S1}, S is S. There are two productions in this grammar, and we'll often use the 'or' symbol, '|', to refer to multiple productions with the same left-hand side. So, S $$\rightarrow$$ ε and S $$\rightarrow$$ 0S1 are abbreviated S $$\rightarrow$$ ε $$|$$ 0S1. ε signifies the empty string, and is typically not part of the alphabet of a grammar (else it would be in Σ, which is not the case in this grammar). We just need some way of representing 'nothing'. In this example, there is only one variable, and the left-hand side of each production, $$\alpha$$, is a single variable. Beginning with only the start symbol, we can rewrite it using any of the productions that include only the start symbol on the left-hand side. This rewrite will create a string that contains variables and/or terminals. This resulting string is called a sentential form. We can then look at the sentential form created and ask whether any productions can be applied to it. A production can be applied to a sentential form if the production's left-hand side ($$\alpha$$) is a substring of the sentential form. In case of such a match, a new sentential form is created by rewriting the matched substring with the matching production's right-hand side ($$\beta$$), resulting in another sentential form. And this can continue indefinitely, where a sequence of sentential forms (that are the result of s sequence of production applications) are called a derivation, where the last string in the derivation only contains terminal symbols and is a string of the language generated by the grammar (Figures SimpleGrammar and SimpleDerivationTree).

Because there may be multiple productions that have left-hand sides that match a given sentential form, we can write an enumeration procedure, like depth-first or breadth first enumeration, that tries all the relevant productions, and that traces out possible derivation sequences. Enumeration as it is often taught in introductory courses is probably a procedure for enumerating or systematically visiting the nodes of an explicit graphs, but the enumeration procedure for generating a language is better thought of as enumerating an implicit graph (i.e., the “vertices”, that is sentential forms, are generated on demand). Enumerating implicit graphs is also characteristic of many AI problems.

A more complicated grammar, GComplex = (V = {S, A, B, C, D}, Σ = {a}, P, S), due to Hopcroft and Ullman (1979), where P is this set of productions.

1) S $$\rightarrow$$ ACaB

2) Ca $$\rightarrow$$ aaC

3) CB $$\rightarrow$$ DB

4) CB $$\rightarrow$$ E          // FYI: we could summarize productions (3) and (4) as CB $$\rightarrow$$ DB | E

5) aD $$\rightarrow$$ Da

6) AD $$\rightarrow$$ AC

7) aE $$\rightarrow$$ Ea

8) AE $$\rightarrow$$ ε          // ε is the empty string

What language could GComplex represent? Since 'a' is the only terminal symbol, it must be a language of strings that only contain 'a's. Its a fair guess that the number of a's in each string is what determines membership. Lets start seeing what strings of 'a's we are able too derive. Can we derive the string of zero a's, i.e., the empty string? No, since the start symbol is on the left-hand side of only production (1), and an 'a' is introduced right off the bat, and importantly there is no production that removes a's once one is introduced.

Can we derive a string with exactly one 'a'? S $$\rightarrow$$ ACaB using production (1) $$\rightarrow$$ AaaCB using production (2). Indeed, production (2) is the only production that is applicable, but you should confirm that the left-hand side of production (2), 'Ca', is the only left-hand side that matches a substring of 'ACaB'. Again, there is no way to remove an 'a' from 'AaaCB' in order to arrive at string of a single 'a'.

Can we derive a string with exactly two a's? S $$\rightarrow$$ ACaB using production (1) $$\rightarrow$$ AaaCB using production (2) $$\rightarrow$$ AaaDB using production (3) $$\rightarrow$$ AaDaB using production (5) $$\rightarrow$$ ADaaB using production (5) $$\rightarrow$$ ACaaB using production (6) $$\rightarrow$$ AaaCaB using production (2), but again too many a's if two a's is our target. Again, failing to find ways of combining productions to remove a's, this path of rewrites is a deadend. But notice that when we applied production (3) during this sequence of rewrites we had another option available to us -- we could have applied production (4) instead of (3). Lets look at that option instead. S $$\rightarrow$$ ACaB using production (1) $$\rightarrow$$ AaaCB using production (2) $$\rightarrow$$ AaaE using production (4). Continuing from AaaE we have AaaE $$\rightarrow$$ AaEa using production (7) $$\rightarrow$$ AEaa using production (7) $$\rightarrow$$ aa using production (8).

So we can derive 'aa' from GComplex. Can we derive 'aaa'? If we continue on from our previous deadend of 'AaaCaB' above we should quickly conclude that only production (2) will apply, which will result in 'AaaaaCB'. We can't derive 'aaa', but you should confirm that we can derive 'aaaa'. Up until this point we have been hand simulating an enumeration procedure, which is probably best left to automation. As an exercise work with a large language model such as chatGPT to code a procedure for performing an enumeration of strings generated by GComplex. But lets also step back and reason about the generation process. We have a variable 'C' that works its way from left to right through successive sentential forms, doubling 'a's as it goes. When the 'C' reaches the right end, it either changes to an 'E' using production (4) and goes left repeatedly using production (7) until it reaches the left end and 'exits' using production (8); or the 'C' at the right end becomes a 'D' using production (3), again going left repeatedly using production (5), but this time leading to a sentential form that will again result in doubling the 'a's. Rather than the language of an even number of a's, confirm your understanding that GComplex generates the strings with a positive power of 2 a's. Followup questions in our analysis include (i) why must E go left at all? (ii) Could the grammar be altered, creating an equally valid equivalent grammar, so that D doubled a's as it was going left? (iii) And if so, what other revisions would have to be made?

What is made particularly clear in this latter example of a grammar is that there is a procedure -- an iterative, looping procedure -- that underlies the design of the grammar, and though each production can be interrogated in isolation, each rule only makes sense in its relation to the entire grammar.

Markov Algorithms
Markov algorithms make the procedure explicit in the formalism

Markov of 'Markov algorithms' is the son of Markov of 'Markov chain' fame. both are named ...

Non-Contracting aka Context Sensitive (Type 1) Grammars and Languages
If for every production $$\alpha \rightarrow \beta$$, $$|\alpha|\leq|\beta|$$ then the grammar is said to be a non-contracting grammar since sentential forms never shrink along a derivation path. The class of non-contracting grammars define the class of languages that is identical to the languages that are defined by the context sensitive grammars. A context sensitive grammar has productions of the form $$\alpha$$1A$$\alpha$$2 $$\rightarrow$$ $$\alpha$$1$$\beta\alpha$$2 where A is a variable, and $$\alpha$$1, $$\alpha$$2, and $$\beta$$ are arbitrary strings of variables and alphabet symbols, but $$\beta$$ cannot be the empty string. The name context sensitive is because $$\alpha$$1 and $$\alpha$$2 give the context in which A can be rewritten as $$\beta$$.

It should be clear that every context sensitive grammar is a non-contracting grammar, but its also the case that every non-contracting grammar can be converted to a context sensitive grammar that defines the same language. Thus, the non-contracting grammars and the context sensitive grammars define the same class of languages. You can think of context-sensitive as a normal form for non-contracting, but context sensitive is so widely used that even when talking about non-contracting grammars, we'll often use the equivalent label of context sensitive grammars (CSGs) and languages (CSLs). In any case, these grammars and languages are also referenced as type 1.

Consider this CSG, Gabc = ({S, B, C}, {a, b, c}, P, S), which is due to Hopcroft and Ullman (1969), where P is the set containing the following productions.

1) S $$\rightarrow$$ aSBC

2) S $$\rightarrow$$ aBC

3) CB $$\rightarrow$$ BC

4) aB $$\rightarrow$$ ab

5) bB $$\rightarrow$$ bb

6) bC $$\rightarrow$$ bc

7) cC $$\rightarrow$$ cc

Let's understand the procedure that is specified by this grammar. Production (1) can be used repeatedly to add a positive number of a's, as well as 'placeholders' for an equal number of b's (Bs) and c's (Cs). After applying production (1) a desired number of times, we can 'exit' with production (2), then move C's to the right with production (3), and convert the placeholders of Bs and Cs to their lower case equivalents. Confirm your understanding that the language generated by Gabc is {anbncn $$|$$ n $$\geq$$1} (i.e., a positive number of a's followed by an equal number of b's and finally an equal number of c's).

Consider the grammar GComplex presented earlier. This is clearly not a CSG, since productions (4) and (8) are contracting. Does this mean that L(GComplex) is not a CSL? Not necessarily, since its possible that there is a CSG that is equivalent to GComplex. Finding an alternative and equivalent CSG for GComplex is left as an exercise.

A small point is that a grammar that is non-contracting cannot define a language that includes the empty string, since there can be no production of the form $$\alpha \rightarrow \varepsilon$$, since $$|\varepsilon|$$ = 0. So technically the context-sensitive languages do not include the empty string. But it’s a technicality that is easily overcome and we won’t let it necessarily prevent us from talking about languages that include $$\varepsilon$$ but that are “otherwise’ context-sensitive. Suppose we have a grammar G (with start symbol S) that is context-sensitive and thereby excludes $$\varepsilon$$ in L(G). If we want to include $$\varepsilon$$ then we can create a new grammar G’ with new start symbol S’ that is identical to G, except with an additional variable S’ and two new productions, S’$$\rightarrow$$S and S’$$\rightarrow \varepsilon$$. S’ is never used otherwise. If there is something theoretical that relies on exclusion of $$\varepsilon$$ then we can focus on L(G), but for purposes of allowing for $$\varepsilon$$ we can use L(G’). In fact, we will relax this a bit more and allow a production of the form S $$\rightarrow \varepsilon$$, so long as S is the start symbol. Note that if S appears on the right hand side of any production then this allowance will allow a rewrite to $$\varepsilon$$ in intermediate sentential forms, but again that’s easily remedied if there is a theoretical point in doing so.

We will talk more about the computational implications of context sensitive languages later, but we will preview an important point now. Suppose we ask whether w is in a language L(G) – yes or no? We can construct an algorithm to answer this question for a CSL. We can enumerate the strings in the language using the CSG, and whenever we derive a string of terminals only, we check to see if its equal to w and answer ‘yes’ if so. In contrast, when a sentential form is created that is longer than w, we know that w cannot lie along that path, since the sentential forms along that path will never shrink. If all paths in the breadth first enumeration have sentential forms that are longer than w then we know that w cannot be in the language and the algorithm can answer ‘no’.

Context Free (Type 2) Grammars and Languages
If $$\alpha$$ in each of G’s productions $$\alpha \rightarrow \beta$$ is a single variable, then G is a context-free grammar (CFG) and L(G) is a context-free language (CFL). That is, regardless of the symbols in a sentential form that surround the variable on a production’s left-hand side, the variable can be rewritten to $$\beta$$. Context-free grammars and languages are subsets of context-sensitive (or non-contracting) grammars and languages. Every context free language is also a context sensitive language, but not vice versa. Similarly, every context sensitive language is an unrestricted language, but not vice versa. Thus, because inclusion is transitive, every CFG is an unrestricted grammar and every CFL is an unrestriced language.

Consider the grammar GSimple from a previous section on unrestricted languages. GSimple is a CFG and L(GSimple) is a CFL. A similarly structured CFG is GPalindromes, over Σ = {a, b}.

S $$\rightarrow$$ aSa $$|$$ bSb $$|$$ a $$|$$ b $$|$$ ε

Note that in this example and others, we will make an allowance for the empty string ε to be in the language. Technically, the empty string is not in a CFL because that would mean that there was at least one contracting production, which is disallowed in a CSL, and thus a CFL too. Nonetheless, the exception is widely used and we'll allow the start symbol of a CSG (and this CFG) to produce the empty string.

A derivation for 'bbaabaabb', S $$\xrightarrow[]{*}$$ bbaabaabb, using GPalindromes, is S $$\rightarrow$$ bSb $$\rightarrow$$ bbSbb $$\rightarrow$$ bbaSabb $$\rightarrow$$ bbaaSaabb $$\rightarrow$$ bbaabaabb.

The CFGs and CFLs are probably the most important class of grammars and languages to us, at least for practical purposes. After Chomsky’s treatment of grammars was published, Algol became the first programming language with a syntax that was defined by a context free grammar. These grammars have been used to define other programming languages, we well as markup languages, and the grammars are adapted to define parsers for these languages. You have probably seen what amounts to context free grammars in syntax diagrams for various languages.

Leftmost and Rightmost Derivations
In a derivation of a string using a CFG, every sentential form before the final string will have one of more variables in it. If at every step we rewrite the leftmost variable in the sentential form next, then the derivation is a leftmost derivation. Similarly, if we rewrite the rightmost variable at each step then the derivation is a rightmost derivation. We will typically be most concerned with leftmost derivations because of the use of CFGs in programming languages. Though we won’t interrogate the relationship deeply, suffice it to say that because a programming language syntax is largely based on CFGs and because a language translator parses a program left-to-right, leftmost derivations are more practically relevant.

In all derivations of strings in L(GPalindrome) there will always be exactly one variable (i.e., S) for every sentential form of the derivation, except the last, so that there is no difference between leftmost and rightmost derivations in that example. Let's consider a grammar for balanced parentheses instead wher the productions of GBalanced are as follows.

B $$\rightarrow$$ (B) $$|$$ BB $$|$$ $$|$$ ε

A leftmost derivation for '' is B $$\rightarrow$$ BB $$\rightarrow$$ (B)B $$\rightarrow$$ B $$\rightarrow$$.

In contrast, a rightmost derivation for the same string is B $$\rightarrow$$ BB $$\rightarrow$$ B $$\rightarrow$$ (B) $$\rightarrow$$.

Note that these derivations appear different, but the difference is entirely due to the order in which the variables are rewritten, and not due to something more fundamental.

Parse Trees
A parse tree is another representation of a derivation of a string using a CFG. The root of a parse tree is the start variable of the grammar, the internal nodes each correspond to a variable to be rewritten, the children of an internal node represent the various symbols, terminal and non-terminal, in the right-hand side of the production that is used to rewrite the variable representing the parent, and the leaves throughout the parse tree are the characters in a string of the language. The derived string can be written by doing a depth-first enumeration of the tree, writing leaf/terminal symbols only. Parse trees are invariant relative to the order of variable rewrites, so that the leftmost and rightmost derivation for '' using GBalanced correspond to the same parse tree.

Ambiguity of a CFG
A grammar is ambiguous if there are two or more leftmost derivations for at least one string in the language generated by the grammar. Alternatively, we could say that if there are two or more rightmost derivations, or two or more distinct parse trees, for a string in the language then the generating grammar is ambiguous. These three definitions of ambiguity are equivalent. Consider a CFG, GExp = (V, Σ, P, S), for simplified arithmetic expressions, where V = {Exp}, Σ = {id, +, *, }, S = Exp, and P equals the set containing these productions:

Exp $$\rightarrow$$ id

Exp $$\rightarrow$$ Exp + Exp

Exp $$\rightarrow$$ Exp * Exp

Exp $$\rightarrow$$ (Exp) This grammar is ambiguous since there are two distinct leftmost derivations for the string id + id * id. There are two distinct parse trees for this string as well. You can confirm that there are two distinct rightmost derivations as well. Can you find other strings in L(GExp) that have more than one leftmost (rightmost) derivation and more than one parse tree?

Ambiguity of context-free grammars is particularly important because the syntax of so many programming and markup languages are specified by context-free grammars. As an interpreter or compiler processes a program or document, it should know precisely what to do in response, and an ambiguous grammar can be problematic in guiding the interpreter on the right course of action (e.g., on what micro-instructions should be executed or written as the higher level program is being processed). Its possible to add decision rules on what to do that lie outside the grammar, but removing the ambiguity in the grammar itself is an elegant option. The grammar for arithmetic expressions is the classic educational example of revising an ambiguous grammar to remove ambiguity.

It would be nice if there was a general algorithm that accepted an ambiguous grammar and created an unambiguous grammar that generated the same language as the input grammar. Alas, no such algorithm exists. There is not even an algorithm that identifies an arbitrary input grammar as ambiguous or not! The picture is not that dismal however since in practice there are rules of thumb for disambiguating a grammar based on ‘domain’ knowledge. Programming language constructs are one kind of domain knowledge that can guide and constrain disambiguation, as in the case of the arithmetic expression example, where the domain knowledge is the constraints provided by precedence conventions, with identifiers and parenthesized expressions having the highest precedence, addition having the lowest, with multiplication in between. In the case of GExp a variation we'll call GOpPrec = (V, Σ, P, S) generates the same language (i.e., L(GExp) = L(GOpPrec)), but is not ambiguous. For GOpPrec, V = {Factor, Term, Exp}, Σ = {id, +, *, }, S = Exp, and P equals the set containing these productions:

Factor $$\rightarrow$$ id | (Exp)

Term $$\rightarrow$$ Factor | Term * Factor

Exp $$\rightarrow$$ Term | Exp + Term We will return to this grammar when we talk about the relevance of CFLs to programming languages. Consider another example of an ambiguous grammar, GBalanced, from above. Can you see why this grammar is ambiguous? Consider the string that we have already addressed, ''. There are at least two leftmost derivations for this string. We previously only looked at one, which is repeated here: B $$\rightarrow$$ BB $$\rightarrow$$ (B)B $$\rightarrow$$ B $$\rightarrow$$. This derivation uses the production, B $$\rightarrow$$, to transition from the third to the fourth sentential form. But consider this leftmost derivation which uses the production B $$\rightarrow$$ ε: B $$\rightarrow$$ BB $$\rightarrow$$ (B)B $$\rightarrow$$ ((B))B $$\rightarrow$$ B $$\rightarrow$$. Are there any other leftmost derivations for the same string? Naturally, if there are distinct leftmost derivations. then there are distinct rightmost derivations and distinct parse trees too.

In the case of this last example of ambiguity, there is a domain independent strategy for removing the source of ambiguity, while still retaining ε as a member of the language. We create a new grammar, GBalanced', by introducing a new start variable, B', and two productions, B' $$\rightarrow$$ B | ε, and removing the production B $$\rightarrow$$ ε. Note that ε is still in the language and that L(GBalanced') = L(GBalanced), but there is now only one leftmost derivation of '' and other strings as well. This domain independent strategy can be applied in any similar circumstance to remove the same form of ambiguity.

Inherent ambiguity of a CFL
If all grammars that generate a language are ambiguous then the language is inherently ambiguous. There is no algorithm in the general case that can identify whether a language is inherently ambiguous or not, but clearly if an unambiguous grammar that generates the language is identified then the language is not inherently ambiguous.

Remember that ambiguity is a property of grammars, and inherent ambiguity is a property of languages.

Normal Forms
There are two normal forms for context free grammars that have been used for practical and theoretical purposes. Any CFL that excludes ε can be expressed by a grammar in both normal forms.

Chomsky normal form (or CNF, not to be confused with conjunctive normal form in logic) has productions of the form X $$\rightarrow$$ YZ or X $$\rightarrow$$ x, where X, Y, and Z are variables and x is a terminal. Greibach normal form (or GNF) has productions of the form X $$\rightarrow$$ xβ, where X is a variable, x is a terminal, and β is a (possibly empty) string of variables only.

There are algorithms for translating an arbitrary CFG into an equivalent CFG in CNF and into an equivalent CFG in GNF. The conversion to CNF is the easiest. For example, if we want to find a CNF that is equivalent to Gsimplelogic, with productions S $$\rightarrow$$ ~S $$\mid$$ [S ⊃ S] $$\mid$$ p $$\mid$$ q then first (1) replace all terminals with terminal specific variables when the right hand side (rhs) is larger than 1 terminal:

S $$\rightarrow$$ NS $$\mid$$ LSISR $$\mid$$ p $$\mid$$ q

N $$\rightarrow$$ ~

L $$\rightarrow$$ [

R $$\rightarrow$$ ]

I $$\rightarrow$$ ⊃

and the (2) accumulate variables in the righthand side of length greater than 2

S $$\rightarrow$$ NS $$\mid$$ p $$\mid$$ q $$\mid$$ XLSISR

XLSIS $$\rightarrow$$ XLSIS

XLSI $$\rightarrow$$ XLSI

XLS $$\rightarrow$$ LS

The Pumping Lemma for CFLs
There are identifiable patterns in CFLs that are useful to know, for purposes of theory at least. An important such pattern is given by the Pumping Lemma (PL) for CFLs. The PL says that for any CFL there is a length threshold. If a string is equal to or larger than that threshold, call it n, then the string, w can be written as uvxyz and substrings v and y can be repeated indefinitely and the resulting string will be in the language too. Substrings v and y can be omitted too, signified by v0 and y0, and the resulting string will still be in the language. The lemma can be expressed with quantifiers as follows. If L is a CFL then

∃n (∀w∈L, (∃vxy(∀i≥0 uvixyiz ∈ L)))

“∃n (∀w∈L,” says that there is a threshold n such that for all sufficiently long strings in the language; “(∃vxy” says that z can be rewritten in terms of 5 substrings, the central three are less or equal to the threshold (i.e., they are sufficiently close), and v and y together consist of at least one character between them.

“(∀i≥0 uvixyiz ∈ L)))” says that we can repeat v and y zero or more times and the resulting string will still be in the language.

The reasoning behind this construction stems from considering the parse tree for a sufficiently long string generated by a Chomsky Normal Form grammar, which can represent any CFL. If the CNF grammar has k variables, then let the threshold of n be 2k. As the accompanying figures illustrate for the case of a string of at least n in length, at least one variable must appear at least twice along a path of the parse tree. It is the identification of this necessary repeating variable that is basis of being able to repeat or ‘pump’ substrings with the expectation that the result will be in the language. If the pumping lemma seems somewhat convoluted, give it time and it may seem elegant, and maybe does already.

Proofs using the Pumping Lemma
The Pumping Lemma can be used to show by contradiction that certain languages are not CFLs. Our job is to find a sufficiently long string w that is undeniably in the language of interest and then to show that there no no way of partitioning the string into uvxyz under the PL's constraints such that the result of pumping v and y some number of times results in a string that is also in the language. The outline of a proof that L is not a CFL follows the lemma as expressed with quantifiers above.

 * 1) “∃n (∀w∈L,” Pick an n. It must exist if L is a CFL. We don't have to tie n down to a particular value because we will next select a sufficiently long w that is defined in terms of n.
 * 2) “(∃vxy” w was selected in step 1 so as to constrain the partitioning into uvxyz is a manner that satisfies the constraints |vxy|≤n,|vy|≥1.
 * 3) “(∀i≥0 uvixyiz ∈ L)))” Find a value i (we only need to find one value of i, but again it can be a function of n) such that uvixyiz $$\not\in$$ L, which contradicts ∀i≥0 uvixyiz ∈ L.

Example: Show that L = {ai | i is a prime number} is not a CFL.

Step 1: Let n be the pumping lemma constant. Select w = am where m be the first prime greater than or equal to n.

Step 2: w = am = uvxyz, where |vxy|≤n and |vy|≥1, though the former constraint is not used in this example

Step 3: Without lose of generality assume v has j a's and y has k a's (j+k $$\geq$$ 1), so v=aj, y = ak, uxz = am-(j+k)

Now consider successive values if i

 * w| =   |uvxyz| = j + k + m – (j + k) = m

|uv2xy2z| = 2j + 2k + m – (j+k) = m + j + k

|uv3xy3z| = 3j + 3k + m – (j+k) = m + 2j + 2k

…

|uvm+1xym+1z| = (m+1)j + (m+1)k + m – (j+k)

= m + mj + mk

= m (1 + j + k)   can’t be prime, so am (1 + j + k) not in language, which violates the PL condition that (∀i≥0 uvixyiz ∈ L) if L is a CFL.

In step 3 it can be the case that we have to consider a number of different cases in order to show a contradiction across all i.

Example: Show that {aibjck | i+1 < j, j+1 < k} is not CFL

Step 1: Let n be the pumping lemma constant. Let w = anbn+2cn+4. w is certainly long enough whatever the particular value of n.

Step 2: Let w = anbn+2cn+4 = uvxyz ; |vx| >= 1; |vxy| <= n.

Step 3: Case of v, y all a’s and/or b’s: pump, then more a’s than b’s or b’s than c’s

Step 3: Case of v some number of a’s; y some number of c’s – can’t happen, violates constraint that |vxy| <= n

Step 3: Case of vy all c’s. Consider uv0xy0z, then more b’s than c’s or equal number of b’s and c’s

Regular (Type 3) Grammars and Languages
Finally, regular languages are a subset of the context free languages, and regular grammars puts a further restriction on the context free grammar. I regular grammar is a context free grammar where every production is of the form A $$\rightarrow$$ aB or A $$\rightarrow$$ a, where A and B are variables and a is a terminal. At first glance a regular gram the grammar G GNF. But where GNF allows any number of variables to follow the first terminal in the righthand side of a production, a regular grammar allows at most one. We get to applications of regular grammars and languages later when discussing the broader applications of context free languages for programming and markup language syntax.

Consider this grammar Gregular = ({S, A, B}, {0, 1}, P, S}, where P is the set of productions:

S $$\rightarrow$$ 0A

S $$\rightarrow$$ 1B

A $$\rightarrow$$ 0A

A $$\rightarrow$$ 0S

A $$\rightarrow$$ 1B

B $$\rightarrow$$ 1B

B $$\rightarrow$$ 1

B $$\rightarrow$$ 0

S $$\rightarrow$$  0 You are asked to characterize the language generated by Gregular as an exercise, but clearly it is regular. Figure ParseRegular gives a parse tree for the string 1110, which is a right linear tree. Every parse tree for a string generated by a regular grammar will be right linear. For this reason regular grammars are sometimes called right linear grammars, and the languages they generate are sometimes called right linear languages in other sources. This book will use 'regular' consistently when referring to grammars and languages, however.

Every regular grammar is a context free grammar. Note that regular grammars, by definition, are in GNF. A regular grammar can be easily changed to a grammar in CNF that accepts the same language. In particular, replace each production of the form A $$\rightarrow$$ aB in a regular grammar with A $$\rightarrow$$ A'B, where A' $$\rightarrow$$ a is also added as a production.

The Pumping Lemma for Regular Languages
Since every regular language is also a context free language, the pumping lemma for CFLs also apples to RLs, but in this latter case of a regular language, y and z are both empty. Thus, the Pumping Lemma for regular languages can be simplified to ∃n (∀w∈L, (∃uv(∀i≥0 uvix ∈ L))).

Let's revisit L = {0m | m is prime}. We already know that this is not a CFL, so its obviously not an RL either, so this is just to illustrate the RL form of the Pumping Lemma. Assume L is regular, so L is accepted by a DFA with n states (aka pumping lemma constant n). Consider a string of m 0s where m is the first prime number greater than n.

0m = 0j0k0m-(j+k), where u = 0j, v = 0k, and x = 0m-(j+k).

 * 0m|  =  j+k+(m-(j+k))   =  m

Pump v once  j+2k+(m-(j+k))  =  k+m

Pump v twice  j+3k+(m-(j+k))  =  2k+m

…

Pump m times  j+(m+1)k+(m-(j+k))  =  mk+m  = m(k+1) is not prime

0m(k+1) not in L by definition – a contradiction

Exercises, Projects, and Discussions
Type 0 Discussion 1: We noted in the first paragraph of this section that the definition of a grammar did not seem to overtly preclude the possibility of a production with a left-hand side of only terminal symbols (i.e., with no variables). List the implications of allowing productions with left-hand sides of only terminal symbols. As you reflect on the matter, consider discussing the issue with a large language model -- you are welcome to do so.

Type 0 Project 1: Research and discuss the relationship between Type 0 grammars and Markov Algorithms.

CSL Exercise 1: Give a derivation for 'aabbcc' using Gabc.

CSL Exercise 2: Give an attempted derivation for 'aabc' using Gabc. Clearly indicate deadend paths in a breadth-first enumeration of paths.

CSL Exercise 3: Find a context sensitive (non-contracting) grammar that is equivalent to GComplex -- that is, your answer should generate the same language as GComplex, but have no contracting productions. Hint: such a grammar can be found. You are welcome to use a large language model to gain insights into the process of converting GComplex to an equivalent CSG, GComplex'.

CSG Exercise 4: Give a context-sensitive grammar, Gww, for the language L = {ww | w is a non-empty binary string of 0s and 1s, and ww is such a string concatenated with itself}.

PL Exercise 1: Show {aj2bj | j >= 1} is not a CFL. Note that the number of a's is j2, not j*2, and that the number of b's is j. That is, the number of a's is the square of the number of b's.

PL Exercise 2: Show that {bi#bi+1 | bi is i in binary} is not a CFL

PL Exercise 3: Show that {aibici | i ≥ 1} is not a CFL.

PL Exercise 4: Can v0 and y0 be used in an alternative proof that L = {ai | i is a prime number} is not a CFL? If so, how?

CFG Exercise 1: Give a context-free grammar for the language of strings over {a,b} with exactly twice as many a’s as b’s. Due to Hopcroft and Ullman (1979) and Hopcroft, Motwani, and Ullman (2007). Hint: you may have to consider different special cases, allowing for the a's to be positioned differently relative to the bs.

CFG Exercise 2: Give a context-free grammar for the language of {aibjck | i ≠j or j ≠k}. Due to Hopcroft and Ullman (1979) and Hopcroft, Motwani, and Ullman (2007).

CFG Exercise 3: Give a Chomsky Normal Form grammar (a) for L(GExp), (b) for balanced parens, (c) for palidromes over {a, b}.

CFG Exercise 4: Give a Greibach Normal Form grammar (a) for L(GExp), (b) for balanced parens, (c) for palidromes over {a, b}.

Type 3 Exercise 1: Give an English characterization of the language generated by Gregular. If you use a large language model, then give the prompt that you used, and the response that you received, along with any edits or corrections that you made.

Type 3 Exercise 2: Give a regular grammar that generates allowable identifiers in a fictional programming language, where the identifiers must begin with a letter, followed by any finite number of letters and digits. Special characters _ (underscore) and - (hyphen) can be used but no two of these special symbols can appear consecutively, nor can an identifier end in a special symbol.

Type 3 Exercise 3: (Due to ?) Give a regular grammar generating L = {w | w is a string of one or more 0s and 1s and w does not contain two consecutive 1s}

PL Exercise 5: Show that the set of strings of balanced parentheses is not regular using the Pumping Lemma.

PL Exercise 6: Show that L = {0i*i | i is an integer and i ≥ 1} is not regular. I used i*i instead of i2 for reasons of formatting.


text:
Talk:Theory of Formal Languages, Automata, and Computation

Wikibook reformatting
I appreciate the reformatting on the book into separate pages. I have undone one of those changes which embedded the chapter on Grammars into the Introduction. Grammars should be its own chapter/page. I will be finishing the book this Summer and Fall. AIProf (discuss • contribs) 18:01, 14 March 2024 (UTC)


text: Template:Smiley

title: Template:Smiley


text: Category:Labuyo chile recipes

title: Category:Labuyo chile recipes


text: Category:Bird chile recipes

title: Category:Bird chile recipes


text: Category:Chili powder recipes

title: Category:Chili powder recipes


text: Category:Poblano chile recipes

title: Category:Poblano chile recipes


text: Category:Chile flake recipes

title: Category:Chile flake recipes


text: Category:Pequin chile recipes

title: Category:Pequin chile recipes


text:
User talk:Ballsdecex alt 6655

You cannot edit indefinitely due to disruptive editing. You may appeal this action with a reasonable argument by adding the text below.

--Xania   talk 03:02, 15 March 2024 (UTC)

title: User talk:Ballsdecex alt 6655


text:
Module:Userbox

-- This module implements.

local categoryHandler = require('Module:Category handler').main

local p = {}

-- Helper functions

local function checkNum(val, default) -- Checks whether a value is a number greater than or equal to zero. If so, -- returns it as a number. If not, returns a default value. val = tonumber(val) if val and val >= 0 then return val else return default end end

local function addSuffix(num, suffix) -- Turns a number into a string and adds a suffix. if num then return tostring(num) .. suffix else return nil end end

local function checkNumAndAddSuffix(num, default, suffix) -- Checks a value with checkNum and adds a suffix. num = checkNum(num, default) return addSuffix(num, suffix) end

local function makeCat(cat, sort) -- Makes a category link. if sort then return mw.ustring.format('', cat, sort) else return mw.ustring.format('', cat) end end

-- Argument processing

local function makeInvokeFunc(funcName) return function (frame) local origArgs = require('Module:Arguments').getArgs(frame) local args = {} for k, v in pairs(origArgs) do			args[k] = v		end return p.main(funcName, args) end end

p.userbox = makeInvokeFunc('_userbox') p['userbox-2'] = makeInvokeFunc('_userbox-2') p['userbox-r'] = makeInvokeFunc('_userbox-r')

-- Main functions

function p.main(funcName, args) local userboxData = p[funcName](args) local userbox = p.render(userboxData) local cats = p.categories(args) return userbox .. (cats or '') end

function p._userbox(args) -- Does argument processing for. local data = {}

-- Get div tag values. data.float = args.float or 'left' local borderWidthNum = checkNum(args['border-width'] or args['border-s'], 1) -- Used to calculate width. data.borderWidth = addSuffix(borderWidthNum, 'px') data.borderColor = args['border-color'] or args['border-c'] or args[1] or args['id-c'] or '#999' data.width = addSuffix(240 - 2 * borderWidthNum, 'px') -- Also used in the table tag. data.bodyClass = args.bodyclass

-- Get table tag values. data.backgroundColor = args['info-background'] or args[2] or args['info-c'] or '#eee'

-- Get info values. data.info = args.info or args[4] or " " data.infoTextAlign = args['info-a'] or 'left' data.infoFontSize = checkNumAndAddSuffix(args['info-size'] or args['info-s'], 8, 'pt') data.infoHeight = checkNumAndAddSuffix(args['logo-height'] or args['id-h'], 45, 'px') data.infoPadding = args['info-padding'] or args['info-p'] or '0 4px 0 4px' data.infoLineHeight = args['info-line-height'] or args['info-lh'] or '1.25em' data.infoColor = args['info-color'] or args['info-fc'] or 'black' data.infoOtherParams = args['info-other-param'] or args['info-op'] data.infoClass = args['info-class']

-- Get id values. local id = args.logo or args[3] or args.id	data.id = id	data.showId = id and true or false data.idWidth = checkNumAndAddSuffix(args['logo-width'] or args['id-w'], 45, 'px') data.idHeight = checkNumAndAddSuffix(args['logo-height'] or args['id-h'], 45, 'px') data.idBackgroundColor = args['logo-background'] or args[1] or args['id-c'] or '#ddd' data.idTextAlign = args['id-a'] or 'center' data.idFontSize = checkNum(args['logo-size'] or args[5] or args['id-s'], 14) data.idColor = args['logo-color'] or args['id-fc'] or data.infoColor data.idPadding = args['logo-padding'] or args['id-p'] or '0 1px 0 0' data.idLineHeight = args['logo-line-height'] or args['id-lh'] or '1.25em' data.idOtherParams = args['logo-other-param'] or args['id-op'] data.idClass = args['id-class']

return data end

p['_userbox-2'] = function (args) -- Does argument processing for. local data = {}

-- Get div tag values. data.float = args.float or 'left' local borderWidthNum = checkNum(args['border-s'] or args[9], 1) -- Used to calculate width. data.borderWidth = addSuffix(borderWidthNum, 'px') data.borderColor = args['border-c'] or args[6] or args['id1-c'] or args[1] or '#999999' data.width = addSuffix(240 - 2 * borderWidthNum, 'px') -- Also used in the table tag. data.bodyClass = args.bodyclass

-- Get table tag values. data.backgroundColor = args['info-c'] or args[2] or '#eeeeee'

-- Get info values. data.info = args.info or args[4] or " " data.infoTextAlign = args['info-a'] or 'left' data.infoFontSize = checkNumAndAddSuffix(args['info-s'], 8, 'pt') data.infoColor = args['info-fc'] or args[8] or 'black' data.infoPadding = args['info-p'] or '0 4px 0 4px' data.infoLineHeight = args['info-lh'] or '1.25em' data.infoOtherParams = args['info-op']

-- Get id values. data.showId = true data.id = args.logo or args[3] or args.id1 or 'id1' data.idWidth = checkNumAndAddSuffix(args['id1-w'], 45, 'px') data.idHeight = checkNumAndAddSuffix(args['id-h'], 45, 'px') data.idBackgroundColor = args['id1-c'] or args[1] or '#dddddd' data.idTextAlign = 'center' data.idFontSize = checkNum(args['id1-s'], 14) data.idLineHeight = args['id1-lh'] or '1.25em' data.idColor = args['id1-fc'] or data.infoColor data.idPadding = args['id1-p'] or '0 1px 0 0' data.idOtherParams = args['id1-op']

-- Get id2 values. data.showId2 = true data.id2 = args.logo or args[5] or args.id2 or 'id2' data.id2Width = checkNumAndAddSuffix(args['id2-w'], 45, 'px') data.id2Height = data.idHeight data.id2BackgroundColor = args['id2-c'] or args[7] or args[1] or '#dddddd' data.id2TextAlign = 'center' data.id2FontSize = checkNum(args['id2-s'], 14) data.id2LineHeight = args['id2-lh'] or '1.25em' data.id2Color = args['id2-fc'] or data.infoColor data.id2Padding = args['id2-p'] or '0 0 0 1px' data.id2OtherParams = args['id2-op']

return data end

p['_userbox-r'] = function (args) -- Does argument processing for. local data = {}

-- Get div tag values. data.float = args.float or 'left' local borderWidthNum = checkNum(args['border-width'] or args['border-s'], 1) -- Used to calculate width. data.borderWidth = addSuffix(borderWidthNum, 'px') data.borderColor = args['border-color'] or args['border-c'] or args[1] or args['id-c'] or '#999' data.width = addSuffix(240 - 2 * borderWidthNum, 'px') -- Also used in the table tag. data.bodyClass = args.bodyclass -- Get table tag values. data.backgroundColor = args['info-background'] or args[2] or args['info-c'] or '#eee'

-- Get id values. data.showId = false -- We only show id2 in userbox-r.

-- Get info values. data.info = args.info or args[4] or " " data.infoTextAlign = args['info-align'] or args['info-a'] or 'left' data.infoFontSize = checkNumAndAddSuffix(args['info-size'] or args['info-s'], 8, 'pt') data.infoPadding = args['info-padding'] or args['info-p'] or '0 4px 0 4px' data.infoLineHeight = args['info-line-height'] or args['info-lh'] or '1.25em' data.infoColor = args['info-color'] or args['info-fc'] or 'black' data.infoOtherParams = args['info-other-param'] or args['info-op'] -- Get id2 values. data.showId2 = true data.id2 = args.logo or args[3] or args.id or 'id' data.id2Width = checkNumAndAddSuffix(args['logo-width'] or args['id-w'], 45, 'px') data.id2Height = checkNumAndAddSuffix(args['logo-height'] or args['id-h'], 45, 'px') data.id2BackgroundColor = args['logo-background'] or args[1] or args['id-c'] or '#ddd' data.id2TextAlign = args['id-a'] or 'center' data.id2FontSize = checkNum(args['logo-size'] or args[5] or args['id-s'], 14) data.id2Color = args['logo-color'] or args['id-fc'] or data.infoColor data.id2Padding = args['logo-padding'] or args['id-p'] or '0 0 0 1px' data.id2LineHeight = args['logo-line-height'] or args['id-lh'] or '1.25em' data.id2OtherParams = args['logo-other-param'] or args['id-op']

return data end

function p.render(data) -- Renders the userbox html using the content of the data table. -- Render the div tag html. local root = mw.html.create('div') root :css('float', data.float) :css('border', (data.borderWidth or ) .. ' solid ' .. (data.borderColor or )) :css('margin', '1px') :css('width', data.width) :addClass('wikipediauserbox') :addClass(data.bodyClass)

-- Render the table tag html. local tableroot = root:tag('table') tableroot :attr('role', 'presentation') :css('border-collapse', 'collapse') :css('width', data.width) :css('margin-bottom', '0') :css('margin-top', '0') :css('background', data.backgroundColor) -- Render the id html. local tablerow = tableroot:tag('tr') if data.showId then tablerow:tag('td') :css('border', '0') :css('width', data.idWidth) :css('height', data.idHeight) :css('background', data.idBackgroundColor) :css('text-align', data.idTextAlign) :css('font-size', data.idFontSize .. 'pt') :css('font-weight', 'bold') :css('color', data.idColor) :css('padding', data.idPadding) :css('line-height', data.idLineHeight) :css('vertical-align', 'middle') :cssText(data.idOtherParams) :addClass(data.idClass) :wikitext(data.id) end

-- Render the info html. tablerow:tag('td') :css('border', '0') :css('text-align', data.infoTextAlign) :css('font-size', data.infoFontSize) :css('padding', data.infoPadding) :css('height', data.infoHeight) :css('line-height', data.infoLineHeight) :css('color', data.infoColor) :css('vertical-align', 'middle') :cssText(data.infoOtherParams) :addClass(data.infoClass) :wikitext(data.info) -- Render the second id html. if data.showId2 then tablerow:tag('td') :css('border', '0') :css('width', data.id2Width) :css('height', data.id2Height) :css('background', data.id2BackgroundColor) :css('text-align', data.id2TextAlign) :css('font-size', data.id2FontSize .. 'pt') :css('font-weight', 'bold') :css('color', data.id2Color) :css('padding', data.id2Padding) :css('line-height', data.id2LineHeight) :css('vertical-align', 'middle') :cssText(data.id2OtherParams) :wikitext(data.id2) end

local title = mw.title.getCurrentTitle if (title.namespace == 2) and not title.text:match("/") then return tostring(root) -- regular user page elseif title.namespace == 14 then return tostring(root) -- category elseif title.isTalkPage then return tostring(root) -- talk page end

local legible = true local contrast = require('Module:Color contrast')._ratio

local function has_text(wikitext) wikitext = wikitext:gsub("]]", "|]]") wikitext = wikitext:gsub("%[%[%s*[Mm][Ee][Dd][Ii][Aa]%s*:[^|]-(|.-)]]", "") wikitext = wikitext:gsub("%[%[%s*[Ii][Mm][Aa][Gg][Ee]%s*:[^|]-(|.-)]]", "") wikitext = wikitext:gsub("%[%[%s*[Ff][Ii][Ll][Ee]%s*:[^|]-(|.-)]]", "") return mw.text.trim(wikitext) ~= "" end

if contrast { data.infoColor, data.backgroundColor, error = 0 } < 4.5 then legible = false end

-- For bold text >= 14pt, requirement is only 3. local idContrastThreshold = 4.5 local id2ContrastThreshold = 4.5 if (data.idFontSize or 0) >= 14 then idContrastThreshold = 3 end if (data.id2FontSize or 0) >= 14 then id2ContrastThreshold = 3 end if data.showId and contrast { data.idColor, data.idBackgroundColor, error = 0 } < idContrastThreshold then if has_text(data.id or "") then legible = false end end

if data.showId2 and contrast { data.id2Color, data.id2BackgroundColor, error = 0 } < id2ContrastThreshold then if has_text(data.id2 or "") then legible = false end end

if not legible then root:wikitext('') end

return tostring(root) end

function p.categories(args, page) -- Gets categories from Module:Category handler. -- The page parameter makes the function act as though the module was being called from that page. -- It is included for testing purposes. local cats = {} cats[#cats + 1] = args.usercategory cats[#cats + 1] = args.usercategory2 cats[#cats + 1] = args.usercategory3 cats[#cats + 1] = args.usercategory4 cats[#cats + 1] = args.usercategory5 -- Get the title object local title if page then title = mw.title.new(page) else title = mw.title.getCurrentTitle end -- Build category handler arguments. local chargs = {} chargs.page = page chargs.nocat = args.nocat chargs.main = '' if args.notcatsubpages then chargs.subpage = 'no' end -- User namespace. local user = '' for i, cat in ipairs(cats) do user = user .. makeCat(cat) end chargs.user = user -- Template namespace. local basepage = title.baseText local template = '' for i, cat in ipairs(cats) do template = template .. makeCat(cat, ' ' .. basepage) end chargs.template = template return categoryHandler(chargs) end

return p

title: Module:Userbox


text:
User talk:46.135.84.103

--SHB2000 (discuss • contribs) 11:45, 15 March 2024 (UTC)

title: User talk:46.135.84.103


text:
User talk:2403:580D:1FD4:0:E80C:999A:E1E6:C41E

March 2024
MathXplore (discuss • contribs) 13:55, 15 March 2024 (UTC)


text:
User:Eaterjolly

Nira muso kozovoseĉi miozoto ZD

title: User:Eaterjolly


text:
Wikijunior:The Soup Pot

This is an early phonics reader to teach the digraph "oi."

A Pot of Soup
What moist turmoil I hear

Noise loiters in my ear

A toiling pot

Of ointments and choice oils

Conjoin as it embroils

A boisterous soup boils

Noisy and hot

title: Wikijunior:The Soup Pot


text: Category:Book:Wikijunior:The Soup Pot

title: Category:Book:Wikijunior:The Soup Pot


text:
Wikijunior talk:The Soup Pot

Poem structure
AABCCCB rhyme scheme with 6646664 syllable sequence. I did not consciously consider the metre of stressed and unstressed syllables.

Originally I wrote this poem as if words like "boil" and "oil" are two syllables. But the version here treats them as one syllable.

Later I hope to add an illustrated pdf to accompany this. Jerimee (discuss • contribs) 22:21, 15 March 2024 (UTC)

Illustration
Potential illustrative concepts/subjects: Ear, Pot, Steam/Wind/Vapor/Scent, Noise, Boiling, Stirring, Cooking, Brewing, Witches/Potions

Some links to find art for the illustration:

 * https://view-it.toolforge.org/?q=Q365552
 * Pots in art
 * https://commons.wikimedia.org/wiki/File:Kuchenmaistrey.jpg
 * https://commons.wikimedia.org/wiki/File:Normal_ear_(Peterson_255).jpg
 * https://commons.wikimedia.org/wiki/File:Ladle_(PSF).png
 * https://commons.wikimedia.org/wiki/File:Gisbert_Combaz_-_Postcard_representing_the_Element_Fire2.jpg
 * https://commons.wikimedia.org/wiki/File:Coch_I_Cuiner.jpg
 * wizard brew: https://commons.wikimedia.org/wiki/File:Tovenaar_brouwt_een_brouwsel_(G.Th._Rotman).jpg
 * elephant brew: https://commons.wikimedia.org/wiki/File:Vimar_-_Le_Boy_de_Marius_Bouillab%C3%A8s_-_Illustration_p17.jpg

weaker

 * probably not: https://commons.wikimedia.org/wiki/File:A_receptacle_for_burning_coal_to_heat_cautery_instruments._E_Wellcome_L0011517.jpg
 * too adult: https://commons.wikimedia.org/wiki/File:%22Pharmacienne%22_s%27adressant_%C3%A0_la_lune_pour_obtenir_son_aide.jpg

Jerimee (discuss • contribs) 22:41, 15 March 2024 (UTC)

title: Wikijunior talk:The Soup Pot


text: Category:Chile paste and sauce recipes

title: Category:Chile paste and sauce recipes


text: Category:Pimento recipes

title: Category:Pimento recipes


text: Category:Piri piri chile recipes

title: Category:Piri piri chile recipes


text: Category:Thai chile recipes

title: Category:Thai chile recipes


text: Category:New Mexico chile recipes

title: Category:New Mexico chile recipes


text:
Category:Userboxes with insufficient color contrast

__HIDDENCAT__


text:
Category:Pages with templates in the wrong namespace

__HIDDENCAT__


text:
Minesweeper/Introduction

Minesweeper is a one player puzzle game in which a player's goal is to click on all of the tiles that do not have a mine hidden under them to win. Clicking on a tile with a mine results in the loss of the game. To do well in this simple yet addicting game game, no quick reflexes are needed, just a knack for numbers and some level of luck.

title: Minesweeper/Introduction


text:
Arabic/Classical Arabic Readings

The Qur'an is often claimed to be, in addition to the Muslim scripture, the pinnacle of Arabic literature. The Qur'an is divided into chapters (in Arabic, sura pl. suwar [سورة ج. سور]). The sura in this link is the first sura in the Qur'an and is a common starting point for reading the Qur'an. Note though, that after this sura, it's often not advised to read the suwar in sequence, since the second sura, al-Baqara, is the longest in the Qur'an and can be daunting.

 * Muqaddima of Ibn Khaldun

Ibn Khaldun is considered one of the most important figures of Islamic history writing; some consider him the most important pre-modern historian from any culture. He developed a philosophy of history and is considered by some to be a founding father of sociology. The Muqaddima, or Introduction, is his most famous work, and is the first part of a longer work of universal history. In the Muqaddima, he lays out his philosophy of history.

title: Arabic/Classical Arabic Readings


text:
Arabic/External Resources

 * Alphabet, with sound, just click on a letter
 * Complete Arabic Script course (with sound)
 * Omniglot — The Omniglot encyclopedia article for Arabic.
 * Arabic Alphabet Quiz — Choose the "Arabic" link.
 * Babel Arabic Writing Explanation
 * Arabic Alphabet with sound and lessons
 * Arabic Alphabet writing instructions
 * Conglomeration of Online Lessons

 * "1000 Arabic Verbs (MSA) by Frequency (with audio)" Free course to learn the 1000 most commonly used Arabic verbs, including extensive practice sections to learn the common conjugations. Works by timed repetition and typing tests.
 * "Learn to Speak and Read Arabic" Using a highly visual approach to learning Arabic with color-coded text, up to 6,000 audio clips, videos, and podcasts.
 * Al-Duroos, Arabic language lessons, video, and learning resources
 * arabikey.com, Arabic keyboard with a unique automatic diacritization feature, verb conjugator and comprehensive Arabic grammar lessons from beginner to advanced levels
 * arabic keyboard write Arabic online.
 * Arabicpod.net, Arabic via mp3 podcasts.
 * The Arabic PodClass, audio lessons
 * Indiana University N181, has MP3 audio files to download.
 * The Mixxer Find a native Arabic speaker for a language exchange via Skype
 * StudioArabiya.com offers a FREE WEEK of online Arabic lessons!
 * , Critical Language Service, has screencasts for writing, reading and pronouncing the alphabet
 * Critical Language Service Critical Language Service, year one of Arabic grammar for the standard university Arabic course.

LAFLWSP / Learning Arabic as a Foreign Language With a Studied Plan

title: Arabic/External Resources