mugaxのなんでも情報局

いろんな分野について発信していきます。

大人のための英語勉強法

高校生と大人では英語の勉強方法が異なる。ちなみに、ここでいう大人というのは大学受験用の英語をしっかり勉強して、それなりの英語力を身につけた人を想定している。

高校生は受験のために英語が必要。大学受験の英語は、答えを導き出せる程度の正確性で足りる。
一方、大人は仕事や専門分野の勉強や趣味のために英語が必要。ここでは、リーディングもライティングも精緻な読み書きが求められる。

そのためには、単語力と文法力が必要である。各種試験の問題で単に正解できる程度ではなく、もっと深い理解と応用力だ。

具体的な勉強方法は、英文を読んだら、不明な点がなくなるぐらい徹底的に調べる。単語と文法。できれば、背景事情なども含めて。モチベーション維持や実用性の観点から、自分にとって必要な分野の英文に絞って読んでいくのがいいだろう。

こういうことをやっても、TOEICの点数は上がりにくいかもしれない。それでいい。TOEICで測れる英語力とは異なる英語力を伸ばすことを目的としているのだから。
ちなみに、単語力と文法力があれば、リスニングとスピーキングは必要になったときに練習すれば十分だ。

誰でも簡単に使える翻訳アプリが実用レベルにまで発達した時代に、いわゆる英会話みたいなものに取り組んでも意味がない。通常の海外旅行や買い物などに必要な程度の軽い英語など、翻訳アプリに任せておけばいいからだ。
それよりも、専門家や作家などが書く英語の真の意味を理解したり、自分の意思を深いところから正確に伝える能力が必要であり、こういうことは翻訳アプリでは実現できないのだ。

キラーナンプレ(キラー数独)の解き方

ナンプレ(数独)の発展形としてキラーナンプレというパズルがある。いちいち説明するのも面倒なので、どういうものか知りたい人は検索してほしい。通常のナンプレより考える要素が多いので、より面白いものになっている。

キラーナンプレの場合、通常のナンプレの解き方に加えて、次のような解法がある。

  1. 合計が45を利用する
    それぞれの行、列、ブロック内の合計は45になる。これを利用して数字を埋める。2列で90、2ブロックで90なども使うことができる。
  2. 偶数奇数
    奇数を作るには奇数が奇数個必要などの性質を利用する。
    これによって、候補数字の組み合わせを絞ることができる。
  3. 最大最小
    3マスで20の場合、20-(8+9)=3であるから1、2は入らないなどを利用する。

キラーナンプレは論理的思考力の向上や、数の性質についての理解を深めるのに資するだろう。小中学校での中途半端なプログラミング教育より、キラーナンプレをする方が問題解決能力が高まるのではないだろうか。

 

合格体験記には書かれない真実

大学受験をはじめとする受験業界には合格体験記なるものが存在している。合格者が自らの勉強法や生活について記したものである。

それらを真似すれば合格するのかといえば、もちろん必ずしも合格するわけではないが、受験生にとって有益な部分があることは間違いない。

しかし、合格体験記には書かれない重要な真実がある。なぜ書かれないかというと、本人も気づいていないことだからである。

勉強ができる人というのは、実は、食事中や歯を磨いている時や風呂に入っている時などに、頭の中で勉強について考えている。時には、誰かと話をしている時さえも、数学や英語などのことを考えたりしているのだ。

無意識におこなっているので勉強時間にはカウントされていないし、本人も勉強しているつもりはない。しかし、これによって、理解が進んだり、新たな気づきがあったり、記憶の定着に繋がったりするのだ。

勉強が好きだからいつでも無意識に勉強について考えてしまう、と言うと身も蓋もないが、これもひとつの才能だろう。

おそらく、受験勉強に限らず、こういったことができる人が、その道で結果を出せるのだ。

 

 

 

 

 

同じ文字が3つ連続で並んでいる回数を求める in JavaScript

文字列の中に同じ文字が3つ連続で並んでいる箇所がいくつかあるか求める、というプログラミングの練習問題がある。
例えば、文字列が"abcXXXabc"の場合、答えは1になる。
また、"xxxabyyyycd"の場合は、yが4つ並んでいる箇所には3連続のyが2か所あるので、答えは3ということになる。

ループを使うのが普通の解き方だが、正規表現を使うと、とても簡単に解くことができる。


function countTriple(str){
  let arr = str.match(/(.)(?=\1{2})/g) ?? [];
  return arr.length;
}

