Otrzymasz dwie tablice liczb zmiennoprzecinkowych. Twoim zadaniem jest sparowanie odpowiednich elementów dwóch tablic i uzyskanie maksimum każdej pary. Jednakże , jeśli dwa odpowiednie elementy są równe, trzeba wziąć ich sumę w zamian.
Na przykład, biorąc pod uwagę listy [1, 3, 3.2, 2.3]
i [3, 1, 3.2, 2.6]
, musisz wykonać następujące czynności:
Powiązać elementy (lub ZIP):
[[1, 3], [3, 1], [3.2, 3.2], [2.3, 2.6]]
.Przejść przez każdą parą i zastosować proces powyżej:
[3, 3, 6.4, 2.6]
.
Okular
Tablice / listy zawsze będą miały równą długość. Mogą być jednak puste.
Zawarte w nich liczby zawsze będą pasować do możliwości Twojego języka, o ile tego nie wykorzystasz. Mogą być dodatnie, zerowe lub ujemne, musisz obsługiwać wszystkie typy.
Jeśli to pomaga zmniejszyć liczbę bajtów, to może również przyjąć długość list jako wejście.
Zasady
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
- Obowiązują standardowe reguły wejścia i wyjścia . Możesz pobierać dane wejściowe (i wyjściowe) w dowolnym rozsądnym formacie.
- Domyślne luki są zabronione.
Przypadki testowe
Array_1, Array_2 -> Dane wyjściowe [], [] -> [] [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,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]
Odpowiedzi:
Galaretka, 4 bajty
Wypróbuj online!
To używa dokładnie tego samego podejścia, co moja odpowiedź APL , z tym że Jelly ma wbudowane dodawanie jednego do liczby!
źródło
Kotlin,
787571666559 bajtówTo moja pierwsza próba, bądź spokojny: D
TIO nie działa z tym rozwiązaniem (i nie wiem dlaczego), kod źródłowy do testowania poniżej
EDYTOWAĆ:
-3 przez „a + b [i]” na „a * 2”
-4 przez zastąpienie metody „mapIndexed” przez „zip” (dzięki rozwiązaniu @AnonymousReality Swift)
-5 przez zastąpienie metody „Math.max” przez kiedy warunek
-1 przez zmianę przy zamówieniu warunku
-6 przez zmianę toFloatArray () przez toList ()
źródło
Python 2 , 45 bajtów
Mieszanka mojego początkowego rozwiązania i @ovs .
Wypróbuj online!
Python 2 , 49 bajtów
Wypróbuj online!
Python 2 , 46 bajtów
@ovs zaproponował tę metodę, aby zaoszczędzić 3 bajty.
Wypróbuj online!
W jaki sposób?
Po pierwsze, łączymy odpowiednie elementy za pomocą
*
lubzip()
. To pozwala nam dalej grać w golfa, pracując z mapą lub listą.Fajne sztuczki w tej odpowiedzi jest to część:
max(x,y)*-~(x==y)
. Jak to działa? - Cóż, jak większość z was już wie, Python automatycznie konwertuje wartości bool na liczby całkowite, gdy są używane w operacjach arytmetycznych. Stąd(x==y)
jest oceniany jako1
, jeśli warunek jest spełniony. Jeśli jednak dwie wartości nie są równe, zwraca wartość0
. Następnie operacji bitowej-~
przyrosty wartość zwracana z bool przez1
, dając nam albo2
albo1
.max(a,b)
daje maksymalną wartość pary i*
mnoży ją przez wartość zwróconą powyżej (więc zostaje pomnożona2
tylko wtedy, gdy są równe, w którym to przypadkumax()
zwraca wartość obu).Opiera się to na tym, że suma dwóch równych liczb jest w rzeczywistości podwojona, a rodzaj „nadużycia” klasy bool Pythona jest podklasą int.
źródło
lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
JavaScript (ES6),
53494543 bajtówSpróbuj
Wyjaśnienie
Anonimowa funkcja przyjmująca 2 tablice jako argumenty za pomocą parametrów
a
orazb
w składni curry (tj. Wywołuje za pomocąf(a)(b)
Odwzoruj na pierwszej tablicy, przepuszczając każdy element przez funkcję, w której
x
jest bieżącym elementem iy
bieżącym indeksem.Uzyskaj element o indeksie
y
w drugiej tablicy i przypisz go jako nową wartośćy
.Sprawdź, czy
y
jest większy niż,x
a jeśli tak, zwróćy
.W przeciwnym razie sprawdź, czy
y
jest mniejszy,x
a jeśli tak, wróćx
W przeciwnym razie zwróć sumę
x
iy
. (Mnożeniex
luby
przez 2 również by działało tutaj, dla tej samej liczby bajtów.)źródło
j.value.split`,`.map(eval)
czyeval('['+j.value+']')
? Równieżx+y
wyglądałby ładniej IMHO..map(eval)
. 2) Uzgodnione, za chwilę dokonam edycji.Haskell, 34 bajty
Wypróbuj online.
źródło
x!y=max x y+sum[x|x==y]
.R ,
3129 bajtówpmax
przyjmuje równoległe maksimum z dwóch (lub więcej) tablic (recykling krótszy w razie potrzeby).Szukałem w komentarzu Luis Mendo za i oczywiście ja sobie sprawę, że podejście może pracować dla R, jak również. Że mnie do 30 bajtów, ale potem zacząłem zabawy z różnych sposobów na uzyskanie wskaźników zamiast poprawić mój oryginalny odpowiedź, i natknęliśmy się
!a-b
jakTRUE
, gdziea==b
iFALSE
inaczej, równoważnea==b
. Jednak z jakiegokolwiek powodu R nie wymaga nawiasów wokół,!a-b
jak to robia==b
, co pozwoliło mi zaoszczędzić dwa bajty.Jak wspomniano w komentarzach JDL , działa to, ponieważ
!
(negacja) ma niższy priorytet niż operator binarny-
w R, co jest dziwne.Wypróbuj online! (Nowa wersja)
Wypróbuj online! (oryginalny)
źródło
:
interakcji z arytmetyką.Python 3 ,
484644 bajtów-2 bajty dzięki @nwellnhof
Wypróbuj online!
źródło
Dyalog APL, 5 bajtów
Wypróbuj online!
W jaki sposób?
⌈
, elementarne maksimum argumentów×
, mnożąc element1+=
, 1 dodane do elementarnej równości argumentówDziała to, ponieważ jeśli liczby są nierówne,
1+=
będzie to1
, które pomnożone przez maksimum, będzie maksimum. Gdy liczby są równe,1+=
wróci2
, gdy pomnożone przez maksimum, otrzymamy dwukrotność maksimum lub maksimum dodane do siebie.źródło
Galaretka , 6 bajtów
Dyadyczny link pobierający listę liczb z każdej strony i zwracający wynikową listę.
Wypróbuj online! lub zobacz pakiet testowy *.
W jaki sposób?
Alternatywą jest monadyczny link zawierający listę dwóch list, również 6 bajtów :
* Nie sądzę, że kiedykolwiek wcześniej tworzyłem stopkę zestawu testów prawie trzy razy większą niż liczba bajtów kodu!
źródło
»
wcześniej zapominam o wektoryzacji!max([1,1,0],[1,0,3]) -> [1,1,0]
(nie[1,1,3]
).05AB1E , 5 bajtów
Wypróbuj online!
-1 dzięki Emignie .
źródło
γ
!{γθ
jest to prawdopodobnie najkrótszy możliwy do tego sposób.øεMÃO
?MÃ
) yay dostał teraz prowadzenie: p btw teżøεZÃO
by działałoMATL , 7 bajtów
Dane wejściowe to macierz dwurzędowa, gdzie każdy wiersz jest jedną z tablic.
Wypróbuj online!
Wyjaśnienie
źródło
Java 8,
80696766656463 bajtyZamiast tego modyfikuje drugą tablicę wejściową lub zwraca nową tablicę zmiennoprzecinkową, aby zapisać bajty.
-11 bajtów, przyjmując długość jako dodatkowe wejście liczb całkowitych, co jest dozwolone zgodnie z regułami wyzwania.
-5 bajty dzięki @ OliverGrégoire (jeden bajt w czasie .. xD)
-1 bajt pośrednio dzięki @Shaggy jest JS odpowiedzi przez zastosowanie
a[l]*2
zamiasta[l]+b[l]
.Wyjaśnienie:
Wypróbuj tutaj.
źródło
a->b->l->{float A,B;for(;l-->0;b[l]=(A=a[l])<B?B:A>B?A:A+B)B=b[l];}
float A, B
wfor
inicjalizacji.(a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}
(63 bajty)Pyth , 11 bajtów
Wypróbuj tutaj!
Pyth , 12 bajtów
Wypróbuj tutaj!
lub
Wypróbuj tutaj!
źródło
05AB1E ,
987 bajtówZapisany bajt, ponieważ Erik the Outgolfer wskazał, że lista list jest poprawnym wejściem.
Wypróbuj online!
Wyjaśnienie
źródło
‚
i wprowadzając jako parę listy i listy.Mathematica, 31 bajtów
źródło
J, 7 bajtów
Wypróbuj online!
Traktuje jedną listę jako lewy argument, a drugą jako prawy.
Na szczęście równość jest operacją na poziomie zero.
Wyjaśnienie
@.
tak naprawdę nie jest instrukcją if, ale w tym przypadku działa jako jedna (indeksuje do gerunda>.`+
na podstawie wyniku jego właściwego argumentu i stosuje to do danych wejściowych).źródło
Rubin , 42 bajty
Wypróbuj online!
Operator statku kosmicznego jest świetny.
źródło
TI-Basic,
2321 bajtówSzkoda, że listy zajmują po dwa bajty ...
źródło
X
iY
, a następnie przy użyciuʟX
iʟY
dostęp do nich, czyli „Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2
”.L1(L1=L2)
próbuje uzyskać element zL1
listy, co powoduje błąd. Aby to naprawić, zamień kolejność, tj(L1=L2)L1
.Oktawa, 36 bajtów
źródło
@(a,b)max(a,b).*(1+(a==b))
@(a,b)a.*(a>=b)+b.*(b>=a)
Pyth, 7 bajtów
Wypróbuj tutaj.
źródło
Python 3 ,
494645 bajtów3 bajty usunięte dzięki @ Mr.Xcoder (ikona zamiast dwóch argumentów) i 1 bajt dzięki @ovs (mapa zamiast zrozumienia listy)
Wypróbuj online!
źródło
lambda*c:[a*(a>=b)+b*(b>=a)for a,b in zip(*c)]
. Okazuje się, że to też jest całkiem dobre :) - Szkoda, że nie ma miejsca na dalsząCommon Lisp,
6059 bajtówWypróbuj online!
-1 bajt dzięki @ Zacharý!
źródło
(mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read))
.Python z numpy, 28 bajtów
Zakłada, że dane wejściowe są podawane jako dwie tablice numpy.
źródło
lambda a,b:n.fmax(a,b)*((a==b)+1)
import numpy as n
. Uciekam tutaj bez niego, ponieważ jest to ukryte w danych wejściowych.n
wtedy, gdy zdefiniowałeśn
w swoim kodzie, więc import musi być jawny. Domyślnie dopuszczamy funkcje lub pełne programy jako odpowiedzi, w tym funkcje anonimowe.numpy
. Ale czy to działa nawet bez użyciareturn
?C # (.NET Core) , używając Linq 47 + 18 = 65 bajtów
Wypróbuj online!
C # (.NET Core), 82 bajty
Wypróbuj online!
źródło
Array
, czy powrócimy przeciwkoIList
vsIEnumerable
, ale jeśli wszystkie są odpowiednie, możesz uzyskać liczbę bajtów na 37 - tio.run/##Sy7WTS7O/…Perl 6 ,
3428 bajtówWypróbuj online!
źródło
Swift 3,
8179 bajtówSwift ma interesującą właściwość polegającą na tym, że Int nie może być bezpośrednio rzucany na a
Double
, więc musisz podać dowolne tablice jako tabliceDouble
s przed przekazaniem ich do funkcji.(na przykład)
var k:[Double] = [1,2,3,4,5,5,7,8,9,10]
Edycja: -2 bajty dzięki @EriktheOutgolfer
źródło
(x,y)
i wcześniej?
??
jest potrzebna, ponieważ Swift traktowałby je jako opcjonalne typy zamiast trójskładników (którymi nie są). Inni nie są. Poza tym można drastycznie grać w golfa.func n(a:[Float],b:[Float]){print(zip(a,b).map{$0==$1 ?2*$0:max($0,$1)})}
(niedokładności typu float nie muszą być domyślnie obsługiwane)func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
DO,
7675 bajtówDzięki @Kevin Cruijssen za uratowanie bajtu!
Wypróbuj online!
źródło
Japt , 13 bajtów
Wypróbuj online! z
-Q
flagą, aby sformatować tablicę wyjściową.źródło
í
mógłbym wziąć funkcję jako drugi argument.Rdza ,
10797 bajtówWypróbuj online!
Zaoszczędź 8 bajtów dzięki @mgc
źródło
Vec
i stosującmax
metodęf32
s:|a:Vec<f32>,b:Vec<f32>|a.iter().zip(b).map(|(&x,y)|if x==y{x+y}else{x.max(y)}).collect::<Vec<_>>();
Swift 4 , 41 bajtów
Przypadki testowe:
źródło