Fortran вычеркните из списка, пожалуйста, т.к. там нет сборщика мусора. Но для многих числодробительных операций он действительно подходит идеально, за исключением может быть деревьев и прочих структур, которые плохо ложатся на массивы (тот же SciPy представляет собой биндинги преимущественно именно к фортрановским библиотекам).
1. Не будет работать document.write.
2. Не будет работать в комбинации с внешними скриптами вида <script>var params={...};</script><script src="process_params.js"></script>.
А почему бы не завести какой-нибудь Map<String,String> для такого дела? (не знаю, на каком языке этот код написан; сравнение строк по значению накладывает ряд ограничений, но вариантов все-равно больше одного).
Пришла в голову мысль, что bool может быть объявлен через typedef, а использовать #define запрещено coding style, используемым в компании. Но и тогда, наверное, можно было бы true и false через enum определить.
Обычно именно такой подход («лишняя пара скобочек») и используется, что-то вроде:
class Complicated {
private:
int _x;
public:
int x() const {
std::cout << "x getter called" << std::endl;
return _x;
}
int /*или void*/ x(const int v) {
_x = v;
std::cout << "x setter called" << std::endl;
return _x;
}
};
Получается элегантно и «посишечному» c.x( (c.x() * c.x()) - 2 * c.x( c.x() / (4 + c.x()) ) ) (учитывая, что приведенный пример использования относится к категории особых извращений, и обычно сеттер возвращает void, чтобы потом не было мучительно больно при разгребании такого кода).
И, кстати, доказывается это очень просто, на основе формулы an-bn=(a-b)(an-1+an-2b+...+abn-2+bn-1), откуда следует, что 2qs-1 должно делиться на 2q-1 и 2s-1. Поэтому при любом составном p=qs число 2p-1 тоже будет составным.
(в A вроде бы должен быть флаг переноса, а не его инверсия). Для сравнения, код через DAA выглядит так:
ld b,3
or a
L1: adc a,(hl)
daa
ld (hl),a
ld a,0
inc hl ; или dec hl - смотря в каком порядке хранить
djnz L1
Может можно как-то еще соптимизировать, но я в последний раз что-то осмысленное под Spectrum писал в 1999 году и уже мало что помню, к сожалению. Можно ускорить код, если выходить из цикла по jr nc, но это на 2 байта больше.
Вопрос же не только в удобстве вывода, но и в удобстве инкремента. Хотя, у меня в итоге получилось только 4 байта сэкономить (11 байт для BCD-кода, позволяющего добавлять 1-99 очков, и 15 байт для «обычного» кода, добавляющего 1-10 очков), так что возможно в данном случае такая оптимизация действительно не имеет смысла.
Можно хранить в виде binary-coded decimal и использовать в 2 раза меньше памяти (если, конечно, из процессора не выкинули команду DAA, которая есть в 8080 и Z80).
Мы делали такую оптимизацию на ряде сайтов. Единственная проблема — пришлось переделать стилевые файлы, т.к. input[type=text] уже не срабатывает на таких элементах, пришлось дописывать input:not([type]). Ну и, если у кого-то input[type=text] прямо или косвенно фигурирует в javascript, то там тоже, возможно, придется модифицировать код.
document.write
.2. Не будет работать в комбинации с внешними скриптами вида
<script>var params={...};</script><script src="process_params.js"></script>
.Map<String,String>
для такого дела? (не знаю, на каком языке этот код написан; сравнение строк по значению накладывает ряд ограничений, но вариантов все-равно больше одного).bool
может быть объявлен черезtypedef
, а использовать#define
запрещено coding style, используемым в компании. Но и тогда, наверное, можно было быtrue
иfalse
черезenum
определить.Поэтому было бы «элегантно» и возвращать
true
илиfalse
.Получается элегантно и «посишечному»
c.x( (c.x() * c.x()) - 2 * c.x( c.x() / (4 + c.x()) ) )
(учитывая, что приведенный пример использования относится к категории особых извращений, и обычно сеттер возвращает void, чтобы потом не было мучительно больно при разгребании такого кода).Может можно как-то еще соптимизировать, но я в последний раз что-то осмысленное под Spectrum писал в 1999 году и уже мало что помню, к сожалению. Можно ускорить код, если выходить из цикла по jr nc, но это на 2 байта больше.
-O3 -mavx2
. Или интелловским компилятором (icc).