AOJ 0140 Bus Line

問題

解法:やるだけ

# -*- coding: utf-8 -*-

import sys
import os

N = int(input())

for i in range(N):
    a, b = map(int, input().split())
    if a < b:
        lst = [j for j in range(a, b+1)]
        print(*lst)

    # a > b
    else:
        # easy
        if a <= 5:
            lst = list(range(a, b - 1, -1))
        elif b <= 5:
            lst = list(range(a, 10)) + list(range(5, b - 1, -1))

        # i.e. 7 -> 6
        else:
            lst = [j for j in range(a, 9 + 1)] + [j for j in range(5, 0, -1)] + list(range(0, b+1))
        print(*lst)

他の人の解答

for _ in [0]*input():
  A = "012345678954321"
  A += A
  a, b = raw_input().split()
  i1 = A.index(a)
  i2 = A.index(a,i1+1)
  i3 = A.index(b,i1)
  if i2<i3: i1=i2
  print " ".join(A[i1:i3+1])

indexの第二引数で、どの添え字から探し始めるかを指定できることを知った。

シンプルになった理由

  • 状況をデータ(テーブル・配列)にする
  • 複雑さをデータに押し付け、アルゴリズムはシンプルに
  • これは機械学習の複雑・大量のデータとシンプルなアルゴリズムの関係に似ている