Yüce Sum String


15

Yüce Sum String

Bir giriş dizesi verildiğinde, unicode karakterlerin her birinin en yüksek toplamına sahip sözcüğü döndürün.

kurallar

  • Girdi boşlukla ayrılmalıdır
  • Her kelimenin değeri, sözcüğün UTF-16 kodundaki her karakterin toplamına dayanır
  • Çıktı en yüksek değere sahip ilk sözcük olmalıdır (yinelenen toplamlar olması durumunda)

Örnekler

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: "🕷️"

Bu kod golf, bu yüzden en kısa cevap kazanır! İyi şanslar :)


Her zaman en az bir boşluk olacak mı (en az 2 kelime)?
Emigna

2
Bu, Unicode yerine ASCII ile daha ilginç olurdu, çünkü daha fazla dil katılmış olabilir. Unicode desteğine ihtiyaç
Luis Mendo

1
Çoğunlukla Unicode kullandım çünkü emoji lol
GammaGames

2
Mevcut yanıtların çoğunda UTF-8 veya UTF-32 kod birimlerinin toplamı kullanıldığından, bazı ek test senaryoları eklemelisiniz. Örneğin "αa" UTF-8 (383 <1818) ve UTF-16 (945> 456) ile farklı sonuçlar verir.
nwellnhof

1
Evet, satırsonu alanýna izin verildi. Sekmeler de!
GammaGames

Yanıtlar:


3

Jöle , 7 bayt

ḲOS$ÐṀḢ

Çevrimiçi deneyin!

ḲOS$ÐṀḢ
Ḳ        Split input on spaces
    ÐṀ   Give words that have maximum of:
   $       Monad:
 O           ord(each character)
  S          sum
      Ḣ  First word that gives the max ord-sum.

Spec kelimelerin listesi olarak girilmesine izin verilirseO§MḢị
Jonathan Allan

@JonathanAllan OP buna izin verildiğini nerede söyledi?
dylnan

sadece eğer ...
Jonathan Allan

@JonathanAllan Ah, yakaladım.
dylnan

1
@GammaGames Dizelerin bir listesini alabilirsem, örneğin yardımcı olabilir ["abc", "def"]. Ama bu noktada çok fazla cevap var, bu yüzden yeni giriş yöntemleri eklemenizi
önermiyorum


6

R , 77 69 59 58 56 44 bayt

Şimdi bir grup çabası.

'^'=mapply
sort(-sum^utf8ToInt^scan(,""))[1]

Çevrimiçi deneyin!

Kod noktalarına dönüştürün, her kelimeyi toplayın, negatif, (kararlı) sıralama, ilk öğeyi döndürün.

Teknik olarak dönüş değeri, değeri toplam ve adı kazanan sözcük olan bir "adlandırılmış vektör" dür, ancak bu kurallara uyuyor gibi görünüyor. Kazanan kelimeyi dize olarak döndürmek isterseniz, 7 bayt daha harcamanız ve yukarıdakileri girmeniz gerekir names().


Kelimenin önünde boşluklar var mı? Üzerinde "💀 👻 🤡 🦇 🕷️ 🍬 🎃"" 🕷️ "
koştuğumda

2
@GammaGames çıktı, R'de "adlandırılmış vektör" olarak adlandırılan şeydir. Bu durumda değer, kazanan kelimenin kod noktalarının toplamıdır ve ad, onunla birlikte yazdırılır, bu durumda kazanan kelime kendisi. Ad, altındaki sayıya sağa hizalanır.
ngm

Ah, temiz! Kurallara uyuyor gibi görünüyor, bu yüzden izin vereceğim. Güzel giriş!
GammaGames

sort(-sapply(...))3 byte daha kısadır.
Giuseppe

3
@JayCe mapplyyapar unlistücretsiz.
ngm

5

05AB1E , 8 bayt

ð¡RΣÇO}θ

Çevrimiçi deneyin!

açıklama

ð¡          # split input on spaces
  R         # reverse the resulting list
   Σ  }     # sort by
    ÇO      # sum of character codes
       θ    # take the last

Vay canına, adanmış golf dillerinde yapılan cevaplara her zaman hayran kaldım!
GammaGames

Elde edilen listeyi neden tersine çevirmeniz gerekiyor? Yine de sıralanacak değil mi? Yoksa Rsıralandıktan sonra listeyi gerçekten tersine çeviriyor mu?
FireCubez

@FireCubez Test durumu àà as a testiçin ààve testaynı en büyük unicode toplamına sahiptir. Yani testbunun yerine ters çıktı olmazdı àà. Btw, Emigna, #bir bayt kaydetmek için kullan . ;) EDIT: Boş ver. Görüyorum ki tek kelimelik girdiler için girdiyi bir listeye sarmıyor .. Bu talihsiz.
Kevin Cruijssen

