Tận dụng tốt nhất hai mảng


19

Bạn sẽ được cung cấp hai mảng số dấu phẩy động. Nhiệm vụ của bạn là ghép các phần tử tương ứng của hai mảng và lấy tối đa của mỗi cặp. Tuy nhiên , nếu hai yếu tố tương ứng bằng nhau, bạn phải lấy tổng của chúng thay thế.

Ví dụ, đưa ra các danh sách [1, 3, 3.2, 2.3][3, 1, 3.2, 2.6], bạn phải làm như sau:

  • Ghép nối các yếu tố (hoặc zip) : [[1, 3], [3, 1], [3.2, 3.2], [2.3, 2.6]].

  • Đi qua từng cặp và áp dụng quy trình trên : [3, 3, 6.4, 2.6].


Thông số kỹ thuật

  • Các mảng / danh sách sẽ luôn có độ dài bằng nhau. Họ có thể trống.

  • Các số họ chứa sẽ luôn phù hợp với khả năng ngôn ngữ của bạn, miễn là bạn không lạm dụng điều đó. Chúng có thể là dương, bằng 0 hoặc âm, bạn phải xử lý tất cả các loại.

  • Nếu nó giúp bạn giảm số byte của bạn, bạn cũng có thể lấy độ dài của danh sách làm đầu vào.

Quy tắc


Các trường hợp thử nghiệm

Mảng_1, Mảng_2 -> Đầu ra

[], [] -> []
[1, 2, 3], [1, 3, 2] -> [2, 3, 3]
[1, 3, 3.2, 2.3], [3, 1, 3.2, 2.6] -> [3, 3, 6.4, 2.6]
[1,2,3,4,5,5,7,8,9,10], [10,9,8,7,6,5,4,3,2,1] -> [10, 9, 8, 7, 6, 10, 7, 8, 9, 10]
[-3.2, -3.2, -2.4, 7, -10.1], [100, -3.2, 2.4, -7, -10.1] -> [100, -6.4, 2.4, 7, -20.2]

Bạn nói rằng các con số sẽ luôn phù hợp với "khả năng" trong ngôn ngữ của bạn. Miễn là bạn không "lạm dụng" điều đó. Chỉ hỗ trợ các số nguyên trong một ngôn ngữ không có dấu phẩy được coi là lạm dụng? nhưng tôi thực sự không thấy lý do tại sao nó phải nổi. Quá trình tương tự có thể được thực hiện trên các số nguyên. Tôi muốn giải quyết vấn đề này trong Brain-Flak nhưng Brain-flak chỉ hỗ trợ ints
Wheat Wizard

@WheatWizard Tôi có thể tạo một ngoại lệ cho điều đó. Đi trước và gửi câu trả lời của bạn và đề cập đến tôi cho phép nó để tránh nhầm lẫn.

Câu trả lời:


8

Thạch, 4 byte

=‘×»

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

Điều này sử dụng cách tiếp cận chính xác như câu trả lời APL của tôi , ngoại trừ Jelly có tích hợp để thêm một vào một số!


Ghét phải là một spoilsport, nhưng không phải là một trong số các ký tự đó nhiều hơn một byte trong mỗi mã hóa hợp lý?
Hiệp sĩ Cedric

Điều này sử dụng bảng mã thạch .
Zacharý

Cuối cùng tôi đã chiến thắng trước sự cạnh tranh!
Zacharý

2
@ Zacharý MỘT MAN, 4 btyte ... MÙA H ... NÀY ... Bạn ... S ... ... ĐƯỢC ... JELLY OF HIM ... đánh giá J cho Jelly .
Bạch tuộc ma thuật Urn

11

Kotlin, 78 75 71 66 65 59 byte

Đó là nỗ lực đầu tiên của tôi, thật tuyệt: D

a.zip(b).map{(a,b)->when{b>a->b;a>b->a;else->a*2}}.toList()

TIO không hoạt động với giải pháp này (và tôi không biết tại sao), mã nguồn để thử nghiệm bên dưới

