おはやし日記

テーマ……バイク←プログラミング←旅

津久井湖へサイクリング[国道16号]

今週のお題「運動不足」…………を解消するためのサイクリング記録です(無理矢理導入)

先日の寒川神社サイクリング(寒川神社へサイクリング - おはやし日記)に引き続き、今度は津久井湖(城山ダム)へサイクリングに行ってきました。

マストドンに、城山ダムまでチャリで行ったという人がいて、googleマップで調べたら急な坂がなさそうだったので。

Googleマップ 高島町駅〜城山ダム(自転車ルートを参照)

横浜の海側から西に向かうのは全部急な坂があると思っていたが、国道16号(R16)は帷子川や境川に沿っていて、標高3mの高島町交差点(R16の起点であり終点)から標高140m程の橋本駅付近までほぼ一様な勾配でゆっくり登っていく道なのだ。

行程

全体図

全体としてはR16とR413を通るだけなのだが、往路では途中で県道56号に迂回している。というより復路で間違えて保土ヶ谷バイパス(の下)へ行ってしまったというのが正しいが……。

GPXの異常値(個人的メモ) GPXファイルの一つをgooglemapに取り込もうと思ったらエラーが出た。スマホのGPX表示アプリなどを見るとどうも緯度経度情報が飛んでいるコマがあるっぽい。正常なポイントは

<trkpt lat="35.4915598700" lon="139.5130685300"><ele>45.74</ele><time>2020-10-05T01:01:11.587Z</time><extensions><gpxtpx:TrackPointExtension><gpxtpx:speed>0.02</gpxtpx:speed></gpxtpx:TrackPointExtension><gpxpx:PowerInWatts>0</gpxpx:PowerInWatts><gpxdata:distance>10826.59</gpxdata:distance></extensions></trkpt>

となるのだが、VSCodeに放り込んで眺めていると

<trkpt lat="" lon=""><ele>45.70</ele><time>2020-10-05T01:01:12.296Z</time><extensions><gpxtpx:TrackPointExtension><gpxtpx:speed>0.02</gpxtpx:speed></gpxtpx:TrackPointExtension><gpxpx:PowerInWatts>0</gpxpx:PowerInWatts><gpxdata:distance>10826.59</gpxdata:distance></extensions></trkpt>

となっている行があった。運良く目視で見つけられた。

この異常値の行を削除して上書きしたら無事読み込めた。

浜松町交差点〜ローソン横浜川井本町店

往路もちゃんと起点から走れば良かったのだが一回海側に行くのがめんどくさくて浜松町交差点から。浜松町という地名だが東京の浜松町では無い。ここで保土ヶ谷方面へ向かうR1と北のほうへ向かうR16が分かれる。いきなりJRや相鉄を越える高架できつい坂だが短いので頑張って上り下りする。あとは鶴ヶ峰あたりまで相鉄と平行する。西谷駅鶴ヶ峰駅あたり(愛宕交差点付近)が少々大きめのアップダウンだが、それほど苦では無い。鶴ヶ峰辺りで相鉄とはお別れ。帷子川にそって登ってゆき、ローソンで休憩。ここまで10kmくらい。

Googleストリートビューを撮影する車がいた。

f:id:o-treetree:20201006045213j:plain
ローソンに停まっていたGoogleストリートビュー撮影車

ローソン〜県道56号〜相模原市境界

再出発してしばらくするとR16は右に曲がるが、標識の「相模原・八王子方面」に素直に従って直進。県道56号に入る。

片側1車線だけど割とトラックとか通るので怖かった。というか一回事故りそうになった。

後ろからタンクかなんかを積んだ大型車が迫ってきたので避けようとして歩道へ入ったのだが、そこに歩道橋があって狭くなっており、歩道橋にサンダルとペダルを(結構な勢いで)擦った。

f:id:o-treetree:20201006050308j:plainf:id:o-treetree:20201006050317j:plain
擦ったペダルとサンダル

