İNANMAZ En İyi On Eleman Bu Dizide


10

AKA: Bir Diziden Clickbait Oluşturun.

Bir tamsayı dizisi verildiğinde, düzenlemesine ve uzunluğuna bağlı olarak bazı cringe-layık tıklama tıklamaları oluşturun:

  • 20 veya daha az öğe varsa, En İyi X Listesi yapabilirsiniz. Parametreler: dizinin uzunluğu.
  • Asal sayılar ünlüdür, bu yüzden ikisi yan yana olduğunda dedikodu olarak geçecektir. Parametreler: iki bitişik prim dizide göründükleri sırayla.
  • Dizide herhangi bir sayı iki veya daha fazla görünürse, şok edici ve inanılmazdır ve herkesin bunu duyması gerekir. Birden fazla sayı iki kez görünüyorsa, her biri için bir haber hikayesi hazırlayın. Bunu her benzersiz numara için yalnızca bir kez yazdırın. Parametreler: toplam görünümle ölçülen sayının oluşumu.
  • İçinde 3+ unsurları görürseniz sıralanmış monoton artan ani düşüş izlemektedir sırayla, sonra da sıralanıp sonraki adımla ilgili alay ediyoruz nasıl söyle. Bunu düz başına sadece bir kez yapın. Parametreler: düzün uzunluğu.

Bunlar, kullanmanız gereken ilgili tıklama çubuklarıdır:

The Top {{N}} Array Elements
{{N1}} And {{N2}} Were Spotted Together, You Won't Believe What They Did
These {{N}} Elements Will Blow Your Mind
{{N}} Elements Sort Themselves, Find Out What Comes Next

Unutmayın, ucuz bir medya şirketini temsil edersiniz, bu yüzden bunu sağlamanız ve olası her başlığı yazdırmanız gerekir. Aynı 2 başlık varsa, her ikisini de yazdırın.

Örneğin, size bu dizi verilirse…

1,2,3,4,2,1,1,5,6

Bunların hepsini keyfi sırayla çıkarmalısınız:

The Top 9 Array Elements
2 And 3 Were Spotted Together, You Won't Believe What They Did
These 2 Elements Will Blow Your Mind
These 3 Elements Will Blow Your Mind
4 Elements Sort Themselves, Find Out What Comes Next

Not eksikliği bu başlığın:

3 Elements Sort Themselves, Find Out What Comes Next

Kod golf olarak bayt cinsinden en kısa cevap kazanır.


1
@Onlarda ani bir düşüş olmaz, bu yüzden sadece ilk 3 başlığı yazdırın.
Nissa

1
Genellikle aşağıya oy yapmıyorum, ancak -1 sadece "click A, B ve C, oh ve ayrıca D" tipi bir meydan okuma için sadece bir tıklama-yem başlığı ve tamamen gereksiz bir çıktı biçimi kullanmak için bir meydan okuma oluşturmak için. Zorluklar yazarken kaçınılması gereken şeyleri gerçekten okumalısınız .
ბიმო

8
@BMO Belki de korumalı alanı daha sık okumalısınız. Bu, görüşlerinizi dile getirmiş olabileceğiniz uzun bir süre boyunca oradaydı. Ayrıca, bu sitedeki birçok zorluk clickbait kullanıyor, bu lol yapmak için tek zorluk bu değil
Conor O'Brien

6
Kesin mantık cevaplarının takip etmesi gerektiğini gösteren bir başvuru uygulaması yazmanızı önerdiğim kadar yeterli durum var.
Lynn

5
@ ConorO'Brien: Muhtemelen yapmalıyım, eğer orada görürsem orada fikrimi dile getirirdim. Ama aşağı oylamam için bir sebep vereceğimi düşündüm çünkü sessizce aşağı oy kullanmak kimsenin faydası değil. Tıklama yemi hakkında, iyi bir meydan okuma için akılda kalıcı bir başlık ile yalnızca bir tıklama yemi başlığı kullanmak için yapılmış bir meydan okuma arasında büyük bir fark olduğunu düşünüyorum.
ბიმო

Yanıtlar:


5

Jöle , 142 bayt

I>-ṣ0ṖS€ỊÐḟ‘ɓĠL€ḟ1,ɓ¹ƝÆPẠ$ÐfW;ɓLẋ<¥21W;ż@€"“æƥu®ụ³Km&|°ẓz“ṿ$¥{d3ɓFȤSJẎVḍnṃ*¹0Ḟ¬ȤɲƝċƲạB'ɼɓ.€⁺Ƒ“¢ßUṡʠx\~⁻ḅėʠAƓḳ¶e<“½ė!Ƙ¥Ḍ3]⁷ṀƭȮþċ⁽?ṫĠƁÆȦØ⁾Ż»ṣ€⁷¤

