Brainfuck、579バイト
,[<<+>>>>+<<[[<+>>+<-]++++++[>-------<-]>-[-[-[-[--------------[--[<+++++[>-----
-<-]>+[--[<<[-]>>-]]<]>[>>-<<<<<[-]<[<]<<<[<]>>>>>>>>[<]<-[+>]+[->+]>>>>+>[<-]<[
>+<-<]>]<]>[<<<[-]-[<]>>>>>>>>>>>[<]<<<<<<[<]<-[+>]+[-<+]<<<+<[>-<<<]>[-<+<]]]<]
>[+>[-<]<[<<]<[-]>>]]<]+>[-[<-]<[>+>+<<-<]<[-]>+>]<<[>-]>[,>]<]<+<[>]>[>>>[<<<<[
-<]<<<]>>>+>>>>[<<<<->>>>[>>>[-<]>>>>]]]>[<<<[<+[-->>]]>[-[.[-]]]>[<]>[<<++++++[
>+++++++<-]>+>>[<<.>>-]<<++>-[<.>-]+++[<+++++>-]+<<<<<<+>[<<[>->>>>>.[[-]<<<<]<<
<+>>>]>[->->>>>[-]]]<[->+[>>>>>]>>[<]<<<<<<<<[[-]<]>[++.[-]>>>>>>>]<]]>>]<[>>>>>
>>]+[-<<<<<[-]<<],]
書式設定とコメント付き:
,
[
  <<+>> >>+<<
  [
    [<+> >+<-]
    ++++++[>-------<-]
    >-
    [
      not plus
      -
      [
        not comma
        -
        [
          not minus
          -
          [
            not period
            --------------
            [
              not less than
              --
              [
                not greater than
                <+++++[>------<-]>+
                [
                  not open bracket
                  --
                  [
                    not close bracket
                    <<[-]>>-
                  ]
                ]
                <
              ]
              >
              [
                greater than
                >>-<<
                <<<[-]<[<]<<<[<]
                >>>>>>>>[<]
                <-[+>]
                +[->+]
                >>>>+>[<-]
                <[>+<-<]
                >
              ]
              <
            ]
            >
            [
              less than
              <<<[-]-[<]
              >>>> >>>>>>>[<]
              <<<<<<[<]
              <-[+>]
              +[-<+]
              <<<+<[>-<<<]
              >[-<+<]
            ]
          ]
          <
        ]
        >
        [
          minus
          +>[-<]
          <[<<]
          <[-]>>
        ]
      ]
      <
    ]
    +>
    [
      plus
      -[<-]
      <[>+>+<<-<]
      <[-]>+>
    ]
    <<
    [
      comma or period or bracket
      >-
    ]
    >[,>]
    <
  ]
  comma or period or bracket or eof
  <+<
  [
    start and end same cell
    >
  ]
  >
  [
    >>>
    [
      <<<<[-<]<<<
    ]
    >>>+>>>>
    [
      start right of end
      <<<<->>>>
      [>>>[-<]>>>>]
    ]
  ]
  >
  [
    <<<
    [
      <+[-->>]
    ]
    >[-[.[-]]]
    >[<]
    >
    [
      <<++++++[>+++++++<-]>+>>
      [<<.>>-]
      <<++>-[<.>-]
      +++[<+++++>-]
      +<<<<< <+>
      [
        <<
        [
          go left
          >->>>>>.
          [[-]<<<<]
          <<<+>>>
        ]
        >
        [
          toggle left right
          ->->>>>[-]
        ]
      ]
      <
      [
        toggle right left
        ->+[>>>>>]>>[<]
        <<<<<<<<
        [
          [-]<
        ]
        >
        [
          go right
          ++.[-]
          >>>>>>>
        ]
        <
      ]
    ]
    >>
  ]
  <[>>>>>>>]
  +[-<<<<<[-]<<]
  ,
]
これは、Keith Randallのソリューションと同じアプローチを使用し、すべての連続したシーケンスを+-<>シミュレーションによって最適化します。たとえば、に+++>-<+>---<なり++++>----<、に>+<+<<+>+<->>>>なり+<+>>+>ます。
オンラインでお試しください。 
(シミュレートされたセルの絶対値が256に近づくと、オーバーフローの問題が発生します。)
全体の構造は
while not EOF:
  while not EOF and next char not in ",.[]":
    process char
  print minified sequence (followed by the char in ",.[]" if applicable)
テープは7セルのノードに分割されています。内側のループの先頭では、メモリレイアウトは
0 s 0 c 0 a b
ここで、sは開始セルのブールフラグc、現在の文字、aシミュレーションセル値のマイナス部分(プラス1)、およびbシミュレーションセル値のプラス部分です。
縮小されたシーケンスが印刷されるとき、メモリレイアウトは
d n e 0 0 a b
where dは、方向を表すブールフラグで、以前aとb同じ(ただし、印刷するnとe1/0になります)であり、エンドノードではゼロ以外の値になります。nは、ノードが表示された回数に関連しe、内側のループを停止したcharの値(プラス1)です。
もともと、ノードごとの詳細情報を追跡することを検討しました。左端と右端のノードをブールフラグとして、ノードの開始ノードと終了ノードに対する位置。ただし、必要に応じて隣接するセルを調べ、開始ノードを見つけるために左右のスキャンを実行することで、これを回避できます。
縮小されたシーケンスを印刷し、シミュレートされたポインターを移動する方法を決定するとき、一般的なアプローチをとることができます:開始ノードと終了ノードが同じである場合は任意の方向に)終了ノードから離れることから始め、左端と右端で向きを変えますノード、および終了ノードが表示された回数に基づいて停止します。開始ノードと終了ノードが同じ場合は3回、そうでない場合は2。
               
              
++>>++<<--出力する必要>>++<<があり、それはカバーされませんでした。さらにテストケースを追加してください。