Skip to content

Instantly share code, notes, and snippets.

@benlangfeld
Last active December 21, 2021 17:54
Show Gist options
  • Save benlangfeld/ef5369acacb185772e6ff6c9f70c7558 to your computer and use it in GitHub Desktop.
Save benlangfeld/ef5369acacb185772e6ff6c9f70c7558 to your computer and use it in GitHub Desktop.

Graph colouring exercise

This is the Graph Colouring exercise from Computer Science Distilled.

This gist contains a simple starting point for implementations in Ruby which deals with parsing the input file and a simple structure for Graph data. It does not implement the algorithm, which is left as an exercise for you.

#!/usr/bin/env ruby
input_file_name = ARGV[0]
unless input_file_name
STDERR.puts "Must provide an input file name as an argument."
exit 1
end
STDERR.puts "Reading graphs from #{input_file_name}"
input_file = File.open(input_file_name)
num_graphs = input_file.readline.to_i
STDERR.puts "Input file contains #{num_graphs} graphs"
graphs = []
class Graph
def initialize(num_nodes, edges)
@num_nodes = num_nodes
@edges = edges
end
end
num_graphs.times do |i|
num_nodes, num_edges = input_file.readline.split(" ").map(&:to_i)
edges = []
num_edges.times do
edges << input_file.readline.split(" ").map(&:to_i)
end
graphs << Graph.new(num_nodes, edges)
if i < num_graphs - 1
# Move past graph separator line
input_file.readline
end
end
puts graphs.inspect
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1
12 11
1 2
3 1
4 1
5 1
6 1
7 1
8 2
9 2
10 2
11 2
12 2
100
13 16
8 6
1 2
7 3
13 9
1 11
1 6
11 3
2 4
8 9
13 4
3 8
3 10
5 8
13 2
10 13
4 5
16 33
9 5
6 4
15 11
13 7
11 9
5 12
14 8
1 6
5 2
7 9
3 12
6 10
3 7
3 8
6 5
1 10
4 14
9 13
4 8
13 6
11 5
16 15
4 5
13 11
2 14
2 16
4 2
14 12
1 2
11 16
12 1
15 13
10 12
8 7
1 5
2 5
4 2
8 3
3 4
2 7
1 6
12 29
5 4
9 3
6 4
8 5
7 2
10 3
4 2
5 12
11 6
10 8
10 6
9 11
6 5
11 5
8 2
9 1
10 4
11 3
4 3
1 6
1 8
6 2
12 11
11 4
2 3
3 5
1 7
9 7
3 8
15 16
3 15
2 6
13 3
11 14
12 8
12 1
8 13
9 15
8 10
13 5
12 11
9 11
11 8
7 8
13 14
14 3
11 14
10 9
6 10
6 5
9 8
2 6
1 11
10 4
6 1
8 3
1 9
4 9
4 7
1 4
2 5
10 0
17 3
13 2
14 5
11 5
9 5
7 4
1 3
4 2
6 4
2 7
6 13
5 6
5 2
2 3
2 4
6 2
5 3
4 6
6 3
4 5
4 1
1 3
1 5
1 2
17 13
14 15
17 6
17 1
9 14
4 13
4 14
15 6
11 9
3 6
8 1
5 10
5 14
3 17
8 22
7 3
7 2
1 5
4 6
5 4
8 5
6 2
4 7
3 1
3 5
4 2
5 6
6 3
1 7
5 2
3 8
6 1
8 6
8 1
8 2
2 3
4 3
6 0
14 7
11 8
7 14
2 7
10 12
5 7
1 4
9 1
8 4
1 5
5 7
4 8
3 8
8 7
3 4
4 1
1 2
7 3
3 6
3 1
7 5
3 1
1 3
17 24
8 1
9 14
17 12
10 15
14 17
16 3
16 4
1 16
14 11
5 9
15 12
7 12
4 15
6 14
4 3
8 4
6 4
1 7
6 16
8 12
8 16
13 14
13 17
3 11
17 1
5 6
7 7
7 2
6 7
2 6
3 2
7 1
6 1
1 3
8 11
4 8
8 1
7 8
7 1
2 6
3 4
4 1
6 1
3 5
7 3
1 5
13 13
5 8
2 7
11 3
12 9
5 6
5 12
7 3
8 9
5 2
9 10
3 4
13 10
6 2
6 2
6 5
5 3
6 0
11 1
6 8
16 28
3 8
7 14
6 12
2 13
4 8
5 11
8 1
5 10
12 13
9 3
7 11
4 5
6 1
14 15
3 11
16 13
14 16
3 7
11 8
7 10
1 12
2 12
9 6
9 11
2 8
5 13
10 14
14 11
12 15
9 10
2 12
6 3
7 5
12 8
8 4
4 1
8 2
11 9
12 1
2 9
11 4
6 7
10 6
1 10
16 21
14 11
2 10
10 9
10 16
5 9
10 4
14 16
3 7
9 11
12 6
3 2
9 1
1 2
11 7
6 11
3 4
8 10
10 12
2 5
6 1
7 2
3 2
3 1
1 2
8 20
3 8
1 4
7 2
6 2
6 1
1 7
1 3
4 7
5 1
4 2
4 5
7 5
4 6
6 5
2 1
5 8
2 5
3 5
8 7
3 4
14 14
10 11
9 10
7 13
6 1
12 7
3 14
11 4
8 13
4 1
8 10
2 5
14 6
9 11
2 12
4 5
4 1
1 2
3 2
4 2
3 4
2 0
4 5
1 2
2 3
3 1
2 4
1 4
12 15
12 4
6 2
5 9
11 1
1 10
1 5
10 2
7 11
12 9
5 11
4 6
9 6
6 5
6 10
3 7
17 11
11 6
3 17
9 4
13 15
15 14
11 9
4 3
2 1
12 3
6 5
17 11
14 32
9 8
5 9
3 14
11 4
9 11
4 6
2 10
9 3
2 8
6 11
5 4
3 7
3 6
8 1
7 10
4 14
1 2
11 14
6 8
9 14
14 6
9 7
12 9
13 12
14 2
4 2
7 12
4 13
10 6
8 7
1 10
2 7
15 38
4 9
1 14
3 11
2 4
4 15
6 12
4 7
12 2
3 4
15 3
2 8
8 10
11 2
1 15
15 2
15 11
6 8
9 14
3 6
4 14
7 6
8 1
10 11
5 4
6 2
13 8
8 9
15 8
13 15
2 9
11 7
13 11
10 3
13 7
14 8
5 6
12 15
3 7
4 4
2 3
3 4
1 4
4 2
11 35
7 11
10 5
1 3
6 4
5 8
10 1
3 5
7 2
4 11
9 7
9 8
5 9
8 7
5 6
4 10
8 11
3 7
9 2
6 10
11 10
8 6
11 2
7 6
1 6
5 4
9 1
4 7
2 10
5 2
1 8
1 5
10 3
6 9
7 10
3 8
9 26
7 9
3 1
8 4
8 5
1 4
8 6
5 2
9 1
3 7
1 7
3 5
9 5
2 4
6 5
5 7
1 6
8 7
1 8
8 2
2 1
5 4
1 5
2 6
4 7
9 2
4 3
9 15
7 9
1 3
8 4
6 2
1 5
7 4
2 4
1 2
9 6
2 5
7 8
3 9
4 6
2 9
9 5
6 9
2 1
6 2
6 3
2 4
5 6
5 4
5 1
1 4
3 1
15 4
8 5
7 15
13 3
2 11
15 32
1 14
15 14
12 11
7 9
3 13
14 11
14 5
7 3
14 13
4 14
13 5
14 10
13 6
1 4
12 1
10 6
8 14
1 6
12 15
11 13
7 2
4 10
1 10
1 2
7 14
9 5
12 7
12 13
4 6
11 10
7 4
2 12
13 17
2 9
2 7
11 13
8 10
7 11
13 3
3 10
10 5
9 1
7 13
8 12
5 6
5 12
11 12
7 8
2 13
1 10
14 20
13 1
7 11
14 8
6 4
10 12
1 4
3 1
2 5
4 13
4 11
4 12
2 8
7 5
10 3
1 11
2 11
3 2
6 11
9 12
14 6
6 9
1 5
2 3
2 4
4 6
5 2
1 2
6 2
6 5
3 4
10 31
5 3
10 7
2 9
6 5
4 1
6 9
5 8
4 5
6 10
3 9
2 3
1 7
8 4
6 2
3 8
10 1
10 5
3 10
9 7
1 8
9 4
10 2
8 6
9 10
8 9
2 4
3 1
7 8
8 10
7 5
6 4
10 13
1 9
9 4
4 6
9 3
8 1
5 9
8 7
7 9
5 6
3 4
1 7
4 8
1 3
11 24
1 11
2 4
1 6
10 7
10 9
3 11
3 1
10 8
4 11
4 7
8 6
10 3
8 11
10 6
5 3
5 8
11 7
11 5
11 9
6 7
2 1
4 5
6 9
5 7
9 11
2 6
5 7
6 8
2 8
7 6
8 5
4 9
5 6
7 9
4 2
5 4
9 21
9 7
1 7
4 8
6 5
4 7
3 8
1 8
8 9
3 1
5 2
1 9
4 5
6 2
4 6
1 4
2 9
1 6
9 6
4 2
3 5
3 4
2 0
15 35
15 7
13 2
15 12
7 11
4 3
1 6
13 9
7 8
12 14
14 5
8 11
7 1
1 10
11 13
3 9
14 8
7 6
4 9
7 10
10 4
1 4
8 12
5 3
1 9
1 14
1 13
3 8
8 2
3 13
7 3
8 1
15 13
6 5
1 2
2 6
11 20
1 8
6 3
9 1
9 6
5 7
8 3
6 1
10 1
8 10
9 11
10 4
1 7
2 4
2 5
11 10
11 2
10 9
11 7
3 10
10 5
3 0
6 9
4 2
1 5
5 3
1 2
3 6
6 5
1 6
2 6
5 2
14 17
9 8
9 14
1 4
6 3
7 9
9 6
14 2
3 10
5 13
14 10
14 6
1 5
11 12
2 13
10 5
6 8
12 10
2 0
7 14
1 3
6 5
3 4
4 1
6 2
5 4
3 5
6 7
4 6
7 5
7 1
1 5
2 3
7 3
8 2
8 4
5 4
16 36
14 3
3 16
14 12
2 6
11 1
16 7
3 11
10 1
14 15
9 5
12 16
11 15
2 11
6 14
2 9
4 3
8 15
15 5
13 15
12 6
11 12
11 4
16 5
2 3
1 5
7 13
2 8
6 8
12 10
12 5
3 7
4 8
13 1
12 15
2 7
12 7
4 0
12 12
8 5
2 1
2 9
10 2
7 9
9 11
10 11
1 7
10 1
9 8
1 8
8 3
12 28
11 10
9 5
10 4
4 11
12 3
11 1
9 1
2 5
6 10
5 3
10 2
8 5
7 12
9 6
1 7
8 4
10 8
10 9
5 12
7 3
11 7
7 8
3 11
11 9
6 12
7 6
2 8
11 5
8 14
3 5
4 1
6 1
8 7
4 7
8 4
5 2
2 1
1 5
5 7
6 5
2 3
5 8
2 6
9 3
7 6
1 4
8 5
7 16
3 7
7 5
6 3
2 4
7 4
5 3
2 6
4 6
3 2
3 4
7 1
1 3
2 7
5 1
2 1
6 1
12 27
7 1
11 7
3 4
3 7
6 1
2 7
9 5
5 6
8 12
6 4
6 8
2 11
11 8
6 11
3 6
12 5
8 5
12 2
9 7
12 4
6 7
7 4
1 3
10 6
1 9
10 3
11 3
8 13
3 1
8 6
7 5
3 7
2 5
8 2
3 2
8 5
6 5
1 5
2 7
1 6
7 6
12 4
1 4
7 2
11 5
9 6
12 17
6 7
3 12
12 6
11 1
12 10
9 10
12 5
10 11
8 1
3 8
3 1
2 7
3 9
6 4
3 11
9 8
11 12
16 20
8 2
7 11
9 7
10 4
6 5
11 5
14 8
2 16
9 6
12 8
7 16
15 10
11 3
14 6
12 2
9 15
12 14
2 9
14 16
10 7
7 3
2 7
5 1
2 6
14 21
3 10
9 12
2 11
3 12
12 11
1 5
1 10
3 9
11 9
10 5
11 14
1 4
14 6
10 8
5 13
7 2
3 2
4 5
2 13
1 6
9 2
13 7
13 2
11 9
11 3
5 9
7 2
6 2
3 12
11 24
7 3
10 9
10 5
6 11
10 7
9 8
6 8
4 3
9 1
7 4
4 2
2 3
11 2
3 1
7 6
10 1
9 6
1 7
3 8
2 9
4 6
8 11
2 5
11 4
15 17
1 8
2 14
2 5
12 4
1 3
4 3
3 8
3 13
12 10
6 2
7 15
4 8
7 8
13 2
9 10
15 13
10 2
2 0
8 5
1 3
8 3
6 5
5 2
1 6
10 12
1 6
4 5
2 4
6 2
7 8
10 4
4 7
8 6
5 8
6 9
3 2
4 8
12 28
10 4
11 2
8 3
5 7
8 4
5 10
8 2
6 1
6 7
9 11
5 2
8 12
1 7
1 11
5 8
4 5
3 12
5 12
12 2
9 6
8 11
10 1
9 4
1 8
9 7
7 2
10 8
11 12
10 29
3 1
8 5
4 10
6 5
3 10
10 1
10 6
2 10
8 9
7 6
3 5
5 10
8 7
6 3
8 6
1 8
9 6
9 10
9 7
8 4
4 7
8 2
3 4
5 1
6 2
4 2
2 3
8 10
1 6
13 6
13 12
8 7
7 10
5 7
8 2
9 2
10 21
6 5
2 7
10 9
9 5
2 8
5 1
5 8
1 7
2 4
2 10
6 4
8 6
2 1
10 1
7 10
6 1
4 1
4 3
4 5
9 8
2 5
7 13
2 4
3 7
7 5
5 3
5 6
7 1
2 5
1 3
4 6
6 7
6 2
7 2
4 3
7 15
6 4
2 6
6 3
5 6
1 5
4 5
3 5
6 7
7 5
1 2
2 3
2 7
4 2
4 1
7 3
4 3
4 3
1 3
4 1
7 13
3 6
1 3
4 2
2 7
5 6
2 6
3 4
7 1
2 1
2 5
1 5
5 4
6 7
2 0
13 33
6 7
6 11
1 4
4 3
12 6
5 2
12 9
13 8
7 11
4 6
8 6
7 1
11 3
3 5
9 13
11 2
6 10
10 8
9 2
10 7
9 4
11 1
5 7
6 1
13 10
3 12
2 4
2 12
13 2
8 5
3 1
3 10
2 3
10 18
10 2
2 5
6 8
6 7
8 10
1 10
7 1
9 3
6 3
8 4
5 6
6 2
5 3
1 5
5 7
8 7
4 2
5 9
17 0
10 7
9 7
1 8
3 6
1 9
2 8
10 6
2 6
13 13
7 5
12 7
4 9
11 9
11 7
1 3
5 1
11 2
1 10
2 4
3 10
9 7
2 7
6 0
11 4
2 3
10 11
7 1
4 10
8 11
6 5
3 4
6 1
5 8
6 3
7 5
7 2
1 7
5 2
2 3
1 8
15 18
11 13
13 10
6 1
6 11
3 11
3 10
2 12
5 13
10 2
11 8
5 11
9 13
13 8
6 13
15 5
9 7
4 15
3 4
10
3 4 5 6 7 8 9 10 11 12
8
2 5 6 7 9 10 11 12
6
3 5 10 13 14 16
5
4 5 6 7 8
4
6 8 9 12
8
4 5 6 7 10 12 14 15
5
5 7 8 10 11
10
1 2 3 4 5 6 7 8 9 10
15
1 3 4 6 7 8 9 10 11 12 13 14 15 16 17
6
3 5 6 7 8 9
2
3 4
10
2 7 8 10 11 12 13 15 16 17
2
7 8
6
1 2 3 4 5 6
10
2 3 4 5 6 9 11 12 13 14
6
1 2 3 4 6 7
5
2 4 6 7 8
2
2 3
8
2 6 7 8 9 11 15 17
16
1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17
4
3 4 5 7
4
4 5 6 7
8
1 4 6 7 8 11 12 13
5
1 2 3 4 6
6
1 2 3 4 5 6
10
1 2 3 4 5 7 8 9 10 11
7
5 7 8 9 12 15 16
5
4 5 6 9 12
9
1 4 5 8 11 12 13 15 16
2
2 3
3
3 6 7
7
3 4 5 6 10 12 13
2
1 3
2
1 2
2
3 4
6
3 4 8 9 10 11
11
2 6 7 8 9 10 12 13 14 16 17
6
3 5 8 10 11 13
6
1 5 9 10 12 13
2
1 3
3
3 9 11
3
4 6 9
4
3 5 6 8
3
2 3 5
11
1 4 6 8 9 10 11 12 13 14 15
7
2 3 6 8 9 11 15
7
1 2 3 4 6 8 11
6
6 7 8 9 10 13
3
1 3 6
3
3 6 7
5
2 6 8 9 10
5
2 3 7 8 9
5
1 3 4 7 8
3
6 7 8
2
1 2
6
6 9 10 11 14 15
5
4 5 6 8 11
3
1 2 3
3
1 3 4
7
3 4 7 8 12 13 14
2
1 2
3
2 4 7
7
1 2 3 5 6 7 8
7
8 9 10 11 13 14 16
4
1 2 3 4
8
2 3 4 5 6 7 11 12
5
1 2 3 4 6
3
3 6 8
6
2 3 4 7 8 9
2
6 7
5
2 4 8 9 10
4
1 4 7 8
8
3 4 7 8 9 10 11 12
5
4 5 7 9 11
9
1 2 3 4 5 7 13 14 15
5
3 4 5 6 7
7
3 4 6 7 8 11 13
10
1 4 5 6 7 8 10 11 12 13
4
5 7 9 11
9
1 5 6 7 9 11 12 13 14
2
1 2
5
2 4 6 7 8
6
1 3 5 7 9 10
4
3 7 10 11
3
4 5 9
10
1 3 4 5 6 8 9 10 11 13
4
3 6 7 9
3
1 4 5
2
4 7
2
2 4
3
3 5 7
2
1 2
5
4 5 11 12 13
4
4 7 9 10
17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
7
1 2 3 4 5 7 10
8
4 5 6 8 10 11 12 13
6
1 2 3 4 5 6
8
3 4 5 6 7 8 9 11
4
4 6 7 8
8
4 5 6 8 9 10 12 14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment