python; checkio日記

checkioを中心にpythonプログラミングの記録

Elementary 問題 最大繰り返しの文字を返す

['a', 'a', 'b', 'c', 'd']だったら'a'を返す関数 これは、先ほどのkeyを使って most_frequent = lambda x: sorted(x, key=lambda y: x.count(y))[-1] といったが、maxもkeyがあるみたいで most_frequent = lambda x: max(x, key=lambda y: x.count(y)) でも…

Elementary 問題 絶対値での並び替え

[-3, 2, 1, -8]なら[1, 2, -3, -8]と並び替える。 リストのindexを取り出してそれで並び替えるというようなことをしたいが、関数を知らないので力技で def checkio(x): ans=[] order = sorted([abs(i) for i in x]) for i in range(len(order)): for j in x:…

Elementary 問題 Fizz Buzz

3で割り切れたらFizz、5で割り切れたらBuzz、15で割り切れたらFizz Buzzを、それ以外ではそのままの番号を(文字列で)返す問題 def checkio(x): ans = (x%3 == 0)*'Fizz' + (x%15 ==0)*' ' + (x%5 ==0)*'Buzz' if ans =='': return str(x) else: return ans…

Elementary問題 辞書中で最大valueを持つkey

辞書中の最大の値を持つkeyを求める関数 def best_stock(data): return ''.join([i for (i, j) in data.items() if j==max(data.values())]) としたが、全くいけてない。 一番エレガントなのは best_stock = lambda data: max(data, key=data.get) このdata.…

Elementary 問題 Correct sentence

英文の最初を大文字にして、最後にピリオドを打つ。もし正しく書いてあればそのままという関数 def correct_sentence(text: str) -> str: ans = text[0].upper()+text[1:] if text[-1] != '.': ans = ans + '.' return ans 下記には唸った。真偽判定を掛け算…

Electric Station 問題 Largest rectangular

今回も説明が難しいですが、一番大きな長方形の面積を返す問題。 iterableにリストの数字を前から選ぶ (num) 選択された数字より大きな数字が右に何個連続しているか調べる (a) 反対方向にも調べる。(b) num*( a - b + 1)が面積 という方向性で考えました。 …

Electric Station 回文問題(The Longest Palindromic)

今回は与えられたテキスト内でもっとも長い回文を探します。 前から一文字ずつ判定 同じ文字で切れるところを探し 反転しても一致するかを調べる という方向性でやりました。 def longest_palindromic(test): ntest = [(i,test[i]) for i in range(len(test)…

Electric Station問題3 Find Sequence

正方形のMatrixの中で4つ以上連続するものがあればTrue、なければFalseを返す関数を作ります。 行内か右下がりの方向で探して、次にMatrixを90度回転させてもう一回探すという方向性でプログラムを書いてみました。 def checkio1(test): for i in range(len(…

Electric Station問題2 Hamming Distance

2進法での距離を求める問題。Hamming Distanceというらしい。 106 (219< 106 < 220) までを考慮したので良いということだったので、 def hamming_d(numb): ans = [] for i in reversed(range(0, 21)): if numb / 2**i >=1: ans.append(1) numb = numb - 2**i…

Home問題5 チェス

守られているポーンの数を数えるという課題。 説明しにくいので、適当に とりあえず、特定のポーンを守れる場所に別のポーンがあるかどうかを判別 ある場合だけsafe ポーンとして数えるというアルゴリズムで def safe_pawns(pawns): safe = 0 for i1 in pawn…

Home 問題 Long Repeat

'aaabbbccssafa' -> 3 アルファベットがもっとも長く連続する長さを返す関数を作る。 直線的にやってみます。 def long_repeat(line): if line=='': return(0) else: count=1 count_chr=[1] for i in range(1,len(line)): if line[i-1]==line[i]: count +=1 …

Home 問題4 シェイクスピア

テキストの中にwords(辞書)のうち何個含まれているか。 count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"}) == 3 re.searchを使って、有った場合だけ数える。とても直線的 import re def count_words(text, words): x = 0 for i in w…

Home 問題5: ●×ゲームの判定

今回は●Xゲームの勝敗決め データの与えられ方は data = ([ "O.O", "XX.", "XOX"]) で勝敗を決定する。 行列を使ってみた。 def checkio(data): mapping = {'X': '1', 'O':'-1', '.':'0'} text = [int(i.translate(str.maketrans(mapping))) for i in ''.joi…

Home 問題2

問題: 数字の入ったリストから、重複がないもののみを消す。 [1,2,3,4,5,6,4,2,5] => [2,4,5,4,2,5] #1,3,6が消去 from collections import Counter import numpy as np def checkio(data): count = Counter(data) [x for (x, y) in count.items() if y == …

記念すべき第一問目: Home 問題1

pythonのプログラミング勉強をcheckioというHPの問題を作って勉強していきます。やったことを自分のメモ用に残しておきます。 お題 textの中に含まれるアルファベットの中で最も数が多いものを返す関数”checkio"を作れ 例) "mAkoshark!!!!"だったら、"a" ポ…