4

JavaScript (ES6), 81 bayt

s=>s.split` `.map(m=s=>m=[...s].map(c=>t+=c.charCodeAt(),t=0)&&t<=m?m:(r=s,t))&&r

Çevrimiçi deneyin!


Bu meydan okumayı yazarken geldiğim koddan çok daha iyi, benimki ~ 200 karakter uzunluğundaydı!
GammaGames


@ guest271314 ikinci son test davasında ve bazı aşırı durumlarda f("😂 龘龘龘龘龘")
işe yaramıyor

@ShieruAsakoto Burada doğru sonucu döndürüyor gibi görünüyor tio.run/##y0osSyxOLsosKNHNy09J/… ? Beklenen sonuç ne için "😂 龘龘龘龘龘"?
guest271314

Oh nvm 隣(\uf9f1)yerine lol CJK Uyumluluk İdeograf blok biriydi. Öyle olduğunu düşündüm 隣(\u96a3), CJK Birleştirilmiş İdeograf bloğundaki.
Shieru Asakoto

4

jq, 61 43 57 37 karakter

( 57 39 53 33 karakter kodu + 4 karakter komut satırı seçeneği)

./" "|reverse|max_by(explode|add)

Örnek çalışma:

bash-4.4$ jq -Rr './" "|reverse|max_by(explode|add)' <<< 'àà as a test'
àà

Çevrimiçi deneyin!


Aslında. Bu davayı kaçırdım. ☹ Teşekkürler @nimi.
18'de

4

Pyth, 8 bayt

h.MsCMZc

Test odası

Zaten bir Pyth cevabı olduğunu biliyorum ama bunun oldukça farklı bir yaklaşım kullandığını hissediyorum ve aynı zamanda daha kısa

Açıklama:
h.MsCMZc  | Full code
h.MsCMZcQ | with implicit variables added
----------+------------------------------------
h         | The first element of
       cQ | the input chopped at whitespace
 .M       | with the maximal value for
   s      | the sum of
    CMZ   | the Unicode value of each character

Vay canına, bu gerçekten kesin! Açıklama için teşekkürler!
GammaGames

4

PowerShell , 74 52 bayt

(-split$args|sort{$r=0;$_|% t*y|%{$r+=$_};$r}-u)[-1]

Çevrimiçi deneyin!

Bir boğucu -22 bayt için mazzy için teşekkürler.

-split$argsboşluktaki girdi , sortbelirli bir sıralama mekanizmasıyla birleştirilen borular {...}ve -unike bayrağı.

Burada mevcut kelimeyi alıyoruz , oCharArra'yı $_değiştiriyoruz , o zaman her harf için onu tsonucumuza ekliyoruz. Bu, dizeyi UTF-16 temsilini temel alan bir sayıya dönüştürür.y$r

Bir kez, tüm dizeleri arka planda UTF-16 olan PowerShell hayat kurtarıcı!

Daha sonra, (...)bunları bir diziye dönüştürmek ve sonuncuyu almak için [-1], yani cümlenin başlangıcına en yakın olan en büyük sonucu içine alırız. Bu, -unike bayrağı nedeniyle çalışır , yani aynı değere sahip daha sonraki bir öğe varsa, atılır. Bu kelime ardışık düzende bırakılır ve çıktı örtüktür.


akıllı. Teşekkürler. 2 dakika: neden sort -utersine değil ? +sayı dönüştürmek için yeterli olabilir ? (-split$args|sort{($_|% t*y|%{+$_})-join"+"|iex} -u)[-1]
mazzy

daha fazla golf: (-split$args|sort{$r=0;$_|% t*y|%{$r+=$_};$r}-u)[-1]:)
mazzy

@mazzy Evet, teşekkürler!
AdmBorkBork

3

Python 3 , 55 52 bayt

lambda s:max(s.split(),key=lambda w:sum(map(ord,w)))

Çevrimiçi deneyin!

  • Yöntemde hiçbir argümana gerek olmadığına işaret ettiği için Gigaflop sayesinde -3 bayt split.

split()Herhangi bir boşluk grubuna ayrıldığı için hiçbir argüman iletmeden 3 bayt kaydedebilirsiniz .
Gigaflop

2

MATLAB, 57 bayt

s=strsplit(input('','s'));[Y I]=max(cellfun(@sum,s));s(I)

MATLAB R2016a'mda, emojilerin düzgün bir şekilde işlenmemesi dışında tüm testler geçilir. Ancak karakterler doğru şekilde döndürülür


2

Japt -h , 8 bayt

