I have created a way to save answers to the exercises and generate them automatically later. Still, savebox doesn't seem to work inside an environment, while working fine inside a command. I'm working on environment odpowiedz and command modpowiedz in this example. The first one doesn't want to save the box, but the second one works just fine.
\documentclass{article}
\usepackage[fontsize=14pt]{fontsize}
\usepackage{amsfonts,amssymb,amsmath,mathtools,bm,amsthm}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,polish]{babel}
\usepackage{polski}
\usepackage[unicode]{hyperref}
\usepackage{graphicx,float}
\usepackage{xargs}
\usepackage{pgffor}
\usepackage{ifthen}
\usepackage{environ}
\usepackage{ragged2e}
\usepackage{etoolbox}
\usepackage{pgfkeys}
\usepackage{xparse}
\newcommand\namedbox[2]{%
\ifcsname#1\endcsname\else%
\expandafter\newsavebox\csname#1\endcsname%
\fi%
\expandafter\sbox\csname#1\endcsname{#2}}
\newcommand\usenamedbox[1]{\expandafter\usebox\csname#1\endcsname}
\newcounter{R}[section]
\numberwithin{R}{section}
\newcounter{P}[section]
\numberwithin{P}{section}
\newcounter{S}[section]
\numberwithin{S}{section}
\newcounter{M}[section]
\numberwithin{M}{section}
\newcounter{D}[section]
\numberwithin{D}{section}
\newcounter{odp}
\newcounter{sposob}
\setlength\parindent{0pt}
\newcommand{\link}[1]{\textbf{\hyperref[#1]{#1}}}
\newcounter{mylabelcounter}
\makeatletter
\newcommand{\labelodp}[1]{%
\refstepcounter{mylabelcounter}%
\immediate\write@auxout{\string\newlabel{#1}{{1}{\thepage}{{\unexpanded{#1}}}{mylabelcounter.\number\value{mylabelcounter}}{}}}}
\makeatother
\newenvironmentx{zadanie}[3][2,3]{
\refstepcounter{#1}%
\gdef\kod{#1.\csname the#1\endcsname}\par%
\minipage[t]{\textwidth}%
\label{\kod}\ignorespaces\textbf{\hyperref[O.\kod]{\kod}}\if\relax\detokenize{#2}\relax\else(#2)\fi\if\relax\detokenize{#3}\relax\else(#3p.)\newline\fi}
{\endminipage\vspace{1ex}\par}
\NewEnviron{odpowiedz}[1][nod]{
\ifthenelse{\equal{#1}{d}}{%
\link{\kod}~\minipage[t]{0.9\textwidth}%
\raggedright\setcounter{odp}{0}\setcounter{sposob}{0}%
\BODY%
\vspace{1ex}\endminipage\}{}%
\namedbox{\kod}{%
\minipage[t]{0.9\textwidth}%
\raggedright\setcounter{odp}{0}\setcounter{sposob}{0}%
\BODY%
\vspace{1ex}\endminipage}}
\newcommand{\modpowiedz}[1]{\namedbox{\kod}{#1\hspace{1.8em}}}
\newcommand{\wstawodpowiedz}[1]{\leavevmode\labelodp{O.#1}\link{#1}~\usenamedbox{#1}\penalty0}
\newcommand{\odpowiedzi}[1]{\foreach \n in {1,...,\arabic{#1}}{\wstawodpowiedz{#1.\thesection.\n}}}
\begin{document}
\section{Exercises}
\begin{zadanie}{D}
Solve equation $x+1=2$.
\end{zadanie}
\begin{odpowiedz}
$x=1$
\end{odpowiedz}
\begin{zadanie}{D}
Solve equation $x+1=3$.
\end{zadanie}
\modpowiedz{$x=2$}
\subsection{Answers}
\odpowiedzi{D}
\end{document}
In this example answer D.1.1 is created by odpowiedz and answer D.1.2 by modpowiedz.
