두 개의 어레이를 최대한 활용하십시오


19

부동 소수점 숫자로 구성된 두 개의 배열이 제공됩니다. 당신의 임무는 두 배열의 해당 요소를 페어링하고 각 쌍의 최대 값을 얻는 것입니다. 그러나 두 개의 해당 요소가 같으면 대신 합계를 가져와야합니다.

예를 들어, 목록을 제공 [1, 3, 3.2, 2.3]하고 [3, 1, 3.2, 2.6]당신이 다음을 수행해야합니다 :

  • 요소 (또는 zip)를 페어링하십시오 [[1, 3], [3, 1], [3.2, 3.2], [2.3, 2.6]].

  • 각 쌍을 살펴보고 위의 프로세스를 적용하십시오 [3, 3, 6.4, 2.6].


명세서

  • 배열 / 목록의 길이는 항상 같습니다. 그러나 비어있을 수 있습니다.

  • 그들이 포함하는 숫자는 당신이 그것을 남용하지 않는 한, 당신의 언어 능력에 항상 맞을 것입니다. 그들은 양수, 제로 또는 음수 일 수 있습니다. 모든 유형을 처리해야합니다.

  • 바이트 수를 줄이는 데 도움이 되는 경우 목록의 길이를 입력으로 사용할 수도 있습니다.

규칙


테스트 사례

Array_1, Array_2-> 출력

[], []-> []
[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]

당신은 숫자가 항상 "언어의 능력 내"에 맞을 것이라고 말한다. "학대"하지 않는 한, 수레가없는 언어의 정수만 지원하는 것은 남용으로 간주 될까? 그러나 나는 그것이 부동 소수점이어야하는 이유를 보지 못합니다. 정수에서 동일한 프로세스를 수행 할 수 있습니다 Brain-Flak 에서이 문제를 해결하고 싶지만 Brain-flak는 정수를 지원합니다.
Wheat Wizard

@WheatWizard 예외를 만들 수 있습니다. 계속해서 답변을 게시하고 혼란을 피할 수 있다고 언급했습니다.

답변:


8

젤리, 4 바이트

=‘×»

온라인으로 사용해보십시오!

이것은 젤리가 숫자에 1을 더하기위한 내장 기능이 있다는 것을 제외하고 는 내 APL 답변 과 똑같은 접근법을 사용합니다 !


스포일 스포츠가 싫지만, 어떤 문자는 현명한 인코딩에서 각각 1 바이트 이상이 아닙니까?
Cedric Knight 1

이것은 젤리 코드 페이지를 사용합니다 .
Zacharý

나는 마침내 경쟁에서 이겼다!
Zacharý

2
@ Zacharý ONE MAN, 4 btytes ...이 여름 ... 당신 ... WILL ... BE ... JELLY OF HIM ... Jelly 등급 J입니다 .
Magic Octopus Urn

11

코 틀린, 78 75 71 66 65 59 바이트

내 첫 번째 시도, 멋지다 : D

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

TIO는이 솔루션에서 작동하지 않으며 (및 이유를 모르겠습니다) 아래 테스트 소스 코드

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("")
}

편집하다:

"a + b [i]"를 "a * 2"로 바꾸면 -3

"mapIndexed"메소드를 "zip"으로 바꾸면 -4 (@AnonymousReality Swift 솔루션 덕분)

조건에 따라 "Math.max"방법을 대체하여 -5

조건 순서 변경시 -1

toList ()에 의해 FloatArray ()로 변경하여 -6


10
PPCG에 오신 것을 환영합니다! 다운 보트에 낙심하지 마십시오 (새로운 사용자의 첫 번째 게시물이 품질을 위해 자동 플래 깅 된 다음 게시물을 개선 할 때 발생하는 시스템에 약간의 문제가 생깁니다.)
Jonathan Allan

2
최악의 "기능"은 ... 나쁘지 않습니다.
Outgolfer Erik

10

파이썬 2 , 45 바이트

내 초기 솔루션과 @ovs ' 의 혼합 .

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

