のみろぐ

のみろぐ

いろいろめもするやつ

山型足し算を山登り法で計算してみる

問題

ランダムに置いてみる(96億)

山登り法で問題を解く

  • 山登り法は、いまの状態を少しいじってスコアが良ければ更新するという操作を何回も行うやつ
  • 少しいじる操作について
    • 高さを+-1にする
    • x, y座標を上下左右に動かす
  • 一気に全部を実装するのは大変だから、少しずつやってく

高さを削る操作を行う(9766422900)

  • 計算量は考えずにとりま愚直にやる
  • 成功→コード

高さを削る操作と足す操作を両方やる(9987857970)

  • 計算量は考えずにとりま愚直にやる
  • 成功→コード

x, y座標を上下左右に動かす操作を行う(9988844686)

  • 計算量は考えずに愚直にやる
  • 成功→コード

高さ、x, y座標の変化を全て行う(9994851282)

参考にしたもの

  • 誰でもできる焼きなまし法という記事を参考にして書いた
  • 引用になるけど、以下のテンプレートがわかりやすかった(記事の内容もわかりやすい)
//状態
struct STATE {
};

// 状態の初期化
void init (STATE& state) {
}

// 状態遷移
void modify (STATE& state) {
}

// 状態のスコア計算
int calc_score (STATE& state) {
}

// 山登り法
void mountain() {
    STATE state;
    init(state);
    double start_time; // 開始時刻
    while (true) { // 時間の許す限り回す
        double now_time; // 現在時刻
        if (now_time - start_time > TIME_LIMIT) break;

        STATE new_state = state;
        modify(new_state);
        int new_score = calc_score(new_state);
        int pre_score = calc_score(state);

        if (new_score > pre_score) { // スコア最大化の場合
            state = new_state;
        }
    }
}

感想

  • 二年前くらいに70億点くらいしかとれてなかったので、高い得点出せてよかった

これから

git stashメモ

git stashとは?

  • コードを一時避難するのに使えるコマンド
  • 英語のstashは日本語だと「こっそりしまう」や「隠す」の意味がある(なんか可愛い)

コマンド

stash一覧を表示

  • スタッシュ番号は特定のstashを復活させたり削除したい時に使う
$ git stash list
stash@{スタッシュの番号}: stashを行ったブランチ名 ハッシュ、コメント

stashを保存する

$ git stash save # コメントをつけずにstashを保存
$ git stash # 同上。saveは省略できる
$ git stash save コメント # コメントをつけてstashを保存

stashを復活させる

  • applyはstashを削除せずに復活させる
$ git stash apply # 直近のstashを復活させる
$ git stash apply n # 番号nのstashを復活させる

stashを削除する

$ git stash drop # 直近のstashを削除
$ git stash drop n # 番号nのstashを削除

$ git stash clear # stashを全て削除する

stashを復活 & stashを削除

  • git stash applygit stash dropを同時に行えるのがgit stash pop
$ git stash pop # 直近のstashをpop
$ git stash pop n # 番号nのstashをpop

使用するシーン

  • 作業を中断して別のブランチに切り替えたい時

  • 間違えて違うブランチでコード書き始めちゃった時

  • git stashでコードを退避させてから、ブランチを切り替えてgit stash popをする、みたいな感じで対処できる。

メモ

参考記事

ローカルでGASをいじる

GASとは?

  • JSベースの言語
  • Googleのサービス(スプレッド、ドキュメント、Gmailなど)と連携して便利なことができる
  • ブラウザ上でコードを書ける

ローカルでGASいじりたい

  • ブラウザでコード書くのだるい

環境構築

GASとの連携に必要なもの

Clasp

  • GASプロジェクトをローカルで開発するためのツール。
  • Googleのログイン周りとかコードの反映をこいつに任せるの不安だったけど、Googleが作ったやつだから多分大丈夫。

Claspをインストール

  • コマンド一発!楽でいいね!
$ npm install -g @google/clasp

