¿Cuál es el mejor lenguaje para la programación competitiva? Por ejemplo, fuera de C, C ++, Java y Python, ¿cuál sería el mejor lenguaje para especializarse en competencias de programación?

Una parte importante de alguien que configura problemas para un concurso de programación es que se centran en conceptos fundamentales en lugar de algo que puede resolver con una llamada de biblioteca de trucos con funcionalidad presente en un solo lenguaje de programación determinado.

Por lo tanto, hacerlo bien en los concursos de programación tiene que ver con dividir el problema en el plano correcto para descomponerlo en estructuras de datos que son fáciles de representar y manipular; En más o menos un lenguaje agnóstico.

Si está considerando el lenguaje de programación como una ventaja competitiva para las competiciones de programación, especialmente para el ICPC, casi puedo asegurarle que se está preparando para el fracaso. (Vea mi respuesta a ¿El éxito de ACM-ICPC o IOI se correlaciona con el éxito de la industria? Para obtener ejemplos de los tipos de dominios de problemas que he observado como populares en los concursos)

Pase ese tiempo practicando problemas en el idioma que elija, no importa el idioma que elija. Los conceptos y la velocidad de implementación en un idioma dado son muy importantes, pero la elección del idioma no.

C ++ es el lenguaje más preferido para la programación competitiva, debido a su rendimiento y la disponibilidad de la potente biblioteca de plantillas estándar (STL) que tiene una implementación eficiente para estructuras de datos comunes (pila, cola, cola de prioridad, mapa, etc.) y rutinas comunes (por ejemplo, clasificación, búsqueda, etc.).

Sin embargo, para ciertos tipos de problemas puede sentirse mejor si lo hace en Java o Python. Como tratar con grandes enteros que no se admite principalmente en C ++.

Por lo tanto, sugeriría que se centre en C ++ pero que se exponga a otro lenguaje como python o Java.

La programación competitiva tiene muchos requisitos, como la velocidad y la precisión.

La respuesta de Anders Kaseorg a ¿Es C ++ más lento que C? Si es así, ¿es la diferencia significativa?

El enlace de arriba muestra la comparación entre c y c ++.

Los lenguajes de descanso como python y java también son los más utilizados.

  1. C – Entendiendo las implementaciones basadas, puede crear sus propias bibliotecas personalizadas usándolas, pero esto lleva tiempo.
  2. C ++: es el mejor porque tiene soporte STL y ningún otro idioma puede superarlo. Sin embargo, debe implementar su propia estructura de datos en el caso de la implementación de Graph, Tree o Segment Tree.
  3. Java: tiene un soporte de clase BigInteger que es realmente útil cuando necesitamos tratar con números realmente grandes. Tales como 10 ^ 200
  4. Python: es corto y fácil de usar, pero lento. Así que recomendaría C ++ como tu lenguaje. Aprender otros idiomas también, no hay ningún daño en la implementación de un código en particular en varios idiomas.

C (para ser más específico C ++)

SÍ..

LO LEAS CORRECTAMENTE “C ++” NO “PYTHON”

“JAVA”: NO NECESITA MENCIONAR

( JAVA : los códigos son mucho más largos que “C ++” y “PYTHON” )

Entonces, ¿quién quiere escribir mucho y también si usted es una excepción, entonces el tiempo siempre es un factor en “COMPETITIVO – PROGRAMACIÓN – CÓDIGO”?

LA MAYORÍA DE USTED HA OÍDO A “PYTHON” PARA SER UN LENGUAJE MUY ELEGANTE QUE TIENE SINTAXIS MÍNIMO PARA SER TIPADO …

ENTONCES, ¿POR QUÉ C ++?

  1. Para los llamados “COMPETITIVO – PROGRAMACIÓN – CODIFICACIÓN” sobre la base de los cuales se encuentran los miembros de mayor categoría: – GOOGLE, FACEBOOK, AMAZON, etc.
  2. Puede realizar una verificación cruzada del primer punto refiriéndose a Cómo contratamos – Carreras de Google “, allí encontrará la importancia de la excelencia en la programación competitiva, la codificación para el reclutamiento de Google.
  3. Orden de RUN – HORA : – PITÓN> JAVA> C ++> C
  4. Desde el 3er punto, es evidente que “C” y “C ++” (ya que son lenguajes basados ​​en COMPILER ) toman menos tiempo de ejecución, mientras que “PYTHON” (siendo el lenguaje basado en INTERPRETOR ) toman la mayoría del tiempo de ejecución. “JAVA” también está basado en compiladores .
  5. Competitivo – Programación – Codificación, tiene restricciones de “TIEMPO DE EJECUCIÓN” Y “MEMORIA” , su programa debe ejecutarse dentro de “1 – seg” en la mayoría de los “sitios en línea – competitivos – programación – codificación -“, excepto “CODEFORCES” que tienen ” 2 – seg. ” Restricción de tiempo de ejecución. Así que aquí vienen los puntos 3 y 4 en el escenario, que “C” y “C ++” toman menos tiempo de ejecución mientras que “PYTHON” más.
  6. Debido a sus contenedores predefinidos y algoritmos estándar presentes en “STANDARD-TEMPLATE-LIBRARY” ), que son excelentes salvaguardas que te rescatan para descubrir algunos problemas invencibles, ahorrando mucho tiempo de pensamiento y escribiendo esos algoritmos. Y el tiempo es un factor del que no estoy hablando en absoluto de “JAVA”

Uno debe comenzar a aprender “C ++” lo antes posible y hacer de “COMPETITIVO – PROGRAMACIÓN – CODIFICACIÓN” su vida hasta el cuarto o quinto semestre.

“C ++” para “CAMPUS – COLOCACIONES” SOLAMENTE

AHORA VIENE PARTE CONTRA:

“Proyectos”

(Los “PROYECTOS” deben pensarse después del 4º / 5º semestre)

Vea, ya que no hay ningún problema de “RUN – TIME – CONSTRAINT” en contra de la competitiva – programación – codificación

Y tienes que codificar una tremenda cantidad de líneas en relación con la competencia – programación – codificación

Así que “PYTHON” : –

1. El lenguaje más amigable para el programador con la sintaxis más elegante que es mínimo para escribir.

2. Y si se ha decidido por el proyecto “WEB – DESARROLLO” . Debido a “DJANGO” .

PARA TODOS LOS “JAVA – AMANTES”, DARÉ RESPETO A JAVA TAMBIÉN: –

Si ha decidido “APP – DESARROLLO” :

APLICACIÓN – DESARROLLO = JAVA (BACK – END) + XML (FRONT-END)

Uno debe comenzar a aprender idiomas para proyectos solo después del cuarto / quinto semestre, es decir, en el quinto / sexto semestre.

Como “CAMPUS – PLACEMENTS” se encuentra en el séptimo semestre, así que para entonces logrará la competencia en “COMPETITIVO – PROGRAMACIÓN – CODIFICACIÓN” y tendrá “PROYECTOS” para agregar ponderación para reanudar.

El sábado pasado, participé en una competencia local de ACM ICPC, así que haré todo lo posible para dar todos los detalles posibles en esta respuesta.

Dejando eso a un lado, esta es la pregunta más interesante, ya que todas las competiciones son diferentes y tienen diferentes requisitos. Le diré los requisitos del ACM ICPC y luego le diré por qué elegimos las herramientas que usamos.

El ACM ICPC tiene muchos problemas complejos, y está limitado en el uso de C, C ++ o Java. Para esta ronda en particular, usamos C ++ y solo C ++; pero en la ronda anterior, nosotros (como en mi equipo) decidimos usar Java para un ejercicio debido a que el ejercicio podría generar números ridículamente grandes, y el tipo de datos largo y largo de C ++ no era lo suficientemente grande para usarlo, por lo que optamos por Java para ese ejercicio, así podríamos usar la clase de envoltorio BigInteger. Pero era la única necesidad de Java. Para el resto, usamos C ++ simplemente porque estamos más familiarizados con él y tenemos experiencia en el uso de clases STL que simplificaron mucho más nuestro trabajo.

Debe tener en cuenta que los jueces son muy estrictos con los resultados y el tiempo de ejecución de sus programas. Si sus programas tardan demasiado en hacer su trabajo, recibirá un mensaje de tiempo de espera y su envío será rechazado. Si tiene un espacio adicional al final de una línea de salida, el juez lo penaliza. Descubrimos que es más fácil construir nuestras cadenas en C ++ la mayoría del tiempo (aunque con Java no presenta problemas, pero lleva más tiempo escribir una instrucción para imprimir una línea que C / C ++). También usamos C ++ debido a su velocidad, porque no sabíamos (y aún no sabemos) cuán lento es demasiado lento, por lo que decidimos usar C ++ sobre Java. Conozca sus herramientas y cuándo usarlas. Ahora, si tienes la oportunidad de aprender Python y usarlo en una competencia, entonces eso sería lo más maravilloso.

En general, estoy de acuerdo con el usuario de Quora: no hay un ‘mejor lenguaje’. Después de todo, los equipos en las competiciones generalmente están compuestos de 3 a 4 personas (por lo que he visto, este es realmente mi primer año de competencia), y todos deberían poder hacer todo lo posible para acelerar la resolución de problemas. Por supuesto, no se pierde nada con saber más que sus compañeros de equipo cuando se trata de un idioma o de una función de idioma, pero no debe centrarse en “dominar” algo, porque si nunca vuelve a usar ese algo, entonces Podría ser una pérdida de tiempo a largo plazo.

¡Con el que te sientas cómodo!

Siempre se puede pensar en un lenguaje de programación, adecuado (o ‘mejor’) para un propósito particular.

Por ejemplo:

  • Para la construcción de aplicaciones de Android: Java
  • Para inteligencia artificial: Python, Prolog, Lisp.
  • Para aplicaciones de Iphone: Objective C

y la lista continúa.

Pero cuando aplicamos la misma pregunta a la codificación competitiva, suena absurdo .

La única razón por la que SPOJ permite la codificación en cualquier idioma es que todos los idiomas son IGUALMENTE buenos para usarlos allí.
Y si ha decidido optar por una codificación competitiva, lo más probable es que se sienta cómodo (bastante competente) con al menos un lenguaje de programación.


Ahora, si eres nuevo en el mundo de la programación y buscas el mejor lenguaje que puedas aprender, estos son algunos datos que me gustaría que supieras.

Más fácil de aprender: Python
Los más poderosos: C ++
Lo más probable es que sea útil en 10 años: Java

PD La sugerencia hecha en la parte inferior se tomó de aquí: Los diferentes usos de los lenguajes de programación.

Aunque, como dicen Kavinay & Kartik, todos los idiomas son más o menos iguales y lo que más importa es la solución algorítmica. Esa es más o menos la regla de oro. Dentro de nuestro equipo, cambiamos entre C ++ y Java muy a menudo dependiendo del problema, por ejemplo, hago todos los problemas de BigInt / String / Hashtable usando Java y todo lo demás en C ++.

Sin embargo, a menudo he observado que para las competiciones de programación, al menos cuando se ahorra un par de minutos por problema puede hacer una diferencia, C ++ funciona mejor que Java porque es necesario escribir menos líneas de código. Esto se puede minimizar aún más si uno está usando macros inteligentes y útiles (lo que todos hacen). Además, C ++ tiene un tiempo de ejecución más rápido (en un orden de 2 o más si el problema requiere IO). Esto a veces permite que pasen las soluciones algorítmicamente subóptimas pero rápidas escritas en C ++, ya que los límites de tiempo se establecen para permitir soluciones algorítmicamente óptimas escritas incluso en idiomas más lentos.

Entonces, aunque me gusta Java mucho más en comparación con C ++, la mayoría de las veces escribo programas en C ++. C no tiene soporte de biblioteca de DS y no se permiten otros idiomas.

Si observas competiciones como ACM-ICPC, por lo que supe por última vez, solo permitían C, C ++ y Java. Entonces, mientras que técnicamente todos los lenguajes principales son lo suficientemente poderosos como para resolver problemas, prácticamente si quieres competir en eventos como este, tienes estas tres opciones para desarrollar tu conjunto de habilidades.

Si tuvieras que elegir solo uno, sigue leyendo.

Entre estos, C podría ser un nivel demasiado bajo para la mayoría de los problemas. Las bibliotecas no tienen estructuras de datos o algoritmos ligeramente complejos para usar y tendrás que escribir todo por tu cuenta. Así que realmente no lo recomendaría.

