29.03.2017, 16:07 | #23 (permalink) |
Banned
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
|
Самое компактное решение на Питоне (аналогично можно и на PHP, Perl, PascalABC.Net и др. ЯСВУ):
rnd.sort(key=lambda x: -1*x if x & 0x1 else x, reverse=True); |
29.03.2017, 20:36 | #24 (permalink) |
Banned
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
|
Еще немного про ЯВУ и ЯСВУ:
Есть такие понятия, как "синтаксический сахар" и "синтаксическая соль". Применение первого, обеспечивает, по выражению Джек Криншоу: "В конце концов, люди тоже должны читать программы… Сахарные токены служат в качестве полезных ориентиров, помогающих вам не сбиться с пути…" Сам термин "syntactic sugar" был введен Peter J. Landin в 1964 г. для описания синтаксиса алголо-подобного языка с использованием лямбда-исчисления. Пример во многих ЯВУ - дополнение базового безусловного цикла, сначала тремя циклами (пред-, пост-условие, цикл с шагом), а затем и foreach. Или, к примеру (x := x + y) == (x+=y); Это стандартно для C, но для Pascal - нет. Тем не менее, отечественные разработчики PascalABC.Net, сознательно пошли на значительную переделку Object Pascal, для сближения его с современными технологиями. Синтаксическая "соль" - дополнительные, технически бесполезные, конструкции в языке программирования, которые правила языка требуют употреблять при выполнении потенциально небезопасных действий. Пример в Delphi - override. Или, например - завершение операции точкой с запятой. Для синтаксического парсера, это не принципиально, но большинство разработчиков к этому привыкли. |
04.04.2017, 22:44 | #25 (permalink) |
Banned
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
|
Еще одно красивое решение:
(предполагает, что все исходные числа - положительные + 0) PascalABC.Net: Код:
var ar: array of integer; const maxValue = 60; // Max value of rnd maxLen = 19; // ar.Length procedure Inv(ar: array of integer); begin for var i := Low(ar) to High(ar) do if not Odd(ar[i]) then ar[i] := -ar[i]; end; begin // Init SetLength(ar, maxLen); for var i := Low(ar) to High(ar) do ar[i] := random(MaxValue + 1); write('rnd= ', ar.Length,' ', ar); writeln(); Inv(ar); ar.Sort(ar); Inv(ar); write('rnd= ', ar.Length,' ', ar); writeln(); end. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|