최고 합계 문자열


15

최고 합계 문자열

입력 문자열이 주어지면 각 유니 코드 문자의 합계가 가장 높은 단어를 반환하십시오.

규칙

  • 입력은 공백으로 분리해야합니다.
  • 각 단어의 값은 단어의 UTF-16 코드에서 각 문자의 합계를 기반으로합니다.
  • 출력은 값이 가장 큰 첫 번째 단어 여야합니다 (중복 합계의 경우).

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

이것은 코드 골프이므로 최단 답변이 이깁니다! 행운을 빕니다 :)


항상 하나 이상의 공백이 있습니까 (적어도 2 단어)?
Emigna

2
더 많은 언어가 참여할 수 있기 때문에 유니 코드 대신 ASCII로 더 흥미 로웠을 것입니다. 유니 코드 지원을 요구하는 것은 도전에 아무 것도 추가하지 않는 것 같습니다
Luis Mendo

1
이모티콘이 있기 때문에 주로 유니 코드를 사용했습니다. lol
GammaGames

2
현재 답변 중 많은 부분이 UTF-8 또는 UTF-32 코드 단위의 합계를 사용하는 것으로 보이므로 몇 가지 테스트 사례를 추가해야합니다. 예를 들어 "α ää"는 UTF-8 (383 <718) 및 UTF-16 (945> 456)에서 다른 결과를 생성합니다.
nwellnhof

1
네, 줄 바꿈 영역이 허용됩니다. 탭도!
GammaGames

답변:


3

젤리 , 7 바이트

ḲOS$ÐṀḢ

온라인으로 사용해보십시오!

Ḳ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.

사양이 단어 목록으로 허용되도록 입력이 완화 된 경우O§MḢị
Jonathan Allan

@JonathanAllan OP는 어디에서 허용되었다고 말했습니까?
dylnan


@JonathanAllan 아, 잡았다.
dylnan

1
@GammaGames 문자열 목록을 가져올 수 있다면 도움이 될 것 ["abc", "def"]입니다. 그러나이 시점에서 많은 답변이 있으므로 새로운 입력 방법을 추가하지 않는 것이 좋습니다
dylnan


6

R , 77 69 59 58 56 44 바이트

지금 그룹 노력.

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

온라인으로 사용해보십시오!

코드 포인트로 변환하고 각 단어를 합산하고 부정하고 (안정적으로) 정렬하고, 첫 번째 요소를 반환합니다.

기술적으로 반환 값은 "명명 된 벡터"이며 그 값은 합이고 이름은 승리하는 단어이지만 규칙을 따르는 것 같습니다. 이기는 단어를 문자열로 반환하려면 7 바이트를 더 소비하고 위의 내용을로 묶어야합니다 names().


단어 앞에 공백이있는 이유가 있습니까? 내가 그것을 실행할 때 (앞에 많은 공간이있는) "💀 👻 🤡 🦇 🕷️ 🍬 🎃"인쇄됩니다" 🕷️ "
GammaGames

2
@GammaGames 출력은 R에서 "명명 된 벡터"라고하는 것입니다.이 경우 값은 당첨 단어의 코드 포인트의 합이며이 이름과 함께 인쇄됩니다 (이 경우 당첨 단어 임) 그 자체. 이름은 그 아래 숫자와 오른쪽 정렬됩니다.
ngm

오, 깔끔 해요! 규칙을 따르는 것 같으므로 허용하겠습니다. 멋진 입장!
GammaGames

sort(-sapply(...))3 바이트 더 짧습니다.
Giuseppe

3
@JayCe mapplyunlist무료입니다.
ngm

5

05AB1E , 8 바이트

ð¡RΣÇO}θ

온라인으로 사용해보십시오!

설명

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

와우, 저는 항상 전용 골프 언어로 작성된 답변에 놀라워합니다!
GammaGames

결과 목록을 뒤집어 야하는 이유는 무엇입니까? 어쨌든 정렬 될까요? 아니면 R정렬 된 후 실제로 목록을 뒤집습니까?
FireCubez

테스트 케이스에 대한 @FireCubez 와 같은 큰 유니 코드의 합계가있다. 따라서 반전 이 없으면 대신 출력됩니다 . Btw, Emigna 는 바이트 저장에 사용 합니다. ;) 편집 : 신경 쓰지 마십시오. 단일 단어 입력 목록에서 입력을 래핑하지 않는 것을 볼 수 있습니다. àà as a testààtesttestàà#
Kevin Cruijssen

4

자바 스크립트 (ES6), 81 바이트

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

온라인으로 사용해보십시오!


도전 과제를 작성할 때 생각해 낸 코드보다 훨씬 낫습니다.내는 ~ 200 자 길이였습니다!
GammaGames


@ guest271314는 두 번째 마지막 테스트 사례 및 일부 극단적 인 경우에는 작동하지 않습니다.f("😂 龘龘龘龘龘")
Shieru Asakoto

@ShieruAsakoto 여기에 올바른 결과를 반환하는 것으로 나타납니다. tio.run/##y0osSyxOLsosKNHNy09J/… ? 에 대한 예상 결과는 무엇입니까 "😂 龘龘龘龘龘"?
guest271314