ここで必要なのは先読みという手法だ。単純に「(.)\1{2}」などとすると、重なり合っている部分、つまり先の例ではyが4つ並んでいる部分で1つしかマッチしないのだ。
ちなみに、2行目の「?? [] 」というのは、マッチしなかったときにmatch()がnullを返すので、そのまま長さを求めるとエラーになってしまうため、nullのときは長さ0の配列を代入するという意味である。

畳語を抜き出す in JavaScript

畳語(じょうご)とは、「だんだん」「ふわふわ」「ぐるんぐるん」のように同じ文字列を重ねて作る言葉である。

畳語を抜き出す処理は正規表現を使うと簡単に実現できる。


let str = "ほっかほっかの弁当をpakupaku食べると、みるみるとブクブク太った。"
let re = /(.+?)\1/g;
let matchList = str.match(re) ?? [];
for(let v of matchList){
  console.log(v);
}
// --- 結果 ---
// ほっかほっか
// pakupaku
// みるみる
// ブクブク

国語の授業で、こういうプログラムを作ればプログラミングと国語の両方の勉強になるし、いわゆる文系でもプログラミングを学ぶ必要性を誰もが理解できるだろう。

 

正規表現の最長一致と最短一致 in JavaScript

正規表現を利用するのは便利だ。特に、JavaScriptでは正規表現が簡単に使えるので、利用しない手はない。ただし、最長一致と最短一致について理解していないと、思い通りの結果が得られない。だから、最長一致と最短一致について理解しておくことは非常に重要だ。

  • 最長一致というのは、できるだけ長い文字列に一致させるというルールである。
  • 最短一致というのは、できるだけ短い文字列に一致させるというルールである。

今回は、"<html><body><h1>Message</h1><p>abcdefg</p></body></html>"
という文字列から"<"と">"で囲まれた部分を取り出す場合で考える。

まずは、最長一致で取り出すコード


let re = /<.*>/g;
let str = "<html><body><h1>Message</h1><p>abcdefg</p></body></html>"
let arr = str.match(re);
for(let v of arr){
    console.log(v);
}

結果:
<html><body><h1>Message</h1><p>abcdefg</p></body></html>

 

次に、最短一致で取り出すコード


let re = /<.*?>/g;
let str = "<html><body><h1>Message</h1><p>abcdefg</p></body></html>"
let arr = str.match(re);
for(let v of arr){
    console.log(v);
}

結果:
<html>
<body>
<h1>
</h1>
<p>
</p>
</body>
</html>

何が異なるかというと、最短一致にしたい場合は、量指定子の直後に「?」を置いている。 たったこれだけであるが、知らなかったり失念していたりすると原因究明にかなりの時間を割く羽目になってしまうだろう。

ちなみに、Gオプションなしにすると、最初にマッチした時点で終了してしまう。これも、ミスしやすいので気をつけておいた方がいいだろう。

Gオプションなし


let re = /<.*?>/;
let str = "<html><body><h1>Message</h1><p>abcdefg</p></body></html>"
let arr = str.match(re);
for(let v of arr){
    console.log(v);
}

結果:
<html>

CSS(スタイルシート)を使うときにやったほうがいいこと3選

CSSでhtmlのデザインをするときにやった方がいいことを3つだけ紹介しよう。

  • デフォルトの設定をリセットする

各ブラウザはデフォルト値というものを設定している。例えば、h1タグを使うと自動的に文字が大きくなっていたり、太字になっていたりする。これは、デザインをしていくうえで邪魔になることが多い。特に、マージンやパディングが自動的に設定されていると、CSSを書いていくときにわかりにくい。そこで、デフォルト値をリセットしておこう。

* {
    margin: 0px;
    padding: 0px;
    font-size: 1em;
}

いわゆるリセットCSSというものがネット上で配布されているが、わざわざダウンロードしなくても、この3要素をリセットしておけば事足りるだろう。

  • 各要素に境界線を引いておく

デザインするときは、各要素の位置がはっきりと目に見えた方がわかりやすい。そこで、各要素に枠線を引いておこう。。

*{
    border-style: solid;
    border-width: 1px;
    border-color: rgb(156, 156, 200);
  }

枠線があるだけで、設定がきちんと反映されているか視認しやすくなる。特に、慣れないうちは枠線があることで、マージンとパディングの違いなどが理解しやすくなるだろう

  • 文字の大きさはemで設定する

文字の大きさの設定方法はいくつかある。その中で、emを勧める。emは大きさが一文字分の長さになる。閲覧者が各自のブラウザで設定した文字の大きさが基準になるので、emで指定しておけば、各自それぞれにとって見やすい大きさが基準になるのが長所である。