Dizideki en uzun kelimeyi bulun.


24

Buradaki zorluk, bir dizi dizge almak ve dizideki en uzun dizgenin çıktısını almaktır. İçin böylece

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

çıktı olacaktır biggest.

Dizinin iki öğesinin uzunluğu aynıysa, dizide ilk sırada görüneni seçmelisiniz. Bu, dizinin şöyle görünmesi anlamına gelir:

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

çıktı one, ancak dizi şöyle görünüyorsa:

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

çıktı two.


Bu olduğundan, bayttaki en kısa kod kazanır.


3
2 notlar: 1soru değiştirilir ve Geçersiz Kılmaktadır cevabı mevcut eğer ağır cesareti, ve Sandbox nedeni (emin zorlukları yapmak gönderme önce iyi) tam olarak için var2
user202729

4
Kimsenin bahsettiğini sanmadığım için - Merhaba, ve PPCG'ye hoş geldiniz!
AdmBorkBork

1
Hayır, dizinin boş olduğu durumu ele almanıza gerek yok. Ama istersen yapabilirsin.
Doggo

4
2 saat? Yani, uzak uzak çok çabuk bir cevap kabul edilecek.
Shaggy

6
Normalde bir hafta beklersiniz
Christopher

Yanıtlar:


31

Zorunlu Tampio , 168 bayt

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.

Çevrimiçi sürüm

Ungolfed:

Listan pisin alkio üzerinde riippuen siitä , onko sen ensimmäisenAlkion pituus suurempi tai yhtä suuri kuin sen jokaisen Alkion pituus, joko'ait

  • Sen ensimmäinenAlkio Tai
  • sen hännän pisin alkio.

Çevrimiçi sürüm

Bunun sahip olduğu tek golf fırsatı pisin alkio("en uzun element" anlamına geliyor) ile değiştirmektir x.

Çeviri:

Listedeki en uzun öğe, ilk öğenin uzunluğunun listedeki her öğenin uzunluğuna eşit veya büyük olmasına bağlı olarak

  • listedeki ilk öğe veya
  • Listenin kuyruğundaki en uzun öğe.

21
Bu a -... Bu mu -... Nasılsın?
Auhmaan

3
Google'dan Fince Çevir: x listesi, ilk öğenin uzunluğunun, her öğenin uzunluğundan büyük veya eşit olup olmadığına, ister ilk öğenin, isterse x'in kuyruğuna bağlıdır.
00’de

2
@ Adám, APL'nin okunmasının zor olduğunu düşünürdüm. Görünüşe göre tek yapmanız gereken, oyun alanını İngilizcenin nadir bir mal olduğu bir dile taşımak.
Uriel

3
Kimler COBOL, AppleScript veya Inform 7'ye ihtiyaç duyar? Arnold Chef veya Shakespeare'a kimin ihtiyacı var? Zorunlu Tampio var! Benim uçan spagetti canavarım, tüm dillerin Fince? Bunu yakın zamanda
öğrenemiyorum

1
@fedes. "Olkoon suomalainen suudelma uusi suudelma" diyebilirsiniz. (Finlandiya öpücüğü yeni bir öpücük olsun, yeni bir öpücük nesnesi yaratır)
fergusq

20

Python , 23 bayt

lambda a:max(a,key=len)

Çevrimiçi deneyin!


1
Bunu doğru dönüştürmediğim için özür dilerim.
Doggo

1
Kod pasajını güncelledim, ancak yazıldığı gibi, bu işlevi zaten elde ediyor.
Neil

1
Bu aynı zamanda Python 3'te de değişmeden çalışacaktır.
17:17

17

Haskell , 35 bayt

Zgarb sayesinde -3 bayt.

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

Çevrimiçi deneyin!

Bu kodu sevdim. Neden biliyormusun? Çünkü Haskell, rastgele kütüphanelerden gelen fonksiyonlarla çok daha zarif çözümleri destekliyor.

maximumBy(compare`on`length).reverse

Bu çok okunaklı! Ancak, geçerli değil.

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

İthalat için olmasaydı, tüm yükselişleri almak için mükemmel bir sunum olurdu. : P