Java y C ++ parecen estar igualmente bien cargados: C ++ con STL y Java con colecciones. Su elección aquí podría ser simplemente personal; a algunos les gusta la sintaxis de Java, mientras que otros odian su verbosidad. De manera similar, a algunos les puede gustar que Java como lenguaje sea mucho más estricto, por lo que es más fácil de programar rápidamente (sin punteros y menos problemas de desbordamiento de tipos de datos con los que lidiar). Java también proporciona una clase BigInteger que a veces puede ser útil.

C ++ es más rápido, pero creo que la mayoría de los jueces en línea explican la diferencia de rendimiento. Así que puedes elegir cualquiera.

Puedo decir que para un principiante, C ++ puede ser un poco abrumador debido a sus diferentes tipos y tamaños de datos, sintaxis e iteradores de STL y otras cosas similares. Java tiene menos de un poco menos de esto, y también viene cargado con MUCHAS cosas previamente hechas como mapas, listas, clasificaciones, colecciones (como c ++ stl) para que puedas darle una oportunidad.

Depende.

Los programadores competitivos usan C ++ principalmente debido a STL y Java. Son compatibles en casi todas las plataformas que he visto. C no se usa debido a la falta de colecciones en la biblioteca estándar. Python también es compatible con muchas plataformas y tiene una bonita biblioteca.

Aparte de eso, algunas plataformas son bastante estrictas con los límites de tiempo. Algunos tienen multiplicadores (por ejemplo, si el límite de tiempo es 1s para C ++, es 2s para Java y así sucesivamente). Cuando el límite de tiempo es estricto, debes elegir un idioma como C ++.

Algunas plataformas como Google Code Jam o Facebook Hacker Cup no ejecutan su código, en su lugar le piden que envíe la salida y el código. Puede utilizar cualquiera de los idiomas para los que está disponible un compilador / intérprete gratuito. Si obtiene el algoritmo correcto, el tiempo dado para obtener y enviar la salida es más que suficiente. Así que la elección del idioma no importa mucho. De hecho, presenté una solución en Python en un concurso en vivo y me aceptaron.

C ++. No hay duda sobre eso. C ++ es mucho más rápido que Java. Si bien Java es excelente para crear aplicaciones, no se combina bien con la programación competitiva. Me siento más cómodo con C ++ porque:
1. Tomar entrada es mucho más fácil con C ++. Todo lo que tienes que hacer es usar cin o scanf. En Java, debe crearse un objeto de clase de escáner y debe configurarse para tomar entrada del objeto System.in y también deben extraerse los enteros de la secuencia de entrada usando nextInt (). Demasiado engorroso
2. No necesitas escribir tu código en una clase en C ++, pero en Java todo está orientado a objetos. Tienes que usar objetos y clases para todo.
3. Aunque se considera que C ++ es un lenguaje de programación orientado a objetos, tiene la opción de usarlo como C, es decir, de forma orientada a procedimientos (la forma más recomendada para abordar la codificación competitiva es el procedimiento). Esto es imposible con Java.

Estrictamente hablando, ni siquiera necesitas C ++. Puedes hacer maravillas con C en sí mismo y eso es lo que la gente suele hacer en las competencias de codificación. Por lo tanto, te aconsejo que elimines C ++ y utilices C. Pero, personalmente, prefiero C ++ porque estoy más familiarizado con él.

Entonces, para resumir, descarte Java e incluso Python para una codificación competitiva. Stick con C o C ++ para los mejores resultados.

No importa qué idioma uses. Algunos dicen que C ++ es más rápido que Java, pero en la mayoría de los concursos de programación no importa porque todos los problemas se prueban tanto en C ++ como en Java, por lo que puede estar seguro de que siempre existe una solución en Java. Además, muchos concursos de programación tienen límites de tiempo más altos para Java porque es un poco más lento.

En los concursos de programación como IOI, ICPC, etc., el lenguaje utilizado importa mucho menos. Lo que importa es la rapidez con la que consigues crear un algoritmo.

Algunas personas expresan su preocupación por la E / S en Java diciendo que es engorroso. Confíe en mí, muchos programadores activos y competitivos utilizan Java en la actualidad y los mejores programadores hacen envíos increíblemente rápidos. Por lo tanto, tener que escribir algo como in.nextInt() apenas importa en un concurso de programación.

