Module:USHRseats

Implements {{USHRseats}}


-- Returns the number of seats in the US House of Representatives held by a given state in a given year (If no year is given, the current number of seats is returned)
local p = {}

function p.main(frame)
	state = frame.args[1]
	if mw.ustring.len(state)>2 then
		state = frame:expandTemplate{ title = 'ISO 3166 code', args = {"US", state} }
		state = state:sub(4)
	end

	year = tonumber(frame.args[2])
	if year then
		census_number = (year - 1 - math.fmod(year,10))/10 - 177
	end
		
	states = {
	AK = {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',  1,  1,  1,  1,  1,  1,  1},
	AL = {'-','-','-','-',  3,  5,  7,  7,  6,  8,  8,  9,  9, 10,  9,  9,  9,  8,  7,  7,  7,  7,  7,  7},
	AR = {'-','-','-','-','-','-',  1,  2,  3,  4,  5,  6,  7,  7,  7,  7,  6,  4,  4,  4,  4,  4,  4,  4},
	AZ = {'-','-','-','-','-','-','-','-','-','-','-','-','-',  1,  1,  2,  2,  3,  4,  5,  6,  8,  9,  9},
	CA = {'-','-','-','-','-','-','-',  2,  3,  4,  6,  7,  8, 11, 20, 23, 30, 38, 43, 45, 52, 53, 53, 52},
	CO = {'-','-','-','-','-','-','-','-','-','-',  1,  2,  3,  4,  4,  4,  4,  4,  5,  6,  6,  7,  7,  8},
	CT = {  5,  7,  7,  7,  6,  6,  4,  4,  4,  4,  4,  4,  5,  5,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5},
	DE = {  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
	FL = {'-','-','-','-','-','-','-',  1,  1,  2,  2,  2,  3,  4,  5,  6,  8, 12, 15, 19, 23, 25, 27, 28},
	GA = {  3,  2,  4,  6,  7,  9,  8,  8,  7,  9, 10, 11, 11, 12, 10, 10, 10, 10, 10, 10, 11, 13, 14, 14},
	HI = {'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',  2,  2,  2,  2,  2,  2,  2},
	IA = {'-','-','-','-','-','-','-',  2,  6,  9, 11, 11, 11, 11,  9,  8,  8,  7,  6,  6,  5,  5,  4,  4},
	ID = {'-','-','-','-','-','-','-','-','-','-','-',  1,  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2},
	IL = {'-','-','-','-',  1,  3,  7,  9, 14, 19, 20, 22, 25, 27, 27, 26, 25, 24, 24, 22, 20, 19, 18, 17},
	IN = {'-','-','-','-',  3,  7, 10, 11, 11, 13, 13, 13, 13, 13, 12, 11, 11, 11, 11, 10, 10,  9,  9,  9},
	KS = {'-','-','-','-','-','-','-','-',  1,  3,  7,  8,  8,  8,  7,  6,  6,  5,  5,  5,  4,  4,  4,  4},
	KY = {'-','2',  6, 10, 12, 13, 10, 10,  9, 10, 11, 11, 11, 11,  9,  9,  8,  7,  7,  7,  6,  6,  6,  6},
	LA = {'-','-','-',  1,  3,  3,  4,  4,  5,  6,  6,  6,  7,  8,  8,  8,  8,  8,  8,  8,  7,  7,  6,  6},
	MA = {  8, 14, 17, 20, 13, 12, 10, 11, 10, 11, 12, 13, 14, 16, 15, 14, 14, 12, 12, 11, 10, 10,  9,  9},
	MD = {  6,  8,  9,  9,  9,  8,  6,  6,  5,  6,  6,  6,  6,  6,  6,  6,  7,  8,  8,  8,  8,  8,  8,  8},
	ME = {'-','-','-','-',  7,  8,  7,  6,  5,  5,  4,  4,  4,  4,  3,  3,  3,  2,  2,  2,  2,  2,  2,  2},
	MI = {'-','-','-','-','-','-',  3,  4,  6,  9, 11, 12, 12, 13, 17, 17, 18, 19, 19, 18, 16, 15, 14, 13},
	MN = {'-','-','-','-','-','-','-','-',  2,  3,  5,  7,  9, 10,  9,  9,  9,  8,  8,  8,  8,  8,  8,  8},
	MO = {'-','-','-','-',  1,  2,  5,  7,  9, 13, 14, 15, 16, 16, 13, 13, 11, 10, 10,  9,  9,  9,  8,  8},
	MS = {'-','-','-','-',  1,  2,  4,  5,  5,  6,  7,  7,  8,  8,  7,  7,  6,  5,  5,  5,  5,  4,  4,  4},
	MT = {'-','-','-','-','-','-','-','-','-','-','-',  1,  1,  2,  2,  2,  2,  2,  2,  2,  1,  1,  1,  2},
	NC = {  5, 10, 12, 13, 13, 13,  9,  8,  7,  8,  9,  9, 10, 10, 11, 12, 12, 11, 11, 11, 12, 13, 13, 14},
	ND = {'-','-','-','-','-','-','-','-','-','-','-',  1,  2,  3,  2,  2,  2,  2,  1,  1,  1,  1,  1,  1},
	NE = {'-','-','-','-','-','-','-','-','-',  1,  3,  6,  6,  6,  5,  4,  4,  3,  3,  3,  3,  3,  3,  3},
	NH = {  3,  4,  5,  6,  6,  5,  4,  3,  3,  3,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2},
	NJ = {  4,  5,  6,  6,  6,  6,  5,  5,  5,  7,  7,  8, 10, 12, 14, 14, 14, 15, 15, 14, 13, 13, 12, 12},
	NM = {'-','-','-','-','-','-','-','-','-','-','-','-','-',  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,  3},
	NV = {'-','-','-','-','-','-','-','-','-',  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  3,  4,  4},
	NY = {  6, 10, 17, 27, 34, 40, 34, 33, 31, 33, 34, 34, 37, 43, 45, 45, 43, 41, 39, 34, 31, 29, 27, 26},
	OH = {'-','-',  1,  6, 14, 19, 21, 21, 19, 20, 21, 21, 21, 22, 24, 23, 23, 24, 23, 21, 19, 18, 16, 15},
	OK = {'-','-','-','-','-','-','-','-','-','-','-','-','-',  8,  9,  8,  6,  6,  6,  6,  6,  5,  5,  5},
	OR = {'-','-','-','-','-','-','-','-',  1,  1,  1,  2,  2,  3,  3,  4,  4,  4,  4,  5,  5,  5,  5,  6},
	PA = {  8, 13, 18, 23, 26, 28, 24, 25, 24, 27, 28, 30, 32, 36, 34, 33, 30, 27, 25, 23, 21, 19, 18, 17},
	RI = {  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2},
	SC = {  5,  6,  8,  9,  9,  9,  7,  6,  4,  5,  7,  7,  7,  7,  6,  6,  6,  6,  6,  6,  6,  6,  7,  7},
	SD = {'-','-','-','-','-','-','-','-','-','-','-',  2,  2,  3,  2,  2,  2,  2,  2,  1,  1,  1,  1,  1},
	TN = {'-','-',  3,  6,  9, 13, 11, 10,  8, 10, 10, 10, 10, 10,  9, 10,  9,  9,  8,  9,  9,  9,  9,  9},
	TX = {'-','-','-','-','-','-','-',  2,  4,  6, 11, 13, 16, 18, 21, 21, 22, 23, 24, 27, 30, 32, 36, 38},
	UT = {'-','-','-','-','-','-','-','-','-','-','-','-',  1,  2,  2,  2,  2,  2,  2,  3,  3,  3,  4,  4},
	VA = { 10, 19, 22, 23, 22, 21, 15, 13, 11,  9, 10, 10, 10, 10,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11},
	VT = {'-',  2,  4,  6,  5,  5,  4,  3,  3,  3,  2,  2,  2,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
	WA = {'-','-','-','-','-','-','-','-','-','-','-',  2,  3,  5,  6,  6,  7,  7,  7,  8,  9,  9, 10, 10},
	WI = {'-','-','-','-','-','-','-',  3,  6,  8,  9, 10, 11, 11, 10, 10, 10, 10,  9,  9,  9,  8,  8,  8},
	WV = {'-','-','-','-','-','-','-','-','-',  3,  4,  4,  5,  6,  6,  6,  6,  5,  4,  4,  3,  3,  3,  2},
	WY = {'-','-','-','-','-','-','-','-','-','-','-',  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1}}

	if state=='DC' then
			seats = 0
	elseif not states[state] then
		seats = frame:expandTemplate{ title = 'error', args = {'Error: state not recognized'} }
	else
		if census_number then
			seats = states[state][census_number]
			if seats=='-' or not seats then
				seats = frame:expandTemplate{ title = 'error', args = {"Error: given year is prior to the first census of this state"} }
			end
		else
			seats = states[state][#states[state]]
		end
	end
	
	return seats
end

return p