- ベストアンサー
javascript 初心者
https://paiza.jp/works/mondai/data_structure/data_structure__set_boss この問題で以下のコードで試したのですが、大きな数字だと正しい結果が出ません。なぜなのでしょうか。有識者の方教えてください。 (汚いコードでごめんなさい) let n=lines[0]; let a=lines[1].split(" "); let b=lines[2].split(" "); let c=a.concat(b); const arrayB = Array.from(new Set(c)); const sort = arrayB.sort((a,b) => (a < b ? -1 : 1)) const answer=sort.join(" "); console.log(answer);
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
う〜む、分からん! まず、Paizaの問題見てみたんだけど、そもそもJavaScriptじゃ解けない問題なんだよな(笑)。 何故なら「JavaScriptには仕様上(EcmaScript仕様)入出力がない」。 だから入出力を介してる問題はJavaScript向きじゃない。 んで、勘違いしてる人が多いんだけど、例えばconsolelogってのはJavaScriptの機能じゃないのね。ブラウザの方の機能なんだ。 で、スタンドアロンJavaScript処理系、例えばNode.jsとか?で無理矢理動くように書いてみたのが次のコードだ。 実装例: https://www.ideone.com/s1g3Qm ただ、これがPaizaで動くかどうかは知らない。PaizaでJavaScriptでどう入力受け付けるつもりなんだか知らんからさ。 ただ、基本的なロジックってのは貴方が書いたモノと同じだと思うよ。比べて見てみて。 > 大きな数字だと正しい結果が出ません。 これも分からん。「大きな」ってどれくらい? JavaScriptってかなりモダンな言語ではあるんだけど、ブラウザで動く前提なんで、昨今の動的言語では珍しく整数の上限値ってのがあるんだよね。 Number.MAX_SAFE_INTEGER: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER 一応、9007199254740991って事になってるけど、さて、貴方はどんな「大きな」数を入力したんだろうか?
お礼
質問回答ありがとうございます。okwave初心者で補足(?)の方法がわからないのでお礼のほうから、追記させていただきます。大きな数字というのは説明不足でした。指摘してくださった部分について、詳しくは、 入力側で[1,2,3],[3,4,5]といったように各要素の桁が小さいときに問題なく動くが、[15082908 15082908 15082908 799449336 15082908 15082908 15082908 15082908 191381258 510755045 15082908 15082908 15082908 510755045 510755045 82819704 82819704 15082908 15082908 15082908 510755045]といったような、各要素の桁と、要素数が大きくなった時に、正しく実行されない、ということです。説明が拙く、すいませんでした。 そして、javascriptの仕様や特性について親切に教えてくださりありがとうございます。