kira924ageの雑記帳スマートフォン用の表示で見るkira924ageの雑記帳この広告は、90日以上更新していないブログに表示しています。RPN)は、演算子をオペランドの後に記述する数式やプログラムの記法の一つです。実装が容易であるためコンピュータでの利用に適しています。実装にはスタックを用います。先頭から順に記号を読み込み、その記号が演算子以外であればスタックに値を積み、演算子であればスタックから値を2つ取り出して演算結果をスタックに積む、という簡単な操作の繰り返していき、最後にスタックの中に残った値が答えとなります。Expressionhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0087試しにこの問題を解いてみましょう。Calculate_RPN(s)中間記法で記述された数式を逆ポーランド記法に変換するこの変換もスタックを用いて行うことが出来ます。次のような手順で変換できます。ここ(http://knowledge.sakura.ad.jp/etc/220/)に書いてあることのコピペ。)だったらスタック上の演算子を(が出てくるまで出力し(と)は削除する演算子だったらスタックに積むスタックトップの演算子の優先順位がスタックに積まれる演算子より高ければそれを出力する数式を最後まで読み込んだ後、スタック上に演算子が残っていればそれをスタックが空になるまで順に出力する逆ポーランド記法では演算子の優先順位は左に行くほど高くなります。中間記法の数式を左から読み込んでいき演算子をスタックに積んだとき、+と-や*と/などの同じ優先順位のものは先にスタックに入っているものの方が当然優先順位は高くなります。(それはそう)空白区切りなしで中間記法で表された数式1行が与えられ逆ポーランド記法に変換したものを出力するプログラムは次のように書けます。動けばいいやと思って書いたクッソ汚いコードなのであまり参考にしないほうが良いと思います。".join(Generate_RPN(String2List(s)))中間記法で記述された数式を評価する先に書いた2つのコードを組み合わせれば中間記法で記述された数式の評価が出来ます。Calculatorhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0109&lang=jpこの問題を解いてみましょう。int(Calculate_RPN(Generate_RPN(String2List(s[:-1]))))感想やるだけなのにバグを埋め込みまくってコードを書くのにすごい時間がかかって辛かったです。あと一応AOJのシステムテストは通りましたが間違ってる可能性も大いにあるのでご注意ください。Calculatorの他の人の解答を見てみたらみんな全然違う解き方をしていたのでみんなの解き方での実装もそのうちやりたいと思いました。これ(https://gist.github.com/draftcode/1357281)とかめっちゃ参考になりそう。00:08逆ポーランド記法による数式処理Tweet広告を非表示にするもっと読むコメントを書く2016-10-03USBオーディオ変換ケーブルを買った。ハードウェアPCに接続したヘッドホンの片側だけ音が聞こえなくなるということがあった。別のヘッドホンに変えても同じ症状が起きたので、原因はヘッドホンの断線やプラグの酸化などではなくPCの差込口の方であることが分かった。電子工作の心得があるわけでもないので自力で修理などできるはずもなく、新しいPCケースを買うのも面倒なのでしばらく放置していた。中途半端にヘッドホンのプラグを差し込むと両方から聞こえる(ただしいくつかの音が明らかに抜け落ちている)という謎現象があったのでしばらくそれで我慢していたのだが、USBの変換ケーブルなるものがあることを知り、試してみた。BUFFALOの製品を買った。USBオーディオ変換ケーブル全般に言えることとして、マイクにノイズが入るということがあるらしい。自分は聞くだけなので関係ないけど、マイクも使う人は注意した方がいいと思う。[追記]後日談というか今回のオチ。思ってマザーボードに接続されているオーディオのピンを一度抜いて、再びしっかりと差し込んだたら問題が解決した。結局どこにも不具合は存在せず、ただマザーボード側のコネクタがしっかりささってなかったことが原因だったのだ。冷静に考えるとまっさきに疑うべきポイントなんだよなぁ。09:00USBオーディオ変換ケーブルを買った。Tweet広告を非表示にするもっと読むコメントを書く2016-05-03Pythonの組み込み実装のROT13を読む。Pythonアルファベットを任意の文字数ずらした暗号をシーザー暗号という。シーザー暗号の中で13文字ずらしたものをとくにROT13と呼ぶ。PythonではこのROT13が言語に組み込み実装として存在しており、thisモジュールはこのROT13でエンコードされている。"hogefuga".encode("rot13")ubtrshtn>>>自明ではあるが上の出力でROT13においてはデコードとエンコードが同じ処理であることも確認できる。組み込み実装として用意されているROT13のソースコードはthis.pyを見れば確認できる。s])23行目で空の辞書オブジェクトを生成している。97):に空目してしまいがちだがrange()関数は使っていないので注意が必要。65と97はASCII文字コードにおけるAとaである。chr()関数はASCII文字コードにおける整数を文字に変換する関数で、逆の処理をするのがord()関数。...(以下略)}という辞書を生成している。13というのがずらす文字数で0から25の整数である変数iに13を足したものの剰余をとり65もしくは97を足してchr()関数を実行することで、うまくシーザー暗号を表現している。この13をnにすることでより汎用性の高いプログラムになりそうである。s])だが、"".join()はリストから文字列への変換操作である。'e'])'hoge'リストは内包表記を使っている。c)はd[c]があればその値を返しなければcをそのまま返すという意味である。'N')'N'引数に文字列sと整数nをとり、文字列sをn文字シフトした文字列を返す関数caesar()は次のように書ける。s])例えばAOJのこの問題(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0017)の仕様に合わせるのであれば、こんな風に使える。04:34Pythonの組み込み実装のROT13を読む。アルゴリズム2017-11-19MSYS2にインストールしたImageMagickが正常に動作しない件について2017-09-08逆ポーランド記法による数式処理2016-10-03USBオーディオ変換ケーブルを買った。2016-05-03Pythonの組み込み実装のROT13を読む。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。