¿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 está creando problemas para un concurso de programación es que se enfoca en conceptos fundamentales y no en algo que puede resolver con una llamada a la biblioteca de trucos con funcionalidad presente en un solo lenguaje de programación dado.

Por lo tanto, hacerlo bien en los concursos de programación se trata de dividir el problema en el plano correcto para dividirlo en estructuras de datos que sean fáciles de representar y manipular; en más o menos un lenguaje agnóstico.

Si está viendo el lenguaje de programación como una ventaja competitiva para las competencias de programación, especialmente para el ICPC, casi puedo garantizarle 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 qué tipo de dominios problemáticos he observado que son populares en los concursos)

Dedique ese tiempo a practicar los problemas en el idioma que elija, sin importar el idioma que elija. Los conceptos y la velocidad de implementación en un idioma determinado 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 prioritaria, mapa, etc.) y rutinas comunes (por ejemplo, clasificación, búsqueda, etc.).

Sin embargo, para ciertos tipos de problemas, puede sentirse mejor hacerlo en Java o Python. Como tratar con enteros grandes que no se admiten primitivamente en C ++.

Por lo tanto, sugeriría que se concentre en C ++ pero obtenga alguna exposición de 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 ¿C ++ es más lento que C? En caso afirmativo, ¿es significativa la diferencia?

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

Los lenguajes de descanso como python y java también se usan con mayor frecuencia.

  1. C : al comprender las implementaciones basadas, puede crear sus propias bibliotecas personalizadas, pero lleva tiempo.
  2. C ++: es el mejor porque tiene soporte STL y ningún otro lenguaje puede superarlo. Sin embargo, debe implementar su propia estructura de datos en caso de implementación de gráfico, árbol o árbol de segmentos.
  3. Java: tiene un soporte de clase BigInteger que es realmente útil cuando necesitamos lidiar con números realmente grandes. Como 10 ^ 200
  4. Python: es corto y fácil de usar pero lento. Por lo tanto, recomendaría C ++ como su lenguaje. Aprenda otros idiomas tampoco hay ningún daño en implementar un código particular en varios idiomas.

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

SI..

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

“JAVA”: NO NECESITA MENCIONAR

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

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

LA MAYORÍA DE USTEDES HA ESCUCHADO QUE “PYTHON” ES LENGUA MUY ELEGANTE QUE TIENE UNA SINTAXIS MÍNIMA PARA SER TIPADA …

ENTONCES POR QUÉ C ++?

  1. Por lo que se llama “COMPETITIVO – PROGRAMACIÓN – CODIFICACIÓN” sobre la base de los cuales los mejores mnc: – GOOGLE, FACEBOOK, AMAZON etc. reclutan.
  2. Puede realizar una verificación cruzada del primer punto al referirse a Cómo contratamos: Google Careers “, allí encontrará la importancia de la excelencia en la codificación competitiva de programación para la contratación de Google.
  3. Orden de EJECUCIÓN – TIEMPO : – PYTHON> JAVA> C ++> C
  4. Desde el tercer punto, es evidente que “C” y “C ++” (ya que son lenguajes BASADOS EN COMPILADOR ) toman menos tiempo de ejecución, mientras que “PYTHON” (siendo el lenguaje BASADO EN INTERPRETOR ) toma más tiempo de ejecución. “JAVA” también está basado en COMPILER .
  5. Competitivo – Programación – Codificación, tiene restricciones de “TIEMPO DE EJECUCIÓN” y “MEMORIA” , su programa debe ejecutarse dentro de “1 – segundo” en la mayoría de los “sitios web – competitivos – programación – codificación – sitios web”, excepto “CODEFORCES” que tienen ” 2 segundos de ejecución: restricción de tiempo. Así que aquí vienen los puntos tercero y cuarto en el escenario, que “C” y “C ++” requieren menos tiempo de ejecución mientras que “PYTHON” más.
  6. Debido a que los contenedores predefinidos y los algoritmos estándar presentes en “STANDARD-TEMPLATE-LIBRARY” ) son una gran vida: guardias que lo rescatan para comprender algunos problemas invencibles, ahorrando mucho tiempo de pensar y escribir esos algoritmos. Y el tiempo es factor No estoy hablando en absoluto de “JAVA”

