質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1482閲覧

AtCoder Beginner Contest 049 のC問題(白昼夢)をJavaScriptの正規表現で解こうとしても一向にACになりません

maronn20

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/06/26 16:38

編集2020/06/26 16:41

前提・実現したいこと

AtCoder Beginner Contest 049 のC問題(白昼夢)を正規表現を使って解いているのですが、どうしてもACにすることができません。
一部のテストケースはクリアしている一方で、全てをクリアするまでには至っていません。
下記の「試したこと」に掲載したサイトで答えを確認したところ、一致する文字列をさがすという方向性は一緒な気がしているのに、正規表現を使った私のコードでは一向にACになりません。
コードのどの点がテストケースを満たさない場合を生み出すのかをご指摘いただけると幸いです。
よろしくお願いいたします。

該当のソースコード

function main(input) { const args = input.split('').reverse().join(''); //正規表現を使って、一致する文字列を空文字に置き換えている var rplc1 = /maerd/g; var rplc2 = /remaerd/g; var rplc3 = /esare/g; var rplc4 = /resare/g; var i = args.replace(rplc1,''); var j = i.replace(rplc2,''); var k = j.replace(rplc3,''); var l = k.replace(rplc4,'');  //条件分岐の際、余分な要素が入り望まない結果になることを防ぐために、boolean型に変更している var m = l === ''  //全ての文字列が空文字に置換されたのならTrueになるはずなので、  //その場合はYESを表示しそれ以外の場合はNOを表示するようにしている if(!m){ console.log('NO'); }else if(m){ console.log('YES'); } } main(require('fs').readFileSync('/dev/stdin', 'utf8'));

試したこと

AtCoder に登録したら解くべき精選過去問 10 問を JavaScript で解いてみたの答えは確認しましたが、自分のやっている考えと変わらないような気がしています。

補足情報

JavaScript(Node.js 12.16.1)使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

これ、わかりやすく書きます。

dream, dreamer...を
ABC, DEF, GHI, JKLとします。

この時、'ABCGHI'という文字列が与えられた場合。
まず、'ABC'が空文字に置き換えられて、残りが'GHI'に、
次に、'GHI'が空文字に置き換えられて、残りは''になります。
つまり、YESです。

しかし

以下のような文字列だったらどうでしょうか?

GABCHI

まず、'ABC'が空文字に置き換えられて、残りが'GHI'に、
次に、'GHI'が空文字に置き換えられて、残りは''になります。
YESと出力されます。しかし実際はNoですよね?

(teratailのこのバグどうにかならないかなぁと。

投稿2020/06/27 00:53

編集2020/06/27 01:05
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maronn20

2020/06/27 05:28

ありがとうございます! 非常にスッキリできました。 確かにこのような処理が起こるとNoの文字列をYESとしてしまいますね。 とても参考になりました。ご指摘頂いたことを踏まえて直してみます
guest

0

この順序に置き換えると先に"remaerd"から"maerd"が取り除かれ、"re"だけが残ります。

JavaScript

1 var rplc1 = /maerd/g; 2 var rplc2 = /remaerd/g; 34 var i = args.replace(rplc1,''); 5 var j = i.replace(rplc2,'');

投稿2020/06/27 02:32

etsuhisa

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maronn20

2020/06/27 05:26

すみません。これ少し順番を間違えたコードを乗せていました。 ①resare ②esare ③remaerd ④maerd の順でした。これだとご指摘頂いたことを考慮した処理になると思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問