온라인으로 사용해보십시오!

파이썬 2 , 49 바이트

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

온라인으로 사용해보십시오!

파이썬 2 , 46 바이트

@ovs 는이 방법을 제안하여 3 바이트를 절약했습니다.

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

온라인으로 사용해보십시오!


어떻게?

먼저 *또는 중 하나를 사용하여 해당 요소를 페어링합니다 zip(). 이를 통해지도 또는 목록 이해력으로 작업하여 추가 골프를 할 수 있습니다.

이 답변의 멋진 요령은이 부분 max(x,y)*-~(x==y)입니다. 어떻게 작동합니까? -대부분의 아시다시피, 파이썬은 부울 값을 산술 연산에 사용될 때 정수로 자동 변환합니다. 따라서 조건이 충족 (x==y)되면로 평가됩니다 1. 그러나 두 값이 같지 않으면 0대신 반환 됩니다. 그런 다음, 비트 연산의 -~단위는 값으로 부울에서 반환 1하거나 우리를주고, 2또는 1. max(a,b)쌍의 최대 값을 제공하고 *위에 리턴 된 값을 곱합니다 (따라서 2동일한 경우에만 곱함 ,이 경우 max()둘 다의 값을 리턴 함).

이것은 두 개의 동일한 숫자의 합이 실제로 두 배가되고, 파이썬의 부울 클래스가 int의 서브 클래스 인 "거품"이라는 사실에 근거합니다.


와, 정말 빨랐어 요!

더 간단하고 동일한 바이트 수 :lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
jferard

@ jferard 사실, 그것은 이미 Luis의 솔루션입니다.
Mr. Xcoder

@ Mr.Xcoder 죄송합니다! 나는 전체 페이지를 읽지 못했습니다 ...
jferard

주문이 변경 될 수 있으므로 "위"라고 말하지 마십시오 (위의 솔루션은 보이지 않습니다)
Zacharý

8

자바 스크립트 (ES6), 53 49 45 43 바이트

a=>b=>a.map((x,y)=>(y=b[y])>x?y:y<x?x:x+y)
  • Mr. Xcoder의 트릭을 빌려 4 바이트가 절약되었습니다.
  • Arnauld 덕분에 2 바이트가 절약되었습니다.

시도 해봐

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>


설명

a=>b=>

익명 함수 매개 변수를 통해 인수로 두 배열을 복용 a하고 b, 즉, 호출 (구문을 무두질에,f(a)(b)

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

첫 번째 배열에 맵핑 x하여 현재 요소와 y현재 색인 인 함수를 통해 각 요소를 전달 하십시오.

(y=b[y])

y두 번째 배열의 인덱스 에 있는 요소를 가져 와서 새 값으로 할당하십시오 y.

>x?y

y보다 큰지 확인 x하고, 더 큰 경우를 반환하십시오 y.

:y<x?x

그 밖에, 체크하면 y미만이며 x, 반환하고, 만약 그렇다면x

:x+y

그렇지 않으면 x및 의 합을 구하십시오 y. ( 동일한 바이트 수에 대해 x또는 y2를 곱해 도 여기에서 작동합니다.)


j.value.split`,`.map(eval)또는 eval('['+j.value+']')? 또한 x+yIMHO가 더 깔끔해 보일 것입니다.
Neil

@ Neil : 1) 전자가 입력하기가 쉽다는 것을 알았습니다. 또한 내 컴퓨터 중 하나에 두 개의 Snippet 템플릿이 있습니다. .map(eval)그들 에게 붙이는 것이 더 쉽습니다 . 2) 동의하며 잠시 후 편집합니다.
Shaggy


7

R , 31 29 바이트

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

pmax 두 개 이상의 어레이의 병렬 최대 값을 가져옵니다 (필요에 따라 더 짧게 재활용).

