چالش نام و نام خانوادگی

در زیر یک تمرین کوچک است که در این دوره یافت می شود هاسکل
در دانشگاه هلسینکی موجود است.
چالش
لیستی از نام و نام خانوادگی:
- نام ها:
["Eva", "Mike"]
- نام خانوادگی:
["Smith", "Wood", "Odd"]
فهرستی را برگردانید که عناصر آن فقط افراد دارای جفت طولانی هستند.
مثال بازگشت
["EvaSmith", "EvaOdd", "MikeWood"]
راه حل در Haskell
الگوی مجوز Haskell مطابق با y list comprehensions
.
[whole | first <- ["Eva", "Mike"],
last <- ["Smith", "Wood", "Odd"],
let whole = first ++ last,
even (length whole)]
محلول در اکسیر
اگرچه راه حل در اکسیر به این کوتاهی نیست هاسکل
به همان زیبایی است.
require Integer
for first <- ~w[Eva Mike],
last <- ~w[Smith Wood Odd],
name <- [first <> last],
name
|> String.length()
|> Integer.is_even(), do: name
برای این ما از ویژگی های استفاده می کنیم for comprehensions
.
راه حل در جاوا اسکریپت
دیوید از جاوا اسکریپت شیلی برای ما یک راه حل در نسخه بنویسید
استفاده امری و اعلامی جاوا اسکریپت.
امری ضروری
const nombres = ["Eva", "Mike"];
const apellidos = ["Smith", "Wood", "Odd"];
const output = [];
for(let i = 0; i < nombres.length; i++){
for(let j = 0; j < apellidos.length; j++){
const fullName = `${nombres[i]}${apellidos[j]}`;
if(fullName.length % 2 == 0){
output.push(fullName);
}
}
}
اعلامی
const nombres = ["Eva", "Mike"];
const apellidos = ["Smith", "Wood", "Odd"];
const output = nombres.flatMap(n =>
apellidos.map(a => `${n}${a}`)
)
.filter(fullName => fullName.length % 2 == 0);
اکسیر
نسخه اعلامی جاوا اسکریپت ما می توانیم آن را در آن تقلید کنیم اکسیر از بعدی
فرم:
~w[Eva Mike]
|> Enum.flat_map(fn first ->
~w[Smith Wood Odd]
|> Enum.map(fn last ->
first <> last
end)
end)
|> Enum.filter(&
&1
|> String.length()
|> Integer.is_even()
)
اگرچه به زیبایی استفاده نیست for comprehensions
.
به چه زبان های دیگری می توانید چالش را حل کنید؟