Dziesięć najważniejszych elementów, w które nie uwierzysz, znajdują się w tej tablicy

10

Inna nazwa: Generuj Clickbait z tablicy.

Biorąc pod uwagę tablicę liczb całkowitych, wygeneruj godną pochwały Clickbait na podstawie jego rozmieszczenia i długości:

  • Jeśli jest to 20 elementów lub mniej, możesz utworzyć listę Top X. Parametry: długość tablicy.
  • Liczby pierwsze są celebrytami, więc za każdym razem, gdy dwa z nich znajdą się obok siebie, przejdzie jako plotka. Parametry: dwie sąsiednie liczby pierwsze w kolejności, w jakiej występują w tablicy.
  • Jeśli jakakolwiek liczba pojawi się dwa lub więcej w tablicy, to jest szokująca i niewiarygodna i każdy musi o tym usłyszeć. Jeśli wiele numerów pojawi się dwa razy, zrób z nich historię wiadomości. Wydrukuj to tylko raz na unikalny numer. Parametry: występowanie liczby mierzonej całkowitym wyglądem.
  • Jeśli zobaczysz ponad 3 elementy w posortowanym monotonicznie rosnącym porządku, a następnie nagły spadek, to powiedz, jak są posortowane i drażnij się o tym, co będzie dalej. Zrób to tylko raz na strita. Parametry: długość prostej.

Są to odpowiednie zestawy kliknięć, których należy użyć:

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

Pamiętaj, że reprezentujesz tanią firmę medialną, więc musisz doić ją i wydrukować każdy możliwy tytuł. Jeśli są 2 identyczne tytuły, wydrukuj je oba.

Na przykład, jeśli otrzymasz tę tablicę…

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

Powinieneś wypisać wszystkie, w dowolnej kolejności:

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

Zwróć uwagę na brak tego tytułu:

3 Elements Sort Themselves, Find Out What Comes Next

Jako golfowy kod wygrywa najkrótsza odpowiedź w bajtach.

Nissa
źródło
1
@Arnauld nie ma tam nagłego spadku, więc po prostu wydrukuj pierwsze 3 tytuły.
Nissa,
1
Zwykle nie oddaję głosu, ale -1 za samo stworzenie wyzwania, aby użyć tytułu przynęty klikającej i całkowicie niepotrzebnego formatu wyjściowego dla wyzwania typu „do A, B i C, och, a także D”. Powinieneś naprawdę przeczytać Rzeczy, których należy unikać, pisząc wyzwania .
ბიმო
8
@BMO Może powinieneś częściej czytać piaskownicę. Trwało to przez długi czas, kiedy mogłeś wyrazić swoje opinie. Ponadto, wiele wyzwań na tej stronie używa clickbait, to nie tak, że jest to jedyne wyzwanie, aby to zrobić lol
Conor O'Brien
6
Istnieje wystarczająca liczba przypadków skrajnych, które sugerują napisanie referencyjnej implementacji, która pokazuje dokładne logiczne odpowiedzi, które powinny nastąpić.
Lynn
5
@ ConorO'Brien: Prawdopodobnie powinienem, gdybym go tam zobaczył, wyraziłem tam swoją opinię. Ale pomyślałem, że podam powód mojego głosowania, ponieważ ciche głosowanie nie przydaje się nikomu. Jeśli chodzi o klik-przynętę, myślę, że istnieje ogromna różnica między chwytliwym tytułem dla dobrego wyzwania a wyzwaniem, które zostało stworzone tylko przy użyciu tytułu przynęty na kliknięcie.
ბიმო

Odpowiedzi:

5

Galaretka , 142 bajty

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

Monadyczny link akceptujący listę liczb całkowitych, zwracający listę list kliknięć (z których każda jest listą znaków i liczb całkowitych). Aby uzyskać pełny program do drukowania rozdzielone liniami kliknięcia, po prostu dodaj ẎYna końcu.

Wypróbuj online! (Stopka tworzy pojedynczą listę zestawów kliknięć, a następnie oddziela je nowymi wierszami.)
... lub zobacz przykład podany w pytaniu.

W jaki sposób?

99 najbardziej prawych bajtów tego linku tworzy nilad (funkcja z zerowymi argumentami, tj. Stałą):

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

Oznaczmy te części tekstowe jako X, teraz Link to:

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
źródło
Imponujący! : P Nawet nie użył zdań ... wow
NL628
2
To dlatego, że Jelly ma zdolność do kompresowania łańcuchów. Zdania są tam w “...“...“...“...»części kodu, z wierszami zamiast liczb - tak jak to
Jonathan Allan
1
To całe
mnóstwo
Najdłuższy golf, jaki widziałem. Moja odpowiedź tutaj jest bliska, ale wciąż krótsza o 16 bajtów
dylnan
@dylnan mogę mieć do kilku golfs Jelly które są dłuższe, para, która moim zdaniem są bardziej imponujące
Jonathan Allan
2

Java 10, 467 457 456 453 bajtów

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

Zakłada, że ​​tablica wejściowa będzie zawierać wartości 0 < N < 1000( [1,999]).

Wypróbuj 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
źródło
1
  • nadal gra w golfa, ale pomoc będzie mile widziana

JavaScript (Node.js) , 397 bajtów

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)

Wypróbuj online!

DanielIndie
źródło
Można zaoszczędzić wymieniając pojedynczy znak jak '!'z ' Elements '(lub podobne)?
Jonathan Allan
Nie udało ci się poprawnie obsłużyć monotonicznie rosnącego biegu po prawej stronie bez spadku końcowego (podany link nie powinien dawać wyniku „6 elementów się posortuje, dowiedz się, co będzie dalej”, ponieważ nie ma „następnego”)
Jonathan Allan
BrakThe Top * Array Elements
l4m2
cóż, ten jeszcze krótszy kod w mojej źródłowej odpowiedzi zrobiłem w ten sposób. Zostanie naprawione. @ l4m2 dzięki
DanielIndie
Nie jestem w 100% pewien, ponieważ zdanie w opisie wyzwania można interpretować na dwa sposoby, ale czy nie powinno się [5,10,5,10]wypisywać These 2 Elements Will Blow Your Minddwa razy? Myślę, że część „Wyzwanie wydrukuj tylko raz na unikalny numer. Oznacza liczby, 5a 10nie liczbę N=2. Ale może poproś OP o weryfikację. Jeśli drugi, Twoja implementacja jest poprawna, a pozostałe trzy odpowiedzi są niepoprawne. Jeśli pierwsza tylko twoja implementacja jest niepoprawna.
Kevin Cruijssen
1

JavaScript (Node.js) , 351 350 349 347 bajtów

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

Wypróbuj online!

l4m2
źródło