# HG changeset patch # User Christian Urban # Date 1606871714 0 # Node ID 1bd800376e0c322147334cfdd8f8ae8db2f3af53 # Parent 116fa3c8584f98e5f1afe4872c05586ce2f6b93b updated diff -r 116fa3c8584f -r 1bd800376e0c marking2/docdiff.scala --- a/marking2/docdiff.scala Mon Nov 30 12:58:37 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -// Preliminary Part about Code Similarity -//======================================== - - -object CW7a { - -//(1) Complete the clean function below. It should find -// all words in a string using the regular expression -// \w+ and the library function -// -// some_regex.findAllIn(some_string) -// -// The words should be Returned as a list of strings. - -def clean(s: String) : List[String] = - ("""\w+""".r).findAllIn(s).toList - - -//(2) The function occurrences calculates the number of times -// strings occur in a list of strings. These occurrences should -// be calculated as a Map from strings to integers. - -def occurrences(xs: List[String]): Map[String, Int] = - (for (x <- xs.distinct) yield (x, xs.count(_ == x))).toMap - -//(3) This functions calculates the dot-product of two documents -// (list of strings). For this it calculates the occurrence -// maps from (2) and then multiplies the corresponding occurrences. -// If a string does not occur in a document, the product is zero. -// The function finally sums up all products. - -def prod(lst1: List[String], lst2: List[String]) : Int = { - val words = (lst1 ::: lst2).distinct - val occs1 = occurrences(lst1) - val occs2 = occurrences(lst2) - words.map{ w => occs1.getOrElse(w, 0) * occs2.getOrElse(w, 0) }.sum -} - -//(4) Complete the functions overlap and similarity. The overlap of -// two documents is calculated by the formula given in the assignment -// description. The similarity of two strings is given by the overlap -// of the cleaned (see (1)) strings. - -def overlap(lst1: List[String], lst2: List[String]) : Double = { - val m1 = prod(lst1, lst1) - val m2 = prod(lst2, lst2) - prod(lst1, lst2).toDouble / (List(m1, m2).max) -} - -def similarity(s1: String, s2: String) : Double = - overlap(clean(s1), clean(s2)) - - -/* - - -val list1 = List("a", "b", "b", "c", "d") -val list2 = List("d", "b", "d", "b", "d") - -occurrences(List("a", "b", "b", "c", "d")) // Map(a -> 1, b -> 2, c -> 1, d -> 1) -occurrences(List("d", "b", "d", "b", "d")) // Map(d -> 3, b -> 2) - -prod(list1,list2) // 7 - -overlap(list1, list2) // 0.5384615384615384 -overlap(list2, list1) // 0.5384615384615384 -overlap(list1, list1) // 1.0 -overlap(list2, list2) // 1.0 - -// Plagiarism examples from -// https://desales.libguides.com/avoidingplagiarism/examples - -val orig1 = """There is a strong market demand for eco-tourism in -Australia. Its rich and diverse natural heritage ensures Australia's -capacity to attract international ecotourists and gives Australia a -comparative advantage in the highly competitive tourism industry.""" - -val plag1 = """There is a high market demand for eco-tourism in -Australia. Australia has a comparative advantage in the highly -competitive tourism industry due to its rich and varied natural -heritage which ensures Australia's capacity to attract international -ecotourists.""" - -similarity(orig1, plag1) - - -// Plagiarism examples from -// https://www.utc.edu/library/help/tutorials/plagiarism/examples-of-plagiarism.php - -val orig2 = """No oil spill is entirely benign. Depending on timing and -location, even a relatively minor spill can cause significant harm to -individual organisms and entire populations. Oil spills can cause -impacts over a range of time scales, from days to years, or even -decades for certain spills. Impacts are typically divided into acute -(short-term) and chronic (long-term) effects. Both types are part of a -complicated and often controversial equation that is addressed after -an oil spill: ecosystem recovery.""" - -val plag2 = """There is no such thing as a "good" oil spill. If the -time and place are just right, even a small oil spill can cause damage -to sensitive ecosystems. Further, spills can cause harm days, months, -years, or even decades after they occur. Because of this, spills are -usually broken into short-term (acute) and long-term (chronic) -effects. Both of these types of harm must be addressed in ecosystem -recovery: a controversial tactic that is often implemented immediately -following an oil spill.""" - -overlap(clean(orig2), clean(plag2)) -similarity(orig2, plag2) - -// The punchline: everything above 0.6 looks suspicious and -// should be looked at by staff. - -*/ - - -} diff -r 116fa3c8584f -r 1bd800376e0c marking2/docdiff_test.sh --- a/marking2/docdiff_test.sh Mon Nov 30 12:58:37 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -#!/bin/bash - -# to make the script fail safely -set -euo pipefail - - -out=${1:-output} - -echo "" > $out - -echo -e "Below is the feedback and provisional marks for your submission" >> $out -echo -e "for the Preliminary Part of Assignemnt 7. Please note all marks are provisional until" >> $out -echo -e "ratified by the assessment board -- this is not an official" >> $out -echo -e "results transcript." >> $out -echo -e "" >> $out - -echo -e "Below is the feedback for your submission docdiff.scala" >> $out -echo -e "" >> $out - -# marks for CW7 parts 1 + 2 -marks=$(( 0 )) - - -# compilation tests - -function scala_compile { - (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala "$1" 2>> $out 1>> $out) -} - -# functional tests - -function scala_assert { - (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -i "$1" -- "$2" 2> /dev/null 1> /dev/null) -} - -# purity test - -function scala_vars { - (egrep '\bvar\b|\breturn\b|ListBuffer|mutable' "$1" 2> /dev/null 1> /dev/null) -} - - -# var, .par return, ListBuffer test -# -echo -e "docdiff.scala does not contain vars, returns etc?" | tee -a $out - -if (scala_vars docdiff.scala) -then - echo -e " --> FAIL (make triple-sure your program conforms to the required format)\n" | tee -a $out - tsts0=$(( 1 )) -else - echo -e " --> success" | tee -a $out - tsts0=$(( 0 )) -fi - -### compilation test - - -if [ $tsts0 -eq 0 ] -then - echo -e "docdiff.scala runs?" | tee -a $out - - if (scala_compile docdiff.scala) - then - echo -e " --> success" | tee -a $out - tsts=$(( 0 )) - else - echo -e " --> scala did not run docdiff.scala" | tee -a $out - tsts=$(( 1 )) - fi -else - tsts=$(( 1 )) -fi - -### docdiff clean tests - -if [ $tsts -eq 0 ] -then - echo -e "docdiff.scala tests:" | tee -a $out - echo -e " clean(\"ab a abc\") == List(\"ab\", \"a\", \"abc\")" | tee -a $out - echo -e " clean(\"ab*a abc1\") == List(\"ab\", \"a\", \"abc1\")" | tee -a $out - - if (scala_assert "docdiff.scala" "docdiff_test1.scala") - then - echo -e " --> success" | tee -a $out - marks=$(( marks + 1 )) - else - echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out - fi -fi - -### docdiff occurrences tests - -if [ $tsts -eq 0 ] -then - echo -e " occurrences(List(\"a\", \"b\", \"b\", \"c\", \"d\")) == " | tee -a $out - echo -e " Map(\"a\" -> 1, \"b\" -> 2, \"c\" -> 1, \"d\" -> 1)" | tee -a $out - echo -e " " | tee -a $out - echo -e " occurrences(List(\"d\", \"b\", \"d\", \"b\", \"d\")) == " | tee -a $out - echo -e " Map(\"d\" -> 3, \"b\" -> 2)" | tee -a $out - echo -e " " | tee -a $out - echo -e " occurrences(Nil) == Map() " | tee -a $out - echo -e " " | tee -a $out - echo -e " occurrences(List(\"b\", \"b\", \"b\", \"b\", \"b\")) == Map(\"b\" -> 5)" | tee -a $out - - if (scala_assert "docdiff.scala" "docdiff_test2.scala") - then - echo -e " --> success" | tee -a $out - marks=$(( marks + 1 )) - else - echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out - fi -fi - -### docdiff prod tests - -if [ $tsts -eq 0 ] -then - echo -e " val l1 = List(\"a\", \"b\", \"b\", \"c\", \"d\")" | tee -a $out - echo -e " val l2 = List(\"d\", \"b\", \"d\", \"b\", \"d\")" | tee -a $out - echo -e " " | tee -a $out - echo -e " prod(l1, l2) == 7 " | tee -a $out - echo -e " prod(l1, l1) == 7 " | tee -a $out - echo -e " prod(l2, l2) == 13 " | tee -a $out - echo -e " " | tee -a $out - echo -e " val l3 = List(\"1\", \"2\", \"3\", \"4\", \"5\")" | tee -a $out - echo -e " prod(l1, l3) == 0 " | tee -a $out - - if (scala_assert "docdiff.scala" "docdiff_test3.scala") - then - echo -e " --> success" | tee -a $out - marks=$(( marks + 1 )) - else - echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out - fi -fi - -### docdiff overlap tests - -if [ $tsts -eq 0 ] -then - echo -e " val l1 = List(\"a\", \"b\", \"b\", \"c\", \"d\")" | tee -a $out - echo -e " val l2 = List(\"d\", \"b\", \"d\", \"b\", \"d\")" | tee -a $out - echo -e " " | tee -a $out - echo -e " overlap(l1, l2) == 0.5384615384615384 " | tee -a $out - echo -e " overlap(l1, l1) == 1.0 " | tee -a $out - echo -e " overlap(l2, l2) == 1.0 " | tee -a $out - - if (scala_assert "docdiff.scala" "docdiff_test4.scala") - then - echo -e " --> success" | tee -a $out - marks=$(( marks + 1 )) - else - echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out - fi -fi - - -## final marks -echo -e "Overall mark for the Preliminary Part" | tee -a $out -echo -e " $marks" | tee -a $out - diff -r 116fa3c8584f -r 1bd800376e0c marking2/docdiff_test1.scala --- a/marking2/docdiff_test1.scala Mon Nov 30 12:58:37 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ - -import CW7a._ - -assert(clean("ab a abc") == List("ab", "a", "abc")) -assert(clean("ab*a abc1") == List("ab", "a", "abc1")) diff -r 116fa3c8584f -r 1bd800376e0c marking2/docdiff_test2.scala --- a/marking2/docdiff_test2.scala Mon Nov 30 12:58:37 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ - -import CW7a._ - -assert(occurrences(List("a", "b", "b", "c", "d")) == Map("a" -> 1, "b" -> 2, "c" -> 1, "d" -> 1)) - -assert(occurrences(List("d", "b", "d", "b", "d")) == Map("d" -> 3, "b" -> 2)) - -assert(occurrences(List("b", "b", "b", "b", "b")) == Map("b" -> 5)) - -assert(occurrences(Nil) == Map()) diff -r 116fa3c8584f -r 1bd800376e0c marking2/docdiff_test3.scala --- a/marking2/docdiff_test3.scala Mon Nov 30 12:58:37 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ - -import CW7a._ - -val urban_list1 = List("a", "b", "b", "c", "d") -val urban_list2 = List("d", "b", "d", "b", "d") - -assert(prod(urban_list1, urban_list2) == 7) -assert(prod(urban_list1, urban_list1) == 7) -assert(prod(urban_list2, urban_list2) == 13) - - -val urban_listA = List("a", "b", "b", "c", "d") -val urban_listB = List("1", "2", "3", "4", "5") - -assert(prod(urban_listA, urban_listB) == 0) diff -r 116fa3c8584f -r 1bd800376e0c marking2/docdiff_test4.scala --- a/marking2/docdiff_test4.scala Mon Nov 30 12:58:37 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ - -import CW7a._ - -val urban_list1 = List("a", "b", "b", "c", "d") -val urban_list2 = List("d", "b", "d", "b", "d") - -assert(overlap(urban_list1, urban_list2) == 0.5384615384615384) -assert(overlap(urban_list1, urban_list1) == 1.0) -assert(overlap(urban_list2, urban_list2) == 1.0) diff -r 116fa3c8584f -r 1bd800376e0c marking2/mk --- a/marking2/mk Mon Nov 30 12:58:37 2020 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#!/bin/bash -set -euo pipefail - - -trap "exit" INT - -files=${1:-assignment2019scala-*/Part7} - -for sd in $files; do - cd $sd - echo $sd - touch . - cp ../../../../../marking2/docdiff_test.sh . - cp ../../../../../marking2/docdiff_test1.scala . - cp ../../../../../marking2/docdiff_test2.scala . - cp ../../../../../marking2/docdiff_test3.scala . - cp ../../../../../marking2/docdiff_test4.scala . - ./docdiff_test.sh output - rm docdiff_test.sh - rm docdiff_test1.scala - rm docdiff_test2.scala - rm docdiff_test3.scala - rm docdiff_test4.scala - cd .. - cd .. -done - - diff -r 116fa3c8584f -r 1bd800376e0c pre_marking1/collatz_test.sh --- a/pre_marking1/collatz_test.sh Mon Nov 30 12:58:37 2020 +0000 +++ b/pre_marking1/collatz_test.sh Wed Dec 02 01:15:14 2020 +0000 @@ -19,7 +19,7 @@ echo "The feedback for your submission for collatz.scala" >> $out echo "" >> $out -# marks for CW6 basic part +# marks for CW6 preliminary part marks=$(( 0 )) # compilation tests diff -r 116fa3c8584f -r 1bd800376e0c pre_marking1/mk --- a/pre_marking1/mk Mon Nov 30 12:58:37 2020 +0000 +++ b/pre_marking1/mk Wed Dec 02 01:15:14 2020 +0000 @@ -1,5 +1,5 @@ -#!/bin/sh -###set -e +#!/bin/bash +set -euo pipefail trap "exit" INT diff -r 116fa3c8584f -r 1bd800376e0c pre_marking2/docdiff.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pre_marking2/docdiff.scala Wed Dec 02 01:15:14 2020 +0000 @@ -0,0 +1,117 @@ +// Preliminary Part about Code Similarity +//======================================== + + +object CW7a { + +//(1) Complete the clean function below. It should find +// all words in a string using the regular expression +// \w+ and the library function +// +// some_regex.findAllIn(some_string) +// +// The words should be Returned as a list of strings. + +def clean(s: String) : List[String] = + ("""\w+""".r).findAllIn(s).toList + + +//(2) The function occurrences calculates the number of times +// strings occur in a list of strings. These occurrences should +// be calculated as a Map from strings to integers. + +def occurrences(xs: List[String]): Map[String, Int] = + (for (x <- xs.distinct) yield (x, xs.count(_ == x))).toMap + +//(3) This functions calculates the dot-product of two documents +// (list of strings). For this it calculates the occurrence +// maps from (2) and then multiplies the corresponding occurrences. +// If a string does not occur in a document, the product is zero. +// The function finally sums up all products. + +def prod(lst1: List[String], lst2: List[String]) : Int = { + val words = (lst1 ::: lst2).distinct + val occs1 = occurrences(lst1) + val occs2 = occurrences(lst2) + words.map{ w => occs1.getOrElse(w, 0) * occs2.getOrElse(w, 0) }.sum +} + +//(4) Complete the functions overlap and similarity. The overlap of +// two documents is calculated by the formula given in the assignment +// description. The similarity of two strings is given by the overlap +// of the cleaned (see (1)) strings. + +def overlap(lst1: List[String], lst2: List[String]) : Double = { + val m1 = prod(lst1, lst1) + val m2 = prod(lst2, lst2) + prod(lst1, lst2).toDouble / (List(m1, m2).max) +} + +def similarity(s1: String, s2: String) : Double = + overlap(clean(s1), clean(s2)) + + +/* + + +val list1 = List("a", "b", "b", "c", "d") +val list2 = List("d", "b", "d", "b", "d") + +occurrences(List("a", "b", "b", "c", "d")) // Map(a -> 1, b -> 2, c -> 1, d -> 1) +occurrences(List("d", "b", "d", "b", "d")) // Map(d -> 3, b -> 2) + +prod(list1,list2) // 7 + +overlap(list1, list2) // 0.5384615384615384 +overlap(list2, list1) // 0.5384615384615384 +overlap(list1, list1) // 1.0 +overlap(list2, list2) // 1.0 + +// Plagiarism examples from +// https://desales.libguides.com/avoidingplagiarism/examples + +val orig1 = """There is a strong market demand for eco-tourism in +Australia. Its rich and diverse natural heritage ensures Australia's +capacity to attract international ecotourists and gives Australia a +comparative advantage in the highly competitive tourism industry.""" + +val plag1 = """There is a high market demand for eco-tourism in +Australia. Australia has a comparative advantage in the highly +competitive tourism industry due to its rich and varied natural +heritage which ensures Australia's capacity to attract international +ecotourists.""" + +similarity(orig1, plag1) + + +// Plagiarism examples from +// https://www.utc.edu/library/help/tutorials/plagiarism/examples-of-plagiarism.php + +val orig2 = """No oil spill is entirely benign. Depending on timing and +location, even a relatively minor spill can cause significant harm to +individual organisms and entire populations. Oil spills can cause +impacts over a range of time scales, from days to years, or even +decades for certain spills. Impacts are typically divided into acute +(short-term) and chronic (long-term) effects. Both types are part of a +complicated and often controversial equation that is addressed after +an oil spill: ecosystem recovery.""" + +val plag2 = """There is no such thing as a "good" oil spill. If the +time and place are just right, even a small oil spill can cause damage +to sensitive ecosystems. Further, spills can cause harm days, months, +years, or even decades after they occur. Because of this, spills are +usually broken into short-term (acute) and long-term (chronic) +effects. Both of these types of harm must be addressed in ecosystem +recovery: a controversial tactic that is often implemented immediately +following an oil spill.""" + +overlap(clean(orig2), clean(plag2)) +similarity(orig2, plag2) + +// The punchline: everything above 0.6 looks suspicious and +// should be looked at by staff. + +*/ + + +} diff -r 116fa3c8584f -r 1bd800376e0c pre_marking2/docdiff_test.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pre_marking2/docdiff_test.sh Wed Dec 02 01:15:14 2020 +0000 @@ -0,0 +1,170 @@ +#!/bin/zsh + +# to make the script fail safely +set -euo pipefail + + +out=${1:-output} + +echo "" > $out + +echo `date` >> $out +echo -e "Below is the feedback and provisional marks for your submission" >> $out +echo -e "for the Preliminary Part of Part 2 (Scala). Please note all marks are provisional until" >> $out +echo -e "ratified by the assessment board -- this is not an official" >> $out +echo -e "results transcript." >> $out +echo -e "" >> $out + +echo -e "Below is the feedback for your submission docdiff.scala" >> $out +echo -e "" >> $out + +# marks for CW7 preliminary part +marks=$(( 0.0 )) + + +# compilation tests + +function scala_compile { + (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -Xprint:parser "$1" 2> c$out 1> c$out) +} + +# functional tests + +function scala_assert { + (ulimit -t 30; JAVA_OPTS="-Xmx1g" scala -nc -i "$1" -- "$2" -e "" 2> /dev/null 1> /dev/null) +} + +# purity test + +function scala_vars { + (egrep '\bvar\b|\breturn\b|\.par\.|\.par |ListBuffer|AtomicInteger|mutable|util.control|new Array' c$out 2> /dev/null 1> /dev/null) +} + + +### compilation test + +echo -e "docdiff.scala runs?" | tee -a $out + +if (scala_compile docdiff.scala) +then + echo -e " --> success" | tee -a $out + tsts=$(( 0 )) +else + echo -e " --> SCALA DID NOT RUN docdiff.scala\n" | tee -a $out + tsts=$(( 1 )) +fi + + +# var, .par return, ListBuffer test +# + +if [ $tsts -eq 0 ] +then + echo -e "docdiff.scala does not contain VARS, RETURNS etc?" | tee -a $out + + if (scala_vars docdiff.scala) + then + echo -e " --> test failed\n" | tee -a $out + tsts=$(( 1 )) + else + echo -e " --> success" | tee -a $out + tsts=$(( 0 )) + fi +else + tsts=$(( 1 )) +fi + +echo >> $out + + +### docdiff clean tests + +if [ $tsts -eq 0 ] +then + echo -e "docdiff.scala tests:" | tee -a $out + echo -e " clean(\"ab a abc\") == List(\"ab\", \"a\", \"abc\")" | tee -a $out + echo -e " clean(\"ab*a abc1\") == List(\"ab\", \"a\", \"abc1\")" | tee -a $out + + if (scala_assert "docdiff.scala" "docdiff_test1.scala") + then + echo -e " --> success" | tee -a $out + marks=$(( marks + 0.5 )) + else + echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out + fi +fi + +### docdiff occurrences tests + +if [ $tsts -eq 0 ] +then + echo -e " occurrences(List(\"a\", \"b\", \"b\", \"c\", \"d\")) == " | tee -a $out + echo -e " Map(\"a\" -> 1, \"b\" -> 2, \"c\" -> 1, \"d\" -> 1)" | tee -a $out + echo -e " " | tee -a $out + echo -e " occurrences(List(\"d\", \"b\", \"d\", \"b\", \"d\")) == " | tee -a $out + echo -e " Map(\"d\" -> 3, \"b\" -> 2)" | tee -a $out + echo -e " " | tee -a $out + echo -e " occurrences(Nil) == Map() " | tee -a $out + echo -e " " | tee -a $out + echo -e " occurrences(List(\"b\", \"b\", \"b\", \"b\", \"b\")) == Map(\"b\" -> 5)" | tee -a $out + + if (scala_assert "docdiff.scala" "docdiff_test2.scala") + then + echo -e " --> success" | tee -a $out + marks=$(( marks + 1.0 )) + else + echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out + fi +fi + +### docdiff prod tests + +if [ $tsts -eq 0 ] +then + echo -e " val l1 = List(\"a\", \"b\", \"b\", \"c\", \"d\")" | tee -a $out + echo -e " val l2 = List(\"d\", \"b\", \"d\", \"b\", \"d\")" | tee -a $out + echo -e " " | tee -a $out + echo -e " prod(l1, l2) == 7 " | tee -a $out + echo -e " prod(l1, l1) == 7 " | tee -a $out + echo -e " prod(l2, l2) == 13 " | tee -a $out + echo -e " " | tee -a $out + echo -e " val l3 = List(\"1\", \"2\", \"3\", \"4\", \"5\")" | tee -a $out + echo -e " prod(l1, l3) == 0 " | tee -a $out + + if (scala_assert "docdiff.scala" "docdiff_test3.scala") + then + echo -e " --> success" | tee -a $out + marks=$(( marks + 1.0 )) + else + echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out + fi +fi + +### docdiff overlap tests + +if [ $tsts -eq 0 ] +then + echo -e " val l1 = List(\"a\", \"b\", \"b\", \"c\", \"d\")" | tee -a $out + echo -e " val l2 = List(\"d\", \"b\", \"d\", \"b\", \"d\")" | tee -a $out + echo -e " " | tee -a $out + echo -e " overlap(l1, l2) == 0.5384615384615384 " | tee -a $out + echo -e " overlap(l1, l1) == 1.0 " | tee -a $out + echo -e " overlap(l2, l2) == 1.0 " | tee -a $out + + if (scala_assert "docdiff.scala" "docdiff_test4.scala") + then + echo -e " --> success" | tee -a $out + marks=$(( marks + 0.5 )) + else + echo -e " --> ONE OF THE TESTS FAILED\n" | tee -a $out + fi +fi + + +## final marks +echo -e "Overall mark for the Preliminary Part 2 (Scala)" | tee -a $out +printf " %0.1f\n" $marks | tee -a $out + + +#echo -e " $marks" | tee -a $out + diff -r 116fa3c8584f -r 1bd800376e0c pre_marking2/docdiff_test1.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pre_marking2/docdiff_test1.scala Wed Dec 02 01:15:14 2020 +0000 @@ -0,0 +1,5 @@ + +import CW7a._ + +assert(clean("ab a abc") == List("ab", "a", "abc")) +assert(clean("ab*a abc1") == List("ab", "a", "abc1")) diff -r 116fa3c8584f -r 1bd800376e0c pre_marking2/docdiff_test2.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pre_marking2/docdiff_test2.scala Wed Dec 02 01:15:14 2020 +0000 @@ -0,0 +1,10 @@ + +import CW7a._ + +assert(occurrences(List("a", "b", "b", "c", "d")) == Map("a" -> 1, "b" -> 2, "c" -> 1, "d" -> 1)) + +assert(occurrences(List("d", "b", "d", "b", "d")) == Map("d" -> 3, "b" -> 2)) + +assert(occurrences(List("b", "b", "b", "b", "b")) == Map("b" -> 5)) + +assert(occurrences(Nil) == Map()) diff -r 116fa3c8584f -r 1bd800376e0c pre_marking2/docdiff_test3.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pre_marking2/docdiff_test3.scala Wed Dec 02 01:15:14 2020 +0000 @@ -0,0 +1,15 @@ + +import CW7a._ + +val urban_list1 = List("a", "b", "b", "c", "d") +val urban_list2 = List("d", "b", "d", "b", "d") + +assert(prod(urban_list1, urban_list2) == 7) +assert(prod(urban_list1, urban_list1) == 7) +assert(prod(urban_list2, urban_list2) == 13) + + +val urban_listA = List("a", "b", "b", "c", "d") +val urban_listB = List("1", "2", "3", "4", "5") + +assert(prod(urban_listA, urban_listB) == 0) diff -r 116fa3c8584f -r 1bd800376e0c pre_marking2/docdiff_test4.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pre_marking2/docdiff_test4.scala Wed Dec 02 01:15:14 2020 +0000 @@ -0,0 +1,9 @@ + +import CW7a._ + +val urban_list1 = List("a", "b", "b", "c", "d") +val urban_list2 = List("d", "b", "d", "b", "d") + +assert(overlap(urban_list1, urban_list2) == 0.5384615384615384) +assert(overlap(urban_list1, urban_list1) == 1.0) +assert(overlap(urban_list2, urban_list2) == 1.0) diff -r 116fa3c8584f -r 1bd800376e0c pre_marking2/mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pre_marking2/mk Wed Dec 02 01:15:14 2020 +0000 @@ -0,0 +1,28 @@ +#!/bin/bash +set -euo pipefail + + +trap "exit" INT + +files=${1:-*/pre2} + +for sd in $files; do + cd $sd + echo $sd + touch . + cp ../../../../../pre_marking2/docdiff_test.sh . + cp ../../../../../pre_marking2/docdiff_test1.scala . + cp ../../../../../pre_marking2/docdiff_test2.scala . + cp ../../../../../pre_marking2/docdiff_test3.scala . + cp ../../../../../pre_marking2/docdiff_test4.scala . + ./docdiff_test.sh output + rm docdiff_test.sh + rm docdiff_test1.scala + rm docdiff_test2.scala + rm docdiff_test3.scala + rm docdiff_test4.scala + cd .. + cd .. +done + + diff -r 116fa3c8584f -r 1bd800376e0c progs/lecture4.scala --- a/progs/lecture4.scala Mon Nov 30 12:58:37 2020 +0000 +++ b/progs/lecture4.scala Wed Dec 02 01:15:14 2020 +0000 @@ -249,6 +249,10 @@ // Source.fromFile(name)(encoding) + + + + // Sudoku //======== diff -r 116fa3c8584f -r 1bd800376e0c slides/slides03.pdf Binary file slides/slides03.pdf has changed diff -r 116fa3c8584f -r 1bd800376e0c slides/slides03.tex --- a/slides/slides03.tex Mon Nov 30 12:58:37 2020 +0000 +++ b/slides/slides03.tex Wed Dec 02 01:15:14 2020 +0000 @@ -354,10 +354,25 @@ % \end{frame} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame}<1-10> +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame}[t] +\frametitle{Preliminary 1 (Scala)} + +Raw marks (298 submissions):\bigskip + +\begin{itemize} +\item 3\%: \hspace{4mm}227 +\item 2\%: \hspace{4mm}35 +\item 1\%: \hspace{4mm}9 +\item 0\%: \hspace{4mm}27 +\end{itemize} + + \end{frame} -\end{document} + +\begin{frame}<1-20> +\end{frame} \end{document} diff -r 116fa3c8584f -r 1bd800376e0c slides/slides04.pdf Binary file slides/slides04.pdf has changed