ในการค้นหาของเนื้อคู่


40

กำหนดรายชื่อ จำกัด ว่างของจำนวนเต็ม, เอาท์พุทtruthyค่าถ้ามีตรงสองรายการที่เท่าเทียมกันและรายการอื่น ๆ ทั้งหมดที่มีความแตกต่างและfalseyคุ้มค่าเป็นอย่างอื่น

ตัวอย่าง

truthy:
[1,1]
[1,2,1]
[1,6,3,4,4,7,9]

falsey:
[0]
[1,1,1]
[1,1,1,2]
[1,1,2,2]
[2,1,2,1,2]
[1,2,3,4,5]

ฉันสมมติว่าเราไม่สามารถสรุปได้ว่าจำนวนเต็มจะน้อยกว่า 10 เสมอหรือไม่
Martin Ender

1
ใช่ยกเว้นถ้าภาษาของคุณไม่รองรับจำนวนเต็มขนาดใหญ่กว่านี้
ข้อบกพร่อง

1
คุณสามารถอธิบายสิ่งที่คุณหมายถึงโดยสอดคล้อง ?
ข้อบกพร่อง

33
เห็นสิ่งนี้อยู่ด้านบนของ HNQ และคิดว่าเราได้คำถาม interpersonal.se สุดท้ายแล้ว
gntskn

3
@ Walrat โพสต์เป็นความท้าทายของคุณเอง ข้อเสนอแนะดังกล่าวมักจะได้รับการชื่นชมในกล่องทราย
ข้อบกพร่อง

คำตอบ:


22

Python 3, 30 28 ไบต์

lambda m:len({*m})+1==len(m)

ลองออนไลน์!

{*m}ปลดเปลื้องรายการไปยังsetวัตถุซึ่งเป็นรายการที่ไม่มีการเรียงลำดับโดยไม่ซ้ำกัน การทำเช่นนี้จะลดความยาวของรายการตามจำนวนซ้ำในนั้น โดยการคำนวณความยาวที่มีการเปลี่ยนแปลงเราสามารถบอกได้อย่างง่ายดายว่ารายการนั้นมีความซ้ำซ้อนและส่งคืนผลการทดสอบหรือไม่

-2 ไบต์ต้องขอบคุณ ovs


วิธีแก้ปัญหาที่ฉันมี แต่ลืมไป{*m}ทางลัดแทนที่จะเล่นsetกอล์ฟได้ดี!
FlipTack

27 ไบต์สำหรับการปฏิเสธ (เท็จเมื่อมันควรจะเป็นความจริง ฯลฯ )
mbomb007

3
นี่เป็นอีกวิธีที่แปลกที่จะทำ (เช่นการปฏิเสธ):lambda m:~-len(m[len({*m}):])
mbomb007


7

MATL , 7 , 6 ไบต์

&=sp4=

ลองออนไลน์!

บันทึกหนึ่งไบต์ต้องขอบคุณ @Guiseppe!

คำอธิบาย:

&=  % Table of pair-wise equality comparisons
    %
    % [1 0 0 0 0 0 0
    %  0 1 0 0 0 0 0
    %  0 0 1 0 0 0 0
    %  0 0 0 1 1 0 0
    %  0 0 0 1 1 0 0
    %  0 0 0 0 0 1 0
    %  0 0 0 0 0 0 1]
    %
s   % Sum each Column. Stack:
    %
    % [1 1 1 2 2 1 1]
    %
p   % Product of the array. Stack:
    %
    % [4]
    %
4=  % Compare the stack to '4'

1
เนื่องจากsเป็นผลรวมsumและsumตามมิติที่ไม่ใช่แบบซิงเกิลแรก (คอลัมน์) และเมทริกซ์นั้นสมมาตรนี่ไม่สามารถsแทนได้Xsหรือไม่
Giuseppe

1
@Giuseppe Ah, TIL ขอขอบคุณ!
DJMcMayhem


6

เจลลี่ , 8ไบต์ 5

QL‘=L

ลองออนไลน์!

คำอธิบาย

