Python 各桁の和を求める
はじめに
AtCoderのABC0838の問題をしていて、 思いつけなくて悔しかったやり方を見たのでメモ
やりたかったこと
各桁の数字を足した値を求める
strを用いた方法
python、for文で文字列の一文字ずつ順番に参照できることを利用した方法
def digit_sum2(num): total = 0 for digit in str(num): total += int(digit) return total
提出していたコード
digit_sum関数内で、値を10で割った余りを求め、 その後桁をずらす方法で実装していた。
def digit_sum(num): total_num = 0 while num > 0: total_num += num % 10 num //= 10 return total_num num_list= [] n, a, b = map(int, input().split()) for i in range(1,n+1): num = digit_sum(i) if num >= a and num <= b: num_list.append(i) print(sum(num_list))
さいごに
アルゴリズムの引き出しが上手く開かなかったです。 競プロは他の方の考え方を知れていいですね。
Unity1週間ゲームジャム[つながる]"ふらいんぐつながりまゆげ"を作った話
はじめに
今回も参加しましたUnity1週間ゲームジャム!! 今回も振り返っておきましょう。
サムネとイラストは、はいき丸さん作成です。 はいき丸 (@haikimaru) | Twitter
めちゃイカしたシャツをデザインしてもらいました。
リンク
ここからあそべます。
ボリュームとか事前に考えたこと
今回は時間が確保できず、作業できても1日程度でした。
そのため、初めから大規模なものは考えず、 簡単操作ですぐに結果がわかるようなゲームデザインを考えました。
あと32時間でつながるゲーム作ります
— はこね (@hakone_san) March 15, 2019
実作業時間は10時間程度でした。
システム周り
ペイント機能
テクスチャへの書き込みは下記の記事を参考にさせていただきました。
はこねこが描かれた画像の上に、透明なテクスチャを重ねています。
- 少し左にずらした様子
- わかりにくいですが透明なものがあります
透明なテクスチャに眉毛を描くようにすることで、 透明なテクスチャを動かすことで、眉毛のみが飛べるようにしました。
画像ツイート機能
眉毛を描くのが大きなポイントのため、描いた眉毛をツイートして共有できたほうが面白いと考え実装しました。
画像付きのツイート機能は下記の記事を参考にさせていただきました。
imgurを使用しています。
マウス移動量
X軸、Y軸のマウスの移動量の絶対値を取得し、 多い値をインク(まゆげーじ)から引くようにしています。
float mouse_x_delta = Input.GetAxis("Mouse X"); float mouse_y_delta = Input.GetAxis("Mouse Y"); ink_value -= Mathf.Max(Mathf.Abs(mouse_x_delta),Mathf.Abs(mouse_y_delta));
飛行量の算出
飛行する距離は、完全なランダムではなく、 マウスの移動距離や、場所、残りインクの量によって 乱数の最大値、最小値を決定しています。
条件を満たすほど飛距離が伸びるようにしています。
fly_time = Random.Range(randMin,randMax);
カメラの動き
カメラの動きを眉毛に合わせてしまうとはこねこが見えなくなってしまうため、
まゆげの上昇にあわせてカメラを後ろに引くようにしています。
if(GameManager.game_mode == GameManager.GAME_MODE.FLYING){ this.gameObject.transform.Translate ( 0, camera_y_speed, -camera_z_speed); }
素敵なつながり眉毛
素敵なまゆげ?を描いていただいたので、いくつか紹介いたします。
餌をあたえないでください
わたしの眉毛は254cm飛びました。 https://t.co/akuNV5PGwV
— くまたろ (@kumataro1299) 2019年3月17日にあうじゃん
わたしの眉毛は549cm飛びました。 https://t.co/pVBOXACuqr
— いざわ (@green071_) March 17, 2019つ よ そ う
なかなか良いガンダムだと思う
— ヤマト (@minotarow) March 17, 2019
わたしの眉毛は124cm飛びました。 https://t.co/U43iznFH6P
なんでまゆげかいてくれないんですかぁぁぁあああー!!!
おわりに
\眉毛を飛ばすってなんだよ(哲学)/
わたしの眉毛は572cm飛びました https://t.co/eYcMSf8S17 #unityroom #unity1week
— U.N.Artemisia=よもぎ (@yakumomao) 2019年3月17日
眉毛を飛ばすってなんだよ(哲学)
Django 2.xx でForeignKeyのon_deleteに関するエラーメモ
はじめに
DjangoGirlsでつまづいたところのメモ。
TypeError: __init__() missing 1 required positional argument: 'on_delete'
が発生した。
その時のコード
class Post(models.Model): author = models.ForeignKey('auth.User') title = models.CharField(max_length=200) text = models.TextField() created_date = models.DateTimeField(default=timezone.now) published_date = models.DateTimeField(blank=True,null=True) def publid(self): self.published_date = timezone.now() self.save def __str__(self): return self.title
環境
原因
ForeignKeyはversion2からは引数としてon_deleteを指定することが必須となっていた。
解決方法
第二引数にon_deleteを渡します。
from django.db import models from django.utils import timezone class Post(models.Model): author = models.ForeignKey('auth.User',on_delete=models.CASCADE) title = models.CharField(max_length=200) text = models.TextField() created_date = models.DateTimeField(default=timezone.now) published_date = models.DateTimeField(blank=True,null=True)
参考にさせていただきました
Django2.0から必須になったon_deleteの使い方 - Django2の実力をつけるチュートリアルサイトDjangoBrothers
Djangoでmigrateできなかった時の対処方法(Python 3.7.0 , Django 1.11)
はじめに
DjangoGirlsを進めていたのですが、
python manage.py migrate
を実行して
SyntaxError: Generator expression must be parenthesized
とエラーが発生したので対処方法をメモ
DjangoGirls
環境
原因
Djangoの1.11.xは、Python 3.7と互換性がないようです。
対処方法
Djangoのアップデートを行いました。
pip install -U Django
さいごに
アップデート実行後、
Successfully installed Django-2.1.7
と表示されました。 再度migrateを実行すると無事成功できました。
unity1week Meetup in Tokyo2019に参加しました。(+展示方法)
はじめに
unity1week Meetup in Tokyo2019に参加しました!
その振り返りとその時の展示方法を記録しておきます。
unity1week Meetup in Tokyo2019とは
当日の様子
こんな感じで設営してました!
— はこね (@hakone_san) 2019年1月12日
遊んでいただいた方、感想、改善提案等、ありがとうございました。
このような形で展示は初めてだったのでとても緊張していましたが、
学びもあり、開発欲に繋がる良い場となりました。#unity1week pic.twitter.com/4vGOLD0o59
設営や展示している時に自分で写真をとっていませんでした。
青木ととさんに写真をいただきました。
青木とと(ˊᗜˋ*) (@lycoris102) | Twitter
展示方法について
フリック入力でトリックをキメるため、 タブレットを準備しました。
タブレットで操作した場合、後ろにいた人がゲーム画面が見にくいかと思ったので、大きなディスプレイにプレイ画面を表示するように準備しました
実際の画像
よかった点
大きなディスプレイの映像はmacbookとミラーリングしていたため、体験者と机を挟んだ奥側にいてもタブレットの内容、操作方法スライドの内容が確認できてよかった。
ミラーリングKeynoteのため、展示中も補足説明等あればその場で編集も楽だった。
使ったアプリ
環境がMacBook+iPadだったため、Quicktime Playerの新規ムービー収録の機能を使用しました。 知ってる方も多いと思いますが、念の為。
"ファイル"→"新規ムービー収録"
iOS端末を選択
総括
スマホ,タブレット操作のゲームのため、後ろの人も画面が見やすいように大きなディスプレイにタブレットの画面を写すのはよかった。
Keynoteで操作方法を表示させていたので、説明がしやすかった気がする。
無限に続くランゲームではなく、ミッションモードとして終わりを設定していたので、ゲーム体験の区切りをつけやすかった。
人によって難易度の感じ方にばらつきがあったようなので、難易度別のミッションを用意して、誰でも成功体験を持てるようなデザインが欲しかった。
どのような観点で意見が欲しかったのか事前に決めておくべきだった。
お酒を飲んで正常な判断をしようとしたが、これからは自重する(事も考える)
当日いただいた意見
下記意見をいただきました。 せっかくいただいた意見なので、検討して実装しようと思います。
- 難易度はそのままにスピード感が欲しい(ブラー等で表現)
- 切り株の上に乗った場合はダメージ判定がないほうがいいのではないか。
- ジャンプ台でジャンプした場合、失敗する時があるのがわかりにくい。
- 横にスライドが早くて、通り抜けたと思ってスライドした時に障害物に当たってしまう。
- カプセルコライダーの方が処理が軽くなる。
開発の記録
こんな感じでやってました。
開発をはじめたのは18/12/26のようです。
ProBuilderでさくっとスノボ。
— はこね (@hakone_san) December 26, 2018
下から撮ると足が短いのが隠せる。 pic.twitter.com/eMSyjdtQax
アニメーションを作り始める
肘によりより人っぽいかな。
— はこね (@hakone_san) December 30, 2018
足が短いからどうトリックを決めたらいいものか。 pic.twitter.com/Jf5BRxcWMf
スノボしたことないです。 pic.twitter.com/mQhKUATNZD
— はこね (@hakone_san) December 30, 2018
頭の上に障害物があった時にしゃがんで回避しようとして作ったアニメーション
スノボの上を歩くはこねこ pic.twitter.com/gVL3kOOmtL
— はこね (@hakone_san) January 1, 2019
ポーズ機能の実装
Pause機能実装してみた。3...2...1...ってカウントダウンと悩んだけどこっちを使ってみました。 pic.twitter.com/PPEuBT6B9P
— はこね (@hakone_san) January 2, 2019
衝突時のアニメーションの作成
真顔こわいんですけど.... pic.twitter.com/H9odUhgMT1
— はこね (@hakone_san) January 3, 2019
はいき丸さん作成のイノシシとぴよぴよ
イノシシはオンライン対戦時のおじゃまキャラとして想定していたが、オンライン間に合いませんでした。
反応の鈍いはこねこ pic.twitter.com/AcxwPLA5tW
— はいき丸 (@haikimaru) January 3, 2019
ひよこちゃんと顔も書いたんだけど、あんまり見えないな… pic.twitter.com/rIrkxjQQmM
— はいき丸 (@haikimaru) January 4, 2019
混乱表現ぴよぴよ pic.twitter.com/5cOJDbWwD9
— はいき丸 (@haikimaru) January 4, 2019
はいき丸さんのぴよぴよとイノシシ組み込みました pic.twitter.com/ogbSHYRM36
— はこね (@hakone_san) January 5, 2019
フリックでトリックが決められるように
かわいいぞー!かっこいいぞー! pic.twitter.com/IX69tY1VvH
— はこね (@hakone_san) January 6, 2019
簡易的なあそびかたシートの作成
はこのぼ! pic.twitter.com/cZcrdArAIX
— はこね (@hakone_san) January 11, 2019
おわりに
今回のmeetupでますます頑張ろうと思えました。
運営の方々、参加された皆様ありがとうございました。
キャラクターコントローラーがコライダーに衝突した際の関数
はじめに
ControllerColliderを使用していて、他のColliderと衝突した際に何かしたい場合、 実現方法を毎度毎度調べ直しているのでいい加減メモして定着させます。
使い方
OnControllerColliderHit関数を使用します。
例
だいたいこんな感じで衝突した際にタグをみて判定するようにしています。
void OnControllerColliderHit(ControllerColliderHit hit){ Debug.Log("hit.gameObject.tag: "+hit.gameObject.tag); switch(hit.gameObject.tag){ case "Obstacle": //hoge break; case "enemy": //piyo break; default: //do nothing break; } }
スニペット
楽したいので作成しておきます。
"Caracter Controller Collider + Switch": { "prefix": "characollider", "body": [ "void OnControllerColliderHit(ControllerColliderHit hit){", "\tswitch(hit.gameObject.tag){", "\t\tcase $1:", "\t\t\t$2", "\t\t\tbreak;", "\t\tdefault:", "\t\t\tbreak;", "\t}", "}" ], "description": "OnControllerColliderHit + switch" }