Juicio triangular

Reporta para cada tres segmentos de línea si pueden formar un triángulo. Regresa el resultado en cualquier orden.

#pandas#advanced-select

Table: Triangle

+-------------+------+
| Column Name | Type |
+-------------+------+
| x           | int  |
| y           | int  |
| z           | int  |
+-------------+------+

- (x, y, z) es la llave primaria.
- Cada fila contiene las longitudes de tres segmentos de línea.

El formato del resultado se muestra en el siguiente ejemplo.

Ejemplo 1:

Entrada:

Tabla Triangle:
+----+----+----+
| x  | y  | z  |
+----+----+----+
| 13 | 15 | 30 |
| 10 | 20 | 15 |
+----+----+----+

Salida:

+----+----+----+----------+
| x  | y  | z  | triangle |
+----+----+----+----------+
| 13 | 15 | 30 | No       |
| 10 | 20 | 15 | Yes      |
+----+----+----+----------+

Solución

import pandas as pd


def triangle_judgement(triangle: pd.DataFrame) -> pd.DataFrame:
    triangle_cols = []

    for itm in triangle.itertuples():
        x, y, z = abs(itm.x), abs(itm.y), abs(itm.z)
        if (x + y > z and x + z > y and y + z > x):
            triangle_cols.append('Yes')
        else:
            triangle_cols.append('No')

    triangle['triangle'] = triangle_cols
    return triangle


def test_triangle_judgement():
    data = [[13, 15, 30], [10, 20, 15]]
    triangle = pd.DataFrame(
        data, columns=['x', 'y', 'z']
    ).astype({'x': 'Int64', 'y': 'Int64', 'z': 'Int64'})
    got = triangle_judgement(triangle)
    expected = pd.DataFrame({
        'x': [13, 10],
        'y': [15, 20],
        'z': [30, 15],
        'triangle': ['No', 'Yes'],
    })
    pd.testing.assert_frame_equal(got, expected, check_dtype=False)

slackmart blog © 2024