Tam sayıların listesini kabul eden ve her biri bir karakter ve tamsayı listesi olan tıklama listesi listelerini döndüren monadik bir bağlantı. Tam bir program için satır besleme ile ayrılmış tıklama bayramlarını yazdırmanız yeterlidir ẎY.

Çevrimiçi deneyin! (Altbilgi tek bir tıklama listesi oluşturur ve ardından bunları yeni satırlarla ayırır.)
... veyasoruda verilen örneğe bakın.

Nasıl?

Bu Bağlantının en sağdaki 99 baytı bir nilad oluşturur (sıfır bağımsız değişkenli bir işlev, yani sabit):

“...“...“...“...»ṣ€⁷¤
                    ¤ - nilad followed by link(s) as a nilad:
“...“...“...“...»     - list of compressed strings (the four clickbait-texts with the
                      -   integers replaced with line-feed characters)
                   ⁷  - literal line-feed character
                 ṣ€   - split-at for €ach (read to interweave with the integers)

Bu metin bölümlerini şu şekilde etiketleyelim X, şimdi Bağlantı:

I>-ṣ0ṖS€ỊÐḟ‘ɓĠL€ḟ1,ɓ¹ƝÆPẠ$ÐfW;ɓLẋ<¥21W;ż@€"X - Link: list of integers Z
                                             - # get the monotonically increasing runs:
I                                            - incremental differences of Z
 >-                                          - greater than -1 (vectorises)
   ṣ0                                        - split at zeros
     Ṗ                                       - pop (discard final run)
      S€                                     - sum each (length - 1 for all runs)
         Ðḟ                                  - filter discard if:
        Ị                                    -   insignificant (discard any 0s or 1s)
           ‘                                 - increment (yielding all run-lengths >= 3)
            ɓ                                - new dyadic chain with that on the right
                                             - # get the multiplicities:
             Ġ                               - group indices of Z by value
              L€                             - length of €ach
                ḟ1                           - filter discard 1s
                  ,                          - pair with right (the run-lengths)
                   ɓ                         - new dyadic chain with that on the right
                                             - # get the prime-pairs
                     Ɲ                       - for each pair in Z
                    ¹                        -   identity (do nothing)
                          Ðf                 - filter keep if:
                         $                   -   last two links as a monad:
                      ÆP                     -     is prime? (vectorises)
                        Ạ                    -     all?
                            W                - wrap in a list
                             ;               - concatenate with right ([multiplicities,runs])
                              ɓ              - new dyadic chain with that on the right
                                             - # get top count as a list
                               L             - length
                                   21        - literal 21
                                  ¥          - last two links as a dyad
                                 <           -   less than? (1 if 20 or less, else 0)
                                ẋ            -   repeat ([length] if 20 or less, else [])
                                     W       - wrap in a list (i.e. [[length]] or [[]])
                                      ;      - concatenate with right ([[prime pairs],[multiplicities],[run-lengths]])
                                             - ...now we have [[length],[prime pairs],[multiplicities],[run-lengths]]
                                          "X - zip with X (the text-parts)
                                         €   -   for each (item in the current list):
                                       ż@    -     interleave with swapped arguments

Etkileyici! : P Cümleleri bile kullanmadı ... vay
NL628

2
Çünkü Jelly, sıkıştırılmış dizilere sahip olma yeteneğine sahiptir. Cümleler “...“...“...“...»kodun bir kısmında, sayıların yerine satır beslemeleri ile - böyle
Jonathan Allan

1
Bu bir sürü
lot

Gördüğüm en uzun jöle golf. Cevabım buraya yakın geliyor ama yine de 16 byte daha kısa
dylnan

@dylnan Daha uzun olan birkaç jöle golfe sahibim , bunlardan birkaçı daha etkileyici
Jonathan Allan

2

Java 10, 467 457 456 453 bayt

a->{int l=a.length,i=0,p=0,P=0,m[]=new int[999],t;String e=" Elements ",r=l<21?"The Top "+l+" Array"+e+"\n":"";for(;i<l;r+=i>0&&p(p)>1&p(t=a[i-1])>1?p+" And "+t+" Were Spotted Together, You Won't Believe What They Did\n":"",m[a[i++]]++)if(p<(p=a[i]))P++;else{r+=P>2?P+e+"Sort Themselves, Find Out What Comes Next\n":"";P=1;}for(;l-->0;r+=m[l]>1?"These "+m[l]+e+"Will Blow Your Mind\n":"");return r;}int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

Girdi dizisinin değerler 0 < N < 1000( [1,999]) içereceğini varsayar .

Çevrimiçi deneyin.

