Inspirado por la desafortunada clasificación de un número de dígitos sin usar una matriz , pero pensé que era un código de golf mejor que la pregunta SO.
Dado un entero positivo, clasifique los dígitos en ese entero.
¡La puntuación más baja gana!
- Comience con 0 puntos.
- Agrega un punto por personaje.
- Agregue 20 puntos por cada matriz que use.
- Agregue 10 puntos por cada cadena de caracteres múltiples en su código. (Excepto la entrada inicial siempre que se convierta a un entero sin ninguna otra operación realizada en él).
- Agregue 32 puntos si la cantidad máxima de dígitos que su programa puede manejar está limitada por su programa (en oposición a la máquina).
- Resta 10 puntos si tu código puede cambiar la dirección del orden dado otro argumento (lo que quieras, pero por ejemplo 0 para el orden descendente y 1 para el ascendente).
Cada idioma es diferente, pero la idea es evitar cualquier tipo de piratería iterativa de dígitos.
Ejemplo:
Entrada : 52146729
Salida : 97654221 o 12245679
Notas:
- Utilice las capacidades de clasificación incorporadas que proporciona su lenguaje de programación, pero si esa función de clasificación involucra cadenas o matrices, ¡tome la pena!
- Puede escribir la solución como una función que toma un número entero directamente, o como un programa que toma un argumento de argv, un archivo o secuencia y lo convierte en un número entero. Siempre y cuando lo convierta a un entero de inmediato y descarte la entrada char * original sin realizar ninguna otra operación, no se aplica ninguna penalización.
- Las penalizaciones se aplican no solo a los literales de cadena en el texto de su programa, sino a cualquier parte de su función de programa que posiblemente ingrese o genere una cadena o iterable. Por ejemplo, JavaScript
String.prototype.split
tiene al menos una cadena como entrada (this
) y una matriz como salida, por lo que +30 por usar eso. - He tratado de hacer que estas reglas guíen el principio del diseño del algoritmo, no la E / S inicial / final (de ahí la nota n. ° 2). No creo que la penalización deba aplicarse
int(input())
incluso siinput
la firma dice que devuelve una cadena, siempre que esa expresión sea el punto de entrada inicial del programa. Del mismo modo, si el resultado final del programa esprint(x)
yx
debe ser una cadena, la penalización no se aplica a la última operación de conversión de cadenas. Dicho todo esto, nunca dije explícitamente que esto tenía que ser un programa o de dónde debía venir o ir la E / S. Una función que toma unint
y devuelve unint
serviría, y no sufriría estas ambigüedades.
" "
Cuenta como una cadena de caracteres múltiples ? Un solo personaje no se consideraría como "multi" ...