院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

javascript

プログラミング力をつける

もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問作者: 増井敏克出版社/メーカー: 翔泳社発売日: 2018/02/19メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見るプログラミング力をつけるためにやってみる。 いきなり…

vue.jsでオセロ

<template lang="pug"> .osero #app p 白:{{ w_point }}, 黒:{{ b_point }} p {{turn}}の手番 .container(v-for="(i,idx) in 8" :key='idx') .waku(v-for="(j,idx2) in 8" :key='idx2') div(:class="{ 'white': cell[i][j]==true, 'black': cell[i][j]==false }" @click="oku(i, j</template>…

javascript、rubyでの競プロはバージョンに注意

就活でのwebプログラミングテストの対策としてAtCorderを使っていた時の話。・rubyはバージョンが2.3.3 配列のsumメソッドが実装されていない。・node.jsはバージョンが5.12 便利なメソッドはバージョン6から実装されてるからほとんど使えない。 就活でのweb…

node.jsでの標準入出力

node.jsでの標準入出力のやり方 const main = input => { console.log(input) } main(require('fs').readFileSync('/dev/stdin', 'utf8')) 入力の終わりはctrl+d

2Dジャンプアクション計画

2Dジャンプアクションゲーム(マリオっぽいの)を作るプレイヤー ・移動 ・ジャンプ敵 ・移動マップ ・マップ生成 ・背景スクロール ・マップスクロールその他(余裕があれば) ・残り時間とかのラベル ・壊れるブロック ・回復アイテムとか 今月中に作り終…

ジャンプ

