AtCoderは応用情報合格の役に立つという話。あるいは、ブログのログの部分。

前回までのあらすじ

前回は2020年の6月にPCを組み立てたときみたいですね。

今回は、「その前に転職してて、転職ついでに資格試験を受けたら合格してたよ。」という話です。

のつもりだったのですが、国語力のなさが災いして、導入で下書きが2000文字を超えたので、大幅に削減しました。転職の話とかが気になる人が観測されたら、後日書くかもしれません。

 

応用情報合格にAtCoderが役に立った話(本題)

2019年半ばに転職しました。

最終学歴としては、一般的な私大文系学部卒なので、Twitterで「最難関は0次の申し込みと起床試験」と聞いていた基本情報技術者試験に申し込み、問題集(基本情報技術者合格教本)を買いましたが、最初の30ページくらい勉強したところで飽きて、「前職の関係で起床試験には強いから問題ないのでは?」と思い直し、YouTubeの2の補数の話(基本情報技術者ワンポイントゼミ_第4回目講義 - YouTube)を見て、中学の頃から使っている太宰府天満宮で買ってもらった鉛筆に数字を書き直して本番に臨みました。

試験の内容自体は知らないものがほとんどでしたが(30ページしか勉強してないので当然ですね)、鉛筆転がしの運が良かったのと、AtCoderのおかげで午後のアルゴリズム問が解けたので、無事合格となりました。

合格してしまったので、次の応用情報も受ける必要がありそうな気配を感じ(資格を取っても給料は変わりませんが、社員の勉強を求めている会社なので、分かりやすい折衷案として、資格試験の受験が使われていそうな気配があります。)、次の春の応用情報を受けることになりました。

応用情報も問題集(応用情報技術者合格教本)を買ったものの、重かったので、応用情報技術者試験ドットコムでの勉強に切り替えました。
ところが、出勤中の移動時間で20問くらい解いたところで、春の試験が中止となり、とりあえず秋も申し込んで、また流れれば「勉強したけど試験がなかったんですよね」で乗り切ろうと決意しました。

その後、秋試験は実施となりましたが、春がなくなってダラダラしたのとかいろいろあって、「落ちたら勉強するでしょ」の精神で本番へ。(余談ですが、午後で落ちた時の午前免除があると勘違いしていたので、これから受ける方はご注意ください。)

 

で、なんやかんやあったのですが、午前65点の午後72点で合格していました。

午後の選択問題が1・2・3・4・11で、「一応法学部卒だから、11の監査はいけるやろ」というノリで選びましたが、そもそも午後の問題を見たことがないし、当然勉強もしていなかったので、どれを選んでも変わらないというのがあり、1から順に解きました。(応用情報技術者合格教本は午前の問題しか載ってないらしいので、テキストを買うなら午後のものを選ぶことをおススメします。)

ということなので、やはり勝因はAtCoderですね。

結構まじめな話として、午後のプログラミングが得点源になることを考えると、これは事実なんだと思います。(ただし1-indexedに注意が必要になりますが…)

あと、競プロerをTwitterでフォローしていくと、情報系つよつよ大学生や高専生、本職のつよつよプログラマがTLにあふれてくるので、いわゆる「進研ゼミで見たやつだ!」が発生しているのかもしれませんが、その副次的効果も含めて、AtCoderは良いぞ!!(ステマ)

 

合格しちゃったね(後日談)

合格しちゃったので、この資格も私の中では「申込期限を守れて、朝起きれる人」の証明書にしかならない可能性のある資格に見えています。(私がそうなので(ABC189-Dで「ANDとORってなんだ?」とググりました。))

また、会社での勉強してる感の演出のために高度試験を受ける必要が出てきましたが、一旦セキュマネでお茶を濁してから考えます。

 

ブログのログの部分

こんなにも中身のない合格記事は見たことがないですね。

さて、なぜこのタイミングで書いたかという話ですが、ブログの存在を思い出したこと以上に、今日の第1回部分トーナメント参加が大きいです。

部分トーナメントは、しゃく(dem08656775)さんが主宰されている面白いコンテンツの1つなので、勝手に宣伝したくなりました。

しゃくさんは、くそなぞなぞコンテスト(通称「くBC」)や、年末の競プロ流行語等、面白いコンテンツを毎年のように生み出している方で、個人的にすごく好きなのですが、私の参加は今回が初めてなのでがんばりたいです。

個人的には「佐山聡魔裟斗の部分」のような近い括り(この例だと格闘家)での部分問題が好きなのですが、一般的な語彙かどうかの判定が難しく、知識問になってしまうと楽しめない人が増えてしまう問題点があります。

しゃくさんはその辺りの感覚が優れていて、基本的には一般的な語彙で良い安心感があるのが、各コンテンツが面白い理由の一つだと思います。

第1回部分トーナメントは2021/1/31(本日)21:00~予選開始予定なので、もし興味を持たれた方は、しゃくさんと部分トーナメント(bubuntounamento)をフォローしてみることをオススメします。

 

ということで、宣伝が間に合いそうなので、終わりとします。

「PCの組み立てはプラモより簡単」とは必ずしも言い切れないという話

パスワードの再設定をしました。

約1年半ぶりの更新です。
この間、AtCoderのレートが茶色に落ちたり、win7のサポートが切れたりしました。
 

今回のお話

今回は「PCの組み立てはプラモより簡単」と言われて自作したけど、そんなことなかったよという話です。
(上記の発言をした、某白いPCパーツ屋の店員さんはどんなプラモを組み立ててるのか気になります。)
 
個人的にはまった点を挙げていくので、これが気にならない方は自作に向いているかもしれません。

1.説明書が説明してくれない

まず、説明書が基本的にプラモより不親切です。なんなら日本語ですらなかったりします。
物によると思いますが、私が選んだケースは、説明書にネジ留めヶ所が15ヶ所描かれていますが、ネジは14個入りと書いてあります。意味がわかりません。(結局バランスをとって13ヶ所留めました。)
あと、説明に番号がなくて、どこまでが1つの説明なのか分かりづらかったです。

2.精密機器かつ接続に力が必要

パーツをはめるのに、プラモより力が必要です。そのうえ、精密機器なので、力加減をプラモよりためらいがちです。(ビデオカードを挿すとき、壊したかと思いました。)
これも物によりますが、私が選んだケースは少し小さめだったようで、パーツがめちゃくちゃ干渉するので、1度はめると取り外しが厳しいです。(おそらく私には不可能です。(自作の意味…))
ちなみに私には取り外しができないので、配線も全て表からつないでいます。「裏配線?なにそれ、美味しいの?」状態です。(配線直してやろうか?という方がおられましたら、ご連絡お待ちしております。)
そして、今回の最はまりポイント、マザーボードにケースのリセットボタン等の2pin×3と1pin×2の合計8pinを刺す工程ですが、下の写真のG CONNECTORという神パーツの存在に気づかずに組み立てたため、私は4時間かかりました。本当に投げ出すか迷いました。(個人的には、このパーツがなければ、この工程だけを考えても組み立て費用1万円くらいなら出しても良いくらいだと言っても過言です。5千円くらいでしょうか。)

f:id:Inaba3:20200303073522j:plain

 このコネクタに5本のケーブルを刺してから本体に刺すと、私の4時間が嘘のように1発で刺さるみたいです。箱の中身はしっかり確認しましょう。

プラスドライバーは#1と#2の2本必要な気がする

「ドライバーは#1の1本だけでOK」という情報を見て、#1の精密ドライバーとマイナスドライバーのセットを購入しましたが、精密ドライバーだったのが悪いのか、私の力が足りなかったのか、一部のネジが回りませんでした。諦めて#2のプラスドライバーを買いに行きましたが、トイレットペーパーやティッシュペーパーを求める民衆によってレジが大混雑していました。デマ、許すまじ。

PCパーツ1式は重い

 我が家には机すらない状態なので、文字通りPC関連商品を一式揃えました。
今回お邪魔した店舗は、雨の日は無料配送キャンペーン等を行っているようでしたが、私が行った日は降りそうで降らない日だったので、下の写真の品々を両手に抱えて帰ることになりました。
f:id:Inaba3:20200301164842j:plain
行きは30分だった道が、帰りは1時間以上かかりました。(途中2回ほどベンチで休みました。)
一式揃えようと思っている方は、素直に配送料を払うか、車で買いに行きましょう。
どうしても持って帰りたい場合は、電源だけでもカバンの中に入れましょう。紙袋の中の電源は、めちゃくちゃ重いです。(私は耐えられなかったので、ベンチで荷ほどきして、電源だけをエコバッグに入れて肩から掛けましたが、作業中は警察官に怪訝な目で見守られていました。)
 

良いこともあるよ

以上の問題点が問題に感じなかった方、あるいは以降の良いことが問題点より魅力的に見える方は、自作しても良いかもしれません。

グッズがもらえる場合がある

時期の問題もありますが、実店舗はだいたい何かしらのキャンペーンをしているイメージがあります。

今回は、3月頭だったので、バレンタインデーの余りと3月のクリアファイル、メーカーのおまけがもらえました。

