[
  {
    "task_id": 52,
    "text": "Crear un endpoint que reciba una lista de números 'numbers' y un umbral 'threshold'. El endpoint debe devolver True si todos los números de la lista son estrictamente menores que el umbral, y False en caso contrario. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"numbers\", numbers)\naddParam(\"threshold\", threshold)\nresult = True\ngetListLen(numbers, list_len)\ni = 0\nstartLoop(i, 0, list_len)\n    itemFromList(numbers, i, current_item)\n    current_val = int(current_item)\n    thresh_val = int(threshold)\n    if(None, None, `current_val >= thresh_val`)\n        result = False\n    end()\nendLoop()\naddResult(result)\n_status = 200",
    "test_inputs": {
      "numbers": [
        1,
        2,
        4,
        10
      ],
      "threshold": 100
    },
    "test_list": [
      "re.search(r'True', str(result))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 134,
    "text": "Crear un endpoint que reciba un parámetro 'txt' (cadena de texto) y devuelva True si el último carácter de la cadena es una letra alfabética y no forma parte de una palabra (es decir, el último token separado por espacios tiene longitud 1 y es una letra). En caso contrario, devuelve False. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"txt\", txt)\nresult = False\nif(None, None, `txt == \"\" or txt == None`)\n    result = False\nelse()\n    replace(txt, \",\", \" \", txt_clean)\n    last_word = txt_clean.split()[-1] if txt_clean.split() else \"\"\n    getListLen(last_word, last_len)\n    if(None, None, `last_len == 1 and last_word.lower() >= \"a\" and last_word.lower() <= \"z\"`)\n        result = True\n    else()\n        result = False\n    end()\nend()\naddResult(result)\n_status = 200",
    "test_inputs": {
      "txt": "apple pi e"
    },
    "test_list": [
      "re.search(r'True', str(result))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 51,
    "text": "Crear un endpoint que reciba un parámetro 'text' (cadena de texto) y devuelva la misma cadena pero con todas las vocales (a, e, i, o, u, tanto mayúsculas como minúsculas) eliminadas. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"text\", text)\nresult = [s for s in text if s.lower() not in [\"a\", \"e\", \"i\", \"o\", \"u\"]]\nresult_str = \"\".join(result)\naddResult(result_str)\n_status = 200",
    "test_inputs": {
      "text": "abcdef"
    },
    "test_list": [
      "re.search(r'bcdf', str(result_str))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 66,
    "text": "Crear un endpoint que reciba un parámetro 's' (cadena de texto) y devuelva la suma de los códigos ASCII de todos los caracteres en mayúscula presentes en la cadena. Si la cadena está vacía, debe devolver 0. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"s\", s)\nif(None, None, `s == \"\" or s == None`)\n    digit_sum = 0\nelse()\n    digit_sum = sum(ord(char) if char.isupper() else 0 for char in s)\nend()\naddResult(digit_sum)\n_status = 200",
    "test_inputs": {
      "s": "abAB"
    },
    "test_list": [
      "re.search(r'131', str(digit_sum))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 147,
    "text": "Crear un endpoint que reciba un parámetro entero 'n' y construya un array a de longitud n donde a[i] = i*i - i + 1 (para i desde 1 hasta n). El endpoint debe devolver el número de tripletas (a[i], a[j], a[k]) con i < j < k tal que la suma a[i] + a[j] + a[k] sea múltiplo de 3. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"n\", n)\nn_val = int(n)\nA = [i*i - i + 1 for i in range(1, n_val + 1)]\ncount = 0\ngetListLen(A, len_a)\ni = 0\nstartLoop(i, 0, len_a)\n    j = i + 1\n    startLoop(j, i + 1, len_a)\n        k = j + 1\n        startLoop(k, j + 1, len_a)\n            itemFromList(A, i, ai)\n            itemFromList(A, j, aj)\n            itemFromList(A, k, ak)\n            triple_sum = int(ai) + int(aj) + int(ak)\n            if(None, None, `triple_sum % 3 == 0`)\n                count = count + 1\n            end()\n        endLoop()\n    endLoop()\nendLoop()\naddResult(count)\n_status = 200",
    "test_inputs": {
      "n": 5
    },
    "test_list": [
      "re.search(r'^1$', str(count))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 101,
    "text": "Crear un endpoint que reciba un parámetro 's' (cadena de texto con palabras separadas por comas o espacios) y devuelva un array con las palabras individuales extraídas de la cadena. Si la cadena está vacía, debe devolver una lista vacía. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"s\", s)\nif(None, None, `s == \"\" or s == None`)\n    words = []\nelse()\n    replace(s, \",\", \" \", s_clean)\n    words = s_clean.split()\nend()\naddResult(words)\n_status = 200",
    "test_inputs": {
      "s": "Hi, my name is John"
    },
    "test_list": [
      "re.search(r'Hi', str(words))",
      "re.search(r'John', str(words))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 24,
    "text": "Crear un endpoint que reciba un parámetro entero 'n' y devuelva el mayor divisor de n que sea estrictamente menor que n. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"n\", n)\nn_val = int(n)\nlargest_div = 1\ni = n_val - 1\nstartLoop(i, 1, n_val)\n    candidate = n_val - i\n    if(None, None, `n_val % candidate == 0`)\n        largest_div = candidate\n        return(largest_div)\n    end()\nendLoop()\naddResult(largest_div)\n_status = 200",
    "test_inputs": {
      "n": 15
    },
    "test_list": [
      "re.search(r'^5$', str(largest_div))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 125,
    "text": "Crear un endpoint que reciba un parámetro 'txt' (cadena de texto) y devuelva: una lista de palabras separadas por espacios si hay espacios en el texto; una lista de palabras separadas por comas si no hay espacios pero sí comas; o el número de letras minúsculas con posición impar en el alfabeto (ord('a')=0, ord('b')=1, ...) si no hay ni espacios ni comas. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"txt\", txt)\nif(None, None, `\" \" in txt`)\n    split_result = txt.split()\nelse()\n    if(None, None, `\",\" in txt`)\n        replace(txt, \",\", \" \", txt_replaced)\n        split_result = txt_replaced.split()\n    else()\n        split_result = len([i for i in txt if i.islower() and ord(i) % 2 == 0])\n    end()\nend()\naddResult(split_result)\n_status = 200",
    "test_inputs": {
      "txt": "Hello world!"
    },
    "test_list": [
      "re.search(r'Hello', str(split_result))",
      "re.search(r'world!', str(split_result))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 145,
    "text": "Crear un endpoint que reciba una lista de enteros 'nums' y la devuelva ordenada de forma ascendente según la suma de sus dígitos. Si varios elementos tienen la misma suma de dígitos, se mantiene su orden relativo original. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"nums\", nums)\nfunction digits_sum(n) {\n    neg = 1\n    if(None, None, `n < 0`)\n        n = -1 * n\n        neg = -1\n    end()\n    digits = [int(d) for d in str(n)]\n    digits[0] = digits[0] * neg\n    return(sum(digits))\n}\nsorted_nums = sorted(nums, key=digits_sum)\naddResult(sorted_nums)\n_status = 200",
    "test_inputs": {
      "nums": [
        1,
        11,
        -1,
        -11,
        -12
      ]
    },
    "test_list": [
      "re.search(r'-1', str(sorted_nums))",
      "re.match(r'^200$', str(_status))"
    ]
  },
  {
    "task_id": 50,
    "text": "Crear un endpoint que reciba un parámetro 's' (cadena de texto codificada mediante un desplazamiento de 5 posiciones en el alfabeto) y devuelva la cadena decodificada original, revirtiendo el desplazamiento. El resultado debe exponerse como respuesta de la API con código de estado 200.",
    "code": "addParam(\"s\", s)\ndecoded = \"\".join([chr(((ord(ch) - 5 - ord(\"a\")) % 26) + ord(\"a\")) for ch in s])\naddResult(decoded)\n_status = 200",
    "test_inputs": {
      "s": "fghij"
    },
    "test_list": [
      "re.search(r'[a-z]+', str(decoded))",
      "re.match(r'^200$', str(_status))"
    ]
  }
]