Проектная функция f (f (n)) == -n [закрыто]

Поскольку вы даете пример sed в одном из комментариев, я предполагаю, что вы хотите получить чистое решение bash?

while read input; do
  for field in tag tag1; do
    case $input in
      *"<$field>"*"</$field>"* )
        pre=${input#*"<$field>"}
        suf=${input%"</$field>"*}
        # Where are we supposed to be getting the replacement text from?
        input="${input%$pre}SOMETHING${input#$suf}"
        ;;
    esac
  done
  echo "$input"
done

Это совершенно неинтеллектуально и, очевидно, работает только на хорошо сформированном входе с начальным тегом и конечным тегом в одной строке, вы не можете иметь несколько экземпляров одного и того же тега в одной строке, список тэгов для замещения жестко закодирован и т. д.

I не может представить ситуацию, когда это было бы действительно полезно, и предпочтительнее либо сценария, либо надлежащего XML-подхода.

839
задан 13 revs, 9 users 27% 6 July 2015 в 02:21
поделиться

91 ответ

Это решение на C/C++, которое не использует никаких побитовых операторов и не требует никаких математических библиотек, хотя это своего рода обман...

double f(double n)
{
    if (n == (double)(int)n)
        return n + 0.5;
    else
        return -(n - 0.5);
}

Это работает для всех 32-битных целых чисел за единственным исключением 0x80000000 (поскольку его противоположность не может храниться в 32-битной целочисленной системе). f(f(n)) == -n всегда будет true, за исключением одного случая.

Я уверен, что есть более простой и быстрый способ реализовать это. Это просто первое, что пришло в голову.

0
ответ дан 22 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: