Paiza の プログラミング練習問題「多重ループ」を考える過程メモ(JavaScript) その1
(まだ解けてません)
練習問題に関しては問題やコードについて語っても良いという事で。
これですね。
for文を使った初心者向け問題の中の一つ。
問題を簡単に噛み砕くと、入力されたある言葉にある文字が入っていれば「YES」、入っていなければ「NO」と出力するという問題。
入出力例1では
- 入力例1
-
1
a
2
paiza
kyoko
- 出力例1
-
YES
NO
例2では
- 入力例2
-
2
c
d
2
cat
dog
- 出力例2
-
YES
NO
NO
YES
のように、言葉と文字の組み合わせ分、出力が増えていく処理を考えていく。
また出力の順番も重要で例2の場合
- cはcatに含まれている?→「YES」
- cはdogに含まれている?→「NO」
- dはcatに含まれている?→「NO」
- dはdogに含まれている?→「YES」
という順番で処理されてることが分かる。
PaizaのJavaScriptは標準入力の形がちょっと分かりづらいのだが
という感じで、linesという変数に配列で格納されて用意されてるのでこれを使うことになる。
必要そうな変数の準備。
(最初に全部用意したわけでなく、考えながら増やしてます)
PaizaでJavaScriptをやってて最初に詰みそうなポイント。
標準入力で渡された1とか2とかの数字はおそらく?文字列の型になっているので、
parseInt()やNumber()などのメソッドで数値に型変換しないと使えない時があるぞ!
文字と言葉の文字列を変数cとsそれぞれに配列で格納するための処理。
まずはfor文で空白が入るように文字列連結してからsplit(` `)で分割して配列にしてますね。
sの方のfor文は前提が独特だな・・・。
例1でいうとnNは3、lines.lengthは配列の中の数5を-1で4となり
3スタート4以下までのループでpaizaとkyotoの2回分回るということになります。
最初のループで"paiza"と" "が連結した"paiza "がsに入り、
2回目のループで"paiza "の後ろに"kyoto "が連結して"paiza kyoto "がsに入ってます。
それをs.split(` `)して空白部分で文字列分割し、sの中身は["paiza","kyoto"]となります。
ここからが多重ループになるんだろうなーと感づいたものの
考えようとすると頭が爆発しそうになり・・・
少し間が空いたのですがとりあえず肝となる文字が入ってるか判定して出力する部分から書いてみよう!
として書いたのが
解説に飽きてきたので簡単に
一番外側のfor文は言葉の数分だけループします、この例では2回。
sSpilitは言葉、例えば"kyoto"なら["k","y","o","t","o",]と一文字ずつ格納する変数。
その内側のfor文はsSpilitの文字数の回だけループします、この例では5回。
if文、["k","y","o","t","o",]のそれぞれと、この場合はaを比較して同じだったら「YES」と出力してbreakでループも終了します。
文字数回ループしても同じではなかったらelse ifに分岐して「NO」が出力されます。
この条件を書かずにelseで処理をすると同じではなかった文字数分だけ「NO」が出力されることになるので重要。
出来た!と思ったのだが
これだと例2のような文字が2つ(cとd)用意されてる場合でも1度しか判定出来ない!
ので!
その機能は明日に追加したい!のだが忘れてしまいそうな為のメモでした。
(if文の外側にもう一個ループ作ったらできそうじゃね?)
プログラミング再開の目標メモ【3年半ぶり?】
Processing触りたいのでまたプログラミング勉強します。再開だ
— あまだかしお(分身失敗) (@amakute_saksak) August 29, 2022
ということでプログラミングをしてる。
3年半前にプログラミングをやらなくなってしまった理由については
正直、何も覚えてないしブログにくらい書き残しておけよと思ったので
今回は目標くらいはメモっておこう、ということで・・・。
今は復学として「Progate」の有料プランに入って「WEB開発コース(Node.JS)」を進めている。
プログラミングのことなんてすっかり忘れていたので何も覚えていないと思いきや
手を動かしてみると意外と覚えてることもあって楽しいね。
「WEB開発コース(Node.JS)」を完走したら
の記事を参考にしながら「N予備校」に復帰して「プログラミング入門コース」を走り切りたいなー!
とりあえずセール中だったのでUdemyの「【JS】ガチで学びたい人のためのJavaScriptメカニズム」
は購入済みである。
復帰しようと思った理由は
前から「Processing」がやってみたくて
それをふと思い出したのと、
体調がずっと良くなくてそれがプログラミングを辞めた時期と重なってるのだけど
最近ちょっと安定してきたのが大きい、かな?
目標としては
一応「作曲」は出来るので
Processingと音楽データを連携させて遊びたいというのがある。
もうひとつは
最近切り絵をやっていて下絵も自分で描くようになったのだが、
アナログな手書きよりもデジタルのほうが向いてるような気がしていて、
幾何学模様を自分で生み出してそれを切り絵にしたら面白いかなと思っていて。
Adobe系のクリエイティブツールでも良いんだけどプログラミングを介してやってみたいんだよね~。
そんな感じです(完)
ちなみに
このブログを読み返してたら「Processing」に興味があるということが書いてあって
そこはブレてないなーと思った!
24日目
やったこと
2章05.vi
2章06.シェルプログラミング
2章07.通信とネットワーク
↑全部の解説動画試聴
感想
ちょっと乗り気になれないので、面白そうなことが出てくるまでとりあえず動画を見てみよう、という。
通信とネットワーク の話は面白かったな。
パケットの仕組みとか、別にどうも思ってなかったけど少し興味が沸いたかな。
2章で何をやるのか未だ不明だけれど、まあネット上に自分の場所を作る感じなのかな~。
viと見てまずVoが思い浮かんだ。某委員長関連のね。あれ好き。
22日目
やったこと
戦闘力メーターの開発(復習というより遊び)
感想
1章を終えた時に言っていた、戦闘力メーターのプログラムをこねくり回している。
1章で作った診断メーカーは、入力された名前が同じならば結果も同じだったのに、戦闘力メーターはランダムな数値が吐き出される仕様でいいのか?という疑問。
色々考えた結果、基礎戦闘力は名前で固定、覚醒戦闘力はランダムという仕様なら面白いのではないのか!?と思いついた。
そうなると将来的には対戦モードの実装もあるな~とか、TwitterのIDを入力したらTwitterのニックネームを取得してきて測定、みたいなことも出来るんだろうか?みたいな夢がひろがりんぐ。
まだ全然途中なのだが、やはりプログラムを考えるのは楽しく感じる。
HTML・CSSのガワはある程度作ったが今は全く機能せず、その横のchromeのconsoleでしか結果が見れない感じも楽しい。
さて、本日はN予備校分が0だったので解説動画をかけながら寝ます!