refactor to use listcomp, also do oneliner, also do ruby

This commit is contained in:
a 2020-12-06 14:08:50 -06:00
parent cc3975bdcd
commit 3d7a36ec6f
3 changed files with 46 additions and 0 deletions

17
06/06.rb Normal file
View file

@ -0,0 +1,17 @@
require 'set'
groups = File.read("input.txt").split("\n\n")
puts groups
.map{|g| g.gsub("\n","")}
.map{|g| g.chars}
.map{|a| a.to_set}
.map{|s| s.size}
.reduce(0, :+)
puts groups
.map{|g| g.split("\n")}
.map{|g| g.map{|a| a.chars}}
.map{|a| a.map{|a| a.to_set}}
.map{|s| s.reduce(:&)}
.map{|s| s.size}
.reduce(0, :+)

8
06/06_minimal.py Normal file
View file

@ -0,0 +1,8 @@
with open("input.txt","r") as f:
groups = f.read().split('\n\n')
print(
(
sum(map(len, [set(list(group.replace('\n',''))) for group in groups])),
sum(map(len,[set.intersection(*map(set, map(list,group.split('\n')))) for group in groups]))
)
)

21
06/06_refactored.py Normal file
View file

@ -0,0 +1,21 @@
def read_file():
with open("input.txt","r") as f:
return f.read().split('\n\n')
def part1(groups):
"""Anyone"""
groupsets = [set(list(group.replace('\n',''))) for group in groups]
return sum(map(len, groupsets))
def part2(groups):
"""Everyone"""
allset = [set.intersection(*map(set, map(list,group.split('\n')))) for group in groups]
return sum(map(len,allset))
def main():
groups = read_file()
print(f'{part1(groups)=}')
print(f'{part2(groups)=}')
if __name__ == "__main__":
main()