サンダルはともかく、新品のペダルが傷ついてしまったのは悲しかったが、壊れたわけでは無いし自分に怪我はなかったのでまあ良しとする。しかし、あんなところで膝でも打っていたら大事故だった。重大インシデントである。それなりの速度でまともに走っている以上無理に譲る必要はないし、避けるなら避けるでもっと慎重にやるべきだ。

そんなこんなで一車線道路を走る大型車への恨みを募らせつつペダルを回しているとR16との合流地点、大和市相模原市境界である。

f:id:o-treetree:20201006050931j:plain
相模原市

対向車線では事故があったのか、警察が現場検証をしており、渋滞ができていた。

相模原市境界〜ファミリーマート相模原相生店

ここからは車線が増えるのでまあ安心して走れる。

と思ったら、前にクソデカ車両が現れて「特殊車両誘導中」と書かれた車まで引き連れていて、追いつくけど抜かせないのでコンビニに退避。

アクエリアスICE BOXを買って休憩。ここまで25kmくらい。

ファミリーマート橋本駅周辺

ひたすらまっすぐな道を進む。このあたりで歩道に自転車道が設置されていたが、道路との接続の段差がキツすぎて30km/h近い速度では到底走れたもんじゃ無いので普通に車道を走る。やるなら、段差を徹底的になくすか車道にレーン引くやつにしてくれよ。

橋本駅近くの橋本五差路もめんどいポイント。一旦左の道に逸れてから折り返してR16に戻った。いっそのこと地下道を使った方がスムーズかもしれない。

さらにちょっと走ると分岐してR413へ入る。

R413〜城山ダム

ここからはR413道なりに進めば良い。6kmほど進むと城山ダムが見えてくる。ダムの上を渡ったところで観光センターがあるのでゴール。

f:id:o-treetree:20201006053206j:plain
津久井湖

城山ダム

城山ダムでの写真。ダム右岸周辺。

f:id:o-treetree:20201006053327j:plain
つくいこ

f:id:o-treetree:20201006053432j:plainf:id:o-treetree:20201006053442j:plain
津久井湖の石碑

f:id:o-treetree:20201006053734j:plain
ダム諸元

f:id:o-treetree:20201006053754j:plain
城山ダム看板

↑この後ろに見えている山が「城山」らしい。この看板のそばに展望台があってダムと津久井湖を一望できる。

f:id:o-treetree:20201006054149j:plain
ダム本体

f:id:o-treetree:20201006054220j:plain
サイレン?

f:id:o-treetree:20201006054415j:plain
スマホで撮ったワイドな写真

帰路・城山ダム〜橋本

1時間ほどぶらぶらしたらあとは帰る。帰りは全体的に下り坂なので楽。

谷ヶ原浄水場交差点の信号機が、誤認防止のプレート付いてた。レアだなと思って写真を撮る

f:id:o-treetree:20201006092408j:plain
谷ヶ原浄水場交差点

橋本のマクドナルドで昼休憩。

橋本〜高島町

14:30頃出発。

早速橋本五差路でミスって地下道に迂回するなどした。

相模原市内を抜ける間はもう、回せば楽に30km/h超えるような感じで楽しかった。市境あたりの分岐で、往路と同じようにr56に行くところをR16へ左折してしまった。最初はまあいいかと思ったけど、バイパス下で横浜町田ICがあるようなところなので(?)そこそこ傾斜があって、自転車で走る道では無いなと思った。

何はともあれ往路と同じところに戻ってくれば、あとは下るのみ。若干空気が抜けて回転が悪い気がしてきたがまあ走れるのでず〜〜〜っと下っていく。

走行時間は1.5時間、全部で2時間かからないくらいで30kmを走りきり、R16起点の高島町交差点でフィニッシュ。

f:id:o-treetree:20201006093753j:plain
高島町交差点

完走した感想

これは定期的に走っても良いコースだと思った。往復80km近い距離ながら無理なく走破でき、行きは上りで帰りが下りというのもカンペキ。「ザ・山登り」みたいな坂を登らずともダムの高度まで辿り着けるのはコスパが良い。

相模大野あたりで分岐して宮ヶ瀬ダムも行けるのではないか?との期待が(え…………)

