Les dix principaux éléments que vous ne croirez pas sont dans ce tableau

10

Alias: générer des appâts cliquables à partir d'un tableau.

Étant donné un tableau d'entiers, générez des appâts cliquables dignes de ce nom en fonction de son agencement et de sa longueur:

  • Si c'est 20 éléments ou moins, vous pouvez faire une liste Top X. Paramètres: longueur du tableau.
  • Les nombres premiers sont des célébrités, donc à chaque fois que deux d'entre eux sont côte à côte, cela passera comme des ragots. Paramètres: les deux nombres premiers adjacents dans l'ordre où ils apparaissent dans le tableau.
  • Si un nombre apparaît deux fois ou plus dans le tableau, c'est choquant et incroyable et tout le monde doit en entendre parler. Si plusieurs numéros apparaissent deux fois, créez un reportage pour chacun d'eux. N'imprimez cela qu'une seule fois par numéro unique. Paramètres: occurrence du nombre mesuré par l'apparence totale.
  • Si vous voyez plus de 3 éléments dans un ordre croissant monotone trié , suivi d'une diminution soudaine, dites-leur comment ils sont triés et taquinez ce qui se passe ensuite. Ne faites cela qu'une fois par ligne droite. Paramètres: longueur de la ligne droite.

Voici les appâts clics respectifs que vous devez utiliser:

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

N'oubliez pas que vous représentez une entreprise de médias bon marché, vous devrez donc la traire et imprimer tous les titres possibles. S'il y a 2 titres identiques, imprimez-les tous les deux.

Par exemple, si vous disposez de ce tableau…

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

Vous devez sortir tout cela, dans un ordre arbitraire:

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

A noter l' absence de ce titre:

3 Elements Sort Themselves, Find Out What Comes Next

En tant que code golf, la réponse la plus courte en octets l'emporte.

Nissa
la source
1
@Arnauld, il n'y a pas de diminution soudaine, alors imprimez simplement les 3 premiers titres.
Nissa
1
Habituellement, je ne downvote pas, mais -1 pour créer uniquement un défi juste pour utiliser un titre de click-bait et un format de sortie complètement inutile pour un défi de type "faire A, B et C, oh et aussi D". Vous devriez vraiment lire les choses à éviter lorsque vous écrivez des défis .
ბიმო
8
@BMO Vous devriez peut-être lire le bac à sable plus souvent. C'était là pendant une durée considérable, quand vous auriez pu exprimer vos opinions. De plus, de nombreux défis sur ce site utilisent des appâts cliquables, ce n'est pas comme si c'était le seul défi à le faire lol
Conor O'Brien
6
Il y a suffisamment de cas limites que je vous suggère d'écrire une implémentation de référence qui montre les réponses logiques exactes à suivre.
Lynn
5
@ ConorO'Brien: Je devrais probablement, si je l'ai vu là-bas, j'avais exprimé mon opinion là-bas. Mais je pensais que je donnerais une raison à mon vote négatif, car le vote en silence ne sert à personne. À propos du click-bait, je pense qu'il y a une énorme différence entre un titre accrocheur pour un bon défi et un défi qui n'a été fait que pour utiliser un titre click-bait.
2018

Réponses:

5

Gelée , 142 octets

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

Un lien monadique acceptant une liste d'entiers, renvoyant une liste de listes d'appâts (dont chacun est une liste de caractères et d'entiers). Pour un programme complet d'impression d'appâts cliquables séparés par saut de ligne, ajoutez simplement ẎYà la fin.

Essayez-le en ligne! (Le pied de page crée une seule liste d'appâts de clic, puis les sépare par des nouvelles lignes.)
... ou consultez l'exemple donné dans la question.

Comment?

Les 99 octets les plus à droite de ce lien forment une nilade (une fonction avec zéro argument, c'est-à-dire une constante):

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

Étiquetons ces parties de texte comme X, maintenant le lien est:

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
la source
Impressionnant! : P N'a même pas utilisé les phrases ... wow
NL628
2
C'est parce que Jelly a la capacité d'avoir des chaînes compressées. Les phrases sont là dans la “...“...“...“...»partie du code, avec des sauts de ligne à la place des chiffres - comme ceci
Jonathan Allan
1
C'est beaucoup de gelée ...
Khuldraeseth na'Barya
Le plus long golf de gelée que j'ai vu. Ma réponse ici se rapproche mais reste plus courte de 16 octets
dylnan
@dylnan J'ai un peu Golfs Jelly qui sont plus longues, un couple dont je pense sont plus impressionnants
Jonathan Allan
2

Java 10, 467 457 456 453 octets

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

Suppose que le tableau d'entrée contiendra des valeurs 0 < N < 1000( [1,999]).

Essayez-le en ligne.

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
la source
1
  • toujours au golf mais l'aide sera très appréciée

JavaScript (Node.js) , 397 octets

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)

Essayez-le en ligne!

DanielIndie
la source
Pourriez - vous faire économiser en remplaçant un seul caractère , comme '!'avec ' Elements '(ou similaire)?
Jonathan Allan
Vous n'avez pas réussi à gérer correctement une course à augmentation monotone à droite sans diminution de fin (le lien que vous donnez ne devrait pas produire "6 éléments, triez-les eux-mêmes, découvrez ce qui vient ensuite", car il n'y a pas de "suivant")
Jonathan Allan
ManqueThe Top * Array Elements
l4m2
bien ce code y encore plus court dans ma réponse d'origine, je l'ai fait de cette façon. sera fixé. @ l4m2 thanks
DanielIndie
Je ne suis pas sûr à 100%, car la phrase dans la description du défi peut être interprétée de deux manières, mais ne devrait pas [5,10,5,10]produire These 2 Elements Will Blow Your Minddeux fois? Je pense que la partie défi " N'imprimez ceci qu'une fois par numéro unique. " Signifie les chiffres 5et 10non le numéro N=2. Mais demandez peut-être à OP de vérifier. Si le second, votre implémentation est correcte et les trois autres réponses sont incorrectes. Si la première seule votre implémentation est incorrecte.
Kevin Cruijssen
1

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

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

Essayez-le en ligne!

l4m2
la source