夏休みと後期を振り返る会
人間一年前のことは忘れていても半年前のことは案外覚えてる。(?)
後期テストも終わったので夏休みくらいから振り返りをば
8月
基礎論サマースクール
基礎論サマースクールに参加した。計算論に出会い「やっばこれめっちゃ面白いやん」となった。先輩の玲於奈さんのお家に泊めてもらった。ありがとうございます。そのついでに御茶ノ水で古本屋めぐったり秋葉原を観光したりした。
バイト
バイトが大量に入った。まあ、お勉強教えるバイトだし夏休みだしそうなるよね。(お仕事あるのはありがたい)
弾いてみた動画
ニコニコ動画、YouTubeに初めて演奏動画をアップロードした。とりあえず聞いてほしいです。ありがとうございます。
ピアノアレンジはまだまだストックがあるのでしばらくは投稿頑張れそうです。
tex勉強会
サークルで(la)texの勉強会をした。texの仕組みやlatexとの違いを述べて、実際にlatexの練習をしてもらった。今後も使えるいい感じの資料ができたのでは?
数物セミナー予習
それ以外は数物セミナーの予習をしていた。辛い辛いと言いながら予習を進めてたがこれがあったからこそ、今測度論を理解できていると言ってもいいくらい。
9月
数物セミナー
数物セミナーに参加した。
班員みんなやさしくて楽しく議論できた。前回参加したときより周りの参加者が話してる内容についていけたし、ちゃんとセミナーもできたしルベーグ積分もだいぶ理解できたし実りの多いものになりました。もう感謝しかねえ。ちなみに場所は福島県の白河。ラーメンが有名らしく、ラーメン屋だらけだった。数物セミナー終わったあとは白河駅を探索して白河ラーメン食べました。
ここで完全に夏休みの気力を使い果たした。
Remakers合宿
Remakers(立命館理系自主ゼミサークル)の合宿に参加した。集合論から始めて位相空間論のゼミをした。順序集合のことがあまり理解できていなかった気がしてたのでその辺りのことを発表した。しかし、予習もおざなりだったし微妙な感じに終わった。この合宿で『モテる男のための音楽理論講座入門』とかいうタイトルで発表した。どんな内容だったかはスライドおいておくので見てね♡
9月はこれ以外あんまり記憶がない。
10月
後期が始まった。
プログレセッション
プログレッシブロック限定のセッションライブイベントがあり、そこでELPのTarkusを演奏することに。どんな曲なのかは聞いてみて。
Tarkus - Emerson, Lake & Palmer [1971] (HD)
古い曲だし楽譜落ちてないかなと思って調べたら落ちてました。これでも助かってなくて、テクニック的に非常に難しい。僕が演奏を録音したものを置いておきます。「実はMIDI入力で後でうまく行くように編集した」とか言う甘いことはしてないです。生演奏です。 soundcloud.com
計算論の入門書
エフィーム・キンバー著の『計算論への入門』を読んだ。電車の中でのパラ読みでも雰囲気がつかめるいい本でした。
計算論への入門―オートマトン・言語理論・チューリング機械 (スタンダードテキスト)
- 作者: エフィームキンバー,カールスミス,筧捷彦,Efim Kinber,Carl Smith,杉原崇憲
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/09
- メディア: 単行本
- 購入: 1人 クリック: 20回
- この商品を含むブログ (10件) を見る
セミナー
数研で数理論理学セミナーと線形代数セミナーが始まった。数理論理学セミナーは鹿島先生の『数理論理学』を、線形代数セミナーは斉藤先生の『線形代数入門』を読んだ。
- 作者: 鹿島亮
- 出版社/メーカー: 朝倉書店
- 発売日: 2009/10/01
- メディア: 単行本
- 購入: 11人 クリック: 367回
- この商品を含むブログ (5件) を見る
- 作者: 齋藤正彦
- 出版社/メーカー: 東京大学出版会
- 発売日: 1966/03/31
- メディア: 単行本
- 購入: 4人 クリック: 102回
- この商品を含むブログ (47件) を見る
ディープラーニング
RCCでディープラーニング班に参加した。内容は『0からできる!(略)ディープラーニング』を輪読しながら実装しようというものだった。この本ではPythonが用いられていた。そこでPythonを勉強し始めたが、これが運命の出会いだった。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
暗号通貨
暗号通貨を始めた。Kindleでセールになっていた暗号通過について簡単にまとめられている本を読んだ。初めてbtcを買って数分待ってると20円分増えた。「これが投資ってやつか〜。いや、お金に対する考え方が変わりますねこれ」というのが第一の感想だった。
Atcoder
月末くらいに勧められてAtcoder(競技プログラミング)を始めた。プログラミングの勉強はとりあえずなにか作ってみよう!というのはよく聞きます。しかし、そういうので成功したためしがない自分にとってAtcoderはすごく合っていた。問題を解いていくことで勉強した証が残るのがモチベーションアップになった。さらに、問題を解いていくことでアルゴリズムの知識がつくし、なによりたくさんコードをかける。そして問題に正解すると純粋に嬉しい。そうして暇なときでネット環境とPCがあれば競プロをするようになった。
11月
pythonの勉強
pythonと運命の出会いを果たした僕はそのあまりのわかりやすさに涙を流しながらディープラーニング班、競技プログラミング、自分で購入した参考書、グーグル先生を使いつつ勉強した。
Kindle
kindleの良さに気づいた。暗号通貨を始めたのでお金のことも勉強しようと思った。大きめのセールがあったのでKindleでいろいろ買ってみた。結論から言うと大正解だった。読書量が格段に増えることに気づいた。ただ、専門書や教科書はKindleに向いてないなーとも思った。
正課
遅刻…
学園祭
10月に読んだ計算論の本とその他ウェブサイトなどを参考に有限オートマトンに関するLTをした。
12月
そろそろ記憶に新しい
Remakers機関誌
Remakersに記事を投稿するよう伝えられたので、今年かなり学んだルベーグ積分について書こうと思いました。しかし、手を付けてみると理解できていないことが多かったことに気付かされました。この記事執筆で自分の理解を整理することができたので、頭の中が大分スッキリしました。
遅刻
滋賀寒すぎだし神戸が最高すぎるのが悪い…
コンテスト初参加
atcoder beginner contestに初参加しました。この当時は過去問解いてる感じB問題がかろうじてできるくらいだったので、B問題を解くことを目標にしました。なんと無事達成しました。嬉しくないわけがありません。神は私に「競プロを続けなさい…」とお告げをしているのだと思いました。
冬休みとバイト
年末年始は日本の学生は冬休みなので、当然バイトも増えます。ありがたいですね。
大学行きたくない気持ちでいっぱいだったので、冬休みに入ると逆にタスクをたくさんこなせました。
ブログ
気づいたらブログ始めていました。
敗北の少年
投稿しました。うーん、もう少し早く投稿できたよね…?ぜひ聞いてみてください♥記事も読んでみてください♥
1月
膝を壊した
淡路島にサイクリングのテストランをしたら左膝を壊した。3週間はまともに階段の昇降ができなくなり、現在もまだ自転車に乗れない。非常に辛い。
TOEIC
645点でした。なんと英語を履修してた2回時点での得点が605点。しかし今回は英語を履修していない。にもかかわらずあの点数!
AGC020-B Ice Rink Game
僕に競プロを勧めてくれた方が「AGCに参加しては?」と言ってくれたので参加しました。そしてB問題が解けそうで解けなかったのです。悔しかったので解説読んでより詳細な説明を記事にまとめました。すると、atcoder社長の高橋さんにツイッターで言及されて少しバズりました。
ブログってバズるとめっちゃたくさんの人に読んでもらえるしすげえなぁと言うのが率直な感想です。
セミナー終了
数理論理学は完全性定理の途中まで終了した。これはかなりいい復習になった。学んだ内容を俯瞰すことができた。線形代数学は一回生とのセミナーだったので、ツッコミが厳しめだった。いい復習にはなったけれど、固有値の話までたどり着きたかったかな〜…
テスト勉強
大学生だし、ま、多少はね?
btc200万オーバーしたので利確した
儲けで舟木先生の『確率論』を購入しました。
- 作者: 舟木直久
- 出版社/メーカー: 朝倉書店
- 発売日: 2004/11/01
- メディア: 単行本
- クリック: 34回
- この商品を含むブログ (7件) を見る
ルベーグ積分を学んだ人ならサクサク読めると思います.私は大学の講義を聞いていても確率変数の概念がわけわかめだったのですが,この本を読んでばっちり理解しました.
感想
なんだかんだ色々やってますね...
色々と運命の出会いが多いと感じました(小並感)
AGC020 B Ice Rink Game
↑こちらも読んでみてください.
AGC020 B問題について書きます.
目次!
B : Ice Rink Game
問題概要
- 子供が人いる.
- ラウンドからなる「n人組作って~♪」ゲームをする.
- 「n人組」を作ると中にはあぶれちゃう子も出てしまう.そのような子は脱落する.
- ラウンド終了したとき,残った子供は二人だったという.
- あなたはこのゲームを傍から見ていたので,「このゲームが何ラウンド行われたか(の値)」と「各ラウンドにおいて作る『n人組』のnの値」を知っている
- あなたはこの情報からもともといた子供の数を推測してみたくなった
答えるべきもの
- の最小値と最大値
- として適切なものがない場合はと出力
制約
- ただし,とは第ラウンドにおいて作る『n人組』のnの値
解説
僕がこの問題を解いたときの思考過程をなぞりながら書きます.
具体例で考える
まずこの問題文を読んだ時に思ったのが「よくわからん」だったので,例で確認してみました.
入力例1
4
3 4 3 2
全部で4ラウンドあり,『3人組』→『4人組』→『3人組』→『2人組』の順でグループを組んでいきます.
この時,出力が
出力
- 6 8
でした.実際に計算してみると, となります.確かにあっていそうです.
求めるものはなので今度はこの例を用いて6,8を出す作業をやってみようと思いました.
の最小値は6だったので,6を求める作業をしていきます.
この表は各ラウンドにおいて「ラウンド終了時の子供の人数」と「ラウンド開始時の子供人数」と「作る組の人数」を表にしたものです.
赤色の文字は与えられた数値です.ゲームを開始する前は第0ラウンドということにしました.
最終ラウンドである4ラウンド終了時の子供の人数が2なので,4ラウンド開始時には子供は2人いるか3人います.
もし,4ラウンド開始時に子供が2人いたなら,それはすなわち3ラウンドの終了時に残った子供が2人ということです.
しかし,これはありえません.3ラウンド終了時に残った子供が2人だけという状況がありえないからです.
3ラウンドでは『3人組』を作れという指示だったので,少なくとも3人は子供が残ります.(後の重要な伏線)
では4ラウンド開始時に子供が3人いたとしましょう.
これは正しいです.
では次に3ラウンド開始時(2ラウンド終了時)の子供の人数を考えてみます.候補は3人,4人,5人のいずれかになります.
6人以上だとすると3ラウンド終了時に6人以上残ってしまいます.
6人以上はあり得ない
今回の場合,4人の場合のみありえます.
2ラウンドでは『4人組』を作れという指示だったので,残る子供の数は4人以上ですし,必ず4の倍数になっていないといけません.
こんな感じで表の数字を埋めていくと次のようになりました.
一般的に考えてみる
具体例でこの作業をしているとこのゲームの仕組みが分かってきました.一般的に論じてみます.
- 第ラウンド終了時の子供の人数を人とすれば,はの倍数である
- 第ラウンド終了時における子供の人数は人である
- である.とはをで割ったときの余りである.
- はの倍数である
ここまで整理すると解法が浮かびました.
各第[text:i]ラウンドの子供の人数ととからとして適切なを全てリストアップして,その中でも最小のものをとして最終的にはを計算すれば,もともといた子供の最小値が求められます.
最大値は適切なのなかで最大なものを考えていくだけです.
ただし,この解法は正しい答えが出せても時間制限という壁にぶつかります.
この解法だと,プログラムは二重ループになってしまうため答えをだす制限時間である2秒をいとも簡単に超えてしまいます.
コンテストに参加しているときはこのあたりまでわかったところで時間切れになりました.
pをループ無しで求めるには
解説のpdfに書かれているのはここからの話です.しかし,式だけ書かれている感じなのでここではそれをさらに詳しく書こうと思います.
https://img.atcoder.jp/agc020/editorial.pdf
再び具体例で考える
第ラウンド終了時における子供の数として考えられる値はいくつかあるはずです.そこで第ラウンド終了時における子供の数の最小値をとし最大値をとします
先ほどまでと文字の使い方は同じにして,としてみます.
の候補は0,1,2,3です.それぞれの場合においては4,5,6,7でありは8,9,10,11です.よって,は4でありは10です.
具体例だと直観的にわかってしまいますがポイントは適切なを考える前にまずはおよびのとりえる値を考えているということです.
の最小値をとし,の最大値をと置きます.
区間というのはラウンド終了時においてあり得るかもしれない子供の数になります.この区間の値での倍数となっているものを見て,その中の最小のものと最大のものを選んでそれぞれ,とするのです.
一般で議論する
第ラウンド終了時において子供の数の最小値を,最大値をとします.再び述べますが,組の数がであるとき,第ラウンドにおいてありえるかもしれない子供の数は区間で表されます.この区間での倍数である最小の数と最大の数を見つけていきます.
したがって,区間内にの倍数がなければ-1
を出力しなければなりません.よって,まずはこれについて判定しなければならないのですがそれは後述します.
第ラウンドにおけるあり得るかもしれない子供の数は先ほどの議論よりでした.この区間の中での倍数の最小値がであり最大値がになります.
すなわち,
となります.
を構成した方法と同様にするとはそれぞれ,
すなわち,
となり,添え字をずらせば,
となり,解説pdf通りの式が完成します.
ゲーム開始時,すなわち第0ラウンドにおける子供数の最小値,最大値である,は必ずとなります.
なぜなら,第0ラウンドではとみることができるからです.
したがって,,に関する漸化式を1からKまで回せばよいことになります.
また,Kラウンドからさかのぼっていくため,各ラウンドにおける組のデータを入れた配列は逆順にソートしておくと扱いやすいと思います.
区間[Li,Ri]内にAiの倍数があることを判定する方法
区間内のすべての数字についてで割り切れるかどうかをチェックしていけばよい
というのが,最初に思いついた方法ですが,これもfor文でループを作らないといけないため結局全体として2重ループになります.
区間とが与えられた時,区間内のの倍数の有無を判定する方法で繰り返し処理を用いないものを述べます.(自力で考え付いたので書きたい)
まず
であるかどうかを調べます.もし,上記がTrue
ならば次に
になっているかどうか,すなわち
になっているかどうかを調べます.もしこれがTrue
ならば,区間内にの倍数はありません.
例
提出
紆余曲折ありましたが,以上のような議論を踏まえて私は次のようなコードを提出しました.
Submission #1983745 - AtCoder Grand Contest 020
こういうブログ書いてる暇があるならもっと他の問題を解いていきたいなって思いました.
AGC020 A Move and Win
AtCoderを始めたもののバイトの関係でコンテストに参加できずにいましたが,時間があったのでAGCにチャレンジしてみました.
目次!
結果
A問題だけACです.翌日,B問題もACしました.B問題についても別に書きます.
A : Move and Win
いくつかの具体例を試すとすぐに法則が見えました.10分弱だったと思います.
問題の設定
- AliceとBorysがゲームをする
- マスに区切られたテープがある.左からと番号が振ってある
- ゲームスタート時AliceとBorysはそれぞれこのテープの第マス,第マスにいる
- 必ずAliceが先行でターンプレイヤーは右か左にマスだけ進む
- ターンプレイヤーが動きたいと思う方向に相手プレイヤーがいる場合,その方向に進むことはできない
- ターンプレイヤーがテープの左端(右端)にいる場合,左側(右側)に移動することができない
- ターンプレイヤーが左右どちらにも移動できなかった場合,そのプレイヤーは敗北する
- プレイヤーは勝つために最適な行動をする
答えるべきもの
- このゲームの勝利者
制約
解説
僕がこの問題を解いたときの思考過程をなぞりながら書きます.
AliceとBorysの動き方のパターンはたくさんあるように思われます.
それを全て試すわけにはいかないので,コード書く前に紙に実際の例を書いて何か法則を見つけようと思いました.
N=2 のとき
もっとも単純な時です.
先行のAliceはゲームのルールより左側にも右側にも進むことができません.
よってこのときはBorysが勝つのでテープの右側には"Borys"と書いています.
N=3 のとき
2番目に単純な時です.AliceとBorysの初期位置は3通り.
真ん中のパータンの時は"Alice"が勝ちます.
N=4 のとき
AliceとBorysの初期位置は例えば以下のようなものがあります.そろそろ法則が見えてきます.
どちらが勝つのか
ゲームを進行していってAliceのターン開始時に二人の位置が
Alice Borys
と隣り合ってしまったら"Borys"が勝ちます.
Alice 空きマス Borys
になる場合は“Alice”が勝ちます.
二人の初期配置によって勝敗が決まる
AliceとBorysの初期配置の空きコマが偶数の時.すなわち,
となれば"Borys"が勝ちます.
"Borys"が勝たないときは"Alice"が勝ちます.else
で書けばよいです.
以上より次のようなコードを提出しました.
AtCoderでの標準入力(python3)
python3系で標準入力するとき用メモ.
AtCoder毎日してるわけじゃないので忘れがち.
ほかの人も書いてるだろうけど自分のブログだとアクセスしやすいので書くぞよ.間違ったこと書いてたことに気づいたらそっと直します.
- 文字列だけの入力
- 一つの数値だけの入力
- いくつかの数値を入力するやつ(個数固定1行で一気に入力Ver.)
- いくつかの数値を入力するやつ(個数不定複数行で入力Ver.)
- いくつかの数値を入力するやつ(個数不定で一行で入力Ver.)
- 入力した単語を文字ごとに分割するやつ
文字列だけの入力
a = input()
input()はstr型の引数を持ちstr型のデータを返すので数値は入力できません.
一つの数値だけの入力
a = int(input())
input()
はstr型になるっぽいのでそれをint()
の入れ子にしたらint型になるっていうのめっちゃ直感的で好き
(中でどうやってint型にしてるのかはわからないけれど)
いくつかの数値を入力するやつ(個数固定1行で一気に入力Ver.)
こういうの
入力
- a b c
入力する個数は固定です.この例だと3個です.なので3個変数を用意して
a, b, c = map(int, input().split())
とします.
いくつかの数値を入力するやつ(個数不定複数行で入力Ver.)
こういうの
入力
n
a1
a2 ...
an
最初に,「これからくるデータの個数」を入力させて,そのあと入力する数値の個数分だけ(この例では3個)「入力して改行入力して改行...」形式で入力されるパターン
hoge = [] for i in range(0,3): a = int(input()) hoge.append(a)
リストを作ってappendメソッドで繰り返し入れていくという方法をとってます(一番初めに思いついたので)
入力される数値の個数が分かっているなら初めからその個数分の配列を用意するべきですよね.(記事書いてから気づいた)
appendメソッドがどういう仕組みで動いているのかこれまた分かんないんですけど,きっと空のリストを用意していたところから何か要素が入ったリストを新しく作ってhoge
に代入するんですから元々用意していた空のリストはどこに行ったのですかってなりますし,新しいリストはどこから生まれたのってなりますし...
以前ABCのB問題でこの書き方をしてたらTLEを食らった問題がありましたのでまた書き直すか
追記
こういう書き方もありかもですね.
n = int(input()) hoge = [0 for i in range(0,N)] for i in range(0,N): hoge[i] = int(input())
n = int(input())
がこれから入力されるデータの個数で,hoge = [0 for i in range(0,N)]
でデータの個数分の要素を持つリストを作っておいてfor i in range(0,N):
hoge[i] = int(input())
でhoge
にデータを入力していく...,みたいなやつです.
いくつかの数値を入力するやつ(個数不定で一行で入力Ver.)
こういうやつ
入力
n
a1 a2 a3 ... an
これに困ったのでこの記事を書こうと思いました.
リストの内包表記っていうかっこいいやり方を使えばいけるっぽい
a = [int(x) for x in input().split()]
for文です.
a1 a2 a3 ... an
をinput().split()
で読み取って[input()の部分]そして分割する[split()の部分].そのx
達をint(x)
にしたものをリストの要素しなさい!
的な命令です.こんなことするんですねーはえー.
さらに
a = [int(x) for x in input().split() if x != "0"]
みたいな感じで条件を付け加えることもできるようです.x != "0"
ってなってるのはこのif文の時点ではx
はまだstr型だからでしょうね.
Pythonは英語の文章みたいに書ける!
とよく言われますが,リストの内包表記は特にそんな感じがします.
入力した単語を文字ごとに分割するやつ
こういうの
入力
- hogehuga
入力した"hogehoge"
を['h','o','g','e','h','u','g','a']
という感じにしたいやつです.
a = input() x = [a[i:i+1] for i in range(len(a))]
例えばa = "abcde"
とするとa[0:1]
は"a"
になります.これはどういうことかというと,イメージとしては"abcde"
の"a"
の左側を0番目として縦線を引いていくイメージ.
"|a|b|c|d|e|"
という感じで縦線がひかれていてa[0:1]
は0番目の縦線から1番目の縦線の間のものを返すという感じです.
この例でa[0:3]
とするとそれは"abc"
となります.
なのでa="abcde"
としたとき,[a[i:i+1] for i in range(len(a))]
は
[ a[0:1],a[1:2],...,a[4:5] ]
すなわち
["a","b","c","d","e"]
となる,というわけでした.
また標準入力わからん!ってなったら書きくわえます.標準入力,地味に最初の難関な気がします.
『敗北の少年』を弾きました!
こんにちは.
kemuさんの『敗北の少年』を弾かせていただきました!
何より歌詞がとても大好きで思い入れも強い歌です.ここでは演奏動画の裏話をば.
目次!
楽譜
まず,今回のアレンジの楽譜をアップロードしました.
何か演奏動画をアップロードしたときには私のピアノアレンジの楽譜をDLできるようにします.
ピアノアレンジ的小話
語りたい話だけど読まなくていい話
ベース
この曲はコード進行も伴奏も言ってしまえば単純です.(だからこそ力強い曲なのですが)
前奏は
Dm → B♭ → C → F
サビは
B♭ → C → F → F
です.
この音をオクターブで8分音符でダカダカ弾くと左手完成です.下が実際の左手の楽譜.
テンポをずらさずやれば結構カッコよく弾けます🌠
不協和音
ギターのディトーションが激しい曲です.
僕がこういう音をピアノアレンジするときは不協和音を使っています.
一番最初の黄色い音です.「ラ・レ・ソ」という4度ずつ重ねる音です.
他にもこういう不協和音を使いました.
裏打ち
中盤のソロの導入部分です.左の動きが右の裏を埋める感じです.
黄色の縦線を見たら分かるように右手で弾いていない部分を左で弾いています.
練習法
左手のオクターブの8分音符を弾いて右手はメロディをなぞってみましょう.
右手の和音の一番高い音だけを弾けばメロディを弾くことができます.
それだけでもかなりカッコよく弾けるはずです.
『自転車丸洗いクリーナー』でクロスバイクを掃除した話
年末なので、自転車を掃除しました。
使った洗剤がとても良かったので記事にしておきます。
自転車使用状況
- 私のクロスバイクはGIANT escape RX2
- 購入して10ヶ月
- 普段は家と駅との往復のみ
- 長期休暇にロングライドとかする(ビワイチとか)
要するに、自転車初心者です。
普段メンテする時間はないので汚れもたまります。
こんなだったり、
こんなだったり。
触ったら指が黒くなります。黄砂で汚れた車みたいになってました。
自転車の掃除は専用の洗剤を使うべきだ
とGoogle先生はおっしゃいましたので、買いました。
EVERS(エバーズ) 泡クリーナー 自転車丸洗いクリーナー 水なし! 簡単泡洗浄! 480ml 自転車洗浄剤/ディグリーザー 樹脂パーツ対応 拭き上げのみ AWA-480
- 出版社/メーカー: EVERS(エバーズ)
- 発売日: 2015/07/15
- メディア: スポーツ用品
- この商品を含むブログを見る
これです。
私はアマゾンで買わずに自転車ショップで購入しました。タオルは付属でした。
使い方
- 自転車にシューっと吹きかける
- 泡になるので拭き取る
- おわり
簡単。洗い流す水さえ要らない。
実際やってみたのが↓
これが
こうなって
拭き取るとこうなります
『自転車丸洗いクリーナー』良い点まとめ
- 超簡単。シュってやってサッと拭くだけ
- 掃除なのに水が要らない
- お手頃価格(1000円前後)
『自転車丸洗いクリーナー』良くない点まとめ
- 室内で使えない
- 風が強いと泡が顔にかかる
何も考えずに吹きかけて拭いたら綺麗になる
くらいシンプルな洗剤でした。
大好きです。次もこれ使う。
初投稿
初投稿です。