-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday3b.rb
53 lines (42 loc) · 1.39 KB
/
day3b.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
# Advent of Code Day3a
# Workarounds: Zeilenumbrüche im Input entfernen.
# Aufgabenstellung:
# RegEx mul(123,9)
# Nach Zahlentupel parsen, einzelne Tupel multiplizieren
# mehrere Tupel aufmultiplizieren
# Aufgabenstellung b:
# trenne an do() und don't() auf, betrachte nur die do()
# Nach Sichtung der Beispielaufgabe: Nimm an, dass sich ein do() vor dem String befunden hätte
sum=0
ARGF.each_with_index do | line |
line= "do()" + line
# splitte aktuelles do/dont plus beliebig viele Zeichen bis exklusive do/dont/Zeilenende
do_and_not=line.scan( /(do\(\)|don't\(\))(.*?)(?=do\(\)|don't\(\)|$)/)
puts do_and_not.inspect
do_and_not.each { | drn|
puts drn.inspect
if drn[0] == "do()"
puts "muss bearbeiteit werden #{drn}"
#https://zzamboni.org/post/capturing-multiple-matches-in-ruby/
res=drn[1].scan( /mul\(\d{1,3},\d{1,3}\)/ )
puts res.inspect
res.each { |str|
numberkommastrings=str.scan( /\d+,\d+/ ) #.split( /,/ )
puts numberkommastrings.inspect
numberkommastrings.each { |numstr|
l,r = numstr.split(',')
puts "l=#{l}, r=#{r}"
l=l.to_i
r=r.to_i
STDERR.puts "(#{l},#{r})"
zwischenergebnis = l*r
sum+=zwischenergebnis
puts "nuberkommastring #{numberkommastrings} #{l} #{r} #{zwischenergebnis} #{sum}"
}
}
end
}
end
puts sum
# 58488142
#not the right anwswer, to high