2019年11月24日日曜日

[VSCode] ターミナルをコマンドプロンプトに変更する。

環境

  • Visual Studio Code: 1.40.1

変更方法

  1. メニューから「ファイル」-「基本設定」-「設定」を選択する。
  2. 「設定の検索」欄にフォーカスがあるので、「terminal」と入力する。
  3. 設定がフィルターされるので、「Terminal > Integrated > Shell:Windows」を探す。
  4. 「settings.jsonで編集」を押す。
  5. 設定画面が開くので、以下を設定する。
    {
        "terminal.integrated.shell.windows": "C:\\WINDOWS\\system32\\cmd.exe",
    }
    

2019年11月4日月曜日

[Python]奇数の値のみ前後にダッシュ(-)を付ける。

問題

与えられた(引数)数値の中で、奇数の前後にダッシュ(-)マークを付けて文字列を返す関数を記述せよ。 ただし、開始および終了部分には付けないでください。

  • dashatize(274) -> '2-7-4'
  • dashatize(6815) -> '68-1-5'
  • dashatize(None) -> 'None'
  • dashatize(-1) -> '1'
  • dashatize(-28369) -> '28-3-6-9'

解答

def dashatize(num):
    try:
        return ''.join(['-'+i+'-' if int(i)%2 else i for i in str(abs(num))]).replace('--','-').strip('-')
    except:
        return 'None'

2019年10月29日火曜日

[Python]ある条件下のファイル名を抽出する。

問題

以下に示すファイル名の一部を抽出する関数を記述せよ。

  • 長い数字で表される日付で始まると仮定します。
  • アンダースコアが続きます。
  • その後、拡張子を持つファイル名があります。
  • 最後に常に追加の拡張子が付けられます。

Inputs:

1231231223123131_FILE_NAME.EXTENSION.OTHEREXTENSION

1_This_is_an_otherExample.mpg.OTHEREXTENSIONadasdassdassds34

1231231223123131_myFile.tar.gz2

Outputs:

FILE_NAME.EXTENSION

This_is_an_otherExample.mpg

myFile.tar

解答

class FileNameExtractor:
    @staticmethod
    def extract_file_name(fname):
        return fname.split('_', 1)[1].rsplit('.', 1)[0]

2019年10月28日月曜日

[Python]与えられた正の整数を1桁になるまで各桁を乗算した回数を返す関数を記述せよ。

問題

正の整数が与えられたとき、その与えられた値の各桁の数字を乗算し、1桁になるまでの回数を返す関数を記述せよ。

 persistence(39) => 3  # Because 3*9 = 27, 2*7 = 14, 1*4=4
                       # and 4 has only one digit.

 persistence(999) => 4 # Because 9*9*9 = 729, 7*2*9 = 126,
                       # 1*2*6 = 12, and finally 1*2 = 2.

 persistence(4) => 0   # Because 4 is already a one-digit number.

解答

def persistence(n):
    from functools import reduce
    cnt = 0
    while n >= 10 :
        cnt = cnt + 1
        n = reduce( (lambda x,y: int(x) * int(y)), list(str(n)) )
    return cnt

2019年10月24日木曜日

[Python]キャメルケースをケバブケースに変換する。

問題

キャメルケースをケバブケースに変換する関数を記述せよ。

ただし、関数の戻り値(文字列)は小文字のみ含むものとする。

  • kebabize('camelsHaveThreeHumps') // camels-have-three-humps
  • kebabize('camelsHave3Humps') // camels-have-humps
  • kebabize('myCamelCasedString') // my-camel-cased-string
  • kebabize('myCamelHas3Humps') // my-camel-has-humps
  • kebabize('SOS') // s-o-s
  • kebabize('42') // ''(空文字)

解答

def kebabize(s):
    return ''.join(c if c.islower() else '-' + c.lower() for c in s if c.isalpha()).strip('-')

2019年10月22日火曜日

[Python]文字列の各文字をアルファベット順の位置に変換する。

問題

文字列を入力として、それぞれの文字をアルファベット順の位置に変換せよ。

ただし、文字列内のアルファベット以外の文字は無視すること。

"a" = 1, "b" = 2, など。

alphabet_position("The sunset sets at twelve o' clock.") 
# => "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11"

解答

def alphabet_position(text):
    return ' '.join(str(ord(c) - 96) for c in text.lower() if c.isalpha())

[Python]配列内に奇数回現れるint型整数を見つける。

問題

配列を入力として、奇数回現れるint型の整数を見つけ、戻す関数を記述せよ。

ただし、奇数回現れる整数は必ず1個である。

解答

def find_it(seq):
   for i in seq:
       if seq.count(i)%2!=0:
           return i

2019年10月21日月曜日

[Python]ハッシュを要素とする配列から'Bart, Lisa & Maggie'のように名前を結合した文字列を返す関数。

問題

入力:名前を含むハッシュの配列 戻り:カンマ区切りの名前文字列を返す。ただし、最後の2名の名前はアンパサンドで区切ります。

namelist([ {'name': 'Bart'}, {'name': 'Lisa'}, {'name': 'Maggie'} ])
# returns 'Bart, Lisa & Maggie'

namelist([ {'name': 'Bart'}, {'name': 'Lisa'} ])
# returns 'Bart & Lisa'

namelist([ {'name': 'Bart'} ])
# returns 'Bart'

namelist([])
# returns ''

解答

def namelist(names)
  return ' & '.join([ h['name'] for h in names ] ).replace(' &', ',', len(names)-2)

2019年10月19日土曜日

[Python]秒数から、経過時間を時分秒(HH:MM:SS)形式で出力する。

問題

0以上の整数(秒数)を入力として、人が認識可能な形式HH:MM:SSをフォーマットとする時刻に変換する関数を記述せよ。

  • HH:時、2桁でパディングする。00-99を範囲とする。
  • MM:分、2桁でパディングする。00-59を範囲とする。
  • SS:秒、2桁でパディングする。00-59を範囲とする。

入力の最大値は、359999 (99:59:59)

入力と出力例は以下の通り。

  • make_readable(0) -> "00:00:00"
  • make_readable(5) -> "00:00:05"
  • make_readable(60) -> "00:01:00"
  • make_readable(86399) -> "23:59:59"
  • make_readable(359999) -> "99:59:59"

解答

def make_readable(seconds):
    return '{:02}:{:02}:{:02}'.format(int(seconds / 3600), int(seconds / 60 % 60), seconds % 60 ) 

[Python]10進数の正の整数を2進数表示した後のビット数を数える。

問題

0以上の整数を入力とし、バイナリビットに変換したときの1の数を返す関数を記述せよ。

例: 入力:1234 のバイナリビットは10011010010。このとき、関数の戻り値は5。

解答

def countBits(n):
    return bin(n).count("1")