QL‘=L  - Main link, argument L (a list)   e.g [1,6,3,4,4,7,9]
Q      - Deduplicated elements                [1,6,3,4,7,9]
 L     - Length                               6
  ‘    - Increment                            7
    L  - Length of the input                  7 ([1,6,3,4,4,7,9])
   =   - Are they equal?                      1

หากค่าเอาต์พุตสามารถเป็นค่าที่สอดคล้องกันได้ดังนั้นจะQL_Lทำงานซึ่งเอาต์พุต-1สำหรับความจริงและจำนวนที่ไม่เป็นบวกอื่น ๆ สำหรับความผิดพลาด (ขอบคุณ @JonathanAllan)


QL_Lจะเอาท์พุท-1สำหรับความจริงและจำนวนน้อยกว่า-1หรือ0เท็จ (เช่น[1,6,3,4,4,7,9,9,9]จะกลับมา-3ในขณะที่[1,6,3,4,7,9]จะกลับมา0)
Jonathan Allan

@JonathanAllan โอ้ใช่แล้ว -2ผมคิดว่าตัวอย่างที่ผมทดสอบบนทั้งหมดที่เกิดขึ้นกับการกลับมา
caird coinheringaahing


4

รุก 8 ไบต์

ใช้งานง่ายของการตรวจสอบว่าlen(set(list)) == len(list)-1:

LtvuL^=#

คำอธิบาย:

       \ Implicit: Put all input on stack
Ltv    \ Get the stack length - 1, save in auxiliary stack
u      \ Remove non-unique elements
L      \ Get the new length
^=     \ Compare with the previously saved length
#      \ Print result

สิ่งนี้ทำงานเป็นความยาวจะลดลง 1 เท่านั้นหากมีเพียงจำนวนเต็ม 1 ตัวเท่านั้นที่ไม่แตกต่างกันในรายการเริ่มต้น

ลองออนไลน์!


1
ว้าวยังไม่เคยเห็นคำตอบที่เร่งรีบมานาน! +1
caird coinheringaahing

1
@cairdcoinheringaahing Pushy จะไม่มีวันตาย มันจะกลับมาแข็งแกร่งขึ้น
FlipTack

4

อ็อกเทฟ 25 ไบต์

นี่ไม่ใช่การใช้วิธีการgroupหรือuniqueคำตอบอื่น ๆ มากมาย แต่เป็น "ผลิตภัณฑ์คาร์ทีเซียน" ของการเปรียบเทียบที่เป็นไปได้ทั้งหมด

