CheckIO O'Reilly
- 题目1:Replace Last
- 题目2:Index Power
- 题目3:Majority
- 题目4:Remove All After
- 题目5:Median
- 题目6:Chunk
- 题目7:Sort Except Zero
- 题目8:Frequency Sorting
- 题目9:How Deep
- 题目10:Time Converter (12h to 24h)
- 题目11:Reverse Every Ascending
- 题目12:Parse Array
- 题目13:Compress List
- 题目14:Median of Three
- 题目15:Flatten a List
- 题目16:Cipher Crossword
- 题目17:Determine the Order
- 题目18:Count Inversions
- 题目19:The Flat Dictionary
- 题目20:Unix Match
- 题目21:Xs and Os Referee
- 题目22:Loading Cargo
题目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
未解锁