Uno debe comenzar a aprender “C ++” tan pronto como sea posible y hacer de “COMPETITIVO – PROGRAMACIÓN – CODIFICACIÓN” su vida hasta alrededor del cuarto / quinto semestre.

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

AHORA VIENE LA PARTE CONTRARIA: –

“PROYECTOS”

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

Vea, ya que no hay ningún problema de “FUNCIONAMIENTO – TIEMPO – RESTRICCIÓN” contrario a la competencia – programación – codificación

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

Entonces “PYTHON” : –

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

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

PARA TODOS LOS “AMANTES DE JAVA”, RESPONDERÉ TAMBIÉN A JAVA: –

Si ha decidido “APLICACIÓN – DESARROLLO” : –

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

Uno debe comenzar a aprender idiomas para proyectos solo después del 4to / 5to semestre, es decir, en el 5to / 6to semestre.

Como “CAMPUS – COLOCACIONES” están en el 7º semestre, para entonces usted logrará dominio en “COMPETITIVO – PROGRAMACIÓN – CODIFICACIÓN” y tendrá “PROYECTOS” para agregar peso para reanudar.

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

Dejando eso a un lado, esta es una pregunta muy interesante, ya que todas las competiciones son diferentes y tienen diferentes requisitos, te diré los requisitos del ACM ICPC y luego te diré por qué elegimos las herramientas que utilizamos.

El ICPC de ACM tiene muchos problemas complejos, y usted 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 al hecho de que el ejercicio podía generar números ridículamente grandes, y el tipo de datos largo y largo de C ++ no era lo suficientemente grande como para usarlo, por lo que opté por Java para ese ejercicio para que pudiéramos usar la clase de contenedor BigInteger. Pero era la única necesidad de Java. Por lo demás, usamos C ++ simplemente porque estamos más familiarizados con él y tenemos experiencia en el uso de clases STL que simplificaron mucho nuestro trabajo.

Debe tener en cuenta que los jueces son muy estrictos con la salida 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. Encontramos que es más fácil construir nuestras cadenas en C ++ la mayor parte 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) qué tan lento es demasiado lento, por lo que en relación con ese asunto, 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, sería maravilloso.

En general, estoy de acuerdo con el usuario de Quora: no existe el “mejor idioma”. Después de todo, los equipos en las competencias generalmente están formados por 3 a 4 personas (por lo que he visto, este es realmente mi primer año compitiendo), y todos deberían poder hacer todo lo posible para acelerar la resolución de problemas. Por supuesto, no está de más saber más que tus compañeros de equipo cuando se trata de un idioma o de una característica del idioma, pero no debería ser tu enfoque “dominar” algo, porque si nunca vuelves a usar ese algo, entonces podría ser una pérdida de tiempo a largo plazo.

¡Con el que te sientes cómodo!

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

Por ejemplo:

  • Para construir aplicaciones de Android: Java
  • Para inteligencia artificial: Python, Prolog, Lisp
  • Para aplicaciones de Iphone: Objetivo 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 cual SPOJ permite la codificación en cualquier idioma es que todos los idiomas son IGUALMENTE buenos para usarse allí.
Y si ha decidido optar por la 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 estás buscando el mejor lenguaje que puedas aprender, entonces estos son algunos datos que me gustaría que supieras.

Más fácil de aprender: Python
Más poderoso: 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 y 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 general. 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 descansa en C ++.