@(x)nnz(triu(x==x',1))==1

คำอธิบาย

             x==x'        %create a matrix where the entry at (i,j) compares whether x(i) == x(ju)
        triu(x==x',1)     %only consider the strict upper triangular matrix
    nnz(triu(x==x',1))    %count the number of nonzero entries
@(x)nnz(triu(x==x',1))==1 %check whether this number is actually 1

ลองออนไลน์!

และเนื่องจากไม่มีโปรแกรมใดที่จะเสร็จสมบูรณ์หากไม่มีการโน้มน้าวใจ (ขอบคุณ @LuisMendo สำหรับการแก้ไขข้อผิดพลาด):

อ็อกเทฟ 40 ไบต์

@(x)nnz(~conv(sort(x),-1:2:1,'same'))==1

ลองออนไลน์!


คุณแรงบันดาลใจให้เกิดขึ้นกับนี้วิธี :)
สตีวีกริฟฟิ

2
@StewieGriffin ผมคิดว่าMATLคำตอบที่ใช้วิธีการที่แน่นอนของคุณ :)
flawr

4

J , 7 6 ไบต์

=&#0,=

=ตรวจสอบองค์ประกอบเพื่อความเท่าเทียมกันกับองค์ประกอบที่ไม่ซ้ำกันทุกสร้างเมทริกซ์กับม.แถวสำหรับ  เมตร  องค์ประกอบที่ไม่ซ้ำกัน
0,เพิ่มแถวว่างด้านบน
=&#จำนวนแถวเท่ากับความยาวของอินพุตหรือไม่

ลองออนไลน์!


ฉันคิดว่าคุณสามารถแทนที่.~ด้วย=
H.PWiz

@ H.PWiz ดีแก้ไข
FrownyFrog

4

Retina , 15 12 11 ไบต์

ขอบคุณ Neil สำหรับการบันทึก 1 ไบต์

D`
Mm2`^$
1

ลองออนไลน์!

อินพุตถูกคั่นด้วยตัวป้อนบรรทัด (ชุดทดสอบใช้การคั่นด้วยเครื่องหมายจุลภาคเพื่อความสะดวก)

คำอธิบาย

D`

คัดลอกบรรทัดในอินพุตอีกครั้งซึ่งจะลบจำนวนเต็มใด ๆ ที่ปรากฏก่อนหน้านี้ (แต่ปล่อยให้ linefeed ที่อยู่โดยรอบ)

Mm2`^$

นับจำนวนบรรทัดว่างเปล่าซึ่งเท่ากับจำนวนซ้ำที่เราลบออก แต่ให้พิจารณาเฉพาะสองแมชแรกเท่านั้น ดังนั้นเอาต์พุตจะเป็น0(ไม่ซ้ำกัน), 1(หนึ่งซ้ำ), 2(ซ้ำสองหรือมากกว่า)

1

ตรวจสอบให้แน่ใจว่าได้ลบสำเนาที่ซ้ำกันหนึ่งรายการแล้ว


บันทึกไบต์โดย จำกัด การจับคู่บรรทัดใหม่เป็น 2 เพื่อให้อินพุตไปยังบรรทัดที่สามเป็น 0, 1 หรือ 2 เสมอทำให้การทดสอบง่ายขึ้น (น่ารำคาญที่คุณไม่สามารถใช้A`.ในการนับบรรทัดใหม่เพราะมันลดลงล่าสุด)
Neil

@ Neil ขอบคุณขีด จำกัด เป็นความคิดที่เรียบร้อย ฉันลองใช้A`.ด้วย แต่ปัญหาก็คือคุณไม่สามารถแยกความว่างเปล่าบรรทัดเดียวจากการไม่มีบรรทัดเลย บางทีฉันควรพิจารณายกเลิกAและGส่งออกด้วย linefeed ถ้ามีบรรทัดใด ๆ แม้ว่านั่นอาจจะเป็นตัวเลือกเนื่องจากฉันสามารถจินตนาการว่า linefeed นั้นน่ารำคาญในสถานการณ์อื่น ๆ
Martin Ender

การจับคู่บรรทัดว่างเดียวเป็นเรื่องง่าย - ^$¶นั่นเป็นเพียง
Neil

@ ไม่ได้ฉันหมายถึงว่าผลลัพธ์ของAมันเหมือนกันโดยไม่คำนึงว่ามันจะเก็บบรรทัดว่างไว้หรือทิ้งทุกบรรทัด
Martin Ender

ขออภัยนั่นคือสิ่งที่ฉันหมายถึงโดย "หยดสุดท้าย" - มันส่งกลับบรรทัดที่ว่างเปล่าน้อยลงหนึ่ง แต่แล้วคุณไม่สามารถแยกแยะระหว่าง 0 และ 1
Neil

3

05AB1E , 4 ไบต์

{¥_O

ลองออนไลน์!

แสดงผล1เป็นจริงจำนวนเต็มใด ๆ ที่ไม่เป็นลบเป็นเท็จ ใน 05AB1E 1เป็นตัวเลขจริงเท่านั้น (ขอบคุณ @Emigna สำหรับข้อมูลเชิงลึก!)

คำอธิบาย

{       Implicit input. Sort
 ¥      Consecutive differences
  _     Boolean negate
   O    Sum. Implicit display

3

Ruby, 32 ไบต์

->(s){s.uniq.length==s.length-1}

ยินดีต้อนรับสู่ PPCG! เนื่องจากนี่คือรหัสกอล์ฟคุณต้องรวมจำนวนไบต์ของโปรแกรมของคุณ ครั้งนี้ฉันได้นำเสรีภาพของคุณมาใช้
Pavel

แล้วไงArray#sizeล่ะ
เทรวิส

คุณสามารถลดขนาดได้ถึง 26 ไบต์โดยใช้->s{s.uniq.size==s.size-1}
Conor O'Brien


3

Excel, 42 ไบต์

รุ่นภาษาเดนมาร์ก

=TÆLV(A:A)=SUM(--(FREKVENS(A:A,A:A)>0))+1

Aถือว่าแต่ละจำนวนเต็มจากรายการในเซลล์ที่แยกจากกันในคอลัมน์
หากเราได้รับอนุญาตให้ใช้ค่าfalsey ที่ไม่สอดคล้องกันเราสามารถบันทึกได้ 3 ไบต์:

=TÆLV(A:A)+SUM(-(FREKVENS(A:A,A:A)>0))

รุ่นภาษาอังกฤษ (44 ไบต์)

=COUNTA(A:A)=SUM(--(FREQUENCY(A:A,A:A)>0))+1

3

R , 32 31 ไบต์

-1 ไบต์ขอบคุณ @JarkoDubbeldam

cat(sum(duplicated(scan()))==1)

ลองออนไลน์!

อ่านจาก stdin เขียนถึง stdout

duplicatedวนซ้ำผ่านรายการแทนที่ค่าlด้วยTRUEหากค่านั้นเกิดขึ้นก่อนหน้านี้ในรายการและFALSEอื่น ๆ หากมีคู่ที่ไม่ซ้ำกันของพรากควรจะมีอีกหนึ่งความคุ้มค่าเพื่อให้ผลรวมที่ควรจะเป็นTRUE1



1
@ JarkoDubbeldam อ่าแน่นอน ดีใจที่ได้พบคุณอีกครั้ง! สักพักหนึ่ง.
Giuseppe

เคยยุ่งกับสิ่งอื่น ๆ ไม่แน่ใจว่าฉันกลับมาสมบูรณ์
JAD

@Giuseppe ฉันเพิ่งอ่านคำถามนี้และคิดถึงวิธีการดั้งเดิมของคุณในทันที .... ดีมาก! ฉันไม่เคยคิดถึงscan()วิธีการนี้เลย
โจเซฟวู้ด

3

PowerShell , 40 37 ไบต์

($args|sort -u).count-eq$args.count-1

ลองออนไลน์!

Sort-Objectคำสั่ง (นามสมมุติsort) กับ-uธง nique ดึงเอาเฉพาะส่วนประกอบที่เป็นเอกลักษณ์ของการป้อนข้อมูล ตัวอย่างเช่นสำหรับการป้อนข้อมูลนี้จะส่งผลให้@(1,3,3,2)@(1,2,3)

ดังนั้นเราเพียงแค่ต้องตรวจสอบให้แน่ใจว่า.countวัตถุนี้ (เช่นจำนวนองค์ประกอบที่มี) เป็น-equal ไปยัง.countอาร์เรย์ของเราใส่-1(เช่นเรามีรายการที่ซ้ำกันอย่างแน่นอน)

บันทึก 3 ไบต์ด้วย Sinusoid
แก้ไขข้อผิดพลาดด้วย TessellatingHeckler


คุณสามารถใช้นามแฝง get-unique 'gu' แทนกลุ่มเพื่อให้ได้ผลลัพธ์เดียวกัน
Sinusoid

@ Sinusoid ใช่เราทำได้ ขอบคุณ!
AdmBorkBork

กรณีนี้ใช้ไม่ได้กับกรณีทดสอบที่สอง1,2,1- get-uniqueใช้กับอินพุตที่จัดเรียงไว้ล่วงหน้า แล้วอันไหนล่ะที่($args|sort -u).count-eq$args.count-137 แต่ใช้ได้กับทุกกรณีทดสอบถ้าคุณเรียกมันว่าf 1 2 1แทนที่จะเป็นf 1,2,1?
TessellatingHeckler

@TessellatingHeckler อ่าจับได้ดี การทดสอบทั้งหมดที่ฉันทำคืออินพุตที่จัดเรียงไว้ล่วงหน้า ขอบคุณ!
AdmBorkBork



2

ระดับแปดเสียง / MATLAB (พร้อมแพ็คเกจสถิติ / กล่องเครื่องมือ) ขนาด 21 ไบต์

@(x)nnz(~pdist(x))==1

ฟังก์ชั่นไม่ระบุชื่อ อินพุตเป็นเวกเตอร์คอลัมน์ เอาท์พุทคือtrue(แสดงเป็น1) หรือfalse(แสดงเป็น0)

ลองออนไลน์!

คำอธิบาย

pdist(x)xคำนวณเวกเตอร์ของระยะทางแบบยุคลิดระหว่างคู่แถวทั้งหมดจาก จะพิจารณาแต่ละคู่เพียงครั้งเดียว (คำสั่งของทั้งสองแถวไม่สำคัญ) และไม่พิจารณาคู่ที่เกิดขึ้นจากแถวเดียวกันสองครั้ง

ในกรณีของเราxคือเวกเตอร์คอลัมน์ระยะทางแบบยุคลิดระหว่างสองแถวนั้นแตกต่างกันอย่างสิ้นเชิงระหว่างตัวเลขสองตัว

~เป็นตรรกะ (บูลีน) ปฏิเสธnnzคือจำนวนของ nonzeros และเมื่อเปรียบเทียบกับ==1 1ผลที่ได้คือtrueถ้าหากมีเพียงคู่เดียวเท่านั้นที่ให้ระยะทางเป็นศูนย์



2

Julia, 39 26 ไบต์

!a=sum(a.==a')==endof(a)+2

คำอธิบาย

โค้ดจะสร้างตารางบูลีน 2 มิติซึ่งจะถูกรวบรวมโดยใช้ฟังก์ชันผลรวมนับจำนวนคู่องค์ประกอบเดียวกันในตารางคาร์ทีเซียนของ A. จากนั้นนี่จะถูกเปรียบเทียบกับความยาวของสตริงบวกสองและ ปริมาณจะเท่ากันก็ต่อเมื่อมีอักขระซ้ำหนึ่งตัวเท่านั้น

รหัสนี้นิยามใหม่ของตัวดำเนินการ NOT


!a=sum(a.==a')==endof(a)+2บันทึกไม่กี่ไบต์ ลองออนไลน์!
Dennis

2

Pyth , 6 ไบต์

qtlQl{

ตรวจสอบกรณีทดสอบทั้งหมด

  • l{ - รับจำนวนขององค์ประกอบที่ไม่ซ้ำกัน

  • tlQ - รับความยาวของรายการอินพุตที่ลดลง

  • q - ตรวจสอบความเท่าเทียมกัน

7 ไบต์

q1l.-Q{

ตรวจสอบกรณีทดสอบทั้งหมด


2

อ็อกเท23 23ไบต์

@(x)prod(sum(x==x'))==4

ลองออนไลน์!

x==x'ส่วนหนึ่งได้รับแรงบันดาลใจจากคำตอบของ flawr นี่ยาวกว่าคำตอบของหลุยส์ แต่ไม่ได้ใช้กล่องเครื่องมือใด ๆ

คำอธิบาย:

นี่คือฟังก์ชั่นที่ไม่ระบุชื่อที่ใช้เวกเตอร์xเป็นอินพุตและเปรียบเทียบกับ transposed ตัวเอง สิ่งนี้จะให้เมทริกซ์ว่าองค์ประกอบเส้นทแยงมุมทั้งหมดอยู่ที่ไหนและองค์ประกอบแนวทแยง1ใด ๆ ส่งสัญญาณว่ามีองค์ประกอบที่ซ้ำกัน

ผลรวมตามคอลัมน์ที่ระบุแสดงจำนวนซ้ำของจำนวนนั้น เราต้องการให้ตัวเลขสองตัวมีค่าซ้ำกันดังนั้นเราสองค่าเท่ากับสองและส่วนที่เหลือไม่เท่ากันสองค่า

ถ้าเราเอาผลคูณของเมทริกซ์นี้มาเราจะได้4ถ้ามีองค์ประกอบเท่ากันสองตัวเท่านั้น ( 2*2*1*1*1*1*...) และสิ่งอื่นที่ไม่ใช่4ว่ามีซ้ำกันหรือมากกว่าสองรายการ


2

PHP, 46 ไบต์

<?=count(array_unique($argv))==count($argv)-1;

นับจำนวนรายการใน$argvและเปรียบเทียบกับจำนวนรายการที่ไม่ซ้ำกัน หากว่าอดีตสูงกว่าอันที่ 1 เป็นความจริงก็เป็นเท็จ

ลองใช้กับ eval.in!


คุณต้องใช้ชื่อตัวแปร $ argv คุณไม่สามารถใช้ $ a แทนได้หรือไม่?
dading84

3
@ dading84 $argvเป็นรายการพารามิเตอร์บรรทัดคำสั่ง ดังนั้น: $aไม่มีเขาก็ไม่สามารถใช้งาน
ติตัส

2

05AB1E , 6 5 ไบต์

{¥>ΘO

ลองออนไลน์!

{¥>ΘO   # example input:               [1, 6, 3, 4, 4, 7, 9]
{       # sort                      -> [1, 3, 4, 4, 6, 7, 9]
 ¥      # get deltas                -> [  2, 1, 0, 2, 1, 2 ]
  >     # increment                 -> [  3, 2, 1, 3, 2, 3 ]
   Θ    # truthify (only 1 gives 1) -> [  0, 0, 1, 0, 0, 0 ]
    O   # sum                       -> 1

1เป็นค่าความจริงเพียงอย่างเดียวใน 05AB1E เราสามารถหยุดที่นี่ (ขอบคุณ @Emigna สำหรับการชี้ว่า)

หากต้องการรับค่าที่แตกต่างเพียงสองค่าเราสามารถเลือกเพิ่ม:

     Θ  # equals 1?                 -> 1

1
หากไม่เป็นไรที่จะส่งคืนค่า falsey ใด ๆ สำหรับกรณี falsey คุณสามารถข้ามค่าΘนี้ได้เช่น1เดียวกับค่าจริงใน 05AB1E
Emigna

@ Emigna ขอบคุณ! ฉันไม่แน่ใจว่ามันได้รับการอนุมัติจาก OP หรือไม่ แต่ฉันคิดว่ามันเป็น
Arnauld

ฉันเกรงว่าคุณจะต้องกลับไปใช้วิธีแก้ไขก่อนหน้านี้เพราะ¢จะไม่ทำงาน จะนับ[19,4,4,9]เป็นเท็จและ[19,9]ความจริงตั้งแต่ที่พบใน0 10
Emigna

@Emigna ขอบคุณที่ทราบว่า ฉันคิดว่านั่นคงที่
Arnauld

{¥_Oควรจะโอเคเช่นกัน
Emigna



1

Japtap, 7 ไบต์

â ʶUÊÉ

ลองมัน


คำอธิบาย

ลบรายการที่ซ้ำกัน ( â) รับความยาว ( Ê) และเปรียบเทียบความเท่าเทียมกัน ( ) กับความยาว ( Ê) ของอินพุต ( U) ลบ 1 ( É)


นั่นไม่ใช่ 12 ไบต์ใช่ไหม ไม่ใช่âÊɶอักขระหลายไบต์?
RedClover


1

05AB1E , 5 ไบต์

gIÙg-

ลองออนไลน์!

g     # Get number of elements in input
 IÙg  # Get number of unique elements in input
    - # Subtract

ใน 05AB1E 1 เป็นค่าความจริงเท่านั้นดังนั้นเพื่อผลลัพธ์ที่เป็นความจริงจะต้องมีองค์ประกอบที่ซ้ำกัน 1 รายการที่ลบออกโดย uniquify

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