Музей Исходного Кода


Экспонатов: 36 В рассмотрении: 0 Утверждено: 36

Язык:    Автор:    
Текст:    

1234>

37. Абсолютно-статическое позиционирование

Автор: IUnknown
Сайт-источник:
Книга-источник/Автор:
  1. .make-route-wrapper #buttons
  2. {
  3. position: static; /* Абсолютное позиционирование */
  4. }
Капитан Очевидность решил нас обмануть.

Для справки: значения static и absolute для свойства position - это все равно, что асфальт и болото для транспорта.

36. Маразм с константами

Автор: IUnknown
Сайт-источник:
Книга-источник/Автор: PayPal PHP SDK
  1. # constants.php
  2.  
  3. define('VERSION', '65.1');
  4. // еще штук 5 констант
  5.  
  6.  
  7. # caller.php
  8.  
  9. if (defined('VERSION'))
  10. $version = VERSION;
  11.  
  12. // так для каждой константы
  13.  
  14. function foo() {
  15. global $version, ...; // все те же переменные
  16.  
  17. if (!empty($version))
  18. //...;
  19.  
  20. // да-да, теперь Он может использовать empty() и isset()
  21. }
  22.  
  23. function bar() {
  24. global $version, ...; // аналогично, те же переменные
  25.  
  26. // другая функция с тем же маразмом с empty()
  27. }
  28.  
  29. // еще несколько функций с таким же маразмом
Когда до меня дошло, что автор всего лишь избавился от сообщений о необъявленных константах и условие, проверяющих их существование в каждой функции, стало очень смешно.

А мог бы просто до-define'ить нехватающие константы. Или, может, Он не знал, что константы глобальны?

35. Построение дерева уникальных строк файла

Комментарии:2 (Андрей, 18.05.2011 08:32)
Автор: Андрей
  1. # Дерево
  2. my %tree = ();
  3.  
  4. # Читаем по одной строке из файла CSV и строим дерево
  5. my $line_no = 1;
  6. while (my $line = <$file_handle>) {
  7. # Читаем и обрабатываем строку с помощью парсера CSV
  8. $csv->parse($line);
  9. my @fields = $csv->fields();
  10.  
  11. # Начинаем добавление с корня дерева
  12. my $tree_level_ref = \%tree;
  13. # @indexes - массив индексов полей, по которым строится дерево
  14. # Каждый последующий индекс = каждый последующий уровень дерева
  15. for (my $i = 0; $i < scalar @indexes; $i++) {
  16. my $idx = $indexes[$i];
  17. my $value = $fields[$idx];
  18.  
  19. # Если это ...
  20. if ($i < scalar(@indexes) - 1) {
  21. # ... не последний индекс, то добавляем новый уровень дерева
  22. $$tree_level_ref{$value} = {} unless exists $$tree_level_ref{$value};
  23. }
  24. else {
  25. # ... последний индекс, то добавляем массив, в котором будут номера строк файла
  26. unless (exists $$tree_level_ref{$value}) {
  27. my @tmp = [];
  28. $$index_level_ref{$value} = \@tmp;
  29. }
  30. }
  31.  
  32. # Перемещаем указатель на следующий уровень дерева
  33. $tree_level_ref = $$tree_level_ref{$value};
  34. }
  35.  
  36. # Помещаем номер строки в лист дерева
  37. push @$tree_level_ref, $line_no;
  38. $line_no++;
  39. }
Данный алгоритм строит дерево уникальных строк файла CSV. В качестве контрольных значений берутся значения полей из каждой строки файла, индексы которых указаны в массиве @indexes.
Одно из применений данного алгоритма, это поиск всех дублирующихся строк в файле по произвольным индексам за один проход по файлу.

34. Предобработка CSV

Комментарии:1 (Андрей, 09.06.2011 17:27)
Автор: Андрей
  1. {
  2. c=split($0,s);
  3. for(n=1; n<=c; ++n) {
  4. if(s[n] ~ /^".*"$/) printf("%s",s[n]); else printf "\"%s\"", s[n];
  5. if(n<c) printf ",";
  6. }
  7. print "";
  8. }
Эта маленькая программа "оборачивает" каждое поле в файле CSV в двойные кавычки, если не обернуто.
Программа настроена на работу с запятой в качестве разделителя, что также необходимо указывать при запуске $ awk -F ,

32. Работа со списками - итераторы

Комментарии:1 (Андрей, 09.03.2011 19:45)
Автор: Гость
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. #define ListSize 15
  6. #define MaxValue 20
  7.  
  8. struct TListItem
  9. {
  10. int Value;
  11. TListItem *Next,*Prev;
  12. };
  13.  
  14. struct TList
  15. {
  16. TListItem *First,*Last;
  17. };
  18.  
  19. TList InitList()
  20. {
  21. TList r;
  22. r.First = NULL;
  23. r.Last = NULL;
  24. return r;
  25. };
  26.  
  27. void AddListItem(TList& List,int val)
  28. {
  29. if(List.First==NULL)
  30. {
  31. List.First = (TListItem*)malloc(sizeof(List));
  32. List.First->Next = NULL;
  33. List.First->Prev = NULL;
  34. List.First->Value = val;
  35. List.Last = List.First;
  36. }
  37. else
  38. {
  39. List.Last->Next = (TListItem*)malloc(sizeof(List));
  40. List.Last->Next->Prev = List.Last;
  41. List.Last->Next->Next = NULL;
  42. List.Last->Next->Value = val;
  43. List.Last = List.Last->Next;
  44. };
  45. };
  46.  
  47. void DestroyList(TList& List)
  48. {
  49. TListItem *t=List.First,*r;
  50. while(t!=NULL)
  51. {
  52. r=t->Next;
  53. free(t);
  54. t=r;
  55. };
  56. List.First = List.Last = NULL;
  57. };
  58.  
  59. void PrintList(TList& List)
  60. {
  61. TListItem *t=List.First;
  62. while(t!=NULL)
  63. {
  64. printf("%i ",t->Value);
  65. t = t->Next;
  66. };
  67. };
  68.  
  69. struct TListIterator
  70. {
  71. TListItem* pointer;
  72. };
  73.  
  74. TListIterator InitIterator()
  75. {
  76. TListIterator r;
  77. r.pointer=NULL;
  78. return r;
  79. };
  80.  
  81. inline int IsValid(TListIterator It)
  82. {
  83. return It.pointer!=NULL;
  84. };
  85.  
  86. void MoveNext(TListIterator& It)
  87. {
  88. if(IsValid(It)) It.pointer = It.pointer->Next;
  89. };
  90.  
  91. void MovePrevious(TListIterator& It)
  92. {
  93. if(IsValid(It)) It.pointer = It.pointer->Prev;
  94. };
  95.  
  96. int GetValue(const TListIterator& It)
  97. {
  98. if(IsValid(It)) return It.pointer->Value;
  99. return 0;
  100. };
  101.  
  102. void SetValue(const TListIterator& It,int v)
  103. {
  104. if(IsValid(It)) It.pointer->Value=v;
  105. };
  106.  
  107. TListIterator GetBegin(TList& L)
  108. {
  109. TListIterator r;
  110. r.pointer = L.First;
  111. return r;
  112. };
  113.  
  114. TListIterator GetEnd(TList& L)
  115. {
  116. TListIterator r;
  117. r.pointer = L.Last;
  118. return r;
  119. };
  120.  
  121. void InsertAfter(TList& L,const TListIterator& It,int v)
  122. {
  123. if(!IsValid(It)) return;
  124. TListItem* t = (TListItem*)malloc(sizeof(TListItem));
  125. t->Value = v;
  126. t->Next = It.pointer->Next;
  127. t->Prev = It.pointer;
  128. if(It.pointer->Next!=NULL) It.pointer->Next->Prev = t;
  129. It.pointer->Next = t;
  130. if(It.pointer==L.Last) L.Last = t;
  131. };
  132.  
  133. void InsertBefore(TList& L,const TListIterator& It,int v)
  134. {
  135. if(!IsValid(It)) return;
  136. TListItem* t = (TListItem*)malloc(sizeof(TListItem));
  137. t->Value = v;
  138. t->Prev = It.pointer->Prev;
  139. t->Next = It.pointer;
  140. if(It.pointer->Prev!=NULL) It.pointer->Prev->Next = t;
  141. It.pointer->Prev = t;
  142. if(It.pointer==L.First) L.First = t
  143. };
  144.  
  145. void DeleteItem(TList& L,TListIterator& It)
  146. {
  147. if(!IsValid(It)) return;
  148. if(It.pointer == L.First) L.First = It.pointer->Next;
  149. if(It.pointer == L.Last) L.Last = It.pointer->Prev;
  150. TListItem* t1=It.pointer->Prev;
  151. TListItem* t2=It.pointer->Next;
  152. free(It.pointer);
  153. It.pointer = t2;
  154. if(t2!=NULL) t2->Prev = t1;
  155. if(t1!=NULL) t1->Next = t2;
  156. if(L.First==NULL) L.Last = NULL;
  157. if(L.Last==NULL) L.First = NULL;
  158. };
  159.  
  160. void main()
  161. {
  162. randomize();
  163. TList L;
  164. L = InitList();
  165. for(int i=0;i<ListSize;i++)
  166. AddListItem(L,random(MaxValue));
  167. PrintList(L);
  168. printf("\n");
  169. TListIterator t=GetBegin(L);
  170. while(IsValid(t))
  171. {
  172. InsertBefore(L,t,GetValue(t));
  173. MoveNext(t);
  174. };
  175. PrintList(L);
  176. printf("\n");
  177. t=GetBegin(L);
  178. while(IsValid(t))
  179. if(GetValue(t)%2!=0) DeleteItem(L,t);
  180. else MoveNext(t);
  181. PrintList(L);
  182. printf("\n");
  183. QSort(L,GetBegin(L),GetEnd(L));
  184. PrintList(L);
  185. printf("\n");
  186. DestroyList(L);
  187. getch();
  188. return;
  189. }
