Cadena de suma suprema
Dada una cadena de entrada, devuelve la palabra con la suma más alta de cada uno de sus caracteres unicode.
Reglas
- La entrada debe estar separada por espacios en blanco
- El valor de cada palabra se basa en la suma de cada carácter en el código UTF-16 de la palabra.
- La salida debe ser la primera palabra con el valor más alto (en caso de sumas duplicadas)
Ejemplos
Input: "a b c d e"
Output: "e"
Input: "hello world"
Output: "world"
Input: "this is a test"
Output: "test"
Input: "àà as a test"
Output: "àà"
Input "α ää"
Output: "α"
Input: "🍬 隣隣隣"
Output: "隣隣隣"
Input: "💀 👻 🤡 🦇 🕷️ 🍬 🎃"
Output: "🕷️"
Este es el código de golf, por lo que gana la respuesta más corta. Buena suerte :)
code-golf
string
unicode
text-processing
GammaGames
fuente
fuente
Respuestas:
Jalea , 7 bytes
Pruébalo en línea!
fuente
O§MḢị
["abc", "def"]
. Pero en este punto hay muchas respuestas, así que no recomiendo agregar nuevos métodos de entradaPerl 6 , 34 bytes
Pruébalo en línea!
fuente
R ,
77 69 59 58 5644 bytesUn esfuerzo grupal ahora.
Pruébalo en línea!
Convierte en puntos de código, suma cada palabra, niega, ordena (establemente), devuelve el primer elemento.
Técnicamente, el valor de retorno es un "vector nombrado" cuyo valor es la suma y el nombre es la palabra ganadora, pero esto parece seguir las reglas. Si desea devolver la palabra ganadora como una cadena, tendría que gastar 7 bytes más y envolver lo anterior
names()
.fuente
"💀 👻 🤡 🦇 🕷️ 🍬 🎃"
imprime" 🕷️ "
(con un montón de espacios delante)sort(-sapply(...))
es más corto por 3 bytes.mapply
hace elunlist
gratis.05AB1E , 8 bytes
Pruébalo en línea!
Explicación
fuente
R
realidad invierte la lista después de que se ordena?àà as a test
elàà
ytest
tener la misma suma más grande Unicode. Entonces, sin el reverso setest
generaría en lugar deàà
. Por cierto, Emigna, usa#
para guardar un byte. ;) EDITAR: No importa. Veo que no incluye la entrada en una lista de entradas de una sola palabra. Eso es lamentable.JavaScript (ES6), 81 bytes
Pruébalo en línea!
fuente
f("😂 龘龘龘龘龘")
"😂 龘龘龘龘龘"
?隣(\uf9f1)
fue el del bloque Ideógrafo de compatibilidad CJK en su lugar jajaja. Pensé que era隣(\u96a3)
, el que está en el bloque Ideógrafo Unificado CJK.jq,
61435737 caracteres(
573953código de 33 caracteres + opciones de línea de comando de 4 caracteres)Ejecución de muestra:
Pruébalo en línea!
fuente
Pyth, 8 bytes
Banco de pruebas
Sé que ya hay una respuesta de Pyth, pero siento que esto usa un enfoque bastante diferente
Explicación:y también es muuuucho más cortofuente
PowerShell ,
7452 bytesPruébalo en línea!
Gracias a mazzy por la friolera de -22 bytes.
-split
s la entrada$args
en espacios en blanco, canaliza esosort
con un mecanismo de clasificación particular{...}
y la-u
bandera de nique.Aquí estamos tomando la palabra actual
$_
, cambiándolat
oCharArray
, luego para cada letra la estamos agregando a nuestro$r
esult. Eso convierte la cadena en un número basado en su representación UTF-16.Por una vez, ¡PowerShell con todas las cadenas en UTF-16 en segundo plano es un salvavidas!
Luego encapsulamos esos resultados
(...)
para transformarlos en una matriz y tomar el último[-1]
, es decir, el resultado más grande que es el más cercano al comienzo de la oración. Esto funciona debido a la-u
bandera de nique, es decir, si hay un elemento posterior que tiene el mismo valor, se descarta. Esa palabra se deja en la tubería y la salida es implícita.fuente
sort -u
un reverso? puede ser suficiente+
para convertir en el número?(-split$args|sort{($_|% t*y|%{+$_})-join"+"|iex} -u)[-1]
(-split$args|sort{$r=0;$_|% t*y|%{$r+=$_};$r}-u)[-1]
:)Python 3 ,
5552 bytesPruébalo en línea!
split
método.fuente
split()
, ya que se divide en cualquier grupo de espacios en blanco.MATLAB, 57 bytes
En mi MATLAB R2016a se pasan todas las pruebas, excepto que los emojis no se representan correctamente. Pero los caracteres se devuelven correctamente
fuente
Japt
-h
, 8 bytesEnfoque @Enigma
Pruébalo en línea!
Otro enfoque
Japt
-g
, 8 bytesPruébalo en línea!
fuente
Java (JDK) ,
1179784 bytes-13 bytes gracias @Nevay. Aparentemente no sabía que también puedo usar
var
en Java.Pruébalo en línea!
fuente
s->{var b="";for(var a:s.split(" "))b=a.chars().sum()>b.chars().sum()?a:b;return b;}
Ruby, 45 caracteres.
Ejecución de muestra:
Pruébalo en línea!
Ruby 2.4, 40 caracteres
(No probado)
fuente
Pyth , 33 bytes
Pruébalo en línea!
Es casi seguro que hay una mejor manera de hacer esto, pero gasté demasiado en eso, así que esto funcionará.
Hubiera pasado una reducción a otro mapa en lugar de usar el bucle for, pero no pude hacer que eso funcionara.
fuente
Carbón de leña , 20 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Dividir la cadena de entrada en espacios y asignar a
q
.Calcular la suma de los ordinales de los caracteres en cada palabra y asignar a
h
.Encuentre el índice de la suma más alta e imprima la palabra en ese índice.
fuente
Powershell, 66 bytes
Sencillo. Vea la respuesta de AdmBorkBork para encontrar un uso inteligente de Powershell.
¡Nota! Para corregir el trabajo con Unicode, guarde su archivo de script con
UTF-16
oUTF8 with BOM
codificación.Script de prueba:
Salida:
fuente