Sin embargo, a menudo he observado que para programar competiciones, al menos cuando ahorrar un par de minutos por problema puede marcar la diferencia, C ++ funciona mejor que Java porque se deben escribir menos líneas de código. Esto se puede minimizar aún más si se usan macros inteligentes y útiles (lo que todo el mundo hace). Además, C ++ tiene un tiempo de ejecución más rápido (en un orden de 2 o más si el problema es intensivo en IO). Esto a veces permite que pasen soluciones algorítmicamente subóptimas pero rápidas escritas en C ++ a medida que se establecen los límites de tiempo para permitir soluciones algorítmicamente óptimas escritas incluso en lenguajes más lentos.

Entonces, aunque me gusta mucho más Java en comparación con C ++, con mayor frecuencia escribo programas en C ++. C no tiene soporte de biblioteca DS y no se permiten otros lenguajes.

Si nos fijamos en competiciones como ACM-ICPC, por lo que sabía por última vez, solo permitían C, C ++ y Java. Entonces, aunque técnicamente todos los idiomas principales son lo suficientemente potentes como para resolver problemas, prácticamente si desea competir en eventos como este, tiene estas tres opciones para desarrollar su conjunto de habilidades.

Si tuviera que elegir solo uno, siga leyendo.

Entre estos, C podría ser un nivel demasiado bajo para la mayoría de los problemas. Sus bibliotecas no tienen estructuras de datos o algoritmos ligeramente complejos para usar y tendrá que escribir todo por su 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 solo personal; A algunos les gusta la sintaxis de Java, mientras que otros odian su verbosidad. Del mismo modo, 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 tipo 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. Para que puedas 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 stl, y otras cosas similares. Java tiene un poco menos de esto, y también viene cargado con MUCHAS cosas hechas previamente como mapas, listas, ordenaciones, colecciones (como c ++ stl) para que pueda probarlo.

Depende.

Los programadores competitivos utilizan principalmente C ++ 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 buena biblioteca.

Aparte de eso, algunas plataformas son bastante estrictas sobre los límites de tiempo. Algunos tienen multiplicadores (por ejemplo, si el límite de tiempo es 1s para C ++, es 2s para Java, etc.). Cuando el límite de tiempo es estricto, debe elegir un lenguaje como C ++.

Algunas plataformas como Google Code Jam o Facebook Hacker Cup no ejecutan su código, sino que le solicitan que envíe la salida y el código. Puede usar 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. Entonces, la elección del idioma no importa mucho. En realidad, 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 ideal para crear aplicaciones, no funciona 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, se debe crear un objeto de clase de escáner y se debe configurar para tomar la entrada del objeto System.in y también se deben extraer los enteros de la secuencia de entrada usando nextInt (). Demasiado engorroso.
2. No necesita escribir su 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 de procedimiento es la forma más recomendada para abordar la codificación competitiva). Esto es imposible con Java.

Estrictamente hablando, ni siquiera necesitas C ++. Puedes hacer maravillas con C en sí y eso es lo que la gente suele hacer en las competiciones de codificación. Por lo tanto, mi consejo es que también descartes C ++ y uses C. Pero, personalmente, prefiero C ++ porque estoy más familiarizado con él.

Entonces, para resumir, lanza Java e incluso Python para una codificación competitiva. Quédese con C o C ++ para obtener 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 eso 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 concursos de programación como IOI, ICPC, etc., el lenguaje utilizado es muy poco importante. Lo que importa es la rapidez con la que logras crear un algoritmo.

Algunas personas expresan inquietudes sobre E / S en Java diciendo que es engorroso. Confía en mí, muchos programadores competitivos activos de hoy en día usan Java y los mejores programadores hacen envíos extremadamente rápidos. Entonces, 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. Como tiene 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 = “holamundo”

Cía:

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

En C debe tener cuidado con el tamaño de str3 que asigna. 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 lleva 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 final del código compilado de las aplicaciones C. Esa es la razón por la cual C ha resistido la prueba del tiempo 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 gran biblioteca que, aunque no estamos obligados a usar, pero ¿por qué no usar esto? biblioteca cuando estamos usando Java.

