Created
May 16, 2014 09:29
-
-
Save alksl/d1426141db50d8fd40b1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :code: TAMS27 | |
:name: Matematisk statistik | |
:points: 6.0 | |
- :code: TAOP33 | |
:name: Kombinatorisk optimering gk | |
:points: 4.0 | |
- :code: TATA24 | |
:name: Linjär algebra | |
:points: 8.0 | |
- :code: TATA41 | |
:name: Envariabelanalys 1 | |
:points: 6.0 | |
- :code: TATA42 | |
:name: Envariabelanalys 2 | |
:points: 6.0 | |
- :code: TATA47 | |
:name: Grundläggande och diskret matematik, del 1 | |
:points: 6.0 | |
- :code: TATA48 | |
:name: Grundläggande och diskret matematik, del 2 | |
:points: 6.0 | |
- :code: TATA50 | |
:name: Transformteori | |
:points: 4.0 | |
- :code: TATA61 | |
:name: Flervariabel- och vektoranalys | |
:points: 6.0 | |
- :code: TDDB68 | |
:name: Processprogrammering och operativsystem | |
:points: 6.0 | |
- :code: TDDB84 | |
:name: Designmönster | |
:points: 6.0 | |
- :code: TDDC10 | |
:name: Perspektiv på datateknik/datavetenskap | |
:points: 6.0 | |
- :code: TDDC36 | |
:name: Logik | |
:points: 6.0 | |
- :code: TDDC66 | |
:name: Datorsystem och programmering | |
:points: 4.0 | |
- :code: TDDC67 | |
:name: Funktionell programmering och Lisp | |
:points: 8.0 | |
- :code: TDDC68 | |
:name: Imperativ programmering och Ada | |
:points: 6.0 | |
- :code: TDDC69 | |
:name: Objektorienterad programmering och Java | |
:points: 6.0 | |
- :code: TDDC70 | |
:name: Datastrukturer och algoritmer | |
:points: 6.0 | |
- :code: TDDC90 | |
:name: Software Security | |
:points: 6.0 | |
- :code: TDDC93 | |
:name: Programutvecklingsmetodik, teori | |
:points: 4.0 | |
- :code: TDDD09 | |
:name: Programutvecklingsprojekt i ett helhetsperspektiv | |
:points: 8.0 | |
- :code: TDDD14 | |
:name: Formella språk och automatateori | |
:points: 6.0 | |
- :code: TDDD17 | |
:name: Informationssäkerhet, fk | |
:points: 6.0 | |
- :code: TDDD24 | |
:name: Webbprogrammering och interaktivitet | |
:points: 4.0 | |
- :code: TDDD25 | |
:name: Distribuerade system | |
:points: 6.0 | |
- :code: TDDD26 | |
:name: Utveckling av interaktiva system | |
:points: 6.0 | |
- :code: TDDD27 | |
:name: Avancerad webbprogrammering | |
:points: 6.0 | |
- :code: TDDD37 | |
:name: Databasteknik | |
:points: 6.0 | |
- :code: TDDD38 | |
:name: Avancerad programmering i C++ | |
:points: 6.0 | |
- :code: TDDD43 | |
:name: Datamodeller och databaser, avancerad kurs | |
:points: 6.0 | |
- :code: TEIE44 | |
:name: Intellectual Property Rights | |
:points: 4.0 | |
- :code: TFMT13 | |
:name: Mätteknik | |
:points: 4.0 | |
- :code: TFYY68 | |
:name: Mekanik | |
:points: 6.0 | |
- :code: TSEA22 | |
:name: Digitalteknik | |
:points: 6.0 | |
- :code: TSEA29 | |
:name: Konstruktion med mikrodatorer, projektkurs | |
:points: 8.0 | |
- :code: TSEA43 | |
:name: Digital konstruktion | |
:points: 6.0 | |
- :code: TSEA47 | |
:name: Datorteknik, del 1 | |
:points: 4.0 | |
- :code: TSEA49 | |
:name: Datorteknik del 2 | |
:points: 4.0 | |
- :code: TSRT12 | |
:name: Reglerteknik Y | |
:points: 6.0 | |
- :code: TSTE58 | |
:name: Elektronik | |
:points: 6.0 | |
- :code: TANA07 | |
:name: ! ' Datautvinning med matrismetoder' | |
:points: 6.0 | |
- :code: TANA09 | |
:name: ! ' Datatekniska beräkningar' | |
:points: 4.0 | |
- :code: TDDD16 | |
:name: ! ' Kompilatorer och interpretatorer' | |
:points: 6.0 | |
- :code: TDTS06 | |
:name: ! ' Datornät' | |
:points: 6.0 | |
- :code: TSDT18 | |
:name: ! ' Signaler och system' | |
:points: 6.0 | |
- :code: TSIT03 | |
:name: ! ' Kryptoteknik' | |
:points: 6.0 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :code: TDDD14 | |
:level: G2 | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDTS06 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TSTE86 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDB44 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD07 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDTS08 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDA69 | |
:level: G2 | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD24 | |
:level: G2 | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD25 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDTS01 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDTS07 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDA69 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDC78 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD04 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDD27 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '-' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSEA26 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TSIT03 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSKS01 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDC90 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD37 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSIN02 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TSIT02 | |
:level: G2 | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSKS01 | |
:level: A | |
:vof: | |
- v | |
:points: '4' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :code: TDDD14 | |
:level: G2 | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDTS06 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TSTE86 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDB44 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD07 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDTS08 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDA69 | |
:level: G2 | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD24 | |
:level: G2 | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD25 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDTS01 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDTS07 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDA69 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDC78 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD04 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDD27 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '-' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSEA26 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TSIT03 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSKS01 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD37 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSIN02 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TSIT02 | |
:level: G2 | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSKS01 | |
:level: A | |
:vof: | |
- v | |
:points: '4' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# encoding: utf-8 | |
require "rubygems" | |
require "terminal-table" | |
require "yaml" | |
COURSES = YAML.load(File.read("./new_courses.yml")) | |
PROFILES = YAML.load(File.read("./profiles/profiles.yml")) | |
REQUIREMENTS = PROFILES.each_with_object({}) do |profile, hash| | |
hash[profile[:code]] = | |
YAML.load(File.read("./profiles/#{profile[:code]}.yml")) | |
end | |
def have_course?(code) | |
found_course = COURSES.find do |course| | |
course[:code] == code | |
end | |
not found_course.nil? | |
end | |
PROFILES.each do |profile| | |
puts "Profile: #{profile[:name]}" | |
table = Terminal::Table.new(headings: ["Course", "Points", "Level", "VOF", "Have"]) | |
REQUIREMENTS[profile[:code]].each do |req| | |
row = [] | |
row << req[:code] | |
row << req[:points] | |
row << req[:level] | |
row << req[:vof].join("/") | |
row << (have_course?(req[:code]) ? "Yep" : "Nope") | |
table << row | |
end | |
puts table | |
print "\n\n" | |
end | |
puts "Poäng per område" | |
AREAS = COURSES.map { |c| c[:areas] }.flatten.uniq | |
table = Terminal::Table.new(headings: ["Area", "Level", "Sum"]) | |
AREAS.each do |area| | |
%w{ A G1 G2 }.each do |level| | |
row = [] | |
row << area | |
row << level | |
row << COURSES.select { |course| | |
course[:level] == level and course[:areas].include?(area) | |
}.inject(0) { |sum,course| | |
sum + course[:points] | |
} | |
table << row | |
end | |
end | |
puts table | |
print "\n\n" | |
puts "Courses" | |
table = Terminal::Table.new(headings: ["Course", "Points", "Level", "Areas"]) | |
COURSES.each do |course| | |
row = [] | |
row << course[:code] | |
row << course[:points] | |
row << course[:level] | |
row << course[:areas].join(",") | |
table << row | |
end | |
puts table | |
print "\n\n" | |
puts "Points" | |
total = COURSES.inject(0) { |sum, course| sum + course[:points] } | |
advanced = COURSES.select { |c| c[:level] == "A" }.inject(0) { |sum, c| sum + c[:points] } | |
g2 = COURSES.select { |c| c[:level] == "G2" }.inject(0) { |sum, c| sum + c[:points] } | |
g1 = COURSES.select { |c| c[:level] == "G1" }.inject(0) { |sum, c| sum + c[:points] } | |
puts "total: #{total}" | |
puts "adv: #{advanced}" | |
puts "g2: #{g2}" | |
puts "g1: #{g1}" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'yaml' | |
require './profiles' | |
MATCHER = /^([A-Z0-9]+)\s+(.+)\s+(G1|G2|A)\s+([a-z\/]+)\s+(\d|-)\s+(\d)\*?/ | |
def parse_line(line) | |
matches = MATCHER.match(line) | |
raise "No match on #{line}" unless matches | |
{ | |
code: matches[1].chomp, | |
level: matches[3].chomp, | |
vof: matches[4].chomp.split("/"), | |
points: matches[5].chomp | |
} | |
end | |
PROFILES.each do |profile| | |
puts "Reading #{profile[:code]}" | |
lines = File.readlines("./profiles/#{profile[:code]}") | |
parsed = lines.map { |line| parse_line(line) } | |
File.open("./profiles/#{profile[:code]}.yml", "w") do |f| | |
f.write(parsed.to_yaml) | |
end | |
end | |
File.open("./profiles/profiles.yml", "w") do |f| | |
f.write(PROFILES.to_yaml) | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :name: Datorsystem | |
:code: das | |
- :name: Programmering och algoritmer | |
:code: pal | |
- :name: Programvaruproduktion | |
:code: pvp | |
- :name: Spelprogrammering | |
:code: spel | |
- :name: Systemteknologi | |
:code: sis | |
- :name: Säkra system | |
:code: ss |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :code: TDDC34 | |
:level: A | |
:vof: | |
- o | |
:points: '3' | |
- :code: TDDB84 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDD31 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDC90 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD31 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDEI19 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TEAE01 | |
:level: G1 | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDD03 | |
:level: G2 | |
:vof: | |
- o | |
:points: '3' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TEIO20 | |
:level: G2 | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDD04 | |
:level: A | |
:vof: | |
- o | |
:points: '2' | |
- :code: TDDD05 | |
:level: A | |
:vof: | |
- o | |
:points: '1' | |
- :code: TDDD29 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '-' | |
- :code: TDEI35 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TEIO20 | |
:level: G2 | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDC90 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD07 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDD43 | |
:level: A | |
:vof: | |
- v | |
:points: '2' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :code: TDDC17 | |
:level: G2 | |
:vof: | |
- o | |
:points: '3' | |
- :code: TDDD37 | |
:level: G2 | |
:vof: | |
- o | |
:points: '1' | |
- :code: TDDD07 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '4' | |
- :code: TDDD55 | |
:level: G2 | |
:vof: | |
- o | |
- v | |
:points: '3' | |
- :code: TDTS07 | |
:level: A | |
:vof: | |
- o | |
:points: '1' | |
- :code: TDDD25 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '2' | |
- :code: TSBK08 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '1' | |
- :code: TSRT07 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '2' | |
- :code: TDDD05 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '1' | |
- :code: TSFS06 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '1' | |
- :code: TSRT62 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '3' | |
- :code: TDDB84 | |
:level: A | |
:vof: | |
- o | |
- v | |
:points: '3' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :code: TDDD23 | |
:level: A | |
:vof: | |
- o | |
:points: '2' | |
- :code: TSBK03 | |
:level: A | |
:vof: | |
- o | |
:points: '3' | |
- :code: TDDC17 | |
:level: G2 | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD53 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TNCG15 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TDDC73 | |
:level: G2 | |
:vof: | |
- o | |
:points: '1' | |
- :code: TSBK03 | |
:level: A | |
:vof: | |
- o | |
:points: '3' | |
- :code: TDDD57 | |
:level: A | |
:vof: | |
- o | |
:points: '1' | |
- :code: TBMI26 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSBK07 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TNM079 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TSBK07 | |
:level: A | |
:vof: | |
- v | |
:points: '1' | |
- :code: TSBK03 | |
:level: A | |
:vof: | |
- o | |
:points: '3' | |
- :code: TSBB11 | |
:level: A | |
:vof: | |
- v | |
:points: '4' | |
- :code: TSBK03 | |
:level: A | |
:vof: | |
- o | |
:points: '3' | |
- :code: TSBB11 | |
:level: A | |
:vof: | |
- v | |
:points: '4' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- :code: TDDB84 | |
:level: A | |
:vof: | |
- o | |
:points: '4' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDTS06 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDC90 | |
:level: A | |
:vof: | |
- o | |
:points: '3' | |
- :code: TSIT02 | |
:level: G2 | |
:vof: | |
- o | |
:points: '2' | |
- :code: TDDD37 | |
:level: G2 | |
:vof: | |
- v | |
:points: '1' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '-' | |
- :code: TDDD17 | |
:level: A | |
:vof: | |
- o | |
:points: '4' | |
- :code: TDDD24 | |
:level: G2 | |
:vof: | |
- o | |
:points: '3' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '2' | |
- :code: TDDD17 | |
:level: A | |
:vof: | |
- o | |
:points: '4' | |
- :code: TDDD27 | |
:level: A | |
:vof: | |
- v | |
:points: '3' | |
- :code: TDDD38 | |
:level: A | |
:vof: | |
- v | |
:points: '-' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
#encoding: utf-8 | |
require "rubygems" | |
require "nokogiri" | |
require "yaml" | |
require "open-uri" | |
courses= YAML.load(File.read("./courses.yml")) | |
YEARS = (2007..2013).to_a.reverse | |
YEARS.each do |year| | |
puts "Year: #{year}" | |
courses = courses.map do |course| | |
puts "Course: #{course[:code]}" | |
uri = URI.parse("http://kdb-5.liu.se/liu/lith/studiehandboken/svkursplan.lasso?&k_budget_year=#{year}&k_kurskod=#{course[:code]}") | |
content = open(uri) { |f| f.read } | |
doc = Nokogiri::HTML(content) | |
text = doc.xpath("//td")[16].text | |
level_match = text.match(/Nivå \(G1,G2,A\):\s+(?<level>[G12A]+)/) | |
area_match = text.match(/Huvudomr.de: (?<area>[a-zA-Zåäö, ]+)/) | |
new_course = course.clone | |
unless new_course[:level] | |
if level_match | |
new_course[:level] = level_match["level"].strip | |
puts "#{course[:code]}: Level updated" | |
end | |
end | |
unless new_course[:areas] | |
if area_match | |
new_course[:areas] = | |
area_match["area"].strip.split(",").map { |area| area.strip } | |
puts "#{course[:code]}: Areas updated" | |
end | |
end | |
new_course | |
end | |
end | |
File.write("./new_courses.yml", YAML.dump(courses)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment