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

در زیر یک تمرین کوچک است که در این دوره یافت می شود هاسکل
در دانشگاه هلسینکی موجود است.
چالش
لیستی از نام و نام خانوادگی:
- نام ها:
["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.
به چه زبان های دیگری می توانید چالش را حل کنید؟



