-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.rb
109 lines (91 loc) · 2.63 KB
/
script.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/env ruby
# encoding: utf-8
#wmoimsercutylkoRuby (͡°͜ʖ͡°)
class Task <
Struct.new(:index, :time, :progress, :arrival, :deadline, :aet, :finished)
#aet - actual end time
def print_task
puts "I=#{index}\t | T=#{time}\t | P=#{progress}\t | A=#{arrival}\t | D=#{deadline}\t | AET=#{aet}\t | F=#{finished}"
end
def print_task_and_progress
puts "Zad.#{index}\t | #{progress}/#{time}\t |"
end
end
def sum_time(tasklist)
len = tasklist.length
time = 0
for i in (0...len) do
time += tasklist[i].time
end
return time
end
def markAndDeleteFinished(tasklist)
len = tasklist.length
for i in (0...len) do
if (tasklist[i].progress==tasklist[i].time)
tasklist[i].finished=true
end
end
tasklist.delete_if { |task| task.finished==true }
end
def earliestDeadline(tasklist)
earliestDeadlineIndex = 0
for i in (0...tasklist.length) do
if (tasklist[i].deadline <= tasklist[earliestDeadlineIndex].deadline)
if tasklist[i].finished==false
earliestDeadlineIndex = i
end
end
end
return earliestDeadlineIndex
end
#MAIN
tasks = Array.new
arrived = Array.new
# puts "Podaj liczbę zadań:"
# n = gets.chomp.to_i
# for i in (0...n) do
# z = Node.new
# p "#{i}. indeks: "
# z.index = gets.chomp
# p "#{i}. długość: "
# z.time = gets.chomp.to_i
# p "#{i}. czas przybycia: "
# z.progress = 0
# z.arrival = gets.chomp.to_i
# p "#{i}. deadline: "
# z.deadline = gets.chomp.to_i
# z.aet = 0
# z.finished = false
# tasks.push(z)
# end
#(:index, :time, :progress, :arrival, :deadline, :aet, :finished)
# tasks.push(Task.new(1, 2, 0, 0, 2, 0, false))
# tasks.push(Task.new(2, 2, 0, 0, 3, 0, false))
# tasks.push(Task.new(3, 3, 0, 1, 1, 0, false))
# tasks.push(Task.new(4, 1, 0, 2, 4, 0, false))
# tasks.push(Task.new(5, 2, 0, 3, 5, 0, false))
# tasks.push(Task.new(6, 2, 0, 3, 5, 0, false))
#Another set of tasks
tasks.push(Task.new(1, 1, 0, 0, 2, 0, false))
tasks.push(Task.new(2, 2, 0, 0, 5, 0, false))
tasks.push(Task.new(3, 2, 0, 2, 4, 0, false))
tasks.push(Task.new(4, 2, 0, 3, 10, 0, false))
tasks.push(Task.new(5, 2, 0, 6, 9, 0, false))
totaltime = sum_time(tasks)
len = tasks.length
earliest_deadline_index = 0
# i = jednostka czasu, w ktorej jestesmy
for i in (0...totaltime) do
# przebiegam cala petle w celu sprawdzenia które zadania właśnie doszły do systemu
for j in (0...len) do
# jeżeli arrival = currentTime to spushuj to zadanie do tablicy arrived
if (tasks[j].arrival == i)
arrived.push(tasks[j])
end
end
earliest_deadline_index = earliestDeadline(arrived)
arrived[earliest_deadline_index].progress+=1
arrived[earliest_deadline_index].print_task_and_progress
markAndDeleteFinished(arrived)
end