นี่เป็นฟังก์ชั่นหรือไม่?


47

รับรายการ(key, value)คู่ตรวจสอบว่ามันหมายถึงฟังก์ชั่นซึ่งหมายความว่าแต่ละแผนที่สำคัญกับค่าที่สอดคล้องกัน กล่าวอีกนัยหนึ่งเมื่อใดก็ตามที่สองรายการมีคีย์เท่ากันพวกเขาจะต้องมีค่าเท่ากัน รายการที่ซ้ำกันก็โอเค

ตัวอย่างเช่น:

# Not a function: 3 maps to both 1 and 6
[(3,1), (2,5), (3,6)]

# Function: It's OK that (3,5) is listed twice, and that both 6 and 4 both map to 4
[(3,5), (3,5), (6,4), (4,4)]

อินพุต:ลำดับของ(key, value)คู่ที่สั่งซื้อโดยใช้ตัวเลข 1 ถึง 9 คุณอาจไม่ต้องการการเรียงลำดับแบบพิเศษ คุณอาจเลือกรายการคีย์และรายการค่าเป็นอินพุตแยกต่างหาก

เอาท์พุท:ค่าที่สอดคล้องกันสำหรับฟังก์ชั่นและค่าที่สอดคล้องกันที่แตกต่างกันสำหรับที่ไม่ใช่ฟังก์ชั่น

กรณีทดสอบ: 5 อินพุตแรกเป็นฟังก์ชั่น 5 รายการสุดท้ายไม่ใช่

[(3, 5), (3, 5), (6, 4), (4, 4)]
[(9, 4), (1, 4), (2, 4)]
[]
[(1, 1)]
[(1, 2), (2, 1)]

[(3, 1), (2, 5), (3, 6)]
[(1, 2), (2, 1), (5, 2), (1, 2), (2, 5)]
[(8, 8), (8, 8), (8, 9), (8, 9)]
[(1, 2), (1, 3), (1, 4)]
[(1, 2), (1, 3), (2, 3), (2, 4)]

นี่คือรายการอินพุตสองรายการ:

[[(3, 5), (3, 5), (6, 4), (4, 4)], [(9, 4), (1, 4), (2, 4)], [], [(1, 1)], [(1, 2), (2, 1)]]
[[(3, 1), (2, 5), (3, 6)], [(1, 2), (2, 1), (5, 2), (1, 2), (2, 5)], [(8, 8), (8, 8), (8, 9), (8, 9)], [(1, 2), (1, 3), (1, 4)], [(1, 2), (1, 3), (2, 3), (2, 4)]]

ลีดเดอร์บอร์ด:


ฟังก์ชั่น Surjective?
Poke

@ โผล่มันไม่จำเป็นที่จะต้องเด็ดขาด
xnor

อินพุตอาจเป็นสองรายการที่มีความยาวเท่ากันหนึ่งรายการสำหรับคีย์หนึ่งสำหรับค่าหรือไม่
งานอดิเรกของ Calvin เมื่อ

2
มันตกลงสำหรับ(key,value)คู่ที่จะกลับเช่นใน(value,key)? ฉันสามารถโกนไม่กี่ไบต์ออกคำตอบของฉันถ้าเป็นเช่นนั้น
ymbirtt

1
@ymbirtt ใช่คุณสามารถให้ทั้งคู่อยู่ในลำดับใดก็ได้
xnor

คำตอบ:


37

Python 2 , 34 ไบต์

lambda x:len(dict(x))==len(set(x))

ลองออนไลน์!

สร้างพจนานุกรมและชุดจากอินพุตและเปรียบเทียบความยาว
พจนานุกรมไม่สามารถมีคีย์ซ้ำดังนั้นค่าที่ผิดกฎหมาย (และซ้ำ ๆ ) ทั้งหมดจะถูกลบออก


5
Python 3, 30 ไบต์:lambda x:not dict(x).items()^x
Veedrac

21

Haskell, 36 ไบต์

f x=and[v==n|(k,v)<-x,(m,n)<-x,k==m]

ลองออนไลน์!

ด้านนอก (-> (k,v)) และด้านใน (-> (m,n)) ห่วงคู่และเมื่อใดก็ตามที่เก็บค่าความจริงของk==m v==nตรวจสอบว่าทั้งหมดเป็นจริง


คุณเร็วเกินไป! : /
ข้อบกพร่อง

18

Brachylog , 5 4 ไบต์

dhᵐ≠

ลองออนไลน์!

โปรแกรมเต็มรูปแบบ เท่าที่ฉันสามารถบอกได้เหตุผลว่านี่คือการตีกอล์ฟภาษาอื่น ๆ ส่วนใหญ่คือนั่นคือ builtin ใน Brachylog ในขณะที่ภาษาอื่น ๆ ของการเล่นกอล์ฟส่วนใหญ่จำเป็นต้องสังเคราะห์มัน

คำอธิบาย

dhᵐ≠
d     On the list of all unique elements of {the input},
 h    take the first element
  ᵐ     of each of those elements
   ≠  and assert that all those elements are different

ในฐานะโปรแกรมเต็มรูปแบบเราจะได้รับtrueหากการยืนยันสำเร็จหรือfalseล้มเหลว



9

เรติน่า 25 ไบต์

1`({\d+,)(\d+}).*\1(?!\2)

ลองออนไลน์!

{k,v},{k,v},...รูปแบบอินพุตเป็น พิมพ์0สำหรับฟังก์ชั่นและ1สำหรับที่ไม่ใช่ฟังก์ชั่น ฉันสามารถบันทึกสองไบต์โดยใช้ linefeeds แทนเครื่องหมายจุลภาคในรูปแบบการป้อนข้อมูล แต่มันเกิดความสับสน


ฉันเชื่อว่ามันมีคุณสมบัติเป็น "ขาดความจริงจัง" อย่างน้อยก็จากมุมมองทางเทคนิค
FryAmTheEggman

8

Brachylogขนาด 13 ไบต์

¬{⊇Ċhᵐ=∧Ċtᵐ≠}

ลองออนไลน์!

คำอธิบาย

¬{          }      It is impossible...
  ⊇Ċ               ...to find a subset of length 2 of the input...
   Ċhᵐ=            ...for which both elements have the same head...
       ∧           ...and...
        Ċtᵐ≠       ...have different tails.

คุณอธิบายได้อย่างไรĊhᵐ=และĊtᵐ≠ทำงานอย่างไร
CalculatorFeline

@CalculatorFeline ตัวอักษรตัวพิมพ์ใหญ่เป็นชื่อตัวแปร Ċเป็นตัวแปรพิเศษที่เรียกว่าคู่รักซึ่งมักจะถูกกำหนดให้เป็นรายการของสององค์ประกอบ เป็น metapredicate ซึ่งใช้เพรดิเคตก่อนหน้าทันที ( h - headหรือt - tailที่นี่) กับแต่ละองค์ประกอบของอินพุต (ที่นี่Ċ) =และตรวจสอบง่าย ๆ ว่าอินพุตของพวกเขามีองค์ประกอบที่เท่ากัน / แตกต่างกันทั้งหมด
ทำให้เสียชีวิต

7

MATL , 8 ไบต์

1Z?gs2<A

อินพุตคือ: อาร์เรย์ที่มีvalues ตามด้วยอาร์เรย์ที่มีkeys

เอาท์พุท1สำหรับฟังก์ชั่นอื่น0ๆ ตามลำดับ

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

คำอธิบาย

1Z?

สร้างเมทริกซ์กระจัดกระจาย เริ่มแรกรายการทั้งหมดประกอบด้วย0; และ1จะถูกเพิ่มในแต่ละรายการ(i, j)ที่jและiมีการป้อนข้อมูลkey, valueคู่

g

เมทริกซ์ถูกแปลงเป็นโลจิคัล นั่นคือรายการเกิน1(ตรงกับที่ซ้ำกันkey, valueคู่) 1มีการกำหนดให้

s

ผลรวมของแต่ละคอลัมน์ถูกคำนวณ นี่คือจำนวนที่แตกต่างกันสำหรับแต่ละvaluekey

2<A

2ฟังก์ชั่นจะมีจำนวนเงินดังกล่าวทั้งหมดน้อยกว่า


6

R, 33 ไบต์

นี่เป็นรุ่นของฉันสำหรับ R นี่ใช้ประโยชน์จากaveฟังก์ชันนี้ ฉันได้รับอนุญาตให้ป้อนข้อมูลว่างเปล่าโดยการตั้งค่าเริ่มต้นในพารามิเตอร์ที่สำคัญและค่า aveกำลังสร้างความหมายของค่าสำหรับแต่ละคีย์ โชคดีที่คืนค่าเฉลี่ยในลำดับเดียวกันกับค่าอินพุตดังนั้นการเปรียบเทียบกับอินพุตจะระบุว่ามีค่าต่างกันหรือไม่ ส่งคืนTRUEถ้าเป็นฟังก์ชัน

function(k=0,v=0)all(ave(v,k)==v)

ลองออนไลน์!


6

05AB1E , 11 9 7 ไบต์

ที่บันทึกไว้ 2 ไบต์ขอบคุณที่kalsowerus

Ùø¬DÙQ,

ลองออนไลน์!

คำอธิบาย

Ù           # remove duplicates
 ø          # zip
  ¬         # get the first element of the list (keys)
   D        # duplicate list of keys
    Ù       # remove duplicates in the copy
     Q      # compare for equality
      ,     # explicitly print result

@Riley: ใช่ ฉันยังมีความสุขมากที่กรณีพิเศษจบลงด้วยหนึ่งในสามของรายการ: P
Emigna

ฉันคิดว่าคุณสามารถบันทึกได้ 3 ไบต์โดยแทนที่`\)^ด้วย head ( ¬): TIO
kalsowerus