Создание итератора и его использование, программа без комментов, но разобратся можно

31. Описание списков и работа с ними

Комментарии:1 (Андрей, 09.03.2011 14:18)
Автор: Гость
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4.  
  5. #define ListSize 15
  6. #define MaxValue 20
  7.  
  8. struct TListItem
  9. {
  10. int Value;
  11. TListItem *Next,*Prev;
  12. };
  13.  
  14. struct TList
  15. {
  16. TListItem *First,*Last;
  17. };
  18.  
  19. TList InitList()
  20. {
  21. TList r;
  22. r.First = NULL;
  23. r.Last = NULL;
  24. return r;
  25. };
  26.  
  27. void AddListItem(TList& List,int val)
  28. {
  29. if(List.First==NULL)
  30. {
  31. List.First = (TListItem*)malloc(sizeof(TListItem));
  32. List.First->Next = NULL;
  33. List.First->Prev = NULL;
  34. List.First->Value = val;
  35. List.Last = List.First;
  36. }
  37. else
  38. {
  39. List.Last->Next = (TListItem*)malloc(sizeof(TListItem));
  40. List.Last->Next->Prev = List.Last;
  41. List.Last->Next->Next = NULL;
  42. List.Last->Next->Value = val;
  43. List.Last = List.Last->Next;
  44. };
  45. };
  46.  
  47. void DestroyList(TList& List)
  48. {
  49. TListItem *t=List.First,*r;
  50.  
  51. while(t!=NULL)
  52. {
  53. r=t->Next;
  54. free(t);
  55. t=r;
  56. };
  57.  
  58. List.First = List.Last = NULL;
  59. };
  60.  
  61. void PrintList(TList& List)
  62. {
  63. TListItem *t=List.First;
  64.  
  65. while(t!=NULL)
  66. {
  67. printf("%i ",t->Value);
  68. t = t->Next;
  69. };
  70. };
  71.  
  72.  
  73. void main()
  74. {
  75. randomize();
  76.  
  77. TList L;
  78. L = InitList();
  79.  
  80. for(int i=0;i<ListSize;i++)
  81. AddListItem(L,random(MaxValue));
  82.  
  83. PrintList(L);
  84.  
  85. printf("\n");
  86.  
  87. BubbleSortList(L);
  88.  
  89. PrintList(L);
  90.  
  91. printf("\n");
  92.  
  93. DestroyList(L);
  94.  
  95. getch();
  96.  
  97. return;
  98. }
Вот так нас в универе научили

30. just another perl hacker

Комментарии:3 (Андрей, 03.03.2011 11:37)
Автор: IUnknown
История этого кода лично мне неизвестна. Код выводит "just another perl hacker". Вся суть в четырех операторах qw.

29. IE6 Win98 Крах

Комментарии:1 (Андрей, 25.02.2011 14:33)
Автор: IUnknown
  1. <input type crash>
  2. </form>
Помнится, примерно такой код в IE6 под Win98 вызывал BSOD.

28. Фокус с "вариантом"

Комментарии:6 (IUnknown, 28.02.2011 16:49)
Автор: CDN
  1. var
  2. v: variant;
  3. b: boolean;
  4. i: integer;
  5. s: string;
  6. d: TDatetime;
  7. x: Double;
  8. begin
  9. v:=0;
  10. b := true;
  11. i := 2;
  12. s := '3';
  13. d := StrToDateTime('01/01/01');
  14. x := 5;
  15. v := v+b+i+s+d+x;
  16. ShowMessage(VarToStr(v));
  17. end;
Компилятор все это проглотит без проблем. Загадкой остается лишь то, что он выплюнет.

27. Ломаем Windows

Автор: CDN
  1. <body background=con\con>
Scripts вызывает неустранимую ошибку. Это баг операционной системы Windows. После этого пользователю придется перезагрузить машину для возобновления нормальной работы системы.
Не уверен, что этот код сейчас работает так же, но проверять не очень-то хочется =)

1234>


Наша группа ВКонтакте
По всем вопросам: support@codemuseum.ru
© 2010-2011, Welab Team