Skip to content

Instantly share code, notes, and snippets.

@lieuwex
Last active November 2, 2016 14:45
Show Gist options
  • Select an option

  • Save lieuwex/14ce1da07030461a8159 to your computer and use it in GitHub Desktop.

Select an option

Save lieuwex/14ce1da07030461a8159 to your computer and use it in GitHub Desktop.

Revisions

  1. lieuwex revised this gist Nov 2, 2016. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion index.ls
    Original file line number Diff line number Diff line change
    @@ -27,7 +27,9 @@ handle-err e if e?
    e, r <-! @current-course
    handle-err e if e?

    e, r <-! r.grades no, yes
    e, r <-! r.grades do
    fillPersons: no
    fillGrade: yes
    handle-err e if e?

    r
  2. lieuwex revised this gist Jul 5, 2016. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions index.ls
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,6 @@
    m = require 'magister.js'
    { Magister } = require 'magister.js'
    require! 'kbd'
    { group-by, obj-to-pairs, each, map, reject, is-it-NaN } = require 'prelude-ls'
    Magister = m.Magister

    WANTED = 5.5

  3. lieuwex revised this gist Jun 5, 2016. 1 changed file with 6 additions and 6 deletions.
    12 changes: 6 additions & 6 deletions index.ls
    Original file line number Diff line number Diff line change
    @@ -6,16 +6,16 @@ Magister = m.Magister
    WANTED = 5.5

    ask = (str) ->
    process.stdout.write str
    process.stdout.write "#str: "
    kbd.get-line-sync!

    handle-err = (e) !->
    console.log "error: #e"
    process.exit 1

    numberize = (s) -> s.replace ',', '.' |> Number
    numberize = (s) -> parse-float s.replace(',', '.'), 10

    [schoolname, username, password] = ['Schoolname', 'Username', 'Password'] |> map (s) -> ask "#s: "
    [schoolname, username, password] = ['Schoolname', 'Username', 'Password'] |> map ask

    magister = new Magister do
    schoolname
    @@ -36,12 +36,12 @@ r
    |> obj-to-pairs
    |> each ([name, grades]) !->
    console.log "#name:"
    input = ask 'Weight of next grade: '
    input = ask 'Weight of next grade'

    if input.length is 0
    return

    weight = input |> (.replace ',', '.') |> Number
    weight = input |> numberize

    old-grade-weight-sum = 0
    old-weight-sum = 0
    @@ -50,7 +50,7 @@ r
    |> reject (g) -> g.type!type! is 2
    |> map (g) ->
    grade: (
    if g.grade!? then g.grade! |> (.replace ',', '.') |> Number
    if g.grade!? then g.grade! |> numberize
    else NaN
    )
    weight: g.weight!
  4. lieuwex revised this gist Jun 25, 2015. 1 changed file with 3 additions and 1 deletion.
    4 changes: 3 additions & 1 deletion index.ls
    Original file line number Diff line number Diff line change
    @@ -65,8 +65,10 @@ r
    Math.round(10 * needed) / 10

    cur-avg = old-grade-weight-sum / old-weight-sum
    cur-rounded-avg = Math.floor(cur-avg + 0.5) - 0.5
    next-avg = Math.ceil(cur-avg - 0.4) + 0.5

    console.log "Needed grade for #cur-rounded-avg (stay same): #{calculate-grade cur-rounded-avg}"
    console.log "Needed grade for #WANTED: #{calculate-grade WANTED}"
    console.log "Needed grade for #next-avg: #{calculate-grade next-avg}"
    console.log "Needed grade for #next-avg (go one up): #{calculate-grade next-avg}"
    console.log "---"
  5. lieuwex revised this gist Jun 25, 2015. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions index.ls
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    m = require 'magister.js'
    Magister = m.Magister
    require! 'kbd'
    { group-by, obj-to-pairs, each, map, reject, is-it-NaN } = require 'prelude-ls'
    Magister = m.Magister

    WANTED = 5.5

    @@ -67,6 +67,6 @@ r
    cur-avg = old-grade-weight-sum / old-weight-sum
    next-avg = Math.ceil(cur-avg - 0.4) + 0.5

    console.log "Needed grade for 5.5: #{calculate-grade WANTED}"
    console.log "Needed grade for #{next-avg}: #{calculate-grade next-avg}"
    console.log "Needed grade for #WANTED: #{calculate-grade WANTED}"
    console.log "Needed grade for #next-avg: #{calculate-grade next-avg}"
    console.log "---"
  6. lieuwex revised this gist Jun 25, 2015. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions index.ls
    Original file line number Diff line number Diff line change
    @@ -50,12 +50,12 @@ r
    |> reject (g) -> g.type!type! is 2
    |> map (g) ->
    grade: (
    if g.grade? then g.grade! |> (.replace ',', '.') |> Number
    if g.grade!? then g.grade! |> (.replace ',', '.') |> Number
    else NaN
    )
    weight: g.weight!
    |> reject (g) -> is-it-NaN g.grade
    |> each (g) ->
    |> each (g) !->
    old-grade-weight-sum += g.weight * g.grade
    old-weight-sum += g.weight

  7. lieuwex revised this gist Jun 25, 2015. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions index.ls
    Original file line number Diff line number Diff line change
    @@ -47,6 +47,7 @@ r
    old-weight-sum = 0

    grades
    |> reject (g) -> g.type!type! is 2
    |> map (g) ->
    grade: (
    if g.grade? then g.grade! |> (.replace ',', '.') |> Number
  8. lieuwex revised this gist Jun 25, 2015. 1 changed file with 19 additions and 10 deletions.
    29 changes: 19 additions & 10 deletions index.ls
    Original file line number Diff line number Diff line change
    @@ -4,20 +4,23 @@ require! 'kbd'
    { group-by, obj-to-pairs, each, map, reject, is-it-NaN } = require 'prelude-ls'

    WANTED = 5.5
    SCHOOLNAME = ''
    USERNAME = ''
    PASSWORD = ''

    ask = (str) ->
    process.stdout.write str
    kbd.get-line-sync!

    handle-err = (e) !->
    console.log "error: #e"
    process.exit 1

    numberize = (s) -> s.replace ',', '.' |> Number

    [schoolname, username, password] = ['Schoolname', 'Username', 'Password'] |> map (s) -> ask "#s: "

    magister = new Magister do
    SCHOOLNAME
    USERNAME
    PASSWORD
    schoolname
    username
    password

    e <-! magister.ready
    handle-err e if e?
    @@ -33,8 +36,7 @@ r
    |> obj-to-pairs
    |> each ([name, grades]) !->
    console.log "#name:"
    console.log "weight of next grade"
    input = kbd.getLineSync!
    input = ask 'Weight of next grade: '

    if input.length is 0
    return
    @@ -56,7 +58,14 @@ r
    old-grade-weight-sum += g.weight * g.grade
    old-weight-sum += g.weight

    needed = (WANTED * (old-weight-sum + weight) - old-grade-weight-sum) / weight
    calculate-grade = (wanted) ->
    wanted = 10 if wanted > 10
    needed = (wanted * (old-weight-sum + weight) - old-grade-weight-sum) / weight
    Math.round(10 * needed) / 10

    cur-avg = old-grade-weight-sum / old-weight-sum
    next-avg = Math.ceil(cur-avg - 0.4) + 0.5

    console.log "needed grade: #needed"
    console.log "Needed grade for 5.5: #{calculate-grade WANTED}"
    console.log "Needed grade for #{next-avg}: #{calculate-grade next-avg}"
    console.log "---"
  9. lieuwex revised this gist Jun 25, 2015. 1 changed file with 4 additions and 1 deletion.
    5 changes: 4 additions & 1 deletion index.ls
    Original file line number Diff line number Diff line change
    @@ -46,7 +46,10 @@ r

    grades
    |> map (g) ->
    grade: g.grade! |> (.replace ',', '.') |> Number
    grade: (
    if g.grade? then g.grade! |> (.replace ',', '.') |> Number
    else NaN
    )
    weight: g.weight!
    |> reject (g) -> is-it-NaN g.grade
    |> each (g) ->
  10. lieuwex created this gist Jun 25, 2015.
    59 changes: 59 additions & 0 deletions index.ls
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    m = require 'magister.js'
    Magister = m.Magister
    require! 'kbd'
    { group-by, obj-to-pairs, each, map, reject, is-it-NaN } = require 'prelude-ls'

    WANTED = 5.5
    SCHOOLNAME = ''
    USERNAME = ''
    PASSWORD = ''

    handle-err = (e) !->
    console.log "error: #e"
    process.exit 1

    numberize = (s) -> s.replace ',', '.' |> Number

    magister = new Magister do
    SCHOOLNAME
    USERNAME
    PASSWORD

    e <-! magister.ready
    handle-err e if e?

    e, r <-! @current-course
    handle-err e if e?

    e, r <-! r.grades no, yes
    handle-err e if e?

    r
    |> group-by (.class!abbreviation)
    |> obj-to-pairs
    |> each ([name, grades]) !->
    console.log "#name:"
    console.log "weight of next grade"
    input = kbd.getLineSync!

    if input.length is 0
    return

    weight = input |> (.replace ',', '.') |> Number

    old-grade-weight-sum = 0
    old-weight-sum = 0

    grades
    |> map (g) ->
    grade: g.grade! |> (.replace ',', '.') |> Number
    weight: g.weight!
    |> reject (g) -> is-it-NaN g.grade
    |> each (g) ->
    old-grade-weight-sum += g.weight * g.grade
    old-weight-sum += g.weight

    needed = (WANTED * (old-weight-sum + weight) - old-grade-weight-sum) / weight

    console.log "needed grade: #needed"
    console.log "---"