@kalsowerus: แต่น่าเสียดายที่แบ่งเป็นกรณีพิเศษของ[]:(
Emigna

@Enigma โอ้มันใช้ได้เพราะเมื่อการทดสอบฉันยังมีที่เหลือ,อยู่ในตอนท้าย []เพิ่มนั้นและมันอย่างใดทำงานร่วมกับ
kalsowerus

อัปเดตTIO
kalsowerus

5

JavaScript (ES6), 45 38 ไบต์

บันทึกแล้ว 6 ไบต์ขอบคุณ @Neil

a=>a.some(([k,v])=>m[k]-(m[k]=v),m={})

ส่งคืนfalseหรือtrueสำหรับฟังก์ชันและไม่ใช่ฟังก์ชันตามลำดับ

สิ่งนี้ทำงานโดยการลบค่าเก่าของแต่ละฟังก์ชั่น ( m[k]) และค่าใหม่อย่างต่อเนื่อง ( m[k]=vซึ่งเก็บค่าใหม่) แต่ละครั้งมีสามกรณี:

  • หากไม่มีค่าเก่าผลตอบแทนm[k] undefinedลบอะไรก็ได้จากundefinedผลลัพธ์NaNซึ่งเป็นเท็จ
  • หากค่าเก่าเหมือนกันกับค่าใหม่ให้m[k]-vผลลัพธ์0ซึ่งเป็นเท็จ
  • หากค่าเก่าแตกต่างจากค่าใหม่ให้m[k]-vผลลัพธ์เป็นจำนวนเต็มที่ไม่เป็นศูนย์ซึ่งเป็นความจริง

ดังนั้นเราเพียงแค่ต้องทำให้แน่ใจว่าm[k]-(m[k]=v)ไม่มีความจริง


1
ไกลเกินไป a=>!a.some(([x,y])=>m[x]-(m[x]=y),m=[])ใช้
Neil

@Neil แดงมันผมรู้ว่าจะต้องมีบางวิธีที่จะใช้ประโยชน์จากm[k]การเป็น undefined ... ขอบคุณ!
ETHproductions

5

Mathematica ขนาด 24 ไบต์

UnsameQ@@(#&@@@Union@#)&

คำอธิบาย: Unionลบคู่ที่ซ้ำกันจากนั้น#&@@@รับองค์ประกอบแรกจากแต่ละคู่ (เช่นFirst/@แต่มีจำนวนไบต์น้อยกว่า) หากมีการทำซ้ำใด ๆ UnsameQในองค์ประกอบแรกเหล่านี้คู่ไม่ได้ทำให้ฟังก์ชั่นที่เราตรวจสอบกับ

(สิ่งนี้อาจมีความหนาแน่นสูงสุดของ@ตัวละครในโปรแกรมที่ฉันเขียน ... )


2
@ความหนาแน่น =
เครื่องคิดเลขเส้นตรง


4

Bash + coreutils, 17

sort -u|uniq -dw1

อินพุตถูกกำหนดผ่าน STDIN keyและvalueจะถูกTabแยกออกและแต่ละคู่จะมีการขึ้นบรรทัดใหม่

sortลบคู่คีย์ - ค่าที่ซ้ำกัน uniq -dเอาต์พุตที่ซ้ำกันเท่านั้นดังนั้นสตริงเอาต์พุตที่ว่างเปล่าในกรณีของฟังก์ชันและสตริงที่ไม่ว่างเป็นอย่างอื่น - เมื่อมีคีย์ซ้ำที่แม็พกับค่าที่ต่างกัน

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


4

05AB1E , 9 ไบต์

รหัส:

ãü-ʒ¬_}}Ë

คำอธิบาย:

ã            # Cartesian product with itself
 ü-          # Pairwise subtraction
   ʒ  }}     # Filter out elements where the following is not true:
    ¬_       #   Check whether the first digit is 0
        Ë    # Check if all equal

ใช้การเข้ารหัส05AB1E ลองออนไลน์!


การเดินทางไปแสดงปิดʒทันทีที่ผมเห็น :)
Emigna

@Emigna ใช่ฮ่า ๆ : p แต่ฉันแล้วพบข้อบกพร่องที่เป็นเหตุให้ใช้แทน}} }
Adnan

4

เยลลี่ 6 ไบต์

QḢ€µQ⁼

ลองออนไลน์!

คำอธิบาย

QḢ€µQ⁼
Q      - Remove duplicate pairs
 Ḣ€    - Retrieve the first element of each pair
   µ   - On the output of what came before..
     ⁼ - Are the following two equal (bit returned)?
    Q  - The output with duplicates removed
       - (implicit) the output.

นี่คือวิธีอื่น 6 ไบต์เช่นกัน:

QḢ€ṢIẠ

ลองออนไลน์!

แทนที่จะทดสอบด้วยการลบคีย์ที่ซ้ำกันประเภทนี้ ( ) และตรวจสอบIว่าความแตกต่างระหว่างข้อกำหนด ( ) คือความจริงทั้งหมด ( )


4

R , 95 66 ไบต์

function(k,v)any(sapply(k,function(x){length(unique(v[k==x]))-1}))

บันทึกแล้ว 29 ไบต์ขอบคุณ Jarko Dubbeldam

ฟังก์ชั่นไม่ระบุชื่อ ส่งออกFALSEถ้าฟังก์ชั่นและTRUEถ้าไม่ได้ (ขออภัย) รับอาร์กิวเมนต์เป็นรายการของคีย์และรายการค่าเช่นนั้น

> f(c(1,2,5,1,2),c(2,1,2,2,5))
[1] TRUE # not a function

วนรอบทุกคีย์และคว้าความยาวของชุดค่าที่ไม่ซ้ำกันสำหรับคีย์นั้น ถ้าanyของพวกเขาเป็น> 1 TRUEผลตอบแทน

นี้จะถูกตีโดยMickyT 's คำตอบและยังจูเซปเป้ ' s โหวตขึ้นหนึ่งในนั้น


เหตุใดคุณจึงสร้างดาต้าเฟรมเพื่ออ้างอิงเวกเตอร์ที่คุณเพิ่งใส่ลงไปในดาต้าเฟรมนั้น function(k=0,v=0)any(sapply(k,function(x){length(unique(v[k==x]))-1}))ควรทำสิ่งเดียวกันให้สำเร็จ
JAD

เพราะฉันยังคงเรียนรู้! อย่างน้อยหนึ่งคำตอบ R อื่น ๆ ไม่เหมือนที่คุณอธิบาย
BLT

ขออภัยถ้าฉันออกมารุนแรงสักหน่อย :) การส่งของคุณแตกต่างจากคำตอบ R อื่น ๆ และถ้าคุณตัดข้อมูลที่ซ้ำซ้อนออกไปคุณอาจเปรียบเทียบได้ดีกว่า
JAD

4

J-uby , 48 33 25 21 ไบต์

-3 ไบขอบคุณจอร์แดน!

:size*:==%[:to_h,~:|]

คำอธิบาย

:size*:==%[:to_h,~:|]

# "readable"
(:size * :==) % [:to_h, ~:|]

