องค์ประกอบอาร์เรย์ที่หลงใหลในตัวเอง


15

คำนิยาม

Narcissistic 1จำนวนเต็มของอาร์เรย์คิดว่าพวกเขาดีกว่าเพื่อนบ้านเพราะพวกเขาสูงกว่าค่าเฉลี่ยเลขคณิตของพวกเขาอย่างเคร่งครัด

เพื่อนบ้านถูกกำหนดดังนี้:

  • ถ้าจำนวนเต็มอยู่ที่ดัชนี0 (อันแรก) แสดงว่าเพื่อนบ้านเป็นองค์ประกอบสุดท้ายและองค์ประกอบที่สองของรายการ

  • หากจำนวนเต็มไม่ใช่ครั้งแรกหรือครั้งสุดท้ายเพื่อนบ้านจะเป็นสององค์ประกอบที่อยู่ติดกันทันที

  • หากจำนวนเต็มอยู่ที่ดัชนี-1 (สุดท้าย) จากนั้นเพื่อนบ้านคือองค์ประกอบที่สองและองค์ประกอบแรกของรายการ


งาน

เมื่อกำหนดอาร์เรย์จำนวนเต็มงานของคุณคือการทิ้งสิ่งหลงตัวเอง

  • จำนวนเต็มสามารถเป็นค่าบวกลบหรือศูนย์

  • คุณอาจคิดว่าอาเรย์นั้นมีองค์ประกอบอย่างน้อยสามองค์ประกอบ

  • ใช้กฎมาตรฐานทั้งหมด นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ

ตัวอย่าง

[6, 9, 4, 10, 16, 18, 13]พิจารณาอาร์เรย์ จากนั้นเราสามารถสร้างตารางต่อไปนี้:

องค์ประกอบ | เพื่อนบ้าน ค่าเฉลี่ยของเพื่อนบ้าน หลงตัวเองหรือไม่
-------- + ------------ + + ------------------ --------- --------
6 | 13, 9 | 11 | เท็จ
9 | 6, 4 | 5 | จริง
4 | 9, 10 | 9.5 | เท็จ
10 | 4, 16 | 10 | เท็จ
16 | 10, 18 | 14 | จริง
18 | 16, 13 | 14.5 | จริง
13 | 18, 6 | 12 | จริง

[6, 4, 10]โดยการกรองคนที่หลงตัวเองออกเราจะเหลือ และนั่นมัน!

กรณีทดสอบ

อินพุต -> เอาท์พุท

[5, -8, -9] -> [-8, -9]
[8, 8, 8, 8] -> [8, 8, 8, 8]
[11, 6, 9, 10] -> [6, 10]
[1, 2, 0, 1, 2] -> [1, 0, 1]
[6, 9, 4, 10, 16, 18, 13] -> [6, 4, 10]
[6, -5, 3, -4, 38, 29, 82, -44, 12] -> [-5, -4, 29, -44]

1 - Narcissistไม่ได้หมายความว่าทางคณิตศาสตร์หลงตัวเอง

คำตอบ:


7

เยลลี่ 10 ไบต์

ṙ2+ṙ-<ḤCx@

ลองออนไลน์!

คำอธิบาย:

ṙ2+ṙ-<ḤCx@
ṙ2         Rotate the original list two elements to the left
  +        Add each element to the respective element of the original list
   ṙ-      Rotate the result one element to the right
     <Ḥ    Check if each element is less than the double of its respective element on the original list
       C   Subtract each 1/0 boolean from 1 (logical NOT in this case)
        x@ Repeat each element of the original list as many times as the respective element of the logical NOT (i.e. keep elements of the original list where the respective element from the result is 1)


6

JavaScript (ES6), 57 56 ไบต์

a=>a.filter((e,i)=>e+e<=a[(i||l)-1]+a[++i%l],l=a.length)

แก้ไข: บันทึก 1 ไบต์ต้องขอบคุณ @ g00glen00b


5

Mathematica ขนาด 44 ไบต์