Bueno, creo que Python es más rápido de codificar, si el tiempo de ejecución no es una preocupación. Ya que tienes muchas más bibliotecas y API en Python en comparación con C o C ++, será más rápido. Por ejemplo, tome un ejemplo de concatenación de 2 cadenas en python v / s C:

En python:

str1 = “hola”
str2 = “Mundo”
str3 = str1 + str2 # str3 = “helloWorld”

Cía:

str1 [] = “hola”
str2 [] = “Mundo”
char str3 [256];
snprintf (str3, sizeof (str3), “% s% s”, str1, str2);

En C debes tener cuidado con el tamaño de str3 que asignes. Y también sizeof () funciona en este ejemplo, pero si está utilizando un puntero, tendrá que escribir más código para asignar memoria dinámica (use malloc).

Hay muchas otras formas de hacer esto de manera más eficiente en C, pero el punto es que toma tiempo y es más propenso a errores, mientras que en Python es más intuitivo y natural. Pero Python nunca puede superar el tiempo de ejecución y el tamaño del código compilado final de las aplicaciones C. Esa es la razón por la que C ha resistido la prueba del tiempo durante tanto tiempo.

Recomendaría usar C, ya que tenemos que escribir cada pieza de lógica por nuestra cuenta y esto nos obligará a pensar, mientras que con Java, tenemos esta enorme biblioteca que, aunque no estamos obligados a usar, ¿por qué no usarla? biblioteca cuando estamos usando Java.

Por ejemplo, supongamos que desea ordenar cadenas. En Java, la interfaz Comparable se implementa mediante la clase String, lo que significa que hay un método compareTo () que compara dos Strings y devuelve -1, 0 y 1 según el resultado de la comparación. Por lo tanto, podemos usar esto directamente en lugar de escribir nuestro propio código para comparar cadenas, lo que nos hace perezosos a pensar. Pero en C tenemos que escribir nuestro propio código para esto.

Dado que el motivo es la programación competitiva, donde el tiempo de ejecución y el espacio de la memoria también son importantes, opte por C. Evolucionarás mejor como programador y pensarás más.

Aprender Java en una etapa posterior no será más difícil.

No te obsesiones con el mejor lenguaje. Es un concepto nebuloso. 😀

Para una competición lo que más importa es:

  1. Su experiencia en los paradigmas, limitaciones y soluciones alternativas del idioma.
  2. la base de código preexistente y las mejores prácticas que el lenguaje le permite aprovechar al resolver el problema de la competencia.

Me encanta la velocidad bruta de Python porque soy más rápido al cometer errores y corregirlos en ese idioma que al configurar Eclipse para un proyecto Java. 😀 Pero así es como creo y mejor trabajo. Es probable que encuentre su mejor ajuste basado en su comprensión intuitiva de cómo utilizar mejor los idiomas con los que ya está familiarizado.

te sugeriré python porque es;
1. fácil de codificar
2. fácil de aprender
3. Disminuir el tiempo de codificación en las competiciones.


Python tiene bastante en común con Java y C ++ que agregar una muesca en tu cinturón para Python como otro de los lenguajes de programación N que conoces es bastante fácil. Las diferencias de paradigma no son una gran barrera para probar Python. Usted encontrará que hay diferencias. No resientas las diferencias, búscalas y piensa en ellas. Tenga cuidado de aprender a escribir en estilo pitónico. Es decir, no solo escriba el código Java en la sintaxis de Python.

Admiro a Python por la forma en que me permite expresar mi código en menos líneas que en muchos otros idiomas, pero aún así ser legible y modificable. Es muy adecuado para el desarrollo incremental. Podría decirse que la falta de tiempo de compilación para verificar las cosas exige que sea diligente en probar todo. Eso es tal vez, tanto un pro como una estafa.

Otros artículos relacionados con la lectura de mi blog:

  • Código real – C vs. Python para un pequeño problema – no te pierdas los comentarios sobre ese artículo donde la gente también mira otros muchos idiomas. Puede que termines poniendo Go en tu lista de cosas para aprender.
  • Python Python: escritura del código de Python que se adapta a las expresiones idiomáticas del idioma.