@Enigma yaklaşımı

¸w ñ_¬xc

Çevrimiçi deneyin!


Başka bir yaklaşım

Japt -g , 8 bayt

¸ñ@-X¬xc

Çevrimiçi deneyin!


Göndermek üzere olduğum şeyle aynı. Tersine çevirme ihtiyacı beni rahatsız ediyor; Beraberlik durumunda kelimelerden herhangi birini çıkarsak tercih ederdik.
Shaggy

@Shaggy mümkünse, bunun için 6 bayt cevabım var
Luis felipe De jesus Munoz

Aynı 6 byter Ben şartname bu gereksinimi tespit etmeden önce ile başladı.
Shaggy

Üzgünüm! Başlangıçta meydan okumaya
sandığım

2

Java (JDK) , 117 97 84 bayt

-13 bayt teşekkürler @Nevay. Görünüşe göre varJava'da da kullanabileceğimi bilmiyordum .

s->{var b="";for(var a:s.split(" "))b=a.chars().sum()>b.chars().sum()?a:b;return b;}

Çevrimiçi deneyin!


-13 bayt:s->{var b="";for(var a:s.split(" "))b=a.chars().sum()>b.chars().sum()?a:b;return b;}
Nevay

1

Ruby, 45 karakter

->s{s.split.max_by{|w|w.codepoints.reduce:+}}

Örnek çalışma:

irb(main):001:0> ->s{s.split.max_by{|w|w.codepoints.reduce:+}}['àà as a test']
=> "àà"

Çevrimiçi deneyin!

Ruby 2.4, 40 karakter

->s{s.split.max_by{|w|w.codepoints.sum}}

(Test edilmemiş).


1

Pyth , 33 bayt

FHmCdmcd)Kczd aYu+GHmCdH0)@KxYeSY

Çevrimiçi deneyin!

Bunu yapmak için neredeyse kesinlikle daha iyi bir yol var, ama çok fazla harcadım, bu yüzden bu yapacak.

FH  #For every array of letters in 
  mCd   #the array of arrays of letters [['w', 'o', 'r', 'l', 'd'], ['h', 'e', 'l', 'l', 'o']]
     mcd)   #wrap that in another array [[hello"], ["world"]]
         Kczd   #split input(z) on spaces ["hello", "world"] and assign it to K for later
              aY     #append to list Y... " " silences the prints from the for loop.
                u+GH    #reduce the list of numbers by summing them    
                    mCdH    #convert each letter in the array to its int counterpart
                        0)    #the zero for the accumulator and close for loop
                          @K    #get by index the word from K
                            xY   #find the index in Y of that number
                              eSY   #sort Y, get the last (largest) number

For döngüsünü kullanmak yerine başka bir haritaya indirgeme geçirdim, ancak işe yarayamadım.


Oh oğlum, bir pelin cevabı! Açıklama için teşekkürler, güzel giriş!
GammaGames

1

Kömür , 20 bayt

≔⪪S θ≔EθΣEι℅λη§θ⌕η⌈η

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

≔⪪S θ

Giriş dizesini boşluklara ayırın ve atayın q.

≔EθΣEι℅λη

Her kelimedeki karakterlerin sıra sayılarının toplamını hesaplayın ve atayın h.

§θ⌕η⌈η

En yüksek toplamın dizinini bulun ve o dizindeki kelimeyi yazdırın.


1

Powershell, 66 bayt

Basit. Powershell'i akıllıca kullanmak için AdmBorkBork'un cevabına bakın .

-split$args|%{$s=0
$_|% t*y|%{$s+=$_}
if($s-gt$x){$w=$_;$x=$s}}
$w

Not! Unicode ile çalışmayı düzeltmek için komut dosyanızıUTF-16 veya UTF8 with BOMkodlamayla .

Test komut dosyası:

$f = {

-split$args|%{$s=0         # split argument strings by whitespaces, for each word
$_|% t*y|%{$s+=$_}         # let $s is sum of unicode char code
if($s-gt$x){$w=$_;$x=$s}}  # if $s greater then previous one, store word and sum to variables
$w                         # return word from stored variable

}

@(
    ,("a b c d e", "e")

    ,("hello world", "world")

    ,("this is a test", "test")

    ,("àà as a test", "àà")

    ,("α ää", "α")

    ,("🍬 隣隣隣", "隣隣隣")

    ,("💀 👻 🤡 🦇 🕷️ 🍬 🎃", "🕷️")
) | % {
    $s,$e=$_
    $r=&$f $s
    "$($r-eq$e): $r"
}

Çıktı:

True: e
True: world
True: test
True: àà
True: α
True: 隣隣隣
True: 🕷️
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.