Anda akan diberikan dua array angka mengambang. Tugas Anda adalah memasangkan elemen yang sesuai dari dua array, dan mendapatkan maksimum masing-masing pasangan. Namun , jika kedua elemen terkait sama, Anda harus mengambil jumlah mereka sebagai gantinya.
Misalnya, diberi daftar [1, 3, 3.2, 2.3]
dan [3, 1, 3.2, 2.6]
, Anda harus melakukan hal berikut:
Memasangkan elemen (atau zip):
[[1, 3], [3, 1], [3.2, 3.2], [2.3, 2.6]]
.Pergi melalui masing-masing pasangan dan menerapkan proses di atas:
[3, 3, 6.4, 2.6]
.
Spesifikasi
Array / daftar akan selalu memiliki panjang yang sama. Namun mereka mungkin kosong.
Angka-angka yang dikandungnya akan selalu sesuai dengan kemampuan bahasa Anda, selama Anda tidak menyalahgunakannya. Mereka mungkin positif, nol atau negatif, Anda harus menangani semua tipe.
Jika ini membantu Anda mengurangi jumlah byte Anda, Anda juga dapat mengambil panjang daftar sebagai input.
Aturan
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
- Aturan input dan output standar berlaku. Anda dapat mengambil input (dan output) dalam format apa pun yang masuk akal.
- Celah default tidak diperbolehkan.
Uji Kasus
Array_1, Array_2 -> Output [], [] -> [] [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]
Jawaban:
Jelly, 4 byte
Cobalah online!
Ini menggunakan pendekatan yang sama persis dengan jawaban APL saya , kecuali Jelly memiliki builtin untuk menambahkan satu ke nomor!
sumber
Kotlin,
787571666559 byteIni upaya pertama saya, jadilah keren: D
TIO tidak bekerja dengan solusi ini (dan saya tidak tahu mengapa), kode sumber untuk pengujian di bawah ini
EDIT:
-3 dengan mengganti "a + b [i]" dengan "a * 2"
-4 dengan mengganti metode "mapIndexed" dengan "zip" (Terima kasih kepada solusi @AnonymousReality Swift)
-5 dengan mengganti metode "Math.max" dengan kondisi kapan
-1 oleh perubahan ketika kondisi pesanan
-6 dengan mengubah toFloatArray () oleh toList ()
sumber
Python 2 , 45 byte
Gabungan dari solusi awal saya dan @ovs ' .
Cobalah online!
Python 2 , 49 byte
Cobalah online!
Python 2 , 46 byte
@ovs menyarankan metode ini untuk menghemat 3 byte.
Cobalah online!
Bagaimana?
Pertama, kami memasangkan elemen yang sesuai, dengan menggunakan salah satu
*
atauzip()
. Itu memungkinkan kita melakukan golf lebih lanjut dengan bekerja baik dengan peta atau pemahaman daftar.The cool trik dalam jawaban ini adalah bagian ini:
max(x,y)*-~(x==y)
. Bagaimana cara kerjanya? - Yah, seperti yang sudah Anda ketahui, Python otomatis mengonversi nilai bool menjadi bilangan bulat ketika digunakan dalam operasi aritmatika. Oleh karena itu,(x==y)
dievaluasi sebagai1
, jika kondisi terpenuhi. Namun, jika kedua nilai tersebut tidak sama, ia akan mengembalikannya0
. Kemudian, operasi bitwise-~
meningkatkan nilai yang dikembalikan dari bool oleh1
, memberi kami salah satu2
atau1
.max(a,b)
memberikan nilai maksimum dari pasangan dan*
mengalikannya dengan nilai yang dikembalikan di atas (sehingga akan dikalikan2
hanya jika mereka sama, dalam hal inimax()
mengembalikan nilai keduanya).Ini didasarkan pada fakta bahwa jumlah dua angka yang sama sebenarnya adalah salah satu dari mereka berlipat ganda, dan jenis "penyalahgunaan" kelas bool Python menjadi subkelas int.
sumber
lambda*a:map(lambda x,y:(x<=y)*y+(x>=y)*x,*a)
JavaScript (ES6),
53494543 byteCobalah
Penjelasan
Fungsi anonim mengambil 2 array sebagai argumen melalui parameter
a
danb
, dalam sintaks currying (yaitu, panggilan denganf(a)(b)
Peta di atas array pertama, melewati setiap elemen melalui fungsi di mana
x
elemen saat ini dany
indeks saat ini.Dapatkan elemen di indeks
y
dalam array kedua dan tetapkan itu sebagai nilai baruy
.Periksa apakah
y
lebih besar darix
dan, jika demikian, kembaliy
.Lain, periksa apakah
y
kurang darix
dan, jika demikian, kembalix
Lain, kembalikan jumlah
x
dany
. (Mengalikanx
atauy
dengan 2 juga akan berfungsi di sini, untuk jumlah byte yang sama.)sumber
j.value.split`,`.map(eval)
ataueval('['+j.value+']')
? Jugax+y
akan terlihat IMHO lebih rapi..map(eval)
menempelkannya pada mereka. 2) Setuju, akan mengedit sebentar.Haskell, 34 byte
Cobalah online.
sumber
x!y=max x y+sum[x|x==y]
.R ,
3129 bytepmax
mengambil maksimum paralel dari dua (atau lebih) array (mendaur ulang yang lebih pendek sesuai kebutuhan).Saya melihat komentar Luis Mendo dan jelas saya menyadari bahwa pendekatan itu juga bisa berhasil untuk R. Itu membuat saya sampai 30 byte, tetapi kemudian saya mulai bermain-main dengan berbagai cara untuk mendapatkan indeks sebagai gantinya untuk meningkatkan jawaban asli saya, dan menemukan
!a-b
sebagai diTRUE
manaa==b
danFALSE
sebaliknya, setara dengana==b
. Namun, untuk alasan apa pun, R tidak memerlukan tanda kurung!a-b
seperti halnya untuka==b
, yang menyelamatkan saya dua byte.Seperti yang disebutkan oleh JDL dalam komentar , ini bekerja karena
!
(negasi) memiliki prioritas lebih rendah daripada operator biner-
di R, yang aneh.Cobalah online! (versi baru)
Cobalah online! (asli)
sumber
:
ketika berinteraksi dengan aritmatika.Python 3 ,
484644 byte-2 byte terima kasih kepada @nwellnhof
Cobalah online!
sumber
Dyalog APL, 5 byte
Cobalah online!
Bagaimana?
⌈
, maksimal elemen-argumen×
, elemen-bijaksana berkembang biak1+=
, 1 ditambahkan ke kesetaraan unsur-bijaksana dari argumenIni bekerja karena jika angkanya tidak sama,
1+=
akan menjadi1
, yang bila dikalikan dengan maksimum, adalah maksimum. Ketika angkanya sama,1+=
akan kembali2
, ketika itu dikalikan dengan maksimum, kita mendapatkan dua kali lipat maksimum, atau maksimum yang ditambahkan ke dirinya sendiri.sumber
Jelly , 6 byte
Tautan diad mengambil daftar angka di setiap sisi dan mengembalikan daftar yang dihasilkan.
Cobalah online!atau lihat test-suite *.
Bagaimana?
Alternatifnya adalah tautan monadik ini mengambil daftar kedua daftar, juga 6 byte :
* Saya tidak berpikir saya pernah membuat footer test-suite hampir tiga kali jumlah byte kode sebelumnya!
sumber
»
vektor itu sebelumnya!max([1,1,0],[1,0,3]) -> [1,1,0]
(tidak[1,1,3]
).05AB1E , 5 byte
Cobalah online!
-1 terima kasih kepada Emigna .
sumber
γ
!{γθ
mungkin yang terpendek yang bisa saya dapatkan untuk itu.øεMÃO
?MÃ
) Anda dapat memimpin sekarang:øεZÃO
MATL , 7 byte
Input adalah matriks dua baris, di mana setiap baris adalah salah satu dari array.
Cobalah online!
Penjelasan
sumber
Java 8,
80696766656463 byteMemodifikasi input-array kedua sebagai gantinya atau mengembalikan float-array baru untuk menghemat byte.
-11 byte dengan mengambil panjang sebagai input integer tambahan, yang diizinkan sesuai dengan aturan tantangan.
-5 byte terima kasih kepada @ OliverGrégoire (satu byte pada satu waktu .. xD)
-1 byte secara tidak langsung berkat jawaban JS dari @Shaggy , dengan menggunakan
a[l]*2
alih-aliha[l]+b[l]
.Penjelasan:
Coba di sini.
sumber
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
difor
inisialisasi.(a,b,l)->{for(;l-->0;)if(a[l]>=b[l])b[l]=a[l]*(a[l]>b[l]?1:2);}
(63 byte)Pyth , 11 byte
Coba di sini!
Pyth , 12 byte
Coba di sini!
atau
Coba di sini!
sumber
05AB1E ,
987 byteSaved a byte as Erik the Outgolfer pointed out that a list of lists is valid input.
Try it online!
Explanation
sumber
‚
and inputting as a pair of a list and a list.Mathematica, 31 bytes
sumber
J, 7 bytes
Try it online!
Takes one list as the left argument and the other as the right.
Luckily, equality is a rank zero operation.
Explanation
@.
isn't really an if statement, but in this case it functions as one (it indexes into the gerund>.`+
based on the result of its right argument and applies that to the input).sumber
Ruby, 42 bytes
Try it online!
The spaceship operator is great.
sumber
TI-Basic,
2321 bytesToo bad lists take up two bytes each...
sumber
X
andY
, then usingʟX
andʟY
to access them, i.e. "Prompt X,Y:ʟX(ʟX=ʟY)+max(ʟ1,ʟ2
".L1(L1=L2)
attempts to get the element ofL1
at a list, which throws an error. To fix that, swap the order, i.e.(L1=L2)L1
.Octave, 36 Byte
sumber
@(a,b)max(a,b).*(1+(a==b))
@(a,b)a.*(a>=b)+b.*(b>=a)
Pyth, 7 bytes
Try it here.
sumber
Python 3,
494645 bytes3 bytes removed thanks to @Mr.Xcoder (splat instead of two arguments), and 1 byte thanks to @ovs (map instead of list comprehension)
Try it online!
sumber
lambda*c:[a*(a>=b)+b*(b>=a)for a,b in zip(*c)]
. Turns out this is quite good too :) - Too bad there is no place for further golfingCommon Lisp,
6059 bytesTry it online!
-1 byte thanks to @Zacharý!
sumber
(mapcar(lambda(x y)(*(max x y)(if(= x y)2 1)))(read)(read))
.Python with numpy, 28 bytes
Assumes input is given as two numpy arrays.
sumber
lambda a,b:n.fmax(a,b)*((a==b)+1)
import numpy as n
. I get away without it here because it's implicit in the input.n
if you've definedn
in your code, so imports must be explicit. By default, we allow functions or full programs as answers, which includes anonymous functions.numpy
. But does this even work without usingreturn
?C# (.NET Core), using Linq 47+18=65 bytes
Try it online!
C# (.NET Core), 82 bytes
Try it online!
sumber
Array
vsIList
vsIEnumerable
, but if all are eligible then you can get the byte count to 37 - tio.run/##Sy7WTS7O/…Perl 6,
3428 bytesTry it online!
sumber
Swift 3,
8179 BytesSwift has an interesting property in that an Int isn't directly castable to a
Double
, so you have to specify any arrays as being arrays ofDouble
s before passing them to the function.(e.g.)
var k:[Double] = [1,2,3,4,5,5,7,8,9,10]
Edit: -2 bytes thanks to @EriktheOutgolfer
sumber
(x,y)
and before?
??
is needed because Swift would treat them as optional types instead of ternaries (which they aren't). The others aren't. Apart from that, this can be drastically golfed.func n(a:[Float],b:[Float]){print(zip(a,b).map{$0==$1 ?2*$0:max($0,$1)})}
(the float inaccuracies need not to be handled by default)func n(a:[Float],b:[Float]){print(zip(a,b).map{($0==$1 ?2:1)*max($0,$1)})}
C,
7675 bytesThanks to @Kevin Cruijssen for saving a byte!
Try it online!
sumber
Japt, 13 bytes
Try it online! with the
-Q
flag to format the output array.sumber
í
could take a function as a second argument.Rust,
10797 bytesTry it online!
Saved 8 bytes thanks to @mgc
sumber
Vec
and by using themax
method off32
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 bytes
Test cases:
sumber