Trajectòries d'una fresadora de control numèric =============================================== .. module:: trajectories .. warning:: Per a resoldre aquest exercici **no es poden fer servir iteracions (ni** ``for`` **ni** ``while`` **)**, només les :ref:`funcions predefinides ` de Python i les dels mòduls :py:mod:`itertools`, :py:mod:`functools` i :py:mod:`operator`. **Tampoc no es poden fer servir llistes**, tuples, diccionaris ni cap altra estructura de dades **per a desar tots els elements d'un iterador**. Una trajectòria d'una fresadora de control numèric és una seqüència de punts en 3D amb coordenades enteres. La fresadora només es pot desplaçar una unitat en una de les tres coordenades. Quan analitzem dos punts consecutius de la trajectòria, volem detectar dos tipus d'anomalies: #. No canvia cap coordenada, #. Canvia més d'una coordenada o alguna coordenada canvia en més d'una unitat. Dissenya les funcions següents i desa-les al mòdul :mod:`trajectories` (fitxer :file:`trajectories.py`): .. function:: troba_anomalies(trajec) Genera l'iterador de les anomalies en la trajectòria `trajec`. :param trajec: iterador sobre una seqüència de punts 3D. Un punt 3D és una tupla amb tres elements que corresponen a les coordenades `x`, `y` i `z`. :return: iterador de tuples formades pels dos punts de `trajec` sobre els que s'ha detectat una anomalia. Per exemple, .. literalinclude:: tests-troba_anomalies.txt :language: pycon :start-after: >>> from trajectories :end-before: >>> tr3 = [ Disposes d'un joc de proves més complet al fitxer :download:`tests-troba_anomalies.txt`. | .. function:: classifica_anomalies(anom) Classifica les anomalies en `anom` en tres iteradors corresponents alsiterador de les anomalies en la trajectòria `trajec`. :param anom: iterador sobre una seqüència de parelles de punts 3D anòmals. :rtype: tuple[iterador, iterador] :return: Una parella d'iteradors: #. Conté les parelles de punts 3D d\'`anom` en què no canvia cap coordenada. #. Conté les parelles de punts 3D d\'`anom` en què canvia més d'una coordenada o alguna coordenada canvia en més d'una unitat. Per exemple, .. literalinclude:: tests-classifica_anomalies.txt :language: pycon :start-after: >>> from trajectories :end-before: >>> an2 = [ Disposes d'un joc de proves més complet al fitxer :download:`tests-classifica_anomalies.txt`.