(Ayrıca, bu bir golf ucu ve bir de kat kullanır.)


2
"Durumda ilk kez kravat" ilkesi eklenmesi koşuluyla, bu güzellik işe yarayacaktı: snd.maximum.map((,)=<<(0<$)) Çevrimiçi deneyin! .
Laikoni

1
Sadece referans için: sıkıcı 29 bayt yerleşik import Data.Lists;argmax(0<$).
nimi

1
Woah, nasıl lbir parçası değil fold? Bu ve adlandırılmış bir işlev arasındaki farkı foldlnedir?
12Me21

1
@ 12Me21 İşlev adının bir parçasıdır foldl1. Açıklamanın bir bölümünün kafa karıştırıcı olabileceğini düşündüm, üzgünüm ...
tamamen insanlık

1
Lambda yerine bir fonksiyonla 35 bayt . İlginçtir, değiştirmek gerekir 0ile aveya başka bir şey, aksi GHC belirsiz bir sayısal türü hakkında şikayet ediyor.
Zgarb


8

EXCEL, 36 42 bayt

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

Dizi formülü olarak girildi (ctrl-shift-enter). Giriş dizisi A sütununa girilmelidir.

Formül, ilk eşleşmeyi maksimum uzunlukla döndürür.

Bölgeyi ayarlarına bağlı olarak, yerine ,ile ;; kod uzunluğu değişmeden kalır. Burada listelenen 16 dilden , İngilizce işlev adları bu formül için en kısa yoldur.

Açıklama:

=                                          - 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

,İkincisi için ne ? Formül hala onsuz çalışıyor
Anastasiya-Romanova 秀

Final ,(değiştirilen) sorusunun gerektirdiği gibi ilk tam eşleşmeyi döndüren MATCH parametresidir. Dışarıda bırakılırsa, MATCH bir diziyi artan sırada bekler ve aynı uzunlukta birden fazla öğe varsa, ilk yerine son eşleşmeyi döndürür .
pbeentje

Emin misin Bu iki formülü karşılaştırdım ve her ikisi de aynı sonuçla geldi
Anastasiya-Romanova 秀

Aynı uzunlukta iki (farklı) dizgiye sahip bir girdi dizisi kullanıyor musunuz? Virgülün dışına çıkma (noktalı virgül), beklendiği gibi son uzun dize dizesini verir ... (Excel 2016, 64-bit)
pbeentje

Maalesef topluluk bu şekilde adlandırılmış aralıkları kullanmanın geçersiz olduğuna karar vermiştir, bu nedenle bu özel durum için kullanmaya A:Ave bir diziyi resmi hale getirmeye karar vermenizi öneririm {...}, aksi takdirde harika yazı!
Taylor Scott


7

Prolog (SWI) , 98 92 72 69 bayt

Üst seviye belirleyicidir *.

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

Çevrimiçi deneyin!

açıklama

İlk satır , ilk argümanın uzunluğu ikinci argüman ise, dyadik yordamın /kısa olduğu atom_length/2anlamına gelir. Bu bize atom_lengthiki kez kullanarak 3 bayt kazandırır .

Başlıca öngörümüz *, ilk argümanın bir liste olduğu diyadik , ikinci argüman ise bu listenin en uzun elemanıdır.

İkinci satır, bir eleman listesinin en uzun elemanının o eleman olduğunu belirten temel durumumuzdur.

Üçüncü satır, en az 2 öğeli bir liste için en uzun öğenin:

İkinci elementin uzunluğu birinci elementten daha uzunsa, en uzun element ilk elementsiz listededir.

Aksi halde, en uzun eleman ikinci eleman olmadan listededir.


Nasıl çalıştığı hakkında bir açıklama görmek isterim
Kritixi Lithos

@Cowsquack: Kısa bir açıklama ekledim.
Emigna

7

Pyth , 4 bayt

h.Ml

Test odası.

açıklama
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

Pyth cevabını 6 byte nice ile yenmişsin.
Doggo

elD_ve ho_laynı uzunluğu elde etmek.
isaacg

1
@ hakr14 Düzenleme için çok teşekkür ederim!
Bay Xcoder

