Harigami
ログイン
Harigamiは、ログイン不要のコード共有サービスです。コードの投稿後に発行されるURLでコードを共有できます。
PythonやRubyなど一部の言語は、投稿後にオンラインで実行することもできます。
誰でも無料で使えて、広告もありません。コードレビューやスニペットの代わりに使ってみてください。


詳細設定
+
anonymous タイトルなし
Python
# -*- coding:utf-8 -*-
import csv
import datetime
import re

#datetimeの使い方
#print(datetime.date(2017,11,12))
# => 2017-11-12

#機能<--Projective Todo-->
#個人用のtodoの作成、削除、表示ができる
#リーダー(0番)のみプロジェクト用のtodoリストの作成、削除ができる
#リーダー以外はプロジェクトTodoの表示のみ

#csvファイルの名前=>"todo.csv"


#データを保持するクラス
class TodoInfo:
    def __init__(self,todo,deadline):
        #TodoInfoクラスを初期化する
        #引数のselfはあまり考えなくて良い
        #self移行が引数となる
        #self.todoなどはクラス変数
        self.todo = todo
        #データ保持用の辞書
        self.deadline = deadline

    def toFormattedString(self,key):
        """todoリストを表示するための書式設定"""
        print('todo:',end="")
        print(self.todo)
        print('\tkey:',end="")
        print(key)
        print('\tdeadline:',end="")
        print(self.deadline)

