배열에서 가장 긴 단어 찾기


24

도전 과제는 문자열 배열을 가져 와서 배열에서 가장 긴 문자열을 출력하는 것입니다. 그래서

["tiny", "small", "bigger", "biggest"]

출력은입니다 biggest.

배열의 두 요소 길이가 동일한 경우 배열에서 처음 나타나는 요소를 선택해야합니다. 즉, 배열이 다음과 같은 경우

["one", "two", "no"]

출력은 one이지만 배열이 다음과 같은 경우

["two", "one", "no"]

출력은 two입니다.


이것이 이므로 바이트 단위의 가장 짧은 코드가 이깁니다.


3
2 노트 : 1질문이 변경되고 기존 답변이 무효화되는 경우에는 크게 권장하지 않으며 2, 샌드 박스 가 바로 그러한 이유로 존재합니다 (게시하기 전에 문제가 있는지 확인)
user202729

4
다른 사람이 언급하지 않았다고 생각하기 때문에 PPCG에 오신 것을 환영합니다!
AdmBorkBork

1
아니요 배열이 비어있는 경우를 처리 할 필요가 없습니다. 그러나 원한다면 할 수 있습니다.
Doggo

4
2 시간? 즉, 지금까지의 지금까지 너무 빠른 대답을 수용 할 수 있습니다.
Shaggy

6
일반적으로 당신은 일주일을 기다립니다
Christopher

답변:


31

명령형 탐 피오 , 168 바이트

Listan x on riippuen siitä,onko sen ensimmäisen alkion pituus suurempi tai yhtä suuri kuin sen jokaisen alkion pituus,joko sen ensimmäinen alkio tai sen hännän x.

온라인 버전

언 골프 드 :

Listan 피진어 alkio riippuen siitä , onkoensimmäisenalkion pituus suurempi 타이 yhtä suuri kuinjokaisen alkion pituus, joko는

  • ensimmäinen알키 오 타이
  • sen hännän pisin alkio.

온라인 버전

이것이 유일한 골프 기회는 pisin alkio( "가장 긴 요소"를 의미 )로 교체 하는 것입니다 x.

번역:

목록에서 가장 긴 항목은 첫 번째 항목의 길이가 목록의 각 요소의 길이보다 크거나 같은지 여부에 따라

  • 목록의 첫 번째 항목 또는
  • 목록의 가장 긴 항목입니다.

21
이거 ....... 어떻게 ..... 뭐?!
auhmaan

3
Google Translate from Finnish : x 목록은 첫 번째 요소의 길이가 첫 번째 항목 또는 x의 꼬리 인 각 요소의 길이보다 크거나 같은지 여부에 따라 다릅니다.
Adám

2
@ Adám 저는 APL을 읽기 어렵다고 생각했습니다. 분명히 당신이 이길 필요가있는 것은 영어가 드문 상품 인 언어로 게임 필드를 옮기는 것입니다.
Uriel

3
COBOL, AppleScript 또는 Inform 7이 필요한 사람은 누구입니까? 아놀드 셰프 나 셰익스피어가 필요한 사람은 누구입니까? 명령형 탐 피오가 있습니다! 오 내 비행 스파게티 괴물, 모든 언어의 핀란드어? 나는 그것을 곧 배우지 않을 것이다.
fede s.

1
@ 페더스. "올가미 suomalainen suudelma uusi suudelma"라고 말할 수 있습니다. (그것은 새로운 키스 객체를 생성, 핀란드 키스 새 키스하자)
fergusq


17

하스켈 , 35 바이트

Zgarb 덕분에 -3 바이트.

foldl1(!)
a!b|(a<$a)<(a<$b)=b|1<2=a

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

나는이 코드를 좋아한다. 왜 그런지 알아? Haskell은 임의 라이브러리의 함수를 사용하여 훨씬 더 우아한 솔루션을 지원하기 때문입니다.

maximumBy(compare`on`length).reverse