6

PowerShell , 24 bayt

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

Çevrimiçi deneyin!

Giriş Alır $args[0], borular buna Sort-Objectdayanarak liçinde ength -dsırasını escending. Sonra [0]ondan bir tane alır . Sıralama sabit olduğu için, beraberlik durumunda bu ilk elementi alır.


1
Nice name wuff wuff: D
Doggo

6

Octave , 33 bayt

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

Giriş, bir hücre dizesi dizisidir.

Çevrimiçi deneyin!

açıklama

cellfun(@nnz,x)nnzişlevi (sıfır olmayan sayısı) giriş dizisindeki her dizeye uygular x. ASCII dizeleri nnziçin eşdeğerdirnumel (eleman sayısı), fakat daha kısa. Sonuç, dize uzunluklarına sahip sayısal bir dizidir.

Ardından, [~,]=max(...)dize uzunlukları dizisindeki ilk maksimumun dizinini verir. Sonuç, xkarşılık gelen dizgiyi elde etmek için küme parantezi dizini olarak kullanılır .


6

JavaScript (Node.js) , 38 bayt

Çevrimiçi deneyin!

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

@Doggo Beraberlik durumunda ilk elemanı geri verir.
LiefdeWen

1
Sort () geri çağırmada imzalı bir sayı yerine bir boole döndürülmesi geri arama tüm JS motorlarında (örneğin, Edge'de çalışmaz) çalışmaz. Başka bir yaklaşım olacaktır ise 1 bayt daha kısa olan böyle bir şey olabilir . Yine de, bir kravat durumunda ilk öğenin tarayıcılar arasında tutarlı bir şekilde seçileceği garantisi yoktur.
Arnauld

fakat sürekli olarak node.js'de TIO'da seçerse, bu o kadar iyi değil mi? \
LiefdeWen

1
Karşılaştırıcı işlevinde -yerine kullanmanız gerekir <.
kamoroso94

1
@LiefdeWen Evet, ancak yorumlardaki sorunları giderir.
Sebastian Simon

5

J , 19, 11, 10 8 bayt

0{>\:#@>

Çevrimiçi deneyin!

Tavsiye için streetster'a teşekkürler!

FrownyFrog sayesinde -1 bayt!

Conor O'Brien sayesinde -2 bayt

Nasıl çalışır:

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

Çevrimiçi deneyin!


1
Bu benim K'deki ilk yaklaşımımdı, ama sonra listeyi sadece sayıya göre, azalan olarak ve ilk öğeyi alarak sıralayabileceğimi farkettim ... J'de de aynı şeyi yapabilir misiniz?
streetster

@streetster - Teşekkürler! Daha yeni farkettim. Şimdi deneyeceğim, çok daha kısa olacak.
Galen Ivanov

1
Bu noktanın ötesinde parantez yok:0{::]\:#@>
FrownyFrog

İş {.@yerine mi 0{::?
Kritixi Lithos,

1
8 bayt:0{>\:#@>
Conor O'Brien,

4

C #, 43 + 18 = 61 bayt

Çevrimiçi deneyin!

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

@Doggo Beraberlik durumunda ilk elemanı geri verir.
LiefdeWen

@LiefdeWen OrderBy sabittir, bu yüzden aslında bir kravat durumunda son elemanı geri getirecektir. Örnek: tio.run/##TY7BCsIwDIbvfYqwUwvaF5jbQcHTRMGDB/…
Grzegorz

1
@ GrzegorzPuławski Ah, anlıyorum, düzeltildi.
LiefdeWen

Belki birileri a=>a.Aggregate((x,y)=>y.Length>x.Length?y:x)44 byte base, a=>a.First(x=>x.Length==a.Max(y=>y.Length))43 byte base kısaltmaya yardımcı olabilecek birkaç tane var
Monso

1
@BuLore Bu benim ilk çözümümdü, fakat sonra beraberlik içinde sonuncuyu geri getirdi, çünkü emir etkilenmedi.
LiefdeWen


4

PHP, 72 bayt

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

4
Merhaba, PPCG'ye hoş geldiniz! :)
DJMcMayhem



3

K (oK) , 9 bayt

*x@>#:'x:

Çevrimiçi deneyin!

Örnek:

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

açıklama

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

Notlar:

Temelde 5 adım olmasına rağmen (işlev olarak yazılırsa {*x@>#:'x}) , önemsiz olarak sınıflandırıldığı için silinmemiş .


3

Java (OpenJDK 8) , 67 bayt

En sevdiğim dilde başka bir gönderi! (okumak: tanıdığım tek kişi).
Bu boş bir diziyle çalışmıyor, ama sorun değil.

golfed

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

Ungolfed

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.

Çevrimiçi deneyin!


3

Raket , 160 bayt 110 bayt

Çevrimiçi deneyin! İlk kez katkıda, tavsiye takdir!

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

Ungolfed

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

Geri bildirime dayalı güncellenmiş çözüm


4
PPCG'ye topluluk adına hoş geldiniz demek istiyorum! Çözümünüzün, en uzun dizenin sonunda olduğu listelerde görünüşte başarısız olduğunu fark ettim. Burada örnek . Racket'i iyi hatırlamıyorum, ancak eğer yapabilirseniz algoritmanızı foldrtemelli bir yaklaşımla değiştirmenizi, en fazla uzunluğu alarak ve bunu taşımanızı öneririm .
cole,

Ah ha Bunu gösterdiğin için teşekkürler. Bunu test etmediğime inanamıyorum.
Daniel Lambert,

Ayrıca değiştirebilir define(m a)içinλ(a)
fede s.

1
Eğer yapmadıysanız ipuçlarını da kontrol edin !
fede s.


3

Karalama 27 17 170 160

the code picture

Genel olarak (tüm sprite ekli, daha kesin olması) dizgelerin listesi aranır mylist. Yeşil bayrağa tıkladıktan sonra, en uzun kelime değişkende kalacaktır w.

Bence bu bağlantı

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

Bu meta uyarınca sayım .


Is it necessary to stop[all here?
ggorlen

3

Röda, 30 bytes

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

Try it online!

Explanation:

{
 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 */
}

Alternative 30 bytes:

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

Try it online!


Writing up my jq answer made me realise that enum can be dropped, and instead the minimum from [[-#_,_1]] can be selected, tio.run/…
Kritixi Lithos

@Cowsquack That doesn't work because then min would compare strings secondarily alphabetically (because arrays are compared secondarily by their second item). For example input ["b", "a"] would give "a" as output. I should probably add a minby function to Röda or something similar...
fergusq

3

APL -- 23 16 bytes

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

Thanks to everyone for all of your great suggestions and encouragement!

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

Usage:

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

Explanation:

gets length of each vector of characters (string) then uses maximum as an index. I just started APL 20 min ago so I am sorry if this is a stupid way to do it.

Try it Online!

(edited for clarity)


1
Welcome to PPCG!
Steadybox

The a← is not counted towards your bytecount.
Kritixi Lithos

Never forget APL is evaluated right-to-left: (⌈/(⍴¨⍵)) => ⌈/⍴¨⍵. Also, (...)⌷⍵ => ⍵⌷⍨... to save one byte
Zacharý

Other than the parentheses, this actually seems pretty good!
Zacharý

2

Standard ML (MLton), 55 bytes

fun&(s::r)=foldl(fn(%,$)=>if size% >size$then%else$)s r

Try it online! Example usage: & ["abc","de","fgh"] yields "abc".

Ungolfed:

fun step (current, longest) = 
    if size current > size longest 
    then current 
    else longest

fun longestString (start :: list) = foldl step start list
  | longestString nil = raise Empty

Try it online!



2

Funky, 38 bytes

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

Explained

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.

Try it online!



2

SNOBOL4 (CSNOBOL4), 63 57 bytes

I	M =LT(SIZE(M),SIZE(X)) X
	X =INPUT	:S(I)
	OUTPUT =M
END

Try it online!

Input is on stdin and output on stdout.

Roughly translates to the following pseudocode:

while input exists
 x = input
 if length(m) < length(x)
  m = x
end
return m

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.