From mkkuhner@genetics.washington.eduThu Jun 29 17:31:42 1995 Date: Thu, 29 Jun 95 07:12:27 -0700 From: "Mary K. Kuhner" To: frc@nvg.unit.no Subject: Round 39 Final Results Round 39 (Storm) Round 39 is over (due to a pair of just-missed deadlines). Vanyel is the Judge and Stein is the Wizard for round 40. I'm a bit disappointed--the deadline-missing rules were interesting and the round could have gone on quite a while. Theme: Programming Languages 10 Rules: 6 valid, 4 invalid, 1 unsuccessful Mean SP: 0.5 Eligibilities (all times PDT: add 7 hours for GMT): Player Eligible until Style points ---------------- -------------------- ------------ Vanyel Tue-Jul-04 00:05:05 1.0 ---------------------------------------------------- Gareth Mon-Jun-26 09:00:00 0.5 Jeremy Mon-Jun-26 10:42:17 0.5 The Wizard Tue-Jun-27 09:12:05 1.0 Others Tue-Jun-27 09:00:00 0.0 Stein Wed-Jun-28 00:44:42 3.0 Dave Wed-Jun-28 14:36:16 0.0 Bruce Wed-Jun-28 10:32:40 -0.5 -- PROPOSAL 39:A: To overturn the judgement of INVALID on 39:4 (proposed by the Wizard) Voting ended: Sat-Jun-24 08:15:39 FAILS 2/7 FOR: Wizard, Gareth AGAINST: Peter, Dug, Dave, Stein, Andre -- Rule 39:1 The Wizard VALID (1.0 SP) Tue-Jun-20-95 09:12:05 PDT From: Orjan Johansen Subject: 39:1 ==== Each Rule will describe at least one aspect of UPL (Universal Programming Language, formerly known as GOPL,) the language in which the Universe is written. Here is the first line of an UPL program: ;NTG -> LGT=SQRT(E/m) An "x -> y" command means "Turn x into y". LGT takes a speed parameter. ==== Greetings, Oerjan. ---------------------------------- Judgement: Straightforward establishment of the theme, with extra credit for (E/m) and for brevity (I like short rules in this sort of round). ------------------------------------ Rule 39:2 Jeremy VALID (0.0 SP) Tue-Jun-20-95 10:42:17 PDT From: selengut@MIT.EDU Subject: Rule 39:2 >>>>>> All rules must include at least one line of UPL code. All rules which have a predecessor must explain the relationship between the code found in a previous valid rule and the Universe. (Do not repeat previous explanations) The code in 39:1 recounts that from nothing was created light (which is related to energy and mass). ;{ALL} :> {LVG} :> {MAN}:> {MLE} ;DEFN : mean => nice ;t(f){MLE} @ qual1 {} defines a set :> defines the second set as a subset of the first <> defines a variable => defines a variable ranging between first value (low) and second value (high) @ is proportional to >>>>>> - Jeremy ----------------------------------- Judgement: A bit "busy", adding a lot of new terms (and not defining all of them). We'll quickly run out of punctuation at this rate. ------------------------------------ Rule 39:3 Stein VALID (0.5 SP) Wed Jun 21 00:44:42 1995 >>>> The notation a(b) denotes a function. The extended notation a(b){c} denotes that the argument b range over the set c. The code in rule 39:2 say that males are human are living creatures are things. And it also defines an evaluation function t for males that are proportional to how nice they are. This evaluation function is used in the following piece of code: ;P.thvn(f){MLE} @ t(f) In GOPL the character combination /* starts a comment, and the first occurance of the character combination */ ends the same comment. Comments are completely non-operational, but what you state, or do not state, in a comment might be held against you on judgement day. An example of code containing a comment, and which also introduces the agent notation for the first time in this round: LOVE::WLD.grnd /* Indeed!!! */ >>>> -- Stein stein.kulseth@tf.telenor.no G=Stein;S=Kulseth;O=TF;P=telenor;A=telemax;C=no; http://www.nta.no/brukere/stein -------------- Judgement: No problems that I can see, and at least a little potential to trip up future coders. -------------- Rule 39:4 Gareth INVALID (0.5 SP) Wed Jun 21 04:44:26 1995 > ;P.thvn(f){MLE} @ t(f) states that the probability that a man goes to heaven is proportional to how nice he is. (Oh well, there goes every major religion I know...) > LOVE::WLD.grnd /* Indeed!!! */ states that love makes the world go round. Just as :> indicates the relation "is a superset of", so .> indicates the relation "contains as an element". The following fragment comes from an early revision of a well known UPL program, but had to be removed because it caused the system to crash. (When the system is the universe, this is serious.) The next valid rule will explain why, and propose a better version. ; f{ALL} -> X(f) = {x, f(x)=TRUE} -- Gareth McCaughan Dept. of Pure Mathematics & Mathematical Statistics, gjm11@pmms.cam.ac.uk Cambridge University, England. [Research student] ------------ Judgement: (0001) TYPE MISMATCH ERROR By 38:1 the notation f{ALL} defines f as a set. By 38:3 the notation f(x) implies that f is a function. I don't think these are compatible definitions. My policy as Judge will be to invalidate rules with invalid code unless it is clearly marked (a la K&R) as intentionally invalid within the rule text. Gareth's is described as buggy but not as invalid. It's a bit unstylish to define .> without using it in the code fragment, but I like the challenge at the end. -------------- Rule 39:5 Bruce VALID (-0.5 SP) Wed-Jun-21 10:32:40 PDT From: Bruce Jones Subject: 39:5? >>> Since Nature abhors a vacuum, no line of UPL (nee GOPL) code may consist solely of comment[s]. Unfortunately, at this point in our discussion, I find it necessary to go over some code that some have seen before. > ;P.thvn(f){MLE} @ t(f) states that the probability that a man goes to heaven is proportional to how nice he is. > LOVE::WLD.grnd /* Indeed!!! */ states that love makes the world go round. _____ ;LOVE[$]=\/{EVL} <<< - Bruce -- Judgement: Eww! Symbols that take more than one line to represent! Also not terribly ambitious, though the code content is cute. -- Rule 39:6 Dave VALID (1.0 SP) Wed-Jun-21 14:36:16 Subject: 39:7 [sic] The code described in a previous rule, namely: _____ ;LOVE[$]=\/{EVL} defines a particular kind of love, indicated by the square bracket delimiters (in this case, the love of money), as the root of all evil. Obviously, given the previous line of code ;LOVE::WLD.grnd (my note: comment deleted for clarity) where LOVE is NOT delimited, we can see that evil must play some role in making the world go round. Thus we must, in some way, limit the role of evil in order to create a stable system. Therefore, we have the following: ;{ALL}:>{OBJ}:>{HVE} ;{OBJ}:>{NHV}:>{BUY} ;if |{BUY} then $() -> :>{HVE} ;HPNS#{BUY} | is a member of the set # is not a member of the set. This code appears after the code described in 39:1. The next valid piece of code should provide a positive reinforcement for doing good, rather than a disincentive for evil. Dave Honsinger -- Judgement: Of *course* UPL is case-sensitive, how could I have doubted it for a moment? I like the purposeful quality of the code given, though the rule is a bit long. I'm willing to forgive the misnumbering as it's not part of the rule. -- For unknown reasons I did not receive the first mailing of this rule. I don't think I'm allowed to renumber Dave's rule in order to fit it in, so I have no choice but to judge it Unsuccessful. I will try to find out whether my mailer is dropping mail (and fix it if it is!) I encourage Jeremy to resubmit it taking Dave's rule into account. Storm >>>>>> Rule 39:7 Jeremy UNSUCCESSFUL (0.0 SP) Thu Jun 22 13:16:09 Subject: Rule 39:6 From: Jeremy D Selengut 39:2 can also be interpreted to mean that "nice guys finish last" as t(f) in this case signifies the finishing time. The following code is called before that mentioned in 39:1 in the unified compiled version (UCV) of the Universe program: ;DIM% {SPC} : 3 : {x,y,z} ;DIM% {TIM} : 1 : {t} ;{x,y,z,t} -> ortho ;t -> unidir ;t(0) -> 0 Indicate where your code falls in the UCV relative to at least one other piece of code found in another valid rule. >>>>>> -------------------- Rule 38:8 Jeremy INVALID (0.5 SP) Mon Jun 26 08:24:10 1995 Cc: selengut@MIT.EDU Subject: Rule Proposal >>>>>> Dave's most recent line of code recounds the truism: "Happiness is not a thing which can be bought" As required (yawn), here is some code reinforcing the doing of good deeds. This is an excerpt from a much larger sub-program: ;{MAN} :> {SRA} /* SRA=self-responsible adult i.e. not excused from judgement because of impaired brain function */ ;DEFN : 0 => INFIN : INTEGER ;For each <- = C + 1 /* Note that a previous subprogam includes the code: ; | {SRA} ; <- = 0 */ ;DEFN : evil => good : REAL (-1,1) * ;trn() -> trn'() iff > 0 /* Thus: */ ;TALLY(_trn'_) -> TALLY() +1 Notes: C< > notes the current value of <> held in the buffers iff means "if and only if" i.e. any other subprogram which contradicts this statement will cause an error * indicates that some number of lines of code have been omitted here <1>_2_ means the thing 1 which is associated with or responsible for thing 2 The next three valid rules may not concern themselves in any way with any set {X} which follows the relationship {MAN} :> {X} >>>>>> - Jeremy -- Judgement: (0002) UNTERMINATED COMMENT Lines containing only comments are prohibited by 39:5. Otherwise a nice rule. (I don't think the argument that you can wrap lines as long as they don't start with ";" is in the spirit of this rather user- unfriendly language.) -- Rule 39:9 Vanyel VALID (1.0 SP) Tue Jun 27 00:05:05 1995 From: Don Blaheta >>>>> ;{ALL}:>{OBJ}:>{HVE} ;{OBJ}:>{NHV}:>{BUY} These two lines fairly simply specify that objects are a subset of things, and what a person has is a subset of objects. Likewise, what a person *doesn't* have is a subset of objects (line 2), and things which may be bought are a subset of what a person doesn't have. ;if |{BUY} then $() -> :>{HVE} This bit of code shows some control structure for UPL, namely the conditional block. The condition, "|{BUY}" is true if and only if the item in variable is a member of the set of things which may be bought. In this conditional statement, if the condition is true, then through spending of money (signified by the $ and parens surrounding the variable ) the item in variable may be moved into the set of what a person has. Here, the :> operator is overloaded--when a non-set parameter is given on the left side, it means that that parameter is moved into the set specified on the right. ;HPNS#{BUY} This line simply states that the universal constant of happiness (a universal constant as it has no brackets of any sort surrounding it) is not in the set of things which may be bought. There are a number of universal constants, most often represented with four-letter abbreviatons, and distinguished by not having brackets of any sort, unlike variables (angle), sets (curly), subtypes (square), and functions (round). A universal constant is used in the following code, as well as more control structure: ;while (~ SCSS) ;!try ;!try Future rules must specify how the compiler disambiguates overloaded operators. >>>>> I sincerely apologize for the lengthy rule, but this round seems to grow the rules exponentially. A bit of brief explanation for future rulesters: "Overloading", in programming, is when a function or operator has two different meanings depending on context. Like in verbal English, "to", "two", and "too" sound alike, but we can tell what is meant by context--so you get to tell the compiler how to do it with UPL. :) Vanyel ------ The specification "future rules" is troublesomely vague, and may not prove to have the desired effect. On the other hand, the rest of the rule is clever. ----- Rule 39:10 Stein INVALID (2.5 SP) Wed Jun 28 00:57:04 1995 From: Stein.Kulseth@TF.telenor.no Subject: 39:10 <<<< ;while (~ SCSS) ;!try ;!try This little snip of code holds the universal truth that if you do not succeed, then you must try and try harder. And indeed is appropriate for this rule, for this rule does not succeed in specifying how the compiler disambiguates overloaded operators. Rather it is up to the next two rules to fulfill this restriction from the previous rule. GOPL also has the possibility for function sets (note: all GOPL function has only one single parameter, which may be composite using the * delimited notation), like in the following code: ;rnd(x) # {IHVH::y(x)} Using this we see that we may form FRC restrictions using GOPL like: ;DEFN : ANY : FUNCTION ;DEFN : 0 => INFIN * 0 => INFIN : INTEGER*INTEGER ;DEFN : 2 => INFIN : INTEGER ;DEFN : "AndrewDRhodes" => "WendyHatch" : PERSON ;if ()|{FRC::y(x){INTEGER%INTEGER}} and =39* then ;if ::() and ::(39*-1 then () -> INVALID >>>> Again a trifle long, sorry. Got carried away... -- Stein stein.kulseth@tf.telenor.no G=Stein;S=Kulseth;O=TF;P=telenor;A=telemax;C=no; http://www.nta.no/brukere/stein --- Judgement: Alas, Stein missed his window of eligibility by a couple of minutes. A very nice rule, though, working on a number of levels. Half a point off for length. ---- Rule 39:11 Dave INVALID (-1.0 SP) Wed Jun 28 14:40:49 1995 In the preceding code the line ;while (~ SCSS) calls a universal constant (explained in the accompanying text preceding) identified as SCSS and representing "success". The character "~" denotes negation; therefore the code calls the following lines only when there is no state of "success". The lines that follow: ;!try :!try call a subroutine (called by the !) defining attempts to correct the state of "non-success". In whole the bit of code states quite simply if success in not achieved one must attempt again. The subroutine ?try is interesting in that it offers some insight into the METHODS of trying... ;?try ;do ;if => then !admit ;if => SCSS then !reward ;?admit ;echo ;!try Further examples of subroutine processing should follow in the next rule. Dave Honsinger -- Judgement: Missing the deadline by a couple of minutes, alas. As the author notes, the use of => is also incorrect, and there is something about the structure of the recursion that makes me queasy (not that the real universe doesn't do that occasionally!) Storm mkkuhner@genetics.washington.edu