Holen Sie sich das Beste aus zwei Arrays

19

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


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]

quelle
Sie sagen, dass die Zahlen immer "in die" Fähigkeiten "Ihrer Sprache passen. Solange Sie das nicht" missbrauchen ". Würden nur Ganzzahlen in einer Sprache ohne Gleitkommazahl als Missbrauch betrachtet? Die Frage lautet" Gleitkommazahl " Aber ich sehe nicht wirklich einen Grund, warum es Floats sein müssen. Der gleiche Prozess kann mit ganzen Zahlen durchgeführt werden. Ich möchte dies in Brain-Flak lösen, aber Brain-Flak unterstützt nur Ints.
Wheat Wizard
@ WheatWizard Ich kann eine Ausnahme machen. Schreiben Sie Ihre Antwort und erwähnen Sie, dass ich es zugelassen habe, um Verwirrung zu vermeiden.

Antworten:

8

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!

Zacharý
quelle
Ich hasse es, ein Spielverderber zu sein, aber sind einige dieser Zeichen in keiner vernünftigen Codierung mehr als ein Byte groß?
Cedric Knight
Dies verwendet die Jelly-Codepage .
Zacharý
Ich habe endlich gegen die Konkurrenz gewonnen!
Zacharý
2
@ Zachary ONE MAN, 4 btytes ... In diesem Sommer ... Sie ... WILL ... WERDEN ... GELEE VON IHM ... J für Jelly bewertet .
Magic Octopus Urn
11

Kotlin, 78 75 71 66 65 59 Bytes

Es ist mein erster Versuch, sei cool: D

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

TIO funktioniert nicht mit dieser Lösung (und ich weiß nicht warum), Quellcode zum Testen weiter unten

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

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

Valentin Michalak
quelle
10
Willkommen bei PPCG! Bitte lassen Sie sich von der Ablehnung nicht entmutigen (dies ist das Ergebnis einer geringfügigen Beeinträchtigung des Systems, die auftritt, wenn der erste Beitrag eines neuen Benutzers für die Qualität automatisch gekennzeichnet wird und dieser Beitrag dann verbessert wird !!)
Jonathan Allan
2
Das schlimmste "Feature" aller Zeiten ... Übrigens, fühlen Sie sich nicht schlecht dabei.
Erik der Outgolfer
10

Python 2 , 45 Bytes

Eine Mischung aus meiner anfänglichen Lösung und @ovs ' .

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

Probieren Sie es online!

Python 2 , 49 Bytes

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

Probieren Sie es online!

Python 2 , 46 Bytes

@ovs schlug diese Methode vor, um 3 Bytes zu sparen.

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

Probieren Sie es online!


Wie?

