nbclean looks like a good solution if nbgrader is overkill.
Is there a good way to auto-save a copy with the skip/note/remove_cells removed?
Jupytext has a "paired notebook" feature:
https://github.com/mwouts/jupytext/blob/master/README.md#paired-notebooks-in-the-jupyter-server :
> Paired notebooks in the Jupyter Server
>
> Jupytext can write a given notebook to multiple files. In addition to the original notebook file, Jupytext can save the input cells to a text file — either a script or a Markdown document. Put the text file under version control for a clear commit history. Or refactor the paired script, and reimport the updated input cells by simply refreshing the notebook in Jupyter.
>
> Configuring notebooks to use Jupytext
>
> Select the pairing for a given notebook using either the Jupytext menu in Jupyter Notebook, or the Jupytext commands in JupyterLab.
>
> Alternatively, the pairing information for one or multiple notebooks can be set on the command line:
>
> jupytext --set-formats ipynb,py notebook.ipynb
If you're going to present the solutions together in class (e.g. with reveal.js or RISE) anyway, would e.g. 'solution' be a better tag than skip/notes/remove_cell?
> To view this discussion on the web visit
https://groups.google.com/d/msgid/jupyter-education/CAD7kTDG-2GWYHYsN5LOJbZJhEUiRzouCAseCWieZHF2wKK2wpg%40mail.gmail.com.
>