fun main(args: Array<String>) {
    bestOfTwo(floatArrayOf(), floatArrayOf()).print()
    bestOfTwo(floatArrayOf(0F), floatArrayOf(0F)).print()
    bestOfTwo(floatArrayOf(1F,2F,3F), floatArrayOf(1F,3F,2F)).print()
    bestOfTwo(floatArrayOf(1F,3F,3.2F,2.3F), floatArrayOf(3F,1F,3.2F,2.6F)).print()
    bestOfTwo(floatArrayOf(1F,2F,3F,4F,5F,5F,7F,8F,9F,10F), floatArrayOf(10F,9F,8F,7F,6F,5F,4F,3F,2F,1F)).print()
    bestOfTwo(floatArrayOf(-3.2F,-3.2F,-2.4F,7F,-10.1F), floatArrayOf(100F,-3.2F,2.4F,-7F,-10.1F)).print()
}


fun bestOfTwo(a :FloatArray, b :FloatArray): List<Float> =
    a.zip(b).map{(a,b)->when{b>a->b;a>b->a;else->a*2}}.toList()


fun List<Float>.print() {
    this.forEach { print("$it, ") }; println("")
}

CHỈNH SỬA:

-3 bằng cách thay thế "a + b [i]" bằng "a * 2"

-4 bằng cách thay thế phương thức "mapIndexed" bằng "zip" (Nhờ giải pháp @AnonymousReality Swift)

-5 bằng cách thay thế phương thức "Math.max" bằng khi có điều kiện

-1 bằng cách thay đổi khi thứ tự điều kiện

-6 bằng cách thay đổi thànhFloatArray () bởi toList ()


10
Chào mừng đến với PPCG! Xin đừng nản lòng với downvote (đó là kết quả của một sự cố nhẹ của hệ thống xảy ra khi bài đăng đầu tiên của người dùng mới được gắn cờ tự động về chất lượng và sau đó họ cải thiện bài đăng đã nói !!)
Jonathan Allan

2
"Tính năng" tồi tệ nhất từng có ... btw không cảm thấy tệ về nó.
Erik the Outgolfer

10

Python 2 , 45 byte

Một kết hợp của giải pháp ban đầu của tôi và @ovs ' .

lambda*a:map(lambda x,y:max(x,y)*-~(x==y),*a)

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

Python 2 , 49 byte

lambda x,y:[max(a,b)*-~(a==b)for a,b in zip(x,y)]

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

Python 2 , 46 byte

@ovs đề xuất phương pháp này để tiết kiệm 3 byte.

lambda*x:[max(a,b)*-~(a==b)for a,b in zip(*x)]

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


Làm sao?

Trước hết, chúng tôi ghép các phần tử tương ứng, bằng cách sử dụng *hoặc zip(). Điều đó cho phép chúng tôi chơi gôn hơn nữa bằng cách làm việc với bản đồ hoặc hiểu danh sách.

Thủ thuật hay trong câu trả lời này là phần này : max(x,y)*-~(x==y). Làm thế nào mà làm việc? - Vâng, như hầu hết các bạn đã biết, Python tự động chuyển đổi các giá trị bool thành số nguyên khi chúng được sử dụng trong các phép toán số học. Do đó, (x==y)được đánh giá là 1, nếu điều kiện được đáp ứng. Tuy nhiên, nếu hai giá trị không bằng nhau, nó sẽ trả về 0. Sau đó, hoạt động bitwise -~tăng giá trị được trả về từ bool bằng cách 1, cho chúng ta 2hoặc 1. max(a,b)đưa ra giá trị tối đa của cặp và *nhân nó với giá trị được trả về ở trên (để nó được nhân với 2chỉ khi chúng bằng nhau, trong trường hợp này max()trả về giá trị của cả hai).

Điều này dựa trên thực tế là tổng của hai số bằng nhau trên thực tế là một trong số chúng nhân đôi và loại "lạm dụng" lớp bool của Python là một lớp con của int.


Wow, thật là nhanh!

đơn giản hơn, cùng số byte:lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
jferard

@jferard Tôi thực sự, đó đã là giải pháp của Luis.
Ông Xcoder

@ Mr.Xcoder Rất tiếc! Tôi đã không đọc toàn bộ trang ...
jferard

Không bao giờ nói "ở trên", vì thứ tự có thể thay đổi (Tôi không thấy giải pháp của bạn ở trên)
Zacharý

8

JavaScript (ES6), 53 49 45 43 byte

a=>b=>a.map((x,y)=>(y=b[y])>x?y:y<x?x:x+y)
  • 4 byte được lưu bằng cách mượn một mẹo từ ông Xcoder.
  • 2 byte được lưu nhờ Arnauld.

Thử nó

o.innerText=(f=

a=>b=>a.map((x,y)=>(y=b[y])>x?y:y<x?x:x+y)

)(i.value=[1,3,3.2,2.3])(j.value=[3,1,3.2,2.6]);oninput=_=>o.innerText=f(i.value.split`,`.map(eval))(j.value.split`,`.map(eval))
<input id=i><input id=j><pre id=o>


Giải trình

a=>b=>

Hàm ẩn danh lấy 2 mảng làm đối số thông qua các tham số ab, theo cú pháp currying (nghĩa là gọi vớif(a)(b)

a.map((x,y)=>                      )

Ánh xạ qua mảng đầu tiên, chuyển từng phần tử qua một hàm trong đó xlà phần tử hiện tại và ylà chỉ mục hiện tại.

(y=b[y])

Lấy phần tử tại chỉ mục ytrong mảng thứ hai và gán nó làm giá trị mới của y.

>x?y

Kiểm tra nếu ylớn hơn xvà, nếu vậy, trở lại y.

:y<x?x

Khác, kiểm tra nếu yít hơn xvà, nếu vậy, trở lạix

:x+y

Khác, trả lại tổng của xy. (Nhân xhoặc ybằng 2 cũng sẽ hoạt động ở đây, với cùng số byte.)


j.value.split`,`.map(eval)hay eval('['+j.value+']')? Cũng x+ysẽ trông gọn gàng hơn IMHO.
Neil

@Neil: 1) Tôi thấy trước đây dễ gõ hơn. Ngoài ra, tôi có một vài mẫu Snippet trên một trong các máy của mình; nó dễ dàng hơn chỉ để giải quyết .map(eval)chúng. 2) Đồng ý, sẽ chỉnh sửa trong giây lát.
Xù xì


7

R , 31 29 byte

function(a,b)pmax(a,b)+a*!a-b

pmax lấy tối đa song song của hai (hoặc nhiều) mảng (tái chế ngắn hơn nếu cần).

Tôi đã xem xét nhận xét của Luis Mendo và rõ ràng tôi nhận ra cách tiếp cận cũng có thể hiệu quả với R. Đó đã cho tôi tới 30 byte, nhưng sau đó tôi bắt đầu chơi xung quanh với nhiều cách khác nhau để nhận được các chỉ số thay vì để cải thiện câu trả lời ban đầu của tôi, và tình cờ gặp !a-bnhư TRUEnơi a==bFALSEbằng cách khác, tương đương với a==b. Tuy nhiên, vì bất kỳ lý do gì, R không yêu cầu dấu ngoặc đơn !a-bnhư vậy a==b, điều này giúp tôi tiết kiệm được hai byte.

Như JDL đã đề cập trong các bình luận , điều này hoạt động vì !(phủ định) có độ ưu tiên thấp hơn toán tử nhị phân -trong R, điều này là lạ.

Hãy thử trực tuyến! (phiên bản mới)

Hãy thử trực tuyến! (nguyên)


Thì ra là unary "!" có độ ưu tiên thấp hơn trong R so với nhị phân "-", điều mà tôi nghĩ là khá bất thường (và tôi đã không nhận ra cho đến khi đọc câu trả lời này!)
JDL

@JDL yeah Tôi hầu như luôn phải mở trang R Syntax trong khi chơi golf trong trường hợp kỳ quặc như thế này ... và cũng bởi vì tôi không bao giờ có thể nhớ được quyền ưu tiên :khi tương tác với số học.
Giuseppe


6

APL Dyalog, 5 byte

