การแยกตัวของอาเรย์


13

รับอาร์เรย์ของจำนวนเต็มบวกส่งออกอาร์เรย์ที่มั่นคงของปัจจัยหลักที่แตกต่างของจำนวนเต็มเหล่านี้ กล่าวอีกนัยหนึ่งสำหรับแต่ละจำนวนเต็มในอินพุตตามลำดับรับปัจจัยสำคัญเรียงลำดับและผนวกเฉพาะช่วงเวลาใด ๆ ที่ไม่ได้อยู่ในเอาต์พุตไปยังเอาต์พุต

กรณีทดสอบ

[1,2,3,4,5,6,7,8,9,10] -> [2,3,5,7]
[10,9,8,7,6,5,4,3,2,1] -> [2,5,3,7]
[100,99,98,1,2,3,4,5] -> [2,5,3,11,7]
[541,60,19,17,22] -> [541,2,3,5,19,17,11]
[1,1,2,3,5,8,13,21,34,45] -> [2,3,5,13,7,17]
[6,7,6,7,6,7,6,5] -> [2,3,7,5]
[1] -> []
[8] -> [2]
[] -> []

เอาต์พุตสามารถเป็นอาร์เรย์หรือรายการของจำนวนเต็มหรือสตริง, เอาต์พุตแบบมีตัวคั่นหรือวิธีมาตรฐานอื่นใดของเอาต์พุตเอาต์พุตรายการตัวเลข

นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ



5
นี่เป็นหนึ่งในความท้าทายที่ฉันคิดว่า“ ง่ายเกินไป” เกือบทุกคำตอบจะเป็นแบบใดแบบหนึ่ง: (a) วนรอบอินพุตและ Ye Olde Prime Factorization Code ที่มีเงื่อนไขต่อท้าย; (b) สายโซ่ของสี่บิวด์อิน มีที่ว่างไม่มากสำหรับความคิดสร้างสรรค์ บางทีคำตอบอาจจะพิสูจน์ว่าฉันผิด แต่ฉันสงสัย มีสนามกอล์ฟเล็ก ๆ น้อย ๆ มากกว่าการแยกตัวประกอบเฉพาะที่นี่และนั่นถูกทำให้ตาย
ลินน์

1
@ ลินน์มันเป็นเรื่องง่ายสำหรับการเล่นกอล์ฟ แต่ไม่สำคัญสำหรับเกือบทุกอย่างอื่น ไม่แน่ใจว่าเป็นพื้นที่สำหรับเรื่องไม่สำคัญที่นี่: /
สตีเฟ่น

คุณบอกฉันได้ไหมว่าอะไรคือ "ปัจจัยสำคัญเฉพาะอย่าง" ของ 1
J42161217

1
@DigitalTrauma ใช่ มิฉะนั้นมันก็จะเป็น "เอาท์พุทชุดของปัจจัยสำคัญทั้งหมดของการป้อนข้อมูล"
สตีเฟ่น

คำตอบ:



5

Huskขนาด 3 ไบต์

1 ไบต์บันทึกขอบคุณที่@Zgarb

uṁp

ลองออนไลน์!


คำอธิบาย

โปรแกรมเต็มรูปแบบ

  p นายกปัจจัยของแต่ละ
 ṁฟังก์ชั่นแผนที่เหนือรายการและเชื่อมโยงผลลัพธ์
ไม่เหมือนใคร 

3
Σ†สามารถ
Zgarb

@Zgarb ขอบคุณมาก อย่างที่คุณสามารถบอกได้ว่ามันเป็นคำตอบ Husk แรกของฉันตลอดไป :)
Mr. Xcoder

ดีใจที่ได้เห็นผู้คนใหม่ ๆ ใช้ Husk :)
Zgarb

1
@Zgarb ดูเหมือนดีมาก (โดยเฉพาะอย่างยิ่งเมื่อมัน outgolfs Jelly: P)
Mr. Xcoder

5

ยูทิลิตี Bash + GNU, 37

  • บันทึก 21 ไบต์ขอบคุณ @muru (ว้าว!)
factor|tr \  \\n|awk '!/:/&&!a[$0]++'

ลองมันออนไลน์


1
ฉันคิดว่าnl|sort|...สามารถทำได้โดยใช้awk: awk '!a[$0]++'(พิมพ์ถ้าไม่เคยเห็นมาก่อนดังนั้นคำสั่งจะไม่หายไป) ประหยัด 15 ไบต์ จากนั้นsedคำสั่งจะถูกกำจัดโดยใช้คำสั่งที่ยาวกว่าเล็กน้อยawk: factor|awk '!/:/&&!a[$0]++' RS='[ \n]+'(แยกเร็กคอร์ดในช่องว่างและบรรทัดใหม่ข้ามเร็กคอร์ดด้วย:) บันทึกอีก 4 ไบต์
muru

1
ฉันเพิ่งรู้ว่าฉันสามารถบันทึกอีกสองไบต์ในความคิดเห็นก่อนหน้าโดยใช้tr: factor|tr \ \\n|awk '!/:/&&!a[$0]++'(นั่นคือสองช่องว่างหลังจากแบ็กสแลชแรก)
muru

@muru สุดยอด - ขอบคุณ! (ฉันจะไม่เสียใจถ้าคุณโพสต์สิ่งนี้เป็นคำตอบของคุณเองนั่นทำให้ฉันรู้สึกว่าเดิม)
Digital Trauma

4

MATL , 6 ไบต์

"@Yfvu

ลองออนไลน์!

คำอธิบาย:

"      % Loop over input
 @     % Push the array element
  Yf   % Prime factors
    v  % Concatenate entire stack vertically (does nothing the first iteration)
     u % Stably get distinct (unique, in MATLAB terminology) elements. Does so every loop but this is code golf, not fastest code.

ความน่าสนใจของ MATL tidbits: โดยทั่วไปฟังก์ชั่นทั้งหมดใช้กับพาหะ (อาร์เรย์) ได้อย่างง่ายดาย แต่ในกรณีนี้จำนวนของปัจจัยที่เป็นตัวแปรสำหรับแต่ละการป้อนข้อมูลและ Matlab และ MATL "ขยายทั่วไปเท่านั้นจัดการในตารางการฝึกอบรมเพื่อให้ฉันได้ใช้สำหรับวง

นอกจากนี้ MATL ยังมีตัวดำเนินการเรียงต่อกันสองหลัก: hและตัวเชื่อมต่อvแนวนอนและแนวตั้ง พฤติกรรมของพวกเขาแตกต่างกันอย่างมาก: vเชื่อมต่อสแต็กทั้งหมดแม้ว่าจะมีองค์ประกอบเดียวเท่านั้นในการทำซ้ำครั้งแรกของเรา hใช้สององค์ประกอบอย่างแน่นอนและจะล้มเหลวหากมีเพียงองค์ประกอบเดียวเท่านั้นจึงไม่เหมาะกับแอปพลิเคชันนี้


4

Brachylogขนาด 6 ไบต์

ḋᵐ↔ᵐcd

ลองออนไลน์!

Brachylogขนาด 6 ไบต์

ḋᵐoᵐcd

ลองออนไลน์!


คำอธิบาย

ḋᵐแผนที่ที่มีการสลายตัวที่สำคัญ (ซึ่งคืนค่าปัจจัยในลำดับย้อนกลับ)
  ↔ᵐย้อนกลับแต่ละรายการ (หรือoᵐ - สั่งซื้อแต่ละรายการ)
    c เชื่อมต่อ (แบน)
     d ซ้ำซ้อน

4

Pyth , 5 4 ไบต์

