Blog of Stuff: Posts tagged 'Cal Poly'urn:http-www-brinckerhoff-org:-tags-Cal-Poly-html2017-11-16T18:22:42ZCal Poly Quarter Numberingurn:http-www-brinckerhoff-org:-blog-2017-11-16-cal-poly-quarter-numbering2017-11-16T18:22:42Z2017-11-16T18:22:42ZJohn Clements
<p>People often ask me what the heck is going on with Cal Poly’s nutty quarter numbering system. I’m going to try to summarize it.</p>
<p>Before I begin, I think I’m probably suffering from Stockholm syndrome, here; I’m kind of fond of it, even though it’s non-intuitive.</p>
<h3 id="actual-history">Actual History</h3>
<p>Based on a very brief conversation with Debbie Dudley, it appears that the current system was designed in 2006, during the migration to PeopleSoft. At that time, Cal Poly had to devise a system for numbering quarters both in the future and in the past (that is, the new system also had to represent existing records of past students).</p>
<p>The rest of this is still largely hypothetical; please feel free to write and correct me about anything I’ve gotten wrong; I think that trying to understand how the system arose helps me (and you?) to understand its quirks a bit better.</p>
<h3 id="semi-hypothetical-history">(Semi) Hypothetical History</h3>
<p>Problem: we need a way to represent a particular quarter (e.g.: Fall 2006) as a number. It would be really convenient to be able to sort in a sane way, etc. etc.</p>
<p>Solution: well, let’s use integers, not floats (for what are hopefully obvious reasons). Let’s use the year, then a digit for the quarter. What digits should we use for the quarters? Well, we should probably stay away from zero, because it’s not clear what year a zero would belong to. Okay, let’s use 2, 4, 6, and 8 for the four quarters. This spaces out the four quarters, and allows for the insertion of additional terms, should it become necessary.</p>
<p>So, how should we write Fall 2006? We could write “20068”. But… let’s try to cut that down to four digits.</p>
<p>(Knowing what I now know, I can’t see why you would want to do this unless PeopleSoft has some kind of internal restriction or performance penalty regarding numbers with more digits. Let’s assume this is the case.)</p>
<p>Well, maybe we can encode the century as a single digit. Let’s use “2” for the century from 2000 — 2099. So Fall 2006 becomes 2068.</p>
<p>Great! So how do we represent Spring 1997?</p>
<p>If we’re using century codes, then the one before “2” should be “1”. So in this case, Winter 1997 would be written as 1972.</p>
<p>Apparently, though, we decided that this was confusing, and that we should instead use a “0” for the 1900s, so that Winter 1997 is instead written as 0972.</p>
<p>This scheme is not awful, but it does have some problems if you try to subtract numbers or increment or decrement quarter numbers, because going from a fall quarter to the next winter quarter requires adding four… unless the year is 1999, in which case you have to add 1004. Oh well.</p>
<p>Okay, so let’s summarize. How the heck do we actually read one of these numbers?</p>
<h3 id="examples-of-quarter-numbers">Examples of quarter numbers:</h3>
<ul>
<li>
<p>2174 : 2000 + 17 = 2017, 4 = Spring. Spring 2017.</p></li>
<li>
<p>2102 : 2000 + 10 = 2010, 2 = Winter. Winter 2010.</p></li>
<li>
<p>976 : 1900 + 97 = 1997, 6 = Summer. Summer 1997.</p></li></ul>
<h3 id="parsing-a-cal-poly-san-luis-obispo-quarter-number">Parsing a Cal Poly (San Luis Obispo) quarter number:</h3>
<p>Actually, I’m going to be precise, and just give you some code.</p>
<p>Yes, in Racket.</p>
<div class="brush: Racket">
<div class="source">
<table class="sourcetable">
<tbody>
<tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span></pre></div></td>
<td class="code">
<div>
<pre><span></span><span class="kn">#lang </span><span class="nn">typed/racket</span><span class="w"></span>
<span class="c1">;; given a quarter, return its season: "Fall", "Winter", etc.</span><span class="w"></span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="n">qtr->season</span><span class="w"> </span><span class="p">[</span><span class="n">qtr</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Natural</span><span class="p">])</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Season</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">match</span><span class="w"> </span><span class="p">(</span><span class="nb">modulo</span><span class="w"> </span><span class="n">qtr</span><span class="w"> </span><span class="mi">10</span><span class="p">)</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="w"> </span><span class="s2">"Winter"</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">4</span><span class="w"> </span><span class="s2">"Spring"</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">6</span><span class="w"> </span><span class="s2">"Summer"</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">8</span><span class="w"> </span><span class="s2">"Fall"</span><span class="p">]))</span><span class="w"></span>
<span class="c1">;; return the year in which a quarter number falls</span><span class="w"></span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="n">qtr->year</span><span class="w"> </span><span class="p">[</span><span class="n">qtr</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Natural</span><span class="p">])</span><span class="w"> </span><span class="n">:</span><span class="w"> </span><span class="n">Natural</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">century-code</span><span class="w"> </span><span class="p">(</span><span class="nb">floor</span><span class="w"> </span><span class="p">(</span><span class="nb">/</span><span class="w"> </span><span class="n">qtr</span><span class="w"> </span><span class="mi">1000</span><span class="p">)))</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">year-code</span><span class="w"> </span><span class="p">(</span><span class="nb">modulo</span><span class="w"> </span><span class="p">(</span><span class="nb">floor</span><span class="w"> </span><span class="p">(</span><span class="nb">/</span><span class="w"> </span><span class="n">qtr</span><span class="w"> </span><span class="mi">10</span><span class="p">))</span><span class="w"> </span><span class="mi">100</span><span class="p">))</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">century-offset</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="k">match</span><span class="w"> </span><span class="n">century-code</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">0</span><span class="w"> </span><span class="mi">1900</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="mi">2</span><span class="w"> </span><span class="mi">2000</span><span class="p">]</span><span class="w"></span>
<span class="w"> </span><span class="p">[</span><span class="k">_</span><span class="w"> </span><span class="p">(</span><span class="nb">raise-argument-error</span><span class="w"> </span><span class="o">'</span><span class="ss">qtr-year</span><span class="w"></span>
<span class="w"> </span><span class="s2">"qtr with century code of 0 or 2"</span><span class="w"></span>
<span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="n">qtr</span><span class="p">)]))</span><span class="w"></span>
<span class="w"> </span><span class="p">(</span><span class="nb">+</span><span class="w"> </span><span class="n">century-offset</span><span class="w"> </span><span class="n">year-code</span><span class="p">))</span><span class="w"></span>
</pre></div></td></tr></tbody></table></div>
</div>