⌈×1+=

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

Làm sao?

  • , tối đa yếu tố khôn ngoan của các đối số
  • ×, nhân phần tử khôn ngoan
  • 1+=, 1 được thêm vào tính bằng nhau của phần tử

Điều này hoạt động bởi vì nếu các số là không bằng nhau, 1+=sẽ được 1, khi nhân với tối đa, là tối đa. Khi các số bằng nhau, 1+=sẽ trả về 2, khi số đó được nhân với mức tối đa, chúng tôi nhận được gấp đôi mức tối đa hoặc tối đa được thêm vào chính nó.


5

Thạch , 6 byte

żSṀE?€

Một liên kết dyadic lấy một danh sách các số ở mỗi bên và trả về danh sách kết quả.

Hãy thử trực tuyến! hoặc xem một bộ thử nghiệm *.

Làm sao?

żSṀE?€ - Link: list of numbers L, list of numbers R   e.g. [1,3,3.2,2.3], [3,1,3.2,2.6]
ż      - zip - interleave L & R                       [[1,3],[3,1],[3.2,3.2],[2.3,2.6]]
     € - for each pair:
    ?  - { if:
   E   -   ...condition: equal                          0      0       1         0
 S     -   ...then: sum                                               6.4
  Ṁ    -   ...else: maximum                             3      3                2.6
       - }                                    ... ->   [3     ,3     ,6.4      ,2.6]

Một cách khác là liên kết đơn âm này lấy một danh sách gồm hai danh sách, cũng có 6 byte :

+»⁼?"/

* Tôi không nghĩ rằng tôi đã từng tạo một chân trang của bộ thử nghiệm gần gấp ba lần số byte của mã trước đó!


Hết hồn! . +1 cho việc giải thích nguyên văn thực tế của câu hỏi.
Zacharý

... và tôi đã bị bắt gặp khi quên rằng »véc tơ trước đó!
Jonathan Allan

Nó sẽ làm gì khác, lấy mảng tối đa theo một cách phức tạp nào đó?
Zacharý

Không cần bất kỳ định nghĩa phức tạp nào, Python quản lý - ví dụ max([1,1,0],[1,0,3]) -> [1,1,0](không [1,1,3]).
Jonathan Allan

Vì vậy, về cơ bản vô hạn?
Zacharý

5

05AB1E , 5 byte

øεMÃO

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

-1 cảm ơn Emigna .


Ý tưởng hay sử dụng γ!
Emigna

@Emigna Tôi thực sự muốn "các yếu tố tối đa", và {γθcó lẽ là ngắn nhất tôi có thể làm được cho điều đó.
Erik the Outgolfer

Thế còn øεMÃO?
Emigna

@Emigna Tuyệt, cảm ơn! (duh tại sao tôi không nghĩ đến ) yay đã dẫn đầu: p btw øεZÃOcũng sẽ hoạt động
Erik the Outgolfer

4

MATL , 7 byte

X>tG=s*

Đầu vào là một ma trận hai hàng, trong đó mỗi hàng là một trong các mảng.

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

Giải trình

X>   % Implicit input. Maximum of each column
t    % Duplicate
G    % Push input
=    % Is equal? Element-wise with broadcast. Gives a two-row matrix
s    % Sum of each column. Gives a row vector containing 1 and 2
*    % Multiply, element-wise. Implicit display

4

Java 8, 80 69 67 66 65 64 63 byte

(a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}

Thay đổi mảng đầu vào thứ hai thay vào đó hoặc trả về một mảng float mới để lưu byte.

-11 byte bằng cách lấy độ dài làm đầu vào số nguyên bổ sung, được phép theo quy tắc thách thức.
-5 byte nhờ @ OliverGrégoire (một byte mỗi lần .. xD)
-1 byte gián tiếp nhờ vào câu trả lời JS của @Shaggy , bằng cách sử dụng a[l]*2thay vì a[l]+b[l].

Giải trình:

Hãy thử nó ở đây.

(a,b,l)->{          // Method with 2 float-array and integer parameters and no return-type
  for(;l-->0;)      //  Loop over the array
    if(a[l]>=b[l])  //   If the current value in `a` is larger or equal to `b`:
      b[l]=         //   Modify the second input-array:
       a[l]*        //    Use `a` multiplied by:
        (a[l]>b[l]? //     If the current value in `a` is larger than `b`:
          1         //      Multiply by 1
         :          //     Else (`a` is smaller of equal to `b`):
          2)        //      Multiply by 2
                    //  End of loop (implicit / single-line body)
}                   // End of method

2
"Nếu nó giúp bạn giảm số byte của bạn, bạn cũng có thể lấy độ dài của danh sách làm đầu vào." Nó chắc chắn sẽ làm giảm số lượng byte của bạn;)
Olivier Grégoire

