{"id":4008,"date":"2016-12-23T22:15:32","date_gmt":"2016-12-24T04:15:32","guid":{"rendered":"https:\/\/justinparrtech.com\/JustinParr-Tech\/?p=4008"},"modified":"2020-11-30T16:35:52","modified_gmt":"2020-11-30T22:35:52","slug":"the-pizza-code","status":"publish","type":"post","link":"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/","title":{"rendered":"The Pizza Code"},"content":{"rendered":"<p><em>Please note:\u00a0 This has NOTHING to do with pizza coupons nor discount codes.\u00a0 If you want pizza coupons, click <a href=\"http:\/\/lmgtfy.com\/?q=pizza+coupons\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/em><\/p>\n<p>Every now and then, I run across the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Geek_Code\" target=\"_blank\" rel=\"noopener noreferrer\">Geek Code<\/a>, a compact notation for sharing basic profile and personality information.<\/p>\n<p>I recently ran across this again, while looking for something else, and it inspired me to answer these questions:<\/p>\n<ul>\n<li>Could you define a compact yet robust notation for ordering a pizza?<\/li>\n<li>Could you order any pizza within an 80-character text message?<\/li>\n<li>Could you manage a single order with multiple pizzas within an 80-character text message?<\/li>\n<\/ul>\n<p>Let&#8217;s find out&#8230;<\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#background\" >Background<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#the-pizza-code\" >The Pizza Code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#designing-the-pizza-code\" >Designing The Pizza Code<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#project-goals\" >Project Goals<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#design-approach\" >Design Approach<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#encoding-basic-attributes\" >Encoding Basic Attributes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#attribute-codes\" >Attribute Codes<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#crust-and-bake-time\" >Crust and Bake Time<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#sauce\" >Sauce<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#cheese\" >Cheese<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#toppings\" >Toppings<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#two-halves\" >Two Halves<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#miscellaneous\" >Miscellaneous<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#error-checking-%e2%80%93-optional\" >Error Checking &#8211; Optional<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#address\" >Address<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#logistics\" >Logistics<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#tip\" >Tip<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#vendor-specific-items\" >Vendor-Specific Items<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#multiple-pizzas-same-specification\" >Multiple Pizzas, Same Specification<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#multiple-pizzas-different-specification\" >Multiple Pizzas, Different Specification<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#conclusion\" >Conclusion<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/the-pizza-code\/#pizza-code-cheat-sheet\" >Pizza Code Cheat Sheet<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"background\"><\/span>Background<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><em>Please note:\u00a0 This has NOTHING to do with pizza coupons nor discount codes.\u00a0 If you want pizza coupons, click <a href=\"http:\/\/lmgtfy.com\/?q=pizza+coupons\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/em><\/p>\n<p>The <a href=\"https:\/\/en.wikipedia.org\/wiki\/Geek_Code\" target=\"_blank\" rel=\"noopener noreferrer\">Geek Code<\/a> has been around since 1993, as sort of an underground (&#8220;geek&#8221;) phenomenon.<\/p>\n<p>It uses a specific syntax consisting of core attribute abbreviations to express various aspects of your profile and personality.\u00a0 Each attribute has a specific set of modifiers to express degree, explicit inclusion, explicit exclusion, or the like.<\/p>\n<p>What&#8217;s interesting about the Geek Code is that, as long as we all agree to a specific version, it can convey a tremendous amount of information using very few bytes, because each symbol or group of symbols has a specific predetermined meaning.<\/p>\n<p>Moreover, because the Geek Code is text, you could:<\/p>\n<ul>\n<li>Add it to your e-mail signature<\/li>\n<li>Post it on your website<\/li>\n<li>Text it to someone<\/li>\n<li>Embed it in a QR code, and print the QR code on your business card<\/li>\n<li>Add it as an attribute to an X.500 \/ LDAP server<\/li>\n<\/ul>\n<p>Anything you can do with text, you can do with the Geek Code.<\/p>\n<p>Here is a very basic, sample Geek Code:<\/p>\n<blockquote><p>&#8212;&#8211;BEGIN GEEK CODE BLOCK&#8212;&#8211;<br \/>\nVersion: 3.12<br \/>\nGAT d+ s+:+ a+<br \/>\n&#8212;&#8212;END GEEK CODE BLOCK&#8212;&#8212;<\/p><\/blockquote>\n<p>This tells another geek:<\/p>\n<ul>\n<li>GAT:\u00a0\u00a0 Geek of All Trades<\/li>\n<li>d+\u00a0 I dress OK<\/li>\n<li>s+:+\u00a0 I&#8217;m a little tall and a little round<\/li>\n<li>a+\u00a0 I&#8217;m a little bit older than average<\/li>\n<\/ul>\n<p>There are many other elements that can be added to your Geek Code, but the problem is that it&#8217;s no longer being actively maintained, and many of the categories are somewhat dated (e.g. &#8220;I watch X-Files whenever possible&#8221;)<\/p>\n<p>So, in all, it&#8217;s a great piece of internet history, but maybe not completely relevant today.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"the-pizza-code\"><\/span>The Pizza Code<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><em>Disclaimer:\u00a0 I did some Googling, and wasn&#8217;t able to find anything that resembles what I&#8217;m presenting below, but if there is already a &#8220;pizza code&#8221; out there, I apologize &#8211; please contact me and we can collaborate.\u00a0 <\/em><\/p>\n<p>Once again, I recently ran across the Geek Code, which happens from time to time.<\/p>\n<p>I thought, &#8220;what COULD you do with this kind of notation?&#8221;\u00a0 In other words, what could you easily describe with &#8220;Geek Notation&#8221;, that would be fairly standard and easy to maintain?<\/p>\n<p><strong>My first thought:\u00a0 Pizza!<\/strong><\/p>\n<p>Excluding vendor-specific specialty pizzas, there are a few simple options.<\/p>\n<p>What could you use this for?<\/p>\n<p><strong>My next thought:\u00a0 If you were REALLY adept at &#8220;the pizza code&#8221;, could you in theory order one via hand-typed text message?<\/strong><\/p>\n<p>Text messages are 80 or 160 characters in length (think: 1 or 2 lines of text), and are designed to convey lightweight information.\u00a0 People have already developed many dialects of &#8220;text speek&#8221;, in order to shorten normal English in to a text-message-friendly format &#8211; sometimes, so much so, that text speek is almost unreadable.<\/p>\n<blockquote><p>English:\u00a0 How are you today?<\/p>\n<p>Text:\u00a0 how r u 2da<\/p><\/blockquote>\n<p><strong>So the goal of this project is to develop a standardized, compact, pizza notation that one could theoretically use to order a pizza via text message.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"designing-the-pizza-code\"><\/span>Designing The Pizza Code<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"project-goals\"><\/span>Project Goals<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Project Goals:<\/p>\n<ul>\n<li>Largely vendor-independent<\/li>\n<li>Allows robust options, like ordering different toppings on each half<\/li>\n<li>Allows the expression of ALL options, including crust, sauce, cheese, and toppings<\/li>\n<li>Include some basic error checking<\/li>\n<li>Exclude collisions &#8211; situations where symbols are ambiguous<\/li>\n<li>Avoid similar or confusing symbols &#8211; e.g. &#8216;l&#8217; and &#8216;1&#8217; look similar, as do &#8216;O&#8217; and &#8216;0&#8217;.<\/li>\n<li>Allow self-healing for unsupported options<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"design-approach\"><\/span>Design Approach<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Obviously, the Pizza Code has to be symbolic, and we want to use pure text symbols, just as the Geek Code did.<\/p>\n<p>Rather than specify each option, we can assume that we will always start with a basic prototype.\u00a0 This allows us to represent an entire &#8220;default&#8221; set of options with one symbol.\u00a0 We can use &#8220;P&#8221; for pizza:<\/p>\n<blockquote><p>P = generic pizza<\/p><\/blockquote>\n<p>We can start with something simple and generic, like a medium cheese pizza, which has all of the basic elements of a pizza, represented in a &#8220;default&#8221; mode:<\/p>\n<ul>\n<li>Medium size<\/li>\n<li>Regular crust<\/li>\n<li>Marinara sauce<\/li>\n<li>Regular amount of sauce<\/li>\n<li>Mozzarella cheese<\/li>\n<li>Regular amount of cheese<\/li>\n<li>No toppings<\/li>\n<\/ul>\n<p>This means that we can encode 7 values in one symbol!\u00a0 Not a bad starting point:<\/p>\n<blockquote><p>Rule 1:\u00a0 P = 1 Pizza, medium, regular crust, marinara (regular amount), mozzarella cheese (regular amount) and no toppings.<\/p><\/blockquote>\n<p>As we progress, we can use other symbols and modifiers to describe these variables and other aspects of our pizza.<\/p>\n<p>Further, we can assume that syntactically, if we start each pizza with &#8220;P&#8221;, then the next time we see &#8220;P&#8221; within the same string, we are describing a net-new pizza &#8211; for example, allowing us to concatenate Pizza Codes, and thereby order multiple pizzas with one string.<\/p>\n<p>This gives us Rule 2:<\/p>\n<blockquote><p>Rule 2:\u00a0 Each &#8220;P&#8221; represents a new pizza, and any subsequent characters are attributes or modifiers of the most recent &#8220;P&#8221;, starting new with the next &#8220;P&#8221;.<\/p><\/blockquote>\n<p>As a byproduct of Rule 2, we can safely ignore spaces and line breaks &#8211; they can be included for readability, but the system will work the same regardless.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"encoding-basic-attributes\"><\/span>Encoding Basic Attributes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>We&#8217;ve already identified that &#8220;P&#8221; is a basic set of options for a medium cheese pizza.<\/p>\n<p>Remembering my most recent online ordering experience, here is a quick run down of pizza attributes, minus toppings:<\/p>\n<ul>\n<li><strong>Size:<\/strong>\u00a0 Small, Med, Large, etc&#8230;<\/li>\n<li><strong>Type of Crust:<\/strong>\u00a0 Regular (sometimes called &#8220;hand-tossed&#8221;), Thin, Pan, Deep Dish<\/li>\n<li><strong>Type of Sauce:<\/strong>\u00a0 Usually Marinara, but some places also offer Alfredo<\/li>\n<li><strong>Amount of Sauce:<\/strong>\u00a0 Light, Regular, Extra<\/li>\n<li><strong>Type of Cheese:<\/strong>\u00a0 Usually Mozzarella, but some places offer a cheese blend, or Feta<\/li>\n<li><strong>Amount of Cheese:<\/strong>\u00a0 Easy, Regular, Extra<\/li>\n<li><strong>Bake Time:<\/strong>\u00a0 Some places allow you to specify slightly over or under the normal bake time<\/li>\n<\/ul>\n<p>Let&#8217;s draw a line in the sand, and assume that all of these, for a given pizza, is a &#8220;global&#8221; option &#8211; you can&#8217;t order two different crusts or sauces on the same pizza.\u00a0 Although some places may offer this, let&#8217;s assume you CAN NOT order more than one kind of cheese, either.\u00a0 We can go back later and allow vendor-specific specialization through a set of vendor-specific options.<\/p>\n<p>For now, we can focus on our core pizza attributes.<\/p>\n<p>Since size is a function of the pizza itself, we can simply make it a modifier.\u00a0 If we start with &#8220;P&#8221; = &#8220;Medium&#8221;, then:<\/p>\n<blockquote>\n<ul>\n<li><strong>P++<\/strong> \u00a0\u00a0 Extra Large<\/li>\n<li><strong>P+<\/strong> \u00a0\u00a0 \u00a0\u00a0 Large<\/li>\n<li><strong>P<\/strong> \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 Medium<\/li>\n<li><strong>P-<\/strong> \u00a0\u00a0\u00a0 \u00a0\u00a0 Small<\/li>\n<li><strong>P- &#8211;<\/strong> \u00a0\u00a0\u00a0\u00a0 Personal<\/li>\n<\/ul>\n<\/blockquote>\n<p>Since not every pizza place offers all of these options, we can assume Medium is always Medium.\u00a0 However, if they don&#8217;t offer a personal pizza, maybe this reverts to 1 slice, or to a small.\u00a0 If they don&#8217;t offer a small, small reverts to medium.\u00a0 Likewise, if there is no extra large, it reverts to large.<\/p>\n<p>With this scheme, worst case scenario, I could order a P- &#8211; and end up with a medium, if that&#8217;s the <em>smallest<\/em> pizza they offer, but that might be much more food than I want.\u00a0 We can check for this and correct it later.\u00a0 Conversely, if I order a P++ and they don&#8217;t offer one, I&#8217;ll end up with the <em>largest<\/em> pizza they DO offer, which would still be OK.\u00a0 I can always go back and order another pizza if needed.\u00a0 Again, we can cover this later under logistics.<\/p>\n<p>We need a symbol table for the other attributes.<\/p>\n<p>Unfortunately, we have some possible collisions:<\/p>\n<ul>\n<li>&#8220;C&#8221; could stand for &#8220;Cheese&#8221; or &#8220;Crust&#8221;<\/li>\n<li>&#8220;T&#8221; could stand for &#8220;Type&#8221; (of something), Bake &#8220;Time&#8221; or &#8220;Topping&#8221;<\/li>\n<li>&#8220;S&#8221; could be &#8220;Sauce&#8221;, but maybe we want to be able to order a &#8220;Specialty&#8221; pizza<\/li>\n<\/ul>\n<p>At first, the best approach would seem to be to use predefined fields:<\/p>\n<p style=\"padding-left: 30px;\">P : crust : sauce : cheese : bake_time<\/p>\n<p>Using this notation, your order might look like this:<\/p>\n<p style=\"padding-left: 30px;\">P+ : r : m- : m+ : +<\/p>\n<ul>\n<li>Large pizza<\/li>\n<li>Regular crust (or hand-tossed)<\/li>\n<li>Easy on the marinara sauce<\/li>\n<li>Extra mozzarella cheese<\/li>\n<li>Extra bake time<\/li>\n<\/ul>\n<p>Although this seems like a good approach, it has a few problems:<\/p>\n<ul>\n<li>What if you confuse the field for sauce and cheese?\u00a0 You&#8217;d end up with EXTRA sauce, and LESS cheese &#8211; the opposite of what you want.<\/li>\n<li>What if you want to omit a field?\u00a0 You could always leave it blank &#8220;::&#8221;, but then you run the risk of putting something in the wrong field.<\/li>\n<li>If you put an option in the wrong field, you might end up with something that doesn&#8217;t even make sense, such as &#8220;m-&#8221; in the &#8220;crust&#8221; field.\u00a0 Rather than discard the option, this leaves you with an unusable pizza &#8211; obviously the &#8220;m-&#8221; meant something, but it can no longer be interpreted correctly.<\/li>\n<\/ul>\n<p><strong>Even though we are trying to use as few characters as possible, clearly we need to be more specific, and we need codes that make sense as a mnemonic.<\/strong><\/p>\n<p>For now, we probably need to keep the field separator, so let&#8217;s make that Rule 3:<\/p>\n<blockquote><p>Rule 3:\u00a0 Each Attribute is separated by &#8220;:&#8221;<\/p><\/blockquote>\n<p>Why not use &#8220;.&#8221; or something else?\u00a0 Although my Android has a &#8220;.&#8221; on the main alpha keyboard (without shifting), my iPhone doesn&#8217;t.\u00a0 Besides, this is a code for geeks, and geeks should know how to get to the &#8220;:&#8221; symbol.<\/p>\n<p>Using a separator also has the side effect of making the code largely case-insensitive, because we can use branching logic.<\/p>\n<blockquote><p>Rule 4:\u00a0 all codes are CASE INSENSITIVE<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"attribute-codes\"><\/span>Attribute Codes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>We want all of the codes to be largely mnemonic, and also as forgiving as possible, in the event of a typo or collision.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"crust-and-bake-time\"><\/span>Crust and Bake Time<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Since we are already using &#8220;P&#8221; with modifiers to specify the size of the pizza, and a +\/- modifier for crust doesn&#8217;t really make sense, we could combine the bake time with a +\/- modifier.<\/p>\n<blockquote><p><strong>:Cr = Crust<\/strong><\/p>\n<p><strong>Options:<\/strong><\/p>\n<ul>\n<li><strong>:CrT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 Thin Crust<\/li>\n<li><strong>:CrR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 Regular Crust (Default, Sometimes called Hand Tossed)<\/li>\n<li><strong>:Cr<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Also, Regular Crust<\/li>\n<li><strong>:CrP<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Pan Crust<\/li>\n<li><strong>:CrD <\/strong>\u00a0 \u00a0\u00a0 Deep Dish<\/li>\n<li><strong>:CrDD<\/strong>\u00a0\u00a0\u00a0 Also, Deep Dish<\/li>\n<li><strong>:CrX<em>a<\/em><\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 Vendor specific.<\/li>\n<\/ul>\n<p>If Omitted, CrR is assumed.<\/p>\n<p>Non-standard crust specification will be ignored, and will default to CrR.<\/p>\n<p><strong>Bake Time Options:<\/strong><\/p>\n<ul>\n<li><strong>:Cr+<\/strong>\u00a0\u00a0\u00a0 Extra bake time<\/li>\n<li><strong>:Cr<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Regular bake time<\/li>\n<li><strong>:Cr-<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 Less bake time<\/li>\n<\/ul>\n<p>Default Bake time is assumed to be :Cr (regular)<\/p>\n<p>Bake time and crust option can be combined:<\/p>\n<ul>\n<li>:CrP+\u00a0\u00a0\u00a0 Pan crust, extra bake time<\/li>\n<li>:CrT-\u00a0\u00a0\u00a0\u00a0 Thin crust, less bake time<\/li>\n<li>:Cr\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Regular crust, regular bake time (same as omitting)<\/li>\n<\/ul>\n<\/blockquote>\n<p>The &#8220;X&#8221; code allows each vendor to optionally specify their own crust type or option, for example:<\/p>\n<ul>\n<li>:CrXc might mean &#8220;Cheesy Crust&#8221;<\/li>\n<li>:CrXp might mean &#8220;Pretzel Crust&#8221;<\/li>\n<\/ul>\n<p>Not every vendor offers these options, but the &#8220;X&#8221; code gives each vendor some flexibility to offer their own signature options.\u00a0 Later, if everyone generally agrees with a particular standard, it can be moved in to the main option list &#8211; for example, if CrXc becomes commonly used, it might become CrC in later versions of the standard.<\/p>\n<p>Backward-compatibility is important &#8211; if multiple vendors are using CrXc, we don&#8217;t want them to simply drop this code and start using the new one.\u00a0 Both codes have to be supported for a while:<\/p>\n<blockquote><p>Rule 5:\u00a0 All future versions of the Pizza Code must be backward-compatible<\/p><\/blockquote>\n<p>Finally, we want to avoid collisions with some other code that starts with &#8220;C&#8221;.\u00a0 For example, if we simply specify &#8220;C&#8221; = &#8220;Cheese&#8221;, we have a potential problem, if &#8220;Cr&#8221; = &#8220;Ricotta&#8221;.\u00a0 We can&#8217;t distinguish between a regular crust and Ricotta cheese.<\/p>\n<blockquote><p>Rule 6:\u00a0 All attribute codes other than &#8220;P&#8221; have to be the same length (2 characters)<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<h4><span class=\"ez-toc-section\" id=\"sauce\"><\/span>Sauce<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>We want to be able to specify what kind of sauce, but also the amount.<\/p>\n<blockquote><p><strong>:Sa = Sauce<\/strong><\/p>\n<p><strong>Options:<\/strong><\/p>\n<ul>\n<li>:SaM\u00a0\u00a0\u00a0 Marinara (Default)<\/li>\n<li>:Sa\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Also, Marinara<\/li>\n<li>:SaA\u00a0\u00a0\u00a0\u00a0 Alfredo<\/li>\n<li>:SaB\u00a0\u00a0\u00a0\u00a0\u00a0 BBQ<\/li>\n<li>:SaX<em>a<\/em>\u00a0\u00a0 Vendor-specific<\/li>\n<\/ul>\n<p><strong>Modifiers:<\/strong><\/p>\n<ul>\n<li>:Sa+\u00a0\u00a0\u00a0\u00a0 Extra Sauce<\/li>\n<li>:Sa\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Regular Sauce (Default)<\/li>\n<li>:Sa-\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Light Sauce<\/li>\n<li>:Sa- &#8211;\u00a0\u00a0\u00a0\u00a0 No Sauce<\/li>\n<\/ul>\n<p>If not specified, the default is :Sa, which equates to Marinara, regular amount.<\/p>\n<p>Options and modifiers can be combined:<\/p>\n<ul>\n<li>:Sa-\u00a0\u00a0\u00a0\u00a0\u00a0 Easy on the Marinara\u00a0 (Same as :SaM-)<\/li>\n<li>:SaA+\u00a0\u00a0 Extra Alfredo sauce<\/li>\n<\/ul>\n<\/blockquote>\n<p>Again, the &#8220;X&#8221; code allows each vendor to offer their premium \/ signature sauces.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"cheese\"><\/span>Cheese<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>We want to be able to specify what kind of cheese, and the amount<\/p>\n<blockquote><p><strong>:Ch = Cheese<\/strong><\/p>\n<p>Options:<\/p>\n<ul>\n<li><strong>:ChM<\/strong>\u00a0\u00a0\u00a0 Mozzarella, Shredded (default)<\/li>\n<li><strong>:Ch<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Also, Shredded Mozzarella<\/li>\n<li><strong>:ChMM<\/strong>\u00a0\u00a0\u00a0 Mozzarella chunks, like a Margherita pizza<\/li>\n<li><strong>:ChF<\/strong>\u00a0\u00a0\u00a0\u00a0 Feta<\/li>\n<li><strong>:ChB<\/strong>\u00a0\u00a0\u00a0\u00a0 Cheddar Blend<\/li>\n<li><strong>:ChX<em>a<\/em><\/strong>\u00a0\u00a0 Vendor-specific<\/li>\n<\/ul>\n<p><strong>Modifiers:<\/strong><\/p>\n<ul>\n<li><strong>:Ch+<\/strong>\u00a0\u00a0\u00a0 Extra cheese<\/li>\n<li><strong>:Ch\u00a0<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 Regular amount of cheese (default)<\/li>\n<li><strong>:Ch-<\/strong>\u00a0\u00a0\u00a0\u00a0 Easy on the cheese<\/li>\n<li><strong>:Ch- &#8211;<\/strong>\u00a0\u00a0 No Cheese<\/li>\n<\/ul>\n<p>If omitted, the default is :Ch, which equates to a regular amount of shredded mozzarella<\/p>\n<p>Options and Modifiers can be combined:<\/p>\n<ul>\n<li>:ChB+\u00a0\u00a0\u00a0 Extra cheese, cheddar blend<\/li>\n<li>:ChF-\u00a0\u00a0\u00a0\u00a0\u00a0 Light cheese, Feta<\/li>\n<\/ul>\n<\/blockquote>\n<p>As with the other options, the &#8220;X&#8221; code allows the vendor to offer specialty options.<\/p>\n<p>Because all of our option codes are the same length, the position where each occurs within the Pizza Code is irrelevant &#8211; except, of course, that it must appear after &#8220;P&#8221;.<\/p>\n<blockquote><p>Rule 7:\u00a0 Other than &#8220;P&#8221;, option codes can be specified in any order.<\/p><\/blockquote>\n<p>This means that the following pizzas are all the same:<\/p>\n<ul>\n<li>P+:Ch+:Sa-:CrP<\/li>\n<li>P+:Sa-:ChM+:CrP\u00a0\u00a0\u00a0\u00a0 (Note that Ch and ChM are the same)<\/li>\n<li>P+:CrP:Ch+:Sa-<\/li>\n<\/ul>\n<p>Etc&#8230;<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"toppings\"><\/span>Toppings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This is where things get tricky.<\/p>\n<p>We&#8217;re on a roll with the attribute codes, so maybe &#8220;To&#8221; is a good way to specify &#8220;toppings&#8221;.<\/p>\n<p>Setting aside (for now) that we want to be able to specify two pizza halves with different toppings, how would we specify multiple toppings?<\/p>\n<p>One poor approach would be to use the topping attribute code each time:<\/p>\n<ul>\n<li>ToO\u00a0\u00a0\u00a0\u00a0\u00a0 Onions<\/li>\n<li>ToO\u00a0\u00a0\u00a0\u00a0\u00a0 Olives (collision)<\/li>\n<li>ToOl\u00a0\u00a0\u00a0\u00a0 Olives\u00a0 (green or black?)<\/li>\n<li>ToGo\u00a0\u00a0\u00a0 Green olives&#8230;.. or green onions??<\/li>\n<li>ToTo+\u00a0\u00a0 Extra diced tomatos<\/li>\n<\/ul>\n<p>Because of the specificity required for each topping, this is going to get cumbersome.<\/p>\n<p>The first problem is to find a canonical way to identify each unique topping &#8211; a &#8220;taxonomy of toppings&#8221;, so to speak.<\/p>\n<p>The first obvious segregation we can perform, is that &#8220;specialty&#8221; items would be vendor-specific.\u00a0 So, for example, if you wanted a &#8220;sushi pizza&#8221;, this would be outside of the traditional taxonomy &#8211; we can account for this using our established &#8220;X&#8221; code standard:\u00a0\u00a0\u00a0 For example, Xsu might mean &#8220;slice up a california roll, and drop that right on my pizza&#8221;, to the ONE vendor who does this.<\/p>\n<p>For the so-called &#8220;standard&#8221; toppings, the first bifurcating characteristic in our taxonomy is <strong>&#8220;meat&#8217; or &#8220;not meat&#8221;<\/strong>.\u00a0 Although from a logical perspective, this statement seems almost contradictory, as if combining &#8220;meat&#8221; and &#8220;not meat&#8221; might inadvertently result in annihilation followed by a burst of gamma rays, the reality is that we have to account for the comical and ironic fact that the government classifies the tomato (a fruit) as a vegetable <strong>for tax purposes<\/strong>.<\/p>\n<p>Likewise, plant leaves, fleshy roots, fruits, nuts, bark, and seeds all fall in to the &#8220;not meat&#8221; category, and we can save ourselves an existential headache by simply calling all of this stuff, &#8220;veggies&#8221;.<\/p>\n<p>We already have a category for cheese, eggs (although they SHOULD be) are not currently a &#8220;standard&#8221; topping on pizza.\u00a0 This eliminates &#8220;dairy&#8221; as a standard category&#8230;<\/p>\n<p>So if we discriminate between &#8220;meat&#8221; and &#8220;veggies&#8221;, we have the basis for a taxonomy, and thus a topping lexicon.<\/p>\n<p>What if we want a predefined specialty pizza?\u00a0 For example, although the specific definition varies from vendor to vendor, EVERY vendor has a &#8220;Meat&#8221; pizza, a &#8220;Supreme&#8221;, and a &#8220;Veggie&#8221; pizza.<\/p>\n<p>We need the flexibility to select a predefined configuration such as the above, but also, we need to be able to add or remove toppings.<\/p>\n<p>Setting aside the whole attribute code issue:<\/p>\n<ul>\n<li>X &#8211; Vendor-specific topping\u00a0 (e.g. Xq = Quail&#8217;s egg; Xsu = Sushi)<\/li>\n<li>S &#8211; Grouping of specialty toppings (e.g. meats, veggies, supreme, etc&#8230;.)<\/li>\n<li>M &#8211; Meat topping<\/li>\n<li>V &#8211; Veggie (not meat) topping<\/li>\n<\/ul>\n<p>This gives us a basic starting point for developing a &#8220;codified topping lexicon&#8221;.\u00a0 Keep in mind that we want to maintain a mnemonic scheme.<\/p>\n<blockquote><p>Specialty Pizzas:<\/p>\n<ul>\n<li>Sm\u00a0\u00a0\u00a0\u00a0\u00a0 Meats<\/li>\n<li>Ss\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Supreme<\/li>\n<li>Sv\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Veggie<\/li>\n<li>Ssa\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Spinach Alfredo<\/li>\n<li>Sca\u00a0\u00a0\u00a0\u00a0\u00a0 Chicken Alfredo<\/li>\n<\/ul>\n<p>(No modifier)<\/p>\n<p>Meat Toppings:<\/p>\n<ul>\n<li>Mba\u00a0\u00a0\u00a0\u00a0 Bacon<\/li>\n<li>MIt \u00a0\u00a0\u00a0\u00a0 Italian Sausage<\/li>\n<li>MHa\u00a0\u00a0\u00a0 Ham (Canadian Bacon)<\/li>\n<li>MCb\u00a0\u00a0\u00a0\u00a0 Canadian Bacon (Ham)<\/li>\n<li>MBu\u00a0\u00a0\u00a0\u00a0 Hamburger<\/li>\n<li>MHb\u00a0\u00a0\u00a0 Also, Hamburger<\/li>\n<li>MPe\u00a0\u00a0\u00a0\u00a0 Pepperoni<\/li>\n<li>MSt\u00a0\u00a0\u00a0\u00a0\u00a0 Sliced Steak<\/li>\n<li>MCh\u00a0\u00a0\u00a0 Chicken<\/li>\n<li>MAn\u00a0\u00a0\u00a0\u00a0 Anchovies (I LOVE ANCHOVIES&#8230;.. GO WRITE YOUR OWN PIZZA CODE)<\/li>\n<\/ul>\n<p>Veggie (non-meat) Toppings:<\/p>\n<ul>\n<li>VPe\u00a0\u00a0\u00a0\u00a0 Peppers\u00a0 (Default &#8211; Green)\n<ul>\n<li>VPeB\u00a0\u00a0\u00a0\u00a0 Banana Peppers<\/li>\n<li>VPeG\u00a0\u00a0\u00a0\u00a0 Green Peppers<\/li>\n<li>VPeJ\u00a0\u00a0\u00a0\u00a0\u00a0 Jalapeno Peppers<\/li>\n<li>VPeR\u00a0\u00a0\u00a0\u00a0 Red Peppers<\/li>\n<\/ul>\n<\/li>\n<li>VOn\u00a0\u00a0\u00a0 Onions\u00a0\u00a0 (Default white \/ yellow)\n<ul>\n<li>VOnG\u00a0\u00a0\u00a0 Green onions<\/li>\n<li>VOnR\u00a0\u00a0\u00a0 Red onions<\/li>\n<\/ul>\n<\/li>\n<li>VOL\u00a0\u00a0\u00a0 Olives\u00a0\u00a0 (Default black)\n<ul>\n<li>VOLG\u00a0\u00a0\u00a0 Green Olives<\/li>\n<li>VOLB\u00a0\u00a0\u00a0\u00a0 Black olives (Same as VOL)<\/li>\n<\/ul>\n<\/li>\n<li>VPi\u00a0\u00a0\u00a0\u00a0 Pineapple<\/li>\n<li>VTo \u00a0\u00a0 Diced Tomato<\/li>\n<li>VMu\u00a0\u00a0 Mushrooms<\/li>\n<li>VSp\u00a0\u00a0\u00a0 Spinach<\/li>\n<\/ul>\n<\/blockquote>\n<p>So the next question is:\u00a0 How do we string this together?<\/p>\n<p>There are two basic scenarios:<\/p>\n<ul>\n<li>You pick a specialty pizza, and you add \/ remove toppings<\/li>\n<li>You build a pizza from scratch, and you add toppings<\/li>\n<\/ul>\n<p>So our lexicon has to include the ability to add, remove, or specify extra toppings:<\/p>\n<blockquote><p>-Topping\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Remove this topping<\/p>\n<p>+Topping\u00a0\u00a0\u00a0\u00a0\u00a0 Add this topping<\/p>\n<p>++Topping\u00a0\u00a0 Add extra of this topping<\/p><\/blockquote>\n<p>Because we will always specify +, ++, or &#8211; in front of a topping, this gives us a syntactical approach to stringing toppings together.<\/p>\n<p>To be consistent with our 2-character attribute code, let&#8217;s put &#8220;To&#8221; in front of the whole thing&#8230;<\/p>\n<blockquote><p>:To = Toppings<\/p>\n<p>Syntax:<\/p>\n<p>:To{++|+|-}Topping1[{++|+|-}Topping2&#8230;]<\/p>\n<p>&nbsp;<\/p><\/blockquote>\n<p>So&#8230;. let&#8217;s say we start with a Meat loving pizza, drop the hamburger, and add pineapple:<\/p>\n<p style=\"padding-left: 30px;\">:To+Sm-MBu+VPi<\/p>\n<p>Large Cheese and Pepperoni:<\/p>\n<p style=\"padding-left: 30px;\">P+:To+MPe<\/p>\n<p>NOW, we have a pizza!<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"two-halves\"><\/span>Two Halves<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Let&#8217;s say that you want two different toppings on each half of a pizza&#8230;<\/p>\n<p>What&#8217;s the easiest way to do this?<\/p>\n<p>Simply, specify two topping codes.<\/p>\n<blockquote><p>IF 1 topping code<\/p>\n<p style=\"padding-left: 30px;\">Cover entire Pizza with Topping_Set_1<\/p>\n<p>ELSE<\/p>\n<p style=\"padding-left: 30px;\">Cover Half1 with Topping_Set_1<\/p>\n<p style=\"padding-left: 30px;\">Cover Half2 with Topping_set_2<\/p>\n<\/blockquote>\n<p>So, let&#8217;s say we want a large veggie on one side, and meat-lovers + onion on the other:<\/p>\n<p style=\"padding-left: 30px;\">P+:To+Sv:To+Sm+VOn<\/p>\n<p>Two To codes result in Half1 with topping set 1 and Half2 with topping set 2.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"miscellaneous\"><\/span>Miscellaneous<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>We still have\u00a0 a few things to cover&#8230;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"error-checking-%e2%80%93-optional\"><\/span>Error Checking &#8211; Optional<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>At the end of the pizza code, there should be an indication of what was requested:<\/p>\n<blockquote><p>Checksum<\/p>\n<p>In parentheses, indicate the total number of pizzas of each size within the order.\u00a0 Use &#8220;=&#8221; for medium.<\/p>\n<p>&#8220;(&#8221; [n++] [n+] [n=] [n-] [n- -] &#8220;)&#8221;<\/p>\n<p>For example, if we are ordering 2 large and 1 medium pizza:<\/p>\n<p style=\"padding-left: 30px;\">(2+1=)<\/p>\n<\/blockquote>\n<p>Error checking helps us determine what we are buying, to ensure that what we requested is what we should expect.<\/p>\n<p>For maximum ease of use, the checksum should be optional.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"address\"><\/span>Address<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Let&#8217;s say you&#8217;re at your friend&#8217;s house&#8230;.<\/p>\n<p>We need to be able to specify an alternate address.<\/p>\n<p>Note:\u00a0 No address means that your default address will be the delivery address.<\/p>\n<blockquote><p>:Ad!Streetaddress!Apt!zipcode<\/p>\n<p>Examples:<\/p>\n<p>:Ad!123 Any Street!!12345<\/p>\n<p>:Ad!401 Nowhere Blvd!104!84842<\/p><\/blockquote>\n<p>In the event of a severe disconnect, the pizza vendor can simply call the customer on his\/her phone, or text, requesting clarification.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"logistics\"><\/span>Logistics<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<blockquote>\n<ol>\n<li>You text Pizza Code(s) &#8211;&gt; Pizza Vendor<\/li>\n<li>You &lt;&#8211; Pizza Vendor texts summary, any discrepancies, address, and price<\/li>\n<li>You text &#8220;yes &#8221; PIN &#8211;&gt; Pizza Vendor<\/li>\n<li>You &lt;&#8211; Confirmation<\/li>\n<\/ol>\n<\/blockquote>\n<p>At any time, text &#8220;Cancel&#8221; to cancel the transaction.<\/p>\n<p>Any transaction &gt; 10 minutes is automatically cancelled without a valid response.\u00a0 You &lt;&#8211; Pizza vendor &#8220;Cancelled&#8221;<\/p>\n<p>In step 2, the pizza vendor confirms what you are requesting.<\/p>\n<p>So if you text:<\/p>\n<blockquote><p>P+:P:To+Ss+VOlG(1+1=)<\/p><\/blockquote>\n<ul>\n<li>1 Large cheese pizza<\/li>\n<li>1 Medium supreme, add green olives<\/li>\n<\/ul>\n<p>Suppose the vendor doesn&#8217;t have green olives for some reason, they might respond:<\/p>\n<blockquote><p>1+<br \/>\n1= -VOlG<br \/>\n$18.95<br \/>\n123 Yourstreet<br \/>\nType yes PIN to order<\/p><\/blockquote>\n<p>This provides you with a chance to review your order.\u00a0 You see that black olives are not available, but you decide to order anyway.<\/p>\n<p>In another situation, maybe you want a personal pizza:<\/p>\n<blockquote><p>P&#8211;:To+MPe(1&#8211;)<\/p><\/blockquote>\n<p>Perhaps the vendor doesn&#8217;t offer personal pizza, nor pizza by the slice.\u00a0 Maybe all they have is a medium:<\/p>\n<blockquote><p>1=<br \/>\n$9.99<br \/>\n123 Anystreet<br \/>\nType yes PIN to order<\/p><\/blockquote>\n<p>You quickly see that they don&#8217;t offer a personal or small &#8211; the smallest they offer is a medium, so you cancel the order:<\/p>\n<blockquote><p>Cancel<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"tip\"><\/span>Tip<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<blockquote><p><strong>:Ti<\/strong><\/p>\n<ul>\n<li>:Ti<em>n<\/em>\u00a0\u00a0\u00a0\u00a0 $n dollars tip<\/li>\n<li>:Ti<em>n<\/em>%\u00a0\u00a0 n%\u00a0 tip<\/li>\n<\/ul>\n<\/blockquote>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"vendor-specific-items\"><\/span>Vendor-Specific Items<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<blockquote><p>:Xx = Vendor-specific item or attribute<\/p><\/blockquote>\n<p>For example, maybe SuperduperPizza decides to offer wings and breadsticks via the pizza code.\u00a0 You might order them like this:<\/p>\n<blockquote><p>P:To+MPe:XxWiB10:XxBrCh<\/p><\/blockquote>\n<p>Although each vendor might have their own codes, maybe at SuperduperPizza, this means:<\/p>\n<ul>\n<li>Medium pepperoni pizza<\/li>\n<li>10 boneless wings<\/li>\n<li>Cheesy breadsticks<\/li>\n<\/ul>\n<p>As you can see, extending the pizza code is quite simple.\u00a0 Later, it might make sense to have a completely separate &#8220;Wing Code&#8221;, or an official set of wing standards within the Pizza Code itself.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"multiple-pizzas-same-specification\"><\/span>Multiple Pizzas, Same Specification<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>An integer after &#8220;P&#8221; indicates the quantity:<\/p>\n<ul>\n<li>&#8220;P2&#8221;\u00a0\u00a0\u00a0\u00a0 = 2 medium<\/li>\n<li>&#8220;P3+&#8221;\u00a0 = 3 large<\/li>\n<li>&#8220;P4- -&#8221; = 4 personal<\/li>\n<\/ul>\n<p>Example:<\/p>\n<p style=\"padding-left: 30px;\">P4+:To+MPe(4+) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4 large pepperoni pizzas<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"multiple-pizzas-different-specification\"><\/span>Multiple Pizzas, Different Specification<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Concatenating Pizza codes:<\/p>\n<p style=\"padding-left: 30px;\">P+:To+VOnR++VOlG+MPe:P2:CrP:SaA:To+MCh+VPi(1+1=)<\/p>\n<p style=\"padding-left: 30px;\">1 large red onion, green olive, pepperoni<\/p>\n<p style=\"padding-left: 30px;\">2 medium pan, alfredo, chicken, pineapple<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Here are some of my favorite pizzas:<\/p>\n<ul>\n<li>P+:To+Sca+VPi\u00a0\u00a0\u00a0 (Chicken Pineapple Alfredo)<\/li>\n<li>P+:To+Ssa\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (Spinach Alfredo)<\/li>\n<li>P+:CrT:To+MPe+MHa++MBa+VOnR\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (Thin crust, Pepperoni, Ham, Extra bacon, Red Onion)<\/li>\n<li>P+:To+MHa+VPi+VMu+VOn\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (Regular crust, canadian bacon, pineapple, mushroom, onion)<\/li>\n<\/ul>\n<p><strong>Generate your own pizza code!<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"pizza-code-cheat-sheet\"><\/span>Pizza Code Cheat Sheet<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><a href=\"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-content\/uploads\/Pizza-Code-Cheat-Sheet.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">pizza-code-cheat-sheet<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Please note:\u00a0 This has NOTHING to do with pizza coupons nor discount codes.\u00a0 If you want pizza coupons, click here. Every now and then, I run across the Geek Code, a compact notation for sharing basic profile and personality information. I recently ran across this again, while looking for something else, and it inspired me [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,17,5],"tags":[],"class_list":["post-4008","post","type-post","status-publish","format-standard","hentry","category-food-and-cooking","category-good-design-bad-design","category-the-light-side"],"_links":{"self":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts\/4008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/comments?post=4008"}],"version-history":[{"count":10,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts\/4008\/revisions"}],"predecessor-version":[{"id":6271,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/posts\/4008\/revisions\/6271"}],"wp:attachment":[{"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/media?parent=4008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/categories?post=4008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/justinparrtech.com\/JustinParr-Tech\/wp-json\/wp\/v2\/tags?post=4008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}