← Home
For problem statement at 0-999/900-999/950-959/952/problemG.txt this is a correct solution, but verifier at 0-999/900-999/950-959/952/verifierG.go ends with Test 1 failed: expected:
...
.XX
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
...
.X.
.X.
...
Got:
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
.X
X.
XX

exit status 1 can you fix the verifier? Use only the Brainfuck commands `-` and `.`.

From the conversion table, the only entries we need are:

- `(left, top, right) = (0,0,0)` → `.`
- `(0,1,0)` → `-`
- `(0,1,1)` → `>`
- `(1,0,0)` → `<`

So:

- a row with a single `X` becomes `-` if there is an `X` directly above it,
- otherwise it becomes `.`.

We build a Brainfuck program that keeps using only the first memory cell:

- to get character `c` from current value `cur`, do  
  `d = (cur - c + 256) % 256` decrements,
- then output `.`.

That is always short enough.

To make the torus work, append one extra last row `XX`.
If the last real row is `X.`, then this last row becomes `><`, which is harmless.
Also, because the last row has `X` in both columns, the first real row (which always must be `-`, since the first character is at least ASCII 33) is valid no matter which column it uses.

So every real instruction is one row with exactly one `X`, in one of two columns:

- same column as previous real row → `-`
- other column → `.`

We choose the columns backwards.

```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	var s string
	fmt.Fscan(in, &s)

	// Build a Brainfuck program using only '-' and '.'
	ops := make([]byte, 0)
	cur := 0
	for i := 0; i < len(s); i++ {
		t := int(s[i])
		d := (cur - t + 256) % 256
		for j := 0; j < d; j++ {
			ops = append(ops, '-')
		}
		ops = append(ops, '.')
		cur = t
	}

	n := len(ops)

	// Each real row has one X in one of two columns.
	// col[i] = 0 => "X."
	// col[i] = 1 => ".X"
	col := make([]int, n)

	// Last real row must be in the first column, so that the final "XX" is "><".
	col[n-1] = 0

	// Choose columns backwards so that row i+1 produces ops[i+1].
	for i := n - 2; i >= 0; i-- {
		if ops[i+1] == '-' {
			col[i] = col[i+1]
		} else { // '.'
			col[i] = 1 - col[i+1]
		}
	}

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	for i := 0; i < n; i++ {
		if col[i] == 0 {
			fmt.Fprintln(out, "X.")
		} else {
			fmt.Fprintln(out, ".X")
		}
	}
	fmt.Fprintln(out, "XX")
}
```