องค์ประกอบสิบอันดับแรกที่คุณไม่เชื่อว่าอยู่ในชุดนี้


10

AKA: สร้าง Clickbait จากแถวลำดับ

เมื่อกำหนดจำนวนเต็มให้สร้าง clickbait ที่คุ้มค่าขึ้นอยู่กับการจัดเรียงและความยาว:

  • หากเป็น 20 องค์ประกอบหรือน้อยกว่าคุณสามารถสร้างรายการ X อันดับสูงสุด พารามิเตอร์: ความยาวของอาร์เรย์
  • ตัวเลขสำคัญคือดาราดังนั้นเมื่อใดก็ตามที่มีสองคนอยู่ติดกันมันจะผ่านเหมือนการนินทา พารามิเตอร์: สองช่วงเวลาที่อยู่ติดกันตามลำดับที่ปรากฏในอาร์เรย์
  • หากหมายเลขใด ๆ ปรากฏขึ้นสองครั้งหรือมากกว่าในอาเรย์นั้นมันน่าตกใจและไม่น่าเชื่อและทุกคนต้องการได้ยินเกี่ยวกับมัน หากมีตัวเลขหลายตัวปรากฏขึ้นสองครั้งให้สร้างข่าวขึ้นมาสำหรับแต่ละคน พิมพ์หนึ่งครั้งต่อหมายเลขที่ไม่ซ้ำกันเท่านั้น พารามิเตอร์: การเกิดขึ้นของจำนวนที่วัดโดยลักษณะที่ปรากฏทั้งหมด
  • หากคุณเห็นองค์ประกอบ 3 รายการเรียงตามลำดับที่ เพิ่มขึ้นแบบ monotonicallyตามด้วยการลดลงอย่างกะทันหันให้บอกว่าพวกเขาเรียงลำดับแล้วหยอกล้อว่าจะเกิดอะไรขึ้นต่อไป ทำเช่นนี้เพียงครั้งเดียวต่อตรง พารามิเตอร์: ความยาวของเส้นตรง

นี่คือ clickbaits ที่เกี่ยวข้องที่คุณควรใช้:

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

ในฐานะที่เป็น code golf คำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ


1
@Arnauld ไม่มีการลดลงอย่างฉับพลันดังนั้นให้พิมพ์ 3 ชื่อแรก
Nissa

1
โดยปกติแล้วฉันจะไม่ downvote แต่ -1 สำหรับการสร้างความท้าทายเพียงเพื่อใช้ชื่อ click-bait และรูปแบบผลลัพธ์ที่ไม่จำเป็นโดยสิ้นเชิงสำหรับความท้าทายของประเภท "do A, B และ C, oh และ D" คุณควรอ่านสิ่งที่ต้องหลีกเลี่ยงเมื่อเขียนความท้าทาย
ბიმო

8
@BMO บางทีคุณควรอ่านกล่องทรายบ่อยขึ้น สิ่งนี้เกิดขึ้นในช่วงเวลาหนึ่งเมื่อคุณอาจแสดงความคิดเห็น นอกจากนี้ความท้าทายมากมายในเว็บไซต์นี้ใช้ clickbait มันไม่ได้เป็นเช่นนี้เป็นความท้าทายเพียงอย่างเดียวที่จะทำเช่นนั้นได้
Conor O'Brien

6
มีกรณีขอบที่เพียงพอที่ฉันแนะนำให้คุณเขียนการดำเนินการอ้างอิงที่แสดงให้เห็นถึงคำตอบตรรกะที่แน่นอนควรปฏิบัติตาม
ลินน์

5
@ ConorO'Brien: น่าจะเป็นฉันควรถ้าฉันเห็นมันที่นั่นฉันจะแสดงความคิดเห็นของฉันที่นั่น แต่ฉันคิดว่าฉันจะให้เหตุผลสำหรับ downvote ของฉันเพราะ downvoting อย่างเงียบ ๆ ไม่มีประโยชน์กับใคร เกี่ยวกับ click-bait ฉันคิดว่ามีความแตกต่างอย่างมากระหว่างชื่อลวงสำหรับความท้าทายที่ดีและความท้าทายที่สร้างขึ้นสำหรับการใช้ชื่อ click-bait เท่านั้น
ბიმო