個人的にはステッカーが嬉しかったので、ノートPCを買ったら貼る予定です。

f:id:Inaba3:20200303222902j:plain

 値段はネットと比べても見劣りしない

個人的には意外でしたが、ネットの最安値と比較しても、ほとんど変わらないか、ものによっては安いくらいでした。(それでも私の給料は全消ししましたが…)

店長さん曰く、「一応我々もPC好きでやってますし、ネットの情報も見て値付けしてますからね」とのことで、確かになというところです。

あと、今回はどちらにしろ給料全消し確定だったので気にしませんでしたが、店長さんから商品の説明を受けたときに「先週までこれとこれのセットで安売りしてたので、もしセットで買うなら、『店長が先週の値段で良いって言ってた』って対応した子に伝えてください」と名刺を渡されたので、店員さんとの会話が苦でない方はもっと安く揃えられると思います。

あるいはそこまでしなくても、週替わりや月替わりの安売り商品を地道に集めていけば、配達無しで安く無理なく揃えられるかもしれません。

計画性が大事ですね。

ということで

私にはプラモの組み立ての方が何倍も楽だったので、この駄文が同じような方の自作を思いとどまらせることが、できれば幸いです。餅は餅屋です。

ところで、win10のPCが手に入ったので、これで心置きなくネットにつなぐことができます。ブログも更新されるようになるかもしれません。

 

HTTF2019予選

前回までのあらすじ

正の得点が取れたらふみこんの記事を書こう。と思ってたら、いまでも書けてない。そこで、HTTFも正の得点が取れてないけど、とりあえず記録しておく。

ちなみにここでいう正の得点は、何もしないいわゆるそのまま提出より上のこと。

本題

問題は問題ページをご覧ください。

ロボが1回300手を500回繰り返して、立ち止まるマスがばらけるように工夫

 

何もしないで80940点

全LorRで82340点

全2倍で270点

全3倍で31463点

ということで82340より上を正の得点とす。

取れたら続きを書きたい。

夏休みプチプログラミングコンテスト2018 その-1

前回までのあらすじ

夏休み、延長戦も終わりましたね。いかがだったでしょうか。

ところで私は、競プロみたいなの以外も作るぞみたいなことを言った気がしますので、ここに未完成のゴミを置いておくことにしました。

ソースコード

<?php
class calendar{
 
  private $year;
  private $month;
 
  public function __construct($y,$m){
    $this->year = $y;
    $this->month = $m;
  }
 
  public function create_rows(){
    $last_day = date("j",mktime(0,0,0,$this->month+1,0,$this->year));
 
    $rows = array();
    $row = self::init_row();
 
    for($i=1;$i<=$last_day;++$i){
      $date = date("w",mktime(0,0,0,$this->month,$i,$this->year));
      $row[$date] = $i;
 
      if($date==6||$i==$last_day){
        $rows[] = $row;
        $row = self::init_row();
      }
    }
    return $rows;
  }
 
  public function get_info(){
    return $this->year . "-" . $this->month;
  }
 
  private static function init_row(){
    $array = array();
    $array = array_fill(0,7,"-");
    return $array;
  }
 
}
 
$year = date("Y");
$month = date("n");
$cal = new calendar($year,$month);
 
echo <<< EOL
 
<!doctype html>
<html lang = "ja">
<head>
  <meta charset = "utf-8">
  <title>php calendar</title>
    <style>
    h1{
      font-size:18px;
      margin:0;
    }
 
    th{
      background-color:#cc6;
      font-size:13px;
      text-align:center;
    }
 
    td{
      background-color:red;
      font-size:13px;
      text-align:center;
    }
 
    input[type="text"]{
      width:35px;
    }
  </style>
</head>
<body>
 
<h1>
EOL;
 
echo $cal->get_info();
 
echo <<< EOL
</h1>
<table>
  <tr>
    <th>日</th>
    <th>月</th>
    <th>火</th>
    <th>水</th>
    <th>木</th>
    <th>金</th>
    <th>土</th>
  </tr>
EOL;
 
foreach($cal->create_rows() as $row){
  echo "<tr>";
  for($i=0;$i<=6;++$i){
    echo "<td>" . $row[$i] . "</td>";
  }
  echo "</tr>";
}
echo <<< EOL
</table>
 
</body>
</html>
EOL;
 

説明のような何か

f:id:Inaba3:20180903012503j:plain

(これは罠で、9行目の$this->month=$mを8月に合わせないと、この表は表示されませんね。)