#アプリケーションを動かすクラス
class TodoManager:
    def __init__(self,fileName):
        #TodoManagerクラスを初期化する
        self.fileName = fileName
        self.todo_data = {}

    def setup(self):
        """メンバーIDの入力とcsvからの読み込み"""
        #従業員Noを入力する
        #リーダーは0番
        while True:
            self.member = input("メンバーID(0-9):")
            if not self.member.isdigit():
                #数字でないなら
                print("不正な値です")
                continue
            else:
                if 0 <= int(self.member) and int(self.member) <= 9:
                    break
                else:
                    print("不正な値です")
                    continue
        #csvファイルからデータを読み込む
        #todo.csvを読み込みモードで開く
        try:
            f = open(self.fileName,"rt")
        except FileNotFoundError:
            f = open(self.fileName,"wt")
            header_writer = csv.writer(f,lineterminator = '\n')
            header_list = ['key','todo','year','month','day']
            header_writer.writerow(header_list)
            f.close()
            f = open(self.fileName,"rt")

        lines = f.readlines()
        reader = csv.reader(lines)
        #1行読み飛ばす
        header = next(reader)

        #lineは配列として読み込まれるので、インデックスでそれぞれ代入
        for line in reader:
            #リストから対応する変数に代入
            key, todo, year, month, day = line
            deadline = datetime.date(int(year),int(month),int(day))
            self.todo_data[key] = TodoInfo(todo,deadline)
        #ファイルを閉じる
        f.close()


    def listProjectData(self):
        """プロジェクトTodoを表示する"""
        #プロジェクトtodoを表示する
        print("-------------------------------------------")
        print('<-- Project Todo -->')
        #検索用パターンの設定
        search_key = '^Pro'
        while True:
            #ヒット件数
            count = 0
            #検索処理
            for key in self.todo_data.keys():
                m = re.findall(search_key,key)
                if m:
                    count += 1
                    #TodoInfoクラスのtoFormattedString()を利用する
                    self.todo_data[key].toFormattedString(key)

            #削除する処理
            #countが0以上かつリーダー(0番)なら
            if count > 0 and self.member == '0':
                print("-------------------------------------------")
                print('削除したいリストのキーを選択してください(q to cancel):',end="")
                delete_key = input().strip()
                if delete_key == 'q':
                    break
                else:
                    self.deleteData(delete_key)
            else:
                break

    def listIndiData(self):
        """個人Todoを表示する"""
        #個人todoを表示する
        print("-------------------------------------------")
        print('<-- Indivisual Todo -->')
        #検索用パターンの設定
        search_key = 'Ind..{0:s}'.format(self.member)
        while True:
            #ヒット件数
            count = 0

            #検索処理
            for key in self.todo_data.keys():
                m = re.findall(search_key,key)
                if m:
                    count += 1
                    #TodoInfoクラスのtoFormattedString()を利用する
                    self.todo_data[key].toFormattedString(key)

            #削除する処理
            if count > 0:
                print("-------------------------------------------")
                print('削除したいリストのキーを選択してください(q to cancel):',end="")
                delete_key = input().strip()
                if delete_key == 'q':
                    break
                else:
                    #deleteData()のあとはまた繰り返し
                    self.deleteData(delete_key)
            else:
                break

    def addToIndivisual(self):
        """個人Todoに追加する"""
        print("-------------------------------------------")
        #個人todoリストへ追加する
        #項目名、期日の入力を求める
        #キーは関数で生成する
        key = self.makeKey('Ind')
        #todoの入力
        print("todo:",end="")
        todo = input().strip()
        print("年:",end="")
        year = input().strip()
        print("月:",end="")
        month = input().strip()
        print("日:",end="")
        day = input().strip()
        #deadlineは日付で処理
        deadline = datetime.date(int(year),int(month),int(day))
        self.todo_data[key] = TodoInfo(todo,deadline)

    def addToProject(self):
        """プロジェクトTodoに追加する"""
        print("-------------------------------------------")
        #プロジェクトtodoへ追加する
        #リーダー(0番)でなければ追加できない
        if self.member != '0':
            print("warning:あなたはリーダーではありません")
        else:
            #項目名、期日の入力を求める
            #キーは関数で生成する
            key = self.makeKey('Pro')
            #todoの入力
            print("todo:",end="")
            todo = input().strip()
            print("年:",end="")
            year = input().strip()
            print("月:",end="")
            month = input().strip()
            print("日:",end="")
            day = input().strip()
            #deadlineは日付で処理
            deadline = datetime.date(int(year),int(month),int(day))
            self.todo_data[key] = TodoInfo(todo,deadline)

    def deleteData(self,key):
        """引数のkeyをkeys()から削除する"""
        #todoリストのデータを削除する
        #keyが辞書に存在しなければキャンセルする
        if not key in self.todo_data.keys():
            print("No such list")
        else:
            removed_value = self.todo_data.pop(key)
            print("以下のリストを削除しました")
            print('todo:',removed_value.todo)
            print('deadline:',removed_value.deadline)

    def saveToCsv(self):
        #docstring
        """todoリストをcsvへ保存する"""
        #todo.csvを書き込みモードで開く
        f = open("todo.csv","w")

        #ヘッダ書き込み用writer
        header_writer = csv.writer(f,lineterminator = '\n')
        #内容書き込み用writer
        #lineterminator で改行する
        writer = csv.writer(f,lineterminator = '\n')

        #ヘッダ書き込み
        header_list = ['key','todo','year','month','day']
        header_writer.writerow(header_list)

        #keys()で辞書のキー一覧を取得
        for key in self.todo_data.keys():
            #csv書き込み用の配列
            #key,todo,year,month,day
            a = [key, self.todo_data[key].todo, self.todo_data[key].deadline.year, self.todo_data[key].deadline.month, self.todo_data[key].deadline.day]
            #書き込む
            writer.writerow(a)
        f.close()
        print("saving completed.")

    def makeKey(self,type):
        #docstring
        """キーをプログラム側で決定する関数"""
        #ランダム関数を生成する
        import random
        #'Ind'のとき
        if type == 'Ind':
            #0-99の間のランダムな整数を取得する
            while True:
                #重複がなくなるまで繰り返すが、これではtodoリストが増えたときにおそくなってしまう
                randint = random.randint(0,99)
                key = '{0:s}{1:02d}{2:s}'.format(type,randint,self.member)
                if key in self.todo_data.keys():
                    #作成したkeyが既に存在するなら
                    continue
                else:
                    return key

        #'Pro'のとき
        elif type == 'Pro':
            while True:
                randint = random.randint(0,99)
                key = '{0:s}{1:02d}'.format(type,randint)
                if key in self.todo_data.keys():
                    #作成したkeyが既に存在するなら
                    continue
                else:
                    return key


    def run(self):
        #機能選択画面を表示する
        while True:
            print("-------------------------------------------")
            print("あなたのメンバーID:< {0:s} >".format(self.member))
            print("1.個人のtodoリストに追加する")
            print("2.個人のtodoリストを表示する")
            print("3.プロジェクトのtodoリストに追加する")
            print("4.プロジェクトのtodoリストを表示する")
            print("8.csvファイルに保存する({0:s})".format(self.fileName))
            print("9.終了")
            print("番号を選んでください(1,2,3,4,8,9):",end="")
            num = input().strip()
            if num == '1':
                self.addToIndivisual()
            elif num == '2':
                self.listIndiData()
            elif num == '3':
                self.addToProject()
            elif num == '4':
                self.listProjectData()
            elif num == '8':
                self.saveToCsv()
            elif num == '9':
                break
            else:
                #選択待ち画面に戻る
                continue