nvm 隣(\uf9f1)은 lol 대신 CJK Compatibility Ideograph 블록에서 하나였습니다. 隣(\u96a3)CJK Unified Ideograph 블록의 하나 라고 생각했습니다 .
Shieru Asakoto


4

Pyth, 8 바이트

h.MsCMZc

테스트 스위트

나는 이미 Pyth 답변이 있다는 것을 알고 있지만 이것은 꽤 다른 접근법을 사용하고 더 짧아지는 것처럼 느낍니다.

설명:
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

와우, 정말 정확합니다! 설명 주셔서 감사합니다!
GammaGames

4

PowerShell , 74 52 바이트

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

온라인으로 사용해보십시오!

엄청나게 많은 -22 바이트를위한 mazzy에게 감사합니다.

-split$args공백에 대한 입력 sort, 특정 정렬 메커니즘 {...}-unique 플래그 가있는 파이프 .

여기서 우리는 현재 단어를 가져 $_와서 toCharArra로 바꾸고 y, 각 글자마다 우리의 $result에 단어를 추가합니다 . 문자열을 UTF-16 표현에 따라 숫자로 바꿉니다.

한 번만, 백그라운드에서 모든 문자열을 UTF-16으로 사용하는 PowerShell은 생명의 은인입니다!

그런 다음 결과를 캡슐화 (...)하여 배열로 변환하고 마지막 [-1]결과, 즉 문장의 시작 부분에 가장 가까운 가장 큰 결과를 취합니다 . 이것은 -unique 플래그 때문에 작동합니다 . 즉, 같은 값을 가진 이후의 요소가 있으면 삭제됩니다. 이 단어는 파이프 라인에 남아 있고 출력은 암시 적입니다.


똑똑하다. 감사. 2 순간 : 왜 sort -u반대가 아닌가? +숫자로 변환하기에 충분 할까요? (-split$args|sort{($_|% t*y|%{+$_})-join"+"|iex} -u)[-1]
mazzy

더 많은 골프 : (-split$args|sort{$r=0;$_|% t*y|%{$r+=$_};$r}-u)[-1]:)
mazzy

@ 매우 예, 감사합니다!
AdmBorkBork

3

파이썬 3 , 55 52 바이트

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

온라인으로 사용해보십시오!

  • split메소드 에 인수가 필요하지 않음을 지적한 Gigaflop 덕분에 -3 바이트 .

split()공백 그룹에 분할 되므로 args를 전달하지 않고 3 바이트를 절약 할 수 있습니다 .
Gigaflop

2

MATLAB, 57 바이트

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

내 MATLAB R2016a에서 이모티콘이 제대로 렌더링되지 않는 것을 제외하고 모든 테스트가 통과되었습니다. 그러나 문자가 올바르게 반환됩니다


2

Japt -h , 8 바이트

@Enigma 접근

¸w ñ_¬xc

온라인으로 사용해보십시오!


또 다른 접근법

Japt -g , 8 바이트

¸ñ@-X¬xc

온라인으로 사용해보십시오!


게시하려고하는 내용과 동일합니다. 반전의 필요성은 나를 귀찮게한다. 넥타이의 경우 단어를 출력 할 수 있다면 선호했을 것입니다.
Shaggy

그것이 가능했던 경우 @Shaggy, 나는 6 바이트가에 대한 대답이
루이스 펠리페 드 예수님 무 노즈

사양에서 해당 요구 사항을 발견하기 전에 동일한 6 바이 터로 시작했습니다.
Shaggy

죄송 해요! 원래 도전 과제를 샌드 박스로
만들었


1

루비, 45 자

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

샘플 실행 :

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

온라인으로 사용해보십시오!

루비 2.4, 40 자

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

(테스트되지 않았습니다.)


1

Pyth , 33 바이트

FHmCdmcd)Kczd aYu+GHmCdH0)@KxYeSY

온라인으로 사용해보십시오!

이 작업을 수행하는 더 좋은 방법은 거의 있지만, 너무 많은 시간을 투자하여 그렇게 할 것입니다.

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 루프를 사용하는 대신 다른 맵으로 축소를 전달했지만 작동시키지 못했습니다.


오 소년, pyth 답변! 설명 주셔서 감사합니다, 좋은 항목!
GammaGames

1

, 20 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

≔⪪S θ

입력 문자열을 공백으로 분할하고에 할당하십시오 q.

≔EθΣEι℅λη

각 단어의 문자 서수 합계를 계산하고 h .

§θ⌕η⌈η

가장 높은 합계의 색인을 찾아 해당 색인에 단어를 인쇄하십시오.


1

파워 쉘, 66 바이트

똑바로. Powershell을 똑똑하게 사용하는 AdmBorkBork 의 답변을 참조하십시오 .

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

노트! 유니 코드와 올바른 일까지로 스크립트 파일을 저장 UTF-16하거나UTF8 with BOM 인코딩.

테스트 스크립트 :

$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"
}

산출:

True: e
True: world
True: test
True: àà
True: α
True: 隣隣隣
True: 🕷️
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.