diff --git a/compendium/examples/sum-min-max.scala b/compendium/examples/sum-min-max.scala new file mode 100644 index 000000000..dcca0ad70 --- /dev/null +++ b/compendium/examples/sum-min-max.scala @@ -0,0 +1,6 @@ +object SumMinMax { + def main(args: Array[String]): Unit = { + val ints = args.map(_.toInt) + println(ints.sum + " " + ints.min + " " + ints.max) + } +} diff --git a/compendium/examples/swap-args.scala b/compendium/examples/swap-args.scala new file mode 100644 index 000000000..758c0fcbc --- /dev/null +++ b/compendium/examples/swap-args.scala @@ -0,0 +1,10 @@ +object SwapFirstLastArg { + def main(args: Array[String]): Unit = { + if (args.size > 1) { + val temp = args(0) + args(0) = args(args.size -1) + args(args.size -1) = temp + } + println(args.mkString(" ")) + } +} diff --git a/compendium/generated/quiz-w01-concepts-solurows-generated.tex b/compendium/generated/quiz-w01-concepts-solurows-generated.tex index 247295544..bfdb31067 100644 --- a/compendium/generated/quiz-w01-concepts-solurows-generated.tex +++ b/compendium/generated/quiz-w01-concepts-solurows-generated.tex @@ -1,16 +1,16 @@ - litteral & 1 & ~~\Large$\leadsto$~~ & O & anger ett specifikt datavärde \\ - sträng & 2 & ~~\Large$\leadsto$~~ & H & en sekvens av tecken \\ - sats & 3 & ~~\Large$\leadsto$~~ & N & en kodrad som gör något; kan särskiljas med semikolon \\ - uttryck & 4 & ~~\Large$\leadsto$~~ & A & kombinerar värden och funktioner till ett nytt värde \\ - funktion & 5 & ~~\Large$\leadsto$~~ & G & vid anrop beräknas ett returvärde \\ - procedur & 6 & ~~\Large$\leadsto$~~ & M & vid anrop sker (sido)effekt; returvärdet är tomt \\ - exekveringsfel & 7 & ~~\Large$\leadsto$~~ & L & sker medan programmet kör \\ - kompileringsfel & 8 & ~~\Large$\leadsto$~~ & K & sker innan exekveringen startat \\ - abstrahera & 9 & ~~\Large$\leadsto$~~ & F & att införa nya begrepp som förenklar kodningen \\ - kompilera & 10 & ~~\Large$\leadsto$~~ & E & att översätta kod till exekverbar form \\ - typ & 11 & ~~\Large$\leadsto$~~ & J & beskriver vad data kan användas till \\ - for-sats & 12 & ~~\Large$\leadsto$~~ & P & bra då antalet repetitioner är bestämt i förväg \\ - while-sats & 13 & ~~\Large$\leadsto$~~ & C & bra då antalet repetitioner ej är bestämt i förväg \\ - tilldelning & 14 & ~~\Large$\leadsto$~~ & B & för att ändra en variabels värde \\ - flyttal & 15 & ~~\Large$\leadsto$~~ & I & decimaltal med begränsad noggrannhet \\ - boolesk & 16 & ~~\Large$\leadsto$~~ & D & antingen sann eller falsk \\ \ No newline at end of file + litteral & 1 & ~~\Large$\leadsto$~~ & M & anger ett specifikt datavärde \\ + sträng & 2 & ~~\Large$\leadsto$~~ & N & en sekvens av tecken \\ + sats & 3 & ~~\Large$\leadsto$~~ & P & en kodrad som gör något; kan särskiljas med semikolon \\ + uttryck & 4 & ~~\Large$\leadsto$~~ & K & kombinerar värden och funktioner till ett nytt värde \\ + funktion & 5 & ~~\Large$\leadsto$~~ & O & vid anrop beräknas ett returvärde \\ + procedur & 6 & ~~\Large$\leadsto$~~ & A & vid anrop sker (sido)effekt; returvärdet är tomt \\ + exekveringsfel & 7 & ~~\Large$\leadsto$~~ & C & sker medan programmet kör \\ + kompileringsfel & 8 & ~~\Large$\leadsto$~~ & E & sker innan exekveringen startat \\ + abstrahera & 9 & ~~\Large$\leadsto$~~ & L & att införa nya begrepp som förenklar kodningen \\ + kompilera & 10 & ~~\Large$\leadsto$~~ & F & att översätta kod till exekverbar form \\ + typ & 11 & ~~\Large$\leadsto$~~ & G & beskriver vad data kan användas till \\ + for-sats & 12 & ~~\Large$\leadsto$~~ & J & bra då antalet repetitioner är bestämt i förväg \\ + while-sats & 13 & ~~\Large$\leadsto$~~ & D & bra då antalet repetitioner ej är bestämt i förväg \\ + tilldelning & 14 & ~~\Large$\leadsto$~~ & I & för att ändra en variabels värde \\ + flyttal & 15 & ~~\Large$\leadsto$~~ & H & decimaltal med begränsad noggrannhet \\ + boolesk & 16 & ~~\Large$\leadsto$~~ & B & antingen sann eller falsk \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w01-concepts-taskrows-generated.tex b/compendium/generated/quiz-w01-concepts-taskrows-generated.tex index a6eb7f89d..8df8785e7 100644 --- a/compendium/generated/quiz-w01-concepts-taskrows-generated.tex +++ b/compendium/generated/quiz-w01-concepts-taskrows-generated.tex @@ -1,16 +1,16 @@ - litteral & 1 & & A & kombinerar värden och funktioner till ett nytt värde \\ - sträng & 2 & & B & för att ändra en variabels värde \\ - sats & 3 & & C & bra då antalet repetitioner ej är bestämt i förväg \\ - uttryck & 4 & & D & antingen sann eller falsk \\ - funktion & 5 & & E & att översätta kod till exekverbar form \\ - procedur & 6 & & F & att införa nya begrepp som förenklar kodningen \\ - exekveringsfel & 7 & & G & vid anrop beräknas ett returvärde \\ - kompileringsfel & 8 & & H & en sekvens av tecken \\ - abstrahera & 9 & & I & decimaltal med begränsad noggrannhet \\ - kompilera & 10 & & J & beskriver vad data kan användas till \\ - typ & 11 & & K & sker innan exekveringen startat \\ - for-sats & 12 & & L & sker medan programmet kör \\ - while-sats & 13 & & M & vid anrop sker (sido)effekt; returvärdet är tomt \\ - tilldelning & 14 & & N & en kodrad som gör något; kan särskiljas med semikolon \\ - flyttal & 15 & & O & anger ett specifikt datavärde \\ - boolesk & 16 & & P & bra då antalet repetitioner är bestämt i förväg \\ \ No newline at end of file + litteral & 1 & & A & vid anrop sker (sido)effekt; returvärdet är tomt \\ + sträng & 2 & & B & antingen sann eller falsk \\ + sats & 3 & & C & sker medan programmet kör \\ + uttryck & 4 & & D & bra då antalet repetitioner ej är bestämt i förväg \\ + funktion & 5 & & E & sker innan exekveringen startat \\ + procedur & 6 & & F & att översätta kod till exekverbar form \\ + exekveringsfel & 7 & & G & beskriver vad data kan användas till \\ + kompileringsfel & 8 & & H & decimaltal med begränsad noggrannhet \\ + abstrahera & 9 & & I & för att ändra en variabels värde \\ + kompilera & 10 & & J & bra då antalet repetitioner är bestämt i förväg \\ + typ & 11 & & K & kombinerar värden och funktioner till ett nytt värde \\ + for-sats & 12 & & L & att införa nya begrepp som förenklar kodningen \\ + while-sats & 13 & & M & anger ett specifikt datavärde \\ + tilldelning & 14 & & N & en sekvens av tecken \\ + flyttal & 15 & & O & vid anrop beräknas ett returvärde \\ + boolesk & 16 & & P & en kodrad som gör något; kan särskiljas med semikolon \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w01-intdiv-solurows-generated.tex b/compendium/generated/quiz-w01-intdiv-solurows-generated.tex index 3a4343f38..cd953569f 100644 --- a/compendium/generated/quiz-w01-intdiv-solurows-generated.tex +++ b/compendium/generated/quiz-w01-intdiv-solurows-generated.tex @@ -1,7 +1,7 @@ - \code| 4 / 42 | & 1 & ~~\Large$\leadsto$~~ & B & \code| 0: Int | \\ - \code| 42.0 / 2 | & 2 & ~~\Large$\leadsto$~~ & A & \code| 10.5: Double | \\ - \code| 42 / 4 | & 3 & ~~\Large$\leadsto$~~ & G & \code| 10: Int | \\ - \code| 42 % 4 | & 4 & ~~\Large$\leadsto$~~ & D & \code| 2: Int | \\ - \code| 4 % 42 | & 5 & ~~\Large$\leadsto$~~ & C & \code| 4: Int | \\ - \code| 40 % 4 == 0 | & 6 & ~~\Large$\leadsto$~~ & E & \code|true : Boolean | \\ - \code| 42 % 4 == 0 | & 7 & ~~\Large$\leadsto$~~ & F & \code|false: Boolean | \\ \ No newline at end of file + \code| 4 / 42 | & 1 & ~~\Large$\leadsto$~~ & G & \code| 0: Int | \\ + \code| 42.0 / 2 | & 2 & ~~\Large$\leadsto$~~ & F & \code| 10.5: Double | \\ + \code| 42 / 4 | & 3 & ~~\Large$\leadsto$~~ & E & \code| 10: Int | \\ + \code| 42 % 4 | & 4 & ~~\Large$\leadsto$~~ & B & \code| 2: Int | \\ + \code| 4 % 42 | & 5 & ~~\Large$\leadsto$~~ & A & \code| 4: Int | \\ + \code| 40 % 4 == 0 | & 6 & ~~\Large$\leadsto$~~ & D & \code|true : Boolean | \\ + \code| 42 % 4 == 0 | & 7 & ~~\Large$\leadsto$~~ & C & \code|false: Boolean | \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w01-intdiv-taskrows-generated.tex b/compendium/generated/quiz-w01-intdiv-taskrows-generated.tex index 0ad4d592d..bc60ff20c 100644 --- a/compendium/generated/quiz-w01-intdiv-taskrows-generated.tex +++ b/compendium/generated/quiz-w01-intdiv-taskrows-generated.tex @@ -1,7 +1,7 @@ - \code| 4 / 42 | & 1 & & A & \code| 10.5: Double | \\ - \code| 42.0 / 2 | & 2 & & B & \code| 0: Int | \\ - \code| 42 / 4 | & 3 & & C & \code| 4: Int | \\ - \code| 42 % 4 | & 4 & & D & \code| 2: Int | \\ - \code| 4 % 42 | & 5 & & E & \code|true : Boolean | \\ - \code| 40 % 4 == 0 | & 6 & & F & \code|false: Boolean | \\ - \code| 42 % 4 == 0 | & 7 & & G & \code| 10: Int | \\ \ No newline at end of file + \code| 4 / 42 | & 1 & & A & \code| 4: Int | \\ + \code| 42.0 / 2 | & 2 & & B & \code| 2: Int | \\ + \code| 42 / 4 | & 3 & & C & \code|false: Boolean | \\ + \code| 42 % 4 | & 4 & & D & \code|true : Boolean | \\ + \code| 4 % 42 | & 5 & & E & \code| 10: Int | \\ + \code| 40 % 4 == 0 | & 6 & & F & \code| 10.5: Double | \\ + \code| 42 % 4 == 0 | & 7 & & G & \code| 0: Int | \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w01-types-solurows-generated.tex b/compendium/generated/quiz-w01-types-solurows-generated.tex index c175da55f..db8b2f08b 100644 --- a/compendium/generated/quiz-w01-types-solurows-generated.tex +++ b/compendium/generated/quiz-w01-types-solurows-generated.tex @@ -1,10 +1,10 @@ - \code|1 | & 1 & ~~\Large$\leadsto$~~ & A & \code|Int | \\ - \code|1L | & 2 & ~~\Large$\leadsto$~~ & J & \code|Long | \\ - \code|1.0 | & 3 & ~~\Large$\leadsto$~~ & I & \code|Double | \\ - \code|1D | & 4 & ~~\Large$\leadsto$~~ & G & \code|Double | \\ - \code|1F | & 5 & ~~\Large$\leadsto$~~ & E & \code|Float | \\ - \code|'1' | & 6 & ~~\Large$\leadsto$~~ & F & \code|Char | \\ - \code|"1"| & 7 & ~~\Large$\leadsto$~~ & B & \code|String | \\ + \code|1 | & 1 & ~~\Large$\leadsto$~~ & B & \code|Int | \\ + \code|1L | & 2 & ~~\Large$\leadsto$~~ & H & \code|Long | \\ + \code|1.0 | & 3 & ~~\Large$\leadsto$~~ & J & \code|Double | \\ + \code|1D | & 4 & ~~\Large$\leadsto$~~ & F & \code|Double | \\ + \code|1F | & 5 & ~~\Large$\leadsto$~~ & A & \code|Float | \\ + \code|'1' | & 6 & ~~\Large$\leadsto$~~ & G & \code|Char | \\ + \code|"1"| & 7 & ~~\Large$\leadsto$~~ & D & \code|String | \\ \code|true | & 8 & ~~\Large$\leadsto$~~ & C & \code|Boolean| \\ - \code|false| & 9 & ~~\Large$\leadsto$~~ & D & \code|Boolean| \\ - \code|() | & 10 & ~~\Large$\leadsto$~~ & H & \code|Unit | \\ \ No newline at end of file + \code|false| & 9 & ~~\Large$\leadsto$~~ & E & \code|Boolean| \\ + \code|() | & 10 & ~~\Large$\leadsto$~~ & I & \code|Unit | \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w01-types-taskrows-generated.tex b/compendium/generated/quiz-w01-types-taskrows-generated.tex index f969fed55..7cc5d5781 100644 --- a/compendium/generated/quiz-w01-types-taskrows-generated.tex +++ b/compendium/generated/quiz-w01-types-taskrows-generated.tex @@ -1,10 +1,10 @@ - \code|1 | & 1 & & A & \code|Int | \\ - \code|1L | & 2 & & B & \code|String | \\ + \code|1 | & 1 & & A & \code|Float | \\ + \code|1L | & 2 & & B & \code|Int | \\ \code|1.0 | & 3 & & C & \code|Boolean| \\ - \code|1D | & 4 & & D & \code|Boolean| \\ - \code|1F | & 5 & & E & \code|Float | \\ - \code|'1' | & 6 & & F & \code|Char | \\ - \code|"1"| & 7 & & G & \code|Double | \\ - \code|true | & 8 & & H & \code|Unit | \\ - \code|false| & 9 & & I & \code|Double | \\ - \code|() | & 10 & & J & \code|Long | \\ \ No newline at end of file + \code|1D | & 4 & & D & \code|String | \\ + \code|1F | & 5 & & E & \code|Boolean| \\ + \code|'1' | & 6 & & F & \code|Double | \\ + \code|"1"| & 7 & & G & \code|Char | \\ + \code|true | & 8 & & H & \code|Long | \\ + \code|false| & 9 & & I & \code|Unit | \\ + \code|() | & 10 & & J & \code|Double | \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w01-values-solurows-generated.tex b/compendium/generated/quiz-w01-values-solurows-generated.tex index 16df78779..adafa8dff 100644 --- a/compendium/generated/quiz-w01-values-solurows-generated.tex +++ b/compendium/generated/quiz-w01-values-solurows-generated.tex @@ -1,12 +1,12 @@ \code|1.0 + 18 | & 1 & ~~\Large$\leadsto$~~ & H & \code|19.0: Double | \\ - \code|(41 + 1).toDouble | & 2 & ~~\Large$\leadsto$~~ & C & \code|42.0: Double | \\ - \code|1.042e42 + 1 | & 3 & ~~\Large$\leadsto$~~ & K & \code|1.042E42: Double| \\ - \code|12E6.toLong | & 4 & ~~\Large$\leadsto$~~ & D & \code|12000000: Long | \\ - \code|32.toChar.toString| & 5 & ~~\Large$\leadsto$~~ & J & \code|" ": String | \\ - \code|'A'.toInt | & 6 & ~~\Large$\leadsto$~~ & A & \code|65: Int | \\ - \code|0.toInt | & 7 & ~~\Large$\leadsto$~~ & F & \code|0: Int | \\ - \code|'0'.toInt | & 8 & ~~\Large$\leadsto$~~ & G & \code|48: Int | \\ - \code|'9'.toInt | & 9 & ~~\Large$\leadsto$~~ & E & \code|57: Int | \\ - \code|'A' + '0' | & 10 & ~~\Large$\leadsto$~~ & I & \code|113: Int | \\ + \code|(41 + 1).toDouble | & 2 & ~~\Large$\leadsto$~~ & I & \code|42.0: Double | \\ + \code|1.042e42 + 1 | & 3 & ~~\Large$\leadsto$~~ & D & \code|1.042E42: Double| \\ + \code|12E6.toLong | & 4 & ~~\Large$\leadsto$~~ & J & \code|12000000: Long | \\ + \code|32.toChar.toString| & 5 & ~~\Large$\leadsto$~~ & C & \code|" ": String | \\ + \code|'A'.toInt | & 6 & ~~\Large$\leadsto$~~ & G & \code|65: Int | \\ + \code|0.toInt | & 7 & ~~\Large$\leadsto$~~ & K & \code|0: Int | \\ + \code|'0'.toInt | & 8 & ~~\Large$\leadsto$~~ & E & \code|48: Int | \\ + \code|'9'.toInt | & 9 & ~~\Large$\leadsto$~~ & F & \code|57: Int | \\ + \code|'A' + '0' | & 10 & ~~\Large$\leadsto$~~ & B & \code|113: Int | \\ \code|('A' + '0').toChar| & 11 & ~~\Large$\leadsto$~~ & L & \code|'q': Char | \\ - \code|"*!%#".charAt(0)| & 12 & ~~\Large$\leadsto$~~ & B & \code|'*': Char | \\ \ No newline at end of file + \code|"*!%#".charAt(0)| & 12 & ~~\Large$\leadsto$~~ & A & \code|'*': Char | \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w01-values-taskrows-generated.tex b/compendium/generated/quiz-w01-values-taskrows-generated.tex index 26bf7b2f6..b0506bf06 100644 --- a/compendium/generated/quiz-w01-values-taskrows-generated.tex +++ b/compendium/generated/quiz-w01-values-taskrows-generated.tex @@ -1,12 +1,12 @@ - \code|1.0 + 18 | & 1 & & A & \code|65: Int | \\ - \code|(41 + 1).toDouble | & 2 & & B & \code|'*': Char | \\ - \code|1.042e42 + 1 | & 3 & & C & \code|42.0: Double | \\ - \code|12E6.toLong | & 4 & & D & \code|12000000: Long | \\ - \code|32.toChar.toString| & 5 & & E & \code|57: Int | \\ - \code|'A'.toInt | & 6 & & F & \code|0: Int | \\ - \code|0.toInt | & 7 & & G & \code|48: Int | \\ + \code|1.0 + 18 | & 1 & & A & \code|'*': Char | \\ + \code|(41 + 1).toDouble | & 2 & & B & \code|113: Int | \\ + \code|1.042e42 + 1 | & 3 & & C & \code|" ": String | \\ + \code|12E6.toLong | & 4 & & D & \code|1.042E42: Double| \\ + \code|32.toChar.toString| & 5 & & E & \code|48: Int | \\ + \code|'A'.toInt | & 6 & & F & \code|57: Int | \\ + \code|0.toInt | & 7 & & G & \code|65: Int | \\ \code|'0'.toInt | & 8 & & H & \code|19.0: Double | \\ - \code|'9'.toInt | & 9 & & I & \code|113: Int | \\ - \code|'A' + '0' | & 10 & & J & \code|" ": String | \\ - \code|('A' + '0').toChar| & 11 & & K & \code|1.042E42: Double| \\ + \code|'9'.toInt | & 9 & & I & \code|42.0: Double | \\ + \code|'A' + '0' | & 10 & & J & \code|12000000: Long | \\ + \code|('A' + '0').toChar| & 11 & & K & \code|0: Int | \\ \code|"*!%#".charAt(0)| & 12 & & L & \code|'q': Char | \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-array-vector-append-solurows-generated.tex b/compendium/generated/quiz-w02-array-vector-append-solurows-generated.tex new file mode 100644 index 000000000..5f10457b9 --- /dev/null +++ b/compendium/generated/quiz-w02-array-vector-append-solurows-generated.tex @@ -0,0 +1,2 @@ + Vector & 1 & ~~\Large$\leadsto$~~ & B & varianter med fler/andra element skapas snabbt ur befintlig \\ + Array & 2 & ~~\Large$\leadsto$~~ & A & långsam vid ändring av storlek (kopiering av rubbet krävs) \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-array-vector-append-taskrows-generated.tex b/compendium/generated/quiz-w02-array-vector-append-taskrows-generated.tex new file mode 100644 index 000000000..7c683df63 --- /dev/null +++ b/compendium/generated/quiz-w02-array-vector-append-taskrows-generated.tex @@ -0,0 +1,2 @@ + Vector & 1 & & A & långsam vid ändring av storlek (kopiering av rubbet krävs) \\ + Array & 2 & & B & varianter med fler/andra element skapas snabbt ur befintlig \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-array-vector-equality-solurows-generated.tex b/compendium/generated/quiz-w02-array-vector-equality-solurows-generated.tex new file mode 100644 index 000000000..0f109bedf --- /dev/null +++ b/compendium/generated/quiz-w02-array-vector-equality-solurows-generated.tex @@ -0,0 +1,2 @@ + Vector & 1 & ~~\Large$\leadsto$~~ & A & \code|xs == ys| är \code|true| om alla element lika \\ + Array & 2 & ~~\Large$\leadsto$~~ & B & olikt andra samlingar kollar \code|==| ej innehållslikhet \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-array-vector-equality-taskrows-generated.tex b/compendium/generated/quiz-w02-array-vector-equality-taskrows-generated.tex new file mode 100644 index 000000000..df9405246 --- /dev/null +++ b/compendium/generated/quiz-w02-array-vector-equality-taskrows-generated.tex @@ -0,0 +1,2 @@ + Vector & 1 & & A & \code|xs == ys| är \code|true| om alla element lika \\ + Array & 2 & & B & olikt andra samlingar kollar \code|==| ej innehållslikhet \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-array-vector-mutability-solurows-generated.tex b/compendium/generated/quiz-w02-array-vector-mutability-solurows-generated.tex new file mode 100644 index 000000000..01942cc9f --- /dev/null +++ b/compendium/generated/quiz-w02-array-vector-mutability-solurows-generated.tex @@ -0,0 +1,2 @@ + Vector & 1 & ~~\Large$\leadsto$~~ & A & oföränderlig \\ + Array & 2 & ~~\Large$\leadsto$~~ & B & förändringsbar \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-array-vector-mutability-taskrows-generated.tex b/compendium/generated/quiz-w02-array-vector-mutability-taskrows-generated.tex new file mode 100644 index 000000000..697bbfe14 --- /dev/null +++ b/compendium/generated/quiz-w02-array-vector-mutability-taskrows-generated.tex @@ -0,0 +1,2 @@ + Vector & 1 & & A & oföränderlig \\ + Array & 2 & & B & förändringsbar \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-collection-methods-solurows-generated.tex b/compendium/generated/quiz-w02-collection-methods-solurows-generated.tex index cadf4c43f..64ff1d991 100644 --- a/compendium/generated/quiz-w02-collection-methods-solurows-generated.tex +++ b/compendium/generated/quiz-w02-collection-methods-solurows-generated.tex @@ -1,10 +1,11 @@ - \code|Array.fill(9)(0) | & 1 & ~~\Large$\leadsto$~~ & I & skapar ny förändringsbar sekvens med 9 nollor \\ - \code|Vector.fill(9)(' ')| & 2 & ~~\Large$\leadsto$~~ & F & skapar ny oföränderlig sekvens med 9 blanktecken \\ - \code|xs.apply(0) | & 3 & ~~\Large$\leadsto$~~ & D & indexera i sekvenssamling; ger första elementet \\ - \code|xs(0) | & 4 & ~~\Large$\leadsto$~~ & C & indexera i sekvenssamling; ger första elementet \\ - \code|xs :+ 0 | & 5 & ~~\Large$\leadsto$~~ & G & skapar ny samling med en nolla tillagd på slutet \\ - \code|0 +: xs | & 6 & ~~\Large$\leadsto$~~ & A & skapar ny samling med en nolla tillagd i början \\ - \code|xs.mkString | & 7 & ~~\Large$\leadsto$~~ & E & skapar en sträng med alla element intill varandra \\ - \code|xs.mkString(",") | & 8 & ~~\Large$\leadsto$~~ & B & skapar en sträng med komma mellan elementen \\ - \code|xs.map(_.toString))| & 9 & ~~\Large$\leadsto$~~ & J & ny samling med elementen omgjorda till strängar \\ - \code|xs.map(_.toInt)) | & 10 & ~~\Large$\leadsto$~~ & H & ny samling med elementen omgjorda till heltal \\ \ No newline at end of file + \code|val xs = Vector(2) | & 1 & ~~\Large$\leadsto$~~ & K & ny referens till sekvens av längd 1 \\ + \code|Array.fill(9)(0) | & 2 & ~~\Large$\leadsto$~~ & C & ny förändringsbar sekvens med nollor \\ + \code|Vector.fill(9)(' ')| & 3 & ~~\Large$\leadsto$~~ & A & ny oföränderlig sekvens med blanktecken \\ + \code|xs(0) | & 4 & ~~\Large$\leadsto$~~ & I & förkortad skrivning av \code|apply(0)| \\ + \code|xs.apply(0) | & 5 & ~~\Large$\leadsto$~~ & F & indexering, ger första elementet \\ + \code|xs :+ 0 | & 6 & ~~\Large$\leadsto$~~ & D & ny samling med en nolla tillagd på slutet \\ + \code|0 +: xs | & 7 & ~~\Large$\leadsto$~~ & J & ny samling med en nolla tillagd i början \\ + \code|xs.mkString | & 8 & ~~\Large$\leadsto$~~ & G & ny sträng med alla element intill varandra \\ + \code|xs.mkString(",") | & 9 & ~~\Large$\leadsto$~~ & B & ny sträng med komma mellan elementen \\ + \code|xs.map(_.toString))| & 10 & ~~\Large$\leadsto$~~ & H & ny samling, elementen omgjorda till strängar \\ + \code|xs.map(_.toInt)) | & 11 & ~~\Large$\leadsto$~~ & E & ny samling, elementen omgjorda till heltal \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-collection-methods-taskrows-generated.tex b/compendium/generated/quiz-w02-collection-methods-taskrows-generated.tex index 119b40cc6..a8bf46926 100644 --- a/compendium/generated/quiz-w02-collection-methods-taskrows-generated.tex +++ b/compendium/generated/quiz-w02-collection-methods-taskrows-generated.tex @@ -1,10 +1,11 @@ - \code|Array.fill(9)(0) | & 1 & & A & skapar ny samling med en nolla tillagd i början \\ - \code|Vector.fill(9)(' ')| & 2 & & B & skapar en sträng med komma mellan elementen \\ - \code|xs.apply(0) | & 3 & & C & indexera i sekvenssamling; ger första elementet \\ - \code|xs(0) | & 4 & & D & indexera i sekvenssamling; ger första elementet \\ - \code|xs :+ 0 | & 5 & & E & skapar en sträng med alla element intill varandra \\ - \code|0 +: xs | & 6 & & F & skapar ny oföränderlig sekvens med 9 blanktecken \\ - \code|xs.mkString | & 7 & & G & skapar ny samling med en nolla tillagd på slutet \\ - \code|xs.mkString(",") | & 8 & & H & ny samling med elementen omgjorda till heltal \\ - \code|xs.map(_.toString))| & 9 & & I & skapar ny förändringsbar sekvens med 9 nollor \\ - \code|xs.map(_.toInt)) | & 10 & & J & ny samling med elementen omgjorda till strängar \\ \ No newline at end of file + \code|val xs = Vector(2) | & 1 & & A & ny oföränderlig sekvens med blanktecken \\ + \code|Array.fill(9)(0) | & 2 & & B & ny sträng med komma mellan elementen \\ + \code|Vector.fill(9)(' ')| & 3 & & C & ny förändringsbar sekvens med nollor \\ + \code|xs(0) | & 4 & & D & ny samling med en nolla tillagd på slutet \\ + \code|xs.apply(0) | & 5 & & E & ny samling, elementen omgjorda till heltal \\ + \code|xs :+ 0 | & 6 & & F & indexering, ger första elementet \\ + \code|0 +: xs | & 7 & & G & ny sträng med alla element intill varandra \\ + \code|xs.mkString | & 8 & & H & ny samling, elementen omgjorda till strängar \\ + \code|xs.mkString(",") | & 9 & & I & förkortad skrivning av \code|apply(0)| \\ + \code|xs.map(_.toString))| & 10 & & J & ny samling med en nolla tillagd i början \\ + \code|xs.map(_.toInt)) | & 11 & & K & ny referens till sekvens av längd 1 \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-concepts-solurows-generated.tex b/compendium/generated/quiz-w02-concepts-solurows-generated.tex index f3b48c1ac..21ba5f741 100644 --- a/compendium/generated/quiz-w02-concepts-solurows-generated.tex +++ b/compendium/generated/quiz-w02-concepts-solurows-generated.tex @@ -1,15 +1,15 @@ - kompilerad & 1 & ~~\Large$\leadsto$~~ & E & maskinkod sparad och kan köras igen utan kompilering \\ - skript & 2 & ~~\Large$\leadsto$~~ & L & maskinkod sparas ej utan skapas vid varje körning \\ - objekt & 3 & ~~\Large$\leadsto$~~ & G & samlar variabler och funktioner \\ - main & 4 & ~~\Large$\leadsto$~~ & I & där exekveringen av kompilerad app startar \\ - programargument & 5 & ~~\Large$\leadsto$~~ & M & överförs via parametern args i main \\ - datastruktur & 6 & ~~\Large$\leadsto$~~ & J & många olika element i en helhet; elementvis åtkomst \\ - samling & 7 & ~~\Large$\leadsto$~~ & N & datastruktur med element av samma typ \\ - sekvenssamling & 8 & ~~\Large$\leadsto$~~ & B & datastruktur med element i en viss ordning \\ - Array & 9 & ~~\Large$\leadsto$~~ & F & en förändringsbar, indexerbar sekvenssamling \\ - Vector & 10 & ~~\Large$\leadsto$~~ & O & en oföränderlig, indexerbar sekvenssamling \\ - Range & 11 & ~~\Large$\leadsto$~~ & K & en samling som representerar ett intervall av heltal \\ - yield & 12 & ~~\Large$\leadsto$~~ & H & används i for-uttryck för att skapa ny samling \\ - map & 13 & ~~\Large$\leadsto$~~ & C & applicerar en funktion på varje element i en samling \\ - algoritm & 14 & ~~\Large$\leadsto$~~ & A & stegvis beskrivning av en lösning på ett problem \\ - implementation & 15 & ~~\Large$\leadsto$~~ & D & en specifik realisering av en algoritm \\ \ No newline at end of file + kompilerad & 1 & ~~\Large$\leadsto$~~ & C & maskinkod sparad och kan köras igen utan kompilering \\ + skript & 2 & ~~\Large$\leadsto$~~ & F & maskinkod sparas ej utan skapas vid varje körning \\ + objekt & 3 & ~~\Large$\leadsto$~~ & E & samlar variabler och funktioner \\ + main & 4 & ~~\Large$\leadsto$~~ & M & där exekveringen av kompilerad app startar \\ + programargument & 5 & ~~\Large$\leadsto$~~ & B & överförs via parametern args i main \\ + datastruktur & 6 & ~~\Large$\leadsto$~~ & H & många olika element i en helhet; elementvis åtkomst \\ + samling & 7 & ~~\Large$\leadsto$~~ & J & datastruktur med element av samma typ \\ + sekvenssamling & 8 & ~~\Large$\leadsto$~~ & I & datastruktur med element i en viss ordning \\ + Array & 9 & ~~\Large$\leadsto$~~ & K & en förändringsbar, indexerbar sekvenssamling \\ + Vector & 10 & ~~\Large$\leadsto$~~ & A & en oföränderlig, indexerbar sekvenssamling \\ + Range & 11 & ~~\Large$\leadsto$~~ & D & en samling som representerar ett intervall av heltal \\ + yield & 12 & ~~\Large$\leadsto$~~ & G & används i for-uttryck för att skapa ny samling \\ + map & 13 & ~~\Large$\leadsto$~~ & N & applicerar en funktion på varje element i en samling \\ + algoritm & 14 & ~~\Large$\leadsto$~~ & L & stegvis beskrivning av en lösning på ett problem \\ + implementation & 15 & ~~\Large$\leadsto$~~ & O & en specifik realisering av en algoritm \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-concepts-taskrows-generated.tex b/compendium/generated/quiz-w02-concepts-taskrows-generated.tex index 368e8fa12..e915d8f5c 100644 --- a/compendium/generated/quiz-w02-concepts-taskrows-generated.tex +++ b/compendium/generated/quiz-w02-concepts-taskrows-generated.tex @@ -1,15 +1,15 @@ - kompilerad & 1 & & A & stegvis beskrivning av en lösning på ett problem \\ - skript & 2 & & B & datastruktur med element i en viss ordning \\ - objekt & 3 & & C & applicerar en funktion på varje element i en samling \\ - main & 4 & & D & en specifik realisering av en algoritm \\ - programargument & 5 & & E & maskinkod sparad och kan köras igen utan kompilering \\ - datastruktur & 6 & & F & en förändringsbar, indexerbar sekvenssamling \\ - samling & 7 & & G & samlar variabler och funktioner \\ - sekvenssamling & 8 & & H & används i for-uttryck för att skapa ny samling \\ - Array & 9 & & I & där exekveringen av kompilerad app startar \\ - Vector & 10 & & J & många olika element i en helhet; elementvis åtkomst \\ - Range & 11 & & K & en samling som representerar ett intervall av heltal \\ - yield & 12 & & L & maskinkod sparas ej utan skapas vid varje körning \\ - map & 13 & & M & överförs via parametern args i main \\ - algoritm & 14 & & N & datastruktur med element av samma typ \\ - implementation & 15 & & O & en oföränderlig, indexerbar sekvenssamling \\ \ No newline at end of file + kompilerad & 1 & & A & en oföränderlig, indexerbar sekvenssamling \\ + skript & 2 & & B & överförs via parametern args i main \\ + objekt & 3 & & C & maskinkod sparad och kan köras igen utan kompilering \\ + main & 4 & & D & en samling som representerar ett intervall av heltal \\ + programargument & 5 & & E & samlar variabler och funktioner \\ + datastruktur & 6 & & F & maskinkod sparas ej utan skapas vid varje körning \\ + samling & 7 & & G & används i for-uttryck för att skapa ny samling \\ + sekvenssamling & 8 & & H & många olika element i en helhet; elementvis åtkomst \\ + Array & 9 & & I & datastruktur med element i en viss ordning \\ + Vector & 10 & & J & datastruktur med element av samma typ \\ + Range & 11 & & K & en förändringsbar, indexerbar sekvenssamling \\ + yield & 12 & & L & stegvis beskrivning av en lösning på ett problem \\ + map & 13 & & M & där exekveringen av kompilerad app startar \\ + algoritm & 14 & & N & applicerar en funktion på varje element i en samling \\ + implementation & 15 & & O & en specifik realisering av en algoritm \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-for-yield-map-solurows-generated.tex b/compendium/generated/quiz-w02-for-yield-map-solurows-generated.tex new file mode 100644 index 000000000..85c5d5c82 --- /dev/null +++ b/compendium/generated/quiz-w02-for-yield-map-solurows-generated.tex @@ -0,0 +1,5 @@ + \code|for (x <- xs) yield x - 1| & 1 & ~~\Large$\leadsto$~~ & B & \code|Vector(0, 1, 2)| \\ + \code|xs.map(x => x + 1) | & 2 & ~~\Large$\leadsto$~~ & D & \code|Vector(2, 3, 4)| \\ + \code|for (i <- 0 to 1) yield xs(i)| & 3 & ~~\Large$\leadsto$~~ & C & \code|Vector(1, 2)| \\ + \code|(1 to 3).map(i => i)| & 4 & ~~\Large$\leadsto$~~ & A & \code|Vector(1, 2, 3)| \\ + \code|(1 until 3).map(i => xs(i))| & 5 & ~~\Large$\leadsto$~~ & E & \code|Vector(2, 3)| \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-for-yield-map-taskrows-generated.tex b/compendium/generated/quiz-w02-for-yield-map-taskrows-generated.tex new file mode 100644 index 000000000..57f5b2d64 --- /dev/null +++ b/compendium/generated/quiz-w02-for-yield-map-taskrows-generated.tex @@ -0,0 +1,5 @@ + \code|for (x <- xs) yield x - 1| & 1 & & A & \code|Vector(1, 2, 3)| \\ + \code|xs.map(x => x + 1) | & 2 & & B & \code|Vector(0, 1, 2)| \\ + \code|for (i <- 0 to 1) yield xs(i)| & 3 & & C & \code|Vector(1, 2)| \\ + \code|(1 to 3).map(i => i)| & 4 & & D & \code|Vector(2, 3, 4)| \\ + \code|(1 until 3).map(i => xs(i))| & 5 & & E & \code|Vector(2, 3)| \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-hello-scala-java-solurows-generated.tex b/compendium/generated/quiz-w02-hello-scala-java-solurows-generated.tex index 330bba896..a4f762c4a 100644 --- a/compendium/generated/quiz-w02-hello-scala-java-solurows-generated.tex +++ b/compendium/generated/quiz-w02-hello-scala-java-solurows-generated.tex @@ -1,6 +1,6 @@ - \code|object| & 1 & ~~\Large$\leadsto$~~ & B & \jcode|public class| \\ - \code|def main| & 2 & ~~\Large$\leadsto$~~ & C & \jcode|public static main| \\ - \code|Array[String]| & 3 & ~~\Large$\leadsto$~~ & D & \jcode|String[]| \\ - \code|: Unit| & 4 & ~~\Large$\leadsto$~~ & E & \jcode|void| \\ - \code|=| & 5 & ~~\Large$\leadsto$~~ & F & \jcode|) {| \\ - \code|println| & 6 & ~~\Large$\leadsto$~~ & A & \jcode|System.out.println| \\ \ No newline at end of file + \code|object| & 1 & ~~\Large$\leadsto$~~ & E & \jcode|public class| \\ + \code|def main| & 2 & ~~\Large$\leadsto$~~ & B & \jcode|public static main| \\ + \code|Array[String]| & 3 & ~~\Large$\leadsto$~~ & A & \jcode|String[]| \\ + \code|: Unit| & 4 & ~~\Large$\leadsto$~~ & F & \jcode|void| \\ + \code|=| & 5 & ~~\Large$\leadsto$~~ & C & \jcode|) {| \\ + \code|println| & 6 & ~~\Large$\leadsto$~~ & D & \jcode|System.out.println| \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w02-hello-scala-java-taskrows-generated.tex b/compendium/generated/quiz-w02-hello-scala-java-taskrows-generated.tex index 4fb6369a9..a9ee21404 100644 --- a/compendium/generated/quiz-w02-hello-scala-java-taskrows-generated.tex +++ b/compendium/generated/quiz-w02-hello-scala-java-taskrows-generated.tex @@ -1,6 +1,6 @@ - \code|object| & 1 & & A & \jcode|System.out.println| \\ - \code|def main| & 2 & & B & \jcode|public class| \\ - \code|Array[String]| & 3 & & C & \jcode|public static main| \\ - \code|: Unit| & 4 & & D & \jcode|String[]| \\ - \code|=| & 5 & & E & \jcode|void| \\ - \code|println| & 6 & & F & \jcode|) {| \\ \ No newline at end of file + \code|object| & 1 & & A & \jcode|String[]| \\ + \code|def main| & 2 & & B & \jcode|public static main| \\ + \code|Array[String]| & 3 & & C & \jcode|) {| \\ + \code|: Unit| & 4 & & D & \jcode|System.out.println| \\ + \code|=| & 5 & & E & \jcode|public class| \\ + \code|println| & 6 & & F & \jcode|void| \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w03-concepts-solurows-generated.tex b/compendium/generated/quiz-w03-concepts-solurows-generated.tex index 65de2f798..58ce1f271 100644 --- a/compendium/generated/quiz-w03-concepts-solurows-generated.tex +++ b/compendium/generated/quiz-w03-concepts-solurows-generated.tex @@ -1,16 +1,16 @@ - funktionshuvud & 1 & ~~\Large$\leadsto$~~ & G & har parameterlista och eventuellt returtyp \\ - funktionskropp & 2 & ~~\Large$\leadsto$~~ & L & koden som exekveras vid funktionsanrop \\ - parameterlista & 3 & ~~\Large$\leadsto$~~ & J & beskriver namn och typ på parametrar \\ - parameter & 4 & ~~\Large$\leadsto$~~ & B & namn i funktionshuvud; binds till argument \\ - argument & 5 & ~~\Large$\leadsto$~~ & C & uttryck som är invärde vid funktionsanrop \\ - block & 6 & ~~\Large$\leadsto$~~ & F & kan ha lokala namn; sista raden ger värdet \\ + funktionshuvud & 1 & ~~\Large$\leadsto$~~ & L & har parameterlista och eventuellt returtyp \\ + funktionskropp & 2 & ~~\Large$\leadsto$~~ & P & koden som exekveras vid funktionsanrop \\ + parameterlista & 3 & ~~\Large$\leadsto$~~ & O & beskriver namn och typ på parametrar \\ + parameter & 4 & ~~\Large$\leadsto$~~ & E & namn i funktionshuvud; binds till argument \\ + argument & 5 & ~~\Large$\leadsto$~~ & G & uttryck som är invärde vid funktionsanrop \\ + block & 6 & ~~\Large$\leadsto$~~ & H & kan ha lokala namn; sista raden ger värdet \\ namngivna argument & 7 & ~~\Large$\leadsto$~~ & M & gör att argument kan ges i valfri ordning \\ default-argument & 8 & ~~\Large$\leadsto$~~ & K & gör att argument kan utelämnas \\ - värdeanrop & 9 & ~~\Large$\leadsto$~~ & P & argumentet evalueras innan anrop \\ - namnanrop & 10 & ~~\Large$\leadsto$~~ & E & fördröjd evaluering av argument \\ - tupel & 11 & ~~\Large$\leadsto$~~ & A & lista med bestämt antal (heterogena) värden \\ - tupelreturtyp & 12 & ~~\Large$\leadsto$~~ & O & gör att en funktion kan flera resultatvärden \\ - äkta funktion & 13 & ~~\Large$\leadsto$~~ & I & ger alltid samma resultat om samma argument \\ - slumptalsfrö & 14 & ~~\Large$\leadsto$~~ & H & om lika blir sekvensen av pseudoslumptal samma \\ - anonym funktion & 15 & ~~\Large$\leadsto$~~ & D & funktion utan namn; kallas även lambda \\ - rekursiv funktion & 16 & ~~\Large$\leadsto$~~ & N & en funktion som anropar sig själv \\ \ No newline at end of file + värdeanrop & 9 & ~~\Large$\leadsto$~~ & C & argumentet evalueras innan anrop \\ + namnanrop & 10 & ~~\Large$\leadsto$~~ & J & fördröjd evaluering av argument \\ + tupel & 11 & ~~\Large$\leadsto$~~ & B & lista med bestämt antal (heterogena) värden \\ + tupelreturtyp & 12 & ~~\Large$\leadsto$~~ & I & gör att en funktion kan flera resultatvärden \\ + äkta funktion & 13 & ~~\Large$\leadsto$~~ & A & ger alltid samma resultat om samma argument \\ + slumptalsfrö & 14 & ~~\Large$\leadsto$~~ & F & om lika blir sekvensen av pseudoslumptal samma \\ + anonym funktion & 15 & ~~\Large$\leadsto$~~ & N & funktion utan namn; kallas även lambda \\ + rekursiv funktion & 16 & ~~\Large$\leadsto$~~ & D & en funktion som anropar sig själv \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w03-concepts-taskrows-generated.tex b/compendium/generated/quiz-w03-concepts-taskrows-generated.tex index b4342154e..6bfbab0df 100644 --- a/compendium/generated/quiz-w03-concepts-taskrows-generated.tex +++ b/compendium/generated/quiz-w03-concepts-taskrows-generated.tex @@ -1,16 +1,16 @@ - funktionshuvud & 1 & & A & lista med bestämt antal (heterogena) värden \\ - funktionskropp & 2 & & B & namn i funktionshuvud; binds till argument \\ - parameterlista & 3 & & C & uttryck som är invärde vid funktionsanrop \\ - parameter & 4 & & D & funktion utan namn; kallas även lambda \\ - argument & 5 & & E & fördröjd evaluering av argument \\ - block & 6 & & F & kan ha lokala namn; sista raden ger värdet \\ - namngivna argument & 7 & & G & har parameterlista och eventuellt returtyp \\ - default-argument & 8 & & H & om lika blir sekvensen av pseudoslumptal samma \\ - värdeanrop & 9 & & I & ger alltid samma resultat om samma argument \\ - namnanrop & 10 & & J & beskriver namn och typ på parametrar \\ + funktionshuvud & 1 & & A & ger alltid samma resultat om samma argument \\ + funktionskropp & 2 & & B & lista med bestämt antal (heterogena) värden \\ + parameterlista & 3 & & C & argumentet evalueras innan anrop \\ + parameter & 4 & & D & en funktion som anropar sig själv \\ + argument & 5 & & E & namn i funktionshuvud; binds till argument \\ + block & 6 & & F & om lika blir sekvensen av pseudoslumptal samma \\ + namngivna argument & 7 & & G & uttryck som är invärde vid funktionsanrop \\ + default-argument & 8 & & H & kan ha lokala namn; sista raden ger värdet \\ + värdeanrop & 9 & & I & gör att en funktion kan flera resultatvärden \\ + namnanrop & 10 & & J & fördröjd evaluering av argument \\ tupel & 11 & & K & gör att argument kan utelämnas \\ - tupelreturtyp & 12 & & L & koden som exekveras vid funktionsanrop \\ + tupelreturtyp & 12 & & L & har parameterlista och eventuellt returtyp \\ äkta funktion & 13 & & M & gör att argument kan ges i valfri ordning \\ - slumptalsfrö & 14 & & N & en funktion som anropar sig själv \\ - anonym funktion & 15 & & O & gör att en funktion kan flera resultatvärden \\ - rekursiv funktion & 16 & & P & argumentet evalueras innan anrop \\ \ No newline at end of file + slumptalsfrö & 14 & & N & funktion utan namn; kallas även lambda \\ + anonym funktion & 15 & & O & beskriver namn och typ på parametrar \\ + rekursiv funktion & 16 & & P & koden som exekveras vid funktionsanrop \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w04-concepts-solurows-generated.tex b/compendium/generated/quiz-w04-concepts-solurows-generated.tex index 506f19c13..ee3a86276 100644 --- a/compendium/generated/quiz-w04-concepts-solurows-generated.tex +++ b/compendium/generated/quiz-w04-concepts-solurows-generated.tex @@ -1,14 +1,14 @@ - modul & 1 & ~~\Large$\leadsto$~~ & D & kodenhet med abstraktioner som kan återanvändas \\ - singelobjekt & 2 & ~~\Large$\leadsto$~~ & E & modul som kan ha tillstånd; finns i en enda upplaga \\ - paket & 3 & ~~\Large$\leadsto$~~ & H & modul som skapar namnrymd; maskinkod får egen katalog \\ - import & 4 & ~~\Large$\leadsto$~~ & M & gör namn tillgängligt utan att hela sökvägen behövs \\ - lat initialisering & 5 & ~~\Large$\leadsto$~~ & F & allokering sker först när namnet refereras \\ - medlem & 6 & ~~\Large$\leadsto$~~ & A & tillhör ett objekt; nås med punktnotation om synlig \\ - attribut & 7 & ~~\Large$\leadsto$~~ & G & variabel som utgör (del av) ett objekts tillstånd \\ - metod & 8 & ~~\Large$\leadsto$~~ & B & funktion som är medlem av ett objekt \\ - privat & 9 & ~~\Large$\leadsto$~~ & C & modifierar synligheten av en objektmedlem \\ - överlagring & 10 & ~~\Large$\leadsto$~~ & I & metoder med samma namn men olika parametertyper \\ - namnskuggning & 11 & ~~\Large$\leadsto$~~ & N & lokalt namn döljer samma namn i omgivande block \\ - namnrymd & 12 & ~~\Large$\leadsto$~~ & K & omgivning där är alla namn är unika \\ - uniform access & 13 & ~~\Large$\leadsto$~~ & L & ändring mellan def och val påverkar ej användning \\ - typalias & 14 & ~~\Large$\leadsto$~~ & J & alternativt namn på typ som ofta ökar läsbarheten \\ \ No newline at end of file + modul & 1 & ~~\Large$\leadsto$~~ & F & kodenhet med abstraktioner som kan återanvändas \\ + singelobjekt & 2 & ~~\Large$\leadsto$~~ & K & modul som kan ha tillstånd; finns i en enda upplaga \\ + paket & 3 & ~~\Large$\leadsto$~~ & M & modul som skapar namnrymd; maskinkod får egen katalog \\ + import & 4 & ~~\Large$\leadsto$~~ & C & gör namn tillgängligt utan att hela sökvägen behövs \\ + lat initialisering & 5 & ~~\Large$\leadsto$~~ & D & allokering sker först när namnet refereras \\ + medlem & 6 & ~~\Large$\leadsto$~~ & L & tillhör ett objekt; nås med punktnotation om synlig \\ + attribut & 7 & ~~\Large$\leadsto$~~ & I & variabel som utgör (del av) ett objekts tillstånd \\ + metod & 8 & ~~\Large$\leadsto$~~ & N & funktion som är medlem av ett objekt \\ + privat & 9 & ~~\Large$\leadsto$~~ & J & modifierar synligheten av en objektmedlem \\ + överlagring & 10 & ~~\Large$\leadsto$~~ & H & metoder med samma namn men olika parametertyper \\ + namnskuggning & 11 & ~~\Large$\leadsto$~~ & E & lokalt namn döljer samma namn i omgivande block \\ + namnrymd & 12 & ~~\Large$\leadsto$~~ & A & omgivning där är alla namn är unika \\ + uniform access & 13 & ~~\Large$\leadsto$~~ & B & ändring mellan def och val påverkar ej användning \\ + typalias & 14 & ~~\Large$\leadsto$~~ & G & alternativt namn på typ som ofta ökar läsbarheten \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w04-concepts-taskrows-generated.tex b/compendium/generated/quiz-w04-concepts-taskrows-generated.tex index 7e890e19b..f8071d6f6 100644 --- a/compendium/generated/quiz-w04-concepts-taskrows-generated.tex +++ b/compendium/generated/quiz-w04-concepts-taskrows-generated.tex @@ -1,14 +1,14 @@ - modul & 1 & & A & tillhör ett objekt; nås med punktnotation om synlig \\ - singelobjekt & 2 & & B & funktion som är medlem av ett objekt \\ - paket & 3 & & C & modifierar synligheten av en objektmedlem \\ - import & 4 & & D & kodenhet med abstraktioner som kan återanvändas \\ - lat initialisering & 5 & & E & modul som kan ha tillstånd; finns i en enda upplaga \\ - medlem & 6 & & F & allokering sker först när namnet refereras \\ - attribut & 7 & & G & variabel som utgör (del av) ett objekts tillstånd \\ - metod & 8 & & H & modul som skapar namnrymd; maskinkod får egen katalog \\ - privat & 9 & & I & metoder med samma namn men olika parametertyper \\ - överlagring & 10 & & J & alternativt namn på typ som ofta ökar läsbarheten \\ - namnskuggning & 11 & & K & omgivning där är alla namn är unika \\ - namnrymd & 12 & & L & ändring mellan def och val påverkar ej användning \\ - uniform access & 13 & & M & gör namn tillgängligt utan att hela sökvägen behövs \\ - typalias & 14 & & N & lokalt namn döljer samma namn i omgivande block \\ \ No newline at end of file + modul & 1 & & A & omgivning där är alla namn är unika \\ + singelobjekt & 2 & & B & ändring mellan def och val påverkar ej användning \\ + paket & 3 & & C & gör namn tillgängligt utan att hela sökvägen behövs \\ + import & 4 & & D & allokering sker först när namnet refereras \\ + lat initialisering & 5 & & E & lokalt namn döljer samma namn i omgivande block \\ + medlem & 6 & & F & kodenhet med abstraktioner som kan återanvändas \\ + attribut & 7 & & G & alternativt namn på typ som ofta ökar läsbarheten \\ + metod & 8 & & H & metoder med samma namn men olika parametertyper \\ + privat & 9 & & I & variabel som utgör (del av) ett objekts tillstånd \\ + överlagring & 10 & & J & modifierar synligheten av en objektmedlem \\ + namnskuggning & 11 & & K & modul som kan ha tillstånd; finns i en enda upplaga \\ + namnrymd & 12 & & L & tillhör ett objekt; nås med punktnotation om synlig \\ + uniform access & 13 & & M & modul som skapar namnrymd; maskinkod får egen katalog \\ + typalias & 14 & & N & funktion som är medlem av ett objekt \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w05-concepts-solurows-generated.tex b/compendium/generated/quiz-w05-concepts-solurows-generated.tex index 0417640de..70ee6582d 100644 --- a/compendium/generated/quiz-w05-concepts-solurows-generated.tex +++ b/compendium/generated/quiz-w05-concepts-solurows-generated.tex @@ -1,9 +1,9 @@ - klass & 1 & ~~\Large$\leadsto$~~ & C & en mall för att skapa flera instanser av samma typ \\ - instans & 2 & ~~\Large$\leadsto$~~ & E & upplaga av ett objekt med eget tillståndsminne \\ - konstruktor & 3 & ~~\Large$\leadsto$~~ & G & skapar instans, allokerar plats för tillståndsminne \\ - klassparameter & 4 & ~~\Large$\leadsto$~~ & A & ge argument vid konstruktion, initialisera tillstånd \\ - fabriksmetod & 5 & ~~\Large$\leadsto$~~ & B & hjälpfunktion för att anropa konstruktor \\ - referenslikhet & 6 & ~~\Large$\leadsto$~~ & I & instanser anses olika även om de har samma tillstånd \\ - innehållslikhet & 7 & ~~\Large$\leadsto$~~ & D & olika instanser anses lika om de har samma tillstånd \\ - case-klass & 8 & ~~\Large$\leadsto$~~ & F & slipper skriva new; automatisk innehållslikhet \\ - kompanjonsobjekt & 9 & ~~\Large$\leadsto$~~ & H & ser privata medlemmar i klassen med samma namn \\ \ No newline at end of file + klass & 1 & ~~\Large$\leadsto$~~ & G & en mall för att skapa flera instanser av samma typ \\ + instans & 2 & ~~\Large$\leadsto$~~ & D & upplaga av ett objekt med eget tillståndsminne \\ + konstruktor & 3 & ~~\Large$\leadsto$~~ & E & skapar instans, allokerar plats för tillståndsminne \\ + klassparameter & 4 & ~~\Large$\leadsto$~~ & F & ge argument vid konstruktion, initialisera tillstånd \\ + fabriksmetod & 5 & ~~\Large$\leadsto$~~ & I & hjälpfunktion för att anropa konstruktor \\ + referenslikhet & 6 & ~~\Large$\leadsto$~~ & A & instanser anses olika även om de har samma tillstånd \\ + innehållslikhet & 7 & ~~\Large$\leadsto$~~ & C & olika instanser anses lika om de har samma tillstånd \\ + case-klass & 8 & ~~\Large$\leadsto$~~ & H & slipper skriva new; automatisk innehållslikhet \\ + kompanjonsobjekt & 9 & ~~\Large$\leadsto$~~ & B & ser privata medlemmar i klassen med samma namn \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w05-concepts-taskrows-generated.tex b/compendium/generated/quiz-w05-concepts-taskrows-generated.tex index 106b4b8f2..1a18ed0eb 100644 --- a/compendium/generated/quiz-w05-concepts-taskrows-generated.tex +++ b/compendium/generated/quiz-w05-concepts-taskrows-generated.tex @@ -1,9 +1,9 @@ - klass & 1 & & A & ge argument vid konstruktion, initialisera tillstånd \\ - instans & 2 & & B & hjälpfunktion för att anropa konstruktor \\ - konstruktor & 3 & & C & en mall för att skapa flera instanser av samma typ \\ - klassparameter & 4 & & D & olika instanser anses lika om de har samma tillstånd \\ - fabriksmetod & 5 & & E & upplaga av ett objekt med eget tillståndsminne \\ - referenslikhet & 6 & & F & slipper skriva new; automatisk innehållslikhet \\ - innehållslikhet & 7 & & G & skapar instans, allokerar plats för tillståndsminne \\ - case-klass & 8 & & H & ser privata medlemmar i klassen med samma namn \\ - kompanjonsobjekt & 9 & & I & instanser anses olika även om de har samma tillstånd \\ \ No newline at end of file + klass & 1 & & A & instanser anses olika även om de har samma tillstånd \\ + instans & 2 & & B & ser privata medlemmar i klassen med samma namn \\ + konstruktor & 3 & & C & olika instanser anses lika om de har samma tillstånd \\ + klassparameter & 4 & & D & upplaga av ett objekt med eget tillståndsminne \\ + fabriksmetod & 5 & & E & skapar instans, allokerar plats för tillståndsminne \\ + referenslikhet & 6 & & F & ge argument vid konstruktion, initialisera tillstånd \\ + innehållslikhet & 7 & & G & en mall för att skapa flera instanser av samma typ \\ + case-klass & 8 & & H & slipper skriva new; automatisk innehållslikhet \\ + kompanjonsobjekt & 9 & & I & hjälpfunktion för att anropa konstruktor \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w06-concepts-solurows-generated.tex b/compendium/generated/quiz-w06-concepts-solurows-generated.tex index d6ffcc2b0..1bd098fab 100644 --- a/compendium/generated/quiz-w06-concepts-solurows-generated.tex +++ b/compendium/generated/quiz-w06-concepts-solurows-generated.tex @@ -1,8 +1,8 @@ samlingsbibliotek & 1 & ~~\Large$\leadsto$~~ & B & många färdiga datastrukturer med olika egenskaper \\ - sekvenssamling & 2 & ~~\Large$\leadsto$~~ & H & noll el. flera element av samma typ i viss ordning \\ - sekvensalgoritm & 3 & ~~\Large$\leadsto$~~ & F & lösning på problem som drar nytta av sekvenser \\ - ordning & 4 & ~~\Large$\leadsto$~~ & E & beskriver hur element av en viss typ ska ordnas \\ - sortering & 5 & ~~\Large$\leadsto$~~ & C & algoritm som ordnar element i en viss ordning \\ - söking & 6 & ~~\Large$\leadsto$~~ & A & algoritm som leta upp element enligt sökkriterium \\ - registrering & 7 & ~~\Large$\leadsto$~~ & D & algoritm som räknar element med vissa egenskaper \\ - varargs & 8 & ~~\Large$\leadsto$~~ & G & variabelt antal argument, asterisk efter parametertyp \\ \ No newline at end of file + sekvenssamling & 2 & ~~\Large$\leadsto$~~ & C & noll el. flera element av samma typ i viss ordning \\ + sekvensalgoritm & 3 & ~~\Large$\leadsto$~~ & H & lösning på problem som drar nytta av sekvenser \\ + ordning & 4 & ~~\Large$\leadsto$~~ & D & beskriver hur element av en viss typ ska ordnas \\ + sortering & 5 & ~~\Large$\leadsto$~~ & F & algoritm som ordnar element i en viss ordning \\ + söking & 6 & ~~\Large$\leadsto$~~ & G & algoritm som leta upp element enligt sökkriterium \\ + registrering & 7 & ~~\Large$\leadsto$~~ & E & algoritm som räknar element med vissa egenskaper \\ + varargs & 8 & ~~\Large$\leadsto$~~ & A & variabelt antal argument, asterisk efter parametertyp \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w06-concepts-taskrows-generated.tex b/compendium/generated/quiz-w06-concepts-taskrows-generated.tex index c55c13509..726f3956e 100644 --- a/compendium/generated/quiz-w06-concepts-taskrows-generated.tex +++ b/compendium/generated/quiz-w06-concepts-taskrows-generated.tex @@ -1,8 +1,8 @@ - samlingsbibliotek & 1 & & A & algoritm som leta upp element enligt sökkriterium \\ + samlingsbibliotek & 1 & & A & variabelt antal argument, asterisk efter parametertyp \\ sekvenssamling & 2 & & B & många färdiga datastrukturer med olika egenskaper \\ - sekvensalgoritm & 3 & & C & algoritm som ordnar element i en viss ordning \\ - ordning & 4 & & D & algoritm som räknar element med vissa egenskaper \\ - sortering & 5 & & E & beskriver hur element av en viss typ ska ordnas \\ - söking & 6 & & F & lösning på problem som drar nytta av sekvenser \\ - registrering & 7 & & G & variabelt antal argument, asterisk efter parametertyp \\ - varargs & 8 & & H & noll el. flera element av samma typ i viss ordning \\ \ No newline at end of file + sekvensalgoritm & 3 & & C & noll el. flera element av samma typ i viss ordning \\ + ordning & 4 & & D & beskriver hur element av en viss typ ska ordnas \\ + sortering & 5 & & E & algoritm som räknar element med vissa egenskaper \\ + söking & 6 & & F & algoritm som ordnar element i en viss ordning \\ + registrering & 7 & & G & algoritm som leta upp element enligt sökkriterium \\ + varargs & 8 & & H & lösning på problem som drar nytta av sekvenser \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w07-concepts-solurows-generated.tex b/compendium/generated/quiz-w07-concepts-solurows-generated.tex index 3c53f36a0..d8d1bd239 100644 --- a/compendium/generated/quiz-w07-concepts-solurows-generated.tex +++ b/compendium/generated/quiz-w07-concepts-solurows-generated.tex @@ -1,9 +1,9 @@ - linjärsökning & 1 & ~~\Large$\leadsto$~~ & F & leta i sekvens tills sökkriteriet är uppfyllt \\ - tidskomplexitet & 2 & ~~\Large$\leadsto$~~ & B & hur exekveringstiden växer med problemstorleken \\ - minneskomplexitet & 3 & ~~\Large$\leadsto$~~ & H & hur minnesåtgången växer med problemstorleken \\ - mängd & 4 & ~~\Large$\leadsto$~~ & E & unika element, kan snabbt se om element finns \\ + linjärsökning & 1 & ~~\Large$\leadsto$~~ & H & leta i sekvens tills sökkriteriet är uppfyllt \\ + tidskomplexitet & 2 & ~~\Large$\leadsto$~~ & F & hur exekveringstiden växer med problemstorleken \\ + minneskomplexitet & 3 & ~~\Large$\leadsto$~~ & A & hur minnesåtgången växer med problemstorleken \\ + mängd & 4 & ~~\Large$\leadsto$~~ & D & unika element, kan snabbt se om element finns \\ nyckel-värde-tabell & 5 & ~~\Large$\leadsto$~~ & G & för att snabbt hitta tillhörande värde \\ - nyckelmängd & 6 & ~~\Large$\leadsto$~~ & D & unika identifierare, associerade med ett enda värde \\ - persistens & 7 & ~~\Large$\leadsto$~~ & C & egenskapen att finnas kvar efter programmets avslut \\ - serialisera & 8 & ~~\Large$\leadsto$~~ & I & koda objekt till avkodningsbar sekvens av symboler \\ - de-serialisera & 9 & ~~\Large$\leadsto$~~ & A & avkoda symbolsekvens och återskapa objekt i minnet \\ \ No newline at end of file + nyckelmängd & 6 & ~~\Large$\leadsto$~~ & C & unika identifierare, associerade med ett enda värde \\ + persistens & 7 & ~~\Large$\leadsto$~~ & I & egenskapen att finnas kvar efter programmets avslut \\ + serialisera & 8 & ~~\Large$\leadsto$~~ & E & koda objekt till avkodningsbar sekvens av symboler \\ + de-serialisera & 9 & ~~\Large$\leadsto$~~ & B & avkoda symbolsekvens och återskapa objekt i minnet \\ \ No newline at end of file diff --git a/compendium/generated/quiz-w07-concepts-taskrows-generated.tex b/compendium/generated/quiz-w07-concepts-taskrows-generated.tex index d73c09add..39a17a751 100644 --- a/compendium/generated/quiz-w07-concepts-taskrows-generated.tex +++ b/compendium/generated/quiz-w07-concepts-taskrows-generated.tex @@ -1,9 +1,9 @@ - linjärsökning & 1 & & A & avkoda symbolsekvens och återskapa objekt i minnet \\ - tidskomplexitet & 2 & & B & hur exekveringstiden växer med problemstorleken \\ - minneskomplexitet & 3 & & C & egenskapen att finnas kvar efter programmets avslut \\ - mängd & 4 & & D & unika identifierare, associerade med ett enda värde \\ - nyckel-värde-tabell & 5 & & E & unika element, kan snabbt se om element finns \\ - nyckelmängd & 6 & & F & leta i sekvens tills sökkriteriet är uppfyllt \\ + linjärsökning & 1 & & A & hur minnesåtgången växer med problemstorleken \\ + tidskomplexitet & 2 & & B & avkoda symbolsekvens och återskapa objekt i minnet \\ + minneskomplexitet & 3 & & C & unika identifierare, associerade med ett enda värde \\ + mängd & 4 & & D & unika element, kan snabbt se om element finns \\ + nyckel-värde-tabell & 5 & & E & koda objekt till avkodningsbar sekvens av symboler \\ + nyckelmängd & 6 & & F & hur exekveringstiden växer med problemstorleken \\ persistens & 7 & & G & för att snabbt hitta tillhörande värde \\ - serialisera & 8 & & H & hur minnesåtgången växer med problemstorleken \\ - de-serialisera & 9 & & I & koda objekt till avkodningsbar sekvens av symboler \\ \ No newline at end of file + serialisera & 8 & & H & leta i sekvens tills sökkriteriet är uppfyllt \\ + de-serialisera & 9 & & I & egenskapen att finnas kvar efter programmets avslut \\ \ No newline at end of file diff --git a/compendium/modules/w02-programs-exercise.tex b/compendium/modules/w02-programs-exercise.tex index 5f24a19e8..3b8dd3981 100644 --- a/compendium/modules/w02-programs-exercise.tex +++ b/compendium/modules/w02-programs-exercise.tex @@ -260,16 +260,20 @@ \QUESTEND + + \WHAT{Skapa och använda samlingar.} \QUESTBEGIN -\Task \what~I Scalas standardbibliotek finns många olika samlingar som går att använda på ett enhetligt sätt. Para ihop uttrycken som skapar eller använder samlingar med den förklaring som passar bäst: +\Task \what~I Scalas standardbibliotek finns många olika samlingar som går att använda på ett enhetligt sätt (med vissa undantag för \code{Array}). Para ihop uttrycken som skapar eller använder samlingar med förklaringarna, så att alla kopplingar blir korrekta (minst en förklaring passar med mer än ett uttryck, men det finns bara en lösning där alla kopplingar blir parvis korrekta): \begin{ConceptConnections} \input{generated/quiz-w02-collection-methods-taskrows-generated.tex} \end{ConceptConnections} +\noindent Träna med dina egna varianter i REPL tills du lärt dig använda uttryck som ovan utantill. Då har du lättare att komma igång med kommande laborationer. + \SOLUTION \TaskSolved \what @@ -281,126 +285,55 @@ \QUESTEND + + + \WHAT{Jämför \code{Array} och \code{Vector}.} \QUESTBEGIN \Task \what~Para ihop varje samlingstyp med den beskrivning som passar bäst: +\Subtask Föränderlighet \Eng{mutability}. + \begin{ConceptConnections} -\input{generated/quiz-w02-array-vector-taskrows-generated.tex} +\input{generated/quiz-w02-array-vector-mutability-taskrows-generated.tex} \end{ConceptConnections} -\SOLUTION - -\TaskSolved \what +\Subtask Tillägg av element i början \Eng{prepend} och slutet \Eng{append}, eller förändring av delsekvens på godtycklig plats (eng. \emph{to patch}, även på svenska: \emph{att patcha}). \begin{ConceptConnections} -\input{generated/quiz-w02-array-vector-solurows-generated.tex} +\input{generated/quiz-w02-array-vector-append-taskrows-generated.tex} \end{ConceptConnections} -\QUESTEND - - - -\TODO Flytta några av nedan till extra uppgifter - -\TODO Minska trycket på Range io övningarna nedan -- det räcker med att i dett aläget lära sig (1 to 10) utantil i for-uttryck. - -\WHAT{Datastrukturen \code+Array+.} - -\QUESTBEGIN - -\Task \label{task:array} \what~ Kör nedan kodrader i Scala REPL. Beskriv vad som händer. +\Subtask Likhet \Eng{equality}. -\Subtask \code{val xs = Array("hej","på","dej", "!")} - -\Subtask \code{xs(0)} - -\Subtask \code{xs(3)} - -\Subtask \code{xs(4)} - -\Subtask \code{xs(1) + " " + xs(2)} - -\Subtask \code{xs.mkString} - -\Subtask \code{xs.mkString(" ")} - -\Subtask \code{xs.mkString("(", ",", ")")} - -\Subtask \code{xs.mkString("Array(", ", ", ")")} - -\Subtask \code{xs(0) = 42} - -\Subtask \code{xs(0) = "42"; println(xs(0))} - -\Subtask \code{val ys = Array(42, 7, 3, 8)} - -\Subtask \code{ys.sum} - -\Subtask \code{ys.min} - -\Subtask \code{ys.max} - -\Subtask \code{val zs = Array.fill(10)(42)} +\begin{ConceptConnections} +\input{generated/quiz-w02-array-vector-equality-taskrows-generated.tex} +\end{ConceptConnections} -\Subtask \code{zs.sum} - -\Subtask\Pen Datastrukturen \code{Range} håller reda på start- och slutvärde, samt stegstorleken för en uppräkning, men alla talen i uppräkningen genereras inte förrän så behövs. En \code{Int} tar 4 bytes i minnet. Ungefär hur mycket plats i minnet tar de objekt som variablerna \code{r} respektive \code{a} refererar till nedan? -\begin{REPL} -scala> val r = (1 to Int.MaxValue by 2) -scala> val a = r.toArray -\end{REPL} -\emph{Tips:} Använd uttrycket \code{ BigInt(Int.MaxValue) * 2 } i dina beräkningar. \SOLUTION - \TaskSolved \what +\Subtask -\SubtaskSolved Ett objekt av typen \code{Array[String]} skapas med värdet - -\code{Array(hej, på, dej, !)} och med namnet \code{xs}. - -\SubtaskSolved Returnerar en sträng med värdet \code{hej}. - -\SubtaskSolved Returnerar en sträng med värdet \code{!}. - -\SubtaskSolved Ett exception genereras. Skriver ut: - -\code{java.lang.ArrayIndexOutOfBoundsException: 4} - -\SubtaskSolved Returnerar en sträng med värdet \code{på dej}. - -\SubtaskSolved Returnerar en sträng med värdet \code{hejpådej!}. - -\SubtaskSolved Returnerar en sträng med värdet \code{hej på dej !}. - -\SubtaskSolved Returnerar en sträng med värdet \code{(hej,på,dej,!)}. - -\SubtaskSolved Returnerar en sträng med värdet \code{Array(hej,på,dej,!)}. - -\SubtaskSolved Ett fel uppstår av typen \code{type mismatch}. Konsollen talar om för oss vad den fick, dvs värdet \code{42} av typen \code{Int}. Den talar även om för oss vad den ville ha, dvs något värde av typen \code{String}. Till sist skriver den ut vår kodrad och pekar ut felet. - -\SubtaskSolved Det första elementet i \code{xs} ändras till värdet \code{42}. Därefter skrivs det första värdet i \code{xs} ut. - -\SubtaskSolved Ett objekt av typen \code{Array[Int]} skapas med värdet \code{Array(42, 7, 3, 8)} och med namnet \code{ys}. - -\SubtaskSolved Returnerar summan av elementen i \code{ys}. Resultatet är \code{60}. - -\SubtaskSolved Returnerar det minsta värdet i \code{ys}. Resultatet är \code{3}. - -\SubtaskSolved Returnerar det största värdet i \code{ys}. Resultatet är \code{42}. - -\SubtaskSolved Ett nytt värde av typen \code{Array[Int]} skapas med \code{10} stycken element, alla med värdet \code{42}. +\begin{ConceptConnections} +\input{generated/quiz-w02-array-vector-mutability-solurows-generated.tex} +\end{ConceptConnections} -\SubtaskSolved Returnerar summan av elementen i \code{zs}. Resultatet blir 420 (42 multiplicerat med 10). +\Subtask -\SubtaskSolved \code{r} tar upp 12 bytes. \code{a} tar upp ca 4 miljarder bytes. +\begin{ConceptConnections} +\input{generated/quiz-w02-array-vector-append-solurows-generated.tex} +\end{ConceptConnections} +\Subtask +\begin{ConceptConnections} +\input{generated/quiz-w02-array-vector-equality-solurows-generated.tex} +\end{ConceptConnections} \QUESTEND @@ -410,342 +343,131 @@ - - - - - - - - - - - - - - - -%%%%%%%%%%%%%%%%%%% SKA FIXAS: - - - - - - - -\WHAT{Datastrukturen \code+Vector+.} +\WHAT{Räkna ut summa, min och max i \code{args}.} \QUESTBEGIN -\Task \what~ Kör nedan kodrader i Scala REPL. Beskriv vad som händer. - -\Subtask \code{val words = Vector("hej","på","dej", "!")} - -\Subtask \code{words(0)} - -\Subtask \code{words(3)} - -\Subtask \code{words.mkString} - -\Subtask \code{words.mkString(" ")} - -\Subtask \code{words.mkString("(", ",", ")")} +\Task \what~Skriv ett program som skriver ut summa, min och max för en sekvens av heltal i \code{args}. Du kan förutsätta att programmet bara körs med heltal som programparametrar. \emph{Tips:} Med uttrycken \code{xs.sum} och \code{xs.min} och \code{xs.max} ges summan, minsta resp. största värde. +%Med uttrycket \code{xs.map(_.toInt)} ges en ny samling med alla element omgjorda till heltal. -\Subtask \code{words.mkString("Ord(", ", ", ")")} - -\Subtask \code{words(0) = "42"} - -\Subtask \code{val numbers = Vector(42, 7, 3, 8)} - -\Subtask \code{numbers.sum} - -\Subtask \code{numbers.min} - -\Subtask \code{numbers.max} - -\Subtask \code{val moreNumbers = Vector.fill(10000)(42)} - -\Subtask \code{moreNumbers.sum} - -\Subtask\Pen Jämför med uppgift \ref{task:array}. Vad kan man göra med en \code{Array} som man inte kan göra med en \code{Vector}? +Exempel på körning i terminalen: +\begin{REPL} +> atom sum-min-max.scala +> scalac sum-min-max.scala +> scala SumMinMax 1 2 42 3 4 +52 1 42 +\end{REPL} \SOLUTION +\TaskSolved \what~ -\TaskSolved \what - - -\SubtaskSolved Ett objekt av typen \code{scala.collection.immutable.Vector[String]} initieras med värdet \code{Vector(hej, på dej, !)}. - -\SubtaskSolved Returnerar det nollte elementet i \code{words}, dvs strängen \code{hej}. - -\SubtaskSolved Returnerar det tredje elementet i \code{words}, dvs strängen \code{!}. - -\SubtaskSolved Omvandlar vektorn till en Sträng. - -\SubtaskSolved Samma som ovan, fast den här gången används mellanrum för att seperera elementen. - -\SubtaskSolved Samma som ovan, fast den här gången sepereras elementen av kommatecken istället för mellanrum och dessutom börjar och slutar den resulterande strängen med parenteser. - -\SubtaskSolved Samma som ovan, fast med ordet \code{Ord} tillagt i början av den resulterande strängen. - -\SubtaskSolved Ett fel uppstår. Typen \code{Vector} är immutable. Dess element kan alltså inte bytas ut. - -\SubtaskSolved En ny \code{Vector[Int]} skapas med värdet \code{Vector(42, 7, 3, 8)}. - -\SubtaskSolved Returnerar summan av vektorn \code{numbers}. - -\SubtaskSolved Returnerar vektorns minsta element. - -\SubtaskSolved Returnerar vektorns största element. - -\SubtaskSolved En ny vektor skapas innehållandes tiotusen 42or. - -\SubtaskSolved Returnerar summan av vektorns element. - -\SubtaskSolved Byta ut element. - - +\scalainputlisting{examples/sum-min-max.scala} \QUESTEND -%%%% %Uppgift 4 - - -\WHAT{\code+for+-uttryck} +\WHAT{Algoritm: SWAP.} \QUESTBEGIN -\Task \what~ . Evaluera nedan uttryck i Scala REPL. Vad har respektive uttryck för värde och typ? - -\Subtask \code{for (i <- Range(1,10)) yield i} - -\Subtask \code{for (i <- 1 until 10) yield i} - -\Subtask \code{for (i <- 1 until 10) yield i + 1} +\Task \what~\\\emph{Problem:} Byta plats på två variablers värden. \\\emph{Lösningsidé:} Använd temporär variabel för mellanlagring. -\Subtask \code{for (i <- Range(1,10).inclusive) yield i} +\Subtask Skriv med \emph{pseudo-kod} (steg för steg på vanlig svenska) algoritmen SWAP nedan. -\Subtask \code{for (i <- 1 to 10) yield i} +\emph{Indata:} två heltalsvariabler $x$ och $y$ -\Subtask \code{for (i <- 1 to 10) yield i + 1} +\textbf{???} -\Subtask \code{(for (i <- 1 to 10) yield i + 1).sum} +\emph{Utdata:} variablerna $x$ och $y$ vars värden har bytt plats. -\Subtask \code{for (x <- 0.0 to 2 * math.Pi by math.Pi/4) yield math.sin(x)} +\Subtask Implementerar algoritmen SWAP. Ersätt \code{???} nedan med kod som byter plats på värdena i variablerna \code{x} och \code{y}: +\begin{REPL} +scala> var x = 42; var y = 43 +scala> ??? +scala> println("x är " + x + ", y är " + y) +x är 43, y är 42 +\end{REPL} \SOLUTION - \TaskSolved \what +\SubtaskSolved Pseudokoden kan se ut såhär: +\begin{Code} +Deklarera heltalsvariabel temp. +Kopiera värdet från x till temp. +Kopiera värdet från y till x. +Kopiera värdet från temp till y. +\end{Code} -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(2, 3, 4, 5, 6, 7, 8, 9, 10)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)} - -\SubtaskSolved typ: \code{Int}, värde: \code{Vector(65)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(0.0, 0.707, 1.0, 0.707, 0.0, -0.707, -1.0, -0.707)} - - +\SubtaskSolved +\begin{Code} +var temp = x +x = y +y = temp +\end{Code} \QUESTEND -%%%% %Uppgift 5 - - - - -\WHAT{Metoden \code+map+ på en samling.} +\WHAT{Indexering och tilldelning i Array med SWAP.} \QUESTBEGIN -\Task \what~ Evaluera nedan uttryck i Scala REPL. Vad har respektive uttryck för värde och typ? +\Task \what~Skriva ett program som byter plats på första och sista elementet i \code{main}-parametern \code{args}. Bytet ska bara ske om det är minst två element i \code{args}. Oavsett om förändring skedde eller ej ska \code{args} sedan skrivas ut med blanktecken mellan argumenten. + \emph{Tips:} Du kan komma åt sista elementet med \code{args(args.size - 1)} -\Subtask \code{Range(0,10).map(i => i + 1)} - -\Subtask \code{(0 until 10).map(i => i + 1)} - -\Subtask \code{(1 to 10).map(i => i * 2)} - -\Subtask \code{(1 to 10).map(_ * 2)} - -\Subtask \code{Vector.fill(10000)(42).map(_ + 43)} +Exempel på körning i terminalen: +\begin{REPL} +> atom swap-args.scala +> scalac swap-args.scala +> scala SwapFirstLastArg hej alla barn +barn alla hej +\end{REPL} \SOLUTION +\TaskSolved \what~ -\TaskSolved \what - - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)} - -\SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} - -värde: \code{Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)} - -\SubtaskSolved typ: \code{scala.collection.immutable.Vector[Int]} - -värde: En vector av tiotusen 85or (85 = 42 + 43). - - +\scalainputlisting{examples/swap-args.scala} \QUESTEND - -%%%% %Uppgift 6 - - - - -\WHAT{Metoden \code+foreach+ på en samling.} +\WHAT{\code|for|-uttryck och \code|map|-uttryck.} \QUESTBEGIN -\Task \what~ Kör nedan satser i Scala REPL. Vad händer? - -\Subtask \code{Range(0,10).foreach(i => println(i))} +\Task \what~Variabeln \code{xs} nedan refererar till samlingen \code{Vector(1, 2, 3)}. Para ihop uttrycken till vänster med rätt värde till höger. -\Subtask \code{(0 until 10).foreach(i => println(i))} - -\Subtask \code|(1 to 10).foreach{i => print("hej"); println(i * 2)}| - -\Subtask \code{(1 to 10).foreach(println)} - -\Subtask \code{Vector.fill(10000)(math.random).foreach(r => }\\ - \code{ if (r > 0.99) print("pling!"))} +\begin{ConceptConnections} +\input{generated/quiz-w02-for-yield-map-taskrows-generated.tex} +\end{ConceptConnections} +\noindent Träna med dina egna varianter i REPL tills du lärt dig använda uttryck som ovan utantill. Då har du lättare att komma igång med kommande laborationer. \SOLUTION - \TaskSolved \what - -\SubtaskSolved En \code{Range} skapas och dess element skrivs ut ett och ett. - -\SubtaskSolved Samma sak händer. - -\SubtaskSolved De tio första jämna talen (noll ej inräknat) skrivs ut med ett "hej" framför. - -\SubtaskSolved Talen 1 till 10 skrivs ut. - -\SubtaskSolved Tiotusen slumptal mellan 0 och 1 genereras. Varje gång ett tal är större än 0.99 kommer det ett pling. - - +\begin{ConceptConnections} +\input{generated/quiz-w02-for-yield-map-solurows-generated.tex} +\end{ConceptConnections} \QUESTEND -%%%% %Uppgift 7 - - - - -\WHAT{Algoritm: SWAP.} - -\QUESTBEGIN - -\Task \what~\\\emph{Problem:} Byta plats på två variablers värden. \\\emph{Lösningsidé:} Använd temporär variabel för mellanlagring. - -\Subtask Skriv med \emph{pseudo-kod} algoritmen SWAP, d.v.s. beskriv på vanlig svenska, steg för steg, hur en variabel $temp$ används för mellanlagring vid värdebytet: - -\emph{Indata:} två heltalsvariabler $x$ och $y$ - -\textbf{???} - -\emph{Utdata:} variablerna $x$ och $y$ vars värden har bytt plats. - -\Subtask Implementerar algoritmen SWAP. Ersätt \code{???} nedan med kod som byter plats på värdena i variablerna \code{x} och \code{y}: - -\begin{REPL} -scala> var x = 42 -scala> var y = 43 -scala> ??? -scala> println("x är " + x + ", y är " + y) -x är 43, y är 42 -\end{REPL} - - - -\SOLUTION - - -\TaskSolved \what - - -\SubtaskSolved Pseudokoden kan se ut såhär: - -Skapa heltalsvariabel temp. -Flytta värdet från x till temp. -Flytta värdet från y till x. -Flytta värdet från temp till y. - -\SubtaskSolved -\begin{REPLnonum} -scala> var (x, y) = (42, 43) -x: Int = 42 -y: Int = 43 -scala> var temp = x; x = y; y = temp; -temp: Int = 42 -x: Int = 43 -y: Int = 42 -scala> println("x är " + x + ", y är " + y) -x är 43, y är 42 -\end{REPLnonum} - - - -\QUESTEND - - - \WHAT{Algoritm: SUMBUG} @@ -767,7 +489,7 @@ skriv ut $sum$ \end{algorithm} -\Subtask\Pen Kör algoritmen steg för steg med penna och papper, där du skriver upp hur värdena för respektive variabel ändras. Det finns två buggar i algoritmen. Vilka? Rätta buggarna och test igen genom att ''köra'' algoritmen med penna på papper och kontrollera så att algoritmen fungerar för $n=0$, $n=1$, och $n=5$. Vad händer om $n=-1$? +\Subtask Kör algoritmen steg för steg med penna och papper, där du skriver upp hur värdena för respektive variabel ändras. Det finns två buggar i algoritmen. Vilka? Rätta buggarna och test igen genom att ''köra'' algoritmen med penna på papper och kontrollera så att algoritmen fungerar för $n=0$, $n=1$, och $n=5$. Vad händer om $n=-1$? \Subtask Skapa med hjälp av en editor filen \code{sumn.scala}. Implementera algoritmen SUM enligt den rättade pseudokoden och placera implementationen i en main-metod i ett objekt med namnet \code{sumn}. Du kan skapa indata \code{n} till algoritmen med denna deklaration i början av din main-metod: \\ \code{val n = args(0).toInt} \\ Vad ger applikationen för utskrift om du kör den med argumentet 8888? @@ -776,7 +498,7 @@ > scala sumn 8888 \end{REPLnonum} -\Subtask Kontrollera att din implementation räknar rätt genom att jämföra svaret med detta uttrycks värde, evaluerat i Scala REPL: +\noindent Kontrollera att din implementation räknar rätt genom att jämföra svaret med detta uttrycks värde, evaluerat i Scala REPL: \begin{REPLnonum} scala> (1 to 8888).sum \end{REPLnonum} @@ -800,11 +522,12 @@ \TaskSolved \what -\SubtaskSolved Bugg: Eftersom \code{i} inte ökar, fastnar programmet i en oändlig loop. Fix: Lägg till en sats i slutet av while-blocket som ökar värdet på i med 1. +\SubtaskSolved Bugg: Eftersom \code{i} inte inkrementeras, fastnar programmet i en oändlig loop. Fix: Lägg till en sats i slutet av while-blocket som ökar värdet på i med 1. Bugg: Eftersom man bara ökar summan med 1 varje gång, kommer resultatet att bli summan av n stycken 1or, inte de n första heltalen. Fix: Ändra så att summan ökar med \code{i} varje gång, istället för 1. För -1, blir resultatet 0. Förklaring: i börjar på 1 och är alltså aldrig mindre än n som ju är -1. while-blocket genomförs alltså noll gånger, och efter att \code{sum} får sitt ursprungsvärde förändras den aldrig. + \SubtaskSolved 39502716 -\SubtaskSolved - + \SubtaskSolved Såhär kan implementationen se ut: \begin{Code} public class SumN { @@ -814,15 +537,13 @@ int i = 1; while(i <= n){ sum = sum + i; - i = i + 1; + i += i + 1; } } System.out.println(sum); } \end{Code} - - \QUESTEND @@ -831,12 +552,6 @@ %%%% %Uppgift 12 - - - - - - \clearpage \ExtraTasks %%%%%%%%%%%%%%%%%%% @@ -891,7 +606,7 @@ \TaskSolved \what -\SubtaskSolved Bugg: i ökar aldrig. Programmet fastnar i en oändlig loop. Fix: Lägg till en sats som ökar i med 1, i slutet av while-blocket. +\SubtaskSolved Bugg: \code{i} inkrementeras aldrig. Programmet fastnar i en oändlig loop. Fix: Lägg till en sats som ökar i med 1, i slutet av while-blocket. \SubtaskSolved Så här kan implementationen se ut: \begin{Code} @@ -902,10 +617,8 @@ var i = 0 while(i < n) { val x = args(i).toInt - if(x > max) { - max = x - } - i = i + 1 + if(x > max) max = x + i += 1 } println(max) } @@ -925,7 +638,7 @@ if(x > max) { max = x } - i = i + 1 + i += 1 } println(max) } else println("Empty.") @@ -1002,9 +715,6 @@ - - - \WHAT{Datastrukturen \code+Range+.} \QUESTBEGIN @@ -1103,7 +813,373 @@ -\QUESTEND +\QUESTEND + + + + + + +% %TODO Flytta några av nedan till extra uppgifter +% +% +% \WHAT{Datastrukturen \code+Array+.} +% +% \QUESTBEGIN +% +% \Task \label{task:array} \what~ Kör nedan kodrader i Scala REPL. Beskriv vad som händer. +% +% \Subtask \code{val xs = Array("hej","på","dej", "!")} +% +% \Subtask \code{xs(0)} +% +% \Subtask \code{xs(3)} +% +% \Subtask \code{xs(4)} +% +% \Subtask \code{xs(1) + " " + xs(2)} +% +% \Subtask \code{xs.mkString} +% +% \Subtask \code{xs.mkString(" ")} +% +% \Subtask \code{xs.mkString("(", ",", ")")} +% +% \Subtask \code{xs.mkString("Array(", ", ", ")")} +% +% \Subtask \code{xs(0) = 42} +% +% \Subtask \code{xs(0) = "42"; println(xs(0))} +% +% \Subtask \code{val ys = Array(42, 7, 3, 8)} +% +% \Subtask \code{ys.sum} +% +% \Subtask \code{ys.min} +% +% \Subtask \code{ys.max} +% +% \Subtask \code{val zs = Array.fill(10)(42)} +% +% \Subtask \code{zs.sum} +% +% +% +% \SOLUTION +% +% +% \TaskSolved \what +% +% +% \SubtaskSolved Ett objekt av typen \code{Array[String]} skapas med värdet +% +% \code{Array(hej, på, dej, !)} och med namnet \code{xs}. +% +% \SubtaskSolved Returnerar en sträng med värdet \code{hej}. +% +% \SubtaskSolved Returnerar en sträng med värdet \code{!}. +% +% \SubtaskSolved Ett exception genereras. Skriver ut: +% +% \code{java.lang.ArrayIndexOutOfBoundsException: 4} +% +% \SubtaskSolved Returnerar en sträng med värdet \code{på dej}. +% +% \SubtaskSolved Returnerar en sträng med värdet \code{hejpådej!}. +% +% \SubtaskSolved Returnerar en sträng med värdet \code{hej på dej !}. +% +% \SubtaskSolved Returnerar en sträng med värdet \code{(hej,på,dej,!)}. +% +% \SubtaskSolved Returnerar en sträng med värdet \code{Array(hej,på,dej,!)}. +% +% \SubtaskSolved Ett fel uppstår av typen \code{type mismatch}. Konsollen talar om för oss vad den fick, dvs värdet \code{42} av typen \code{Int}. Den talar även om för oss vad den ville ha, dvs något värde av typen \code{String}. Till sist skriver den ut vår kodrad och pekar ut felet. +% +% \SubtaskSolved Det första elementet i \code{xs} ändras till värdet \code{42}. Därefter skrivs det första värdet i \code{xs} ut. +% +% \SubtaskSolved Ett objekt av typen \code{Array[Int]} skapas med värdet \code{Array(42, 7, 3, 8)} och med namnet \code{ys}. +% +% \SubtaskSolved Returnerar summan av elementen i \code{ys}. Resultatet är \code{60}. +% +% \SubtaskSolved Returnerar det minsta värdet i \code{ys}. Resultatet är \code{3}. +% +% \SubtaskSolved Returnerar det största värdet i \code{ys}. Resultatet är \code{42}. +% +% \SubtaskSolved Ett nytt värde av typen \code{Array[Int]} skapas med \code{10} stycken element, alla med värdet \code{42}. +% +% \SubtaskSolved Returnerar summan av elementen i \code{zs}. Resultatet blir 420 (42 multiplicerat med 10). +% +% +% \QUESTEND +% +% +% +% +% %%%%%%%%%%%%%%%%%%% SKA FIXAS: +% +% +% +% +% +% +% +% \WHAT{Datastrukturen \code+Vector+.} +% +% \QUESTBEGIN +% +% \Task \what~ Kör nedan kodrader i Scala REPL. Beskriv vad som händer. +% +% \Subtask \code{val words = Vector("hej","på","dej", "!")} +% +% \Subtask \code{words(0)} +% +% \Subtask \code{words(3)} +% +% \Subtask \code{words.mkString} +% +% \Subtask \code{words.mkString(" ")} +% +% \Subtask \code{words.mkString("(", ",", ")")} +% +% \Subtask \code{words.mkString("Ord(", ", ", ")")} +% +% \Subtask \code{words(0) = "42"} +% +% \Subtask \code{val numbers = Vector(42, 7, 3, 8)} +% +% \Subtask \code{numbers.sum} +% +% \Subtask \code{numbers.min} +% +% \Subtask \code{numbers.max} +% +% \Subtask \code{val moreNumbers = Vector.fill(10000)(42)} +% +% \Subtask \code{moreNumbers.sum} +% +% \Subtask Jämför med uppgift \ref{task:array}. Vad kan man göra med en \code{Array} som man inte kan göra med en \code{Vector}? +% +% \SOLUTION +% +% +% \TaskSolved \what +% +% +% \SubtaskSolved Ett objekt av typen \code{scala.collection.immutable.Vector[String]} initieras med värdet \code{Vector(hej, på dej, !)}. +% +% \SubtaskSolved Returnerar det nollte elementet i \code{words}, dvs strängen \code{hej}. +% +% \SubtaskSolved Returnerar det tredje elementet i \code{words}, dvs strängen \code{!}. +% +% \SubtaskSolved Omvandlar vektorn till en Sträng. +% +% \SubtaskSolved Samma som ovan, fast den här gången används mellanrum för att seperera elementen. +% +% \SubtaskSolved Samma som ovan, fast den här gången sepereras elementen av kommatecken istället för mellanrum och dessutom börjar och slutar den resulterande strängen med parenteser. +% +% \SubtaskSolved Samma som ovan, fast med ordet \code{Ord} tillagt i början av den resulterande strängen. +% +% \SubtaskSolved Ett fel uppstår. Typen \code{Vector} är immutable. Dess element kan alltså inte bytas ut. +% +% \SubtaskSolved En ny \code{Vector[Int]} skapas med värdet \code{Vector(42, 7, 3, 8)}. +% +% \SubtaskSolved Returnerar summan av vektorn \code{numbers}. +% +% \SubtaskSolved Returnerar vektorns minsta element. +% +% \SubtaskSolved Returnerar vektorns största element. +% +% \SubtaskSolved En ny vektor skapas innehållandes tiotusen 42or. +% +% \SubtaskSolved Returnerar summan av vektorns element. +% +% \SubtaskSolved Byta ut element. +% +% +% +% \QUESTEND +% +% +% +% +% %%%% %Uppgift 4 +% +% +% +% +% \WHAT{\code+for+-uttryck} +% +% \QUESTBEGIN +% +% \Task \what~ . Evaluera nedan uttryck i Scala REPL. Vad har respektive uttryck för värde och typ? +% +% \Subtask \code{for (i <- Range(1,10)) yield i} +% +% \Subtask \code{for (i <- 1 until 10) yield i} +% +% \Subtask \code{for (i <- 1 until 10) yield i + 1} +% +% \Subtask \code{for (i <- Range(1,10).inclusive) yield i} +% +% \Subtask \code{for (i <- 1 to 10) yield i} +% +% \Subtask \code{for (i <- 1 to 10) yield i + 1} +% +% \Subtask \code{(for (i <- 1 to 10) yield i + 1).sum} +% +% \Subtask \code{for (x <- 0.0 to 2 * math.Pi by math.Pi/4) yield math.sin(x)} +% +% +% \SOLUTION +% +% +% \TaskSolved \what +% +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(2, 3, 4, 5, 6, 7, 8, 9, 10)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)} +% +% \SubtaskSolved typ: \code{Int}, värde: \code{Vector(65)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(0.0, 0.707, 1.0, 0.707, 0.0, -0.707, -1.0, -0.707)} +% +% +% +% \QUESTEND +% +% +% +% +% %%%% %Uppgift 5 +% +% +% +% +% \WHAT{Metoden \code+map+ på en samling.} +% +% \QUESTBEGIN +% +% \Task \what~ Evaluera nedan uttryck i Scala REPL. Vad har respektive uttryck för värde och typ? +% +% \Subtask \code{Range(0,10).map(i => i + 1)} +% +% \Subtask \code{(0 until 10).map(i => i + 1)} +% +% \Subtask \code{(1 to 10).map(i => i * 2)} +% +% \Subtask \code{(1 to 10).map(_ * 2)} +% +% \Subtask \code{Vector.fill(10000)(42).map(_ + 43)} +% +% \SOLUTION +% +% +% \TaskSolved \what +% +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.IndexedSeq[Int]} +% +% värde: \code{Vector(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)} +% +% \SubtaskSolved typ: \code{scala.collection.immutable.Vector[Int]} +% +% värde: En vector av tiotusen 85or (85 = 42 + 43). +% +% +% +% \QUESTEND +% +% +% +% +% %%%% %Uppgift 6 +% +% +% +% +% \WHAT{Metoden \code+foreach+ på en samling.} +% +% \QUESTBEGIN +% +% \Task \what~ Kör nedan satser i Scala REPL. Vad händer? +% +% \Subtask \code{Range(0,10).foreach(i => println(i))} +% +% \Subtask \code{(0 until 10).foreach(i => println(i))} +% +% \Subtask \code|(1 to 10).foreach{i => print("hej"); println(i * 2)}| +% +% \Subtask \code{(1 to 10).foreach(println)} +% +% \Subtask \code{Vector.fill(10000)(math.random).foreach(r => }\\ +% \code{ if (r > 0.99) print("pling!"))} +% +% +% \SOLUTION +% +% +% \TaskSolved \what +% +% +% \SubtaskSolved En \code{Range} skapas och dess element skrivs ut ett och ett. +% +% \SubtaskSolved Samma sak händer. +% +% \SubtaskSolved De tio första jämna talen (noll ej inräknat) skrivs ut med ett "hej" framför. +% +% \SubtaskSolved Talen 1 till 10 skrivs ut. +% +% \SubtaskSolved Tiotusen slumptal mellan 0 och 1 genereras. Varje gång ett tal är större än 0.99 kommer det ett pling. +% +% +% +% \QUESTEND +% +% +% +% +% %%%% %Uppgift 7 +% +% +% +% + + @@ -1130,10 +1206,10 @@ \QUESTBEGIN -\Task \what~ Bygg vidare på koden nedan och gör ett Sten-Sax-Påse-spel\footnote{\url{https://sv.wikipedia.org/wiki/Sten,_sax,_påse}}. Koden fungerar som den ska, förutom funktionen \code{winner} som felaktigt alltid säger att datorn vinner. Lägg även till en main-funktion så att programmet kan kompileras och köras i terminalen. +\Task \what~ Bygg vidare på koden nedan och gör ett Sten-Sax-Påse-spel\footnote{\url{https://sv.wikipedia.org/wiki/Sten,_sax,_påse}}. Koden fungerar som den ska, förutom funktionen \code{winner} som fuskar till datorns fördel. Lägg även till en main-funktion så att programmet kan kompileras och köras i terminalen. Spelet blir roligare om du räknar antalet vinster och förluster. Du kan också göra så att datorn inte väljer med jämn fördelning. \begin{Code} -object Rock { +object Game { val choices = Vector("Sten", "Påse", "Sax") def userChoice(): Int = { @@ -1159,7 +1235,7 @@ \end{Code} % \begin{Code}[basicstyle=\ttfamily\footnotesize\selectfont]] -% object Rock { +% object Game { % import javax.swing.JOptionPane % import JOptionPane.{showOptionDialog => optDlg} % @@ -1218,7 +1294,7 @@ else "Datorn" } \end{Code} -Addition med 3 görs för att undvika negativa tal, som beter sig annorlunda i moduloräkning. +Moduloräkningen kräver att elementen i \code{choices} är i \emph{förlorar-över}-ordning, alltså Sten, Påse, Sax. Addition med 3 görs för att undvika negativa tal, som beter sig annorlunda i moduloräkning. \QUESTEND @@ -1285,6 +1361,33 @@ + +\WHAT{Minnesåtgång för \code+Range+.} + +\QUESTBEGIN + +\Task \what~Datastrukturen \code{Range} håller reda på start- och slutvärde, samt stegstorleken för en uppräkning, men alla talen i uppräkningen genereras inte förrän på begäran. En \code{Int} tar 4 bytes i minnet. Ungefär hur mycket plats i minnet tar de objekt som variablerna (a) \code{intervall} respektive (b) \code{sekvens} refererar till nedan? + +\begin{REPL} +scala> val intervall = (1 to Int.MaxValue by 2) +scala> val sekvens = r.toArray +\end{REPL} +\emph{Tips:} Använd uttrycket \code{ BigInt(Int.MaxValue) * 2 } i dina beräkningar. + + +\SOLUTION + +\TaskSolved \what~ + +\SubtaskSolved Variabeln \code{intervall} refererar till objekt som tar upp 12 bytes. + +\SubtaskSolved Variabeln \code{sekvens} refererar till objekt som tar upp ca 4 miljarder bytes. + +\QUESTEND + + + + \WHAT{Undersök den genererade byte-koden.} \QUESTBEGIN @@ -1300,7 +1403,7 @@ \Subtask Lägg till en parameter till: \\ \code{def plusxyz(x: Int, y: Int, z: Int) = x + y + z} \\ och studera byte-koden med \code{:javap plusxyz}. Vad skiljer byte-koden mellan \code{plusxy} och \code{plusxyz}? -\Subtask\Pen Läs om byte-kod här: \href{https://en.wikipedia.org/wiki/Java\_bytecode}{en.wikipedia.org/wiki/Java\_bytecode}. Vad betyder den inledande bokstaven i additionsinstruktionen? +\Subtask Läs om byte-kod här: \href{https://en.wikipedia.org/wiki/Java\_bytecode}{en.wikipedia.org/wiki/Java\_bytecode}. Vad betyder den inledande bokstaven i additionsinstruktionen? \SOLUTION @@ -1361,31 +1464,16 @@ +\WHAT{Skillnaden mellan krullpareneteser och vanliga parenteser} -% \WHAT{NEEDS A TOPIC DESCRIPTION} -% -% \QUESTBEGIN -% -% \Task \what~ Läs om krullparenteser och vanliga parenteser på stack overflow: \\ \href{http://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and-when}{stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and-when} och prova själv i REPL hur du kan blanda dessa olika slags parenteser på olika vis. -% -% \SOLUTION -% -% \TaskSolved \what~ -% -% \SubtaskSolved \TODO -% -% -% \QUESTEND +\QUESTBEGIN +\Task \what~ Läs om krullparenteser och vanliga parenteser på stack overflow: \\ \href{http://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and-when}{stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and-when} och prova själv i REPL hur du kan blanda dessa olika slags parenteser på olika vis. +\SOLUTION -% \WHAT{Tips:} -% -% \QUESTBEGIN -% -% \Task \what~ Gör jämförande studier av Scalas api-dokumentation för \code{ArrayBuffer}, \code{Array} och \code{Vector}. Ge exempel på metoder som finns på objekt av typen \code{Array} och \code{ArrayBuffer} men inte på objekt av typen \code{Vector}. Kolla efter metoder som returnerar \code{Unit}. Prova några muterande metoder på \code{Array} och \code{ArrayBuffer} i REPL. -% -% \SOLUTION -% -% -% \QUESTEND +\TaskSolved \what~ + +\SubtaskSolved Prova själv i REPL. + +\QUESTEND diff --git a/quiz/QuizData.scala b/quiz/QuizData.scala index 685c5761b..8b31cc8f7 100644 --- a/quiz/QuizData.scala +++ b/quiz/QuizData.scala @@ -95,27 +95,46 @@ object QuizData { // to generate tables for a concept connection quizes in late "" -> "" ).filter(_._1.trim.nonEmpty), - "quiz-w02-array-vector" -> Vector( //programs - "Vector" -> "oföränderlig, men nya delvis ändrade varianter skapas snabbt", - "Array " -> "enskilda element är förändringsbara genom tilldelning", -// "Array " -> "snabbare vid allokering och indexering än andra samlingar", - "Array " -> "måste kopieras i sin helhet vid ändring av storlek", -// "Array " -> "olik andra samlingar: likhetstest med == kollar ej innehåll", -// "Vector" -> "xs == ys kollar om elementen i xs och ys är lika", + "quiz-w02-array-vector-mutability" -> Vector( //programs + "Vector" -> "oföränderlig", + "Array " -> "förändringsbar", "" -> "" ).filter(_._1.trim.nonEmpty), + "quiz-w02-array-vector-append" -> Vector( //programs + "Vector" -> "varianter med fler/andra element skapas snabbt ur befintlig", + "Array " -> "långsam vid ändring av storlek (kopiering av rubbet krävs)", + "" -> "" + ).filter(_._1.trim.nonEmpty), + + "quiz-w02-array-vector-equality" -> Vector( //programs + "Vector" -> "\\code|xs == ys| är \\code|true| om alla element lika", + "Array " -> "olikt andra samlingar kollar \\code|==| ej innehållslikhet", + "" -> "" + ).filter(_._1.trim.nonEmpty), + + "quiz-w02-collection-methods" -> Vector( //programs - "\\code|Array.fill(9)(0) | " -> "skapar ny förändringsbar sekvens med 9 nollor", - "\\code|Vector.fill(9)(' ')|" -> "skapar ny oföränderlig sekvens med 9 blanktecken", - "\\code|xs.apply(0) |" -> "indexera i sekvenssamling; ger första elementet", - "\\code|xs(0) |" -> "indexera i sekvenssamling; ger första elementet", - "\\code|xs :+ 0 |" -> "skapar ny samling med en nolla tillagd på slutet", - "\\code|0 +: xs |" -> "skapar ny samling med en nolla tillagd i början", - "\\code|xs.mkString |" -> "skapar en sträng med alla element intill varandra", - "\\code|xs.mkString(\",\") |" -> "skapar en sträng med komma mellan elementen", - "\\code|xs.map(_.toString))|" -> "ny samling med elementen omgjorda till strängar", - "\\code|xs.map(_.toInt)) |" -> "ny samling med elementen omgjorda till heltal", + "\\code|val xs = Vector(2) |" -> "ny referens till sekvens av längd 1", + "\\code|Array.fill(9)(0) |" -> "ny förändringsbar sekvens med nollor", + "\\code|Vector.fill(9)(' ')|" -> "ny oföränderlig sekvens med blanktecken", + "\\code|xs(0) |" -> "förkortad skrivning av \\code|apply(0)|", + "\\code|xs.apply(0) |" -> "indexering, ger första elementet", + "\\code|xs :+ 0 |" -> "ny samling med en nolla tillagd på slutet", + "\\code|0 +: xs |" -> "ny samling med en nolla tillagd i början", + "\\code|xs.mkString |" -> "ny sträng med alla element intill varandra", + "\\code|xs.mkString(\",\") |" -> "ny sträng med komma mellan elementen", + "\\code|xs.map(_.toString))|" -> "ny samling, elementen omgjorda till strängar", + "\\code|xs.map(_.toInt)) |" -> "ny samling, elementen omgjorda till heltal", + "" -> "" + ).filter(_._1.trim.nonEmpty), + + "quiz-w02-for-yield-map" -> Vector( //programs + "\\code|for (x <- xs) yield x - 1|" -> "\\code|Vector(0, 1, 2)|", + "\\code|xs.map(x => x + 1) |" -> "\\code|Vector(2, 3, 4)|", + "\\code|for (i <- 0 to 1) yield xs(i)|" -> "\\code|Vector(1, 2)|", + "\\code|(1 to 3).map(i => i)|" -> "\\code|Vector(1, 2, 3)|", + "\\code|(1 until 3).map(i => xs(i))|" -> "\\code|Vector(2, 3)|", "" -> "" ).filter(_._1.trim.nonEmpty),