Pick[#,#<=0&/@(2#-(r=RotateLeft)@#-#~r~-1)]&

มันทำงานอย่างไร

รับอินพุตเช่น{11,6,9,10}คำนวณ

2*{11,6,9,10} - {6,9,10,11} - {10,11,6,9}

และเลือกองค์ประกอบของอินพุตต้นฉบับในสถานที่ที่ผลลัพธ์นี้มีค่ามากที่สุด 0



4

Haskell , 51 ไบต์

f s=[b|(a,b,c)<-zip3(last s:s)s$tail$s++s,b*2<=a+c]

ลองออนไลน์! ตัวอย่างการใช้งาน: อัตราผลตอบแทนf [1,2,3][1,2]

สำหรับs = [1,2,3], last s:sคือรายการ[3,1,2,3]และรายการtail$s++s สร้างรายการอเนกประสงค์จากสามรายการที่กำหนดตัดส่วนที่ยาวขึ้นให้ยาวตามความยาวของรายการที่สั้นที่สุด เราได้รับโดยเป็นองค์ประกอบรายการดั้งเดิมและและเพื่อนบ้าน ความเข้าใจในรายการจากนั้นเลือกทุกที่ที่เป็นไม่ได้หลงตัวเอง[2,3,1,2,3]zip3(a,b,c)[(3,1,2),(1,2,3),(2,3,1)]bacbb*2<=a+cb


4

ระดับแปดเสียง / MATLAB, 48 ไบต์

@(x)x(conv([x(end),x,x(1)],[1,-2,1],'valid')>=0)

ลองออนไลน์!

คำอธิบาย

อาร์เรย์อินพุตถูกขยายเป็นครั้งแรกด้วยรายการสุดท้าย ( x(end)) และแรก ( x(1)) ที่ด้านที่เหมาะสม

การทดสอบความหลงตัวเองนั้นทำโดยการconvวางอาร์เรย์ที่ขยาย[1, -2, 1]และเก็บเฉพาะ'valid'ส่วน

การเปรียบเทียบแต่ละรายการในผลลัพธ์ของการแปลงด้วย0ให้ดัชนีแบบลอจิคัล (มาสก์) ซึ่งใช้เพื่อเลือกตัวเลขจากอินพุต



2

Japtap , 17 16 15 ไบต์

kÈ>½*[Y°ÉY]x!gU

ลองมัน


คำอธิบาย

Uการป้อนข้อมูลโดยปริยายของอาร์เรย์

kÈ>

ลบ ( k) องค์ประกอบที่คืนค่าจริงเมื่อส่งผ่านฟังก์ชั่นโดยYเป็นดัชนีปัจจุบันตรวจสอบว่าองค์ประกอบปัจจุบันมีค่ามากกว่า ...

[Y°ÉY]

อาร์เรย์[Y-1, Y+1]...

x!gU

ลดลงโดยการเพิ่ม ( x) หลังจากทำดัชนีแต่ละองค์ประกอบเป็นU...

½*

.5คูณด้วย


ทางเลือก 15 ไบต์

fÈ+X§UgYÉ +UgYÄ

ลองมัน


2

R , 51 56 ไบต์

ขอบคุณ user2390246 สำหรับการแก้ไขอัลกอริทึมของฉัน

function(l)l[c(l[-1],l[1])+c(l[s<-sum(l|1)],l[-s])>=2*l]

ลองออนไลน์!

ดัชนีlที่c(l[-1],l[1])+c(l[s],l[-s])ที่เพื่อนบ้านของจำนวนเงินที่มีไม่น้อยกว่าสองเท่าll





1

Java 8, 141 137 127 ไบต์

import java.util.*;a->{List r=new Stack();for(int i=0,l=a.length;i<l;)if(2*a[i]<=a[(i-1+l)%l]+a[++i%l])r.add(a[i-1]);return r;}

-10 ไบต์ขอบคุณ @Nevay

คำอธิบาย:

ลองที่นี่

import java.util.*;    // Required import for List and Stack

a->{                   // Method with integer-array parameter and List return-type
  List r=new Stack();  //  Return-list
  for(int i=0,         //  Index integer, starting at 0
      l=a.length;      //  Length of the input array
      i<l;)            //  Loop over the input array
    if(2*a[i]<=        //   If two times the current item is smaller or equal to:
        a[(i-1+l)%l]   //   The previous integer in the list
        +a[++i%l])     //   + the next integer in the list
      r.add(a[i-1]);   //    Add the current integer to the result-list
                       //  End of loop (implicit / single-line body)
  return r;            //  Return result-List
}                      // End of method


0

JavaScript ES5, 59 ไบต์

F=a=>a.filter((x,i)=>2*x<=a[-~i%(l=a.length)]+a[(i-1+l)%l])

console.log(""+F([5, -8, -9])==""+[-8, -9])
console.log(""+F([8, 8, 8, 8])==""+[8, 8, 8, 8])
console.log(""+F([11, 6, 9, 10])==""+[6, 10])
console.log(""+F([1, 2, 0, 1, 2])==""+[1, 0, 1])
console.log(""+F([6, 9, 4, 10, 16, 18, 13])==""+[6, 4, 10])
console.log(""+F([6, -5, 3, -4, 38, 29, 82, -44, 12])==""+[-5, -4, 29, -44])




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