夏休みカレンダーを作りたくて、codeprepのphp でカレンダーを作るコードを書き変えてましたが間に合いませんでした。

あと最低限やりたかったこととしては、

8月1日より前を灰色にする。(夏休み前なので)

9月1日と2日を追加する。(夏休み延長戦なので)

の2つですが、今年の夏休みの私には無理でした。(来年の私はたぶんやらないので、誰かやりたい人かできる人がいたら教えてください。)

(ところで私は、結局のところphpしか触ってませんね。)

あとがき

まあ競プロ以外に触れてるのでギリギリセーフとしましょう。(codeprepさん、プロ生ちゃん、他参加者関係者各位、ありがとうございました。)

また機会があればブログを更新するかもしれませんが、おそらく忘れるでしょう。

(AtCoderで水色になるか、今回のプチプロみたいなイベントを見つけるかしないと書きそうにないので)

(have a nice programming ! みたいな終わり方ができるブログを1回くらい書いてみたいものですね。)

 

夏休みプチプログラミングコンテスト2018 その1.5

前回までのあらすじ

ついに「プチプロその1」を提出したところ、クエリちゃんから「これで夏休明けまでに無事宿題も終えられるデス?」というリプライをもらったので、『夏休みの日数と宿題の総量から、夏休み明けまでに宿題を終えるために必要な1日の宿題消化量』を求める問題とソースコードを書いておくことにしました。(ところで全く作品を見てなさそうなリプライですね。)(これは罠で、この記事を書かせるためのリプライだったという読みが多数派)

作品の説明という名の問題文

某氏が夏休みの宿題が終わるか判定するコード(その1参照)を書いたところ、クエリちゃんは宿題が終わらない処理能力の趣味焼ちゃんがいることに気づきました。宿題が終わらないと、クエリちゃんは悲しんでしまいます。そこで、某氏は宿題が終わらない趣味焼ちゃんを処理能力の高い趣味焼ちゃんと交代させることで、宿題を休み明けまでに終わるようにしようと考えました。その1と同じ入力が与えられるので、宿題が終わる場合にはYesを、宿題が終わらない場合には交代する趣味焼ちゃんに必要な1日の処理能力の最小値(整数)を出力しなさい。

 ソースコード

<?php

list($n,$t,$c)=explode(" ",trim(fgets(STDIN)));

echo ($n*$c>=$t) ? "Yes":floor($t/$n);

?>

入出力例

入力例

1 2 1

出力例

2

1日の宿題消化量2の趣味焼ちゃんであれば、夏休み明けの提出に間に合います。

説明書きとか

その1と同じ配点で出そうな問題ですが、参加者を増やすために100点問題を複数並べるコンテストくらいでしか見ないような気もしますね。(類題としては、趣味焼ちゃんを手伝うプロ生ちゃんに必要な処理能力とか、趣味焼ちゃんが何人に増えれば終わるかとかを求める問題でしょうか。)

ちなみに1日の処理能力の「最小値」という指定がなければ、宿題の総量をそのまま出力すればACしますね。(これは本質からずれますが、配点の低い問題はテストケースが弱いことが多々あるので、嘘解法でもACすることがあります。)(あくまでACであって『正解』ではないあたり、競プロを作った方も仕方ないと思っていたのかもしれませんね)

終わりに

ということで、競プロの布教?になった気はしてませんが、記事を読んでくれた方は数名いるみたいなので良しとしましょう。

ところで、他のプチプロ参加者の提出が増えてきましたが、予想通りレベルの高い作品の数々で最初にしょぼいの出しておいて良かったなという気持ちです。

もし「参加したいけど他の方のレベルが高くて出しづらいな」という方がいると悲しいので、定期的にしょぼい作品を提出して「なんやこの程度なら私のが良いの作れるわ。提出してやろ」と思わせていきたいですが、進歩がないのもプロ生ちゃんや他の参加者さん(そしてここに見に来てくれた方)に悪いので、HSPとかのPHP以外の言語で作るか、アプリとか画像系の作品を作るか出来るように精進したいなと思う日々です。(思うのは自由なので)

 

 

 

 

 

 

夏休みプチプログラミングコンテスト2018 その1

前回までのあらすじ

夏休みプチプログラミングコンテスト2018に参加してみようと思った私だったが、競技プログラミング以外でプログラミングをしたことがないことに気づいた。

せっかくなので、「プロ生ちゃん界隈且つ非競プロer」に対して、競プロの紹介のようなこともしつつ、コンテストに参加しようとなった。

問題、あるいは今回の制作物

