String de soma suprema
Dada uma sequência de entrada, retorne a palavra com a soma mais alta de cada um de seus caracteres unicode.
Regras
- A entrada deve ser separada por espaços em branco
- O valor de cada palavra é baseado na soma de cada caractere no código UTF-16 da palavra
- A saída deve ser a primeira palavra com o valor mais alto (no caso de somas duplicadas)
Exemplos
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: "🕷️"
Isso é código de golfe, então a resposta mais curta vence! Boa sorte :)
code-golf
string
unicode
text-processing
GammaGames
fonte
fonte
Respostas:
Geléia , 7 bytes
Experimente online!
fonte
O§MḢị
["abc", "def"]
. Mas neste momento, há uma série de respostas, então eu não recomendo a adição de novos métodos de entradaPerl 6 , 34 bytes
Experimente online!
fonte
R ,
77 69 59 58 5644 bytesUm esforço de grupo agora.
Experimente online!
Converta em pontos de código, some cada palavra, negue, classifique (de forma estável), retorne o primeiro elemento.
Tecnicamente, o valor de retorno é um "vetor nomeado" cujo valor é a soma e o nome é a palavra vencedora, mas isso parece seguir as regras. Se você quiser retornar a palavra vencedora como uma sequência, precisará gastar mais 7 bytes e agrupar o texto acima em
names()
.fonte
"💀 👻 🤡 🦇 🕷️ 🍬 🎃"
ele imprime" 🕷️ "
(com um monte de espaços na frente dele)sort(-sapply(...))
é mais curto em 3 bytes.mapply
faz ounlist
de graça.05AB1E , 8 bytes
Experimente online!
Explicação
fonte
R
verdade, reverte a lista depois que ela é classificada?àà as a test
doàà
etest
têm o mesmo maior soma unicode. Portanto, sem o inversotest
seria a saída em vez deàà
. Btw, Emigna, use#
para salvar um byte. ;) EDIT: Não importa. Vejo que não envolve a entrada em uma lista de entradas de palavra única. Isso é lamentável.JavaScript (ES6), 81 bytes
Experimente online!
fonte
f("😂 龘龘龘龘龘")
"😂 龘龘龘龘龘"
?隣(\uf9f1)
foi o bloco CJK Compatibility Ideograph ao invés lol. Pensei que fosse隣(\u96a3)
, aquele no bloco Ideograph CJK Unified.jq,
61435737 caracteres( Código de
57395333 caracteres + opções de linha de comando de 4 caracteres)Exemplo de execução:
Experimente online!
fonte
Pitão, 8 bytes
Suíte de teste
Eu sei que já existe uma resposta Pyth, mas acho que isso usa uma abordagem bem diferente
Explicação:e também é muito mais curtafonte
PowerShell ,
7452 bytesExperimente online!
Graças ao mazzy por incríveis 22 bytes.
-split
s a entrada$args
no espaço em branco, canalizasort
com um mecanismo de classificação específico{...}
e o-u
bandeira nique.Aqui estamos pegando a palavra atual
$_
, alterando-at
oCharArra ey
, a cada letra, a adicionamos ao nosso$r
. Isso transforma a string em um número com base em sua representação UTF-16.Pela primeira vez, o PowerShell com todas as seqüências de caracteres sendo UTF-16 em segundo plano é um salva-vidas!
Em seguida, encapsulamos esses resultados
(...)
para transformá-los em uma matriz e pegamos o último[-1]
, ou seja, o maior resultado que é o mais próximo do início da frase. Isso funciona por causa da-u
flag nique, ou seja, se houver um elemento posterior que tenha o mesmo valor, ele será descartado. Essa palavra é deixada no pipeline e a saída está implícita.fonte
sort -u
contrário? pode ser suficiente+
para converter o 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 bytesExperimente online!
split
método.fonte
split()
, pois ele se divide em qualquer grupo de espaços em branco.MATLAB, 57 bytes
No meu MATLAB R2016a todos os testes são aprovados, exceto que os emojis não são renderizados corretamente. Mas os caracteres são retornados corretamente
fonte
Japt
-h
, 8 bytesAbordagem @Enigma
Experimente online!
Outra abordagem
Japonês
-g
, 8 bytesExperimente online!
fonte
Java (JDK) ,
1179784 bytes-13 bytes obrigado @Nevay. Aparentemente, eu não sabia que também posso usar
var
em Java.Experimente online!
fonte
s->{var b="";for(var a:s.split(" "))b=a.chars().sum()>b.chars().sum()?a:b;return b;}
Ruby, 45 caracteres
Exemplo de execução:
Experimente online!
Ruby 2.4, 40 caracteres
(Não testado.)
fonte
Pitão , 33 bytes
Experimente online!
Certamente, existe uma maneira melhor de fazer isso, mas eu gastei muito com isso, então isso funcionará.
Eu teria passado uma redução para outro mapa em vez de usar o loop for, mas não consegui fazer isso funcionar.
fonte
Carvão , 20 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Divida a sequência de entrada em espaços e atribua a
q
.Calcule a soma dos ordinais dos caracteres em cada palavra e atribua a
h
.Encontre o índice da soma mais alta e imprima a palavra nesse índice.
fonte
Powershell, 66 bytes
Direto. Veja a resposta do AdmBorkBork para encontrar um uso inteligente do Powershell.
Nota! Para corrigir o trabalho com unicode, salve seu arquivo de script
UTF-16
ouUTF8 with BOM
codificação.Script de teste:
Resultado:
fonte