Definición
El rango de una palabra se define como la posición de la palabra cuando todas las permutaciones (o arreglos) posibles de sus letras se ordenan alfabéticamente, como en un diccionario, sin importar si las palabras son significativas o no.
Consideremos estas dos palabras: "azul" y "visto". Para comenzar, escribiríamos todos los arreglos posibles de las letras de estas palabras en orden alfabético:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Ahora miremos desde la izquierda y encontremos la posición de las palabras que necesitamos. Vemos que la palabra "azul" está en la cuarta posición y "visto" está en la décima posición. Entonces, el rango de la palabra "azul" es 4, y el de "visto" es 10. Esta es la forma general de calcular el rango de una palabra. Asegúrese de comenzar a contar solo desde 1.
Tarea
Su tarea es escribir un código para tomar cualquier palabra como entrada y mostrar su rango. El rango debe ser la salida. Tenga cuidado con las palabras que contienen letras repetidas.
Ejemplos
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Puede suponer que la entrada está completamente en minúsculas y la entrada solo contendrá caracteres alfabéticos . Además, si se ingresa un espacio en blanco o una cadena no válida, puede devolver cualquier cosa.
Tanteo
Este es el código de golf , por lo que gana el código más corto.
fuente
O(n log n)
o menos. (lo siento, no Python) Mi envío (C ++) toma 2.53s para resolver la prueba 14.['h', 'e', 'l', 'l', 'o']
en lugar de'hello'
?Respuestas:
Gaia , 4 bytes
Pruébalo en línea!
fuente
Python 3 , 71 bytes
Pruébalo en línea!
fuente
05AB1E , 5 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Pyth , 6 bytes
Banco de pruebas.
Explicación
fuente
Jalea , 5 bytes
Pruébalo en línea! o ver el conjunto de pruebas
Cómo funciona
fuente
Œ¿
no funciona.ṢŒ¿
?1
Python 2 , 78 bytes
Pruébalo en línea!
Python 3 , 73 bytes
Pruébalo en línea!
fuente
CJam , 8 bytes
Pruébalo en línea!
+1 byte debido a un requisito indexado 1.
fuente
Haskell , 56 bytes
Pruébalo en línea!
+6 bytes debido al requisito de 1 indexación. :(
fuente
Japt ,
810 bytes0 indexado.¡Poxy, indexación 1 innecesaria, aumentando mi recuento de bytes en un 25%!Pruébalo
Explicación
á
obtiene todas las permutaciones de la entrada,â
Elimina los duplicados,n
los ordena yb
obtiene el índice de la primera aparición de la entrada,U
.fuente
J ,
2823 bytes-5 bytes gracias a FrownyFrog
¿Cómo funciona?
Pruébalo en línea!
fuente
1+/:~@~.@(A.~i.@!@#)i.]
Tcl, 196 bytes
Tcl no tiene un método incorporado para calcular la próxima permutación lexicográfica, por lo que debemos hacerlo nosotros mismos. Pero espera ... es más corto hacerlo con una función recursiva simple que calcula todas las permutaciones posibles en cualquier orden.
Sin golf:
fuente
K (oK) ,
2318 bytesSolución:
Pruébalo en línea!
Ejemplos:
Explicación:
Genere permutaciones de los índices de la cadena de entrada ordenada, úselas para indexar nuevamente en la cadena de entrada, tome las distinciones, vea dónde coincide la cadena original y agregue una.
fuente
Java 8, 211 bytes
Explicación:
Pruébalo en línea.
fuente
Python 3 ,
183182 bytesLa primera respuesta que se ejecuta en tiempo polinomial!
Pruébalo en línea!
Requiere que la entrada sea todo en mayúsculas, porque ... guarda un byte.
Programa completo, toma entrada
stdin
y salida astdout
.Nombres de variables: (tipo de código no protegido)
Desafortunadamente,
from math import factorial as f
toma exactamente 1 byte más.(Nota no relacionada: revisé el
Combinatorica`
paquete de Mathematica, nada útil, incluidoRankPermutation
)fuente
Casco , 6 bytes
Pruébalo en línea! Siento que debería haber una manera de caer
(
.Explicación:
fuente
Limpio ,
113111 bytesPruébalo en línea!
+3 bytes para manejar la indexación 1: /
fuente
APL (Dyalog Unicode) , 33 bytes (SBCS)
Pruébalo en línea!
fuente
Python 3 ,
105104103 bytesPruébalo en línea!
fuente
Ruby , 49 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
106100 bytesCasos de prueba
Mostrar fragmento de código
¿Cómo?
P () es nuestra función de permutación recursiva. Pero el objeto que abarca P también se usa para almacenar los rangos de las permutaciones.
El código de ajuste ahora se lee como:
fuente
C ++, 230 bytes
Según mi pedido, el código definitivamente debe ser ejecutable tal como está. La cláusula de solo función es básicamente basura. : - @
Gracias a quienes amablemente respondieron la pregunta de qué se puede cortar para mí. En interés de válido código , he evitado el popular GCC-ism de incluir <bits / stdc ++. H>, que siempre he considerado una trampa falsa.
Lo que sigue es lo que queda de mi publicación original:
Siempre estoy inseguro cuando uso C y C ++, lo que cuenta para el total de bytes. Según el programa, la función o el fragmento? la respuesta sigue siendo vaga (supongo que siempre que no sea un fragmento). Así que voy con la más corta de las dos posibilidades.
Aquí no tiene los encabezados necesarios, etc.
Que los campos de golf se reducen a 230 bytes, un tercio de ese estándar requerido por cada programa C ++. (Por lo tanto, no me siento tan mal sin contarlo, pero como nunca he visto una queja firme de ninguna manera, OP tendrá que decirme qué prefiere satisfacer "escriba un código para tomar cualquier palabra como entrada" y mostrar su rango ".)
Tampoco estoy seguro de si esto satisface "el rango debería ser el resultado".
fuente
using namespace std
,#include <algorithm>
encabezados utilizados para definir la función en bytes. Y ... No,main(){}
es un programa válido de C ++ (g ++) a 8 bytes.import math
menudo es necesario. Déjame encontrar el meta relevante ...puts
yprintf
). Su código debe compilarse y ejecutarse correctamente tal cual para que sea válido. Ver: codegolf.meta.stackexchange.com/a/10085/45941main
funciones no se puede ejecutar como está.Perl 5 , 98 + 3 (
-pF
) = 101 bytesPruébalo en línea!
fuente
Octava , 43 bytes
Pruébalo en línea!
fuente
Perl 6 , 53 bytes
Pruébalo en línea!
fuente
PowerShell , 275 bytes
Pruébalo en línea!
Entonces, esto es un desastre sangriento.
PowerShell no tiene ninguna permutaciones incorporada, por lo que este código utiliza el algoritmo de aquí (mucho golf), que está disponible bajo la Licencia pública limitada de Microsoft ( Anexo B en esta página de licencias).
El programa toma la entrada
$s
como una cadena, luego el programa real comienza con$b=New-Object ...
. Estamos construyendo un nuevo objeto StringBuilder , que es (esencialmente) una cadena mutable de caracteres. Esto nos permitirá manejar las permutaciones más fácilmente. Luego llamamos a la funciónn
(configurada$j
en el camino para que sea la longitud de la cadena de entrada),sort
con la-u
marca nique como salida, tome.indexOf()
para encontrar la cadena de entrada y agreguemos1
porque PowerShell está indexado a cero.La función es la parte principal del programa. Toma como entrada un número, y cada iteración contará hasta que alcancemos
1
(es decir, una sola letra). El resto de la función esencialmente llama recursivamente a la función, así como toma la letra actual y la itera en cada posición.Hay un solo bit de lógica adicional
if($s.length-eq1){1;exit}
para tener en cuenta las cadenas de entrada de longitud1
debido a cómo funciona la función de permutaciones.fuente
Pyt , 5 bytes
Explicación:
Pruébalo en línea!fuente