Zuerst paaren wir die entsprechenden Elemente, indem wir entweder *oder verwenden zip(). 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 ausgewertet 1, ob die Bedingung erfüllt ist. Wenn die beiden Werte jedoch nicht gleich sind, wird 0stattdessen zurückgegeben. Dann -~erhöht die bitweise Operation den vom Bool zurückgegebenen Wert um 1und gibt entweder 2oder an 1. max(a,b)gibt den Maximalwert des Paares an und *multipliziert ihn mit dem oben zurückgegebenen Wert (wird also 2nur dann multipliziert, wenn sie gleich sind. In diesem Fall wird max()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.

Mr. Xcoder
quelle
Wow, das war sehr schnell!
einfacher, gleiche Anzahl von Bytes:lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
jferard
@jferard Tatsächlich ist das schon Luis 'Lösung.
Mr. Xcoder
@ Mr.Xcoder Ups! Ich habe nicht die ganze Seite gelesen ...
jferard
Sagen Sie niemals "oben", da sich die Reihenfolge ändern kann (ich sehe Ihre Lösung oben nicht)
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 Bytes gespart durch Ausleihen eines Tricks von Mr. Xcoder.
  • 2 Bytes gespart dank Arnauld.

Versuch es

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>


Erläuterung

a=>b=>

Anonyme Funktion, die die 2 Arrays als Argumente über Parameter aund bin der aktuellen Syntax (dh Aufruf mitf(a)(b)

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

Ordnen Sie das erste Array zu, indem Sie jedes Element durch eine Funktion führen, bei der xes sich um das aktuelle Element und yden aktuellen Index handelt.

(y=b[y])

Rufen Sie das Element am Index yim zweiten Array ab und weisen Sie es als neuen Wert von zu y.

>x?y

Prüfen Sie, ob ygrößer ist als xund geben Sie gegebenenfalls zurück y.

:y<x?x

Andernfalls prüfen Sie, ob ykleiner als xund kehren Sie gegebenenfalls zurückx

:x+y

Anderenfalls geben Sie die Summe von xund zurück y. (Multiplizieren xoder ymit 2 würde auch hier für die gleiche Anzahl von Bytes funktionieren.)

Zottelig
quelle
j.value.split`,`.map(eval)oder eval('['+j.value+']')? Auch x+ywürde sehen einfach besser IMHO.
Neil
@Neil: 1) Ich finde das erstere einfacher zu tippen. Außerdem habe ich einige Snippet-Vorlagen auf einem meiner Computer. es ist einfacher, sie einfach anzuheften .map(eval). 2) Einverstanden, wird vorübergehend bearbeitet.
Shaggy
7

R , 31 29 Bytes

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

pmax 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-bwie , TRUEwo a==bund FALSEansonsten entsprechen a==b. Doch aus irgendeinem Grund hat R keine Klammern benötigt um , !a-bwie es tut , für a==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)

Giuseppe
quelle
Es stellt sich heraus, dass unary "!" hat eine niedrigere Priorität in R als binäres "-", was ich ziemlich ungewöhnlich finde (und ich hatte es erst bemerkt, als ich diese Antwort gelesen habe!)
JDL
@JDL Ja, ich muss fast immer die R-Syntax-Seite öffnen, während ich Golf spiele, wenn komische Macken wie diese auftreten :.
Giuseppe
6

Dyalog APL, 5 Bytes

⌈×1+=

Probieren Sie es online!

Wie?

  • Elementweise Maximum der Argumente
  • ×elementweise multiplizieren
  • 1+=, 1 zur elementweisen Gleichheit der Argumente hinzugefügt

Dies funktioniert, weil, wenn die Zahlen ungleich sind, 1+=dies 1, wenn es mit dem Maximum multipliziert wird, das Maximum ist. Wenn die Zahlen gleich sind, 1+=wird zurückgegeben 2, wenn dies mit dem Maximum multipliziert wird, erhalten wir das Doppelte des Maximums oder das Maximum, das zu sich selbst addiert wird.

Zacharý
quelle
5

Gelee , 6 Bytes

żSṀE?€

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?

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

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!

Jonathan Allan
quelle
Outgolfed! . +1 für die praktisch wörtliche Interpretation der Frage.
Zacharý
... und ich bin erwischt worden, wie ich diese »Vektorisierungen vorher vergessen habe!
Jonathan Allan
Was würde es sonst tun, das maximale Array auf eine verschlungene Weise zu nutzen?
Zacharý
Python benötigt keine verschachtelten Definitionen - zum Beispiel max([1,1,0],[1,0,3]) -> [1,1,0](nicht [1,1,3]).
Jonathan Allan
Also im Grunde genommen unendlich?
Zacharý
5

05AB1E , 5 Bytes

øεMÃO

Probieren Sie es online!

-1 danke an Emigna .