Claspにログイン(エラー吐いた)

  • 楽じゃねぇじゃん。
  • エラーでググると、このIssueがみつかる
  • Issueにはnodeのバージョンをv14.xにしたらエラー吐かなくなったよ!みたいなことが書いてあった。
    • 全部終わった後にドキュメントみたけど、The library requires NodeJS version >= 10.3.0.って書いてあった。14系じゃなくてもいいっぽい。
$ clasp login
(略)
TypeError: Cannot destructure property `access` of 'undefined' or 'null'.
    at Object.<anonymous> 
(略)

Nodeのバージョンを更新

  • v14.0.0のnodeを入れることにした。
  • いろいろ頑張った.
$ node -v # nodeのバージョンを確認
v8.10.0
$ nodebrew ls-remote # インストールできるnodeのバージョンを確認 → 14.0.0が見つかった
$ nodebrew install-binary v14.0.0 # 14.0.0を入れる
$ nodebrew use v14.0.0 # このバージョンを使用する。
$ node -v # nodeのバージョンを確認
v8.10.0 # なんでやねん

$ which node # nodeの場所を確認すると、nvmを使ってるみたい
/Users/ユーザー名/.nvm/versions/node/v8.10.0/bin/node
$ vim ~/.zshrc # 開くと、nodebrew → nvmの順で設定書いてたからnvmが優先されたっぽい。nvmの設定を消した

$ source ~/.zshrc # 設定ファイル読み直し
$ node -v # 勝った
v14.0.0
  • 本来は以下のコマンドだけでOK
$ nodebrew install-binary v14.0.0 # 14.0.0を入れる
$ nodebrew use v14.0.0 # このバージョンを使用する。

Claspにログイン(エラー吐かなかった。えらい)

  • 今度はエラー吐かなかった。
  • 以下のコマンドを実行するとブラウザが開いて認証画面が出てくるからOKする。
  • これでclasp使える状態になった!やったね!!
$ clasp login

Claspの操作

スクリプトをclone

  • URLじゃなくてスクリプトのIDでもいいけど、URLコピペした方が楽だと思う。
$ clasp clone "スクリプトのURL"

スクリプトをpull

$ clasp pull

スクリプトをpush

  • pushすると、Google App ScriptのAPI設定をオンにしてって言われる。
  • 出力されたURLに飛ぶと、設定できる
  • オフになってたからオンにした
$ clasp push
- Pushing files...Push failed. Errors:
GaxiosError: User has not enabled the Apps Script API. Enable it by visiting https://script.google.com/home/usersettings then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
(略)
  • オンにしたらpushできた!やったね!
$ clasp push
└─ Code.js
└─ appsscript.json
Pushed 2 files.

まとめ

Clasp導入時に必要なもの

メモ

macでHaskellやってみた

Haskellとは?

モチベーション

環境構築

Haskell実行に必要なもの

GHC

Stack

  • Stackは、Haskellに必要なものをいい感じにインストールしてくれるやつ
  • GHCのインストールはこいつがやってくれる。
  • 昔はCabalとかHaskell Platformってやつが使われてたけど、今はStack使うのが主流っぽい

手順

  1. brew install haskell-stackを実行してstackをインストール
    • インストール完了後、stack --versionでバージョンが表示されればOK
  2. stack setupを実行する
    • GHCのインストールやらなんやらが行われる
    • ちょっと時間かかる
  3. おしまい!!

Hello, World!

インタラクティブモードで実行する

Prelude> "Hello, World!"
"Hello, World!"
Prelude> putStrLn "Hello World!"
Hello World!
Prelude> 1 + 2
3
Prelude> 123 - 123
0
Prelude> :q
Leaving GHCi.

コンパイルして実行する

  • hello.hsというファイルを作って以下を記述(ファイル名はなんでもいい。常識の範囲内で)
main = putStrLn "Hello, World!"
$ stack ghc hello.hs # コンパイル
$ ./hello # 実行
Hello, World!
  • やった!できた!!

本質的な環境構築と動作確認はこれで終了〜

追加の設定