#ここからアプリケーションを動かす本体
todo_manager = TodoManager("todo.csv")

todo_manager.setup()
todo_manager.run()
  • 0
  • 1
anonymous タイトルなし
Python
# -*- coding:utf-8 -*-
import csv
import datetime
import re

#datetimeの使い方
#print(datetime.date(2017,11,12))
# => 2017-11-12

#機能<--Projective Todo-->
#個人用のtodoの作成、削除、表示ができる
#リーダー(0番)のみプロジェクト用のtodoリストの作成、削除ができる
#リーダー以外はプロジェクトTodoの表示のみ

#csvファイルの名前=>"todo.csv"


#データを保持するクラス
class TodoInfo:
    def __init__(self,todo,deadline):
        #TodoInfoクラスを初期化する
        #引数のselfはあまり考えなくて良い
        #self移行が引数となる
        #self.todoなどはクラス変数
        self.todo = todo
        #データ保持用の辞書
        self.deadline = deadline

    def toFormattedString(self,key):
        """todoリストを表示するための書式設定"""
        print('todo:',end="")
        print(self.todo)
        print('\tkey:',end="")
        print(key)
        print('\tdeadline:',end="")
        print(self.deadline)

#アプリケーションを動かすクラス
class TodoManager:
    def __init__(self,fileName):
        #TodoManagerクラスを初期化する
        self.fileName = fileName
        self.todo_data = {}

    def setup(self):
        """メンバーIDの入力とcsvからの読み込み"""
        #従業員Noを入力する
        #リーダーは0番
        while True:
            self.member = input("メンバーID(0-9):")
            if not self.member.isdigit():
                #数字でないなら
                print("不正な値です")
                continue
            else:
                if 0 <= int(self.member) and int(self.member) <= 9:
                    break
                else:
                    print("不正な値です")
                    continue
        #csvファイルからデータを読み込む
        #todo.csvを読み込みモードで開く
        f = open(self.fileName,"r")
        lines = f.readlines()
        reader = csv.reader(lines)
        #1行読み飛ばす
        header = next(reader)

        #lineは配列として読み込まれるので、インデックスでそれぞれ代入
        for line in reader:
            #リストから対応する変数に代入
            key, todo, year, month, day = line
            deadline = datetime.date(int(year),int(month),int(day))
            self.todo_data[key] = TodoInfo(todo,deadline)
        #ファイルを閉じる
        f.close()


    def listProjectData(self):
        """プロジェクトTodoを表示する"""
        #プロジェクトtodoを表示する
        print("-------------------------------------------")
        print('<-- Project Todo -->')
        #検索用パターンの設定
        search_key = '^Pro'
        while True:
            #ヒット件数
            count = 0
            #検索処理
            for key in self.todo_data.keys():
                m = re.findall(search_key,key)
                if m:
                    count += 1
                    #TodoInfoクラスのtoFormattedString()を利用する
                    self.todo_data[key].toFormattedString(key)

            #削除する処理
            #countが0以上かつリーダー(0番)なら
            if count > 0 and self.member == '0':
                print("-------------------------------------------")
                print('削除したいリストのキーを選択してください(q to cancel):',end="")
                delete_key = input().strip()
                if delete_key == 'q':
                    break
                else:
                    self.deleteData(delete_key)
            else:
                break

    def listIndiData(self):
        """個人Todoを表示する"""
        #個人todoを表示する
        print("-------------------------------------------")
        print('<-- Indivisual Todo -->')
        #検索用パターンの設定
        search_key = 'Ind..{0:s}'.format(self.member)
        while True:
            #ヒット件数
            count = 0

            #検索処理
            for key in self.todo_data.keys():
                m = re.findall(search_key,key)
                if m:
                    count += 1
                    #TodoInfoクラスのtoFormattedString()を利用する
                    self.todo_data[key].toFormattedString(key)

            #削除する処理
            if count > 0:
                print("-------------------------------------------")
                print('削除したいリストのキーを選択してください(q to cancel):',end="")
                delete_key = input().strip()
                if delete_key == 'q':
                    break
                else:
                    #deleteData()のあとはまた繰り返し
                    self.deleteData(delete_key)
            else:
                break

    def addToIndivisual(self):
        """個人Todoに追加する"""
        print("-------------------------------------------")
        #個人todoリストへ追加する
        #項目名、期日の入力を求める
        #キーは関数で生成する

    def addToProject(self):
        """プロジェクトTodoに追加する"""
        print("-------------------------------------------")
        #プロジェクトtodoへ追加する
        #リーダー(0番)でなければ追加できない
        #項目名、期日の入力を求める
        #キーは関数で生成する

    def deleteData(self,key):
        """引数のkeyをkeys()から削除する"""
        #todoリストのデータを削除する
        #keyが辞書に存在しなければキャンセルする
        if not key in self.todo_data.keys():
            print("No such list")
        else:
            removed_value = self.todo_data.pop(key)
            print("以下のリストを削除しました")
            print('todo:',removed_value.todo)
            print('deadline:',removed_value.deadline)

    def saveToCsv(self):
        #docstring
        """todoリストをcsvへ保存する"""
        #todo.csvを書き込みモードで開く
        f = open("todo.csv","w")

        #ヘッダ書き込み用writer
        header_writer = csv.writer(f,lineterminator = '\n')
        #内容書き込み用writer
        #lineterminator で改行する
        writer = csv.writer(f,lineterminator = '\n')

        #ヘッダ書き込み
        header_list = ['key','todo','year','month','day']
        header_writer.writerow(header_list)

        #keys()で辞書のキー一覧を取得
        for key in self.todo_data.keys():
            #csv書き込み用の配列
            #key,todo,year,month,day
            a = [key, self.todo_data[key].todo, self.todo_data[key].deadline.year, self.todo_data[key].deadline.month, self.todo_data[key].deadline.day]
            #書き込む
            writer.writerow(a)
        f.close()
        print("saving completed.")

    def makeKey(self,type):
        #docstring
        """キーをプログラム側で決定する関数"""
        #ランダム関数を生成するモジュール
        import random
        #'Ind'のとき
        if type == 'Ind':
            #0-99の間のランダムな整数を取得する
            while True:
                #重複がなくなるまで繰り返すが、これではtodoリストが増えたときにおそくなってしまう
                randint = random.randint(0,99)
                key = '{0:s}{1:02d}{2:s}'.format(type,randint,self.member)
                if key in self.todo_data.keys():
                    #作成したkeyが既に存在するなら
                    continue
                else:
                    return key

        #'Pro'のとき
        elif type == 'Pro':
            while True:
                randint = random.randint(0,99)
                key = '{0:s}{1:02d}'.format(type,randint)
                if key in self.todo_data.keys():
                    #作成したkeyが既に存在するなら
                    continue
                else:
                    return key


    def run(self):
        #機能選択画面を表示する
        while True:
            print("-------------------------------------------")
            print("あなたのメンバーID:< {0:s} >".format(self.member))
            print("1.個人のtodoリストに追加する")
            print("2.個人のtodoリストを表示する")
            print("3.プロジェクトのtodoリストに追加する")
            print("4.プロジェクトのtodoリストを表示する")
            print("8.csvファイルに保存する({0:s})".format(self.fileName))
            print("9.終了")
            print("番号を選んでください(1,2,3,4,8,9):",end="")
            num = input().strip()
            if num == '1':
                self.addToIndivisual()
            elif num == '2':
                self.listIndiData()
            elif num == '3':
                self.addToProject()
            elif num == '4':
                self.listProjectData()
            elif num == '8':
                self.saveToCsv()
            elif num == '9':
                break
            else:
                #選択待ち画面に戻る
                continue

