To solve Nolan's problem, we need to formulate a linear programming model that maximizes his revenue by allocating the farming equipment between the two farms. Let's denote:

- $x_p$ as the number of acres allocated for pumpkin farming,
- $x_t$ as the number of acres allocated for potato farming.

The objective function is to maximize the total revenue, given by:
\[ \text{Maximize} \quad 150x_p + 200x_t \]

Subject to the constraints:

1. Tractor time constraint: 
   - Pumpkin farm: $0.5x_p$ hours
   - Potato farm: $0.9x_t$ hours
   - Total available time per day: 12 hours

2. Plow time constraint:
   - Pumpkin farm: $0.6x_p$ hours
   - Potato farm: $0.5x_t$ hours
   - Total available time per day: 12 hours

3. Combine time constraint:
   - Pumpkin farm: $0.4x_p$ hours
   - Potato farm: $0.3x_t$ hours
   - Total available time per day: 12 hours

These constraints can be represented as follows:

\[ 0.5x_p + 0.9x_t \leq 12 \]
\[ 0.6x_p + 0.5x_t \leq 12 \]
\[ 0.4x_p + 0.3x_t \leq 12 \]

And, of course, $x_p$ and $x_t$ must be non-negative since we cannot allocate a negative number of acres to farming.

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a model
m = Model("Nolan_Farming")

# Define the variables
x_p = m.addVar(lb=0, name="pumpkin_acres")
x_t = m.addVar(lb=0, name="potato_acres")

# Set the objective function
m.setObjective(150*x_p + 200*x_t, GRB.MAXIMIZE)

# Add constraints
m.addConstr(0.5*x_p + 0.9*x_t <= 12, "tractor_time")
m.addConstr(0.6*x_p + 0.5*x_t <= 12, "plow_time")
m.addConstr(0.4*x_p + 0.3*x_t <= 12, "combine_time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Pumpkin acres: {x_p.x}")
    print(f"Potato acres: {x_t.x}")
    print(f"Total revenue: ${150*x_p.x + 200*x_t.x:.2f}")
else:
    print("No optimal solution found")
```