1
Ngoài ra, ngắn hơn 2 byte:a->b->l->{float A,B;for(;l-->0;b[l]=(A=a[l])<B?B:A>B?A:A+B)B=b[l];}
Olivier Grégoire

Và bạn có thể lưu thêm một byte bằng cách đưa float A, Bvào forkhởi tạo.
Olivier Grégoire

1
Hoặc này: (a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}(63 byte)
Olivier Grégoire

3
@ OlivierGrégoire Lol .. với việc chơi gôn mỗi byte giúp ích, nhưng điều đó không có nghĩa là bạn cần phải đánh golf từng byte một. ; p
Kevin Cruijssen


3

05AB1E , 9 8 7 byte

Đã lưu một byte khi Erik Outgolfer chỉ ra rằng một danh sách các danh sách là đầu vào hợp lệ.

øεMsËi·

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

Giải trình

ø          # zip the lists
 ε         # apply to each pair
  M        # get max
   s       # swap the top 2 elements on the stack
    Ëi     # if all elements are equal
      ·    # double the max

Wow, thật là nhanh!

Bạn có thể lưu một byte bằng cách loại bỏ và nhập vào dưới dạng một cặp danh sách và danh sách.
Erik the Outgolfer

@EriktheOutgolfer: Đúng. Tôi cho rằng chúng tôi không được phép, nhưng tôi thấy rằng thách thức này chỉ định quy tắc I / O tiêu chuẩn. Cảm ơn bạn đã thông báo :)
Emigna

1
@Emigna Mẹo: đừng đưa ra các quy tắc trong tâm trí của bạn;)
Erik the Outgolfer

1
@EriktheOutgolfer: Vâng tôi thực sự cần phải ngừng làm điều đó. Đặc biệt là các quy tắc làm cho các chương trình của tôi dài hơn;)
Emigna


3

J, 7 byte

>.`+@.=

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

Lấy một danh sách làm đối số bên trái và danh sách còn lại là bên phải.

May mắn thay, bình đẳng là một hoạt động không có thứ hạng.

Giải trình

>.`+@.=
      =  Compare equality pairwise
    @.   If equal
   +       Sum
>.       (Else) take greater value