#ここからアプリケーションを動かす本体
todo_manager = TodoManager("todo.csv")

todo_manager.setup()
todo_manager.run()
  • 0
  • 0
anonymous タイトルなし
Python
# -*- coding:utf-8 -*-
import csv
import datetime
import re

#datetimeの使い方
#print(datetime.date(2017,11,12))
# => 2017-11-12

#機能<--Projective Todo-->
#個人用のtodoの作成、削除、表示ができる
#リーダー(0番)のみプロジェクト用のtodoリストの作成、削除ができる
#リーダー以外はプロジェクトTodoの表示のみ

#csvファイルの名前=>"todo.csv"


#データを保持するクラス
class TodoInfo:
    def __init__(self,todo,deadline):
        #TodoInfoクラスを初期化する
        #引数のselfはあまり考えなくて良い
        #self移行が引数となる
        #self.todoなどはクラス変数
        self.todo = todo
        #データ保持用の辞書
        self.deadline = deadline

    def toFormattedString(self,key):
        """todoリストを表示するための書式設定"""
        print('todo:',end="")
        print(self.todo)
        print('\tkey:',end="")
        print(key)
        print('\tdeadline:',end="")
        print(self.deadline)

#アプリケーションを動かすクラス
class TodoManager:
    def __init__(self,fileName):
        #TodoManagerクラスを初期化する
        self.fileName = fileName
        self.todo_data = {}

    def setup(self):
        """メンバーIDの入力とcsvからの読み込み"""
        #従業員Noを入力する
        #リーダーは0番
        while True:
            self.member = input("メンバーID(0-9):")
            if not self.member.isdigit():
                #数字でないなら
                print("不正な値です")
                continue
            else:
                if 0 <= int(self.member) and int(self.member) <= 9:
                    break
                else:
                    print("不正な値です")
                    continue
        #csvファイルからデータを読み込む
        #todo.csvを読み込みモードで開く
        f = open(self.fileName,"r")
        lines = f.readlines()
        reader = csv.reader(lines)
        #1行読み飛ばす
        header = next(reader)

        #lineは配列として読み込まれるので、インデックスでそれぞれ代入
        for line in reader:
            #リストから対応する変数に代入
            key, todo, year, month, day = line
            deadline = datetime.date(int(year),int(month),int(day))
            self.todo_data[key] = TodoInfo(todo,deadline)
        #ファイルを閉じる
        f.close()


    def listProjectData(self):
        """プロジェクトTodoを表示する"""
        #プロジェクトtodoを表示する
        print("-------------------------------------------")
        print('<-- Project Todo -->')
        #検索用パターンの設定
        search_key = '^Pro'
        while True:
            #ヒット件数
            count = 0
            #検索処理
            for key in self.todo_data.keys():
                m = re.findall(search_key,key)
                if m:
                    count += 1
                    #TodoInfoクラスのtoFormattedString()を利用する
                    self.todo_data[key].toFormattedString(key)

            #削除する処理
            #countが0以上かつリーダー(0番)なら
            if count > 0 and self.member == '0':
                print("-------------------------------------------")
                print('削除したいリストのキーを選択してください(q to cancel):',end="")
                delete_key = input().strip()
                if delete_key == 'q':
                    break
                else:
                    self.deleteData(delete_key)
            else:
                break

    def listIndiData(self):
        """個人Todoを表示する"""
        #個人todoを表示する
        print("-------------------------------------------")
        print('<-- Indivisual Todo -->')
        #検索用パターンの設定
        search_key = 'Ind..{0:s}'.format(self.member)
        while True:
            #ヒット件数
            count = 0

            #検索処理
            for key in self.todo_data.keys():
                m = re.findall(search_key,key)
                if m:
                    count += 1
                    #TodoInfoクラスのtoFormattedString()を利用する
                    self.todo_data[key].toFormattedString(key)

            #削除する処理
            if count > 0:
                print("-------------------------------------------")
                print('削除したいリストのキーを選択してください(q to cancel):',end="")
                delete_key = input().strip()
                if delete_key == 'q':
                    break
                else:
                    #deleteData()のあとはまた繰り返し
                    self.deleteData(delete_key)
            else:
                break

    def addToIndivisual(self):
        """個人Todoに追加する"""
        print("-------------------------------------------")
        #個人todoリストへ追加する
        #項目名、期日の入力を求める
        #キーは関数で生成する
        key = self.makeKey('Ind')
        #todoの入力
        print("todo:",end="")
        todo = input().strip()
        print("年:",end="")
        year = input().strip()
        print("月:",end="")
        month = input().strip()
        print("日:",end="")
        day = input().strip()
        #deadlineは日付で処理
        deadline = datetime.date(int(year),int(month),int(day))
        self.todo_data[key] = TodoInfo(todo,deadline)

    def addToProject(self):
        """プロジェクトTodoに追加する"""
        print("-------------------------------------------")
        #プロジェクトtodoへ追加する
        #リーダー(0番)でなければ追加できない
        if self.member != '0':
            print("warning:あなたはリーダーではありません")
        else:
            #項目名、期日の入力を求める
            #キーは関数で生成する
            key = self.makeKey('Pro')
            #todoの入力
            print("todo:",end="")
            todo = input().strip()
            print("年:",end="")
            year = input().strip()
            print("月:",end="")
            month = input().strip()
            print("日:",end="")
            day = input().strip()
            #deadlineは日付で処理
            deadline = datetime.date(int(year),int(month),int(day))
            self.todo_data[key] = TodoInfo(todo,deadline)

    def deleteData(self,key):
        """引数のkeyをkeys()から削除する"""
        #todoリストのデータを削除する
        #keyが辞書に存在しなければキャンセルする
        if not key in self.todo_data.keys():
            print("No such list")
        else:
            removed_value = self.todo_data.pop(key)
            print("以下のリストを削除しました")
            print('todo:',removed_value.todo)
            print('deadline:',removed_value.deadline)

    def saveToCsv(self):
        #docstring
        """todoリストをcsvへ保存する"""
        #todo.csvを書き込みモードで開く
        f = open("todo.csv","w")

        #ヘッダ書き込み用writer
        header_writer = csv.writer(f,lineterminator = '\n')
        #内容書き込み用writer
        #lineterminator で改行する
        writer = csv.writer(f,lineterminator = '\n')

        #ヘッダ書き込み
        header_list = ['key','todo','year','month','day']
        header_writer.writerow(header_list)

        #keys()で辞書のキー一覧を取得
        for key in self.todo_data.keys():
            #csv書き込み用の配列
            #key,todo,year,month,day
            a = [key, self.todo_data[key].todo, self.todo_data[key].deadline.year, self.todo_data[key].deadline.month, self.todo_data[key].deadline.day]
            #書き込む
            writer.writerow(a)
        f.close()
        print("saving completed.")

    def makeKey(self,type):
        #docstring
        """キーをプログラム側で決定する関数"""
        import random
        #'Ind'のとき
        if type == 'Ind':
            #0-99の間のランダムな整数を取得する
            while True:
                #重複がなくなるまで繰り返すが、これではtodoリストが増えたときにおそくなってしまう
                randint = random.randint(0,99)
                key = '{0:s}{1:02d}{2:s}'.format(type,randint,self.member)
                if key in self.todo_data.keys():
                    #作成したkeyが既に存在するなら
                    continue
                else:
                    return key

        #'Pro'のとき
        elif type == 'Pro':
            while True:
                randint = random.randint(0,99)
                key = '{0:s}{1:02d}'.format(type,randint)
                if key in self.todo_data.keys():
                    #作成したkeyが既に存在するなら
                    continue
                else:
                    return key


    def run(self):
        #機能選択画面を表示する
        while True:
            print("-------------------------------------------")
            print("あなたのメンバーID:< {0:s} >".format(self.member))
            print("1.個人のtodoリストに追加する")
            print("2.個人のtodoリストを表示する")
            print("3.プロジェクトのtodoリストに追加する")
            print("4.プロジェクトのtodoリストを表示する")
            print("8.csvファイルに保存する({0:s})".format(self.fileName))
            print("9.終了")
            print("番号を選んでください(1,2,3,4,8,9):",end="")
            num = input().strip()
            if num == '1':
                self.addToIndivisual()
            elif num == '2':
                self.listIndiData()
            elif num == '3':
                self.addToProject()
            elif num == '4':
                self.listProjectData()
            elif num == '8':
                self.saveToCsv()
            elif num == '9':
                break
            else:
                #選択待ち画面に戻る
                continue

#ここからアプリケーションを動かす本体
todo_manager = TodoManager("todo.csv")

todo_manager.setup()
todo_manager.run()
  • 0
  • 0
anonymous タイトルなし
Python
  • 0
  • 0
anonymous タイトルなし
HTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <p>アンケート</p>
  <input type="text" class="username">

  <p>Q1</p>
  <p>今の会社に満足してますか?</p>
  <div>
    <form id="Q1">
      <input name="answer1" type="radio" value="yes"> yes
      <input name="answer1" type="radio" value="no"> no
    </form>
  </div>

  <p>Q2</p>
  <p>3年以内に転職したいですか?</p>
  <div>
    <form id="Q2">
      <input name="answer2" type="radio" value="yes"> yes
      <input name="answer2" type="radio" value="no"> no
    </form>
  </div>

  <p>Q3</p>
  <p>将来の夢はありますか?</p>
  <div>
    <form id="Q3">
      <input name="answer3" type="radio" value="yes"> yes
      <input name="answer3" type="radio" value="no"> no
    </form>
  </div>

  <button class="send">回答</button>
  
  <p>回答者名</p>
  <div class="output0"></div>
  <p>Q1 回答</p>
  <div class="output1"></div>
  <p>Q2 回答</p>
  <div class="output2"></div>
  <p>Q3 回答</p>
  <div class="output3"></div>

