+++ /dev/null
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import itertools"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "def cmp(x, y):\n",
- " if x == y:\n",
- " return 0\n",
- " elif x > y:\n",
- " return -1\n",
- " else:\n",
- " return 1"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 110,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "def longest_monotone(seq, allow_same=False, debug=False):\n",
- " \"\"\"Find the longest monotonic sequence. If allow_same is True, \n",
- " instead find the longest non-decreasing or non-increasing sequence\"\"\"\n",
- " cmps = [cmp(x, y) for x, y in zip(seq, seq[1:])]\n",
- " groups = [(k, len(list(g)) + 1) for k, g in itertools.groupby(cmps)]\n",
- " if allow_same:\n",
- " groups = merged(groups)\n",
- " if debug:\n",
- " return max(t[1] for t in groups), groups\n",
- " else:\n",
- " return max(t[1] for t in groups)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 85,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "def merged(gs):\n",
- " padded = gs + [(0, 0)]\n",
- " mgs = []\n",
- " prev = (0, 1)\n",
- " for curr, nxt in zip(padded, padded[1:]):\n",
- " if prev[0] == 0:\n",
- " prev = (curr[0], prev[1] + curr[1] - 1)\n",
- " elif curr[0] == 0:\n",
- " prev = (prev[0], prev[1] + curr[1] - 1)\n",
- " if prev[0] != nxt[0]:\n",
- " mgs += [prev]\n",
- " prev = (0, curr[1])\n",
- " elif prev[0] == curr[0]:\n",
- " prev = (prev[0], prev[1] + curr[1] - 1)\n",
- " else:\n",
- " mgs += [prev]\n",
- " prev = curr\n",
- " mgs += [prev]\n",
- " return mgs "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 111,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 111,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([1,2,3,4,5,4,5,6])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 112,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(5, [(1, 5), (-1, 2), (1, 3)])"
- ]
- },
- "execution_count": 112,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([1,2,3,4,5,4,5,6], debug=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 102,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 102,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,3,4,5,4,5,6])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 103,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 103,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,3,4,5,5,5,4,3,5,6])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 104,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "7"
- ]
- },
- "execution_count": 104,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,3,4,5,5,5,4,3,5,6], allow_same=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 105,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "5"
- ]
- },
- "execution_count": 105,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,5,5,5,4,3,2,1,5,6])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 106,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "7"
- ]
- },
- "execution_count": 106,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,5,5,5,4,3,2,1,5,6], allow_same=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 107,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "7"
- ]
- },
- "execution_count": 107,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,5,5,5,4,3,2,5,6,6,6,6,6,6,6,2])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 108,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "9"
- ]
- },
- "execution_count": 108,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,5,5,5,4,3,2,5,6,6,6,6,6,6,6,2], allow_same=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 109,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "7"
- ]
- },
- "execution_count": 109,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,5,5,5,6,7,7,8,8,3,2,5,6,6,6,6,6,6,6,2], allow_same=False)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 113,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "10"
- ]
- },
- "execution_count": 113,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "longest_monotone([10,1,2,5,5,5,6,7,7,8,8,3,2,5,6,6,6,6,6,6,6,2], allow_same=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 114,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0 24\n"
- ]
- }
- ],
- "source": [
- "for i in range(1):\n",
- " with open('sequence{:03}.txt'.format(i)) as f:\n",
- " sseq = f.read()\n",
- " seq = [int(s) for s in sseq.split(',')]\n",
- " s = longest_monotone(seq)\n",
- " print(i, s)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 115,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0 24\n",
- "1 34\n",
- "2 23\n",
- "3 23\n",
- "4 22\n",
- "5 27\n",
- "6 27\n",
- "7 24\n",
- "8 22\n",
- "9 21\n"
- ]
- }
- ],
- "source": [
- "for i in range(10):\n",
- " with open('sequence{:03}.txt'.format(i)) as f:\n",
- " sseq = f.read()\n",
- " seq = [int(s) for s in sseq.split(',')]\n",
- " s = longest_monotone(seq)\n",
- " print(i, s)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 116,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0 29\n",
- "1 34\n",
- "2 25\n",
- "3 30\n",
- "4 29\n",
- "5 27\n",
- "6 27\n",
- "7 28\n",
- "8 23\n",
- "9 26\n"
- ]
- }
- ],
- "source": [
- "for i in range(10):\n",
- " with open('sequence{:03}.txt'.format(i)) as f:\n",
- " sseq = f.read()\n",
- " seq = [int(s) for s in sseq.split(',')]\n",
- " s = longest_monotone(seq, allow_same=True)\n",
- " print(i, s)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.2+"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}