{smP

ลองที่นี่! หรือตรวจสอบกรณีทดสอบทั้งหมด

ทางเลือก: {sPM


คำอธิบาย

{smP โปรแกรมเต็มรูปแบบพร้อมอินพุตโดยนัย (Q)
  m แผนที่เหนืออินพุต
   ปัจจัย P นายกรัฐมนตรี
 s แบน
{ซ้ำซ้อน

3

PowerShell , 102 ไบต์

param($x)$a=@();$x|%{$a+=(2..($z=$_)|?{!($z%$_)-and'1'*$_-match'^(?!(..+)\1+$)..'}|sort)};$a|select -u

ลองออนไลน์!

(แนวคิดการแยกตัวประกอบยืมจากคำตอบของ TessellatingHeckler เกี่ยวกับ "เอาเจ้าไว้ข้างหลังฉันซาตาน - นายก!")

จะเข้าเป็น $xarray $aสร้างอาร์เรย์ใหม่ที่ว่างเปล่า $xลูปมากกว่า แต่ละวงซ้ำเราจาก2ถึงหมายเลขปัจจุบันการตรวจสอบไม่ว่าจะเป็นปัจจัย-andเป็นสำคัญแล้วการส่งออกของนั้นและผนวกไป|sort $aเมื่อเราเสร็จแล้วจะผ่าน$xเราแล้วออก$aแต่|selectเพียง-uตัวเลข nique ดังกล่าว วิธีนี้ใช้ประโยชน์จากความจริงที่ว่าการทำให้เป็นเอกลักษณ์นั้นจากซ้ายไปขวาทำให้เกิดเหตุการณ์แรกซึ่งตรงกับคำอธิบายปัญหา ตัวเลขเหล่านั้นจะถูกทิ้งไว้ที่ไพพ์ไลน์


3

CJam, 11 ไบต์

{:mfe__&1-}

ฟังก์ชั่นที่ใช้อาร์เรย์ของ ints และเอาต์พุตอาร์เรย์ของ ints

เวอร์ชั่นทดสอบ


ฉันจะแยกความแตกต่างผลลัพธ์ด้วยอักขระหลายตัวได้อย่างไร อย่างน้อยสำหรับการทดสอบของฉัน (ออนไลน์) มันจะส่งออกสตริงไม่ใช่อาร์เรย์ของ ints
Stephen

ในฐานะที่เป็นฟังก์ชั่นมันเป็นประเภทข้อมูลเอาท์พุทเป็นอาร์เรย์ของ ints CJam พิมพ์สแต็คอัตโนมัติและพิมพ์อาร์เรย์ที่ไม่มีตัวคั่น ฉันไม่รู้ว่ามันดีพอสำหรับวัตถุประสงค์ของคุณหรือไม่ หากคุณต้องการเพิ่มเดลิมิเตอร์S*ภายในวงเล็บปิด
geokavel

ฉันเชื่อว่า lang-based langs สามารถแสดงผลโดย ToS ได้ดังนั้นมันก็ดีฉันแค่สงสัย ขอบคุณ
สตีเฟ่น


3

เยลลี่ , 5 4 ไบต์

1 ไบต์ขอบคุณตบมือ

ÆfFQ

ลองออนไลน์!


ไม่แปลกใจ
Leun Nun

อย่าคิดว่าคุณต้องบังคับให้ vectorization เปิดอยู่Æfดังนั้นคุณอาจจะวางไบต์ด้วยÆfFQ
ตบมือ

3
@clap ฉันเป็นคนงี่เง่า ...
Nun


2

Mathematica, 64 ไบต์

Select[DeleteDuplicates[First/@FactorInteger@#~Flatten~1],#>1&]&

อินพุต

[{100, 99, 98, 1, 2, 3, 4, 5}]


Select[#&@@@Gather[#&@@@Join@@FactorInteger@#],#>1&]&
matrix89

2

Haskell, 77 ไบต์

import Data.List
x!y|y>x=[]|x`mod`y<1=y:(x`div`y)!y|1<2=x!(y+1)
nub.((!2)=<<)

คำอธิบาย:

  • x!yผู้ประกอบการกลับรายการของปัจจัยสำคัญทั้งหมดของxที่มีค่ามากกว่าหรือเท่ากับy
  • (!2)ฟังก์ชันส่งกลับรายการของปัจจัยที่สำคัญทั้งหมดของการโต้แย้งของ
  • ฟังก์ชันในบรรทัดสุดท้ายใช้ฟังก์ชันที่ต้องการ

ลองออนไลน์


2

Brachylogขนาด 6 ไบต์

ḋᵐoᵐcd

ลองออนไลน์!

คำอธิบาย

ḋᵐ         Map prime decomposition
  oᵐ       Map order
    c      Concatenate
     d     Remove duplicates

fais [10,9,8,7,6,5,4,3,2,1]สำหรับ มันควรจะเป็น[2, 5, 3, 7]ไม่ใช่[2, 3, 5, 7]
Mr. Xcoder

คุณสามารถแก้ไขได้สำหรับ +1 byte:ḋᵐoᵐcd
Mr. Xcoder

@ Mr.Xcoder ขอบคุณแก้ไขแล้ว ความต้องการที่ไม่ใช่ความรู้สึกค่อนข้างสวย
ลดขนาด

มันไม่ได้ไม่ใช่ความรู้สึกเพราะมันเป็นเรื่องเล็ก ๆน้อย ๆ เล็กน้อย ฉันโพสต์คำตอบของฉันเอง แต่ฉันกลับรายการก่อนแทนที่จะสั่งซื้อ ไม่แน่ใจว่าทำไมปัจจัยสำคัญถูกสร้างขึ้นในลำดับกลับกันหรือไม่
Mr. Xcoder

@ รวบรวมดี - ความท้าทายไม่ใช่ "เรียงลำดับปัจจัยหลักที่แตกต่างกันของรายการ" เป็น "ทำซ้ำผ่านรายการและผนวกปัจจัยเฉพาะที่แตกต่างออกไป"
สตีเฟ่น


2

Japt , 6 ไบต์

mk c â

ทดสอบมัน


คำอธิบาย

Uการป้อนข้อมูลโดยปริยายของอาร์เรย์ แผนที่ ( m) เหนือรับปัจจัย ( k) ของแต่ละองค์ประกอบ แบน ( c) รับองค์ประกอบที่ไม่ซ้ำ ( â) และเอาท์พุทโดยปริยาย


2

Python 3 , 128 125 116 ไบต์

นี่เป็นโซลูชัน Python ที่แท้จริง ไม่มีแพ็คเกจ ขอบคุณ Halvard สำหรับการบันทึก 9 ไบต์

def f(l):y=[k for i in l for k in range(2,i+1)if i%k<1*all(k%x for x in range(2,k))];print(sorted({*y},key=y.index))

ลองออนไลน์!

Python 2 , 133 127 126 ไบต์

def f(l):y=sum([[k for k in range(2,i+1)if i%k<1*all(k%x for x in range(2,k))]for i in l],[]);print sorted(set(y),key=y.index)

ลองออนไลน์!

Python 2 , 142 138 134 ไบต์

l=input();r=[]
for i in sum([[k for k in range(2,i+1)if i%k<1*all(k%x for x in range(2,k))]for i in l],[]):r+=[i]*(i not in r)
print r

ลองออนไลน์!

ประหลาดใจมากที่ยังไม่มีคำตอบของ Python ทำงานเกี่ยวกับการเล่นกอล์ฟ



@ HalvardHummel ขอบคุณ
Mr. Xcoder

2

Deorst , 16 ไบต์

EDkE]l1FeFPkEQE_

ลองออนไลน์!

ทำด้วยความช่วยเหลือจาก @cairdcoinheringaahing ในห้องแชท Deorst (โปรดทราบว่าการแก้ปัญหานั้นแตกต่างกัน)


คำอธิบาย

EDkE] l1FeFPkEQE_ โปรแกรมเต็มรูปแบบ

ED ดันลิสต์ตัวหารของแต่ละองค์ประกอบ
  k ป้องกันการจัดเรียงสแต็คใหม่
   E] แผ่ปึกให้เรียบ
     l1Fe ลบ 1s ออกจากสแต็ก (เพราะ caird รีบเร่งและสร้าง 1 ไพรม์!) - ควรถูกลบในการเผยแพร่ภาษาในอนาคต
         FP เก็บเงิน
           k ป้องกันการจัดเรียงสแต็คใหม่
            EQ ซ้ำซ้อน
              E_ แสดงผลลัพธ์

2

Deorst , 16 ไบต์

EDkE]EQFPkl1FeE_

ลองออนไลน์!

เสร็จสิ้นด้วยความช่วยเหลือจาก @ Mr.Xcoder นี่เป็นวิธีที่ยาวเกินไปสำหรับภาษาเทียม

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

EDkE]EQFPkl1FeE_ - Full program, implicit input: [1,2,3,4,5]

ED               - Get divisors. Vectorizes. STACK = [[1], [1,2], [1,3], [1,2,4], [1,5]]
  k              - Turn off sorting for the next command
   E]            - Flatten the stack. STACK = [1, 1, 2, 1, 3, 1, 2, 4, 1, 5]
     EQ          - Deduplicate stack in place. STACK = [1, 2, 3, 4, 5]
       FP        - Filter by primality 1 is considered prime. STACK = [1, 2, 3, 5]
         k       - Turn off sorting for the next command
          l1     - Push 1. STACK = [1, 2, 3, 5, 1]
            Fe   - Filter elements that are equal to the last element. STACK = [2, 3, 5]
              E_ - Output the whole stack

1

Pykeขนาด 4 ไบต์

mPs}