<!-- JQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<!--** 以下Firebase **-->
<!-- The core Firebase JS SDK is always required and must be listed first -->
<script src="https://www.gstatic.com/firebasejs/7.5.2/firebase.js"></script>

<!-- TODO: Add SDKs for Firebase products that you want to use
   https://firebase.google.com/docs/web/setup#config-web-app -->

<script>
  // Your web app's Firebase configuration
  var firebaseConfig = {
    apiKey: "AIzaSyADTgX2GS5AIOfW4xxg6j5WhS1X83KU78U",
    authDomain: "gs-chat-12804.firebaseapp.com",
    databaseURL: "https://gs-chat-12804.firebaseio.com",
    projectId: "gs-chat-12804",
    storageBucket: "gs-chat-12804.appspot.com",
    messagingSenderId: "47926875368",
    appId: "1:47926875368:web:73688bca03c57e5b16e55d",
    measurementId: "G-M90TM0BZT3"
  };
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
  firebase.analytics();

  //firebaseのデーターベース(保存させる場所)を使いますよ
  const newPostRef = firebase.database().ref();
  // ここから下にjqueryの処理を書いて練習します

  $(".send").on("click",function(){
    newPostRef.push({
    username : $(".username").val(), 
    result1 : $('input[name="answer1"]:checked').val(),
    result2 : $('input[name="answer2"]:checked').val(),
    result3 : $('input[name="answer3"]:checked').val(),
  })});
  
  newPostRef.on("child_added",function(data){
    const v = data.val();
    // const k = data.key();
    const str0 = v.username
    const str1 = v.result1;
    const str2 = v.result2;
    const str3 = v.result3;
    $(".output0").append(str0);
    $(".output1").append(str1);
    $(".output2").append(str2);
    $(".output3").append(str3);
  });

