Translate

BTemplates.com

Powered by Blogger.

ラベル AtCoder の投稿を表示しています。 すべての投稿を表示
ラベル AtCoder の投稿を表示しています。 すべての投稿を表示

2021年3月11日木曜日

2019-11-11、12-03 到達点メモ


EslintとPreitterを使っているのだが、mdファイルが整形されるのは地味に困るので
mdファイルは整形されないようにしたかった。

◆手順
1. プロジェクト直下に.prettierignoreと.eslintignoreを作成する。
2. それぞれに、*.mdと記述する
おわり。

◆参考サイト
.eslintignore の配置場所は気をつけた方がいい - Qiita
Prettierの対象から一部ファイルを除外する- Qiita
eslintで任意のディレクトリ、ファイルをチェック対象から除外する方法- Qiita


最近AtCoderの問題を解いているのだが
たまにRubyのメソッドを使えば、簡単に解けるしまうケースが有る。
なお、今回取り組んだのは、C - Slimes という問題である。

具体的には、以下のようなメソッドである
「squeezeメソッドは、文字列中で同じ文字が連続している部分を1つの文字にまとめ、新しい文字列を返します。」
squeeze, squeeze! (String) - Rubyリファレンスより一部抜粋

これがあれば、わざわざ文字列一個一個を見る必要はなく、しかも早く結果が出る。
実装の問題もあるのだろうが、
自分の実装だと実行時間が771msに対し、ライブラリだと7msである。
一応、自分の実装は配列(1545ms)から文字列に内容を変えた上での結果である
恐らく、一つ一つ見るやり方だと非効率なのだと思われる。


途中まで記事を書いていたが、もう内容は覚えていない・・・。
お蔵入りにするのもあれなので、そのまま上げる

2019年2月8日金曜日

2019-01-30、02-01、02-07、02-08 到達点メモ


AtCoderのRubyでのB - Minesweeperのネタバレあり。


何故か2019/1/30にイスラエルから700くらいアクセスがあった。
普段10くらいしかないのに、一体何があったし・・・。
ざっと調べてみたが、何か事件があった訳ではないようだ。
VoiceTimerでググってみたが、何か特別なことがあった訳でないようだし・・・。
本当に謎だ。

Android

エミュレーターで720dpの画面のテストをしたい場合
xlargeが720dp

Node.js

ワンクリックで特定のサイト群を一括起動する機能が作りたかったので作った。
運用していくと色々やりたいことが出てきそうだが、
ひとまずはnpmのライブラリにあるopenerで十分実現できる
var opener = require ('opener');

opener ('chrome');
opener ('http://yahoo.co.jp);
opener ('http://google.com');
opener ('https://www.nononagainfo.com/');

上記の通りにやるとタブが増える感じで
起動することができる。
他のブラウザを立ち上げていると特に立ち上げたいものが多い場合だと
そっちにが立ち上がる時があるので注意。
やり方がなかなか見つからなかったから
案外難しいのかと思ったが凄く簡単だった。

参考サイト:openerを使ってnpmスクリプトからブラウザを開いてみる
参考サイト:opener
参考サイト:npm script を試す (サンプル付き忘備録)

AtCoder Ruby

B - Minesweeper
動作が上手く行かない時の検証の仕方が凄く下手だ。
今回の問題は文字列の中に含まれる"."が、0の時になることがありえるので
本来は、"#"で検索をかける前に、"."を全て0に変換する必要があるのだが
それを最初にやらなかった為、出力結果が本来加算されるべきところで加算されていなかった。

最初に変換をやっとけと言われてしまえばそれまでなのだが
そもそも変換がきちんと行われていないということに気づくのが遅すぎた。
デバッグの仕方が悪いのはわかるのだが、具体的にどう理屈をつけてやればいいんだろう?

いや、そもそもPrintデバックから卒業する時なんだと思う。
と、下のサイトを見て思いました。
printデバッグにさようなら!Ruby初心者のためのByebugチュートリアル

あと、メモとして書いておくが
事前に0の数値の配列を作っておくという手法は盲点だった。
確かにそれをやったほうが速そうではある。

rubyだと nil || "AAA" だと "AAA"が採用されるようである

具体例

puts nil || "BBB"
結果はBBB

puts "AAA" || "BBB"
結果はAAA


2019年1月28日月曜日

2019-01-19、20、24、26、28 到達点メモ


AtCoderで、B-1 21の問題(コンテストが終了した問題)に関するRubyで解いた
ネタバレがあるので嫌な人は見ないようにしてください。


git logをコマンドプロンプトで使っていたら、日本語が文字化けしていた。
正直なところ、恒久的な対処方法が分からなかったので
git bashを使うことにした。
これなら文字化けしない。

参考サイト:Windowsでgit log見た時日本語が<E6><97>~みたいに化けた時の対処方法
参考サイト:git log、git diff、git showでの日本語の文字化けをまとめて対策

というか、コミットはVisualStudioCodeを使えば割とどうでもなることが良く分かった。
ついで話をもう一つするとshift-jsで開くと文字化けするので、utf8で保存しよう。

正規表現について

以下のような文字列があったとする

Word Adobe PhotoShop (フォトショップ)

これを以下のようにしたい
Word,Adobe PhotoShop (フォトショップ)

その場合は以下のようにすればよい(EmEditorの場合)

検索(分かりにくいが、一番最初の方に半角スペースが入っている)
『 ([^(|^P])』

置換
『,\1』

()でくくったところは置換時に変更しないという意味で
^は否定の意味
[]は[]の中の任意の文字。複数の文字とかを使いたい時に使う?

参考サイト:正規表現
参考サイト:正規表現:文字列を「含まない」否定の表現まとめ
参考サイト:文字列の一部だけを変更したい
参考サイト:特定の文字列を含まないという正規表現


ruby(AtCoderで、B-1 21の問題(コンテストが終了した問題)に関するネタバレ注意)

AtCoderで、B-1 21の問題(コンテストが終了した問題)を解いた際にコードのバイト数が少ない回答を見たのだがその回答に感動しました。
平方数はそうやってもとめるのかと

puts number==(number**0.5).to_i**2 ? :Yes : :No

他の言語はわかりませんが、rubyだと小数の階乗ができるので
そこをInt型に変えて小数を落として、更に二乗すれば
元々平方数が出せる値なら一致するので
大体どの値でも出せて便利だなと思いました。

200.to_s.split("")の処理よりは、200.to_s.charsの処理の方が軽い

あと、よくあるa>bのときは、aが大きい、a=bの時は等しい、a<bの時はbが大きい
とやりたい場合は、以下のような方法もある

judgment = ["等しい","aが大きい","bが大きい"]
puts judgment[a<=>b]

見やすいかどうかはともかくとして、圧縮したい場合は便利。

x |= yを見つけたのでなんじゃこりゃ?
と思って調べてみたらどうやらビット単位のOR代入の省略形らしい。
x=x|y
で、何に使うかというと配列で一意の合成をやりたい場合に便利なんだそうだ。

例えば、以下のようなコードを書いたとする
x = [1,2,3,4,9]
y = [3,4,5]
x |= y
puts x.to_s
x2 = ["aa","bb","abb"]
y2 = ["a","bb","ccc"]
x2 |= y2
puts x2.to_s

結果は以下のようになる
[1, 2, 3, 4, 9, 5]
["aa", "bb", "abb", "a", "ccc"]

uniqの処理って重そうだったし
一々合成するならこれの方が処理が速そう?
きちんと計っていないので何とも言えないが。

参考サイト:Ruby |= assignment operator