나는 Luis Mendo의 의견 을보고 있었고 분명히 R에 대해서도 접근 방식이 효과적이라는 것을 깨달았습니다. 30 바이트로 저를 얻었으나, 나는 내 원래 대답을 개선하기 위해 대신 인덱스를 얻기의 다른 방법으로 주위를 연주하기 시작하고, 우연히 그 !a-b와 같은 TRUEa==bFALSE에, 그렇지 않으면 해당 a==b. 그러나 어떤 이유로 든 R은와 !a-b같이 괄호를 필요로하지 않으므로 a==b2 바이트가 절약되었습니다.

주석에서 JDL이 언급했듯이 !(음수)는 -R 의 이진 연산자보다 우선 순위가 낮기 때문에 작동합니다 .

온라인으로 사용해보십시오! (새로운 버전)

온라인으로 사용해보십시오! (기발한)


그 단항 "!" 이진 "-"보다 R에서 우선 순위가 낮습니다. 이는 매우 이례적이라고 생각합니다 (이 답변을 읽을 때까지 깨닫지 못했습니다!)
JDL

@ JDL 네, 이런 이상한 문제가 발생했을 때 골프를 치는 동안 거의 항상 R 구문 페이지를 열어야합니다 ... 또한 :산술과 상호 작용할 때 의 우선 순위를 기억할 수 없기 때문 입니다.
주세페


6

Dyalog APL, 5 바이트

⌈×1+=

온라인으로 사용해보십시오!

어떻게?

  • , 요소 별 최대 인수
  • ×, 요소 별 곱셈
  • 1+=, 1 인수의 요소 별 같음에 추가

숫자가 동일하지 않은 경우, 때문에이 작동 1+=될 것입니다 1최대 곱하면, 최대이다. 숫자가 같으면1+=2 최대 값을 곱한 값을 반환 하여 최대 값의 두 배 또는 최대 값을 얻습니다.


5

젤리 , 6 바이트

żSṀE?€

각 측면의 숫자 목록을 가져와 결과 목록을 반환하는 2 진 링크.

온라인으로 사용해보십시오! 또는 참조 테스트 슈트 *를 .

어떻게?

ż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]

다른 방법으로는이 모나 딕 링크 가 두 목록의 목록 ( 6 바이트)을 가져 오는 것입니다 .

+»⁼?"/

* 테스트 바이트 바닥 글을 코드 바이트 수의 거의 3 배로 만든 적이 없다고 생각합니다!


아웃 고 프드! . 질문에 대한 실질적인 구두 해석으로 +1
Zacharý

... 그리고 나는 그 »벡터를 전에 잊어 버렸습니다 .
Jonathan Allan

다른 방법으로 최대 배열을 복잡한 방식으로 가져 가겠습니까?
Zacharý

복잡한 정의가 필요 max([1,1,0],[1,0,3]) -> [1,1,0]하지 않으므로 Python은 ( 예 : 아님 [1,1,3]) 관리합니다 .
Jonathan Allan

기본적으로 무한대?
Zacharý

5

05AB1E , 5 바이트

øεMÃO

온라인으로 사용해보십시오!

Emigna 에게 -1 감사합니다 .


사용하여 좋은 아이디어 γ!
Emigna