</script>

</body>
</html>
  • 0
  • 1
Kohei Arai タイトルなし
Java
class Solution {
    public static int kthGrammar(int N, int K) {
    	return sol(N, K - 1);
    }
    
    public static int sol(int N, int K) {
        if (N == 1) return 0;
        int prev = sol(N - 1, K / 2);
        if (prev == 0) {
            return K % 2;
        } else {
            return (K % 2 + 1) % 2;
        }
    }
}
  • 0
  • 0
anonymous タイトルなし
Java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
  public int countNodes(TreeNode root) {
    if (root == null) {
      return 0;
    }

    int level = getLevel(root);
    int ok = 1 << (level - 1);
    int ng = 1 << level;

    // binary search between low and high
    while (ng - ok > 1) {
      int mid = (ng + ok) / 2;
      if (doesExist(root, mid)) {
        ok = mid;
      } else {
        ng = mid;
      }
    }

    return ok;
  }

  public boolean doesExist(TreeNode root, int n) {
    List<Integer> order = new ArrayList<Integer>();
    while (n > 1) {
      if (n % 2 == 0) {
        order.add(0, 0);
      } else {
        order.add(0, 1);
      }
      n /= 2;
    }
    for (int i = 0; i < order.size(); i++) {
      if (order.get(i) == 0) {
        root = root.left;
      } else {
        root = root.right;
      }
    }
    return root != null;
  }

  public int getLevel(TreeNode root) {
    int level = 0;
    while (root != null) {
      level++;
      root = root.left;
    }

    return level;
  }
    
}
  • 0
  • 1
anonymous タイトルなし
JavaScript
function genid(str) {
  // Base64に変換する版
  return Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, Utilities.newBlob("").setDataFromString(str, 'utf8').getBytes())).substr(0, 8);
  // 16進数で得たい場合は以下
  /*
  return Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, Utilities.newBlob("").setDataFromString(str, 'utf8').getBytes()).reduce(function(str,chr){
    chr = (chr < 0 ? chr + 256 : chr).toString(16);
    return str + (chr.length==1?'0':'') + chr;
  },'').substr(0,8);
  */
}

function genidTest() {
  Logger.log(genid("あいう")) // -> 31xYiCaw
  Logger.log(genid("えおか")) // -> 0W//Dj6G
  Logger.log(genid("あいう")) // -> 31xYiCaw
}
  • 0
  • 1
