Die zehn wichtigsten Elemente, an die Sie nicht glauben werden, befinden sich in diesem Array

10

AKA: Clickbait aus einem Array generieren.

Generieren Sie bei einer Reihe von Ganzzahlen einen krampfwürdigen Clickbait, der auf seiner Anordnung und Länge basiert:

  • Wenn es 20 Elemente oder weniger sind, können Sie eine Top X-Liste erstellen. Parameter: Länge des Arrays.
  • Primzahlen sind Berühmtheiten, und wenn zwei von ihnen nebeneinander stehen, wird dies als Klatsch bezeichnet. Parameter: Die beiden benachbarten Primzahlen in der Reihenfolge, in der sie im Array angezeigt werden.
  • Wenn eine Zahl zweimal oder öfter im Array erscheint, ist dies schockierend und unglaublich und jeder muss davon hören. Wenn mehrere Zahlen zweimal erscheinen, erstellen Sie für jede eine Nachricht. Drucken Sie dies nur einmal pro eindeutiger Nummer. Parameter: Auftreten der Zahl gemessen am Gesamterscheinungsbild.
  • Wenn Sie 3+ Elemente sehen sortiert monoton steigende Ordnung, durch eine plötzliche Abnahme gefolgt, dann erzählen, wie sie sortiert und necken über das, was als nächstes passiert. Tun Sie dies nur einmal pro Gerade. Parameter: Länge der Geraden.

Dies sind die jeweiligen Clickbaits, die Sie verwenden sollten:

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

Denken Sie daran, dass Sie ein billiges Medienunternehmen repräsentieren. Sie müssen dies also melken und jeden möglichen Titel ausdrucken. Wenn zwei identische Titel vorhanden sind, drucken Sie beide aus.

Zum Beispiel, wenn Sie dieses Array erhalten ...

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

Sie sollten alle diese in beliebiger Reihenfolge ausgeben:

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

Beachten Sie das Fehlen dieses Titels:

3 Elements Sort Themselves, Find Out What Comes Next

Als Code Golf gewinnt die kürzeste Antwort in Bytes.

Nissa
quelle
1
@Arnauld gibt es dort keine plötzliche Abnahme, also drucken Sie einfach die ersten 3 Titel.
Nissa
1
Normalerweise stimme ich nicht ab, sondern -1, um nur eine Herausforderung zu erstellen, nur um einen Klick-Köder-Titel und ein völlig unnötiges Ausgabeformat für eine Herausforderung vom Typ "do A, B und C, oh und auch D" zu verwenden. Sie sollten wirklich Dinge lesen , die Sie beim Schreiben von Herausforderungen vermeiden sollten .
22.
8
@BMO Vielleicht solltest du die Sandbox öfter lesen. Dies war dort für eine beträchtliche Dauer, als Sie möglicherweise Ihre Meinung geäußert haben. Auch viele Herausforderungen auf dieser Website verwenden Clickbait, es ist nicht so, dass dies die einzige Herausforderung ist, dies zu tun lol
Conor O'Brien
6
Es gibt genügend Randfälle, von denen ich vorschlage, dass Sie eine Referenzimplementierung schreiben, die zeigt, welche genauen logischen Antworten folgen sollten.
Lynn
5
@ ConorO'Brien: Wahrscheinlich sollte ich, wenn ich es dort sehen würde, hätte ich dort meine Meinung geäußert. Aber ich dachte, ich würde einen Grund für meine Ablehnung angeben, weil stillschweigende Abstimmungen für niemanden von Nutzen sind. In Bezug auf den Klick-Köder gibt es meiner Meinung nach einen großen Unterschied zwischen einem eingängigen Titel für eine gute Herausforderung und einer Herausforderung, die nur für die Verwendung eines Klick-Köder-Titels gemacht wurde.
22.

Antworten:

5

Gelee , 142 Bytes

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

Ein monadischer Link, der eine Liste von Ganzzahlen akzeptiert und eine Liste von Listen von Clickbaits zurückgibt (von denen jede eine Liste von Zeichen und Ganzzahlen ist). Für ein vollständiges Programm, das Zeilenvorschub-getrennte Clickbaits druckt, fügen Sie einfach ẎYam Ende hinzu.

Probieren Sie es online aus! (Footer erstellt eine einzelne Liste von Clickbaits und trennt sie dann durch neue Zeilen.)
... oder sehen Sie sich das Beispiel in der Frage an.

Wie?

Die 99 am weitesten rechts stehenden Bytes dieses Links bilden eine Null (eine Funktion mit null Argumenten, dh eine Konstante):

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

Beschriften wir diese Textteile als X, jetzt lautet der Link:

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
quelle
Beeindruckend! : P Hat nicht einmal die Sätze benutzt ... wow
NL628
2
Das liegt daran, dass Jelly komprimierte Saiten haben kann. Die Sätze befinden sich im “...“...“...“...»Teil des Codes, mit Zeilenvorschüben anstelle der Zahlen - wie diese
Jonathan Allan
1
Das ist eine ganze Menge Gelee ...
Khuldraeseth na'Barya
Längstes Jelly Golf, das ich je gesehen habe. Meine Antwort hier kommt nahe, aber immer noch um 16 Bytes kürzer
Dylnan
@dylnan Ich habe ein paar Jelly Golfs, die länger sind, von denen ich einige beeindruckender
Jonathan Allan
2

Java 10, 467 457 456 453 Bytes

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

Angenommen, das Eingabearray enthält Werte 0 < N < 1000( [1,999]).

Probieren Sie es online aus.

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
quelle
1
  • immer noch Golf spielen, aber Hilfe wird sehr geschätzt

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)

Probieren Sie es online aus!

DanielIndie
quelle
Könnten Sie durch Ersetzen eines einzigen Zeichen wie sparen '!'mit ' Elements '(oder ähnliches)?
Jonathan Allan
Sie haben es nicht geschafft, einen monoton ansteigenden Lauf für die rechte Hand ohne nachlaufende Abnahme korrekt zu handhaben (der von Ihnen angegebene Link sollte nicht "6 Elemente selbst sortieren, herausfinden, was als nächstes kommt" ausgeben, da es kein "Weiter" gibt)
Jonathan Allan
MangelThe Top * Array Elements
l4m2
Nun, dieser noch kürzere y-Code in meiner Ursprungsantwort hat ich so gemacht. wird repariert. @ l4m2 danke
DanielIndie
Ich bin mir nicht 100% sicher, da der Satz in der Herausforderungsbeschreibung auf zwei Arten interpretiert werden kann, aber nicht zweimal [5,10,5,10]ausgegeben These 2 Elements Will Blow Your Mindwerden sollte. Ich denke, der Herausforderungsteil " Nur einmal pro eindeutiger Nummer drucken " bedeutet die Nummern 5und 10nicht die Nummer N=2. Aber vielleicht bitten Sie OP, dies zu überprüfen. Wenn die zweite, ist Ihre Implementierung korrekt und die anderen drei Antworten sind falsch. Wenn die erste nur Ihre Implementierung falsch ist.
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

Probieren Sie es online aus!

14 m2
quelle