@.không thực sự là một câu lệnh if, nhưng trong trường hợp này, nó hoạt động như một câu lệnh (nó lập chỉ mục vào gerund >.`+dựa trên kết quả của đối số đúng của nó và áp dụng điều đó cho đầu vào).


Làm tốt lắm, tôi biết tôi không thể làm điều này, mặc dù bạn đã bị vượt qua bởi bản dịch APL của tôi. > _ <
Zacharý

J thực sự tỏa sáng ở đây
Jonah

@ Zacharý chuột, dù sao cũng chơi golf.
cole


3

TI-Basic, 23 21 byte

Prompt A,B
(ʟA=ʟB)ʟA+max(ʟA,ʟB

Danh sách quá xấu chiếm hai byte mỗi ...


Bạn có thể lưu hai byte bằng cách nhắc XYsau đó sử dụng ʟXʟYtruy cập chúng, tức là " Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2".
Scott Milner

Ngoài ra, điều này hiện không hợp lệ, vì các L1(L1=L2)nỗ lực để lấy phần tử trong L1danh sách, sẽ gây ra lỗi. Để khắc phục điều đó, trao đổi thứ tự, tức là (L1=L2)L1.
Scott Milner

@ScottMilner Cảm ơn bạn đã chỉ ra cả hai thứ đó.
TimTech



2

Trăn 3 , 49 46 45 byte

3 byte bị xóa nhờ @ Mr.Xcoder (splat thay vì hai đối số) và 1 byte nhờ @ovs (ánh xạ thay vì hiểu danh sách)

lambda*x:map(lambda a,b:a*(a>=b)+b*(b>=a),*x)

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


1
46 byte : lambda*c:[a*(a>=b)+b*(b>=a)for a,b in zip(*c)]. Hóa ra điều này cũng khá tốt :) - Quá tệ không có chỗ để chơi gôn nữa
Ông Xcoder

@ Mr.Xcoder Cảm ơn! Ý tưởng tốt!
Luis Mendo

45 byte bằng cách sử dụng bản đồ thay vì zip.
trứng

2

Lisp thường gặp, 60 59 byte

(mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read))

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

-1 byte nhờ @ Zacharý!


59 byte : (mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read)).
Zacharý

Không có gì, tôi không biết rõ lắm, tôi chỉ dịch các câu trả lời khác của mình sang Lisp mà cuối cùng lại tiết kiệm được một byte.
Zacharý

2

Python với numpy, 28 byte

lambda a,b:a*(a>=b)+b*(b>=a)

Giả sử đầu vào được đưa ra dưới dạng hai mảng numpy.


Nếu chúng ta đang sử dụng numpy thì đây là giải pháp tồi tệ hơn của tôi:lambda a,b:n.fmax(a,b)*((a==b)+1)
Erich

@Erich Tôi thích ý tưởng, nhưng để làm điều đó tôi sẽ cần import numpy as n. Tôi đi mà không có nó ở đây bởi vì nó ẩn trong đầu vào.

Tôi đoán tôi hơi run khi đếm byte rõ ràng, thường thì câu trả lời của python chỉ đơn giản là lambdas, khi thực hiện một câu trả lời thực sự sẽ yêu cầu gán nó cho một cái gì đó. Vì lý do này, tôi tự hỏi nếu nó cũng được phép thoát khỏi với một tuyên bố nhập khẩu ngầm?
Erich

@Erich Nói chung, bạn chỉ có thể tham khảo một biến nnếu bạn đã xác định ntrong mã của mình, vì vậy việc nhập phải rõ ràng. Theo mặc định, chúng tôi cho phép các chức năng hoặc chương trình đầy đủ dưới dạng câu trả lời, bao gồm các chức năng ẩn danh.

1
Vâng, điều này chỉ cần đầu vào là mảng numpy, chứ không phải nhập khẩu numpy. Nhưng điều này thậm chí làm việc mà không sử dụng return?
Zacharý

2

C # (.NET Core) , sử dụng Linq 47 + 18 = 65 byte

x=>y=>x.Zip(y,(a,b)=>a>b?a:b>a?b:b+a).ToArray()

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

C # (.NET Core), 82 byte

x=>y=>l=>{for(int i=0;i<l;i++)x[i]=x[i]>y[i]?x[i]:y[i]>x[i]?y[i]:y[i]*2;return x;}

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


Bạn có thể bỏ câu trả lời LINQ xuống một vài byte bằng cách thay đổi không gian tên System.LINQ sang sử dụng System.LINQ
jkelm

@jkelm yeah, tôi đã tự hỏi liệu 'sử dụng Hệ thống;' có được bao gồm hay không như thế, tôi đoán là không. Tôi sẽ dọn sạch nó
Dennis.Verweij

System.Linq được bao gồm trong "Trình biên dịch tương tác Visual C #". Tôi không hoàn toàn chắc chắn về việc quay lại Arrayvs IListvs IEnumerable, nhưng nếu tất cả đều đủ điều kiện thì bạn có thể nhận được số byte đến 37 - tio.run/##Sy7WTS7O/ Lỗi
dana


1

Swift 3, 81 79 byte

func n(a:[Double],b:[Double]){for(x,y)in zip(a,b){print((x==y) ?x+y:max(x,y))}}

Swift có một thuộc tính thú vị ở chỗ một Int không thể truyền trực tiếp đến a Double, vì vậy bạn phải chỉ định bất kỳ mảng nào là mảng của Doubles trước khi chuyển chúng vào hàm.

(ví dụ) var k:[Double] = [1,2,3,4,5,5,7,8,9,10]

Chỉnh sửa: -2 byte nhờ @EriktheOutgolfer


Bạn có cần không gian xung quanh (x,y)và trước ??
Erik the Outgolfer

@EriktheOutgolfer Cái trước ? là cần thiết bởi vì Swift sẽ coi chúng là loại tùy chọn thay vì chim nhạn (mà chúng không có). Những người khác thì không. Ngoài ra, điều này có thể được đánh golf quyết liệt.

@EriktheOutgolfer - TheIOSCoder đã trả lời bạn một phần, nhưng bạn nói đúng, bạn không cần những người trong vòng lặp for, thật thú vị!
AnonymousReality

73 byte: func n(a:[Float],b:[Float]){print(zip(a,b).map{$0==$1 ?2*$0:max($0,$1)})}(không chính xác float không cần xử lý theo mặc định)
Ông Xcoder

Hoặc 74 byte:func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
Ông Xcoder


1

Japt , 13 byte

íV,È¥Y Ä *XwY

Hãy thử trực tuyến!với -Qcờ để định dạng mảng đầu ra.


Hoàn thành tốt Tôi đã thực hiện 2 lần thử này sớm hơn với cả hai lần ra ở mức 17 byte. Tôi đã quên ícó thể lấy một chức năng như là một đối số thứ hai.
Xù xì

1

Rust , 107 97 byte

|a:V,b:V|a.iter().zip(b).map(|(&x,y)|if x==y{x+y}else{x.max(y)}).collect::<V>();
type V=Vec<f32>;

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

Đã lưu 8 byte nhờ @mgc


1
Tôi đoán bạn có thể tiết kiệm 8 byte bằng cách sử dụng suy luận kiểu được thu thập Vecvà bằng cách sử dụng maxphương pháp f32s:|a:Vec<f32>,b:Vec<f32>|a.iter().zip(b).map(|(&x,y)|if x==y{x+y}else{x.max(y)}).collect::<Vec<_>>();
mgc

1
@mgc Cảm ơn! Kiểu suy luận là một ý tưởng tốt, nhưng trong trường hợp này, bí danh thậm chí còn ngắn hơn.
jferard

1

Swift 4 , 41 byte

{zip($0,$1).map{$0==$1 ?2*$0:max($0,$1)}}

Các trường hợp thử nghiệm:

let f: ([Float], [Float]) -> [Float]
    = {zip($0,$1).map{$0==$1 ?2*$0:max($0,$1)}}

let testcases: [(inputA: [Float], inputB: [Float], expected: [Float])] = [
    (
        inputA: [],
        inputB: [],
        expected: []
    ),
    (
        inputA: [1, 2, 3],
        inputB: [1, 3, 2],
        expected: [2, 3, 3]
    ),
    (
        inputA: [1, 3, 3.2, 2.3],
        inputB:  [3, 1, 3.2, 2.6],
        expected: [3, 3, 6.4, 2.6]
    ),
    (
        inputA: [1,2,3,4,5,5,7,8,9,10],
        inputB:  [10,9,8,7,6,5,4,3,2,1],
        expected: [10, 9, 8, 7, 6, 10, 7, 8, 9, 10]
    ),
    (
        inputA: [-3.2, -3.2, -2.4, 7, -10.1],
        inputB:  [100, -3.2, 2.4, -7, -10.1],
        expected: [100, -6.4, 2.4, 7, -20.2]
    ),
]

for (caseNumber, testcase) in testcases.enumerated() {
    let actual = f(testcase.inputA, testcase.inputB)
    assert(actual == testcase.expected,
        "Testcase #\(caseNumber) \((testcase.inputA, testcase.inputB)) failed. Got \(actual), but expected \(testcase.expected)!")
    print("Testcase #\(caseNumber) passed!")
}
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.