そういや前回「コンデジが荷物で一番重い。要るのか?」などと言ったが今回も持っていって良かった

あと、ハーフクリップの扱いにも慣れてきた。走り出しで直接嵌めるのはできないが、とりあえず裏面で踏んで始動し、ちょっと勢いづいたところで左足をこねくりまわすと7割くらいの確率で靴がクリップに収まるようになった。裏面で踏む→足を離すとクリップの重みで回転する→1/4(とちょっと)回転したところでつま先で抑えると嵌る、という感じっぽい。効果についてはよく分からんがやはりつま先を押し込めるのがデカイ気がする。

タイヤがなんか不安定な気がするので、機会があれば(気持ち的にはホイールから)タイヤを交換したい。

おしまい。

寒川神社へサイクリング

先日チャリのペダルを替えたので( 自転車のペダルを替えてみました - おはやし日記 )サイクリングに行きました。目的地はなんとなく、相模国一之宮、寒川神社です。

秋晴れのサイクリング日和で、なかなか気持ち良く走れました。

samukawajinjya.jp

↑やたら重たい寒川神社のHP

行程

全体図

自宅〜戸塚

戸塚駅周辺は標高が低いのですが、周囲は山(?)なので到達するのが大変でした。

8:30頃到着

戸塚〜湘南台

戸塚駅を東から西に回り込むところで少々迷った。

戸塚からブルーライン踊場駅への長い坂がなかなかキツかったが、戸塚周辺よりは緩やかか。長後街道を道なりに進む。片側一車線なのにトラックがやたら通るので怖かった。標識に従って適当に2回左折すると湘南台駅前。

9時頃到着

湘南台寒川神社

高倉遠藤線→遠藤宮原線を進む。ここが一番気持ちよかった。湘南台から3kmほどのところで標識を見間違えたのか南に逸れてしまった。

「宇都母知(うつもち)神社入口」の交差点では、相模平野と丹沢山地、さらに富士山まできれいに一望できて感動した。

f:id:o-treetree:20200930091017j:plain

そのまま道なりに進んでいくと「寒川神社 右折」みたいな看板があるので右折。

10時頃到着

寒川神社

f:id:o-treetree:20200930084339j:plain
相模國一之宮国幣中社寒川神社

財布が「キャッシュレス」状態だったので寒川郵便局でお金を下ろす。

f:id:o-treetree:20200930085119j:plain
本殿前の門

本殿に参拝。中ではご祈祷をやっていた。

f:id:o-treetree:20200930084548j:plain
寒川神社本殿

お守りを授かる。

おみくじは小吉。

御朱印帳を買い、御朱印デビュー。コロナ云々でか、書き置きのを頂いた。

池に鯉がいました

f:id:o-treetree:20200930090253j:plain
池の鯉

相模川〜湘南海岸

11:15頃、寒川神社を後にする。

一旦右岸に渡り、相模川堤防を下る。

f:id:o-treetree:20200930091033j:plain

途中舗装が途切れ下道に降りるなどしつつ、河口へ。なんで全部舗装してくれないんや

県道134号線に入り、河口にかかる湘南大橋を渡る。車道は、一応自転車ガイドの青矢印があるし橋を渡ったあとが多少楽なのだが横風が強いし車も普通に飛ばしてるので歩道が無難。渡った先の柳島交差点は歩道橋で渡る。

その後は車道を走っていたのだがなんか速度が出ず、タイヤが地面に粘りついてる感じがしたのでサザンビーチを過ぎたあたりで歩道に退避、ポンプで空気を叩き込む。タイヤ周りも交換したいなぁ。

空気を入れたら明らかに走りが軽くなった。そのまま飛ばして12:20頃セブンイレブン茅ヶ崎緑が浜店へ。おにぎり2個とからあげ棒、麦茶を買って昼飯休憩。

海岸〜大船

13時頃、再出発。

戸塚茅ヶ崎線で藤沢駅へ。天気予報通りの北風に阻まれる。さらに適当に走って大船駅へ。

大船〜日野IC付近〜自宅

大船で記録切るの忘れてた。まあええか。