ลองที่นี่!

mP   -   map(factorise, input)
  s  -  sum(^)
   } - uniquify(^)

Ouch ฉัน ninja'd คุณไม่ดี - ดีเรามีวิธีการที่แตกต่างกัน :)
นาย Xcoder

: P ความแตกต่างหนึ่งไบต์ ฉันคิดว่ามันได้รับอนุญาตแม้ว่าหรืออย่างน้อยตามฉันทามติล่าสุดที่ฉันได้อ่าน
บลู

ใช่คำตอบที่ซ้ำกันแม้จะได้รับอนุญาตไบต์ถึง
นาย Xcoder


1

MY, 17 ไบต์

⎕Ḋḟ’⊢f(‘53ǵ'ƒf(ū←

ลองออนไลน์!

อย่างไร?

  • การประเมินการป้อนข้อมูล
  • ตัวหาร (vectorizes / vecify)
  • เรียบ
  • ’⊢f(‘ลดลงกรองเพิ่ม (ลบ1)
  • 53ǵ'สตริง'P'ในเพจเพจของ MY ซึ่งเป็นการทดสอบขั้นต้น น่าเศร้า0x35=53เป็นจำนวนเฉพาะ 16 และไม่มีคำสั่งสำหรับการผลักดัน16ไปยังกองซ้อน> _ <
  • ƒ เป็นฟังก์ชั่น
  • f( กรองตามที่
  • ū uniquify
  • เอาท์พุต

1

C ++, 118 ไบต์

[](auto n){decltype(n)r;for(int m:n)for(int i=1,j;i++<m;){j=m%i;for(int x:r)j|=!(i%x);if(!j)r.push_back(i);}return r;}

จำเป็นต้องผ่านอินพุตใน a std::vector<int>, ส่งคืนค่าอื่นstd::vector<int>สำหรับเอาต์พุต




1

Python 2, 88 119 103 ไบต์

ไปเลย. ด้วยการเรียงลำดับที่ถูกต้อง

def f(l,s=[]):[s.append(x) for x in sum([list(primefac(i)) for i in l],[]) if x not in s];print s
from primefac import*

เห็นได้ชัดว่าฉันไม่สามารถทำให้ TIO ทำงานได้เนื่องจากแพ็คเกจไม่รองรับ มันทำงานบนเครื่องของฉัน นี่คือผลการทดสอบของฉัน:

f([1,2,3,4,5,6,7,8,9,10],[])     #[2, 3, 5, 7]
f([10,9,8,7,6,5,4,3,2,1],[])     #[2, 5, 3, 7]
f([100,99,98,1,2,3,4,5],[])      #[2, 5, 3, 11, 7]
f([541,60,19,17,22],[])          #[541, 2, 3, 5, 19, 17, 11]
f([1,1,2,3,5,8,13,21,34,45],[])  #[2, 3, 5, 13, 7, 17]
f([6,7,6,7,6,7,6,5],[])          #[2, 3, 7, 5]
f([1],[])                        #[]
f([8],[])                        #[2]
f([],[])                         #[]

อย่างใดฉันก็ไม่สามารถที่จะทำให้ฟังก์ชั่นเป็นแลมบ์ดาฟังก์ชั่น เมื่อใดก็ตามที่ฉันพยายามกลับรายการความเข้าใจมันจะส่งกลับ [None, None, ... ] ถ้าฉันแค่มองอะไรบางอย่างใครบางคนสามารถชี้ให้เห็นความผิดพลาดนั้นได้หรือไม่? ขอบคุณสำหรับความคิดเห็น!


แก้ไข:

การใช้อัลกอริทึมการเรียงลำดับ Mr. Xcoders ฉันสามารถลดรหัสได้ 16 ไบต์ ขอบคุณสำหรับส่วนนั้น

from primefac import*
def f(l):a=sum([list(primefac(i))for i in l],[]);print sorted(set(a),key=a.index)

ดูเหมือนว่าจะไม่ถูกต้อง [2, 5, 3, 7]กรณีทดสอบที่สองควรเอาท์พุท ลำดับของเอาต์พุตมีความสำคัญ
Mego

sorted(set().union(*map(primefac,l)))
Alex Hall

ลำดับของเอาต์พุตมีความสำคัญ อ่านคำอธิบายอีกครั้งหรือดูคำตอบอื่น ๆ - ฉันไม่รู้ว่าจะอธิบายได้อย่างไร
สตีเฟ่น

@Stephen อัพเดตรูทีนด้วยเอาต์พุตที่ถูกต้อง ฉันใช้เวลาสักพักจนกว่าฉันจะสังเกตเห็นความแตกต่างในแต่ละบรรทัด มุ่งเน้นในขณะที่อ่านช่วยได้มาก
Simon

@Simon บันทึกสามไบต์ด้วยการกำจัดช่องว่างหลังจาก parens - s.append(x) for-> s.append(x)for, primefac(i)) for-> primefac(i))for,[]) if ->[])if
Stephen

1

Braingolfขนาด 7 ไบต์

&(p)u=;

ลองออนไลน์!

โอ้มองมันเป็นพื้นห่วงโซ่ของ 4 ตัว -ins

คำอธิบาย

&(p)u=;  Implicit input from commandline args
 (.)     Sandbox loop, sandboxes each item in a separate stack and runs the
         code within the loop.
&        Append the entire sandboxed stack when loop ends, rather than only the
         top of stack after each iteration
  p      Prime factors
    u    Unique
     =   Print stack
      ;  Suppress implicit output

[10,9,8,7,6,5,4,3,2,1]ล้มเหลว - ลำดับความสำคัญ: คุณควรกลับมาแทน[2, 5, 3, 7] [2, 3, 5, 7]
Mr. Xcoder

คุณสามารถแก้ไขปัญหาที่สำหรับ -1 ไบต์แม้ว่า เพราะKเพียงทำอันตรายที่นี่
Mr. Xcoder

@ Mr.Xcoder โอ้ใช่ใช่ไม่ได้ตระหนักว่าพวกเขาควรจะอยู่ในลำดับของการเกิดขึ้นไม่ได้เรียงลำดับ คงที่
Skidsdev

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