Dada una lista de cadenas, clasifique la lista como números sin saber qué base se utiliza. Los valores de los dígitos también son desconocidos (es posible que '1'
> '2'
).
Como los valores de los dígitos son desconocidos, use la Ley de Benford (o la Ley del primer dígito) para determinar el valor relativo de los dígitos. Para las distribuciones que siguen la Ley de Benford, los dígitos de menor valor aparecen como un dígito principal con mayor frecuencia que los dígitos de mayor valor.
Reglas
- Esto es código golf
- La lista de cadenas puede provenir de una fuente de su elección (stdin, variable, archivo, usuario, etc.)
- Las cadenas están limitadas a caracteres ASCII.
- Los personajes que no aparecen como personajes principales tienen los valores más altos. (suponga que no hay ceros, y ordene estrictamente por frecuencia principal).
- Los caracteres que aparecen como dígitos iniciales el mismo número de veces que otros caracteres se ponderan por igual.
Ejemplo
Sin clasificar
['c','ca','ac','cc','a','ccc','cx','cz','cy']
Ordenados
['c','a','cc','ca','cz','cy','cx','ac','ccc']
Nota: En el ejemplo, 'cz'
, 'cy'
y 'cx'
puede aparecer como el 5, 6 y 7 º elementos en cualquier orden, ya que los dígitos 'x'
, 'y'
y 'z'
tienen el mismo valor.
Respuestas:
Pitón, 59
108112La entrada se proporciona como la lista
a
, y esta expresión produce la lista ordenada (+2 caracteres para asignar a una variable). Esto ordena la lista en reversa por longitud negada y luego por frecuencia.fuente
zip
deNone
. Aunque no funciona en Python 3, que usaríaitertools.zip_longest
.None
no se puede comparar con los enteros en Python 3, por lo que fallará de todos modos.fillvalue
debería establecerse en algo menor que el valor más pequeño.Rubí, 65
Se ordena lexicográficamente según el tamaño de la cadena, luego la frecuencia de cada carácter como no el dígito inicial.
fuente
Java (261)
Los métodos toman una matriz de cadenas y clasifican la matriz en su lugar. La implementación no tiene nada de lujoso, pero sí utiliza las expresiones lambda agregadas a Java 8.
fuente
Javascript (E6) 147
Límite
Valores de frecuencia de hasta 1000000000: para ordenar, los valores de frecuencia se fusionan en una gran cadena acolchada
Sin golf
Sidenote
X-~
incrementa en 1 incluso si el número original X no está definido o NaNUso
Salida:
["c", "a", "cc", "ca", "cx", "cz", "cy", "ac", "ccc"]
fuente