a->{                     // Method with integer-array parameter and String return-type
  int l=a.length,        //  Length of the input-array
      i=0,               //  Index-integer
      p=0,               //  Previous item, starting at 0
      P=0,               //  Sequence-counter, starting at 0
      m[]=new int[999],  //  Element-counter array, starting filled with 0s
      t;                 //  Temp-integer to reduce the byte-count
  String e=" Elements ", //  Temp-String " Elements " to reduce byte-count
         r=l<21?         //  If the size of the input-array is 20 or less:
            "The Top "+l+" Array"+e+"\n"
                         //    Start the result-String with 'length' gossip-line
           :             //   Else:
            "";          //    Start the result-String empty
  for(;i<l               //  Loop over the input-array
      ;                  //    After every iteration:
       r+=i>0&&          //     If this is not the first item,
           p(p)>1&p(t=a[i-1])>1?
                         //     and the current and previous items are both primes:
             p+" And "+t+" Were Spotted Together, You Won't Believe What They Did\n":"",
                         //      Append the 'two primes' gossip-line
       m[a[i++]]++)      //     Increase the counter of the current value by 1
    if(p<(p=a[i])        //   If the previous item is smaller than the current:
      P++;               //    Increase the sequence-counter by 1
    else{                //   Else:
      r+=P>2             //    If the sequence-counter is 3 or larger:
          P+e+"Sort Themselves, Find Out What Comes Next\n":"";
                         //     Append the 'sequence' gossip-line
      P=1;}              //    Reset the sequence-counter to 1
  for(;l-->0;            //  Loop over the Element-counter array
      r+=m[l]>1?         //   If this element occurred at least two times:
          "These "+m[l]+e+"Will Blow Your Mind\n":"");
                         //    Append the 'occurrence' gossip-line
  return r;}             //  Return the result

// Separated method to check if the given number is a prime
// If `n` is a prime, it remains the same; if not: either 1 or 0 is returned
int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

1
  • hala golf ama yardım çok takdir edilecektir

JavaScript (Node.js) , 397 bayt

a=>a.map(x=>(l<=x?s++:(s>2&&r.push(s+" Elements Sort Themselves, Find Out What Comes Next"),s=1),P(x)&&P(l)&&r.push(l+` And ${x} Were Spotted Together, You Won't Believe What They Did`),c[l=x]=-~c[x]),c=[s=l=r=[]])&&c.map((x,i)=>x>1&&c.indexOf(x)==i&&r.push(`These ${x} Elements Will Blow Your Mind`))&&[...r,...a[20]?[]:[`The Top ${a.length} Array Elements`]]
P=(n,i=1)=>n>1&&++i*i>n||n%i&&P(n,i)

Çevrimiçi deneyin!


Eğer gibi tek bir karakter değiştirerek kurtarabilecek '!'ile ' Elements '(veya benzeri)?
Jonathan Allan

Sağdaki monoton olarak artan bir koşuyu izleyen azalma olmadan doğru şekilde başaramadınız (verdiğiniz bağlantı "6 Öğeyi Kendilerini Sırala, Sırada Ne Geleceğini Öğrenin", "İleri" olmadığı için)
Jonathan Allan

EksikliğiThe Top * Array Elements
l4m2

iyi bu bile benim kökeni cevap daha kısa y kodu ben bu şekilde yaptım. düzeltilecektir. @ l4m2 teşekkürler
DanielIndie

% 100 emin değilim, çünkü meydan okuma açıklamasındaki cümle iki şekilde yorumlanabilir, ancak iki kez [5,10,5,10]çıktı almamalısınız These 2 Elements Will Blow Your Mind? Ben meydan parçası "düşünmek yalnızca benzersiz sayısı başına bir kere bu baskı. " Numaralarını demektir 5ve 10değil sayı N=2. Ama belki OP'den doğrulamasını isteyin. İkincisi, uygulamanız doğrudur ve diğer üç cevap yanlıştır. İlki yalnızca uygulamanız yanlışsa.
Kevin Cruijssen

1

JavaScript (node.js) , 351 350 349 347 bayt

a=>a.map((x,i)=>c[s=x>=l?-~s:++s>2&&(t+=s+` Elements Sort Themselves, Find Out What Comes Next
`),P(x)&P(l)&&(t+=l+` And ${x} Were Spotted Together, You Won't Believe What They Did
`),l=x]=-~c[x],t=a[20]?'':`The Top ${a.length} Array Elements
`,c=[s=l=P=(n,i=n)=>n%--i?P(n,i):1/i])+c.map(x=>x>1&&(t+=`These ${x} Elements Will Blow Your Mind
`))&&t

Çevrimiçi deneyin!

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.