Por ejemplo, suponga 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 cadenas y devuelve -1, 0 y 1 en función del resultado de la comparación. Entonces, podemos usar esto directamente en lugar de escribir nuestro propio código para comparar cadenas, lo que nos hace perezosos para 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 memoria también son importantes, elija C. Evolucionará mejor como programador ya que pensará más.

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

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

Para una competencia, lo más importante es:

  1. su experiencia en los paradigmas, limitaciones y soluciones alternativas del lenguaje.
  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 cometiendo errores y corrigiéndolos en ese lenguaje que configurando Eclipse para un proyecto Java. 😀 Pero esa es la forma en que pienso y trabajo mejor. Probablemente encontrará su mejor ajuste basado en su comprensión intuitiva de cómo usar mejor los idiomas con los que ya está familiarizado.

te sugeriré python porque lo es;
1. fácil de codificar
2. fácil de aprender
3. disminuir el tiempo de codificación en 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 N lenguajes de programación que conoces es bastante fácil. Las diferencias de paradigma no son una gran barrera para probar Python. Encontrarás que hay diferencias. No te molestes por las diferencias, búscalas y piensa en ellas. Tenga cuidado de aprender a escribir en estilo pitónico. Es decir, no solo escriba código Java en sintaxis de Python.

Admiro a Python por la forma en que me permite expresar mi código en menos líneas que muchos otros lenguajes, 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 quizás, tanto a favor como en contra.

Más 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 en ese artículo donde la gente también mira muchos otros lenguajes. Puede terminar poniendo Ir en su lista de cosas para aprender.
  • Python Python – Escribir código Python que se ajuste a las expresiones idiomáticas del lenguaje.

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

No te molestes por eso. Es una señal de que la comunidad está sana y trabajando 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 Competiciones (incluido ACM-ICPC).
Prefiero C ++, ya que le proporciona el equilibrio correcto entre la velocidad y las funciones incorporadas.

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

Razones para optar por 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 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, porque los lenguajes más lentos como JAVA, Python, etc., generalmente tienen más tiempo límite que los lenguajes más rápidos como C / C ++ y el límite de memoria del código es generalmente de 256 MB, que es suficiente para los códigos JAVA.
JAVA también está teniendo muy buenas bibliotecas integradas y una cosa más 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, e involucra a los participantes que intentan programar de acuerdo con las “especificaciones proporcionadas”.

Desde mi punto de vista, primero debe aprender el lenguaje C y C ++ y obtener la perfección en estos dos idiomas. Beachse esta es la base de sus otros idiomas como JAVA, PHP, etc. Cuando termines ahora, deberías sentarte y pensar

Piensa en tu interés

Si quieres convertirte en desarrollador web, debes decidir por qué idioma quieres hacer tus cosas de desarrollo web. Hay varios lenguajes en los que puede hacer 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., que debería utilizar principalmente estos cuatro idiomas, que son

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

Recomendaría elegir cualquier persona cercana que pueda aprender del uso. En Polonia, C ++ es el lenguaje 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 tiene una comunidad de competencia de programación a su alrededor, en igualdad de condiciones, probablemente le propondría C ++. Parece ser más popular (al menos según 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 usó. Si solo quiere ver si las competencias de programación son divertidas para usted, elija el idioma en el que se sienta más cómodo (que parece ser Java o PHP en su caso; este último suponiendo que tenga en mente una competencia de formato de entrada abierta), y considere cambiar solo una vez que sepa que está dispuesto a invertir más tiempo en el aprendizaje.

Todos los idiomas son buenos, pero personalmente recomiendo C ++.
Motivo: STL. No tiene que definir su función de clasificación cada vez que crea un nuevo programa o define la misma función dos veces para los diferentes tipos de datos, en su lugar, 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 es confiable y rápido.

Feliz codificación !! 😀