คำตอบ:


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

ลิงก์ monadic ยอมรับรายการจำนวนเต็มส่งคืนรายการของ clickbaits (ซึ่งแต่ละรายการเป็นรายการของอักขระและจำนวนเต็ม) สำหรับ clickbaits แบบแยกบรรทัดการป้อนโปรแกรมการพิมพ์แบบสมบูรณ์เพียงแค่เพิ่มẎYไปยังจุดสิ้นสุด

ลองออนไลน์! (ส่วนท้ายทำรายการ clickbaits เดียวจากนั้นคั่นด้วยบรรทัดใหม่)
... หรือดูตัวอย่างที่ให้ไว้ในคำถาม

อย่างไร?

99 ไบต์ที่ถูกต้องที่สุดของลิงก์นี้จะสร้าง nilad (ฟังก์ชั่นที่มีอาร์กิวเมนต์เป็นศูนย์เช่นค่าคงที่):

“...“...“...“...»ṣ€⁷¤
                    ¤ - 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
นั่นเป็นเพราะเจลลี่มีความสามารถในการบีบอัดสตริง ประโยคอยู่ใน“...“...“...“...»ส่วนของรหัสโดยมีการป้อนบรรทัดแทนตัวเลข - เช่นนี้
Jonathan Allan

1
นั่นเป็นเยลลี่ที่พูดถึงได้ทั้งหมด ...
Khuldraeseth na'Barya

กอล์ฟเยลลี่ที่ยาวที่สุดที่ฉันเคยเห็น คำตอบของฉันมาที่นี่แต่ใกล้จะสั้นลง 16 ไบต์
dylnan

@dylnan ฉันมีสนามกอล์ฟ Jelly อยู่สองสามสนามที่ยาวกว่าอีกสองแห่งซึ่งฉันคิดว่าน่าประทับใจกว่า
Jonathan Allan

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)

ลองออนไลน์!


คุณสามารถบันทึกโดยการแทนที่ตัวอักษรตัวเดียวเช่น'!'กับ' Elements '(หรือคล้ายกัน)?
Jonathan Allan

คุณล้มเหลวในการจัดการกับการเพิ่มทางด้านขวาอย่าง monotonically โดยไม่ลดทอนอย่างถูกต้อง (ลิงค์ที่คุณให้ไม่ควรส่งออก "6 องค์ประกอบเรียงลำดับตัวเองค้นหาว่ามีอะไรมาต่อไป" เนื่องจากไม่มี "ถัดไป")
Jonathan Allan

ขาดThe Top * Array Elements
l4m2

นี่คือรหัส y ที่สั้นกว่านี้ในคำตอบที่มาของฉันฉันทำแบบนี้ จะได้รับการแก้ไข @ l4m2 ขอบคุณ
DanielIndie

ฉันไม่แน่ใจ 100% เพราะประโยคในคำอธิบายการท้าทายสามารถตีความได้สองวิธี แต่ไม่ควร[5,10,5,10]ส่งออกThese 2 Elements Will Blow Your Mindสองครั้งหรือ ผมคิดว่าส่วนหนึ่งที่ท้าทาย " เพียงพิมพ์นี้เพียงครั้งเดียวต่อจำนวนที่ไม่ซ้ำกัน. " หมายความว่าตัวเลข5และไม่ได้จำนวน10 N=2แต่อาจขอให้ OP ตรวจสอบ หากข้อที่สองการใช้งานของคุณถูกต้องและอีกสามคำตอบนั้นไม่ถูกต้อง ถ้าสิ่งแรกที่คุณนำไปใช้นั้นไม่ถูกต้อง
Kevin Cruijssen

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

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.