このページについて

このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。

見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。

挑戦する課題

レベルアップ問題集文字列処理メニューから「数値判定 (paizaランク C 相当)」を取り上げます。

以下は、問題公開 Web ページからの引用です。

問題

文字列 S が与えられるので、 S を整数に変換できる場合には “YES” , そうでない場合は “NO” を出力してください。

なお、文字列 S を数値に変換できるとは、S の全ての文字が { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } のいずれかであることをいいます。

入力される値

  • 文字列 S が 1 行で与えられます。

期待する出力

S を数値に変換できる場合には "YES" , そうでない場合は "NO" を 1 行で出力してください。

条件

  • 1 ≦ | S| ≦ 10000 ( | S| は、 S の文字数です。)
  • S の各文字は数字またはアルファベットの大文字です。

考え方

64bit の範囲内で計算できる数値であれば、入力された文字列が Int に変換できるか(イニシャライザが失敗するか否か)で簡単に判断することができるが、今回与えられた条件を見ると、与えられる数値(としての文字列)の桁数は 10,000 桁である。
したがって、 Int 型として処理することはできない。

ここでは、与えられた文字列を逐次判別し、一つでも数値、つまり  0 - 9  の以外の文字が存在すれば、それは数値ではないと判断することで処理を行う。

含まれる文字の判定式を独自に作るため、ここでは contains(where:) を使い、クロージャで条件式を記述している。

解答例

高階関数を使って記述すると

リファレンス