ひとりも見捨てないことを、あきらめない

学校教育、社会教育、数学、技術家庭科、Youtube、EdTech、ICT、プログラミング、その他

ABC第3問 11/19 火

以下の問題集から、第3問です。

 

 念のため、お伝えしますが、この問題集には「模範解答」は、おそらくないと思います。逆に、この問題に取り組んだ人の解答は、すべて検索可能です。

 私は、過去の他の解答は見ないで、自分で解答を考えました。したがって以下の解答は私のオリジナルですが、同時に「あらけずり」な解答だろうと思います。

 

問題

f:id:takase_hiroyuki:20191119214853p:plain

 

解答

f:id:takase_hiroyuki:20191119214858p:plain

 

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

int main() {
 string s;
 cin >> s;
 int ct = 0;
 for (int i=0; i<3; i++ ) {
  if (s.at(i) == '1') ct++;
 }
 cout << ct << endl;
}

 

フィットネス 11/18 月

#フィットネス 2019/11/16
現在の走行距離の合計、約487km 

実は、この日は風邪をひいて熱がありました。おそらく37.5℃か38.0℃くらいあったと思いますが、「身体を動かして、汗をかいた方が早く治るだろう」と考えて運動しました。幸い、翌日には平熱に戻りました。

キャット&ドッグ 3回x3セット
ラット・プル 25kgx10回x3セット
ベンチ・プレス 20kgx10+25kgx7+30kgx3+42kgx10回+45kgx20回
 
トレッドミル(25分間) 2,240m ⇒2019年の累計 128,750m
 
ハムストリングス 23kgx10回x3セット
レッグ・エクステンション 39kgx10回x3セット
アダクション 49kgx10回x3セット
アブダクション 43kgx10回x3セット
プレス・ダウン 34kgx10回x4セット
アーム・カール 27kgx10回x4セット
レッグ・プレス 57kgx10回x3セット
腹筋 1秒x20回x3セット
ダンベル(内側) 10kgx10回x3セット
ダンベル(外側) 4kgx20回x3セット
ライイング・トライセップス・エクステンション 10kgx40回+12.5kgx5回
フロント・プル 39kgx10回x3セット
 
バイク(25分間) 0m ⇒2019年の累計 358,710m

 

f:id:takase_hiroyuki:20190519162425p:plain

 

ABC第2問 11/17 日

以下の問題集から、第2問です。

 

 念のため、お伝えしますが、この問題集には「模範解答」は、おそらくないと思います。逆に、この問題に取り組んだ人の解答は、すべて検索可能です。

 私は、過去の別の方の解答は見ないで、自分で解答を考えました。したがって以下の解答は私のオリジナルですが、同時に「あらけずり」な解答だろうと思います。

問題

f:id:takase_hiroyuki:20191119213006p:plain

解答

f:id:takase_hiroyuki:20191119213010p:plain

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

int main() {
 int a,b,c;
 cin >> a >> b;

 c = (a * b) % 2;
 
 if (c==0) {
  cout << "Even" << endl;
 } else {
  cout << "Odd" << endl;
 }
}

ABC第1問 11/16 土

 以下の問題集から、第一問です。

 

 念のため、お伝えしますが、この問題集には「模範解答」は、おそらくないと思います。逆に、この問題に取り組んだ人の解答は、すべて検索可能です。

 私は、過去の別の方の解答は見ないで、自分で解答を考えました。したがって以下の解答は私のオリジナルですが、同時に「あらけずり」な解答だろうと思います。

 

問題

f:id:takase_hiroyuki:20191114222852p:plain

 

高瀬の解答

f:id:takase_hiroyuki:20191114222858p:plain

 

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

int main() {
 int a,b,c;
 string s;

 cin >> a;
 cin >> b >> c;
 cin >> s;
 
 cout << (a+b+c) << " " << s << endl;
}

 

アプリを開発しようかな 001 11/15 金

「採点斬り」というフリーソフトがあります。このソフトを使用した先生から、以下のようなコメントが出されています(シェアができないようなので、勝手に引用しています。ゴメンナサイ)。同種のアプリを自分で開発してみようかなと思いました。


--引用ここから--
「採点斬り!!!」(採点を電子化するフリーソフト)その後

一日目、およそ2時間で八割が終了。二日目、点検も含めて1時間で採点、入力、印字完了。
以前だと、二日間ぶっ通しでヘトヘトになって採点をしてたけど、やはり電子化は明らかに早い。
それでも、うちの学校規模(120人)だとたいしたことないけど、大規模校ならもっと威力を増すだろう。

良かったところ
○手が疲れない(タッチパネルをポイポイポイで採点するので、腱鞘炎になる心配なし)
○頭が疲れない(計算とか苦手なので)
○目が疲れない(細かい字は拡大できるので)
○採点とエクセル素点入力が同時なので工数が激減。
という、おじさんに優しいというのは何より、

○厳格に採点できる(例えば、5点満点の記述で部分点の3点をつけた答案だけソートして表示できる。基準に従って採点しているかチェックできる)
○一問一問の採点結果がエクセルで出されるので、より細かい評価が可能。(例えば、「文法問題で主語の識別問題ができなかった生徒はこの子とこの子」のように整理されてデータ化されるので、次の指導に活かせる。
○解答用紙をスキャンしてから採点するので、改竄される心配はない。

などなど、今のところメリットしかない。
紙のテストは当分続くだろうから、こういう作業こそとっととデジタル化すべきだと思う。
--引用ここまで--

 このフリーソフトですが、それなりに古いソフトで、しかも開発が止まっているようです。なので、【じゃあ、高瀬が、アプリを開発しちゃおう】と考えています。
 プログラミングはとっても楽しいので、やってみようと思います。
 使い勝手等について、先生方の御意見もお聞きしたいですね。

f:id:takase_hiroyuki:20191115053641j:plain



 

やっと全部解けました。11/14 木

しばらく前から、「AtCoder Beginners Selection」に取り組んでいましたが、ようやく全部解けました。

 

 以下の画像のとおり、「AtCoder に登録したあと、とりあえず、挑戦してみる問題」です。ただし、私は、AtCoder に登録してから、すぐにコンテストにチャレンジしたので、Beginners Selection は、あとまわしにしていました。

 

f:id:takase_hiroyuki:20191114214717p:plain




f:id:takase_hiroyuki:20191114214722p:plain

 

現在11歳の社長さん 11/13 水

すばらしいです。でも、あまり「意外なこと」とは思えません。こういう素晴らしい人も、けっこうたくさん居ますよね。日本でも、20歳未満の「代表取締役社長」は、数百人の単位で存在すると思います。

f:id:takase_hiroyuki:20191112195837p:plain

 

 

やった!!成功!! 11/12 火

 前回の記事で、「メモリ不足で、ダメだあああ」と言っていた問題について、次のとおりプログラムを作成できました。ポインタの挙動については、まだまだ修行が必要だと感じています。

 

サンプルプログラム(高瀬作成)

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

int kensa(string *tmp, int num, int pt, int ll) {
 int res;
 string s;
 if (pt==ll) return 1;

 // case "dream"
 s = (*tmp).substr(pt,5);
 if (s=="dream") {
  res = kensa(tmp,num+1,pt+5, ll);
  if (res > 0) return res;
 }

 // case "dreamer"
 s = (*tmp).substr(pt,7);
 if (s=="dreamer") {
  res = kensa(tmp,num+1,pt+7, ll);
  if (res > 0) return res;
 }

 // case "erase"
 s = (*tmp).substr(pt,5);
 if (s=="erase") {
  res = kensa(tmp,num+1,pt+5, ll);
  if (res > 0) return res;
 }

 // case "eraser"
 s = (*tmp).substr(pt,6);
 if (s=="eraser") {
  res = kensa(tmp,num+1,pt+6, ll);
  if (res > 0) return res;
 }
 return 0;
}

int main() {
 int res;
 string S;
 cin >> S;

 res = kensa(&S,1,0,S.size());
 
 if (res > 0 ) cout << "YES" << endl; else cout << "NO" << endl;
}

 

プログラムの提出先

f:id:takase_hiroyuki:20191110113631p:plain



フィットネス 11/11 月

 今回は、メニューをすべて淡々と実行できました。ライイング・トライセプス・エクステンションは、どうしてもヒジに少し違和感がありました。そこで、ア)ダンベルを先に実行して、ヒジを温めることにした。イ)ライイング・トライセプス・エクステンションそのものを実施するときに、できるだけヒジのまわりの筋肉を用いてヒジを守るようにした。という2つのことを実行してみました。これで、しばらく継続してみて、様子をみるようにします。

