In weather.dat you’ll find daily weather data for Morristown, NJ for June 2002. Download this text file, then write a program to output the day number (column one) with the smallest temperature spread (the maximum temperature is the second column, the minimum the third column).
Last active
January 13, 2017 13:36
-
-
Save sobstel/9a315bb4d8cf7a589e24768f940fd85a to your computer and use it in GitHub Desktop.
Kata04: Data Munging - Part One: Weather Data http://codekata.com/kata/kata04-data-munging/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Dy MxT MnT AvT HDDay AvDP 1HrP TPcpn WxType PDir AvSp Dir MxS SkyC MxR MnR AvSLP | |
1 88 59 74 53.8 0.00 F 280 9.6 270 17 1.6 93 23 1004.5 | |
2 79 63 71 46.5 0.00 330 8.7 340 23 3.3 70 28 1004.5 | |
3 77 55 66 39.6 0.00 350 5.0 350 9 2.8 59 24 1016.8 | |
4 77 59 68 51.1 0.00 110 9.1 130 12 8.6 62 40 1021.1 | |
5 90 66 78 68.3 0.00 TFH 220 8.3 260 12 6.9 84 55 1014.4 | |
6 81 61 71 63.7 0.00 RFH 030 6.2 030 13 9.7 93 60 1012.7 | |
7 73 57 65 53.0 0.00 RF 050 9.5 050 17 5.3 90 48 1021.8 | |
8 75 54 65 50.0 0.00 FH 160 4.2 150 10 2.6 93 41 1026.3 | |
9 86 32* 59 6 61.5 0.00 240 7.6 220 12 6.0 78 46 1018.6 | |
10 84 64 74 57.5 0.00 F 210 6.6 050 9 3.4 84 40 1019.0 | |
11 91 59 75 66.3 0.00 H 250 7.1 230 12 2.5 93 45 1012.6 | |
12 88 73 81 68.7 0.00 RTH 250 8.1 270 21 7.9 94 51 1007.0 | |
13 70 59 65 55.0 0.00 H 150 3.0 150 8 10.0 83 59 1012.6 | |
14 61 59 60 5 55.9 0.00 RF 060 6.7 080 9 10.0 93 87 1008.6 | |
15 64 55 60 5 54.9 0.00 F 040 4.3 200 7 9.6 96 70 1006.1 | |
16 79 59 69 56.7 0.00 F 250 7.6 240 21 7.8 87 44 1007.0 | |
17 81 57 69 51.7 0.00 T 260 9.1 270 29* 5.2 90 34 1012.5 | |
18 82 52 67 52.6 0.00 230 4.0 190 12 5.0 93 34 1021.3 | |
19 81 61 71 58.9 0.00 H 250 5.2 230 12 5.3 87 44 1028.5 | |
20 84 57 71 58.9 0.00 FH 150 6.3 160 13 3.6 90 43 1032.5 | |
21 86 59 73 57.7 0.00 F 240 6.1 250 12 1.0 87 35 1030.7 | |
22 90 64 77 61.1 0.00 H 250 6.4 230 9 0.2 78 38 1026.4 | |
23 90 68 79 63.1 0.00 H 240 8.3 230 12 0.2 68 42 1021.3 | |
24 90 77 84 67.5 0.00 H 350 8.5 010 14 6.9 74 48 1018.2 | |
25 90 72 81 61.3 0.00 190 4.9 230 9 5.6 81 29 1019.6 | |
26 97* 64 81 70.4 0.00 H 050 5.1 200 12 4.0 107 45 1014.9 | |
27 91 72 82 69.7 0.00 RTH 250 12.1 230 17 7.1 90 47 1009.0 | |
28 84 68 76 65.6 0.00 RTFH 280 7.6 340 16 7.0 100 51 1011.0 | |
29 88 66 77 59.7 0.00 040 5.4 020 9 5.3 84 33 1020.6 | |
30 90 45 68 63.6 0.00 H 240 6.0 220 17 4.8 200 41 1022.7 | |
mo 82.9 60.5 71.7 16 58.8 0.00 6.9 5.3 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Weather reader | |
class Weather | |
WeatherRecord = Struct.new :day, :max, :min do | |
def spread | |
max - min | |
end | |
end | |
def initialize(file) | |
@weather_records = File.readlines(file).collect do |line| | |
_, day, max_temp, min_temp = line.split(/\s+/) | |
next if day.to_i.zero? | |
WeatherRecord.new day.to_i, max_temp.to_i, min_temp.to_i | |
end.reject(&:nil?) | |
end | |
# Find the day number with the smallest temperature spread | |
def day_with_smallest_temp_spread | |
@weather_records.min_by(&:spread).day | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_relative 'weather' | |
require 'test/unit' | |
# general task test | |
class WeatherTest < Test::Unit::TestCase | |
def test_day_with_smallest_temp_spread | |
weather = Weather.new 'weather.dat' | |
assert_equal(14, weather.day_with_smallest_temp_spread) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment