Là mạch có thể?


9

Viết chương trình hoặc chức năng nhận đầu vào: tất cả các điện trở có sẵn và giá trị điện trở và đưa ra giá trị trung thực cho dù có thể có điện trở hay không bằng cách sử dụng các điện trở đó.

Quy tắc:

Bất kỳ định dạng cho đầu vào sẽ làm.

Sẽ có ít nhất 1 điện trở khả dụng và chương trình của bạn sẽ xuất ra ít nhất 10 điện trở có sẵn.

Điện trở của tất cả các điện trở có sẵn và điện trở cần thiết sẽ là số nguyên dương.

Đối với các điện trở khả dụng nếu cũng có thể có giá trị phân số, điện trở yêu cầu có thể là giá trị gần đúng. (Xem ví dụ)

Đầu ra phải là 2 giá trị duy nhất cho Có thể và Không thể.

Các điện trở có thể được kết nối theo bất kỳ cách nào.

Điện trở sê-ri : Cho n điện trở nối tiếp: Kết quả = R1 + R2 + R3 + .... Rn

Điện trở song song : Cho n điện trở song song: Kết quả = 1 / (1 / R1 + 1 / R2 + 1 / R3 + .... + 1 / Rn)

Mạch có thể không yêu cầu tất cả các điện trở để có được điện trở cần thiết (đầu ra True nếu đó là trường hợp).

Người chiến thắng:

Đây là môn đánh gôn mã nên đoạn mã ngắn nhất sẽ thắng.

Ví dụ:

R     List
110   220,220 -> True
440   220,220 -> True
550   400,300 -> False
3000  1000,3000 -> True
750   1000,3000 -> True
333   1000,1000,1000 -> True (1000||1000||1000=333.333)
667   1000,1000,1000 -> True ((1000+1000)||1000=666.6666)
8000  1000,1000,7000 -> True 
190   100,200,333,344,221 -> True 
193   105,200,333,344,221 -> True
400   200,100 -> False

Giải thích cho hai ví dụ cuối: /physics/22252/resistor-circuit-that-isnt-abul-or-series


Cơn gì 3 3 1, 3 3 2?
l4m2

1,5 được làm tròn thành 2, yêu cầu kháng cự sẽ không được đưa ra 0 (thêm nó vào câu hỏi), 3 3 sẽ đúng
Vedant Kandoi

Thử thách thú vị, nhưng tôi đối phó đủ với EE vì nó là ...

Tôi đoán Machicala thắng?
l4m2

2
Vấn đề này khó hơn so với mô tả khiến nó phát ra âm thanh vì các mạch điện trở chung không thể được chia theo cách đệ quy thành các phần nối tiếp và song song, theo những cách phức tạp hơn so với hai trường hợp thử nghiệm trước. 10 điện trở phải đủ dễ dàng để làm ví dụ như vậy. Tôi nghi ngờ rằng không có câu trả lời nào được đăng hiện đang hoạt động nói chung và một câu trả lời đúng cần phải có ma trận đảo ngược ở một số dạng.
xnor

Câu trả lời:


1

Python 3 , 253 byte

import functools
def p(l): return functools.reduce(lambda z,x:z+[y+[x]for y in z],l,[[]])
print(l[-1:][0]in[round(a)for a in[sum(a)for a in p([sum(a)for a in p(l)]+[1/sum(c)for c in[[1/b for b in a if b!=0]for a in p(l).copy()]if sum(c)!=0])]])

Tôi lấy quyền hạn của tất cả các giá trị điện trở và sau đó tính tổng cho chuỗi và 1 / tổng (1 / giá trị) cho paralel và sau đó tôi lấy quyền hạn của hai bộ này. Khi bạn lấy tổng của tất cả các tập hợp con và đặt chúng vào một tập hợp thì tập eiter này có chứa giá trị hay không. -> trả về Đúng / Sai

@stephen cảm ơn :)


2
Chào mừng đến với PPCG! Nếu bạn cần bất kỳ nhập khẩu, chúng cần được bao gồm trong mã của bạn. Ngoài ra, bạn cần tự lấy đầu vào, thay vì giả sử đầu vào là một biến. Ngoài ra, b != 0-> b!=0.
Stephen

Là Stephen saod, bạn không thể lấy đầu vào thông qua một biến được xác định trước, nếu không đây là đoạn trích, không được phép. Bạn nên thay đổi nó thành một chức năng hoặc một chương trình đầy đủ
Jo King

1
Nó không hoạt động cho trường hợp thử nghiệm thứ ba (cũng vậy, chơi golf một chút và với đầu vào thích hợp. Nếu bạn lo lắng tôi đã phá vỡ thứ gì đó, mã gốc của bạn cũng không hoạt động)
Jo King

chết tiệt Tôi có một cái nhìn :(
SimonSchuler

1

Japt , 52 byte

à má

ÈÊ<2?X:X¯1 ïXÅgW @[X+Y1/(1/XÄ/Y]Ãc
mmW c mr øV

Thử nó!

Đây là một điều khó khăn và tôi đã phải làm một vài điều kỳ lạ để làm cho nó hoạt động. Về mặt toán học, tôi không thể chứng minh rằng cái này hoạt động cho tất cả mọi thứ, nhưng nó hoạt động cho tất cả các trường hợp thử nghiệm cũng như trường hợp thử nghiệm được đề xuất thêm của tôi . Cụ thể, tôi biết rằng hàm mà tôi xác định được gọi Wcho các kết quả khác nhau tùy thuộc vào thứ tự của các điện trở trong đầu vào của nó vì vậy tôi chạy nó theo từng thứ tự có thể của từng tổ hợp điện trở có thể. Tôi cũng biết rằng nó sẽ tạo ra một danh sách các điện trở có thể tạo ra bằng cách sử dụng các điện trở đầu vào. Tôi không biết chắc chắn 100% rằng hai điều đó kết thúc với mọi sự kháng cự có thể.

Giải trình:

à       Get each combination e.g. [1,2,3] -> [[1,2,3],[1,2],[1,3],[2,3],[1],[2],[3]]
  m     For each combination...
   á    Get each order e.g. [1,2,3] -> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

    Skip a line to avoid overwriting the target resistance

È                                     Define a function W taking an array input X:
 Ê<2?X                                  If X is only 1 resistor, return it as-is
            XÅgW                        Get the resistances from applying W to the tail of X
       X¯1 ï                            Pair the first resistor with each possible tail resistance
                 @[            ]Ã       For each pair get these two values:
                   X+Y                    Those resistances in series
                      1/(1/XÄ/Y           Those resistances in parallel
                                 c      Collapse all those resistances into a single flat list

mmW            For each combination and order, get the resistances using W
    c          Collapse to a single list of resistances
      mr       Round each one
         øV    Return true if the target resistance is in the list, false otherwise

0

Ruby , 153 byte

f=->v,r{[r]-v==[]||r[1]&&[*2..v.size].any?{|n|v.permutation.any?{|l|[l[0,n].sum,(1.0/l[0,n].reduce(0){|s,x|s+1.0/x}).round].any?{|b|f[l[n..-1]+[b],r]}}}}

Hãy thử trực tuyến!

Lực lượng vũ phu. Ý tôi là thế

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.