@Emigna 난 정말 "최대 요소"를 원했고 {γθ아마도 내가 얻을 수있는 가장 짧은 것입니다.
Outgolfer Erik

어때요 øεMÃO?
Emigna

@Emigna Cool 감사합니다! (내가 생각하지 않은 이유 대만족 ) 지금 리드를 가지고 야호 : p는 BTW øεZÃO도 작동합니다
에릭에게 Outgolfer

4

MATL , 7 바이트

X>tG=s*

입력은 2 행 행렬로, 각 행은 배열 중 하나입니다.

온라인으로 사용해보십시오!

설명

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

자바 8, 80 69 67 66 65 64 63 바이트

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

대신 두 번째 입력 배열을 수정하거나 새 float 배열을 반환하여 바이트를 저장합니다.

챌린지 규칙에 따라 허용되는 추가 정수 입력으로 길이를 가져 와서 -11 바이트.
-5 덕분 바이트 @ OliverGrégoire (한 번에 하나의 xD .. 바이트)
-1 바이트 간접적 확실히 @Shaggy 의 JS 응답 하여, a[l]*2대신a[l]+b[l] .

설명:

여기에서 시도하십시오.

(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
"바이트 수를 줄이는 데 도움이되면 목록의 길이를 입력으로 사용할 수도 있습니다." 바이트 수를 확실히 줄입니다.)
Olivier Grégoire

1
또한 2 바이트가 짧습니다.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

그리고 당신은 넣어 한 번 더 바이트를 저장할 수 있습니다 float A, Bfor초기화.
Olivier Grégoire

1
또는 이것 : (a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}(63 바이트)
Olivier Grégoire

3
@ OlivierGrégoire Lol .. 1 바이트마다 골프를 치는 것이 도움이되지만, 한 번에 1 바이트 씩 골프를 쳐야하는 것은 아닙니다. ; p
Kevin Cruijssen


3

05AB1E , 9 8 7 바이트

Outgolfer Erik이 목록 목록이 유효한 입력 임을 지적하면서 바이트를 저장했습니다 .

øεMsËi·

온라인으로 사용해보십시오!

설명

ø          # 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

와, 정말 빨랐어 요!

를 제거하고 목록과 목록의 쌍으로 입력 하여 바이트를 저장할 수 있습니다 .
Outgolfer Erik

@EriktheOutgolfer : 맞습니다. 나는 우리가 허락되지 않았다고 생각했지만, 도전이 표준 I / O 규칙을 지정한다는 것을 알았습니다.
알려

1
@Emigna Tip : 마음에서 규칙을 만들지 마라;)
Outgolfer Erik

1
@EriktheOutgolfer : 그래, 난 그만 멈춰야 해. 특히 내 프로그램을 더 길게 만드는 규칙;)
Emigna


3

J, 7 바이트

>.`+@.=

온라인으로 사용해보십시오!

한 목록은 왼쪽 인수로, 다른 목록은 오른쪽 인수로 사용합니다.

다행히 평등은 랭크 제로 연산입니다.

설명

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

@.아닌 정말 if 문하지만이 경우에는 한 (동명사로 지수 함수로 >.`+오른쪽 인수의 결과를 기초로하고 그 입력에 적용).


잘 했어, 내 APL 번역 으로 당신을 능가 했지만, 나는 이것을 할 수 없다는 것을 안다 . > _ <
Zacharý

J 정말 여기에 빛난다
Jonah

그럼에도 불구하고 @ Zacharý 쥐.
Cole


3

TI 기본, 23 21 바이트

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

너무 나쁜 목록은 각각 2 바이트를 차지합니다 ...


당신은에 대한 프롬프트에 의해 2 바이트를 저장할 수 있습니다 XY다음 사용 ʟXʟY"즉, 그들에게 접근 Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2".
Scott Milner

또한 목록에서 L1(L1=L2)요소를 가져 오려고 시도 L1하면 오류가 발생 하므로 현재 유효하지 않습니다 . 이를 해결하려면 순서를 바꾸십시오 (예 :) (L1=L2)L1.
Scott Milner

@ScottMilner이 두 가지를 지적 해 주셔서 감사합니다.
Timtech



2

파이썬 3 , 49 46 45 바이트

@ Mr.Xcoder로 인해 3 바이트가 제거되고 (두 개의 인수 대신 표시) @ovs로 인해 1 바이트가 제거됨 (목록 이해 대신 맵)

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

온라인으로 사용해보십시오!


1
46 바이트 : lambda*c:[a*(a>=b)+b*(b>=a)for a,b in zip(*c)]. 이것도 꽤 좋은 것으로 밝혀졌습니다 :)-너무 나빠서 더 이상 골프장을 열 곳이 없습니다
Mr. Xcoder

@ Mr.Xcoder 감사합니다! 좋은 생각!
Luis Mendo

zip 대신 map을 사용하여 45 바이트
ovs

2

일반적인 Lisp, 60 59 바이트

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

온라인으로 사용해보십시오!

