Scnsh Blog

技術的なことを書きたい場所

ABC141

AtCoder Begineer Contest 141 に参加。

f:id:scnsh:20190923190521p:plain

問題 解答 結果
A AC
B AC
C AC
D TLE
E TLE
F - -

3完、3ペナ

A - Weather Prediction

3分ぐらいで解けた。

先頭の文字だけで区別すればOK

B - Tap Dance

7分ぐらい。

RとLの違いだけを気にすれば良い。

C - Attack Survival

10分ぐらい。

Nが10の5乗なので、単純にループでまわしても解ける。

一応Pypyで実行してAC。

D - Powerful Discount Tickets

この問題で残り時間をほとんど溶かした。

方針と実装はそれぞれできたが、NとMがそれぞれ10の5乗なので、O(NM)の計算量になると制限時間オーバーになる。

回避方法が分からなかったが、優先度付きQueueを使えばO(M log N) となり解けた。

Pythonだとheapq

Submission #7547729 - AtCoder Beginner Contest 141

最小を最大に入れ替えるために-をつけるのはよくやる方法。

E -Who Says a Pun?

解き方が分からず、力任せにやったら案の定TLE

Z-Algorithm なるものを使うらしい。

知ってないと解けない問題ぽかったなぁ。

Submission #7548216 - AtCoder Beginner Contest 141

F - Xor Sum 3

到達できず

総括

D問題で計算量を減らす方法を探しているうちにタイムオーバー E問題もアルゴリズムを知っていれば解けた問題 やはり基本問題もっと沢山解く必要があることがわかった回だった。

AGC38

AtCoder Grand Contest 38 に参加。

  • どれも解けなかったので、ratingつかず。
  • 集中できなかったので、A問題解けない時点で諦めてた

A - 01 Matrix

atcoder.jp

どういう形になれば条件を満たすパターンかわからず、終了。

解説を見てなるほどと思った。

部分行列を単純に作るだけで、ACなった。

Submission #7667154 - AtCoder Grand Contest 038

Noになるケースが実はないってそんなのあるんかいとは思ったけど。

B - Sorting a Segment

atcoder.jp

解けず。

C - LCMs

atcoder.jp

解けず。

D - Unique Path

atcoder.jp

解けず。

E - Gachapon

atcoder.jp

解けず。

F - Two Permutations

atcoder.jp

解けず。

総括

過去何度かA問題を解いたことがあったので、今回もいけるかと思ったけどそんなことなかった。

まだまだABCで頑張る。

PythonTips

色々とメモしておく

便利機能

再帰呼び出しの回数の上限値を設定

import sys
sys.setrecursionlimit(1000000) # 最大数が1000000に

間違えやすい内容

dequeでスタックとキューの使い分け

deque.append() # 要素の追加

deque.pop() #LIFO : スタック
deque.popleft() # FIFO : キュー 

2次元配列の初期化

2d_array = [[0]*3]*5 # こうやると他の行と共有してしまう
2d_array = [[0 for i in range(3)] for j in range(5)] #こういう形で宣言する

高速化(最適化)

appendするときは、listではなくtapleを使う

q = deque.append((x,y)) # 早い
q = deque.append([x,y]) # 遅い

heapq

データの追加や最大/最小を常に取りたいデータ構造で最速

AtCoderでお勉強

最近、AtCoderでプログラミングをもっかい勉強するのにハマってる。

atcoder.jp

というのも転職してからマネージメント寄りから、エンジニア業務をすることになって色々な知識不足に悩まされているからだ。CS系の大学院まで出たはずなんだけど(汗

かといって普通に本を読んだりしているだけだと面白くない...。

ということで競技プログラミングのコンテストに参加しながら、業務で使うPython3を勉強している。(言語は選べます)

競技プログラミングAtCoder)を使って学ぶメリットは、

  • コンテスト参加でスコアが出るので、自分のレベルや上達も確認できてモチベーションになる
  • 問題の解説や他の人の回答も見ることができるので、学習しやすい

がありそう

ちなみに、AtCoder に関しては問題の解説などネット上に資料が豊富にある。

例えば、

など

今後の予定としては、解説を読みながら問題に慣れて、さっさと緑になりたい(願望)。

ROS環境で最新のGazeboを取得する

ROS環境でGazeboを動かしたいという人は多いと思いますが、ROS環境の導入には公式ページのページを参考にコマンドを使ってインストールすることが多いと思います。

~$ sudo apt-get install ros-kinetic-desktop-full

しかし、この状態でインストールするとGazeboのバージョンは、7.0になってしまい、修正されたバージョン(例えば7.11など)が選択できません。

そこで、上記のapt-getを行う前に下記のコマンドを実行してGazeboのリストを更新します。

~$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
~$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
~$ sudo apt-get update

この状態でrosのインストールを行えば、最新版がインストールできます。

もし、7.0が既にインストールされている場合には、上記コマンド実行後に

~$ sudo apt-get purge ros-kinetic-*
~$ sudo apt-get install ros-kinetic-desktop-full

とすることで更新可能です。

Gazebo9の利用について

Gazebo自身の最新はGazebo9.0ですが、ros-kineticのサポートが7.XXまでとなっています。

次のrosの長期サポート版が出るまではGazebo7を使っていたほうが良さそうです。

参考資料

ゲームで使えるアイコン素材の集め方

最近はスマホゲーム開発を再開しているScnshです。

 

スマホゲームの作成にあたって、一つ問題となるのが素材をどうするかです。

私の作成しているゲームは、カードゲームのためカードの絵柄とアイコンぐらいしか素材を使いません。

UnityにはAssetStoreという素材を有償・無償色々とありますが、UnityEngineにインポートして利用することが可能です。

例えば、以下のアセットが最初に作り始めるときには便利かと思います。

assetstore.unity.com

AssetStore上に存在するということで、Unityで使うときには気兼ねなく使えます。

 

しかし、欲しいアイコンがない場合には アイコン素材を公開しているサイトの中で、探すことも時には必要になります。

そこで、サイトの中でも特に権利関係で自由度が高いものをピックアップして紹介したいと思います。

 

icon rainbowicon-rainbow.com

このサイトのアイコンは種類が豊富にもかかわらずに、

  • 会員登録などの必要もない
  • 商用利用可能
  • さらに商用利用時の権利等の記載も必要ない

ということでかなり自由に使うことができます。

 

ただし利用したアプリ等がリリースされた際には連絡してほしいとのことですので、私も無事にリリースできた際には連絡するつもりです。

 

他にも色々とあるかと思いますが、見つけ次第、追記していきます。

スマホゲームの作成

最近、以前作成していたUnityゲームのiOS版の開発を再開しています。

 

ちなみに、Android版は既に作成してリリースしています。

play.google.com

ドイツの有名なカードゲームをアプリ化したものになります。

色々とグレーかもしれませんが、今のところは公開停止などにはなっていません。

(無料だからか?)

 

iOS版では基本ルールはそのままにアレンジしてリリースする予定です。

 

使っているUnityアセット紹介

技術ブログということで情報紹介も少し。

assetstore.unity.com

DOTweenと呼ばれるSpriteのTween生成をアシストするアセットです。

とても有名なアセットなので、今更説明も必要ないかと思いますが2Dのカードゲーム作成に置いてはかなり有用です。

有料版もありますが、無料版でも基本的な動きが使えるので私の場合は事足りています。