Los diez elementos principales que no creerá están en esta matriz

10

AKA: Generar Clickbait a partir de una matriz.

Dada una variedad de enteros, genere algunos clickbait dignos de dolor basados ​​en su disposición y longitud:

  • Si tiene 20 elementos o menos, puede hacer una Lista de X principales. Parámetros: longitud de la matriz.
  • Los números primos son famosos, por lo que cada vez que dos de ellos estén uno al lado del otro, pasarán como chismes. Parámetros: los dos primos adyacentes en el orden en que aparecen en la matriz.
  • Si algún número aparece dos veces o más en la matriz, entonces es impactante e increíble y todos deben escucharlo. Si aparecen varios números dos veces, haga una noticia para cada uno. Imprima esto solo una vez por número único. Parámetros: aparición del número medido por la apariencia total.
  • Si ve más de 3 elementos en orden ordenado monotónicamente creciente , seguido de una disminución repentina, entonces diga cómo están ordenados y bromee sobre lo que sucede a continuación. Solo haz esto una vez por escalera. Parámetros: longitud de la recta.

Estos son los clickbaits respectivos que debe usar:

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

Recuerde, usted representa a una compañía de medios barata, por lo que deberá ordeñar esto e imprimir todos los títulos posibles. Si hay 2 títulos idénticos, imprímalos ambos.

Por ejemplo, si te dan esta matriz ...

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

Debe generar todos estos, en orden arbitrario:

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

Tenga en cuenta la falta de este título:

3 Elements Sort Themselves, Find Out What Comes Next

Como código de golf, gana la respuesta más corta en bytes.

Nissa
fuente
1
@Arnauld no hay una disminución repentina allí, así que solo imprime los primeros 3 títulos.
Nissa
1
Por lo general, no voto a favor, pero -1 por crear únicamente un desafío solo para usar un título de cebo de clic y un formato de salida completamente innecesario para un desafío de tipo "do A, B y C, oh y también D". Realmente deberías leer Cosas que debes evitar al escribir desafíos .
ბიმო
8
@ BMO Tal vez deberías leer el sandbox más seguido. Esto estuvo allí durante un tiempo considerable, cuando podría haber expresado sus opiniones. Además, muchos desafíos en este sitio usan clickbait, no es que este sea el único desafío para hacerlo jajaja
Conor O'Brien
66
Hay suficientes casos extremos que le sugiero que escriba una implementación de referencia que demuestre las respuestas lógicas exactas que deben seguir.
Lynn
55
@ ConorO'Brien: Probablemente debería, si lo viera allí, expresaría mi opinión allí. Pero pensé que daría una razón para mi voto negativo porque el voto negativo silencioso no sirve para nadie. Sobre el cebo de clic, creo que hay una gran diferencia entre un título atractivo para un buen desafío y un desafío que solo se ha hecho para usar un título de cebo de clic.
ბიმო

Respuestas:

5

Jalea , 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]⁷ṀƭȮþċ⁽?ṫĠƁÆȦØ⁾Ż»ṣ€⁷¤

Un enlace monádico que acepta una lista de enteros y devuelve una lista de listas de clickbaits (cada una de las cuales es una lista de caracteres y enteros). Para un programa completo que imprime clickbaits separados por avance de línea, simplemente agregue ẎYal final.

Pruébalo en línea! (El pie de página hace una lista única de clickbaits y luego los separa con nuevas líneas.)
... o vea el ejemplo dado en la pregunta.

¿Cómo?

Los 99 bytes más a la derecha de este enlace forman un nilad (una función con cero argumentos, es decir, una 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)

Etiquetemos estas partes de texto como X, ahora el Enlace es:

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
fuente
¡Impresionante! : P Ni siquiera
usé
2
Esto se debe a que Jelly tiene la capacidad de tener cadenas comprimidas. Las oraciones están allí en la “...“...“...“...»parte del código, con saltos de línea en lugar de los números, como este
Jonathan Allan el
1
Eso es una gran cantidad de gelatina ...
Khuldraeseth na'Barya
El golf de gelatina más largo que he visto. Mi respuesta aquí se acerca pero aún más corta en 16 bytes
dylnan
@dylnan Yo tengo un par de campos de golf de la jalea que son más largos, un par de los cuales creo que son más impresionante
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;}

Asume que la matriz de entrada contendrá valores 0 < N < 1000( [1,999]).

Pruébalo en línea.

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
fuente
1
  • sigue jugando al golf pero la ayuda será muy apreciada

JavaScript (Node.js) , 397 bytes

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)

Pruébalo en línea!

DanielIndie
fuente
¿Podría ahorrar reemplazando un solo carácter como '!'con ' Elements '(o similar)?
Jonathan Allan
No ha podido manejar correctamente una carrera de aumento monotónicamente a la derecha sin disminución de seguimiento (el enlace que proporciona no debe mostrar "6 elementos se ordenan, descubran lo que viene después", ya que no hay "siguiente")
Jonathan Allan
FaltaThe Top * Array Elements
l4m2
bueno, este código y aún más corto en mi respuesta de origen lo hice de esta manera. Será arreglado. @ l4m2 gracias
DanielIndie
No estoy 100% seguro, porque la oración en la descripción del desafío se puede interpretar de dos maneras, pero ¿no debería [5,10,5,10]salir These 2 Elements Will Blow Your Minddos veces? Creo que la parte del desafío " Solo imprima esto una vez por número único " significa los números 5y 10no el número N=2. Pero quizás le pida a OP que verifique. Si el segundo, su implementación es correcta y las otras tres respuestas son incorrectas. Si el primero solo su implementación es incorrecta.
Kevin Cruijssen
1

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

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

Pruébalo en línea!

l4m2
fuente