Vous recevrez deux tableaux de nombres à virgule flottante. Votre tâche consiste à associer les éléments correspondants des deux tableaux et à obtenir le maximum de chaque paire. Cependant , si les deux éléments correspondants sont égaux, vous devez plutôt prendre leur somme.
Par exemple, étant donné les listes [1, 3, 3.2, 2.3]
et [3, 1, 3.2, 2.6]
, vous devez effectuer les opérations suivantes:
Coupler les éléments (ou zip):
[[1, 3], [3, 1], [3.2, 3.2], [2.3, 2.6]]
.Passez par chaque paire et appliquer le processus ci - dessus:
[3, 3, 6.4, 2.6]
.
Spécifications
Les tableaux / listes auront toujours la même longueur. Ils peuvent cependant être vides.
Les chiffres qu'ils contiennent s'adapteront toujours aux capacités de votre langue, tant que vous n'en abusez pas. Ils peuvent être positifs, nuls ou négatifs, vous devez gérer tous les types.
Si cela vous aide à réduire votre nombre d'octets, vous pouvez également prendre la longueur des listes en entrée.
Règles
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
- Des règles d'entrée et de sortie standard s'appliquent. Vous pouvez prendre des entrées (et des sorties) dans n'importe quel format raisonnable.
- Les failles par défaut sont interdites.
Cas de test
Array_1, Array_2 -> Sortie [], [] -> [] [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]
Réponses:
Gelée, 4 octets
Essayez-le en ligne!
Cela utilise exactement la même approche que ma réponse APL , sauf que Jelly a une fonction intégrée pour en ajouter un à un nombre!
la source
Kotlin,
787571666559 octetsC'est ma première tentative, sois cool: D
TIO ne fonctionne pas avec cette solution (et je ne sais pas pourquoi), code source pour les tests ci-dessous
ÉDITER:
-3 en remplaçant "a + b [i]" par "a * 2"
-4 par remplacer la méthode "mapIndexed" par "zip" (Merci à la solution @AnonymousReality Swift)
-5 en remplaçant la méthode "Math.max" par quand la condition
-1 par changement lors de la commande de condition
-6 en modifiant toFloatArray () par toList ()
la source
Python 2 , 45 octets
Un mélange de ma solution initiale et @ovs ' .
Essayez-le en ligne!
Python 2 , 49 octets
Essayez-le en ligne!
Python 2 , 46 octets
@ovs a suggéré cette méthode pour économiser 3 octets.
Essayez-le en ligne!
Comment?
Tout d'abord, nous appairons les éléments correspondants, en utilisant soit
*
ouzip()
. Cela nous permet de continuer notre golf en travaillant soit avec une carte, soit avec une liste de compréhension.L'astuce de frais dans cette réponse est cette partie:
max(x,y)*-~(x==y)
. Comment ça marche? - Eh bien, comme la plupart d'entre vous le savent déjà, Python convertit automatiquement les valeurs booléennes en entiers lorsqu'elles sont utilisées dans des opérations arithmétiques. Par conséquent,(x==y)
est évalué comme1
si la condition est remplie. Cependant, si les deux valeurs ne sont pas égales, elle renvoie à la0
place. Ensuite, l'opération au niveau du bit-~
incrémente la valeur renvoyée par le booléen en1
nous donnant soit2
ou1
.max(a,b)
donne la valeur maximale de la paire et la*
multiplie par la valeur renvoyée ci-dessus (elle2
n'est donc multipliée que si elles sont égales, auquel casmax()
renvoie la valeur des deux).Ceci est basé sur le fait que la somme de deux nombres égaux est en fait l'un ou l'autre doublée, et que le type de "booléen" classe bool de Python est une sous-classe d'int.
la source
lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
JavaScript (ES6),
53494543 octetsEssayez-le
Explication
Fonction anonyme prenant les 2 tableaux comme arguments via des paramètres
a
etb
, en curryant la syntaxe (ie, appel avecf(a)(b)
Mappez sur le premier tableau, en passant chaque élément à travers une fonction où
x
est l'élément en cours ety
l'index en cours.Obtenez l'élément à index
y
dans le deuxième tableau et affectez-le comme nouvelle valeur dey
.Vérifiez si
y
est supérieur àx
et, si oui, revenezy
.Sinon, vérifiez si
y
est inférieur à,x
et si oui, retournezx
Sinon, retournez la somme de
x
ety
. (La multiplicationx
ouy
par 2 fonctionnerait également ici, pour le même nombre d'octets.)la source
j.value.split`,`.map(eval)
oueval('['+j.value+']')
?x+y
Serait également plus soigné à mon humble avis..map(eval)
. 2) D'accord, modifiera momentanément.Haskell, 34 octets
Essayez-le en ligne.
la source
x!y=max x y+sum[x|x==y]
.R ,
3129 octetspmax
prend le maximum parallèle des deux tableaux (ou plus) (en recyclant le plus court au besoin).Je regardais le commentaire de Luis Mendo et, évidemment, j'ai réalisé que l'approche pouvait également fonctionner pour R. Cela m'a fait 30 octets, mais j'ai commencé à jouer avec différentes façons d'obtenir des indices plutôt que d'améliorer ma réponse initiale, et sommes tombés sur
!a-b
commeTRUE
oùa==b
et parFALSE
ailleurs, soita==b
. Cependant, pour une raison quelconque, R ne nécessite pas de parenthèses!a-b
comme il le faita==b
, ce qui m'a fait économiser deux octets.Comme mentionné par JDL dans les commentaires , cela fonctionne car
!
(la négation) a une priorité inférieure à celle de l'opérateur binaire-
dans R, ce qui est étrange.Essayez-le en ligne! (nouvelle version)
Essayez-le en ligne! (original)
la source
:
interaction avec l'arithmétique.Python 3 ,
484644 octets-2 octets grâce à @nwellnhof
Essayez-le en ligne!
la source
Dyalog APL, 5 octets
Essayez-le en ligne!
Comment?
⌈
, maximum par élément des arguments×
, multiplier par élément1+=
, 1 ajouté à l'égalité élémentaire des argumentsCela fonctionne parce que si les nombres sont inégaux, ce
1+=
sera le cas1
, multiplié par le maximum. Lorsque les nombres sont égaux,1+=
reviendra2
, lorsque cela est multiplié par le maximum, nous obtenons le double du maximum, ou le maximum ajouté à lui-même.la source
Gelée , 6 octets
Un lien dyadique prenant une liste de numéros de chaque côté et renvoyant la liste résultante.
Essayez-le en ligne! ou consultez une suite de tests *.
Comment?
Une alternative est ce lien monadique prenant une liste des deux listes, également 6 octets :
* Je ne pense pas avoir déjà créé un pied de page de suite de tests près de trois fois le nombre d'octets du code!
la source
»
vectorise avant!max([1,1,0],[1,0,3]) -> [1,1,0]
(pas[1,1,3]
).05AB1E , 5 octets
Essayez-le en ligne!
-1 merci à Emigna .
la source
γ
!{γθ
c'est probablement le plus court que je puisse trouver pour ça.øεMÃO
?MÃ
) maintenant vous avez pris les devants: p btwøεZÃO
fonctionnerait aussiMATL , 7 octets
L'entrée est une matrice à deux lignes, où chaque ligne est l'un des tableaux.
Essayez-le en ligne!
Explication
la source
Java 8,
80696766656463 octetsModifie le deuxième tableau d'entrée à la place ou renvoie un nouveau tableau flottant pour enregistrer les octets.
-11 octets en prenant la longueur comme entrée entière supplémentaire, ce qui est autorisé selon les règles de défi.
-5 octets grâce à @ OliverGrégoire (un octet à la fois .. xD)
-1 octet indirectement grâce à la réponse JS de @Shaggy , en utilisant à la
a[l]*2
place dea[l]+b[l]
.Explication:
Essayez-le ici.
la source
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
l'for
initialisation.(a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}
(63 octets)Pyth , 11 octets
Essayez-le ici!
Pyth , 12 octets
Essayez-le ici!
ou
Essayez-le ici!
la source
05AB1E ,
987 octetsEnregistré un octet comme Erik l'Outgolfer a souligné qu'une liste de listes est une entrée valide.
Essayez-le en ligne!
Explication
la source
‚
et en le saisissant en tant que paire de liste et de liste.Mathematica, 31 octets
la source
J, 7 octets
Essayez-le en ligne!
Prend une liste comme argument de gauche et l'autre comme droite.
Heureusement, l'égalité est une opération de rang zéro.
Explication
@.
n'est pas vraiment une instruction if, mais dans ce cas, elle fonctionne comme une seule instruction (elle indexe le gérondif en>.`+
fonction du résultat de son argument de droite et l'applique à l'entrée).la source
Rubis , 42 octets
Essayez-le en ligne!
L'opérateur de vaisseau spatial est génial.
la source
TI-Basic,
2321 octetsDommage que les listes prennent deux octets chacune ...
la source
X
etY
puis en utilisantʟX
etʟY
pour y accéder, par exemple "Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2
".L1(L1=L2)
tente d'obtenir l'élément deL1
dans une liste, ce qui génère une erreur. Pour résoudre ce problème, permutez l'ordre, c'est-à-dire(L1=L2)L1
.Octave, 36 octets
la source
@(a,b)max(a,b).*(1+(a==b))
@(a,b)a.*(a>=b)+b.*(b>=a)
Pyth, 7 octets
Essayez-le ici.
la source
Python 3 ,
494645 octets3 octets supprimés grâce à @ Mr.Xcoder (splat au lieu de deux arguments), et 1 octet grâce à @ovs (carte au lieu de la liste de compréhension)
Essayez-le en ligne!
la source
lambda*c:[a*(a>=b)+b*(b>=a)for a,b in zip(*c)]
. Il s'avère que c'est assez bien aussi :) - Dommage qu'il n'y ait pas de place pour continuer à jouer au golfLisp commun,
6059 octetsEssayez-le en ligne!
-1 octet grâce à @ Zacharý!
la source
(mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read))
.Python avec numpy, 28 octets
Suppose que l'entrée est donnée sous forme de deux tableaux numpy.
la source
lambda a,b:n.fmax(a,b)*((a==b)+1)
import numpy as n
. Je m'en tire ici car c'est implicite dans l'entrée.n
si vous l'avez définien
dans votre code, les importations doivent donc être explicites. Par défaut, nous autorisons des fonctions ou des programmes complets comme réponses, ce qui inclut des fonctions anonymes.numpy
. Mais cela fonctionne-t-il même sans utilisationreturn
?C # (.NET Core) , en utilisant Linq 47 + 18 = 65 octets
Essayez-le en ligne!
C # (.NET Core), 82 octets
Essayez-le en ligne!
la source
Array
vsIList
vsIEnumerable
, mais si tous sont éligibles, vous pouvez obtenir le nombre d'octets à 37 - tio.run/##Sy7WTS7O/…Perl 6 ,
3428 octetsEssayez-le en ligne!
la source
Swift 3,
8179 octetsSwift a une propriété intéressante dans la mesure où un Int n'est pas directement transposable en a
Double
, vous devez donc spécifier tous les tableaux comme étant des tableaux deDouble
s avant de les passer à la fonction.(par exemple)
var k:[Double] = [1,2,3,4,5,5,7,8,9,10]
Edit: -2 octets grâce à @EriktheOutgolfer
la source
(x,y)
et avant?
??
est nécessaire car Swift les traiterait comme des types optionnels au lieu de ternaires (ce qu'ils ne sont pas). Les autres ne le sont pas. En dehors de cela, cela peut être considérablement joué au golf.func n(a:[Float],b:[Float]){print(zip(a,b).map{$0==$1 ?2*$0:max($0,$1)})}
(les inexactitudes flottantes ne doivent pas être traitées par défaut)func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
C,
7675 octetsMerci à @Kevin Cruijssen d'avoir enregistré un octet!
Essayez-le en ligne!
la source
Japt , 13 octets
Essayez-le en ligne! avec l'
-Q
indicateur pour formater le tableau de sortie.la source
í
pourrais prendre une fonction comme deuxième argument.Rouille ,
10797 octetsEssayez-le en ligne!
8 octets enregistrés grâce à @mgc
la source
Vec
et en utilisant lamax
méthode def32
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 octets
Cas de test:
la source