COLUMBUS, Ohio -- Asked to describe his team's offense in one word, Ohio State coach Jim Tressel thought a minute and said, "hit and miss."
On a sloppy day for the No. 12 Buckeyes, even the coach had trouble narrowing down what was wrong.
Special teams and defense held up their ends of the bargain, though, with Malcolm Jenkins blocking a punt and Etienne Sabino returning it 20 yards for a touchdown to lead the way to a 16-3 victory over Purdue on Saturday.
"The offense came up and said, 'We owe you,"' Ohio State linebacker James Laurinaitis said.
The Boilermakers (2-4, 0-2) didn't get inside the Ohio State 30 until the final 30 seconds.
Freshman quarterback Terrelle Pryor had an erratic game and tailback Chris "Beanie" Wells totaled 94 yards on 22 carries for the Buckeyes (6-1, 3-0 Big Ten). Whether it was due to Purdue's defense or the Buckeyes' own missteps, nothing seemed to click on offense. Despite good field position, it only produced three field goals.
"We just looked bad," Pryor said. "That's the only way to put it."
And it wasn't just one thing.
"There was a moment where you looked good and there was a moment where you went backwards," Tressel said. "We're not consistent at all."
Ohio State has won four straight since a 35-3 loss at then-No. 1 Southern California prompted Tressel to put senior Todd Boeckman on the bench behind Pryor.
Pryor completed 10 of 14 passes for 97 yards and ran for 27 yards on 14 carries. He was sacked three times (twice by Ryan Kerrigan), sometimes holding onto the ball when he was in trouble instead of getting rid of it earlier or throwing it away.
"The defense was on their backs the whole game and they stepped up and played," Pryor said. "We need to help them out and score touchdowns. We're not happy with that performance."
Tressel said he never considered switching back to Boeckman, who led the Buckeyes to an 11-2 record and the national championship game last season.
Curtis Painter threw for 228 yards for Purdue, becoming just the fourth Big Ten quarterback to surpass 10,000 passing yards. He was 23-of-51 with one interception.
"They've got fast guys and athletic guys," Painter said. "They're just really good players. Just getting open is tough."
It didn't take long for the Buckeyes to gain the upper hand. Ohio State's defense forced a three-and-out on Purdue's first possession and Jenkins smothered a punt by Chris Summers before Sabino raced in for the score.
"Lots of times we don't rush the punter," Jenkins said. "But we had the mentality we were going to get one today."
Carson Wiggs booted a school-record 53-yard field goal early in the third quarter for Purdue's points.
The teams had almost as much punting yardage as they did on offense. The Boilermakers' spread attack had just 298 yards (190 yards on six punts) and the Buckeyes totaled 222 (with 211 yards on six punts).
One play summed up the day for Ohio State's offense. On fourth-and-8 at the Purdue 36 in the first quarter, the Buckeyes were going to try a fake field goal. But just as the snap went to the holder and he bolted upright to run to the right, they were flagged for delay of game. They had to punt on the next snap.
Ohio State failed to score a touchdown after getting first downs inside the Purdue 10 in both the first and third quarters.
In his third game back from a foot injury that sidelined him for a month, Wells was solid. But he said he had difficulty breathing after missing practice this week with the flu.
"We have to pass the ball better. That might sound surprising coming from a running back, but we have to get the ball downfield to use our receivers better," Wells said. "We'd love to be more versatile."
Purdue, which has lost its last 17 games against ranked teams, has not won in Ohio Stadium since 1988. The Boilermakers have lost three in a row.
"The inability for us to score is baffling," said tailback Kory Sheets, who rushed for 67 yards on 20 carries.
The Buckeyes fans might be saying the same thing.