CheckIO O‘Reilly

题目1:Replace Last

在这里插入图片描述

def replace_last(line: list) -> list:
    try:
        line.insert(0, line.pop())
        return line 
    except:
        return []

题目2:Index Power

在这里插入图片描述

def index_power(array: list, n: int) -> int:
    try:
        return pow(array[n],n)
    except:
        return -1

题目3:Majority

在这里插入图片描述

def is_majority(items: list) -> bool:
    return items.count(True)>items.count(False)

题目4:Remove All After

在这里插入图片描述

from typing import Iterable
def remove_all_after(items: list, border: int) -> Iterable:
    try:
        items = items[:items.index(border) + 1]
        return items
    except:
        return items

题目5:Median

在这里插入图片描述

from typing import List

def checkio(data: List[int]) -> [int, float]:
    length = len(data)
    data.sort()
    if not length % 2:
        return data[length//2]/2 + data[length//2-1]/2
    else:
        return data[length//2]

题目6:Chunk

未解锁


题目7:Sort Except Zero

在这里插入图片描述

from typing import Iterable
def except_zero(items: list) -> Iterable:
    for i in range(len(items)):
        for j in range(i,len(items)):
            if items[i] ==0 or items[j] == 0:
                continue
            if items[i]>items[j]:
                items[i],items[j] = items[j],items[i]
    return items

题目8:Frequency Sorting

在这里插入图片描述

import collections
def frequency_sorting(numbers):
    freq = collections.Counter(sorted(numbers)).most_common()
    print([j for i in [[x]*y for x,y in freq] for j in i])
def frequency_sorting(numbers):
    return sorted(sorted(numbers) ,key=numbers.count,reverse=True)

题目9:How Deep

未解锁


题目10:Time Converter (12h to 24h)

在这里插入图片描述

def time_converter(time):
    hour = int(time.split(':')[0])
    min = time.split(':')[1].split(' ')[0]
    if time == '12:00 a.m.':
        return '00:00'
    if 'p' in time:
       hour = str(hour+12 if hour < 12 else hour).rjust(2,'0')
    else:
        hour = str(hour).rjust(2,'0')
    return hour + ':' + min

题目11:Reverse Every Ascending

在这里插入图片描述

def reverse_ascending(items):
    res=[]
    start=0
    for i in range(1,len(items)):
        if items[i]<=items[i-1]:
            res+=items[start:i][::-1]
            start=i
    return res+items[start:][::-1]

题目12:Parse Array

未解锁


题目13:Compress List

在这里插入图片描述

from typing import Iterable

def compress(items: list) -> Iterable:
    try:
        new_items = [items[0]]
        for index in range(1,len(items)):
            if items[index] == items[index-1]:
                continue
            else:
                new_items.append(items[index])
        return new_items
    except:
        return []

题目14:Median of Three

在这里插入图片描述

from typing import List,Iterable

def checkio(data: List[int]) -> [int, float]:
    length = len(data)
    data.sort()
    if not length % 2:
        return data[length//2]/2 + data[length//2-1]/2
    else:
        return data[length//2]

def median_three(els: Iterable[int]) -> Iterable[int]:
    if len(els) <= 2:
        return els
    else:
        new_els = els[:2]
        for i in range(len(els)-2):
            new_els.append(checkio(els[i:i+3]))
        return new_els

题目15:Flatten a List

在这里插入图片描述

def flat_list(array):
    array = str(array).replace('[','')
    array = array.replace(']','')
    return [int(x) for x in array.strip(', ').split(',') if len(x) ]

题目16:Cipher Crossword

未解锁


题目17:Determine the Order

在这里插入图片描述

def checkio(data):
    chars = {i:[[],[]] for i in(set(''.join(data)))}
    result = sorted(list(chars))
    for x in chars:
        for wrd in data:
            if x in wrd:
                p = wrd.index(x)
                for i, y in enumerate(wrd):
                    if i < p: chars[x][0].append(y)
                    if i > p: chars[x][1].append(y)
    while True:
        for i, x in enumerate(result[:-1]):
            for j, y in enumerate(result[i+1:]):
                if  x in chars[y][1] or y in chars[x][0]:
                    result[i], result[i+j+1] = y, x
                    break
            else: 
                continue
            break
        else: 
            return ''.join(result)

题目18:Count Inversions

未解锁


题目19:The Flat Dictionary

在这里插入图片描述

def flatten(data, path=""):
    if not (data and isinstance(data, dict)):
        return {path: data if data else ""}
    else:
        result = {}
        for k, v in data.items():
            result.update(flatten(v, f"{path + '/' if path else ''}{k}"))
        return result

题目20:Unix Match

在这里插入图片描述

#Checkio不支持fnmatch
import fnmatch
def unix_match(filename: str, pattern: str) -> bool:
    return fnmatch.fnmatch(filename,pattern)
import re
def unix_match(filename: str, pattern: str) -> bool:
    reg_exp = pattern
    for k, v in {
        ".": r"\.",
        "*": ".*",
        "?": ".",
        "[!": "[^",
        "[[]": r"\[",
        "[]]": r"\]",
        "[.]": r"\?",
        "[.*]": r"\*",
    }.items():
        reg_exp = reg_exp.replace(k, v)

    try:
        return re.match(reg_exp, filename) is not None
    except re.error:
        return filename == pattern

题目21:Xs and Os Referee

在这里插入图片描述

from typing import List

def checkio(game_result: List[str]) -> str:
    if row(game_result) != "D":
        return row(game_result)
    if colume(game_result) != "D":
        return colume(game_result)
    if cross(game_result) != "D":
        return cross(game_result)
    return "D"


def row(game):
    for x in game:
        if len(set(x)) == 1 and x != '...':
            return x[0]
    return "D"

def colume(game):
    game = ''.join(game)
    for x in range(3):
        if game[x] == game[x+3] == game[x+6] != '.':
            return game[x]
    return "D"

def cross(game):
    game = ''.join(game)
    if game[0] == game[4] == game[8] != '.':
        return game[0]
    elif game[2] == game[4] == game[6] != '.':
        return game[2]
    return "D"

题目22:Loading Cargo

未解锁


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值