問題タブ [palindrome]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 2つの3桁の数字の問題の積の最大の回文を見つける
したがって、プロジェクトオイラーでは、問題4は次のように述べています。
回文数は、両方の方法で同じように読み取られます。2つの2桁の数字の積から作られた最大の回文は9009=9199です。
2つの3桁の数字の積から作られた最大の回文を見つけます。
私は以下を試しました:
しかし、これは機能しません。正しい答えの代わりに、私は580085を取得します。これは、少なくとも回文であると思いますが、それでも正しい答えではありません。
私のプログラムを以下から説明しましょうint main
:
int i
とint g
は私の乗数です。それらは2つの3桁の数字です。int final
最大の回文を格納する数です。- すべての数の可能性を取得するために、2つのforループを開始します。
- 最初の回文に達したときにgotoを使用してループから抜け出します(おそらくそうすべきではありませんが、このような小さなプログラムにはあまり影響しません)。
- 上からカウントダウンしているので、最初の回文は可能な限り最大のものになるはずです。
私のチェックについて説明しましょう:
- まず、これらは2つの3桁の数値を掛け合わせて、その値を保持するために文字が必要なサイズを決定するためです。電卓に行って999 * 999を掛けると、6になり、1を足す必要があります。私が以前に投稿した、最後に文字を
sprintf
置く質問の1つから。\0
- さて、charとallができたので、
result
(i*g
にint main
)をコピーして、に入れましたchar b[7]
。 - 次に
b
、チェックする必要のある各スロットをハードコーディングして、それが自分自身と同じかどうかを確認しました。 - それから私はそれに応じて戻りました。1は真、2は偽です。
これは私には完全に論理的に思えますが、奇妙な理由で機能しません。ヒントはありますか?
java - 文字列が回文かどうかをどのように判断しますか?
指定された String が Java の回文であるかどうかをテストするには、メソッドを使用せずにどのようにテストしますか?
ruby - 回文製品の問題に戸惑う
私はRubyを学んでいるので、プロジェクトオイラーパズルのいくつかを試してみようと思いました。恥ずかしいことに、私は問題4にたどり着きました...
問題4は次のようになります。
回文数は、両方の方法で同じように読み取られます。2つの2桁の数字の積から作られた最大の回文は9009=91×99です。
2つの3桁の数字の積から作られた最大の回文を見つけます。
したがって、ネストされたforループで999から100にループダウンし、回文のテストを実行して、最初のループ(最大のものである必要があります)を見つけたときにループから抜け出すと考えました。
これは回文580085を出力しますが、明らかにこれは範囲内の2つの3桁の数字の最高の積ではありません。不思議なことに、範囲を10 ... 100に変更すると、例のように、同じコードが9009を返すことに成功します。
- 誰かが私がどこで間違っているのか教えてもらえますか?
- また、内部ループから抜け出すためのより良い方法はありますか?
ありがとう
c - cで回文文字列をチェックしています
コマンドライン引数として文字列を受け入れています。入力した文字列が回文かどうかを確認し、結果を出力したい。私は次のコードを書きました。ただし、すべての入力に対して「パリンドロームではない」という結果が表示されます。
java - この Java 正規表現は回文をどのように検出しますか?
これは、一連の教育用正規表現記事の第 3 部です。この正規表現はどのように三角数を見つけますか? (ネストされた参照が最初に導入された場所)およびa^nb^n を Java 正規表現とどのように一致させることができますか? (先読み「カウント」メカニズムがさらに詳しく説明されています)。この部分では、入れ子になったアサーションの特定の形式を紹介します。これを入れ子になった参照と組み合わせると、ほとんどの人が「不可能」だと信じているものに Java 正規表現を一致させることができます: 回文!!
回文の言語は規則的ではありません。実際には文脈自由です (特定のアルファベットに対して)。とはいえ、最新の正規表現の実装は通常の言語以上のものを認識し、Perl/PCRE の再帰パターンと .NET のバランシング グループは回文を容易に認識できます (「関連する質問」を参照)。
ただし、Java の正規表現エンジンは、これらの「高度な」機能のいずれもサポートしていません。それでも、「誰か」( *wink* )は次の正規表現を書くことに成功しました。
これはうまくいくようですが、どうですか?
参考文献
コモンセンスアラート!!!
これは回文を検出する最良の方法ではありません。
O(N^3)
せいぜいです。より汎用的なプログラミング言語でこの検出を実行すると、より効率的で簡単になります。素数を見つけるために正規表現を使用したくないのと同じ理由で、回文を検出するために正規表現を使用したくないでしょう。そうは言っても、素数性のテストに正規表現を使用する方法を研究するのと同じ理由で、非再帰的非平衡グループ正規表現がどのように回文を検出できるかを研究します。それは楽しい、やりがいがある、教育的です。
関連する質問
- 正規表現を使用して文字列が回文であることを確認する方法は? - それは不可能だ"!(そうでもなければ...)
- 指定された文字列が回文かどうかを確認するには? - 多くの言語での非正規表現ソリューション
- 数値が正規表現で素数かどうかを判断する方法は?
regex - 文字が 2^n - 1 回繰り返される場合にのみ、この再帰正規表現が一致するのはなぜですか?
高度な正規表現手法に関するpolygenelubricantsの一連の記事 (特にHow does this Java regex detect palindromes? )を読んだ後、再帰 (PHP で) を使用して、回文を解析する独自の PCRE 正規表現を作成することを試みることにしました。
私が思いついたのは:
この表現についての私の理解では、0 文字または 1 文字 (2 文字未満のすべての文字列は暗黙的に回文であり、再帰で奇数の長さの回文を説明するため) に一致するか、2 つの同じ文字が分離されている必要があります。パターンの再帰によって。
残念ながら、 www.ideone.com/a9T3Fで確認できるように、そのようには機能していないようです。代わりに、2 n - 1 文字の文字列 (つまり、空の文字列、a
, aaa
, aaaaaaa
, a 15 ) の繰り返し文字のみが正規表現に一致します。
奇妙なことに、再帰がオプションになるようにパターンを変更すると (つまり、 www.ideone.com/D6lJR^(([a-z])(?1)?\2|[a-z]?)$
を参照してください。2 n回繰り返される文字 (つまり、空の文字列、、、、、a 16 )を持つ文字列にのみ一致します。 .a
aa
aaaa
aaaaaaaa
正規表現が期待どおりに機能しないのはなぜですか?
正規表現を使用しないことを提案したくてうずうずしている人々への注意:
この質問のポイントは、再帰的な正規表現を適切に使用する方法を学ぶことです。これは、文字列が回文かどうかを判断する効果的な方法ではないことはわかっています。また、何らかの理由で製品コードで回文を判断する必要がある場合は、再帰的な正規表現を使用しません。正規表現の高度な側面についてもっと知りたいだけです。
php - このPCREパターンはどのようにパリンドロームを検出しますか?
この質問は、PCREのマニュアルページに記載されている再帰パターンでは一致しないパリンドロームを含む、すべてのパリンドロームに一致するPCREパターンでの先読み、ネストされた参照、および条件の使用法の教育的なデモンストレーションです。
PHPスニペットでこのPCREパターンを調べます。
このテストケースで見られるように、このパターンはパリンドロームを検出しているようです(ideone.comも参照)。
では、このパターンはどのように機能しますか?
ノート
このパターンはネストされた参照を使用します。これは、このJava正規表現がパリンドロームをどのように検出するかで使用されるのと同様の手法です。、ただし、そのJavaパターンとは異なり、後読みはありません(ただし、条件付きを使用します)。
また、PCREのマニュアルページには、いくつかのパリンドロームに一致する再帰的なパターンが示されていることに注意してください。
マニュアルページは、この再帰パターンがすべてのパリンドロームを検出できるわけではないことを警告しています(文字が2 n -1回繰り返された場合にのみこの再帰正規表現が一致するのはなぜですか?またideone.comを参照)が、ネストされた参照/ポジティブ先読みパターンが表示されますこの質問ではできます。
r - Rの逆桁
Rの数字の文字列をどのように逆にすることができますか?
たとえば、6桁の数字が約1000個あるベクトルがあり、それらが回文であるかどうかを知りたいです。正反対の2つ目のセットを作成したいので、対戦を行うことができます。
objective-c - 奇妙なカカオバグ?
皆さん、下は私が学校の課題に使用したコードの一部です。O(大文字のo)を含む単語を入力すると、失敗します。このプログラムに1つ以上の大文字のOがある場合は常に、falseを返し、ログに記録します。文は回文ではありません。
回文は、回文が何であるかを知らない人々にとって、右から左、そして後ろに同じように読まれる単語です。(例:笑、カヤック、リバイバーなど)これまでに見つかった「最も古い」回文をチェックしようとしたときにこのバグを見つけました:SATOR AREPO TENETOPERAROTAS。
すべて大文字のoを小文字のoに変更すると、機能し、trueを返します。このコードでは、大文字のOが付いたすべての文/単語がfalseを返します。このプログラムを失敗させるには、大文字の1つで十分です。
それで、これはココアの奇妙なバグですか?それとも私は何かが足りないのですか?
- B
c - ポインターと再帰を使用しない C の回文
フレーズが回文 (左から右まで同じ単語) であるかどうかを判断しようとしていますが、うまくいきません。どうしたの?、ポインタも再帰も文字列型変数も使えない