@ Zacharý 덕분에 -1 바이트!


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

당신은 환영합니다, 나는 lisp를 잘 모르겠습니다. 나는 다른 답변을 Lisp로 번역하여 바이트를 절약했습니다.
Zacharý

2

numpy, 28 바이트의 Python

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

입력이 두 개의 numpy 배열로 주어진다고 가정합니다.


우리가 numpy를 사용하는 경우 여기에 더 나쁜 해결책이 있습니다.lambda a,b:n.fmax(a,b)*((a==b)+1)
Erich

@Erich 아이디어가 마음에 들지만, 그렇게하려면 import numpy as n. 입력에 내재되어 있기 때문에 여기에서 빠져 나옵니다.

나는 명시 적 바이트 계산에 약간 흔들리는 것 같아요. 대답에 실제 구현을 위해 무언가를 할당해야 할 때 종종 파이썬 답변은 단순히 람다입니다. 이런 이유로 암시 적 import 문으로도 벗어날 수 있는지 궁금합니다.
Erich

@Erich 일반적으로 코드에서 n정의한 경우 에만 변수를 참조 할 수 n있으므로 가져 오기는 명시 적이어야합니다. 기본적으로 익명 함수를 포함한 함수 또는 전체 프로그램 을 답변으로 사용할 수 있습니다.

1
글쎄, 이것은 importing 대신 numpy 배열로만 입력하면됩니다 numpy. 그러나 이것을 사용하지 않고도 작동 return합니까?
Zacharý

2

Linq 47 + 18 = 65 바이트를 사용하는 C # (. NET Core)

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

온라인으로 사용해보십시오!

C # (. NET 코어), 82 바이트

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;}

온라인으로 사용해보십시오!



@ jkelm 예, 'using system;`이 포함되는지 아닌지 궁금합니다. 정리하겠습니다
Dennis.Verweij

System.Linq는 "Visual C # Interactive Compiler"에 포함되어 있습니다. 나는 복귀에 대해 완전히 확실하지 않다 ArrayIListIEnumerable,하지만 모두가 자격이 있는지 당신은 37 바이트 수를 얻을 수 있습니다 - tio.run/##Sy7WTS7O/...
다나


1

스위프트 3, 81 79 바이트

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

Swift는 Int를로 직접 캐스트 할 수 없다는 흥미로운 속성 Double을 가지고 있으므로 배열을 배열로 지정해야합니다.Double 함수로 전달하기 전에 s .

(예) var k:[Double] = [1,2,3,4,5,5,7,8,9,10]

편집 : @EriktheOutgolfer 덕분에 -2 바이트


당신이 주변에 공간이 필요하십니까 (x,y)및 전 ??
Outgolfer Erik

@EriktheOutgolfer ?Swift가 그것들을 삼항 대신에 선택적 타입으로 취급하기 때문에 이전의 것이 필요합니다. 다른 사람들은 그렇지 않습니다. 그 외에도, 이것은 엄청나게 골프를 칠 수 있습니다.

@EriktheOutgolfer-TheIOSCoder가 이미 부분적으로 대답했지만, 맞습니다 .for 루프에있는 것이 필요하지 않습니다. 흥미로운!
AnonymousReality

73 바이트 : func n(a:[Float],b:[Float]){print(zip(a,b).map{$0==$1 ?2*$0:max($0,$1)})}(기본적으로 부동 소수점 부정확성을 처리 할 필요가 없음)
Mr. Xcoder

또는 74 바이트 : func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
Mr. Xcoder



1

, 107 97 바이트

|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>;

온라인으로 사용해보십시오!

@mgc 덕분에 8 바이트 절약


1
수집 된 형식 유추 Vec와 s 의 max방법을 사용 하여 8 바이트를 절약 할 수 있습니다 f32.|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 감사합니다! 타입 추론은 좋은 생각이지만이 경우 타입 별칭은 훨씬 짧습니다.
jferard

1

스위프트 4 , 41 바이트

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

테스트 사례 :

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!")
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.