Erik der Outgolfer
quelle
Gute Idee mit γ!
Emigna
@Emigna Ich wollte wirklich "maximale Elemente", und {γθist wahrscheinlich die kürzeste, die ich dafür bekommen kann.
Erik der Outgolfer
Wie wäre es øεMÃO?
Emigna
@Emigna Cool, danke! (Duh, warum habe ich nicht daran gedacht ?) Du hast jetzt die Führung: Übrigens øεZÃOwürde das auch funktionieren
Erik der Outgolfer
4

MATL , 7 Bytes

X>tG=s*

Die Eingabe ist eine Matrix mit zwei Zeilen, wobei jede Zeile eines der Arrays ist.

Probieren Sie es online!

Erläuterung

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
Luis Mendo
quelle
4

Java 8, 80 69 67 66 65 64 63 Bytes

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

Ä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]*2statt a[l]+b[l].

Erläuterung:

Probieren Sie es hier aus.

(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
Kevin Cruijssen
quelle
2
"Wenn es Ihnen hilft, die Anzahl der Bytes zu verringern, können Sie auch die Länge der Listen als Eingabe verwenden." Es wird definitiv Ihre Byteanzahl reduzieren;)
Olivier Grégoire
1
Auch 2 Bytes kürzer: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
Und Sie können ein weiteres Byte speichern, indem Sie float A, Bdie forInitialisierung eingeben.
Olivier Grégoire
1
Oder dies: (a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}(63 Bytes)
Olivier Grégoire
3
@ OlivierGrégoire Lol .. beim Golfen hilft jedes Byte, aber das heißt nicht, dass Sie es ein Byte nach dem anderen spielen müssen. ; p
Kevin Cruijssen
3

05AB1E , 9 8 7 Bytes

Ein Byte gespeichert, als Erik der Outgolfer darauf hinwies, dass eine Liste von Listen eine gültige Eingabe ist.

øεMsËi·

Probieren Sie es online!

Erläuterung

ø          # 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
Emigna
quelle
Wow, das war sehr schnell!
Sie können ein Byte speichern, indem Sie das entfernen und als Paar aus einer Liste und einer Liste eingeben.
Erik der Outgolfer
@EriktheOutgolfer: Stimmt. Ich nahm an, dass wir das nicht durften, aber ich sehe, dass die Herausforderung Standard-E / A-Regeln festlegt. Vielen Dank für die Benachrichtigung :)
Emigna
1
@Emigna Tipp: Machen Sie keine Regeln aus Ihrem Kopf;)
Erik the Outgolfer
1
@EriktheOutgolfer: Ja, ich muss wirklich damit aufhören. Vor allem Regeln, die meine Programme verlängern;)
Emigna
3

Mathematica, 31 Bytes

MapThread[If[#==#2,2#,Max@##]&]
Alephalpha
quelle
3

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

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

@.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).

cole
quelle
Gute Arbeit, ich weiß, ich konnte das nicht tun, obwohl Sie von meiner Übersetzung meiner APL überfordert waren . > _ <
Zacharý
J scheint wirklich hier
Jonah
@ Zacharý Ratten, trotzdem gut golfen.
Cole
3

TI-Basic, 23 21 Bytes

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

Schade, dass Listen jeweils zwei Bytes belegen ...

Timtech
quelle
Sie können zwei Bytes speichern, indem Sie nach Xund fragen und Ydann ʟXund verwenden, ʟYum darauf zuzugreifen, dh " Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2".
Scott Milner
Dies ist derzeit auch ungültig, da L1(L1=L2)versucht wird, das Element L1einer Liste abzurufen, was einen Fehler auslöst. Um dies zu beheben, tauschen Sie die Reihenfolge aus, dh (L1=L2)L1.
Scott Milner
@ScottMilner Vielen Dank, dass Sie beide darauf hingewiesen haben.
Timtech
2

Common Lisp, 60 59 Bytes

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

Probieren Sie es online!

-1 Byte danke an @ Zacharý!

Renzo
quelle
59 Bytes (mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read)).
Zacharý
Gern geschehen, ich kenne mich nicht so gut mit Lisp aus. Ich habe gerade meine anderen Antworten in Lisp übersetzt, wodurch ein Byte gespart wurde.
Zacharý
2

Python mit Numpy, 28 Bytes

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

Angenommen, die Eingabe erfolgt als zwei numpy-Arrays.


