Sepuluh Elemen Teratas yang Tidak Akan Anda Percayai Ada Dalam Array Ini

10

AKA: Hasilkan Clickbait Dari Array.

Diberikan array bilangan bulat, buat beberapa clickbait yang layak ngeri berdasarkan pengaturan dan panjangnya:

  • Jika 20 elemen atau kurang, Anda dapat membuat Daftar X Teratas. Parameter: panjang array.
  • Bilangan prima adalah selebritas, jadi kapan pun keduanya bertetangga, itu akan dianggap sebagai gosip. Parameter: dua bilangan prima yang berdekatan dalam urutan mereka muncul dalam array.
  • Jika nomor muncul dua kali atau lebih dalam array, maka itu mengejutkan dan sulit dipercaya dan semua orang perlu mendengarnya. Jika beberapa angka muncul dua kali, buat berita untuk masing-masingnya. Hanya cetak ini sekali per nomor unik. Parameter: kemunculan angka yang diukur dengan penampilan total.
  • Jika Anda melihat 3+ elemen dalam urutan diurutkan secara monoton , diikuti oleh penurunan mendadak, maka ceritakan bagaimana mereka diurutkan dan goda tentang apa yang terjadi selanjutnya. Hanya lakukan ini sekali per lurus. Parameter: panjang lurus.

Ini adalah masing-masing clickbaits yang harus Anda gunakan:

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

Ingat, Anda mewakili perusahaan media murah, jadi Anda harus memerah susu ini dan mencetak setiap judul yang mungkin. Jika ada 2 judul yang identik, cetak keduanya.

Misalnya, jika Anda diberi larik ini ...

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

Anda harus menampilkan semua ini, dalam urutan acak:

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

Perhatikan kekurangan judul ini:

3 Elements Sort Themselves, Find Out What Comes Next

Sebagai golf kode, jawaban tersingkat dalam byte menang.

Nissa
sumber
1
@Arnauld tidak ada penurunan tiba-tiba di sana, jadi cetak saja 3 judul pertama.
Nissa
1
Biasanya saya tidak downvote, tetapi -1 untuk semata-mata menciptakan tantangan hanya dengan menggunakan judul umpan-klik dan format output yang sama sekali tidak perlu untuk tantangan ketik "do A, B dan C, oh dan juga D". Anda harus benar-benar membaca Hal-hal yang harus dihindari ketika menulis tantangan .
ბიმო
8
@BMO Mungkin Anda harus membaca kotak pasir lebih sering. Ini ada di sana untuk jangka waktu yang cukup lama, ketika Anda mungkin telah menyuarakan pendapat Anda. Juga, banyak tantangan di situs ini menggunakan clickbait, tidak seperti ini satu-satunya tantangan untuk melakukannya lol
Conor O'Brien
6
Ada cukup kasus tepi yang saya sarankan Anda menulis implementasi referensi yang menunjukkan jawaban logis yang tepat harus diikuti.
Lynn
5
@ ConorO'Brien: Mungkin saya harus, jika saya melihatnya di sana, saya akan menyuarakan pendapat saya di sana. Tapi saya pikir saya akan memberikan alasan untuk downvote saya karena downvoting diam-diam tidak ada gunanya bagi siapa pun. Tentang umpan-klik, saya pikir ada perbedaan besar antara judul yang menarik untuk tantangan yang baik dan tantangan yang hanya dibuat untuk menggunakan judul umpan-klik.
ბიმო

Jawaban:

5

Jelly , 142 byte

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

Tautan monadik yang menerima daftar bilangan bulat, mengembalikan daftar daftar clickbaits (masing-masing adalah daftar karakter dan bilangan bulat). Untuk pencetakan baris penuh program-feed clickbaits terpisah cukup tambahkan ẎYsampai akhir.

Cobalah online! (Footer membuat satu daftar clickbaits dan kemudian memisahkannya dengan baris baru.)
... atau lihat contoh yang diberikan dalam pertanyaan.

Bagaimana?

99 byte paling kanan dari tautan ini membentuk nilad (fungsi dengan argumen nol, yaitu konstanta):

“...“...“...“...»ṣ€⁷¤
                    ¤ - 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)

Mari beri label bagian teks ini sebagai X, sekarang Tautannya adalah:

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
Jonathan Allan
sumber
Impresif! : P Bahkan tidak menggunakan kalimat ... wow
NL628
2
Itu karena Jelly memiliki kemampuan untuk memiliki string terkompresi. Kalimat-kalimat ada di “...“...“...“...»bagian kode, dengan baris feed menggantikan nomor - seperti ini
Jonathan Allan
1
Itu adalah keseluruhan Jelly ...
Khuldraeseth na'Barya
Golf jeli terpanjang yang pernah kulihat. Jawaban saya di sini mendekati tetapi masih lebih pendek sebesar 16 byte
dylnan
@dylnan Saya memiliki sebuah beberapa golfs Jelly yang lebih panjang, pasangan yang saya pikir lebih mengesankan
Jonathan Allan
2

Java 10, 467 457 456 453 byte

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;}

Mengasumsikan input-array akan berisi nilai 0 < N < 1000( [1,999]).

Cobalah online.

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;}
Kevin Cruijssen
sumber
1
  • masih bermain golf tetapi bantuan akan sangat dihargai

JavaScript (Node.js) , 397 byte

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)

Cobalah online!

DanielIndie
sumber
Bisakah Anda menyimpan dengan mengganti satu karakter seperti '!'dengan ' Elements '(atau serupa)?
Jonathan Allan
Anda telah gagal menangani dengan benar peningkatan yang dijalankan secara monoton tanpa penurunan trailing (tautan yang Anda berikan tidak boleh menampilkan "6 Elemen Sortir Sendiri, Cari Tahu Apa yang Datang Selanjutnya", karena tidak ada "Selanjutnya")
Jonathan Allan
KurangThe Top * Array Elements
14m2
baik kode y ini bahkan lebih pendek dalam jawaban asal saya saya melakukannya dengan cara ini. akan diperbaiki. @ l4m2 terima kasih
DanielIndie
Saya tidak yakin 100%, karena kalimat dalam deskripsi tantangan dapat diartikan dua cara, tetapi tidak harus [5,10,5,10]menghasilkan These 2 Elements Will Blow Your Minddua kali? Saya pikir bagian tantangan " Hanya cetak sekali ini per nomor unik. " Berarti angka 5dan 10, bukan angka N=2. Tapi mungkin minta OP untuk memverifikasi. Jika yang kedua, implementasi Anda benar dan tiga jawaban lainnya salah. Jika yang pertama hanya implementasi Anda yang salah.
Kevin Cruijssen
1

JavaScript (Node.js) , 351 350 349 347 byte

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

Cobalah online!

l4m2
sumber