C ++ es un lenguaje relativamente grande. En aras de la compatibilidad, solo le agregan funciones. Stroustrup mismo se lamenta de que la gente tiende a escribir en C con algunas características nuevas en lugar de explotar adecuadamente las últimas incorporaciones a C ++. Entonces, a medida que agrega a la lista de idiomas que sabe, si el idioma todavía está evolucionando, se necesita algo de energía para mantenerse al día.

No resientas eso. Es una señal de que la comunidad está sana y trabaja para mejorar las cosas. ¡Buceo en!

– por R. Drew Davis

Los lenguajes de programación más utilizados en la programación competitiva son Java, C ++, ya que son aceptados globalmente en Competencias (incluido ACM-ICPC).
Prefiero C ++, ya que te proporciona el equilibrio correcto entre velocidad y funciones integradas.

Mi pensamiento personal será que debes elegir C ++ en lugar de C

Razones para optar a C ++

1) Muy bien construido en STL (Biblioteca de plantillas estándar)
2) Más rápido que JAVA (JAVA tarda mucho más tiempo en ejecutarse que en C ++ o C)
3) Memoria eficiente (la memoria utilizada por el código C ++ es muy inferior en comparación con el código JAVA)

Aunque los dos últimos puntos no deberían ser un problema, los lenguajes más lentos, como JAVA, python, etc., suelen tener un límite de tiempo mayor que los lenguajes más rápidos como C / C ++ y el límite de memoria del código suele ser de 256 MB, lo cual es suficiente para los códigos JAVA.
JAVA también está teniendo muy buenas bibliotecas integradas y una cosa más es que JAVA es más popular que C ++ en el desarrollo de software.

Básicamente, la programación competitiva no es un deporte mental que generalmente se realiza a través de Internet o redes locales, lo que implica que los participantes intenten programar de acuerdo con las “especificaciones proporcionadas”.

Desde mi punto de vista, primero debes aprender el lenguaje C y C ++ y obtener la perfección en estos dos idiomas. Además, esta es la base de tus otros lenguajes como JAVA, PHP, etc. Cuando hayas terminado, deberías sentarte y darte un pensamiento.

Piensa en tu interes

Si quieres convertirte en un desarrollador web, tienes que decidir en qué idioma quieres desarrollar tu web. Hay varios idiomas en los que puedes hacer el desarrollo web como C, C ++, JAVA, PYTHON, PHP, RUBY (tendencias en la India hoy en día), CORE JAVA, JAVASCRIPT, etc.

La otra opción es si desea trabajar con empresas multinacionales como Google, Facebook o Yahoo, etc., de lo que debería utilizar estos cuatro idiomas, que son principalmente

  1. do
  2. C ++
  3. Java
  4. Pitón

Recomendaría elegir cualquier persona cercana que pueda aprender de su uso. En Polonia, C ++ es el idioma de elección. He visto a los rusos usar mucho Java, por lo que varía de un lugar a otro. Y aprender de los demás es muy importante para mejorar.

Si no tienes una comunidad de competencia de programación a tu alrededor, en igualdad de condiciones, probablemente propondría C ++. Parece ser más popular (al menos por las estadísticas de Google Code Jam), por lo que tendrá más lugares para elegir buenos patrones.

Sin embargo, C ++ puede ser un poco extraño si nunca lo usaste. Si solo quieres ver si las competiciones de programación son divertidas para ti, elige el idioma en el que te sientas más cómodo (lo que parece ser Java o quizás PHP en tu caso; este último suponiendo que tienes una competencia de formato de entrada abierta en mente), y considere cambiar solo una vez que sepa que está dispuesto a invertir más tiempo en aprender.

Todos los idiomas son buenos, pero personalmente recomiendo C ++.
Razón: STL. No es necesario que defina su función de clasificación cada vez que realice un nuevo programa o que defina la misma función dos veces para los diferentes tipos de datos, en lugar de eso solo podemos usar el contenedor genérico y los algoritmos en STL.

Esto ahorra mucho tiempo, código y esfuerzo durante la programación, por lo que C ++ STL se usa mucho en la programación competitiva, además de ser confiable y rápido.

Feliz codificacion !! 😀