# transform :% to explicit lambda
->(x){ (:size * :==).(:to_h ^ x, ~:| ^ x)

# apply explicit x to functions
->(x){ (:size * :==).(x.to_h, x|x) }

# expand :* (map over arguments)
->(x){ :==.(:size.(x.to_h), :size.(x|x) }

# simplify symbol calls to method calls
->(x){ x.to_h.size == (x|x).size }

# :| is set union for arrays; x|x just removes duplicates, like :uniq but shorter
->(x){ x.to_h.size == x.uniq.size }

วิธีแรก, 33 ไบต์

-[:[]&Hash,:uniq]|:*&:size|:/&:==

อันนี้ยาวกว่าสารละลาย Ruby ที่เทียบเท่า แต่มันสนุกที่จะทำ

ความพยายามในการอธิบายโดยเปลี่ยนเป็น Ruby:

-[:[]&Hash,:uniq]|:*&:size|:/&:==

# "readable"
-[:[] & Hash, :uniq] | (:* & :size) | (:/ & :==)                  

# turn into explicit lambda
->(x){ (:/ & :==) ^ ((:* & :size) ^ (-[:[] & Hash, :uniq] ^ x)) } 

# simplify expressions now that we have an explicit x
->(x){ :== / (:size * [Hash[x], x.uniq]) }                          

# translate to equivalent Ruby code
->(x) { [Hash[x], x.uniq].map(&:size).reduce(:==) }               

# simplify reduce over explicit array
->(x) { Hash[x].size == x.uniq.size }                             

ฉันสามารถบันทึก 2 ไบต์ด้วยเวอร์ชันที่ใหม่กว่าโดยแทนที่:uniqด้วย~:|



3

Mathematica, 35 ไบต์

(l=Length)@Union@#==l@<|Rule@@@#|>&

ฟังก์ชั่นการถ่ายเพียวรายการของคู่ได้รับคำสั่งเป็น input และกลับมาหรือTrue Falseใช้ประโยชน์จากความจริงที่ว่าการUnion@#ลบคู่ที่สั่งซ้ำแล้วซ้ำอีกครั้ง แต่<|Rule@@@#|>(การเชื่อมโยง) จะลบทั้งหมดยกเว้นคู่ที่ได้รับคำสั่งด้วยองค์ประกอบแรก ดังนั้นเราสามารถเปรียบเทียบLengths ของเอาต์พุตทั้งสองเพื่อตรวจสอบว่ารายการอินพุตเป็นฟังก์ชันหรือไม่



3

CJam , 19 17 ไบต์

บันทึก 2 ไบต์ขอบคุณ Martin Ender

0l~$2ew{:.=~!&|}/

เอาต์พุต0สำหรับฟังก์ชั่นและ1สำหรับที่ไม่ใช่ฟังก์ชั่น

ลองออนไลน์!

คำอธิบาย

0                     e# Push a 0. We need it for later.
 l~                   e# Read and eval a line of input.
   $                  e# Sort it by the keys.
    2ew               e# Get all consecutive pairs of the sorted list.
       {              e# For each pair of pairs:
        :.=           e#  Check if the keys are equal and if the values are equal.
           ~!&        e#  Determine if the keys are equal AND the values are not equal.
              |       e#  OR with 0. If any pair indicates that the input is not a function,
                      e#  this will become 1 (and remain 1), otherwise it will be 0.
               }/     e# (end block)

3

APL (Dyalog) , 16 12 11 9 ไบต์

(∪≡⊢)⊃¨∘∪

ลองออนไลน์!

คำอธิบาย

             Unique, remove duplicates; (3 5) (3 5) => (3 5)
¨∘            For each element
             Pick the first sub element (3 5) (2 3) => 3 

             Check whether the arguments (listed below) are the same
             The right argument
             And the right argument with duplicates removed

พิมพ์0เป็นเท็จและ1เป็นจริง


โอ้โหคุณทำได้ดีจริงๆ
Adám


3

brainfuck , 71 ไบต์

,[[-[->>+<<]+>>],>[[->+<<->]<[<<]>]>[-<+>]<<[->+<]+[-<<]>>,]-[--->+<]>.

ลองออนไลน์!

การป้อนข้อมูลจะนำมาเป็นสตริงแบน: 35356444ยกตัวอย่างเช่นกรณีการทดสอบครั้งแรกจะเป็น หากต้องการให้ตัวแทนปรากฏในคำถามต้นฉบับเพียงเพิ่มเครื่องหมายจุลภาครวมหกรายการในโปรแกรมที่จุดด้านขวา

เอาท์พุทUสำหรับฟังก์ชั่นและVสำหรับที่ไม่ใช่ฟังก์ชั่น

คำอธิบาย

สำหรับจุดรหัส ASCII ใด ๆ n, f (n) จะถูกเก็บไว้ที่เซลล์ 2n + 1 เซลล์ 2n และ 2n + 2 เป็นพื้นที่ทำงานและ 0, 2, 4, 6, ... 2n-2 เป็นเส้นทางของเกล็ดขนมปังเพื่อนำกลับไปที่เซลล์ 0 เมื่ออินพุตถูกพิสูจน์ว่าไม่ใช่ฟังก์ชัน f ( 0) ตั้งค่าเป็น 1 (ในบรรดาผลข้างเคียงที่หลากหลาย)

,                  input first key
[                  start main loop
 [-[->>+<<]+>>]    move to cell 2n, leaving a trail of breadcrumbs
 ,                 input value corresponding to current key
 >[                if key already has a value:
   [->+<<->]<      copy existing value, and compare to new value
   [<<]            if values are different, go to cell -2
   >               go back to cell 2n+1 (or -1 if mismatch)
 ]
 >[-<+>]           move existing value back to cell 2n+1 (NOP if no existing value, move the 1 from cell 0 to cell -1 if mismatch)
 <<[->+<]          copy new value to cell 2n+1 (NOP if there was already a value)
 +[-<<]>>          follow breadcrumbs back to cell 0 (NOP if mismatch)
 ,                 input next key
]                  (if mismatch, cell -2 becomes the next "cell 0", and the next key is also effectively changed by the breadcrumbs left lying around)
-[--->+<]>.        add 85 to cell 1 and output the result


2

Pyth - 9 8 ไบต์

ql.d{Ql{

ลองมัน

มันทำงานได้โดยการลบคู่ซ้ำใด ๆ ก่อน ({Q); จากนั้นจะเปรียบเทียบความยาวของรายการกับความยาวของพจนานุกรมที่สร้างขึ้นจากรายการ (หากค่า x เดียวกันเกิดขึ้นมากกว่าหนึ่งครั้งตัวสร้างพจนานุกรมจะใช้เพียงหนึ่งครั้งสุดท้ายทำให้พจนานุกรมสั้นกว่ารายการ)


2

MATLขนาด 12 ไบต์

iFFvXu1Z)SdA

อินพุตเป็นเมทริกซ์ 2 คอลัมน์โดยที่คอลัมน์แรกคือคีย์และที่สองคือค่า

ลองออนไลน์!

คำอธิบาย

i     % Input: 2-column matrix
FFv   % Postpend a row with two zeros. This handles the empty case
Xu    % Unique rows. This removes duplicate (key, value) pairs
1Z)   % Select first column, that is, key. We need to check if all
      % keys surviving at this point are different
S     % Sort
d     % Consecutive differences
A     % Are all values nonzero?

2

PHP, 49 ไบต์

foreach($_GET as[$x,$y])($$x=$$x??$y)-$y&&die(n);

พิมพ์อะไรสำหรับฟังก์ชั่นและnสำหรับที่ไม่ใช่ฟังก์ชั่น


1

CJam , 14 11 9 bytes

_&0f=__&=

ลองออนไลน์!

รับอินพุตเป็นอาร์เรย์ของคู่คีย์ / ค่าบนสแต็กส่งคืน1ถ้าอินพุตเป็นฟังก์ชันและ0หากไม่ใช่

วิธีการแก้ปัญหานี้ขึ้นอยู่กับตัวอย่าง_&ซึ่งจะทำซ้ำอาร์เรย์โดยการแยกชุดของมันด้วยตัวเอง ฉันทำสิ่งนี้สองครั้งแรกในการป้อนข้อมูลเต็มรูปแบบ (เพื่อกำจัดคู่คีย์ / ค่าที่ทำซ้ำอย่างแน่นอน) และจากนั้นบนปุ่มเพียงปุ่มเดียว (เพื่อดูว่ามีคีย์ซ้ำใด ๆ ที่ยังคงหลงเหลืออยู่หลังจากการทำซ้ำครั้งแรก)

นี่คือรหัสเต็มรูปแบบที่มีความคิดเห็น:

_&           "remove duplicate key/value pairs from input";
  0f=        "remove the values, leaving only the keys";
     _       "make a copy of the array of keys";
      _&     "remove duplicate keys from the copy";
        =    "compare the de-duplicated key array with the original";

เพียงแค่คุณรู้ว่าe#เป็นไวยากรณ์ความคิดเห็นสายเฉพาะใน CJam
แยกผลไม้

1

Ruby, 39 30 29 ไบต์

ขอบคุณ@ValueInkสำหรับการบันทึก 9 ไบต์!

->x{Hash[x].size==(x|x).size}

ท่าเรือ @ ก้านของงูหลาม 2 คำตอบ


Hash[x]ทำงานได้ดีเช่นกัน
Value Ink ใน

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