data = <<~TEXT
outlook temperature humidity windy play
sunny hot high FALSE no
sunny hot high TRUE no
overcast hot high FALSE yes
rainy mild high FALSE yes
rainy cool normal FALSE yes
rainy cool normal TRUE no
overcast cool normal TRUE yes
sunny mild high FALSE no
sunny cool normal FALSE yes
rainy mild normal FALSE yes
sunny mild normal TRUE yes
overcast mild high TRUE yes
overcast hot normal FALSE yes
rainy mild high TRUE no
TEXT
lines = data.lines.map(&:chomp)
headers = lines.first.split("\t")
counts = Hash.new { |h, k| h[k] = Hash.new(0) }
lines[1..-1].each do |line|
values = line.split("\t")
headers.each_with_index do |header, i|
counts[header][values[i]] += 1
end
end
counts.each do |header, values|
puts "#{header} counts:"
values.each do |val, count|
puts " #{val}: #{count}"
end
end
ZGF0YSA9IDw8flRFWFQKICBvdXRsb29rCXRlbXBlcmF0dXJlCWh1bWlkaXR5CXdpbmR5CXBsYXkKICBzdW5ueQlob3QJaGlnaAlGQUxTRQlubwogIHN1bm55CWhvdAloaWdoCVRSVUUJbm8KICBvdmVyY2FzdAlob3QJaGlnaAlGQUxTRQl5ZXMKICByYWlueQltaWxkCWhpZ2gJRkFMU0UJeWVzCiAgcmFpbnkJY29vbAlub3JtYWwJRkFMU0UJeWVzCiAgcmFpbnkJY29vbAlub3JtYWwJVFJVRQlubwogIG92ZXJjYXN0CWNvb2wJbm9ybWFsCVRSVUUJeWVzCiAgc3VubnkJbWlsZAloaWdoCUZBTFNFCW5vCiAgc3VubnkJY29vbAlub3JtYWwJRkFMU0UJeWVzCiAgcmFpbnkJbWlsZAlub3JtYWwJRkFMU0UJeWVzCiAgc3VubnkJbWlsZAlub3JtYWwJVFJVRQl5ZXMKICBvdmVyY2FzdAltaWxkCWhpZ2gJVFJVRQl5ZXMKICBvdmVyY2FzdAlob3QJbm9ybWFsCUZBTFNFCXllcwogIHJhaW55CW1pbGQJaGlnaAlUUlVFCW5vClRFWFQKCmxpbmVzID0gZGF0YS5saW5lcy5tYXAoJjpjaG9tcCkKaGVhZGVycyA9IGxpbmVzLmZpcnN0LnNwbGl0KCJcdCIpCmNvdW50cyA9IEhhc2gubmV3IHsgfGgsIGt8IGhba10gPSBIYXNoLm5ldygwKSB9CgpsaW5lc1sxLi4tMV0uZWFjaCBkbyB8bGluZXwKICB2YWx1ZXMgPSBsaW5lLnNwbGl0KCJcdCIpCiAgaGVhZGVycy5lYWNoX3dpdGhfaW5kZXggZG8gfGhlYWRlciwgaXwKICAgIGNvdW50c1toZWFkZXJdW3ZhbHVlc1tpXV0gKz0gMQogIGVuZAplbmQKCmNvdW50cy5lYWNoIGRvIHxoZWFkZXIsIHZhbHVlc3wKICBwdXRzICIje2hlYWRlcn0gY291bnRzOiIKICB2YWx1ZXMuZWFjaCBkbyB8dmFsLCBjb3VudHwKICAgIHB1dHMgIiAgI3t2YWx9OiAje2NvdW50fSIKICBlbmQKZW5kCg==