Лучшие десять элементов, которые вы не поверите, находятся в этом массиве

10

АКА: генерировать кликбэйт из массива.

Получив массив целых чисел, сгенерируйте достойную клинбита приманку на основе его расположения и длины:

  • Если это 20 элементов или меньше, вы можете составить Top X List. Параметры: длина массива.
  • Простые числа - это знаменитости, поэтому каждый раз, когда двое из них находятся рядом друг с другом, это становится сплетней. Параметры: два смежных простых числа в порядке их появления в массиве.
  • Если какое-либо число встречается в массиве дважды или более, это шокирует и невероятно, и каждый должен услышать об этом. Если несколько номеров появляются дважды, создайте новостной сюжет для каждого из них. Напечатайте это только один раз для уникального номера. Параметры: вхождение числа, измеренного полным появлением.
  • Если вы видите 3+ элемента в отсортированном монотонно возрастающем порядке с последующим внезапным уменьшением, расскажите о том, как они отсортированы, и дразните, что происходит дальше. Делайте это только один раз подряд. Параметры: длина прямой.

Вот соответствующие кликбэйты, которые вы должны использовать:

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

Помните, что вы представляете дешевую медиа-компанию, поэтому вам нужно будет доить это и печатать все возможные названия. Если есть 2 одинаковых названия, напечатайте их обоих.

Например, если вам дан этот массив ...

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

Вы должны вывести все это в произвольном порядке:

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

Обратите внимание на отсутствие этого названия:

3 Elements Sort Themselves, Find Out What Comes Next

Что касается кода гольфа, выигрывает самый короткий ответ в байтах.

Нисса
источник
1
@ Arnauld Там нет внезапного снижения, так что просто напечатайте первые 3 названия.
Nissa
1
Обычно я не понижаю голос, но -1 за то, что создаю задачу только для того, чтобы использовать заголовок с нажатием кнопки мыши и совершенно ненужный выходной формат для вызова типа "do A, B и C, oh, а также D". Вы должны действительно прочитать Вещи, чтобы избежать при написании задач .
ბიმო
8
@BMO Может, тебе стоит почитать песочницу чаще? Это продолжалось довольно долго, когда вы, возможно, высказали свое мнение. Кроме того, многие проблемы на этом сайте используют кликбэйт, это не единственная проблема, которую можно сделать, лол
Конор О'Брайен,
6
Существует достаточно предельных случаев, и я предлагаю вам написать эталонную реализацию, которая демонстрирует точную логику, которой должны следовать ответы.
Линн
5
@ ConorO'Brien: Наверное, я должен, если бы я увидел это там, я бы высказал свое мнение там. Но я думал, что укажу причину моего отрицательного голоса, потому что тихое отрицательное голосование никому не нужно. Что касается клик-приманки, я думаю, что есть огромная разница между броским заголовком для хорошего задания и заданием, которое было сделано только для использования клик-наживки.
ბიმო

Ответы:

5

Желе , 142 байта

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

Монадическая ссылка, принимающая список целых чисел, возвращающая список списков приманок (каждый из которых представляет собой список символов и целых чисел). Для полноценной печати программы нажатием кнопки с разделительной строкой просто добавьте ẎYв конец.

Попробуйте онлайн! (Нижний колонтитул составляет один список приманок, а затем разделяет их новыми строками.)
... или посмотрите пример, приведенный в вопросе.

Как?

99 самых правых байтов этой ссылки образуют ниладу (функцию с нулевыми аргументами, то есть константой):

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

Давайте пометим эти текстовые части как X, теперь ссылка:

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
Джонатан Аллан
источник
Впечатляет! : P Даже не использовал предложения ... вау
NL628
2
Это потому, что у желе есть способность иметь сжатые строки. Предложения есть в той “...“...“...“...»части кода, где вместо чисел стоят переводы строк - вот так
Джонатан Аллан
1
Это целая лотота, Желе ...
Хулдраесет на'Барья
Самый длинный желейный гольф, который я видел. Мой ответ здесь близок, но все еще короче на 16 байт
dylnan
@dylnan У меня есть несколько гелей Jelly, которые длиннее, пару из которых я считаю более впечатляющими
Джонатан Аллан,
2

Java 10, 467 457 456 453 байта

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

Предполагается, что входной массив будет содержать значения 0 < N < 1000( [1,999]).

Попробуйте онлайн.

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
  • все еще играю в гольф, но помощь будет высоко ценится

JavaScript (Node.js) , 397 байт

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)

Попробуйте онлайн!

DanielIndie
источник
Не могли бы вы сохранить, заменив один символ, как '!'на ' Elements '(или похожий)?
Джонатан Аллан
Вы не смогли правильно обработать монотонно увеличивающийся прогон правой руки без конечного уменьшения (указанная вами ссылка не должна выводить «6 элементов, рассортируйте сами, узнайте, что будет дальше», так как нет «Далее»)
Джонатан Аллан
НедостатокThe Top * Array Elements
l4m2
ну это еще более короткий код в моем исходном ответе, я сделал это таким образом. будет исправлено. @ l4m2 спасибо
DanielIndie
Я не уверен на 100%, потому что предложение в описании задания можно интерпретировать двумя способами, но не следует ли [5,10,5,10]выводить These 2 Elements Will Blow Your Mindдважды? Я думаю, что часть задания «Напечатайте это только один раз для уникального номера » означает числа, 5а 10не число N=2. Но, возможно, попросите OP проверить. Если второе, ваша реализация верна, а остальные три ответа неверны. Если первое, то только ваша реализация неверна.
Кевин Круйссен
1

JavaScript (Node.js) , 351 350 349 347 байт

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

Попробуйте онлайн!

l4m2
источник