『趣味焼ちゃんは夏休みの宿題を夏休み明けの初日に出さなければなりません。夏休みの残りの日数がN日、宿題の総量がTで、趣味焼ちゃんが1日に片づけられる宿題の量がCの時、夏休み中に宿題を終えられるならYesを、終わらないならNoを出力しなさい。なお、入力は1行でN,T,Cの順に半角空白区切りで与えられます。』

『入力 N T C』(1<=N<=31,0<=T<=10^9,0<=C<=10^9)

 

『入力例1) 31 90 3』

『出力例1) Yes』

趣味焼ちゃんは、毎日計画的にこなすことで、宿題を終えられます。

 

『入力例2) 1 2 1』

『出力例2) No』

趣味焼ちゃんが宿題を終えるには、この夏休みはあまりに短すぎる。

ソースコード

<?php

list($n,$t,$c)=explode(" ",trim(fgets(STDIN)));

echo ($n*$c>=$t)?"Yes":"No";

?>

説明書きのようなもの

ということで、夏休みの日数、宿題の総量、1日にこなせる宿題の量が1行に半角空白区切りで与えられた場合に、宿題が終わるかどうかを判定するプログラムが書けましたね。(入出力例は上と同じなので割愛しました。)

競プロの(あるいはAtCoderの)特徴として、どこかで聞いたことのある名前に近いものが出てくることがあります。(例えばatcodeer君はトナカイとシカがいます。)(余談ですが、プロ生ちゃんのプロはプログラミングのプロですね。)

たぶんAtCoderでこの問題に近いものが出るとしたらABCのA問題(100点)だと思います。(何故これを書いたかというと、「時間をかけるべき問題ではないので、ソースコードがいわゆる『競プロerの書く1文字変数等を含んだ読みづらいコード』に近づいています。」という言い訳のためです。実際の上位陣はもう少し読みやすいコードを書いてると思います。(ただし、コードゴルフ勢は除く。)知らんけど)

ということで

もしこれを見て競プロに興味を持った方がいたら、ぜひ1度AtCoderを覗いてみてください。また、もしこれを見て興味を持てなかった方がいたら、やはり1度AtCoderで本物の競プロに触れてみてもらえると嬉しいです。

いよいよ8月なので、私もプチプロ2018の期間に競プロ以外のコードを書いてみたいですね。

夏休みプチプログラミングコンテスト2018 その0.5

前回までのあらすじ

プロ達の作品が先に提出されて出しづらくならないように 且つ 参加するのやっぱやめた〜とならないように という考えから、横線のない九九の表のようなものを生むソースコードを提出しました。

最速提出を目指していたガチ勢の方等おられましたら申し訳ないです。ゆるふわ素人勢の浅はかな提出ですのでご容赦ください。

というわけで、参加してしまった&しょぼさMAX なので8/31までの期間で改良or新作の提出をしていきたいと思います。

とりあえず表を作ったので、今日は中身を作りました。

横線のないH×Wマス計算用紙の答えの部分

ソースコード

<?php
list($h,$w) = explode(" ",trim(fgets(STDIN)));
$s = trim(fgets(STDIN));
if($s=="×"){
$n = strlen($h * $w);
}elseif($s=="+"){
$n = strlen($h + $w);
}else{
echo "がんばれー";
exit;
}
$i = 1;
while($i <= $h){
$j = 1;
while($j <= $w){
if($s=="×"){
$m = strlen($i * $j);
$ans = $i * $j;
}else{
$m = strlen($i + $j);
$ans = $i + $j;
}
echo "|" . str_repeat(" ",$n - $m) . $ans;
++$j;
}
echo PHP_EOL;
++$i;
}
?>

 

入力例)

9 9

×

 

出力例)

f:id:Inaba3:20180725232800j:plain

説明書きのようなもの

前回の提出と同じ形式で標準入力を与えると、表の中身の部分だけを返すコードです。(表全体にしなかったのは、出力結果が10行目までしか画面に表示されないからです。(※その0参照))

また、今回は割り算とか引き算だと表が壊れそうだったので、足し算とかけ算だけにしました。(実に小学生の夏休みの宿題っぽいですね。)

今後の予定とかなんとか

他の方の作品を見ながら、算数の表っぽいもの以外を作ってみたい。(実際「その0」で「いろんな言語で【ハロー夏休み】を出力する」っていう案があったけど、PHPしか書けないので却下されてたりします。)

競プロerの端くれとしては、競プロの入門編くらいの問題と解答を1つくらい作って布教になれば良いなみたいな気持ちもある。(何も思いつかなかったら「その1」はそれになります。)

まだまだ期間はあるので、偶然このブログを見てしまった人も参加していきましょ〜