やっぱりまた山があるので大変でした。おしまい。

完走した感想

今回の荷物で一番重かったのがコンデジと思われる。写真メインじゃないならスマホでも十分な記録ができると思うが、痒いところに手が届かないというか、そんなこともある気もしてしまう……

自転車のペダルを替えてみました

こんにちは。久しぶりに更新です。今回は、自転車のペダルを交換したのでそれを記録しておきます。

というか、もともとは単にトゥークリップ(ハーフクリップ)を取り付けようかなと思っていた。

ビンディング(専用のペダルと靴でそれぞれ固定するやつ)は仰々しいというか、そんなガチで走らないし普通に街乗りもするのでクリップがいいなぁって、さらにこういうのは初めてなのでガッツリと固定もしないハーフクリップにしてみた。

交換前

写真は撮ってないので無い。完成車についてたやつなので(詳しく調べたわけじゃ無いし)メーカーもわからん。ただ、手でひねるとねっとりと抵抗を感じる。アマゾンのペダルのレビューに「ペダルを変えると軽くなる」って書いてあったのでついでに交換。

パーツ

ペダル

  • MKS(三ヶ島)シルバン ツーリング

日本製・評判がいい・べらぼうに高いわけじゃ無い ということで雰囲気でこれにしました

ハーフトゥクリップ

  • Zefal

1000円しないのでこれ。MKSの金属製のは、高いのを買ってみてクリップうまく使えんかったら嫌なので。

ペダルフリップ

  • MKS SPIN-2

これはヨドバシで買った

https://www.yodobashi.com/product/100000001002330568/

トゥクリップの重さでペダルが下向きになるのを、これ引っ掛けて戻してつま先をはめる。らしい。

交換

マイチャリはイオンバイク購入で、もうしばらく安心パックの工賃割引があるので近くのイオンバイクへ。

f:id:o-treetree:20200927212128j:plain

10分そこらで交換してくれました。ありがたや

f:id:o-treetree:20200927213656g:plain

ペダルめっちゃクルックルになって草(アップロードサイズとFPSの兼ね合いでサイズが小さい)

mstdn.jp

f:id:o-treetree:20200927212212j:plain

ペダルフリップはチャリ屋にスルーされたので自分でつけました(サドルバックに積んでたちっちゃいモンキーレンチでナットを掴んで付属の六角レンチで留めるだけなので)

その他カスタマイズ

ワイヤーリングとカラビナで、ハンドルのところにポーチを引っ掛けられるようにした

f:id:o-treetree:20200927212228j:plainf:id:o-treetree:20200927212245j:plain

セリアで買ったこれ↓つかった(4本入りですが1本使った後に撮ったので)

f:id:o-treetree:20200927212032j:plain

ここにモバブ入れればマウントしているスマホに給電できる!やったね!前はフレームのサドルあたりに安いポーチをつけてそこから2mのコードをフレームに絡ませて伸ばしていた。それよりはよっぽどいい。

換装した感想(激うまギャグ)

ハーフトゥクリップはともかく、ペダルは、今まではねっとりしたのが感じられ(る気がしてい)たのがなくなって軽くなった(気がする)。

トゥクリップも、それ自体のホールド効果はまあまあって感じだけど靴をつっかける方向に力をかけられるようになったので結果的に靴にしっかり足を入れられるようになったので良いかも

明日長距離走ってみます。それでは。


追記

モノ 代金
ペダル 3097
トゥクリップ 546
ペダルフリップ 880
工賃 550(割引)
5073

そこそこかかってるなw

最近

なんでも、入門者よりはちょいできる、くらいまでやって飽きるのが悪いクセなのだが、その例に違わず競プロも飽きてきた。グラフとか扱えるようになってきたけど、頭回すのがめんどくなっちゃった

面白いんだけどね

 

----------

 

暑さが収まってきたので(まだ暑いが)チャリに乗っている。先日は50kmくらい平地を走ったりした。もう少し涼しくならんかなぁ

 

おわり。

座標圧縮備忘録

