---
# System prepended metadata

title: '[競程] Jolly Jumpers'
tags: [競程]

---

# [競程] Jolly Jumpers

###### tags: `競程`

## 問題
* ZeroJudge: [d097](https://zerojudge.tw/ShowProblem?problemid=d097)

給定一個總共有 $n$ 個整數的序列，如果在這個序列中，每相鄰兩個數的差的絕對值剛好是 $1$ 到 $n - 1$（順序不拘），則我們稱這個序列為 jolly jumper。

設計一個function，輸入為這個序列，回傳這個序列是不是jolly jumper。

## 範例
* 範例 1
    ```python
    輸入：[1, 4, 2, 3]
    輸出：True
    ```
    1 和 4 相差 3，4 和 2 相差 2，2 和 3 相差 1，恰好是 1 到 3。
    
* 範例 2
    ```python
    輸入：[1, 4, 2, -1, 6] 
    輸出：False
    ```
    
## 思路
我們需要使用迴圈一個一個檢查相鄰兩個數的相差值，如果這個值已經出現過，或者不在 $1$ 到 $n-1$ 的範圍內，那就立刻終止迴圈，回傳`False`。最後，如果每次檢查都通過，直到迴圈結束，那就回傳`True`。

## 解答
:::spoiler Python 解答
```python=
def is_jolly(seq):
    n = len(seq)
    record = set([])
    for i in range(1, n):
        delta = abs(seq[i] - seq[i - 1])
        if (delta >= n) or (delta < 1) or (delta in record):
            return False
        record.add(delta)
    return True
```
:::