그거 읽기 쉬워! 그렇지 않으면 유효하지 않습니다.

import Data.List
import Data.Function
maximumBy(compare`on`length).reverse

수입품이 아니었다면 이것은 모든 공감대를 얻기위한 완벽한 제출일 것입니다. :피

(또한,이 용도로 한 골프 팁 는 접이식를 사용한다.)


2
"넥타이의 최초 발생"요구 사항을 추가하지 않으면이 아름다움은 효과가있을 것입니다. snd.maximum.map((,)=<<(0<$)) 온라인으로 사용해보십시오! .
Laikoni

1
참고로 : 지루한 29 바이트 내장이 있습니다 import Data.Lists;argmax(0<$).
nimi

1
와우, 어떻게 l의 일부가 fold아닌가? 그것과 이름이 지정된 함수를 어떻게 구별 foldl합니까?
12Me21

1
@ 12Me21 함수 이름의 일부입니다 foldl1. 나는 설명의 일부가 혼란스럽고 미안하다고 생각했다.
전체적으로 인간적인

1
람다 대신 함수가있는 35 바이트 흥미롭게도, 당신은 교체해야합니다 0함께 a또는 뭔가 다른, 그렇지 않으면 GHC는 모호한 숫자 유형에 대해 불평.
Zgarb December


8

뛰어나다, 36 42 바이트

=INDEX(A:A,MATCH(MAX(LEN(A:A)),LEN(A:A),))

배열 수식으로 입력되었습니다 (ctrl-shift-enter). 입력 배열은 열 A에 입력해야합니다.

수식은 최대 길이의 첫 번째 일치 항목을 반환합니다.

지역 설정에 따라 대체 ,;; 코드 길이는 변경되지 않습니다. 여기 에 나열된 16 개 언어 중 영어 함수 이름이이 수식에 가장 짧습니다.

설명:

=                                          - return
 INDEX(                                  ) - the item of
       A:A                                 - the input
          ,                                - at
           MATCH(                       )  - the position of
                                       ,   - the first exact match of
                 MAX(        )             - the maximum of
                     LEN(   )              - the array of lengths of
                         A:A               - the input
                              ,            - in
                               LEN(   )    - the array of lengths of
                                   A:A     - the input

무엇에 대한 ,후자? 공식은 여전히 ​​그것 없이도 작동합니다
Anastasiya-Romanova 秀

마지막 ,은 (수정 된) 질문에 필요한대로 첫 번째 정확한 일치를 반환하는 MATCH의 매개 변수입니다. 누락 된 경우 MATCH는 배열을 오름차순으로 예상하고 길이가 같은 여러 요소가있는 경우 첫 번째 항목 대신 마지막 일치 항목을 반환합니다 .
pbeentje

확실 해요? 나는이 두 공식을 비교 한 결과 똑같은 결과를 얻었습니다
Anastasiya-Romanova 秀

길이가 같은 두 개의 (다른) 문자열을 가진 입력 배열을 사용하고 있습니까? 쉼표 (세미콜론) 알아두면 ... (64 비트 엑셀 2016) 예상대로, 나에게 최대 길이의 마지막 문자열을 제공합니다
pbeentje

불행히도 커뮤니티는 이 방법으로 명명 된 범위사용하는 것이 유효하지 않다고 결정 했기 때문에이 특별한 경우에는 사용으로 전환 A:A하고 배열을 형식이 아닌 배열로 만들 것을 제안합니다 {...}.
Taylor Scott


7

프롤로그 (SWI) , 98 92 72 69 바이트

최상위 술어는 *입니다.

X/Y:-atom_length(X,Y).
[A]*A.
[A,B|L]*Z:-A/X,B/Y,Y>X,[B|L]*Z;[A|L]*Z.

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

설명

첫 번째 행은 dyadic 술어 /를 short로 정의합니다 atom_length/2. 첫 번째 인수의 길이가 두 번째 인수 인 경우 참입니다. 이렇게하면 atom_length두 번 사용하면 3 바이트가 절약 됩니다.

우리의 주요 술어는 *첫 번째 인수가 목록이고 두 번째 인수가 해당 목록의 가장 긴 요소 인 이진으로 정의됩니다 .

두 번째 행은 하나의 요소 목록에서 가장 긴 요소가 해당 요소라는 기본 사례입니다.

세 번째 행은 요소가 2 개 이상인 목록의 경우 가장 긴 요소는 다음과 같습니다.

두 번째 요소의 길이가 첫 번째 요소보다 긴 경우 가장 긴 요소는 첫 번째 요소가없는 목록에 있습니다.

그렇지 않으면 가장 긴 요소가 두 번째 요소없이 목록에 있습니다.


작동 방식에 대한 설명을보고 싶습니다.
Kritixi Lithos

@Cowsquack : 간단한 설명을 추가했습니다.
Emigna

7

Pyth , 4 바이트

h.Ml

테스트 스위트.

설명
h.Ml   | Program
h.MlZQ | With implicit variables filled in
-------+--------------------------------------------------------------------
h      | First element of
 .M  Q | The list of elements from the input list with the maximal value for
   lZ  | The length of the element

6 바이트로 Pyth 답변을 이겼습니다.
Doggo

elD_ho_l동일한 길이를 달성한다.
isaacg

1
@ hakr14 편집 해 주셔서 감사합니다!
Mr. Xcoder

6

PowerShell , 24 바이트

($args[0]|sort l* -d)[0]

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

ength $args[0]Sort-Object기준으로 오름차순 으로 입력 파이프를 가져옵니다. 그런 다음 그 중 하나를 가져갑니다 . 정렬이 안정적이므로 동점 일 경우 첫 번째 요소가 필요합니다.l-d[0]


1
Nice name wuff wuff : D
Doggo

6

옥타브 , 33 바이트

@(x)x{[~,p]=max(cellfun(@nnz,x))}

입력은 문자열의 셀형 배열입니다.

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

설명

cellfun(@nnz,x)nnz입력 배열의 각 문자열에 함수 (0이 아닌 수)를 적용합니다 x. ASCII 문자열을, nnz동등 numel(요소 수), 짧은. 결과는 문자열 길이를 가진 숫자 형 배열입니다.

그런 다음 [~,]=max(...)문자열 길이 배열에서 첫 번째 최대 인덱스를 제공합니다. 결과는 x해당 문자열을 얻기 위해 중괄호 색인으로 사용됩니다 .


6

자바 스크립트 (Node.js) , 38 바이트

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

a=>a.sort((a,b)=>a.length<b.length)[0]

@Doggo 타이의 경우 첫 번째 요소를 반환합니다.
LiefdeWen

1
sort () 콜백에서 부호있는 숫자 대신 부울을 반환하면 모든 JS 엔진에서 작동하지 않습니다 (예 : Edge에서는 작동하지 않음). 또 다른 방법 은 1 바이트 더 짧은 것과 같은 것입니다 . 그러나 동점 일 경우 첫 번째 항목이 브라우저에서 일관되게 선택된다는 보장은 없습니다.
Arnauld

그러나 그것이 TIO의 node.js에서 지속적으로 선택한다면 충분하지 않습니까? \
LiefdeWen

1
비교기 기능 -대신에 사용해야합니다 <.
kamoroso94

1
@LiefdeWen 예, 그러나 의견의 문제를 해결합니다.
Sebastian Simon

5

J , 19, 11, 10 8 바이트