anonymous タイトルなし
JavaScript
function genid(str) {
  // Base64に変換する版
  return Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, str)).substr(0, 8);
  // 16進数で得たい場合は以下
  /*
  return Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, str).reduce(function(str,chr){
    chr = (chr < 0 ? chr + 256 : chr).toString(16);
    return str + (chr.length==1?'0':'') + chr;
  },'').substr(0,8);
  */
}

function genidTest() {
  Logger.log(genid("numa")) // -> DfstCa7v 又は 0dfb2d09
  Logger.log(genid("192")) // -> WKL8btOf 又は 58a2fc6e
  Logger.log(genid("numa")) // -> DfstCa7v 又は 0dfb2d09
}
  • 0
  • 1
Seiwell タイトルなし
Python
import discord
import re
import asyncio

client = discord.Client()

#起動時に動作する処理
@client.event
async def on_ready():
    print('起動しました')
    print(client.user.name)
    print(client.user.id)
    print('------')
    CHANNEL_ID = #channel_ID
    channel = client.get_channel(CHANNEL_ID)
    await channel.send('>>> Botが正常に起動しました。\n`/help`でコマンドの種類を見ることができます。')

#本処理
@client.event
async def on_message(message):
#指定した名前のチャンネル
    if message.author.bot:
        return
#指定した名前のチャンネルを指定したカテゴリに作成
    if message.content.startswith('/ch '):
        category = discord.utils.get(message.guild.categories, name='USERCATEGORY')
        category = message.guild.get_channel(category.id)
        name = message.content.split()[1] 
        new_channel = await category.create_text_channel(name)
        reply = f'{new_channel.mention} を作成しました'
        await message.channel.send(reply)
#指定した名前のチャンネルを削除
    if message.content.startswith('/deletech'):
        category = discord.utils.get(message.guild.categories, name='USERCATEGORY')
        category = message.guild.get_channel(category.id)
        name = message.content.split()[1] #チャンネル名を取得
        channel = discord.utils.get(category.text_channels,name=name) #チャンネルを名前から取得
        reply = f'{channel}を削除しました'
        await message.channel.send(reply)
        await channel.delete() #削除

#すべてのメッセージを削除する
    if message.content == '/cleanup':
        if message.author.guild_permissions.administrator:
            await message.channel.purge()
            await message.channel.send('>>> すべてのメッセージを削除しました。')
        else:
            await message.channel.send('>>> 管理者権限がないためこの機能は使用できません。')

#help
    if message.content == "/help":
        page_count = 0 #ヘルプの現在表示しているページ数
        page_content_list = ["ヘルプコマンドです。\n➡を押すと次のページへ\nこのサーバーの使い方\n基本的な会話は、<#651383585655357453>でお願いします。", #<#>にchannel_IDを入力
            "ヘルプコマンド2ページ目です。\n➡で次のページ\n⬅で前のページ",
            "ヘルプコマンド最後のページです。\n⬅で前のページ"] #ヘルプの各ページ内容
        
        send_message = await message.channel.send(page_content_list[0]) #最初のページ投稿
        await send_message.add_reaction("➡")

        def help_react_check(reaction,user):
            '''
            ヘルプに対する、ヘルプリクエスト者本人からのリアクションかをチェックする
            '''
            emoji = str(reaction.emoji)
            if reaction.message.id != send_message.id:
                return 0
            if emoji == "➡" or emoji == "⬅":
                if user != message.author:
                    return 0
                else:
                    return 1

        while not client.is_closed():
            try:
                reaction,user = await client.wait_for('reaction_add',check=help_react_check,timeout=40.0)
            except asyncio.TimeoutError:
                return #時間制限が来たら、それ以降は処理しない
            else:
                emoji = str(reaction.emoji)
                if emoji == "➡" and page_count < 2:
                    page_count += 1
                if emoji == "⬅" and page_count > 0:
                    page_count -= 1

                await send_message.clear_reactions() #事前に消去する
                await send_message.edit(content=page_content_list[page_count])

                if page_count == 0:
                    await send_message.add_reaction("➡")
                elif page_count == 1:
                    await send_message.add_reaction("⬅")
                    await send_message.add_reaction("➡")
                elif page_count == 2:
                    await send_message.add_reaction("⬅")
                    #各ページごとに必要なリアクション


client.run("TOKEN")
  • 0
  • 1