座標圧縮、なるアルゴリズムに出会いました。どうにかわかったつもりになったので記録しておきます。自分用メモ的な精度。

座標圧縮とは

詳しくは参考のサイトを見てください。

簡単に言うと、「座標の広い範囲に散らばっている点について、その相対的な位置を変えずに狭い範囲に集める」という技です。

さらに自己流に解釈すると、「注目したい点をリスト化する」という感じだと思いました。

例えば、座標軸にいくつか($ N $個)の点を載せたいとします。点が乗っている時true、無い時falseとしましょう。$ 0 \le \rm{座標} < 10000 $ とします。

int N;cin>>N;
vector<bool> z(10000, false);
for(int i=0; i<N; i++){
  int a;cin>>a;
  z[a] = true;
}
......
//input
5
3 19 11 24 13

範囲が小さければこれで済みますが、$-10^{9} \le \rm{座標} \le 10^{9}$ とかになるとどうしようもありません。

//input
5
24680 515 -12345678 3 12345678

このとき、

value = {-12345678, 3, 515, 24680, 12345678};
index = {3, 2, 0, 1, 4};

とすれば $i$ 番目の入力はvalue[index[i]]とやって求められます。

1次元だとあんまりありがたみがないような気がしますが、2次元の領域を扱うととても嬉しくなれます。

メモリ上で実際に触る範囲が要素数オーダーに減る!

実装

とりあえず1つの配列について。

template<class T>
vector<T> compress(vector<T> &V){
  //Vを圧縮後の値にする 元の値を得るために重複削除ソート列であるSを返す
  vector<T> S = V;
  sort(S.begin(), S.end());
  S.erase( unique(S.begin(), S.end()), S.end() );
  for(int i=0; i<V.size(); i++){
    V[i] = lower_bound(S.begin(), S.end(), V[i]) - S.begin();
  }
  return S;
}
  • vector S = V;
    入力されたVはインデックスに変換してしまうので、もともとの値を(ソートして)保存しておく配列が必要

  • sort(S.begin(), S.end());
    バラバラに入力された数字をソートする

  • S.erase( unique(S.begin(), S.end()), S.end() );
    uniqueは、配列の中で重複するものの2つ目以降を配列の後ろに押しやり、その「余り物」の先頭のイテレータを返す
    eraseは、指定された範囲の要素を削除する
    結果として、重複している要素が削除される

  • V[i] = lower_bound(S.begin(), S.end(), V[i]) - S.begin();
    lower_boundで、「ソート&重複削除」された配列の中でV[i]を指すイテレータを返す
    それから先頭のイテレータを引き算することで、「何番目か」がわかる

使用例1

#include <bits/stdc++.h>
using namespace std;

/**
 * 座標圧縮
 * */

namespace /* ZahyoComp.cpp */ {
  template<class T>
  vector<T> compress(vector<T> &V){
    //Vを圧縮後の値にする 元の値を得るために重複削除ソート列であるSを返す
    vector<T> S = V;
    sort(S.begin(), S.end());
    S.erase( unique(S.begin(), S.end()), S.end() );
    for(int i=0; i<V.size(); i++){
      V[i] = lower_bound(S.begin(), S.end(), V[i]) - S.begin();
    }
    return S;
  }
}

#define rep(i, n) for(int i=0; i<(int)n; i++)

int main(){
  int N;cin>>N;
  vector<int> input(N);
  rep(i,N)cin>>input[i];
  
  vector<int> S = compress(input);

  cout<<"compressed : RawData"<<endl;
  for(int i: input){
    cout<<i<<" : "<<S[i]<<endl;
  }
}
//input
7
100 120 120 130 115 115 150

//output
compressed : RawData
0 : 100
2 : 120
2 : 120
3 : 130
1 : 115
1 : 115
4 : 150

*/

[追記] もともと入力が入っていたinputが、「その入力が(重複削除ソートの)何番目か」を表す配列に化けていることに注意!その代わりS[input[i]]で元々の値を復元できている。

続きを読む

AtCoder M-SOLUTIONS プロコンオープン 2020 反省会 [A,B,C,D完][C++]

久しぶりの参戦。