0{>\:#@>

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

힌트를위한 streetster에게 감사합니다!

FrownyFrog 덕분에 -1 바이트!

Conor O'Brien 덕분에 -2 바이트

작동 방식 :

    (  #@>) - unbox each string and find its length
     \:     - sort down the list of strings according to the lengths
0{::        - take and unbox the first string

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


1
이것은 K의 첫 번째 접근 방식이지만 목록을 개수별로 정렬하고 내림차순으로 첫 번째 항목을 취할 수 있다는 것을 깨달았습니다 ... J에서도 같은 일을 할 수 있습니까?
streetster December

@streetster-감사합니다! 방금 깨달았습니다. 나는 지금 그것을 시도 할 것입니다, 그것은 훨씬 짧았습니다.
Galen Ivanov

1
이 시점 이후에는 괄호가 없습니다 :0{::]\:#@>
FrownyFrog

겠습니까 {.@대신 0{::사용할 수 있습니까?
Kritixi Lithos

1
8 바이트 :0{>\:#@>
Conor O'Brien

4

C #, 43 + 18 = 61 바이트

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

a=>a.OrderByDescending(x=>x.Length).First()

@Doggo 타이의 경우 첫 번째 요소를 반환합니다.
LiefdeWen

@LiefdeWen OrderBy는 안정적이므로 실제로 넥타이의 경우 마지막 요소를 반환합니다. 예 : tio.run/##TY7BCsIwDIbvfYqwUwvaF5jbQcHTRMGDB/…
Grzegorz Puławski 2014

1
@ GrzegorzPuławski 아, 알았어요.
LiefdeWen

어쩌면 사람이 짧아 도움이 될 수있는 몇 가지를 가지고 a=>a.Aggregate((x,y)=>y.Length>x.Length?y:x), 44 바이트 기반을 a=>a.First(x=>x.Length==a.Max(y=>y.Length))43 바이트베이스
Monso

1
@MrLore 그것은 첫 번째 솔루션 이었지만 순서는 영향을받지 않기 때문에 마지막 솔루션을 반환합니다.
LiefdeWen


4

PHP, 72 바이트

array_reduce($a,function($c,$i){return (strlen($i)>strlen($c))?$i:$c;});

4
안녕하세요, PPCG에 오신 것을 환영합니다! :)
DJMcMayhem



3

K (oK) , 9 바이트

*x@>#:'x:

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

예:

*x@>#:'x:("edur";"oot";"taht")
"edur"

설명

*x@>#:'x: / solution
       x: / store input in variable x
    #:'   / count (#:) each (')
   >      / sort descending
 x@       / apply indices to x
*         / take the first one

노트:

기본적으로 5 단계이지만 함수로 작성된 경우에도 중요하지 않은 것으로 분류되므로 삭제되지 않습니다 {*x@>#:'x}.


3

자바 (OpenJDK 8) , 67 바이트

내가 가장 좋아하는 언어로 된 또 다른 제출! (읽기 : 내가 아는 유일한 사람).
이것은 빈 배열에서는 작동하지 않지만 괜찮습니다.

골프

w->{for(String y:w)if(y.length()>w[0].length())w[0]=y;return w[0];}

언 골프

for(String y:w)                           // Loops through all Strings
    if(y.length()>w[0].length())          // If the String is longer than the first String 
                                w[0]=y;   // Store it as the first string.
return w[0];                              // Return the first String.

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


3

라켓 , 160 바이트 110 바이트

온라인으로 사용해보십시오! 처음 기여, 조언 감사합니다!

(define(m a)(if(>(length a)1)(if(>=(string-length(car a))(string-length(m(cdr a))))(car a)(m(cdr a)))(car a)))

언 골프

(define (m a)
    (if (> (length a) 1)
        (if (>= (string-length (car a)) (string-length (m (cdr a))))
            (car a)
            (m (cdr a))
        )
        (car a)
    )
)

피드백을 기반으로 업데이트 된 솔루션


4
커뮤니티를 대표하여 PPCG에 오신 것을 환영합니다! 가장 긴 문자열이 끝에있는 목록에 대해서는 분명히 솔루션이 실패하는 것으로 나타났습니다. 여기에 예가 있습니다 . 라켓은 잘 기억 나지 않지만 가능한 경우 알고리즘을 foldr기반 접근 방식으로 변경하여 최대 길이를 가져 와서 전달하는 것이 좋습니다 .
cole

어. 지적 해 주셔서 감사합니다. 나는 그것을 테스트하지 않았다는 것을 믿을 수 없다.
Daniel Lambert

또한 변경할 수 있습니다 define(m a)λ(a)
fede들.

1
당신이하지 않은 경우 에도 팁을 확인하십시오 !
페더


3

스크래치 27 17170160

코드 사진

전역 (모든 스프라이트에 연결되어보다 정확할 것)이라는 문자열 목록이 필요 mylist합니다. 녹색 플래그를 클릭하면 가장 긴 단어가 변수에 남습니다 w.

나는 이것이 링크 라고 생각한다

when gf clicked
set[w]to(item[1]of[mylist
set[i]to[0
repeat(length of[mylist
change[i]by(1
set[m]to(item(i)of[mylist
if<(m)>(w)>then
set[w]to(m
end
end
stop[all

이 메타에 따라 계산합니다 .


stop[all여기에 필요 합니까?
ggorlen

3

로다 , 30 바이트

{enum|[[#_,-_,_1]]|max|_|tail}

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

설명:

{
 enum|         /* For each element, push its index to the stream */
 [[#_,-_,_1]]| /* For each element and index, push [length, -index, element] */
 max|          /* Find the greatest element */
 _|            /* Flat the list in the stream */
 tail          /* Return the last item in the stream */
}

대체 30 바이트 :

{enum|[[#_,-_,_1]]|max|[_[2]]}

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


내 jq 답변을 작성 enum하면 떨어질 수 있다는 것을 알았고 대신 최소값을 [[-#_,_1]]선택할 수 있습니다 tio.run/…
Kritixi Lithos

@Cowsquack min문자열을 알파벳 순으로 비교 하기 때문에 작동하지 않습니다 (배열이 두 번째 항목에 의해 2 차적으로 비교되기 때문에). 예를 들어 입력 ["b", "a"]"a"출력으로 제공 됩니다. 아마도 minbyRöda 나 비슷한 것에 함수를 추가해야 할 것입니다 .
fergusq

3

APL- 23 16 바이트

a←{((⍴¨⍵)⍳(⌈/(⍴¨⍵)))⌷⍵}

당신의 모든 훌륭한 제안과 격려에 대해 모두에게 감사합니다!

a←{⍵⌷⍨(⍴¨⍵)⍳⌈/⍴¨⍵}

용법:

a 'duck' 'duck' 'goose'
  'goose'

설명:

각 문자 벡터의 길이 (문자열)를 가져온 다음 최대 값을 색인으로 사용합니다. 방금 20 분 전에 APL을 시작 했으므로 이것이 어리석은 방법이라면 유감입니다.

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

(명확성을 위해 편집 됨)


1
PPCG에 오신 것을 환영합니다!
Steadybox

a←당신의 bytecount는으로 계산되지 않습니다.
Kritixi Lithos

APL이 오른쪽에서 왼쪽으로 평가된다는 것을 잊지 마십시오 : (⌈/(⍴¨⍵))=> ⌈/⍴¨⍵. 또한 (...)⌷⍵=> ⍵⌷⍨...1 바이트를 절약하기 위해
Zacharý

괄호 외에, 이것은 실제로 꽤 좋아 보인다!
Zacharý



2

펑키 , 38 바이트

a=>a[(v=a::map@#)::find(math.max...v)]

설명

a=>a[(v=a::map@#)::find(math.max...v)]
        a::map@#                        $ Create a list of the lengths of the input's strings.
      v=                                $ And assign it to v.
     (          )::find(            )   $ Find the first index in this list that equals...
                        math.max...v    $ The largest value of v, eg. the length of the longest string.
   a[                                ]  $ Get the value at that position.

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




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