現在の走行距離の合計、約485km
キャット&ドッグ 3回x3セット
ラット・プル 25kgx10回x3セット
ベンチ・プレス 20kgx10+25kgx7+30kgx3+42kgx10回+45kgx20回

トレッドミル(25分間) 2,830m ⇒2019年の累計 126,510m

ハムストリングス 23kgx10回x3セット
レッグ・エクステンション 39kgx10回x3セット
アダクション 52kgx10回x3セット
アブダクション 43kgx10回x3セット
プレス・ダウン 34kgx10回x4セット
アーム・カール 27kgx10回x4セット
レッグ・プレス 57kgx10回x3セット
腹筋 1秒x20回x3セット
ダンベル(内側) 10kgx10回x3セット
ダンベル(外側) 4kgx20回x3セット
ライイング・トライセップス・エクステンション 10kgx40回+12.5kgx5回
フロント・プル 39kgx10回x3セット

バイク(25分間) 9,300m ⇒2019年の累計 358,710m

 

f:id:takase_hiroyuki:20190519162425p:plain

 

データの「ポインタ」について。備忘録。11/10 日

変数そのものと、変数のポインタ(アドレス)の関係について、「基本中の基本」ではありますが、備忘録としてメモしておきます。

 

サンプルのプログラム

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

int main() {
 int x = 10; // x は変数である
 int *ptr = &x; // ptr は x を格納している場所(アドレス)を示している
 cout << "x: " << x << endl; // 10 になる
 cout << "ptr: " << ptr << endl; // アドレスその1
 cout << "&x: " << &x << endl; // アドレスその1
 cout << "&ptr: " << &ptr << endl; // アドレスその2 (prtのアドレス)
 cout << "*ptr: " << *ptr << endl; // もとの x の値(10)
}

 

実行結果

x: 10
ptr: 0x7ffc64610be4
&x: 0x7ffc64610be4
&ptr: 0x7ffc64610be8
*ptr: 10

 

f:id:takase_hiroyuki:20191110063736j:plain

 

f:id:takase_hiroyuki:20191110063740p:plain

 

 

メモリ不足。とほほ。11/09 土

「初心者用の問題」を解いていたのですが、再帰的な関数を使用するような問題で、単純に文字列を引数に用いたところ、あっという間にメモリ不足になりました。

f:id:takase_hiroyuki:20191109153938p:plain


これじゃあだめですよね。ちなみに、プログラムは次のとおり。


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

