Hace un año, mostró que los Grandes Modelos de Idiomas (LLMs) podían resolver desafíos de codificación algorítmica en Leetcode. Sin embargo, su capacidad estaba limitada a un subconjunto de conocidos problemas "populares". Nuevos problemas, que nunca formaban parte de sus conjuntos de datos de capacitación, presentaron dificultades. Mientras que los más fáciles fueron principalmente resueltos por los modelos, los más difíciles permanecieron inaccesibles. mi punto de referencia mi punto de referencia mi punto de referencia Desde entonces, Open AI, Anthropic y Google han lanzado versiones mejoradas de sus modelos y han aparecido nuevos jugadores como Deepseek y xAI. Muchos modelos se comercializan ahora como capaces de escribir código, lo que no era el caso antes. Motivación Hay referencias existentes para los LLM para evaluar sus habilidades de codificación. se centra en resolver problemas de software en la vida real - se basa en problemas de Github de proyectos de código abierto existentes. SWE-bench SWE-bench SWE-bench valores de referencia reflejan mejor las habilidades algorítmicas de resolución de problemas de los LLMs. OpenAI probó los modelos o1 y o3 en los problemas de Codeforces y compartió resultados detallados ( , ), mientras que otros competidores no lo hicieron. Esto hizo imposible una comparación directa. Codeforces 1 2 Codeforces Codeforces 1 1 2 2 Esto llevó a la creación de un nuevo punto de referencia, permitiendo una comparación directa de los LLM. Y, después de todo, ¿por qué no hacerlo sólo por diversión? El diseño de los benchmarks La idea es emular las acciones humanas al resolver problemas algorítmicos pero usar un LLM para escribir el código: Descarga la descripción del problema. Crear un prompt de la descripción. Generar código con el LLM. Enviar el código para la validación. Await results. Descarga la descripción del problema. Crear un prompt de la descripción. Generar código con el LLM. Enviar el código para la validación. A espera de los resultados. Estos pasos deben realizarse para cada problema en nuestro conjunto de pruebas y para cada LLM. Por razones de simplicidad, solo hay un intento para que un LLM escriba código sobre cada problema, sin ningún feedback para repetir para mejorar la solución.» BR ¿Por qué Leetcode? Leetcode ha demostrado ser una buena opción para el benchmarking por varias razones: Los problemas de Leetcode se utilizan en entrevistas reales para puestos de ingeniero de software. Los estudiantes de ciencias de la computación aprenden a resolver problemas similares durante su educación. Tiene un juez en línea que puede comprobar si la solución es correcta en segundos. Muchos lenguajes de programación populares son compatibles. El rendimiento del usuario humano en este problema también está disponible. Los problemas de Leetcode se utilizan en entrevistas reales para puestos de ingeniero de software. Los estudiantes de ciencias de la computación aprenden a resolver problemas similares durante su educación. Tiene un juez en línea que puede comprobar si la solución es correcta en segundos. Se admiten muchos lenguajes de programación populares. El rendimiento del usuario humano en este problema también está disponible. Cómo funciona Leetcode Si nunca ha tratado con la programación competitiva o la resolución de desafíos algorítmicos, aquí está una breve explicación. Dado un conjunto de números enteros y un objetivo de números enteros, devuelva los índices de los dos números de tal forma que se sumen al objetivo. Puede asumir que cada entrada tendría exactamente una solución, y no puede usar el mismo elemento dos veces. Dado un conjunto de números enteros y un objetivo de números enteros, devuelva los índices de los dos números de tal forma que se sumen al objetivo. Puede asumir que cada entrada tendría exactamente una solución, y no puede usar el mismo elemento dos veces. Un programador concursante necesita escribir una pieza de código que resuelva ese problema. Para empezar, hay un "snippet" - una función incompleta, con un nombre y argumentos dados, pero un cuerpo vacío: class Solución: def twoSum(self, nums: List[int], target: int) -> List[int]: # tu código aquí class Solución: def dosSum(self, nums: List[int], target: int) -> List[int]: # tu código aquí Normalmente, varias muestras de entrada y salida (casos de prueba), se proporcionan en la descripción: Input: nums = [2,7,11,15], objetivo = 9 Sitio de salida: [0,1] Input: nums = [2,7,11,15], objetivo = 9 Input: [0,1] Un problema puede tener decenas de casos de prueba que solo están disponibles para el juez en línea.Un problema se resuelve (o una solución se considera aceptada) si y sólo si el código produce las salidas esperadas para todos los casos de prueba dentro de un tiempo y límites de memoria razonables.La solución puede ser escrita en cualquier lenguaje de programación que sea compatible con el juez. Cada problema tiene una "taxa de aceptación", la proporción de soluciones aceptadas presentadas por los usuarios de Leetcode.Tenga en cuenta que un único usuario puede enviar su código un número ilimitado de veces, y cada intento cuenta hacia la tasa de aceptación. Estas reglas no fueron inventadas por Leetcode; se han utilizado comúnmente en los concursos de ciencias de la computación durante bastante tiempo. Conjuntos de datos Como en la referencia anterior, quería ejecutar LLMs en dos conjuntos de problemas: Los problemas "conocidos" no solo se publican hace mucho tiempo, sino que también se utilizan más a menudo para entrevistas de software - por lo tanto, las soluciones están ampliamente disponibles. Los problemas "invisibles" que se publicaron recientemente, y sus soluciones probablemente no fueron observadas por los LLMs probados. Los problemas "conocidos" no solo se publican hace mucho tiempo, sino que también se utilizan con más frecuencia para entrevistas de software - por lo tanto, las soluciones están ampliamente disponibles. Problemas "invisibles" que fueron publicados recientemente, y sus soluciones no eran susceptibles de ser observados por los LLMs probados. Mientras que la mayoría de los problemas tienen descripciones de texto simple y sólo requieren expandir una función dada con código, otros son diferentes. Algunos requieren implementar una interfaz, es decir, expandir varias funciones en un problema. Otros tienen enlaces y imágenes externas, lo que podría suponer dificultades para los LLM, ya que pocos modelos soportan las entradas de imagen o la navegación por Internet. Leetcode ofrece tres listas de problemas: , y , , y Mi conjunto de datos de "problemas bien conocidos" combina "Leetcode 75" "Top interview 150" "Leetcode 75" "Top 100 Me gusta" "Top entrevista 150" "Leetcode 75" "Top 100 Likes" Para los problemas "invisibles", he seleccionado 99 de los problemas publicados más recientes: 33 fáciles, 33 medianos y 33 difíciles. El reciente fue determinado en base a los ID de problema, que son incrementales. Aunque Leetcode no muestra la fecha de publicación de los problemas, se puede aproximar a partir de comentarios y discusiones. Los niveles de dificultad son puramente subjetivos y a la discreción de los editores. no tenía la intención de coincidir con el número de problemas para cada dificultad o conjunto de datos. Configuración del problema Configuración del problema Conjunto de problemas Configuración de problemas » BR (23 Mar 2025) Bien conocido Bien conocido Bien conocido Unseen (23 Mar 2025) Invisible (23 Mar 2019) Invisible (23 Mar 2025) Total 133 99 Total Total Total Total Totales 131 133 99 99 Easy 41 33 Easy Eso es fácil Fácil de usar 41 41 33 33 Medium 78 33 Medios Medios Medios 78 78 33 33 Hard 14 33 Hard Hard Hardidad No hay mecanismo para proporcionar feedback o mejorar el código después de que se haya generado. 14 14 33 33 Tasa de aceptación de usuarios de Leetcode 53.44% 37,05% Ratio de aceptación de usuarios de Leetcode Tasa de aceptación de usuarios de Leetcode Rata de aceptación de los usuarios de Leetcode 53.44% 53.44% 53.44% 37,05% 37,05% 37,05% Las declaraciones de problemas y los fragmentos de código se obtuvieron usando mi herramienta de benchmarking, que se publica en Github: https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver Prompt, elección de idioma y generación de código El índice de referencia fue diseñado de esta manera: LLM hace solo un intento de generar código sin ninguna información previa sobre el problema (o cualquier otro problema) y sin conocer sus casos de prueba, excepto aquellos que estaban en la descripción misma. Utilizé la misma prompt para cada LLM y cada problema: Hola, esta es una entrevista de codificación. Se le dará: * Una declaración de problema (con casos de prueba de muestra si está disponible). * Un fragmento de código de inicio (con firmas de funciones fijas). Por favor escriba su solución en el lenguaje de programación {language}. Su código debe: * Solucionar el problema completamente y correctamente. * Pasar todos los casos de prueba de muestra proporcionados. * Ejecutar dentro de los límites de tiempo y memoria aceptables (asumir grandes entradas si no se especifican). * Siga buenas prácticas de codificación (lógica clara, estructura legible, uso apropiado de las características del idioma). Aquí está la declaración de problema: {question} Aquí está el fragmento de código, que debe ampliar con su solución: {snippet} Requisitos importantes: Hola, esta es una entrevista de codificación. Se le dará: * Una declaración de problema (con casos de prueba de muestras si está disponible). * Un fragmento de código de inicio (con firmas de funciones fijas). Por favor escriba su solución en el lenguaje de programación {language}. Su código debe: * Solucionar el problema completamente y correctamente. * Pasar todos los casos de prueba de muestras proporcionados. * Executar dentro de los límites de tiempo y memoria aceptables (asumir grandes entradas si no se especifican). * Siga buenas prácticas de codificación (lógica clara, estructura legible, uso adecuado de características de idioma). Aquí está la declaración de problema: {question} Aquí está el fragmento de código, que debe ampliar con su solución: {snippet} Requisitos importantes: Se pidió a los LLM que emitieran sólo el código de trabajo sin ningún texto anterior, pero eso no era cierto en muchos casos. se implementó una limpieza básica, y todo más que el código real se eliminó y no se envió. Las fechas de corte del conocimiento se obtienen de la documentación oficial del vendedor y se proporcionan para referencia, si son conocidas. El prompt fue “polido” con ChatGPT4 desde mi primer proyecto, pero sin implementar ninguna técnica de “ingeniería prompt”. La descripción del problema fue borrada de las etiquetas HTML antes de utilizarla en el prompt. Para el lenguaje de programación que escogí Python (versión 3). Modelos y parámetros Los modelos utilizados en el índice de referencia se enumeran en la tabla siguiente, con todos los parámetros no predeterminados especificados. Vendor Vendor Vendedor El vendedor El modelo El modelo El modelo Data de corte del conocimiento Data de cierre del conocimiento Data de corte del conocimiento "Reflexión" "Reflexión" “Razonamiento” Parametros Parametros Parámetros en la página web Antrópico claude-3-7-sonnet-20250219 Nov 2024 No temperatura = 0.0 max_tokens = 4096 Anthropic Antigüedad clase-3-7-sonnet-20250219 classificador 3-7-sonnet-20250219 claude-3-7-sonnet-20250219 Nuevo 2024 Año 2024 No No No temperatura = 0.0 max_tokens = 4096 temperatura = 0.0 max_tokens = 4096 claude-3-7-sonnet-20250219 (con pensamiento habilitado) Nov 2024 Yes temperatura = 0.0 max_tokens = 16384 budget_tokens = 8192 claude-3-7-sonnet-20250219 (con pensamiento habilitado) clase-3-7-sonnet-20250219 (con pensamiento habilitado) claude-3-7-sonnet-20250219 (con pensamiento habilitado) Nuevo 2024 Año 2024 Sí Sí Sí temperatura = 0.0 max_tokens = 16384 budget_tokens = 8192 temperatura = 0.0 max_tokens = 16384 budget_tokens = 8192 DeepSeek deepseek-chat (DeepSeek-V3) unknown No temperatura = 0.0 DeepSeek Definición deepseek-chat (DeepSeek-V3) deepseek-chat (DeepSeek-V3) deepseek-chat (DeepSeek-V3) nombre desconocido conocido y desconocido No No No temperatura = 0.0 Temperatura = 0.0 deepseek-reasoner (DeepSeek-R1) unknown Yes temperatura = 0.0 Reflexiones en profundidad (DeepSeek-R1) Reflexiones sobre la profundidad (DeepSeek-R1) Deepseek-reasoner (DeepSeek-R1) unknown conocido y desconocido Sí Sí Sí temperatura = 0.0 Temperatura = 0.0 Google gremini-2.0-flash-001 unknown No temperatura = 0.0 Google En Google mujer 2.0-flash-001 mujer 2.0-flash-001 Genius 2.0-flash-001 nombre desconocido conocido y desconocido No No No temperatura = 0.0 Temperatura = 0.0 gemini-2.0-pro-exp-02-05 unknown No temperatura = 0.0 conexión 2.0-pro-exp-02-05 mujer 2.0-pro-exp-02-05 mujer 2.0-pro-exp-02-05 nombre desconocido conocido y desconocido No No No temperatura = 0.0 Temperatura = 0.0 gemini-2.5-pro-exp-03-25 unknown Yes temperatura = 0.0 m22.5-pro-exp-03-25 Gomera-2.5-pro-exp-03-25 Gemini-2.5-pro-exp-03-25 nombre desconocido conocido y desconocido Sí Sí Sí temperatura = 0.0 Temperatura = 0.0 xAI grok-2-1212 Julio 17, 2024 No seed = 42 xAI xA y grok-2-1212 Grock-2-1212 grok-2-1212 Julio 17, 2024 El 17 de julio de 2024 No No No sementes = 42 Sementes = 42 OpenAI o1-2024-12-17 Oct 01, 2023 Yes seed = 42 OpenAI Abrir la página o1-2024-12-17 o1-2024-12-17 o1-2024-12-17 Oct 01, 2023 Oct 01, 2023 Sí Sí Sí sementes = 42 Sementes = 42 o3-mini-2025-01-31 Oct 01, 2023 Sí seed = 42 o3-mini-2025-01-31 o3-mini-2025-01-31 o3-mini-2025-01-31 Oct 01, 2023 Oct 01, 2023 Sí Sí Sí sementes = 42 Sementes = 42 El índice de referencia tenía como objetivo ser lo más determinista y reproducible posible; por lo tanto, se utilizaron parámetros como "temperatura" o "semilla". sin embargo, ninguno de los modelos probados garantiza una salida totalmente determinista. Todas las fechas de corte conocidas son anteriores al problema más antiguo en el conjunto de datos conocido (noviembre de 2024). sin embargo, no pude encontrar fechas de corte para las familias de modelos Gemini y DeepSeek. Algunos modelos soportan los modos de "razonamiento" o "pensamiento" por defecto, mientras que para Claude 3.7 Sonnet se puede habilitar mediante el paso de parámetros. El uso de esta función se especifica en la tabla. Otras características del modelo (o "herramientas") como la búsqueda web no se habían habilitado, incluso si se admitió. Resultados Todos los competidores mostraron tasas de aceptación muy altas en problemas bien conocidos, como en el índice de referencia anterior. no probé modelos o modificaciones superiores (es decir: Claude 3.7 Sonnet con razonamiento habilitado, DeepSeek R1, Gemini 2.5 Pro, O1) para ahorrar tiempo y créditos, ya que los resultados eran altamente predecibles. Los resultados son sorprendentemente diferentes para los problemas "invisibles" en dos aspectos: Para todos los modelos . Esto es especialmente notable para los problemas medianos y duros. la tasa de aceptación es menor para los problemas "invisibles" en problemas de todas las dificultades, aunque los números exactos variaron de modelo en modelo. Los modelos con el modo "razonamiento" o "pensamiento" habilitado produjeron mejores resultados Para todos los modelos . la tasa de aceptación es menor para los problemas "invisibles" la tasa de aceptación es más baja para los problemas "invisibles" en problemas de todas las dificultades, aunque los números exactos variaron de modelo a modelo. Los modelos con el modo "razonamiento" o "pensamiento" permitieron producir mejores resultados Los modelos con el modo "razonamiento" o "pensamiento" permitieron producir mejores resultados Las tasas de aceptación significativamente más altas para los problemas conocidos se pueden explicar por la posibilidad de que esos problemas y sus soluciones fueran parte de los conjuntos de capacitación, y los modelos sólo tuvieron que reproducir una solución correcta conocida. Sin embargo, la tasa de aceptación de los usuarios para los nuevos problemas medios y duros también es menor que para los problemas en el conjunto "conocido". Este caso es difícil de cuantificar, y no significa necesariamente que los nuevos problemas sean "más difíciles". Todos los modelos con el modo "reasoning" habilitado superaron significativamente a sus homólogos básicos. - un logro imposible hace sólo un año. El o3-mini muestra los mejores resultados entre todos los modelos "reasoning" - se desempeñó incluso mejor que el mucho más caro y más lento o1. Hay que señalar que para resolver problemas de programación competitivos. Sin embargo, me resisto a concluir cuál modelo es mejor para resolver problemas algorítmicos porque depende mucho del presupuesto del token, y la latencia y el Lo más importante, algunos de ellos fueron capaces de resolver una parte considerable de problemas medianos y duros o3-mini fue entrenado específicamente Lo más importante, algunos de ellos fueron capaces de resolver una parte considerable de problemas medios y duros o3-mini fue especialmente entrenado el o3-mini fue especialmente entrenado Consideraciones futuras No se puede garantizar que los conjuntos de problemas "invisibles" no estén incluidos en los datos de formación de los modelos.Para abordar esto, podemos considerar generar nuevos problemas únicos diseñados específicamente para futuros índices de referencia - por supuesto, utilizando LLMs. Además, otra estrategia es emplear lenguajes de programación menos comúnmente utilizados.Este enfoque puede requerir que los LLM diseñen una solución en lugar de "copiar-pasar" el código correcto conocido escrito en Python. Estas ideas necesitan más investigación, y espero que alguien más o yo pueda sumergirse en ellas. Línea Raw resultados, problemas, y el código fuente se pueden encontrar en mi GitHub: https://github.com/whisk/leetgptsolver Mis resultados de referencia anteriores (2024): https://hackernoon.com/testing-llms-on-solving-leetcode-problems Raw resultados, problemas y el código fuente se pueden encontrar en mi GitHub: https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver Mis resultados de referencia anteriores (2024): https://hackernoon.com/testing-llms-on-solving-leetcode-problems https://hackernoon.com/testing-llms-on-solving-leetcode-problems https://hackernoon.com/testing-llms-on-solving-leetcode-problems Cubre la imagen creada por DALL·E.