A

#include <bits/stdc++.h>
using namespace std;

int main(){
  int x;cin>>x;
  if(x<600)cout<<8<<endl;
  else if(x<800)cout<<7<<endl;
  else if(x<1000)cout<<6<<endl;
  else if(x<1200)cout<<5<<endl;
  else if(x<1400)cout<<4<<endl;
  else if(x<1600)cout<<3<<endl;
  else if(x<1800)cout<<2<<endl;
  else cout<<1<<endl;
}

そのまま。

B

#include <bits/stdc++.h>
using namespace std;

int main(){
  int A,B,C,K;cin>>A>>B>>C>>K;

  while(K--){
    if(A>=B)B *= 2;
    else if(B>=C)C *= 2;
  }

  cout<<( (A<B && B<C) ? "Yes" : "No")<<endl;
}

目標は $A < B < C$ なので、そうなるように $K$ 回の間倍々にしていく。

最後の最後で、$A < B < C$ が完成していたらOK!!

C

#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;

int main(){
  int N,K;cin>>N>>K;
  vi A(N);
  rep(i,N)cin>>A[i];

  for(int i=K; i<N; i++){
    cout<<(A[i-K]<A[i] ? "Yes" : "No")<<endl;
  }
}

評点比較は例1を使うと

$$ \{96, 98, 95, 100, 20\} $$

については

$96\times98\times95$ と $98\times95\times100$ の比較 → $96$ と $100$ の比較

$98\times95\times100$ と $95\times100\times20$ の比較 → $98$ と $20$ の比較

という風に単純化できる。あとはfor文のiとか添字に気をつけて順次判定していく。

D

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
#define rep(i, n) for(int i=0; i<(int)n; i++)

int main(){
  int N;cin>>N;
  vi A(N);
  rep(i,N)cin>>A[i];
  A.push_back(0);

  ll money = 1000;

  vi list;
  for(int i=0; i<N; i++){
    list.push_back(A[i]); //今日の株価を区域に追加

    if(A[i] <= A[i+1]){
      //明日上がる
      ; //なにもしない
    }else{
      //明日下がる
      ll buy = money / list.front();
      money -= buy * list.front();
      money += buy * list.back();
      list.clear();
    }
  }

  cout<<money<<endl;
}

中心の考え方は、株価が上昇(等価含む)していく区域を見つけて、その初日で最大限買って最終日で最大限売る。これでマックスの利益が出る。

区域をlistで作ってゆき、翌日も株価が上がるならなにもしない。翌日に株価が下がるならその日が「区域」の終わりなので売買を(過去に遡って)やる。そして区域のリセットをする。

入力例1

$$ A = \{ 100, 130, 130, 130, 115, 115, 150 \} $$

区域 $\{100, 130, 130, 130 \}$ まで見て、100円で買い130円で売る処理をする

区域 $\{ 115, 115, 150 \}$ を見て、115円で買い150円で売る処理をする


なお、入力例1のように上昇したまま最終日を迎えると、「売買しなきゃいけないのに『翌日』がない」となり売買し損ねるため、「最終日」の後ろに株価が0円の日を付け加えておく。こうすると、

$$ \cdots 200, 100, 150, 0 $$

のときは最終日にlist = {100, 150}、「明日下がる」条件なので100円で買って150円で売る。

$$ \cdots 200, 150, 100, 0 $$

のときは最終日にlist = {100}、「明日下がる」条件なので100円で買って100円で売る(実質何もしない)

ちなみに、株価が下がり続けているときは、上記のようにlistに1つだけ(その日の)株価が入るので「実質何もしない」状態になる。


最初、int型でやってたらWAが出たんでlong longにしたらACなった。80日間あって $100 \le 株価 \le 200$ なので、株価が $100, 200, 100, 200, \cdots$ となる所持金が2倍になる$\times$40回 で $2^{40} \times 1000 = 1099511627776 \times 1000 \approx 10^{15}$ まで膨れ上がるんですね。

まとめ

久々だったけどDまで通ったのでまあよし。

プライバシーポリシー ・お問い合わせはこちら