int kensa(string tmp,int num) {
 string s2,s3,s4;
 int res;

 if (tmp == "") {
  return 1;
 }
 
 // case "dream"
 s2 = tmp.substr(0,5);
 if (tmp.substr(0,5) == "dream" ) {
  res = kensa( tmp.substr(5), num+1);
 }
 if (res == 1) return 1;

 // case "dreamer"
 s2 = tmp.substr(0,7);
 if (tmp.substr(0,7) == "dreamer" ) {
  res = kensa( tmp.substr(7), num+1);
 }
 if (res == 1) return 1;

 // case "erase"
 s2 = tmp.substr(0,5);
 if (tmp.substr(0,5) == "erase" ) {
  res = kensa( tmp.substr(5), num+1);
 }
 if (res == 1) return 1;

 // case "eraser"
 s2 = tmp.substr(0,6);
 if (tmp.substr(0,6) == "eraser" ) {
  res = kensa( tmp.substr(6), num+1 );
 }
 if (res == 1) return 1;

 return 0;
}

int main() {
 int res;
 string S;
 cin >> S;

 res = kensa(S,1);

 if (res==1) {
  cout << "YES" << endl;
 } else {
  cout << "NO" << endl;
 }
}

冒頭の kensa 関数で、文字列を引数にしているので、うまくいきません。文字列のポインタを引数にするように、これから変更します。

 

むずかしいなあ・・・(●'◡'●)汗。11/08 金

 先日、AtCoder のコンテストに参加したのですが、難しくて制限時間内には正答できませんでした。くやしいなあ。問題は、次のとおりです。

問題文
長さ N−1 の文字列 S が与えられます.
S の各文字は < または > です.
長さ N の非負整数列 a1,a2,⋯,aN は, すべての i (1≤i≤N−1) について次の条件をみたす時,良い非負整数列と呼ばれます.
Si= < のとき: ai<ai+1
Si= > のとき: ai>ai+1
良い非負整数列の要素の総和としてありうる最小の値を求めてください.

 

 制限時間内に正答できなかったので、翌日、再度挑戦しました。時間外なので、得点にはなりません。結局のところ、何度も失敗し、ようやく正答にたどりつきました。

f:id:takase_hiroyuki:20191104095631p:plain

 

 具体的には、次のようなプログラムになります。

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

int main() {
 string S;
 cin >> S;
 long sz = S.size();

 vector <long> T(sz+1);
 vector <long> T1(sz+1);
 vector <long> T2(sz+1);

 T1.at(sz) = 0;
 for (long i=sz-1; i>=0; i--)
 if (S.at(i)=='>') {
  T1.at(i) = T1.at(i+1)+1;
 } else {
  T1.at(i) = 0;
 }

 T2.at(0) = 0;
 for (long i=0; i<sz; i++)
 if (S.at(i)=='<') {
  T2.at(i+1) = T2.at(i)+1;
 } else {
  T2.at(i+1) = 0;
 }

 for (long i=0; i<sz+1; i++ ) T[i] = max( T1[i], T2[i] );

/*
 cout << T1[0] ;
 for (long i=0; i<sz; i++ ) {
  cout << S[i];
  cout << T1[i+1] ;
 }
 cout << endl;

cout << T2[0] ;
 for (long i=0; i<sz; i++ ) {
  cout << S[i];
  cout << T2[i+1] ;
 }
 cout << endl;
 
 cout << T[0] ;
 for (long i=0; i<sz; i++ ) {
  cout << S[i];
  cout << T[i+1] ;
 }
 cout << endl;
*/

 long ct =0;
 for (long i=0; i<sz+1; i++ ) ct = ct + T[i];
 cout << ct << endl;
}

 

 今後も、がんばって修行します。

 

羅小白さんのドラム 11/07 木

 Youtube を見ていたら、元気なドラムの演奏がありましたので、御紹介します。台湾で活動している、羅小白さんです。

 正直なところ、「少しリズムが乱れているかなあ」と感じる部分もありますが、スティクを器用に使って楽しそうに演奏しているので、パフォーマンスとしては素晴らしいなと思いました。

 少なくとも、私には、こんな演奏は絶対に無理なので(アタリマエですけど)、尊敬します。


20150516 爵士鼓 羅小白 Moves Like Jagger

 

f:id:takase_hiroyuki:20191104095636p:plain