Куча говна / Говнокод #12214 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
perft :: Int -> Position -> Int
perft depth pos 
	| depth <= 0 = 1
	| otherwise  = sum . map (perft $ depth - 1) $ legalPositions where
		legalPositions = filter isLegalPosition nextpositions
		nextpositions = map (\move -> makeMove move pos) $ (moves pos)

Запостил: Fai Fai, (Updated )

Комментарии (59) RSS

  • Никто не знает, почему на говнокоде табы шириной в 8 пробелов?
    Ответить
    • [КО]Потому что так сделал Страйкер.[/КО]
      Это говнокод, детка.
      Ответить
      • Круче всего было бы введение настроек форматирования с полем ширина табуляции (в пробелах).

        И при отправке говнокода, табы бы конвертировались в нужное число пробелов.
        Ответить
        • Лучше самому всегда использовать пробелы для форматирования кода. Особенно для Haskell.
          Ответить
          • а почему для хаскель? никаких проблем с хаскелем и табами не замечал.
            Ответить
            • Классическая проблема с табами - у кого-то в редакторе таб настроен на 8, у кого-то на 4, у кого-то вообще в перемешку - полутабы в виде пробелов, а полные, на 8 символов, в виде табов...

              В разношерстной команде работать с табами ужасно - для своих проектов одни настройки, для участия в других - приходится менять. Мне вот приходилось переключать редактор на табы, чтобы коммитить в код Fai.

              А хаскель, как и питон, привередлив к смешиванию пробелов и табов. И может тупо выдать синтаксическую ошибку.
              Ответить
              • Используй только табы без смешения и никаких проблем не будет
                Ответить
                • Я использую пробелы без смешения. Они всегда отображаются именно так, как я их написал. А экономить байты на табах в исходнике считаю нецелесообразным.
                  Ответить
                  • Мне нравится, что в зависимости от ситуации, могу выставить длину таба в нужное число пробелов, в том числе и в то число, в котором видит код автор. Только вот мне не нужно видение кода, как у автора, а мне нужно так, как мне удобно. Единственное требование к коду - автор кода все строки обязан начинать с табов безоговорочно, не вставляя пробелы после табов перед кодом. Ну а иначе автор кода просто не может в командную работу.
                    Ответить
                    • Зачем создавать сложности на пустом месте? Гораздо проще, если во всех редакторах, на консоли и в вебе твой код отображается одинаково независимо от настроек.
                      Жаль, что многие редакторы до сих пор используют по умолчанию табы.
                      Ответить
                      • > и в вебе
                        Так мне еще и // <br> в конце каждой строки писать?
                        Ответить
                      • С табами удобнее - не надо несколько раз жать. Конечно, для командной работы это может иметь значение, но вообще задумываться о том, что когда-нибудь кто-нибудь будет смотреть мой код, еще и поставив нестандартные настройки... в большинстве случаев имхо перестраховка.

                        Идеальный вариант - только если редактор может прозрачно обрабатывать пробелы, как будто это табы. Главное. чтобы не только при вставке, но и при перемещении курсора.
                        Ответить
                        • У меня как раз так. Но мне кажется, что чего-то не хватает.
                          Ответить
                        • > не надо несколько раз жать
                          на что жать? мой emacs сразу ставит правильный отступ.

                          > когда-нибудь кто-нибудь будет смотреть мой код
                          я, например, очень часто изучаю код, выложенный на гитхабе. Да и собственные сорцы часто изучаю в gitweb.
                          Ответить
                        • > Идеальный вариант - только если редактор может прозрачно обрабатывать пробелы, как будто это табы.
                          Все редакторы так умеют. Ну кроме ноутпэда разве что.

                          > С табами удобнее - не надо несколько раз жать.
                          Я жму таб, втыкаются 4 пробела. ЧЯНТД? vim, notepad++, mcedit, qtcreator, eclipse, везде с этим норм.

                          P.S. Да, бекспейс в большинстве редакторов делает отмену indent'а, поэтому курсор и влево прыгает на 4/8/сколько нужно пробелов.
                          Ответить
                          • >Да, бекспейс в большинстве редакторов делает отмену indent'а
                            VS2008 что-то такого не делает, если в тексте пробелы... В общем, если буду пользоваться чем-нибудь другим, настрою на пробелы.
                            Ответить
                            • > VS2008 что-то такого не делает, если в тексте пробелы
                              В клипсе тоже стирает по одному пробелу. Это жопа, но там работает shift-tab, в визуалке, емнип, тоже.
                              В креаторе в настройках ставится поведение бекспейса - отмена отступа.
                              В mcedit по дефолту пашет, если переключиться на пробелы.
                              В vim работает, на сколько помню на это влияет shiftwidth.
                              Ответить
                              • UPD: И да, ты забыл про make или его аналоги. Без них неудобно собирать.
                                Ответить
                                  • Дык tmux это многооконный терминал? Как он заменит мейк?

                                    > gyp
                                    Почитаю, на первый взгляд синтаксис выглядит неплохо.
                                    Ответить
                                    • Документации, правда, маловато (по сравнению с cmake). Ещё немного напрягает привязка к chromium (содержит хаки, специфичные для структуры проекта chromium), из-за чего без параметра --depth=. выдаёт таинственные сообщения об ошибках.
                                      Но спецификация проекта gyp мне нравится гораздо больше, чем мутноватый императивный язык cmake.
                                      Ответить
                                • Как можно забыть про make? Make - душа собирательства и компиляторства.

                                  И кстати, есть tup, который круче в сотню раз. И Роман его уже упомянул, сославшись на мое раннее упоминание.
                                  Ответить
                            • M-^ - удаляет выравнивание (но делает черз чур много, удаляет так же и обрыв строки, подбирая строчку вслед за предыдущей, но есть бонус: можно использовать в любом месте строки, не обязательно чтобы каретка была перед кодом).
                              M-/ - удаляет пробелы, все что есть, и справа и слева, но курсор должен быть внутри этих пробелов.
                              TAB выравнивает в соответствии с настройками режима редактирования (т.е. может и добавить и убрать пробелов, смотря какой исходный текст был). Работает в любом месте строки, не обязательно перед кодом.
                              M-C-q - как TAB, только для отдельного выражения.
                              M-q C-q - специфицчно для SLIME, форматирует описание функции.
                              M-x TAB - добавляет единицу табуляции в произвольном месте.
                              C-j - перевод каретки с выравниаванием.
                              M-C-j - перевод каретки с выравниванием комментариев (добавит разделитель комментариев после перехода на новую строку).
                              M-C-\ - форматирование выделенного участка кода.

                              M-m - переход к концу отступа (началу кода), не меняет размер отступа, но удобно в комбинации с M-/ или M-BACKSPACE.

                              Большинство символов, которые могут повлиять на расстановку пробелов (т.н. электрические символы) тоже могут добавить или убрать пробелы.

                              Ну и для тех, кому показалось мало:
                              (defun delete-all-indentation (begin end)
                                (interactive "r")
                                (let ((region
                                       (split-string
                                        (buffer-substring-no-properties begin end) "\n")))
                                  (kill-region begin end)
                                  (insert
                                   (mapconcat
                                    #'identity
                                    (mapcar
                                     #'(lambda (x)
                                         (let ((a 0) (b (length x)) c)
                                           (catch 't
                                             (while (< a b)
                                               (setq c (aref x a))
                                               (unless (find c '(?\ ?\t))
                                                 (throw 't (subseq x a)))
                                               (incf a)) "")))
                                     region) "\n"))))
                              
                              (global-set-key (kbd "M-C-^") 'delete-all-indentation)
                              Ответить
                                • Про бекспейс очень там правильно написано, прямо тут же взял и переделал. Как-то в голову не приходило, и особенно потому, что у меня бекспейс квадратный (маленький), раз из 5 попадаю в инсерт вместо него. Про Алт+Х - не знаю... мне Алт+Х удобнее Контрол+Х.
                                  Ответить
                                • Заодно обнаружил интерсную штуку, про которую раньше не знал:
                                  C-M-k дальше, переходим к следующему выражению, которе нужно подобрать, C-M-w C-M-k и оно объединяется в буффере с предудущим скопированным.
                                  Ответить
              • > у кого-то в редакторе таб настроен на 8, у кого-то на 4

                Так это же хорошо. Кому-то больше нравится видеть код с большими отступами, кому-то - с маленькими и в таком случае у всех будет отображаться таб любимого размера.

                > Мне вот приходилось переключать редактор на табы, чтобы коммитить в код Fai.

                Уже исправил.
                Ответить
                • > Кому-то больше нравится видеть код с большими отступами
                  А мне вот нравится видеть код так, как его видит автор. Особенно если приходится его править. Ведь нарушение стиля изначального автора - не есть гуд.
                  Ответить
                  • Хм. Тоже аргумент. Ну я в любом случае, уже перешел на пробелы.
                    Ответить
              • Тарасоформатирование спасёт отца русской демократии.
                Осталось подождать, когда все редакторы смогут его поддерживать.
                Ответить
                  • Не. Примерно такая херь:
                    (
                    	3==Tuple.triple ( 1,2 ,null	)	.size ()
                    ,	2==Tuple.pair   ( 1,2		)	.size ()
                    ,	3==Tuple.triple ( null,null,null)	.size ()
                    ,	2==Tuple.pair	( null,null	)	.size ()
                    )

                    Прим: запятые - мои.
                    Ответить
                  • Кстати современные редакторы уже умеют объявления. Вот, например я себе настроил:
                    int[]	myArray		= { 1, 2, 3, 4, 5, 6 };
                    int	theInt		= 1;
                    String	someString	= "Hello";
                    double	aDouble		= 3.0;

                    Но знаки препинания (запятые, точки с запятой) по-прежнему не по-тарасовски.
                    Ответить
                    • Знаки препинания наверное и не надо выносить в линию.
                      Ответить
                      • Надо-надо. Что за антитарасовская ересь?
                        Форматироваться должно всё, чтобы сразу видеть проебанную запятую, например.
                        Ответить
                        • Ну просто вынесенные вбок запятые это пиздец как некрасиво, а выровненные типы и идентификаторы - красиво.
                          Ответить
                      • Кстати, можно и не через добавление пробелов, а через свойства текста, задать ширину символа в зависимости от контекста, но только очень много мороки, что-то типа
                        (put-text-property start (1+ start) 'display how-many-spaces)
                        . Но это нужно энтузиазм Тараса, чтобы всерьез занятся написанием такой штуки.
                        Ответить
          • Уже перенастроил sublime text для генерации четырех пробелов при нажании таба.
            Ответить
              • Сейчас проверю. 8 пробелов.

                Попытался забить символ '\t' на shift+tab, а он гад все-равно пробелами вставляет.
                Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8