All streams
Search
Write a publication
Pull to refresh
90
0
Бушуев Стас @Xitsa

User

Send message
Ещё есть классическая книга экс-чемпиона М. Ботвинника «О кибернетической цели игры» — о том, каким он видел алгоритм игры в шахматы. Очень познавательно сравнить то, что он описывал и то, каким образом на самом деле стали эту проблему решать.
В интернете можно найти электронную версию.
Я посильнее порекомендую FQA:
FQA — это не FAQ, это одна из самых подробных критик Си++, где берётся вопрос, ответ из FAQ, и обсуждается
Перевёл разбор бага со смещением влево и вверх для Pinky.
Есть ещё практика помещения в такие папки файликов вида .ignore с маской *
Я после своего опыта участия в сдаче изделий, люблю перечитывать рассказ Ветеран — почему-то греет душу, что так почти у всех :)
Ещё есть забавный сервис Tatoeba, который содержит переводы небольших предложений.
Когда мне становится скучно, я там перевожу несколько предложений на русский
Вроде бы в gcc такая проверка уже есть.
А потом он внезапно кусает тебя :)
Google переводит с хинди как «Но много писать код!» :)
А дальше с каждым токеном сопоставляют информацию о положении: имя файла, начало и конец.
Встроенных бизоньих средств нет, так как это не его область ответственности.
Обычно это делают в лексере: т.е. на паттерн "\n" делают счётчик строк и сброс положения столбца. А в остальные правила добавляют счётчик количества прочитанного символа (что-то вроде CurColumn+=strlen(yytext); )
Нельзя, так как в данном случае строки модифицировать нельзя.
У бизона, кстати, есть директива %glr-parser, которая в некоторых случаях позволяет избежать конфликтов из-за необходимости просмотра более чем на один символ.
С помощью VIM'а, а точнее gVIM:
Просто открываю файл с кодом, выполняю команду :TOHtml
Потом просто выбираю код, который расположен в теге <BODY> (встаю на тег <BODY> и копирую командой "*yit)

gVIM нужен для того, чтобы раскраска в полученном html совпала с тем, что видно на экране
В новых версиях Lua можно делать так:
  local t = {}
  for l in ... do
    table.insert(t, l)
  end
  s = table.concat(t)


Этот текст достаточно древен (2002 год), я его перевёл, потому что алгоритм интересен.
StringBuilder решает этот вопрос немного по другому — он внутри использует unsafe код, а преимущество этого алгоритма в том, что его можно использовать там, где это недопустимо.
У Грега Игана есть повесть «Ковры Вана» — в ней люди обнаружили фактически клеточные автоматы, в которых была разумная жизнь.
У меня в конечном итоге получился следующий вариант:
    if(enNone!=Enum)
      {
        switch(Enum)
          {
            case enOne:
                 Value=f1(Value);
                 break;/*enOne*/
            case enTwo:
                 Value=f2(Value);
                 break;/*enTwo*/
            case enThree:
                 Value=f3(Value);
                 break;/*enThree*/
            default:assert( 0 );
                 break;
          }/*SWITCH*/
        Value=A*Value+B;
      }/*THEN*/


default конечно, никогда не выполнится, вплоть до последующего изменения типа, но тогда assert отловит эту ситуацию при тестах.
Именно поэтому он там необходим.
В устройстве Даффа также используется особенность определения оператора switch, потому и упомянул.
Позволяет, конечно, только в форме default: assert(0);
так и было сделано, но было интересно попробовать по другому.

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity