chevron_left

メインカテゴリーを選択しなおす

cancel
パーソナルブログメモリ https://blog.goo.ne.jp/field_light

個人的な簡易記録です。コンピュータ関連をメインでやってます。ようこそ!いらっしゃいませ。

パーソナルブログメモリ
フォロー
住所
未設定
出身
未設定
ブログ村参加

2018/06/05

arrow_drop_down
  • プログラムを2日でマスターする方法を考えてみる(その1)言語学習とはパターン認識を定着させることである。

    Python3をターゲットに考えてみます。(このサイトでこのようなものをたくさん作っていますが、何度でも作っていけば1つぐらいいいものができないかなと挑戦しています)目標到達点はCodinGameのClashofCodeの問題を3割解けるぐらいを目指してみます。現在はCodinGameの27言語は使えます。今月ML系言語に15日ぐらい費やしてようやくML系でも問題が解けるようになりました。ここ数年何度も挑戦してようやくです。学習している過程で、初心者の気持ち少し思い出しました。記号の意味がわからないのです。作法もよくわかりません。PDF化された無料の本などをみます。謎の単語にまくしたてられます。説明は一度きりなので、どんどん忘れます。実際にやってみると動きます。少ししたら忘れます。定着させるには回数をこなすしか...プログラムを2日でマスターする方法を考えてみる(その1)言語学習とはパターン認識を定着させることである。

  • OCaml と Haskell でリスト操作

    問題スペース区切りの文字列sとスペース区切りの単語集wがある。大文字小文字関係なく文字列の単語が単語集にあればその文字数を*で置き換えた文字列s'を答える。簡単なリスト操作が必要な問題です。OCamlエラーにひっかきまわされました。このエラーの原因一箇所だけです。答えは22行目です。完成6行目がリストに存在するかの答え、existsはよくわからず、List.memslistで解けました。Haskell一番はまったのは小文字化、Text型という未知の型が検索でヒットしてしまって迷宮をさまよってました。25行目のs!!i:oリストSのi番目の項目をリストOの先頭に追加して渡しています。いやー難しい2つで2時間ぐらいかかっているかもOCamlとHaskellでリスト操作

  • Haskell OCamlで文字列操作

    こんな問題に遭遇しました。文字列が与えられ、同じ文字列がつながっていたら削除していきます。最後に残る文字を答えてください。ただし一回の削除は同時に行っていきます。この問題をHaskellとOCamlでも解いてみます。はまったのはやはりCharまわりでしたか、[Char]でString型にできます。文字列sのn番目はs!!nChar型になります。文字列同士の連結は++忘れてます。こちらのほうがハマりました。String.lengthsここに付きます。あと同じは=違うは<>他の言語の記号と間違えてもエラーにならないのでなかなか見つかりませんでした。文字列sのn番目はs.[n]これはCharになりChar.escapeds.[n]でString型に変換します。文字列の連結は^。全体的に書き方は、もう少し良さげなのある...HaskellOCamlで文字列操作

  • 階乗の後ろ0の桁数問題をPython3 OCaml Haskellで解いてみる修行

    nの階乗(1*2*3*...*n)の結果、後ろに0は何桁ありますか?という問題。昨日57%の正解率しかだせなかった解答がこちら。敗着として25を5x5で5が2つあるという事に残り2分まで気が付かず。焦ってそこから修正ができなかった昨日。2x5が10という所で2で割れる数と5で割れる数のうち小さい方が0の桁数になる。翌日、よく考えれば2と5だったら、5の数の方が少ないから5の数だけ計算すればよいことに気がつく。25000000!まで計算可能(使用できる時間は0.1msぐらいか)OCamlとHaskellを忘却から救いたくなって解いてみる。OCamlはまったのは2行目==で比較してしまう。200000000!まで計算可能Haskellやはり難しい、一番はまったのは17行目floorの戻りはFloatではないらしくf...階乗の後ろ0の桁数問題をPython3OCamlHaskellで解いてみる修行

  • Rustの達人に遭遇する

    こんな問題を競う。スペース区切りの文字列とスペース区切りの単語集がある。大文字小文字関係なく文字列の単語が単語集にあればその文字数を*で置き換えたものを答える。3分37秒後に先に解かれる。Rustでこれだけのソースを...4分23秒Python3で解いたソース見比べればわかりますが、Rustだと難易度は3倍は高くなります。Rustの達人に遭遇する

  • 正規表現 s=s.replace(/(.)\1+/g,"") を解析

    こんな問題に遭遇しました。文字列が与えられ、同じ文字列がつながっていたら削除していきます。最後に残る文字を答えてください。ただし一回の削除は同時に行っていきます。aab->baabba->abbaab->b※bbb->""とはならないaaabbabbac->aac->aという問題で3行で解答している人がいました。私は迷走して15分では解けませんでした。正規表現はあまり知らないので少し解析してみました。//g/の間が正規表現.一文字なら、なんでもOK()ひとかたまりとする¥11つ前のもの(¥はキーボード上の¥ではなく。キーボードの""バックスラッシュ)+いくつあってもOKなんでもいい一文字、それを同じ文字がいくつかあれば対象という意味になるらしい。正規表現は軽い簡易言語ぐらいの情報量があり、なかなか解読できません...正規表現s=s.replace(/(.)\1+/g,"")を解析

  • CodinGameでGuruになる

    GrateEscapeで102位まであがって、UltimateTicTacToeを作り直したら103位に落ちる。数日スイッチがオフになって、何かしておこうとClashofCodeを数問やって寝て起きてみるとGuru(総合成績100位以内)になっていた。わーいわーいようやくたどり着きました。CodinGameでGuruになる

  • ボードゲームでA*(A-star)探索アルゴリズム

    前回逃げのプログラム(最短で脱出するものを作ったので)今回は足場を固めるプログラム。少しでも信頼性を高めるためにこまめに確認したり。目視で確認しやすいツールのような関数を増やす。このゲーム最終的には相手の脱出を長引かせるための壁を設置するプログラムが必要になる。今の所コレといったアイデアはまとまっていない。前は相手のまわりに何パターンか置いて距離を測ってタイムアウトにならないぐらいの微調整をしていたのを思い出しました。まずはパスファインディングを自分占用から相手にも使えるようにデータまわりから修正する。A*使ったらもっと速くなるかもと使ってみることにしてみました。21〜34行目。そんなに大きくない迷路で使ったらソートのコストの方が大きいかもと懸念しましたが、平均で3倍ぐらいは速そうなことがわかりました。距離の長...ボードゲームでA*(A-star)探索アルゴリズム

  • ボードゲームのパスファインディング

    製鉄工場の現場に足を踏み入れたことがある。入る前には講義を受け試験を受けなければならない。その時に教えていただいた教訓はいろいろな所で応用が効くいい話だと思う。危険の際の対応方でまず逃げろ、次に足場の確認、そして止めろである。この時の講師の方は若かりし頃、配電盤で感電してしまい命が危なかった頃の話なども印象に残っている。プログラムの合間にスプラ2のイクラのバイトでも役に立っていていい講義を受けさせてもらいました。さてGreatescape前回データ設計が終わったのでパスファインディングを10行ほど追加してみました。最短コースを常に狙いに行きます。100位ほどアップしましたが、思っていたより手強いようです。逃げろの部分は完成したので。あとは足場の確認として相手との兼ね合い。最期は止めろです。<参考文献>https...ボードゲームのパスファインディング

  • ボードゲームのデータ設計

    システムを設計する上でデータ設計は重要、最重要といっても差し支えない。今日の言語で失敗しているのはNullというデータ。これがシステムに破壊的な影響力をもってしまったので、2035年に全言語間で廃止されることが決定している。(嘘)さてGreatescapeである。2年前に作ったもので強化しようとしてみるが、2年たつとコーディングの作法も大きく変わってしまっていて直すのもしんどい。ということで半日後に再作成を始める。データ設計部を一画面で無理をして、さらに数行あまったから生き残るぐらいのアルゴリズムを追加してみました。SUBMITもしてみると955位まで下がってしまいました。左下側に左上のゲーム画面をデータ化したボードが書いています。これでパスファインディングで探索できる形になっています。実はこれ2年前に悩んだ末...ボードゲームのデータ設計

  • パターンマッチと順位が上がらない話

    Yavalathというゲームのアルゴリズムを作り直す。前のプログラムがよくわからなかったのと、データ構造がいまひとつな感じがして、これなら新規で作り直した方がよさそう。作り直して元々45位だったものが43位昨日の深夜練り直してもうだめかと思って深夜1時何かが覚醒したのか、最高19位まで上がる。翌朝、詰みのパターンが説明サイトにあったのでそれを練り込む。re(パターンマッチのライブラリ)はあんまり使ったことがない。これがその心臓部分。詰将棋の初期状態のようなものが157行目、154、155行目が簡易作成ルーチン。"."はなんでもいい所"0"は開いている所"1"は自分の駒"2"は相手の駒"a"は自分の駒以外"b"は相手の駒以外"@"は改行160行目は打ち込み先のルーチン、1234が打ち込む順番(あいては詰めろ3回か...パターンマッチと順位が上がらない話

  • CodinGameのPRACTICEの解き方4 文字列操作で未知のゲーム、スラカルタに挑む

    インドネシアの奥深く、かつて王朝から名を取ったスラカルタ、現地での名前はPermainan意味はゲーム。相手の駒を取る時に端にあるループを一回は通らないと駒が取れないという。世界唯一のルールらしい。この未知のゲームに前回ここで紹介した文字列操作と関数、if、for、whileというシンプルな構成で解いてみます。前回の文字列操作に関してPython3なら文字列操作を400文字で説明できます問題の難易度はMEDIUMですが解いた人が全体の19%とHARD級の難しさが想定されます。ルールは複雑なので参考文献の2つめを参考に簡単に説明すると6x6の交点に駒を配置でき、二つの大きな曲線が各コーナーに2ついていて、コーナーをぐるっとまわって相手の駒に最初に接触したとき相手の駒を取ることができます。各テストケースで自分の駒が...CodinGameのPRACTICEの解き方4文字列操作で未知のゲーム、スラカルタに挑む

  • Python3なら文字列操作を400文字で説明できます

    Python3が流行っているのは簡潔さが大きな理由だと考えています。基本をプログラムにまとめてコメントもつけてみて、文字数20x20文字の原稿用紙一枚400字以内にできそうだなと思ったので収めてみました。実行結果です。追記p(s.count("l"))#文字数を求めるp(len(s))#文字の長さを求める結果311意外にメジャーなものを見落としていました。Python3なら文字列操作を400文字で説明できます

  • CodinGameのPRACTICEの解き方3 実際に書いてみたり寝かしたりして解く

    今回挑んでみたのはこちら、中級でsuccessrateは低め、右隅にある評価はかなり高いです。問題はよくある歯車問題、歯車がの座標、半径が渡されてきて、データの最初の歯車が時計回りのときデータの最期の歯車は?時計回り半時計回り動かないいずれかを答えます。この問題テストケース04のJammedに悩まされました。問題に記載がありません。つまるというのがどういった状態なのかわかりません。何度かこの状態かなと思考錯誤しますがテストケースでエラーになるものがあります。最終的には問題のデータを5mm方眼ノートに書いてみて、状態がわかりました。ギアがループしている時のようです。そこまで作成していたのは戻らないようにギアを進めていく。次のギア先が2つ以上ならJamm。ゴールに到達していたら解答というものでJammを正しく理解し...CodinGameのPRACTICEの解き方3実際に書いてみたり寝かしたりして解く

  • ガス屋の所業で風呂が使えなくなった話

    まず定期点検の後、火の付きが悪くなったいた風呂が完全に火がつかなくる。この時の説明応急措置はしておきました。メーカーにすすを取ってもらえばもっと良くなりますよ次に来たガス屋(修理依頼したのにガス屋が来たのが意味不明)故障箇所は水漏れと火がつかない点、30分後直せないのでメーカーに修理依頼します。機械の中はいじれないんでと強調それで直せるわけがない。なぜか浴槽をメジャーで測り写メでやたら浴室を撮る。ガス屋から依頼された修理屋が来る。一時間後、中身を大幅に変えるか機械を入れ替えるかとギブアップ。大家と相談してまた連絡しますと退散。種火がみえる箇所になんか配線がむき出しでみえる。現状へ戻すことすらできていない。4日後に連絡が来る。全体交換になりそうとのこと、さらにメーカーに在庫がないのでいつになるかは不明とのこと。あ...ガス屋の所業で風呂が使えなくなった話

  • 3回目の注射のような作業

    Python3だとこんな感じOCamlとHaskellでやってみます。一週間ぶりぐらいなんですがけっこうキレイに忘れています。おもったよりはなんとかなりました。Haskell開始時このファイル名にはじごくと入っています。ほんとにこのあたりのデバッグ作業地獄でした。さんざん確認表示いれて完了熟練者はこんな感じで解いています。3回目の注射のような作業

  • CodinGameのPRACTICEの解き方2

    今回はこちらの問題に挑んでみます。Easyですがsuccessrateがかなり低めです。Midium級の問題と想定したほうがよさそうです。これぐらいの長さの英語だとパット頭に入ってこなそうなので即翻訳にかけます。クライアント、サービス、インスタンス、メトリック、リアルタイム、スケーリングメトリックはよくわからないのでそのまま読み飛ばします。簡単に説明してみると、3個(例)のボールが入る同じ大きさの箱(メトリック)があります。ボールが?個(クライアント)mターンやってきます、来た時何個の箱が必要か箱の必要数の増減をお答えください。というのがリスト数分並列に存在しています。(説明自信50%)ということでリストを増減する関数を3,4行、必要な箱数を計算する関数を5,6行で作成。入力データをリスト化してリスト計算できる...CodinGameのPRACTICEの解き方2

  • Python3 リスト同士の引算及び割り算(切り上げ)の一行関数

    なにかニーズがありそうな気がして上げておきます。ーーーここからソースimportmath#各ターンサービスがいくつ必要か求め可動数の増減を表示するdefsub_list(list1,list2):return[l1-l2forl1,l2inzip(list1,list2)]defneed_list(serv_list,clie_list):return[math.ceil(n/s)fors,ninzip(serv_list,clie_list)]s,m=[int(i)foriininput().split()]servers=[int(i)foriininput().split()]runs=[0]*sforiinrange(m):clients=[int(j)forjininput().split()]nee...Python3リスト同士の引算及び割り算(切り上げ)の一行関数

  • CodinGameのPRACTICEの解き方

    まず問題文がわからない時、google翻訳に依頼します。それでもよくわからない時は2つを見比べます。にらめっこしているとなぜかなんとなくわかります。わからない数学的な用語は検索します。ここだと基数とかパッとわかる人はあまりいなのではないかと思います。ここでは何度も読み比べ整数ソリッド...数字0を使用する必要はありません。ー>整数ソリッド...数字0を使用できません。と解釈しました。timedout系はプログラムより別の知識が要求されていたりします。閃かないと解けないとか数学の公式みたいなものを利用するケースもあります。あまり意義を感じないので見送ったりします。8,9行目少し小技を使ったのですが28%ぐらいしか向上しなかったのでここで終了します。これは中級の問題で初級だともう少し楽です。スッと解いたサンプルにし...CodinGameのPRACTICEの解き方

  • すみダークにやられるので改造計画を練る

    人つながりすみだくそんな標語うそっぱちです。好き勝手に工事しまくって、今日もまた工事を家の前で開始連絡もなしにです。しかも立て看板見ると令和4年5月2日まで、またじごくの始まりで血圧もうなぎのぼり、冷静さをなんとか保とうとしたけど無理です。近くにはゴミしゅうしゅうしせつがあって、毎日いずずのトラックのバックのピーピー音がけたたましく鳴り響きます。旧中川が隣にあるので、2ヶ月に3日くらいブロアーの音が軽い暴走族級のうるささで一日中鳴り響きます。(暴走族のほう瞬間なのでまし)このクはとにかくやかましい。毎月一日は「きょうはすみだくぼうさいのひですさいがいにそなえましょう」と陰気臭いセリフが4回ながれます。広報に関してはえどがわくのほうがうるさいですが、それもまる聞こえなので2重にうるさいです。一度マラソンの通路にな...すみダークにやられるので改造計画を練る

  • Haskell Maybeを避ける

    問題拡張子と拡張子の簡易説明を取得して、ファイル名をいくつか受け取って分類する問題に挑戦。ファイル名の拡張子と拡張子は大文字、小文字が混在しています。ファイル名もaとか"."だけとか悩ましいものもあります。ラスボスとして9999件対9999件のミサイル何発打っても倒せないようなのが存在しています。(時間制限があります。感覚的に100msぐらいか?)ラスボスに対して3つぐらい作戦を練って玉砕しただけの話です。Haskellに付き合うのもいいかげん疲れました。モナドという者も登場!作ったソースラスボスに会合するまで拡張子と拡張子の説明をタプルのリストにする。12〜17行ファイル名から拡張子を取って、先程のリストを再帰関数で突き合わせ答えを返す。30〜33行2つのタプルの先頭を返すfst(1,2)2つのタプルの後ろを...HaskellMaybeを避ける

  • Haskell 盤を自在に書き換える

    Haskellは問題を絞り込んで解いていくのに向いている言語なのかもしれない。盤を操作するとかには向いていない気もする。今回挑んでみたのはマインスーパーの爆弾の位置から該当する数字を答えるというものひとマスまわりに2つ爆弾があったらその地点は2とする。そろそろ盤を書き換えるという個人的には大問題に挑戦してみました。なんとか解いています。cbd(countBoardの意味)を関数間に書き換え書き換え。解答後他の方の解答をみてみるとまあシンプル。まだHaskellの山の2合目ぐらいしか到達していないのかもしれません。今回もいろいろ型変換にハマりました。19行目とか38行目。この言語は学校などが変わる度に再デビューするかのごとく、世界を次々と飛んで、その機内で全力で着替える旅人の言語です。追記実は問題の解き方がよくな...Haskell盤を自在に書き換える

  • Haskell 数独の判定 何度でも再帰で回そう (文字列のスペースを全部取る)

    数独の解答判定の作成9行スペース区切りで数字が9個ずつ渡される。それが数独の解答としてあっているか判定します。最初9行回して文字列を返してとか考えてたら返し方がわからなかったので(この時は)そのまま判定ルーチン飛ばしてみました。20、21、22の行、列、箱判定は27行書こうかとも考えたのですが、あえて苦手な再帰のループを書いてみることにしました。10行ぐらいしか短くならなかったのですが、かなり抵抗は少なくなりました。40行目のcutSpaceは宇宙を分断するルーチンではなくて数独の盤を9x9文字の一次元にする前段階文字列をスペース区切りのリストにする(splitOn""s)(Data.List.Splitのimportが必要)リストを空文字でつなげるinterclate""["aa","bb"](Data.Li...Haskell数独の判定何度でも再帰で回そう(文字列のスペースを全部取る)

  • Haskell デバッグ風景 ( [Char]!!0 でCharに変換 )

    一番に煮詰まっていた秋の深夜の一枚12行目returnの文字列は()でくくらないといけない(ML系言語の仕様のため頻発するミス)13行目文字列の追加++なのに一箇所間違えている(イージーミス)16行目input!!0は一文字だけど[Char]という型になっています。これをCharにするためにさらに先頭を取らないといけない正解はinput!!0!!0(未知のバグ)そのために17行目以降もろもろの比較エラーをおこしています。20行目ロジックの簡易化のためボードのサイズを8x8から10x10に変更時の対応もれ(仕様変更の対応もれ)23行目Haskellの違う演算子は/=(未知のバグ)26行目elseの前に;がある(取ってもバグにならない言語の仕様変更か?)30行目自分の駒数、相手の駒数で返していますが、白の駒数黒の駒...Haskellデバッグ風景([Char]!!0でCharに変換)

  • Haskellで解いたオセロの問題で全力解説してみる2

    Haskellで解いたオセロの問題で全力解説してみるの続きです。ソースと説明文が離れてしまったのでページを分けソースの再掲載から再開します。前回のあらすじ文字列の追加は++intercalateリスト型に入った文字列を結合関数名引数引数とスペース区切りlengthは文字列の長さshowは数値を文字列に変換wordsは文字列をスペース区切り!!nはリストのn番目を取得putStrLn"helloworld"文字列を表示24行目まで説明しています。関数の概略turns(関数名)一次元化したbd位置p自分駒c相手駒o検索方向のリストli反転したコマの数n(引数)盤を検索方向に検索させていき、検索終了時、反転がなければ"NULL"反転があれば白の数と黒の数を返します。turn(関数名)一次元化したbd位置p自分駒c相手...Haskellで解いたオセロの問題で全力解説してみる2

  • Haskellで解いたオセロの問題で全力解説してみる

    問題はオセロの盤面データ、自分の色、置く場所が与えられ置いてひっくり返した後の白黒の数を答えるというもの例外としてすでに置かれていれば"NOPE"ひっくり返せない場所なら"NULL"を答えなければならない。盤の状態は黒’B'白'W'なしは'-'で8文字ずつ8行分渡される。自分の色と置く場所はスペース区切りで”Bc4"とか渡される。c4は3列4行目、a8なら1列8行目。提出ソース1〜4インポート6〜8雛型をそのまま98回繰り返した結果をリスト型でaに代入101行取得11文字列の追加は++bdはオセロ盤の状態を外側を"-"で囲ったものです。12intercalateリスト型に入った文字列を結合関数呼び出しは関数名引数引数とスペース区切りで読びだす。カンマ区切りがないので引数を加工する場合()でくくらないといけない。...Haskellで解いたオセロの問題で全力解説してみる

  • Haskell 早朝 川遊び

    朝5時頃から開始プログラムは1時間ぐらいで完成THERIVERI.17、18行で再起する時のパラメータ入れ替えてますが、川を入れ替えても問題ないので遊んでみました。一番悩んだのは最期の行fromIntegralの検索THERIVERII.朝早すぎるからかもしれませんが、仕様がまったく頭に入ってきませんでした。Python3で昔作ったソースをみてもさっぱりそのままプログラムを翻訳してみました。流れてついに到着最下位から中堅以上まで浮上一週間前だとありえない状況です。Haskell川柳10個むりくり作ってみました。やってみていろいろ悩むとできたりすもうできん思ったそこが転換期ああだめだたいてい翌朝できたりす難題の答えはそばにあったりすまわらない世界を次々作り出す解いているハスケルの謎パイソンは止まったら他のやりかた...Haskell早朝川遊び

  • Haskell 修行中 近くの能力者を探し、アスキーアートを描き、バットマンが飛び回る

    DEFIBRILLATORS地表面間の距離を緯度経度から算出する問題。小数点が","だったりデータの区切りが";"だったり(16行目21行目で対応)微妙な違いが何気に難しい。ASCIIArt大きなアスキーアートのアルファベットがデータとして与えられ文字列をそれに変換する問題こちらは着手前の簡易設計完成品21行をputStrLnにすれば22行目は不要文字列をアルファベットの連番(ABC...->012...)の変換は先の問題の16行目の置換の枠組みを流用ShadowoftheKnight数あてゲームの2次元版以前Python3で作ったものおおまかな基本設計思っていたよりも大変21,22でありもしないデータを取ろうとしたり、FloatInt問題にはまったり受け渡しパラメータ間違っていたり、ビルなので上の階が大きい数...Haskell修行中近くの能力者を探し、アスキーアートを描き、バットマンが飛び回る

  • Haskell 雷(いかずち)にうたれる

    何年か前にHaskellで挑戦して完全には解けなったCodinGameのPowerofThor先日挑戦して挑戦中のThorどうしても今のスキルでは解けないとGitHubに置いてあったソースを見ていて参考に作ってみたものそして何年か前のプログラムを導入してみたものなんかコツをつかんだ気がするもう一問DIEHANDEDNESS先日OCamlで解いたソース移植したものHaskellの乱数を使おうとしたのですが、うまく使えず疑似乱数を再帰呼び出し時に生成しています。メインループを再帰関数化ができるようになったのは大きいです。Haskell雷(いかずち)にうたれる

  • Haskellに再度挫折中 3度火星に降り立ち 未知の惑星に降り立ち 馬と走る

    OCamlは基礎はできるようになったので、Haskellに再度挑戦してみる。何回目かは忘れました。一番問題も解いていない。火星着陸ゲームに挑戦エピソード1は実は簡単で落下速度が着陸時に規定速度を越えなければOKプログラムを書いたのは25行目と26行目だけしかしこれだけでもけっこう時間かかっています。ついでにSwiftもGOLD(7問解く)にしておくあと謎のClojureもif文と表示だけなのでなんとかなる。そしてループして高い山から破壊して惑星に着陸する問題Haskellは変数が使いにくい。ループで添字の使い方も不明。山は常に8個なのでありえないような作り方で解答。最期はデータをList化してその数値の差が最も小さいものを答える問題10〜12行でList化13行でソートして14行で、先頭、最期を取ったリストを引...Haskellに再度挫折中3度火星に降り立ち未知の惑星に降り立ち馬と走る

  • OCaml言語をマスターするためにたたきこんでみる

    ようやく何かがつかめてきたOCaml。ここでホッとして次に行くと、あっという間に忘れてしまう。そんな気がしたのでもう少し問題を解いてたたきこんでみることにしました。4年ぐらい前に別の言語で解いた問題を解析しながら、Don'tPanic-Episode1何をしているかというと、ロボットがフラフラと上に移動するために各フロアの上に向かうポータルの位置と違った方向に向かっている時にBLOCKしています。各ターン、フロアと方向を入力され、あらかじめ作っていたフロアガイドにしたがって誘導します。ハッシュテーブルで各階をキーにポータルの位置を値として設定しています。フラフラしているのは銀河系ヒッチハイク・ガイドに登場するゆううつなロボットさんです。復習ポイントは1行目ハッシュテーブル作成9行目追加17行目検索といった所でし...OCaml言語をマスターするためにたたきこんでみる

  • OCaml 絶望から立ち上がる

    昨日から問題は解けず。スプラ2三昧ふと最初の勤めた会社の社長にいただいた「心に革命を起こせ」をパラパラとみる。OCamlは無理だと絶望しつつあった日曜の22:30タイマーを2時間に設定して挑戦してみる。mapを使おうとしているがどうにもうまく使えない30分は空虚に時が過ぎhashtblのサンプルを見つける。これで少し進める。作成後、取得できない場合、例外対応も必要と新たな難題が幸い有無チェックがあったのでそちらで対応後は拡張子の取得。拡張子以外の取得は見つける。そのモジュールのFilenameにあるのではと調べてextentionを見つける。1時間半で解ける。そして昨日絶望に落としてくれた問題に挑む。float_of_stringができないと散々はまったあげく、元データの小数点がカンマになっていて置換処理をしよ...OCaml絶望から立ち上がる

  • Python3 4年前と現在のプログラム 配列の追加した後にソート、 配列の隣の数値との差分の絶対値が最小のものを求める

    OCamlというラクダにのって砂漠をさまよっていると4年前のソースを発見しました。砂漠をさまよって自信をなくしつつあったのでちょっと休憩。4年前がこちらです。今だとこんな感じです。コメントと未使用ライブラリを取ります。1行目最初に読み取った数だけさらに読み取って数値化して配列に入れていきソートしてhoに入れます。2行目配列を1つずらしたものをまとめてループさせ大きいものから小さいものを引いたものから一番小さいものを表示しています。ZIPはあえて使ってみました。Python34年前と現在のプログラム配列の追加した後にソート、配列の隣の数値との差分の絶対値が最小のものを求める

  • はやとちりする

    新しい問題があがっていたので解いてみました。最期まで、まったく意味を履き違えて...サイコロの問題で回すのかな。答えるのは一文字forward?ダイスの左端が先端かなと解答を作ったのがこちらです。まあ6分の1の確率でヒットしているようです。実際はもっと面倒このダイスの中を向きをかえてさまようようです。はやとちりする

  • OCaml リストのソートと囚われた世界

    リストに数値を追加してソートさせそれを表示させることはできました。しかしループを回してリストに取得した値を追加することができず理由もサッパリわかりませんでした。1時間ぐらいは悩んだ末わかったことは、ループの中で再定義した同じ名前の器はそのループ中の世界で一回だけしか生存しないということループの外で再定義されたはずの名前の器はそのループの世界の外では生存しているということ世界が明確に分断されていることに気がついていなかったようです。この問題は解けていませんが...5行目でリストに99を入れて定義14から17行でリストの先頭に数値を追加18行目でリストをソートして代入19行目でリストの表示2行3行目がリストを順番に表示する関数となっております。OCamlやはり難しい。分断された世界を生き抜く夢をみるほどですから。OCamlリストのソートと囚われた世界

  • OCamlでなんとか一問解くまで

    はまった理由は参照refの使い方まずはグルグルどうにもできなくて解答を探してみる。参照型の定義と最期の結果表示を参考にここでは参照型のmxにx+1を代入しようとしてダメとおこられている(エラー表示部分が見切れている)ここでは関数ではないとおこられているらしい。2時間ぐらいかけてやっと成功スペースが必要な部分とそうでない部分の区別がまだつかないのであえて縮めてみたりしています。Ocamlのrefはアドレスを指定していて、中身を取り出す際は!を前につけないといけない。プログラムをみると代入する際はいらないようである。複文は()でまとめ;で区切る問題を解いたので達人達の答えを眺めてみる。参照型を使わず。再帰関数の引数を変数のように使うようである。OCamlでなんとか一問解くまで

  • OCamlを再開してみる

    この言語をマスターするためにはまず記号から見直さないといけない。けっこう違う。まず数値などが同じは===はポインタが同じ(同じ場所に格納された同じ値)違う時は<>!=はポインタが違う+.で足せるのはfloatfloatとintは足せない。(float_of_int1)はintの1をfloatの1.0に変換する。toではないof抽出するという思想らしい文字列から指定位置を取り出す時.[n]ドットが必要下は構造体構造体名を指定しなくても変数と型があっていれば自動で選択してくれそう。Ocamlのツールはカーソルで戻れない[D^[[A実に使いにくいしかしrlwrapocamlで起動すると使えるようになりました。なかったのでインストールからしています。悲報システム再起動でversionが4.07.0に戻ってしましいました...OCamlを再開してみる

  • OCaml再訪問 最新にアップデートする

    OCamlという世界を訪れたのは記録によると2020年12月2日らしい。OCamlの日本語サイトをみるとここが中々の暗黒大陸ということがわかる。リストの作成からリストの前に追加のサンプルがあったので後ろにしてみたらダメでした。あとソートのサンプルが使えません。バージョンが古いと思っていたら、実はその前にsortの関数があってそれを打ち込んでいないだけでしたが、この時点では気づかずに最新を入れる決意をしました。エディタの止め方もわかりません。Ctrl+Dでした。削除のしかたがわからず。opamというソフトをいれてみます。後でわかったのですがパッケージ管理でした。ここをみてhttps://opam.ocaml.org/doc/Install.htmlubuntuの所にある3コマンドを実行しています。opaminit...OCaml再訪問最新にアップデートする

  • C言語の旅(文字列をsplitして配列に入れ、それを逆から表示するような事をする)

    最初はC言語の検証からいろいろ悩んだ末に完成したのがこちら。必要もないことを、古い言語で...なんとなく18切符で旅をしているような、懐かしい気持ちになりました。平たい版#include<stdlib.h>#include<stdio.h>#include<string.h>#include<stdbool.h>intfind(char*s,charc,intpos){//文字列sからcを検索する開始位置はposfor(inti=pos;i<strlen(s);i++){if(s[i]==c)returni;}return-1;}intcount(char*s,charc){//文字列sにあるcの数を返すintr=0;for(inti=0;i<strlen(s);i++){if(s[i]==c){r++;}}r...C言語の旅(文字列をsplitして配列に入れ、それを逆から表示するような事をする)

  • 温故知新 C言語系列の3つのテストを受けてみる

    C言語の古い言語は文字列操作が大変、この頃の苦労があって少しずつ改善されて今がある。残っている言語でかろうじてできそうなものをテストしてみました。D言語調べてみるとかなりC言語autoがちょっとありがたい。テストでは、文字列の数値化で少し時間を取られましたto!int(s)これはいったい。100点で上位1%C言語初期のC言語系で今の問題を解くのはちょっと厳しい。"$5.15"を515に変換するために(s[1]-48)*100+s[3]-48)*10+s[4]-48)という技を編み出しました。92点で上位1%Objective-CC言語系の中で一番大変なのは、これかも。開発されていた方はさぞかし大変だったと思われます。最低点とりそうだけど、いいやと受けてみました。かなり地道なコードを書いて解いてみました。文字列の...温故知新C言語系列の3つのテストを受けてみる

  • プログラム言語で上位1%になる方法

    類似系の言語なら、2時間でマスターできます。今日はPascal、Kotlin、Scala、groovyに挑戦してみました。最初はチートシートを作って挑んでいたのですが、慣れてくると使ったことのない言語でもその系統の言語をやっていれば、サイトを5つぐらい事前に探しておいて、ループと条件分岐の知識が必要なTutorial問題を解けばなんとかなります。Kotlin、Scala、groovyはJavaの派生言語で3兄弟ともいえます。古い言語は今なら基本的な関数がなかったりして一手間かかります。既存の関数をうまく使って、本来の解法ではない方法などをみつけたりもします。調べ方のコツみたいなものも少しわかってきました。「操作」を足して使うとまとまっているサイトがみつかりやすいです。文字列検索、文字列置換だと該当のサイトにヒッ...プログラム言語で上位1%になる方法

  • Free Pascal 3.2.2 に挑んでみる

    先程、作成した問題をFreePascal3.2.2で解いてみました。はまった点を思い出として書き残しておきます。PascalはBasicと同じでイコール判定は=です。:=よく:を忘れました。StringReplaceを使いたかったのですが、使い方がよくわからず自前で作成してみました。同じでないはPascalだと<>を使います。本来は縦横の判定もあるのですが、無駄に長くなるので斜めだけ判定しています。9行目Length(s)-1だと、なぜか一文字かけるのでこうしています。配列のソート、作るしかなさそうだったのでランダムソートで作ってみました。一番はまったのはIntToStr型が違うのかと思ってIntegerからLongintにしています。3行目のライブラリが必要だったようです。Integerでも動きました。18、...FreePascal3.2.2に挑んでみる

  • 45分の言語テスト

    CodinGameでいろいろな言語でテストを受け、問題の傾向のようなものをつかめた気がするので問題を作ってみました。45分で解いて90点以上ならプログラマーの上位1%、60点以上なら上位10%ぐらいです。(だいたいそんな感じでした。ただ日本人は優秀なので日本だと少し下がると思われます)テストケースを渡して、解答を判定するルーチンは作れないので、そこは自己作成、自己判定で。作って自己解答してみると、問題2が少し難しかったかもしれません。Python3でやってみました。イージーミスはあるはず。45分の言語テスト

  • Free PascalのインストールからHello Worldまで(Ubuntu20.04)

    ステップ1ダウンロードFreePascalのダウンロードから下のものをダウンロードして解凍する。fpc-3.2.2.x86_64-linux.tarステップ2インストール解凍したフォルダを端末で開いて、sudo./install.shで起動インストール先を指定してドキュメントなどもYで入れておく最期はデモを入れるフォルダを入れます、ここでYを入れると一番上の画面のようになってしまいます。ステップ3helloworldサンプルのフォルダから.ppのファイルを実行させたいフォルダにコピー(権限か何かで、ここだとコンパイルでエラーになりました)コンパイルコピーしたフォルダを端末で開いてfpchello.ppコンパイルの成功するとhello.oとhelloファイルが作成されます。./helloで実行HelloFreeP...FreePascalのインストールからHelloWorldまで(Ubuntu20.04)

  • JavaScript3兄弟とRustのテストを受けてみる

    昨夜JavaScriptを受ける。といってもほとんど朝以下並んでいるのは各言語の試験のTutorial。Tutorialの問題は全て同じです。そして兄弟分のTypeScriptも受けるそしてRust、チートシートは数日前に作っていたのですが怖くてしばらく保留していました。テストを受けて予感は的中。文字列、数値のいろいろな種類の型合わせに時間を取られすぎました。エラーでこれじゃないですかとヒントもくれますが、だまされることも多いです。(テスト中3回だまされました)Dart調べてみるとJavaScriptの兄弟分ということで受けてみました。結果はこんな感じです。JavaScript3兄弟とRustのテストを受けてみる

  • 投票所のコロナ対策について

    今回選挙に行ってみた。正直行くつもりはなかった。それでもなんか変わるかもしれないと行ってみた。入れたい候補も入れたい政党もなかった。選挙当日、封を開けてみるとコロナ対策は万全です、みたいな紙が一枚入っていた。シャーペンは持参した。投票場はいつもと変わりなく、広げて対策しています。みたいなことが紙に書いてあったが同じだった。入り口と出口に対策の弱いスーパーのようなプッシュ式のアルコールが1つ置いてあった。投票時に書く際の台に置く手が接触の危険性が高い。書いている時に気がついた。少し考えてみたけど、有効な対策は難しいかもしれない。朝9時頃行ったけど人はパラパラ最高裁判の方は全部☓を書かせてもらった。この国の司法が政治家に対して脆弱なのが一番の問題と思ったからである。最高裁判の紙は☓を書くのではなく、○を書くようにし...投票所のコロナ対策について

  • PHP チートシートも作らずにテストを受けてみる

    PHPは遠い昔アンドロイドアプリから呼び出されるサーバー側を作成したことがある。地図をタイル化して呼び出される位置によって必要なものを返してあげたり。アンドロイドから写真を受信してそれをサーバーで保管したり送信したり。わりと面倒なことをしていた記憶がある。(言語に関してはもう10年以上前なので忘れてます)さてまたチートシートと思ったけど今回作らずに挑んで見ることにした。ようは、その言語をろくに知らずにいきなりテストを受け、その場で調べるというミッションである。とはいえ流石に丸腰では、とあらかじめ良さげなサイトは探しておく。文字列操作、配列操作などのキーワードで5つぐらいのサイトをタブにならべスタート。チュートリアルはやってみる。5問中4問解いて、1問がテストケース2つしか通らないところで時間切れ終了。80点はい...PHPチートシートも作らずにテストを受けてみる

arrow_drop_down

ブログリーダー」を活用して、パーソナルブログメモリさんをフォローしませんか?

ハンドル名
パーソナルブログメモリさん
ブログタイトル
パーソナルブログメモリ
フォロー
パーソナルブログメモリ

にほんブログ村 カテゴリー一覧

商用