- 1
- 2
- 3
- 4
function sort(arr) {
for (var i = 0, j = 0, t, x; i in arr; i += +(x = ++j == arr.length), x && (j = 0), (arr[j] > arr[j + 1]) && (t = arr[j], arr[j] = arr[j + 1], arr[j + 1] = t));
return arr;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−12
function sort(arr) {
for (var i = 0, j = 0, t, x; i in arr; i += +(x = ++j == arr.length), x && (j = 0), (arr[j] > arr[j + 1]) && (t = arr[j], arr[j] = arr[j + 1], arr[j + 1] = t));
return arr;
}
Сортировка массива по-сибирски.
И ведь работает!
DiphenylOxalate 12.04.2017 03:25 # 0
wano987 12.04.2017 09:42 # −1
Первое:
for (var i = 0, j = 0, t, x; - это я так понимаю, входные данные.
i in arr; - это я так понимаю, условие выхода
i += +(x = ++j == arr.length), x && (j = 0), (arr[j] > arr[j + 1]) && (t = arr[j], rr[j] = arr[j + 1], arr[j + 1] = t)); - а вот эта жесть, собственно, итератор.
Правильно?
Меня несколько смущает "&&" в 3-м сегменте "for", я такого не встречал.
Второе:
(x = ++j == arr.length) - "х присвоить предувеличенный J, до тех пор, пока он равен текущей длине массива"?
defecate-plusplus 12.04.2017 10:12 # +19
Используя справочную таблицу, перепишите однострочник таким образом, чтобы получить человекочитаемый код.
(Правильный ответ - камень).
> смущает "&&"
левая часть приводится к bool, если true, то выполняется правая часть
Vindicar 12.04.2017 12:17 # 0
dxd 12.04.2017 12:19 # 0
Только не говорите Кегги.
defecate-plusplus 12.04.2017 13:05 # +19
1024-- 12.04.2017 13:28 # +16
Сначала преобразуйте его эквивалентно к чему-то адекватному.
for(x, y, z) ==== x; while(y){ z }
x && y ==== if(x) y;
x, y ==== x; y;
Выходит неоптимальный пузырёк йаду.
При переписывании ещё оказалось, что переменная x не нужна т.к. используется только для хранения условия ++j == arr.length для условного выполнения j=0.
Последний вариант, как мне кажется, прекрасен. Жаль, что парсер не выдерживает записи ++!i++ (слева - два унарных оператора "плюс"). В сишке наверно сработало бы.
cykablyad 12.04.2017 10:34 # 0
Dummy00001 12.04.2017 16:42 # +15
даже на русском как то была книжка с названием типа "лаконичное введение в с" - в мягкой обложке и тонюсенькая, страниц 40. но была первая книга которая мне арифметику с указателями объяснила, потому что без всяких лишних телодвежений и маханий руками.
1024-- 12.04.2017 17:28 # +15
А как их там характеризуют?
Dummy00001 12.04.2017 18:47 # 0
вот это вроде бы одна из них - Programming Pearls by Jon Bentley:
http://www.littledumbdoctor.com/index_files/Interview_Programming_pearls.pdf
о к слову, во ща припомнил, для фанатов распределенных систем могу порекомендовать - Shared Data Clusters by Dilip Ranade. на коленке в шеле лепим CFS - советы от одного из авторов Veritas.
Dummy00001 12.04.2017 18:48 # 0
я в себе, к слову, нуба так и не убил. какой аксакал чего скажет - начинаю лепить как сказали. стадный инстинкт, ёпта.
roman-kashitsyn 12.04.2017 18:53 # +1
А зачем лепить Chronic Fatigue Syndrome в шеле?
> книги которые я видел были писаны трансцендентными аксакалами
> вот это вроде бы одна из них - Programming Pearls by Jon Bentley
Я так и не понял, является ли Бентли трансцендентным аксакалом. Я также не понял, хорошо им быть или плохо.
Dummy00001 12.04.2017 19:10 # 0
> А зачем лепить Chronic Fatigue Syndrome в шеле?
это Cluster FuckFile Systems, а не chronic erectile dysfunction.
1024-- 12.04.2017 19:00 # 0
barop 12.04.2017 20:09 # −30
http://cs8.pikabu.ru/images/big_size_comm/2016-10_2/147591947517821425.jpg
AntiUeban 12.04.2017 20:10 # −11
barop 12.04.2017 20:16 # −30
Dummy00001 13.04.2017 11:40 # +11
ничем. жалею что была не моя первая книга по С.
к слову в "перлах" рекомендуют "Elements of Programming Style" и "Software Tools" писаные Керниганом/Плауэром. надо будет посмотреть тоже.
roman-kashitsyn 13.04.2017 11:45 # +11
CTEKIIJIHHIbN_XYI 13.04.2017 21:01 # 0
Тем, что там Керниган и Ритчи. Два индуса. Один коричневый, другой тоже коричневый.
huesto 12.04.2017 19:05 # 0