ジャンプの処理 update: function() { if(this.jFlag){ //vyは上昇時はマイナス、下降時はプラス this.vy += 1 this.y += this.vy if(this.y == GROUND){ this.jFlag = false } } }, jump(){ this.jFlag = true this.vy = -20 }, マップスクロール let offse…

phina.jsの目標

テトリス マリオ パックマン ロックマン あたりを作ってみようゲームシステムパクるだけなら時間かければできそう。

phina.jsで遊ぶ

ゲーム作りってプログラミングの勉強にすごく良い気がする。 当たり判定やマップの移動などなかなかややこしい。

配列、オブジェクトの追加の際の戻り値

配列やオブジェクトに要素を追加して自分自身を戻したい時 arr.push('a') => 戻り値は新しい配列の要素数 arr.concat('a') => 戻り値は新しい配列 obj['a'] = 1 => 戻り値は代入した値 Object.assign(obj, {'a' : 1}) => 戻り値は新しいobj 使い分けるときれ…

深さ優先

探索を中断する条件も追加してみた。 (ナイト巡回問題でいう一度行ったとこが含まれてたらダメみたいな条件) getNextNodeのとこにisSuspendをうまく混ぜられたらいいなと思ったけど、難しそうだったのでとりあえずこれで let dep = lst => { let isFinishe…

幅 深さ

参考記事 JSで幅優先探索・深さ優先探索アルゴリズムを5行で実装してみた 深さ優先探索と幅優先探索の簡単な実装方法 - 働かないプログラマのメモ帳 //幅 const que = [targetNode]; while (que.length > 0) { const row = que.shift(); if (row.children) r…

深さ優先探索っぽい順列

reasonMlによる順列 まぁまぁきれいにできた気がする。 終了条件と次のノードのとこをいじればいろいろできるよう抽象化できた。 let permu = (count, lst) => { let isFinished = acc => List.length(acc) == count; let getNextNode = (cur, l) => List.fi…

javascriptでパターンマッチ

javascriptで関数型言語でいうパターンマッチが使いたい matches.jsってのがまさにそれなんだけど6年前に更新が止まってる。 GitHub - natefaubion/matches.js: Powerful pattern matching for Javascript const match = require('matches').caseOf const te…

ゲーム処理の流れ

個人的な名前の付け方のまとめmain関数frameNo : 現在のゲームの状態を入れる switchを用いて、update関数を切り替える(以下切り替え先をframe関数と呼ぶ) frameNoはswitch内で切り替える_関数名 : 引数のみで完結(インスタンス変数にアクセスしない) 主…

phina.jsでブロック崩し

【phina.js】ゲーム作成チュートリアル(ブロック崩し)第1回=ブロックの配置= を参考に(というかまるぱく)してブロック崩しを作った。で、リファクタリングしながら概要を把握した。状態によってメインの処理を切り替える。 メイン以外の処理はアンダー…

状態別処理

今までは isStarted : bool isFinished : bool とかで管理してたんだけどframeNo : str で管理して更新処理されるところでswitchで切り分けるととても見やすい。

pugは一度使ったら抜けられない

初めは気持ち悪いと思っていたpugだけど、一度使ったらpugなしじゃ生きていけなくなった。 タイプ量が少ない、読みやすい、修正しやすいrailsにはslimっていうpugとほぼ同じ文法のがある。 これ使うとeachとかがめっちゃきれいに書ける。 erbで頑張ってたの…

抽象度が低いほうがわかりやすい(reduce)

それぞれの要素に対してした処理をまとめるにはreduceが良いと前書いたけど mapとconcatでも書ける場合はこっちのほうがよい。抽象度が低いから理解しやすい。 reduceは何でも出来ちゃうからイメージしづらい。追記 jsとocamlでconcatの意味が違かった ocaml…

vuexをmodelとして扱う

前vueでcrud作ったときは各ページでajaxでdbからデータを取り出してた。 そうじゃなくvuexにdbから取り出すgetterを作ってそれを利用する法が良いかも。こうしたらrailsのmodelっぽくなってイメージしやすくなる。

vuexまとめ

vuexの書き方をよく忘れるからまたまとめる。 const モジュール名 = { namespaced: true, state: { キー: バリュー , }, mutations: { メソッド名(state) { 処理 } }, } export default new Vuex.Store({ modules: { モジュール名, }, }) <script> import { mapState…

rails-apiを使う

フロントはvue.jsを使いたいからサーバはdbだけでいいやと思ったのでrails-apiを使ってみた。 クロスオリジンとか出てきていろいろ詰まった。 これだけでイイ、Rails5でAPIサーバを作るときのCORS設定 ここを参考にしたら動いた。とりあえず、これでいろいろ…

javascriptのpushの戻り値に注意

javascriptでuniqメソッドを実装してみようしたら動かなかった let uniq = arr => { return arr.reduce((acc, cur) => { return acc.includes(cur) ? acc : acc.push() }, []) } 理由:pushの戻り値は新しい配列ではなく、その配列の長さだから let arr = ['…

カリー化

カリー化とは 「引数を複数受け取る関数」を「引数を段階的に受け取る関数」に分解する let add = (n, m) => { return n + m } let addCurry = n => { return m => { return n + m } } //呼び出し方 add(3,4) addCurry(3)(4) これだけだとあんまり利点を感じ…

javascriptを使って関数型プログラミングを学ぶ

半分ぐらい読んだ。 序盤のラムダ計算から関数型プログラミングを説明するところはとても良い。 ただ、中盤ではjavascriptに無理やりパターンマッチングを導入し説明している。 ここのせいでコードが読みづらいし、直感的にわかりにくくなってる。「javascri…

mapとreduce

抽象度 reduce > mapどう使い分ける map 配列の各要素に関数を当てた配列を返すとき 注目するのはその要素に何をするかだけ (map_sqrt : list(int) => list(int), map_mod2 : list(int) => list(bool) )reduce 1,配列をなにかに変換するとき (sum : list(i…

reduceでいろいろつくる

reduceにもなれてきたからjavascriptの配列のメソッドをreduceで書いてみた let isDivided2 = el => { return el % 2 == 0 } let square = el => { return el * el } // every arr1.every(isDivided2) arr1.reduce((acc, cur) => (isDivided2(cur) ? acc : f…

javascriptに宇宙船演算子がほしい

宇宙船演算子とは こんなやつ大小の比較が楽にできる。 これがあればjavascriptのsortのcompareとかが楽にかける。 reasonmlのパターンマッチングとも相性抜群だと思うんだけどなー。 javascriptにも導入されてほしいなー。

reduceって思ったより有能?

reuceの仕組みを理解したら予想以上に便利な関数な気がしてきた。mapやfilterもreduceでかけるよね。 書いてみよう。

reasonと戯れる2

ひたすらreasonで練習問題を解く。 思ったよりも時間がかかるが楽しい。今月中に終わらせたい。

reasonと戯れる

let rec insert = (lst: list(int), n: int): list(int) => switch (lst) { | [] => [n] | [first, ...rest] => switch (first < n) { | true => [first, ...insert(rest, n)] | false => [n,...lst] }; }; let rec insSort = (lst: list(int)): list(int) =…