Purdue was without Jeff Brohm and Rondale Moore, its head coach and All-America wide receiver, respectively, as it began the 2020 season.

Brohm was home isolating, after being diagnosed with COVID-19 earlier in the week, and Moore was out for an undisclosed reason. Still, after a weird delayed season, the Boilermakers overcame, beating Iowa 24-20 in their home opener in Ross-Ade Stadium.

Following are grades:

Purdue pass offense: B-

Aidan O’Connell and Co. were at their best when it mattered most, when the Boilermakers were driving toward the go-ahead touchdown in the final minutes. O’Connell, the former walk-on who has now directed three late game-winning drive in his five career starts, was 3-of-6 on the last possession, with two of the completions coming on third down. On the second, he hit David Bell — how did Iowa let the star sophomore receiver get so wide open? — in the back of the end zone for the winning TD.

O’Connell, who got solid protection for most of the afternoon, finished 31-of-50 for 282 yards with three touchdowns and two interceptions. He has a strong arm, but at least a few times he could have used the changeup — he needs to work on his touch passes — because he zipped a pass off Payne Durham that was too hard and off target and was picked, as was a previous pass thrown into traffic.

Bell was outstanding again, with 13 receptions (matching his total vs. Iowa last season) for 121 yards and three touchdowns.

Purdue rush offense: B

The Boilermakers went with Zander Horvath as the primary ball-carrier — TV somewhat hilariously pointed out he has had back-to-back 100-yard games, the previous being 330 days ago — as presumed No. 1 King Doerue was out with a hamstring injury.

Horvath, a big bruiser, is at his best when he’s headed north-south and a couple times he got caught running side-to-side. One of those was on a critical third down in the second half, when he tried to outrun the Hawkeyes to the wide side of the field. Didn’t work.

But of his 129 rushing yards, 46 came on the final two drives, resulting in a field goal then the winning touchdown. He picked up a critical fourth down on the second-to-last drive, pushing the pile forward to gain just enough, and no more, for the first down. His 11-yard rush on the final drive put Purdue in the red zone, setting up the chance to score.

Ideally, Purdue would have a change-of-pace speed back, as well, but as of now it’s Horvath; he got all 21 of Purdue’s running back carries and averaged 6.1 yards per carry.

Offense overall: B

After an early score, Purdue’s offense went dormant for too long.

A late-first-half score was sullied, somewhat, by mistakes at the end of the first 30 minutes. O’Connell threw a pick — Purdue, in general, might have been best served to be more patient there, settling for a halftime tie — that set up Iowa with a late field goal and 17-14 lead. Then the Boilermakers were shut out in the third quarter.

But O’Connell found a rhythm and so did acting head coach Brian Brohm as Purdue rallied.

Statistically, Purdue didn’t wow, with 386 yards, including 130 yards gained rushing (sack yardage being part of college football rushing stats is just dumb). Purdue’s offense was barely penalized, so impressive given the disjointed offseason, and it was 6-of-16 on third down. But Purdue turned one of the misses into a fourth-down conversion on a fourth-quarter scoring drive. However, the Boilermakers turned the ball over twice and went too long without much positive happening.

Purdue run defense: C-

In the second and third quarters, it felt as though Iowa’s offensive line was dominating on the line of scrimmage. The Hawkeyes were wearing the Boilermakers down, pushing them off the line and into the second level. It’s a reason why the Hawkeyes finished with 195 net rushing yards with a 5.4 ypc average.

It didn’t feel like Purdue missed many tackles, but when you’re not making contact until after 5 yards, that’s a bigger problem. Inexplicably, Iowa only rushed five times in the fourth quarter, when it was trying to hold a lead, and that went for a solid 38 yards.

Purdue pass defense: B

The Boilermakers are tremendously more physical in the secondary and that led to more contested balls down the field. Iowa QB Spencer Petras passed for 265 yards but it took him 39 attempts. A couple times, Purdue had great coverage deep, like when nickel Simeon Smiley broke up a deep pass down the middle in the third quarter.

Dedrick Mackey had a solid game, particularly for a guy who many thought was going to be replaced as a starter. And Cam Allen, at safety, was active.

The Boilermakers had only one sack, by George Karlaftis in the first half.

But Boilermakers fans should love what Purdue did on the final Iowa drive, lining Karlaftis up on the interior to get him matched up with a slower interior lineman and closer to the QB. It worked, particularly on second down when he got pressure on Petras to force an incompletion. Two plays later, the game was over.

A nod too to newcomer DaMarcus Mitchell, who was a beast near the line of scrimmage, finishing with six tackles and one for loss.

Defense overall: A-

Iowa had 460 yards total. But whatever, right?

The Hawkeyes scored only 20 points because Purdue created three turnovers. What’s to love: The Boilermakers were aggressive while finishing tackles, trying to yank the ball out while bringing the runner down. Clearly, they had worked a bunch on it during training camp. Granted, on one of the three, an Iowa player might have done the most damage to his teammate, knocking the ball away himself, but Jalen Grahm was there to make the play happen. And credit to Mackey and Jaylan Alexander for ripping the other two away.

And … Purdue got the stop at the end. Bonus points.

Special teams: B+

Solid day, and Purdue did so without special teams coordinator Marty Biagi, with JaMarcus Shephard filling in.

The boilermakers’ kicking and punting was good, with J.D. Dellinger hitting a 29-yarder and Brook Cormier knocking two of his five punts inside the red zone. Purdue had one breakdown on punt coverage, resulting in a 25-yard gain. Its return group was pedestrian.

Coaching: A+

Give a ton of credit to Brian Brohm and the rest of Purdue’s coaching staff. The acting head coach was poised on the sideline, showing confidence in his team and in his ability to get the job done. The final game-winning drive was a masterclass. Brohm was patient with his play-calling, mixing in the run and pass to methodically move down the field. There was no panic-induced risky shot; it was cool and collected.

After O’Connell missed Bell in the end zone on second down, Brohm went back to something similar on third down, with Bell open again; this time O’Connell hit him.

Credit to Jeff Brohm too for having his Boilermakers prepared, even while isolated at home a mile north of Ross-Ade Stadium. It was a collective coaching effort and an impressive one.

Overall: B+

Purdue won a game it very well should have lost. It didn’t have its coach and best player and was missing others too.

And the Boilermakers were the underdog trailing with only a handful of minutes left. But they made plays in all three phases, getting a field goal, a touchdown and two defensive stops.