aoc_utils 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aoc_utils.rb +68 -0
  3. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 699482c661c9f9b36751d2845367f16ad8bf32d8242b39fa3e1cdf233c011506
4
- data.tar.gz: 28a8194e399810a0a6043b68e561db7eea8234e47a20ddb50936c4913dd500cd
3
+ metadata.gz: 56df3b1a821167f6333889fe6e630c4c6dbc7eaeb07087c58a4d085d30f6e9d2
4
+ data.tar.gz: 833039ef582e37e2da240f602a55162afc42b341cf3dfb1ba079166dbd2fb677
5
5
  SHA512:
6
- metadata.gz: d3cf6eb8a727fd7d21758ceb9b84b59209b6168babd48cfbf30473e92fce18223e86a6d8e22a89aad89980d20dee238de095aa80d6bc48f7f8ad4c5692a382eb
7
- data.tar.gz: a2906896bedf70b519723de0b6874a67e1db159bcc1a0a7f980150100217242f61e01fb50175e6b1c8949133a712ba5b0c6754315c3dd4ead5a318b38e7fd19b
6
+ metadata.gz: 5fce022c24980b65d710a1c1be66b93074b281b463899b24e8ade14b41e1386dca91c3508f1f31dcb0d8e173cff235c9c243e211f76ff8eeeec7ceedec1fafd9
7
+ data.tar.gz: 7a5ee3f1297e1d4498b9e53c439f57d4f94bcc63c21bbc71882dc813a155b597ebbaf91f4f3b29bca198613c0653720677af1ffe821312ab4cbf55045a5cd29c
data/lib/aoc_utils.rb ADDED
@@ -0,0 +1,68 @@
1
+ # Desc: Utility functions for Advent of Code problems
2
+ module AocUtils
3
+ # extracts all integers from the specified file
4
+ # @param filename [String] the name of the file to read from
5
+ # @param other_characters [Array<String>] will save the first non integer character in the line for further usage
6
+ # @return [Array<Array<Integer>>] an array of all the lines read from the file, with each line being an array of the integers read from that line
7
+ def read_ints(filename, other_characters = [])
8
+ ints = []
9
+ File.open(filename).each_line do |line|
10
+ ints << line.scan(/-?\d+/).map(&:to_i)
11
+ other_characters << line[/[^0-9\s]/]
12
+ end
13
+ ints
14
+ end
15
+
16
+ # extracts all strings from the specified file
17
+ # @param filename [String] the name of the file to read from
18
+ # @return [Array<String>] an array of all the lines read from the file as strings with no leading or trailing whitespace
19
+ def read_strings(filename)
20
+ strings = []
21
+ File.open(filename).each_line do |line|
22
+ strings << line.strip
23
+ end
24
+ strings
25
+ end
26
+
27
+ # extracts all characters from the specified file
28
+ # @param filename [String] the name of the file to read from
29
+ # @return [Array<Array<String>>] an array of all the lines read from the file, with each line being an array of the characters read from that line with no leading or trailing whitespace
30
+ def read_chars(filename)
31
+ chars = []
32
+ File.open(filename).each_line do |line|
33
+ chars << line.strip.chars
34
+ end
35
+ chars
36
+ end
37
+
38
+ # extracts all lines from the specified file and splits them into two parts based on an empty line
39
+ # @param filename [String] the name of the file to read from
40
+ # @param datatype1 [String] the datatype of the first part of the file, either "Integer", "String", or "Char"
41
+ # @param datatype2 [String] the datatype of the second part of the file, either "Integer", "String", or "Char"
42
+ # @return [Array<Array>] an array containing two arrays, the first being the first part of the file and the second being the second part of the file
43
+ def read_two_parts(filename, datatype1, datatype2)
44
+ lines = File.open(filename).readlines.map(&:strip)
45
+ index = lines.index("")
46
+ part1 = lines[0...index]
47
+ part2 = lines[(index + 1)..-1]
48
+ case datatype1
49
+ when "Integer"
50
+ part1 = part1.map { |line| line.scan(/-?\d+/).map(&:to_i) }
51
+ when "String"
52
+ part1 = part1.map(&:strip)
53
+ when "Char"
54
+ part1 = part1.map(&:strip.chars)
55
+ else
56
+ raise "Invalid datatype"
57
+ end
58
+ case datatype2
59
+ when "Integer"
60
+ part2 = part2.map { |line| line.scan(/-?\d+/).map(&:to_i) }
61
+ when "String"
62
+ part2 = part2.map(&:strip)
63
+ when "Char"
64
+ part2 = part2.map(&:chars)
65
+ end
66
+ [part1, part2]
67
+ end
68
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aoc_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lennard Clicqué
@@ -15,7 +15,8 @@ email: l.clicque@gmail.com
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
- files: []
18
+ files:
19
+ - lib/aoc_utils.rb
19
20
  homepage: https://rubygems.org/gems/aoc_utils
20
21
  licenses: []
21
22
  metadata: {}
@@ -27,7 +28,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
27
28
  requirements:
28
29
  - - ">="
29
30
  - !ruby/object:Gem::Version
30
- version: '0'
31
+ version: 2.7.0
31
32
  required_rubygems_version: !ruby/object:Gem::Requirement
32
33
  requirements:
33
34
  - - ">="