Stackのエイリアス設定

  • いちいちstackって打つのめんどいからエイリアス設定する
  • ~/.zshrcに以下を書き込む(使ってるシェルによってファイルは違う)
  • --は調べても出てこなかった。意味はわからない(えー)
alias ghci='stack ghci'
alias ghc='stack ghc --'
alias runghc='stack runghc --'

インタラクティブモードのプロンプトに色をつける

  • インタラクティブモード使ってみたけど、色が付いてないからテンション上がらんし見づらい
  • ホームディレクトリに.ghciってファイルを作って、そこに設定を書き込めばOK
:set prompt "\ESC[34m\STXghci> \ESC[m\STX"
  • これを参考にして書いた。ANSIエスケープシーケンスで書かれてるみたい
  • 本当はhscolourってやつ使いたかったんだけど、よくわからんからやめた
    • これを使うとプロンプト以外にも色をつけてくれるらしい

Haskell Ide Engine+VSCode

  • Haskell Ide Engineはコードの補完とかしてくれるやつらしい
  • 頑張ったけど、使い方よくわからんくて断念(えーん)(助けて...)

参考記事

VSCodeのC++で構文ミスっても赤線表示してくれない

settings.json"C_Cpp.errorSquiggles": "Disabled"という設定を消したら直った。

追記

  • コンパイルエラーにならないのに赤線引かれるから、設定をDisabledに戻した。
  • もっといい感じにC++の環境整えたい。。。

【Rails】test_helper.rb (LoadError)

起きたこと

  • Rails Tutorial 5章のラスト、herokuにデプロイする場面でバグった。
  • git push herokuをした後、ブラウザでサイトを見に行くと以下のようなエラー画面が表示される(画像張るのめんどいから文字になってる)
Application error
An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details. You can do this from the Heroku CLI with the command
heroku logs --tail
  • よくわからんがとりあえずバグったっぽい

やったこと

  • herokuに表示されたエラー画面の指示通り、heroku logs --tailを見た
    • エラーが出てることはわかったが、原因まではわからなかった
  • heroku run rails consoleをした
    • heroku上でrails consoleを立ち上げるコマンド
    • 実行すると、最後の方にNo such file to load -- test_helper.rb (LoadError)というエラーが出てくる。どうやらtest_helper.rbというファイルが見つからないっぽい
    • 頑張ったら原因がわかった
    • 原因は、users_controller_test.rbというファイルを/app/controllers/内に作ってしまったことだった。本来は/test/controllers/内に置くべきファイルなのに。普通にミスった。ファイルの内容は以下の通り。このrequire 'test_helper'を実行した時に、LoadErrorが起こってたみたい。だから、app/controllers/users_controller_test.rbtest/controllers/users_controller_test.rbに移動した。
require 'test_helper'

class UsersControllerTest < ActionDispatch::IntegrationTest
  test "should get new" do
    get signup_path
    assert_response :success
  end
end

まとめ

  • herokuにデプロイしたらエラーが起きた
  • 原因はusers_controller_test.rbファイルの配置ミスだった
  • app/controllers/users_controller_test.rbtest/controllers/users_controller_test.rbに移動することで解決した。

  • でも、rails serverで動かした時はエラー起きなかったんだよなぁ。なんでだろ?わからん

herokuにデプロイできない

Railsチュートリアルやってたらバグった。 1章目で詰まるとか泣ける。

git push heroku masterするとこんなの出てくる

$git push heroku master

....
(略)
....

remote: 
To https://git.heroku.com/hogehoge.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/hogehoge.git'

調べる

  • 調べてもよくわからん。
  • でも、heroku周りのエラーなのはわかった。

解決策

Herokuを消して、作り直した

  • Herokuのアプリ管理画面のSettings→Delete appからアプリを削除する
  • git remote rm herokuでremoteにあるherokuを削除する
  • heroku createでアプリを作り直す
  • git push heroku masterでデプロイ
  • 完了〜

多分もっといい解決方法があるんだろうけど、よくわからん。

gitも全然わからん。

とりまチュートリアルを終わらせたい。

参考記事