Escriba una función que tome una lista o matriz y devuelva una lista de los elementos distintos, ordenados en orden descendente por frecuencia.
Ejemplo:
Dado:
["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]
Valor de retorno esperado:
["Doe","Harry","John","Dick"]
Respuestas:
APL (14)
Esta es una función que toma una lista, por ejemplo:
Explicación:
∘.≡⍨⍵
: compara cada elemento en la matriz con el otro elemento en la matriz, dando una matriz+⌿
: suma las columnas de la matriz, indicando cuántas veces ocurre cada elemento⍒
: dar índices de tipo descendente⍵[
...]
: reordenar⍵
por los índices dados∪
: obtener los elementos únicosfuente
Python 3 -
4743; Python 2 -4039Para Python 3:
Para Python 2:
Manifestación:
fuente
f=lambda n:sorted(set(n),cmp,n.count,1)
39 caracterescmp
y unakey
función. Frio.f=lambda n:sorted(set(n),key=n.count)[::-1]
Mathematica, 31
(Con
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
)fuente
Reverse
, peroSort[GatherBy@n][[-1;;1, 1]]
no funciona :). ¿Algunas ideas?Mathematica (26
37)Con
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
:Mathematica V10 + (26) :
fuente
Perl 6 (36 bytes, 35 caracteres)
»
se puede reemplazar con>>
, si no puede manejar UTF-8. Estoy casi seguro de que esto podría ser más corto, pero laBag
clase es relativamente extraña en su comportamiento (lamentablemente) y no está realmente completa, ya que es relativamente nueva (pero puede contar argumentos).{}
declara una función anónima.Salida de muestra (de Perl 6 REPL):
fuente
Rubí: 34
37caracteres(editado: la solución anterior de 30 caracteres era el cuerpo de la función)
fuente
f=->a{a.sort_by{|z|-a.count(z)}&a}
. El&
hace un uniq.GolfScript, 14 caracteres (19 como función con nombre, también 14 como programa completo)
Este código toma una matriz en la pila y ordena sus elementos únicos en orden descendente por número de ocurrencias. Por ejemplo, si la matriz de entrada es:
entonces la matriz de salida será
Nota: El código anterior es una secuencia simple de declaraciones. Para convertirlo en una función con nombre, envuélvalo entre llaves y asígnelo a un nombre, como en:
Alternativamente, para convertir el código en un programa completo que lea una lista desde la entrada estándar (usando la notación de lista que se muestra arriba) e imprima en la salida estándar, anteponga
~
y agregue`
el código. Se[.
puede omitir en este caso (ya que sabemos que no habrá nada más en la pila), de modo que el programa resultante de 14 caracteres será:¿Como funciona?
:a
guarda una copia de la matriz original en la variablea
para su uso posterior..|
calcula la unión del conjunto de la matriz consigo mismo, eliminando duplicados como efecto secundario.{ }$
ordena la matriz desduplicada utilizando las claves de clasificación personalizadas calculadas por el código dentro de las llaves. Este código toma cada elemento de la matriz, utiliza la resta de la matriz para eliminarlo de la matriz de entrada original guardadaa
y cuenta el número de elementos restantes. Por lo tanto, los elementos se ordenan en orden decreciente de frecuencia.PD. Vea aquí la versión original de 30 caracteres.
fuente
[a\])^
debería ser equivalente a[.;]a\-
. Ordenar por número de elementos que no coinciden es una buena idea.^
colapsa duplicados,-
no. (Y ITYM(
, no)
.) Funcionaría ,[a\](\-
pero no salvaría ningún personaje.R: 23 caracteres
Pero utiliza el no tan buen atajo de
T
aTRUE
...fuente
si esto pudiera encajar aquí:
In sql-server
O
verlo en acción
fuente
select name from #t1 group by name order by count(*) desc
PHP,
63 6261 caracteresManifestación:
fuente
array_count_values()
... Eso es todo lo que tienes que usar (incluidoarsort()
)array_count_values()
no elimina valores duplicados, ni los ordena, como puedo ver.array_count_values
más tiempo?<?$u=array_count_values($_GET);arsort($u);print_r($u);
son 54 bytes en mi opiniónRuby: 59 caracteres
Ejecución de muestra:
fuente
Mathematica, 39 caracteres
fuente
JavaScript (ECMAScript5):
118113 caractereshttp://jsfiddle.net/mblase75/crg5B/
fuente
f=n=>{m={};n.forEach(e=>m[e]=m[e]+1||1);return Object.keys(m).sort((a,b)=>m[b]-m[a])}
. (Actualmente solo en Firefox.)m[n[i]]=-~m[n[i]]
para incrementar, y no necesita {} s alrededor del cuerpo del bucle.Haskell - 53 Personajes
Explicación: las dos primeras líneas son importaciones necesarias, la siguiente línea de código es la firma de tipo (generalmente no es necesaria), la función real es la última línea. La función clasifica la lista por su orden natural, agrupa elementos iguales en listas, ordena la lista de listas por tamaño descendente y toma el primer elemento de cada lista.
longitud total incluidas las importaciones: 120
sin importaciones pero con firma de tipo: 86
función en sí: 53
fuente
Clojure: 43 caracteres
Función:
Demostración (en respuesta):
fuente
Perl
para cumplir con las especificaciones de E / S, necesito 120 caracteres
código más corto puro tomando un artículo por línea e imprimiendo un artículo por línea Solo necesito 55 caracteres
fuente
C #: 111 caracteres
(dentro de una clase)
Una solución simple usando LINQ.
fuente
R (22)
Como función, tomaría 11 caracteres más.
Uso:
fuente
Scala (71)
Sin golf:
fuente
J, 8 bytes
Uso
Los nombres se almacenan como una matriz de cadenas en caja.
Explicación
fuente
CJam, 15 bytes (posiblemente no compitiendo)
Esto puede usar las funciones de CJam desde que se publicó este desafío. Soy demasiado vago para comprobarlo.
fuente