Os dez principais elementos que você não vai acreditar estão nessa matriz


10

AKA: Gere Clickbait a partir de uma matriz.

Dada uma matriz de números inteiros, gere alguns clickbait dignos de constrangimento com base em sua disposição e comprimento:

  • Se tiver 20 elementos ou menos, você poderá criar uma lista dos principais X. Parâmetros: comprimento da matriz.
  • Os números primos são celebridades; portanto, a qualquer momento dois deles estão próximos um do outro, isso passa como fofoca. Parâmetros: os dois números primos adjacentes na ordem em que aparecem na matriz.
  • Se algum número aparecer duas ou mais vezes na matriz, é chocante e inacreditável e todos precisam ouvir sobre isso. Se vários números aparecerem duas vezes, faça uma notícia para cada um. Imprima apenas uma vez por número único. Parâmetros: ocorrência do número medido pela aparência total.
  • Se você vir três ou mais elementos em ordem crescente monotônica classificada , seguida por uma diminuição repentina, informe como eles são classificados e provoque o que acontece a seguir. Faça isso apenas uma vez por sequência. Parâmetros: comprimento da reta.

Estes são os respectivos clickbaits que você deve 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

Lembre-se de que você representa uma empresa de mídia barata, portanto precisará ordená-la e imprimir todos os títulos possíveis. Se houver dois títulos idênticos, imprima os dois.

Por exemplo, se você receber esse array ...

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

Você deve produzir todos estes, em ordem arbitrária:

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

Observe a falta deste título:

3 Elements Sort Themselves, Find Out What Comes Next

Como código de golfe, a resposta mais curta em bytes vence.


11
@ Arnauld não há uma diminuição repentina lá, então apenas imprima os três primeiros títulos.
NISSAN

11
Normalmente, não diminuo o voto, mas -1 por criar apenas um desafio apenas para usar um título de isca de clique e um formato de saída completamente desnecessário para um desafio do tipo "do A, B e C, ah e também D". Você realmente deve ler as coisas a evitar ao escrever desafios .
ბიმო

8
@BMO Talvez você deva ler a caixa de areia com mais frequência. Isso ficou lá por um período considerável, quando você pode ter expressado suas opiniões. Além disso, muitos desafios da utilização para este local clickbait, não é como este é o único desafio a fazê-lo lol
Conor O'Brien

6
Há casos de borda suficientes que sugiro que você escreva uma implementação de referência que demonstre as respostas lógicas exatas que devem ser seguidas.
21418 Lynn

5
@ ConorO'Brien: Provavelmente eu deveria, se o visse lá, expressaria minha opinião lá. Mas pensei em dar uma razão para o meu voto negativo, porque o voto silencioso não serve para ninguém. Sobre a isca por clique, acho que há uma enorme diferença entre um título atraente para um bom desafio e um desafio que foi feito apenas para o uso de um título de isca por clique.
ბიმო

Respostas:


5

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

Um link monádico que aceita uma lista de números inteiros, retornando uma lista de listas de clickbaits (cada uma das quais é uma lista de caracteres e números inteiros). Para um programa completo, imprima iscas de clique separadas por alimentação de linha, basta adicionar ẎYao final.

Experimente online! (O rodapé cria uma lista única de clickbaits e os separa com novas linhas.)
... ou veja o exemplo dado na pergunta.

Como?

Os 99 bytes mais à direita deste link formam um nilad (uma função com zero argumentos, ou seja, uma 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)

Vamos rotular essas partes do texto como X, agora o 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

Impressionante! : P Nem sequer usar as frases ... wow
NL628

2
Isso ocorre porque o Jelly tem a capacidade de ter cordas compactadas. As frases estão lá na “...“...“...“...»parte do código, com avanços de linha no lugar dos números - como esta
Jonathan Allan

11
Isso é um
monte de

O golfe mais longo que já vi. A minha resposta aqui chega perto, mas ainda mais curto por 16 bytes
dylnan

@dylnan Eu tenho um alguns campos de golfe da geléia que são mais longos, alguns dos quais eu acho que são mais impressionante
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;}

Assume que a matriz de entrada conterá valores 0 < N < 1000( [1,999]).

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

1
  • ainda jogando golfe, mas a ajuda será muito 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)

Experimente online!


Você poderia economizar substituindo um único caractere como '!'por ' Elements '(ou similar)?
Jonathan Allan

Você falhou ao lidar corretamente com uma execução monotônica à direita, sem diminuir à direita (o link fornecido não deve gerar "6 elementos se classificam, descobrem o que vem a seguir", pois não há "Próximo")
Jonathan Allan

FaltaThe Top * Array Elements
l4m2

bem, este código y ainda mais curto na minha resposta de origem eu fiz dessa maneira. Será corrigido. @ l4m2 obrigado
DanielIndie 23/04

Não tenho 100% de certeza, porque a frase na descrição do desafio pode ser interpretada de duas maneiras, mas não deve [5,10,5,10]produzir These 2 Elements Will Blow Your Mindduas vezes? Penso que a parte do desafio " Imprima apenas uma vez por número único " significa os números 5e 10não o número N=2. Mas talvez peça ao OP para verificar. Se o segundo, sua implementação estiver correta e as outras três respostas estiverem incorretas. Se o primeiro apenas sua implementação estiver incorreta.
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

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.