quelle
Wenn wir Numpy verwenden, ist hier meine schlechtere Lösung:lambda a,b:n.fmax(a,b)*((a==b)+1)
Erich
@Erich Mir gefällt die Idee, aber dazu müsste ich import numpy as n. Ich komme hier ohne davon, weil es in der Eingabe impliziert ist.
Ich denke, ich bin ein bisschen wackelig in Bezug auf die explizite Bytezählung. Oft sind Python-Antworten einfach Lambdas, wenn eine tatsächliche Implementierung einer Antwort die Zuordnung zu etwas erforderlich machen würde. Aus diesem Grund frage ich mich, ob es zulässig ist, auch mit einer impliziten Importanweisung davonzukommen.
Erich
@Erich Im Allgemeinen können Sie nur dann auf eine Variable verweisen, nwenn Sie sie nin 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.
1
Nun, dies erfordert nur Eingaben als Numpy-Arrays, anstatt sie zu importieren numpy. Aber geht das überhaupt ohne Verwendung return?
Zacharý
2

C # (.NET Core) unter Verwendung von Linq 47 + 18 = 65 Byte

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

Probieren Sie es online!

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

Probieren Sie es online!

Dennis.Verweij
quelle
Sie können die LINQ-Antwort um einige Bytes reduzieren, indem Sie den Namespace "System.LINQ" in "System.LINQ" ändern
jkelm
@jkelm ja, ich habe mich gefragt, ob das "using system" so aufgenommen werden soll oder nicht, denke ich nicht. Ich werde es aufräumen
Dennis.Verweij
System.Linq ist im "Visual C # Interactive Compiler" enthalten. Ich bin mir nicht ganz sicher , ob ich Arrayvs IListvs zurückgeben soll IEnumerable, aber wenn alle berechtigt sind, können Sie die Byteanzahl
dana
1

Swift 3, 81 79 Bytes

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

Swift hat eine interessante Eigenschaft, die darin besteht, dass ein Int nicht direkt in ein umgewandelt Doublewerden kann. Daher müssen Sie alle Arrays als Arrays von Doubles 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

AnonymousReality
quelle
Benötigen Sie Räume um (x,y)und vor ??
Erik der Outgolfer
@EriktheOutgolfer Der vorherige ?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.
@EriktheOutgolfer - TheIOSCoder hat dir teilweise schon geantwortet, aber du hast recht, du brauchst nicht die in der for-Schleife, interessant!
AnonymousReality
73 Bytes: 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)
Mr. Xcoder
Oder 74 Bytes:func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
Mr. Xcoder
1

C 76 75 Bytes

Vielen Dank an @Kevin Cruijssen für das Speichern eines Bytes!

f(a,b,n)float*a,*b;{for(;n--;++a,++b)printf("%f ",*a>*b?*a:*b>*a?*b:*a*2);}

Probieren Sie es online!

Steadybox
quelle
1

Japt , 13 Bytes

íV,È¥Y Ä *XwY

Probieren Sie es online! mit dem -QFlag, um das Ausgabearray zu formatieren.

Justin Mariner
quelle
Schön gemacht. Ich habe zuvor zwei Versuche unternommen, wobei beide mit 17 Bytes ausgegeben wurden. Ich hatte vergessen, íkönnte eine Funktion als zweites Argument nehmen.
Shaggy
1

Rust , 107 97 Bytes

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

Probieren Sie es online!

8 Bytes dank @mgc eingespart

jferard
quelle
1
Ich vermute, Sie können 8 Bytes sparen, indem Sie die gesammelte Typinferenz verwenden Vecund die maxMethode von 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<_>>();
anwenden
1
@mgc Danke! Typinferenz war eine gute Idee, aber in diesem Fall ist der Typalias noch kürzer.
jferard
1

Schnelle 4 , 41 Bytes

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

Testfälle:

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!")
}
Alexander - Setzen Sie Monica wieder ein
quelle