Sie erhalten zwei Arrays mit Gleitkommazahlen. Ihre Aufgabe ist es, die entsprechenden Elemente der beiden Arrays zu paaren und das Maximum jedes Paares zu erhalten. Allerdings , wenn die beiden entsprechenden Elemente gleich sind, müssen Sie ihre Summe nehmen statt.
In Anbetracht der Listen [1, 3, 3.2, 2.3]
und [3, 1, 3.2, 2.6]
müssen Sie beispielsweise Folgendes tun:
Koppeln Sie die Elemente (oder zip):
[[1, 3], [3, 1], [3.2, 3.2], [2.3, 2.6]]
.Gehen Sie durch jedes Paar und wenden das Verfahren oben:
[3, 3, 6.4, 2.6]
.
Technische Daten
Die Arrays / Listen sind immer gleich lang. Sie können jedoch leer sein.
Die Zahlen, die sie enthalten, passen immer zu den Fähigkeiten Ihrer Sprache, solange Sie das nicht missbrauchen. Sie können positiv, null oder negativ sein. Sie müssen alle Typen behandeln.
Wenn es hilft Ihnen , Ihre Byteanzahl reduzieren, Sie können auch die Länge der Listen als Eingabe.
Regeln
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
- Es gelten die Standard-Ein- und Ausgaberegeln . Sie können Eingaben (und Ausgaben) in jedem vernünftigen Format vornehmen.
- Standardlücken sind verboten.
Testfälle
Array_1, Array_2 -> Ausgabe [], [] -> [] [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]
Antworten:
Gelee, 4 Bytes
Probieren Sie es online!
Dies verwendet genau den gleichen Ansatz wie meine APL-Antwort , mit der Ausnahme, dass Jelly einen integrierten Ansatz zum Hinzufügen von Eins zu einer Zahl hat!
quelle
Kotlin,
787571666559 BytesEs ist mein erster Versuch, sei cool: D
TIO funktioniert nicht mit dieser Lösung (und ich weiß nicht warum), Quellcode zum Testen weiter unten
BEARBEITEN:
-3 durch "a + b [i]" durch "a * 2" ersetzen
-4 durch "mapIndexed" -Methode durch "zip" ersetzen (Dank der @AnonymousReality Swift-Lösung)
-5 durch Ersetzen der "Math.max" -Methode durch when-Bedingung
-1 bei Änderung der Bedingungsreihenfolge
-6 von change toFloatArray () von toList ()
quelle
Python 2 , 45 Bytes
Eine Mischung aus meiner anfänglichen Lösung und @ovs ' .
Probieren Sie es online!
Python 2 , 49 Bytes
Probieren Sie es online!
Python 2 , 46 Bytes
@ovs schlug diese Methode vor, um 3 Bytes zu sparen.
Probieren Sie es online!
Wie?
Zuerst paaren wir die entsprechenden Elemente, indem wir entweder
*
oder verwendenzip()
. So können wir weiter Golf spielen, indem wir entweder mit einer Karte oder einem Listenverständnis arbeiten.Der kühle Trick in dieser Antwort ist dieser Teil:
max(x,y)*-~(x==y)
. Wie funktioniert das? - Nun, wie die meisten von Ihnen bereits wissen, konvertiert Python Bool-Werte automatisch in Ganzzahlen, wenn sie in arithmetischen Operationen verwendet werden. Daher(x==y)
wird ausgewertet1
, ob die Bedingung erfüllt ist. Wenn die beiden Werte jedoch nicht gleich sind, wird0
stattdessen zurückgegeben. Dann-~
erhöht die bitweise Operation den vom Bool zurückgegebenen Wert um1
und gibt entweder2
oder an1
.max(a,b)
gibt den Maximalwert des Paares an und*
multipliziert ihn mit dem oben zurückgegebenen Wert (wird also2
nur dann multipliziert, wenn sie gleich sind. In diesem Fall wirdmax()
der Wert von beiden zurückgegeben).Dies basiert auf der Tatsache, dass die Summe von zwei gleichen Zahlen in der Tat jeweils verdoppelt wird und die Bool-Klasse von Python eine Art "Missbrauch" darstellt, die eine Unterklasse von int ist.
quelle
lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
JavaScript (ES6),
53494543 ByteVersuch es
Erläuterung
Anonyme Funktion, die die 2 Arrays als Argumente über Parameter
a
undb
in der aktuellen Syntax (dh Aufruf mitf(a)(b)
Ordnen Sie das erste Array zu, indem Sie jedes Element durch eine Funktion führen, bei der
x
es sich um das aktuelle Element undy
den aktuellen Index handelt.Rufen Sie das Element am Index
y
im zweiten Array ab und weisen Sie es als neuen Wert von zuy
.Prüfen Sie, ob
y
größer ist alsx
und geben Sie gegebenenfalls zurücky
.Andernfalls prüfen Sie, ob
y
kleiner alsx
und kehren Sie gegebenenfalls zurückx
Anderenfalls geben Sie die Summe von
x
und zurücky
. (Multiplizierenx
odery
mit 2 würde auch hier für die gleiche Anzahl von Bytes funktionieren.)quelle
j.value.split`,`.map(eval)
odereval('['+j.value+']')
? Auchx+y
würde sehen einfach besser IMHO..map(eval)
. 2) Einverstanden, wird vorübergehend bearbeitet.Haskell, 34 Bytes
Probieren Sie es online aus.
quelle
x!y=max x y+sum[x|x==y]
.R ,
3129 Bytespmax
Nimmt das parallele Maximum der zwei (oder mehr) Arrays (Recycling der kürzeren je nach Bedarf).Ich habe mir Luis Mendos Kommentar angesehen und festgestellt, dass der Ansatz auch für R funktionieren kann. Das hat mich zu 30 Bytes, aber dann begann ich mit verschiedenen Wegen, um Indizes zu spielen um stattdessen meine ursprüngliche Antwort zu verbessern, und eher zufällig auf ,
!a-b
wie ,TRUE
woa==b
undFALSE
ansonsten entsprechena==b
. Doch aus irgendeinem Grund hat R keine Klammern benötigt um ,!a-b
wie es tut , füra==b
, die mir zwei Bytes gespeichert.Wie von JDL in den Kommentaren erwähnt , funktioniert dies, weil
!
(Negation) eine niedrigere Priorität hat als der Binäroperator-
in R, was seltsam ist.Probieren Sie es online! (neue Version)
Probieren Sie es online! (Original)
quelle
:
.Python 3 ,
484644 Bytes-2 Bytes dank @nwellnhof
Probieren Sie es online!
quelle
Dyalog APL, 5 Bytes
Probieren Sie es online!
Wie?
⌈
Elementweise Maximum der Argumente×
elementweise multiplizieren1+=
, 1 zur elementweisen Gleichheit der Argumente hinzugefügtDies funktioniert, weil, wenn die Zahlen ungleich sind,
1+=
dies1
, wenn es mit dem Maximum multipliziert wird, das Maximum ist. Wenn die Zahlen gleich sind,1+=
wird zurückgegeben2
, wenn dies mit dem Maximum multipliziert wird, erhalten wir das Doppelte des Maximums oder das Maximum, das zu sich selbst addiert wird.quelle
Gelee , 6 Bytes
Ein dyadischer Link, der eine Liste von Zahlen auf jeder Seite aufnimmt und die resultierende Liste zurückgibt.
Probieren Sie es online! oder sehen Sie sich eine Testsuite * an.
Wie?
Eine Alternative ist dieser monadische Link , der eine Liste der beiden Listen mit ebenfalls 6 Bytes erstellt :
* Ich glaube nicht, dass ich jemals eine Fußzeile für eine Testsuite erstellt habe, die fast dreimal so viele Bytes enthält wie der Code zuvor!
quelle
»
Vektorisierungen vorher vergessen habe!max([1,1,0],[1,0,3]) -> [1,1,0]
(nicht[1,1,3]
).05AB1E , 5 Bytes
Probieren Sie es online!
-1 danke an Emigna .
quelle
γ
!{γθ
ist wahrscheinlich die kürzeste, die ich dafür bekommen kann.øεMÃO
?MÃ
?) Du hast jetzt die Führung: ÜbrigensøεZÃO
würde das auch funktionierenMATL , 7 Bytes
Die Eingabe ist eine Matrix mit zwei Zeilen, wobei jede Zeile eines der Arrays ist.
Probieren Sie es online!
Erläuterung
quelle
Java 8,
80696766656463 BytesÄndert stattdessen das zweite Eingabearray oder gibt ein neues Float-Array zurück, um Bytes zu sparen.
-11 Bytes, indem die Länge als zusätzliche Ganzzahleingabe verwendet wird, die gemäß den Herausforderungsregeln zulässig ist.
-5 Bytes dank @ OliverGrégoire (ein Byte zu einem Zeitpunkt .. xD)
-1 Byte indirekt dank @Shaggy ‚s JS Antwort , durch die Verwendung
a[l]*2
statta[l]+b[l]
.Erläuterung:
Probieren Sie es hier aus.
quelle
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
diefor
Initialisierung eingeben.(a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}
(63 Bytes)Pyth , 11 Bytes
Probieren Sie es hier aus!
Pyth , 12 Bytes
Probieren Sie es hier aus!
oder
Probieren Sie es hier aus!
quelle
05AB1E ,
987 BytesEin Byte gespeichert, als Erik der Outgolfer darauf hinwies, dass eine Liste von Listen eine gültige Eingabe ist.
Probieren Sie es online!
Erläuterung
quelle
‚
und als Paar aus einer Liste und einer Liste eingeben.Mathematica, 31 Bytes
quelle
J, 7 Bytes
Probieren Sie es online!
Nimmt eine Liste als linkes Argument und die andere als rechtes.
Glücklicherweise ist Gleichheit eine Operation mit Rang Null.
Erläuterung
@.
Ist nicht wirklich eine if-Anweisung, funktioniert aber in diesem Fall als eine (sie indiziert das Gerundium>.`+
auf der Grundlage des Ergebnisses ihres richtigen Arguments und wendet dieses auf die Eingabe an).quelle
Ruby , 42 Bytes
Probieren Sie es online!
Der Raumschiff-Operator ist großartig.
quelle
TI-Basic,
2321 BytesSchade, dass Listen jeweils zwei Bytes belegen ...
quelle
X
und fragen undY
dannʟX
und verwenden,ʟY
um darauf zuzugreifen, dh "Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2
".L1(L1=L2)
versucht wird, das ElementL1
einer Liste abzurufen, was einen Fehler auslöst. Um dies zu beheben, tauschen Sie die Reihenfolge aus, dh(L1=L2)L1
.Oktave, 36 Byte
quelle
@(a,b)max(a,b).*(1+(a==b))
@(a,b)a.*(a>=b)+b.*(b>=a)
Pyth, 7 Bytes
Probieren Sie es hier aus.
quelle
Python 3 ,
494645 Bytes3 Bytes entfernt dank @ Mr.Xcoder (splat statt zwei Argumente) und 1 Byte dank @ovs (map statt Listenverständnis)
Probieren Sie es online!
quelle
lambda*c:[a*(a>=b)+b*(b>=a)for a,b in zip(*c)]
. Es stellt sich heraus, dass dies auch ganz gut ist :) - Schade, dass es keinen Platz für weiteres Golfen gibtCommon Lisp,
6059 BytesProbieren Sie es online!
-1 Byte danke an @ Zacharý!
quelle
(mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read))
.Python mit Numpy, 28 Bytes
Angenommen, die Eingabe erfolgt als zwei numpy-Arrays.
quelle
lambda a,b:n.fmax(a,b)*((a==b)+1)
import numpy as n
. Ich komme hier ohne davon, weil es in der Eingabe impliziert ist.n
wenn Sie sien
in Ihrem Code definiert haben. Daher müssen Importe explizit erfolgen. Standardmäßig erlauben wir Funktionen oder vollständige Programme als Antworten, einschließlich anonymer Funktionen.numpy
. Aber geht das überhaupt ohne Verwendungreturn
?C # (.NET Core) unter Verwendung von Linq 47 + 18 = 65 Byte
Probieren Sie es online!
C # (.NET Core), 82 Byte
Probieren Sie es online!
quelle
Array
vsIList
vs zurückgeben sollIEnumerable
, aber wenn alle berechtigt sind, können Sie die ByteanzahlPerl 6 ,
3428 BytesProbieren Sie es online!
quelle
Swift 3,
8179 BytesSwift hat eine interessante Eigenschaft, die darin besteht, dass ein Int nicht direkt in ein umgewandelt
Double
werden kann. Daher müssen Sie alle Arrays als Arrays vonDouble
s angeben, bevor Sie sie an die Funktion übergeben.(z.B)
var k:[Double] = [1,2,3,4,5,5,7,8,9,10]
Edit: -2 Bytes dank @EriktheOutgolfer
quelle
(x,y)
und vor?
??
wird benötigt, da Swift sie als optionale Typen anstelle von Ternären (was sie nicht sind) behandelt. Die anderen sind es nicht. Abgesehen davon kann dies drastisch golfen werden.func n(a:[Float],b:[Float]){print(zip(a,b).map{$0==$1 ?2*$0:max($0,$1)})}
(die Float-Ungenauigkeiten müssen nicht standardmäßig behandelt werden)func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
C
7675 BytesVielen Dank an @Kevin Cruijssen für das Speichern eines Bytes!
Probieren Sie es online!
quelle
Japt , 13 Bytes
Probieren Sie es online! mit dem
-Q
Flag, um das Ausgabearray zu formatieren.quelle
í
könnte eine Funktion als zweites Argument nehmen.Rust ,
10797 BytesProbieren Sie es online!
8 Bytes dank @mgc eingespart
quelle
Vec
und diemax
Methode vonf32
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<_>>();
Schnelle 4 , 41 Bytes
Testfälle:
quelle