問題タブ [rosetta-stone]
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.
language-agnostic - コードゴルフ:ピッグラテン
チャレンジ:
任意の長さの入力文を取得し、その文のすべての単語を豚ラテン語に変換します。豚ラテン語がわからない場合は、ウィキペディア: 豚ラテン語を参照してください。
仕様:
すべての単語がスペースで区切られ、すべての文が感嘆符、疑問符、またはピリオドで終わると仮定します。
ウィキペディアで言及されている母音にはバリアントを使用しないでください。
bread や quiz などの単語については、readbay や uizqay の代わりに eadbray や izquay を使用してもまったく問題ありません。
関数またはメソッドは完全に受け入れられます。つまり、ユーザー入力を取り込む必要はありませんが、ユーザー出力を表示する必要があります。
入力に複合語が含まれていないとします。
例:
勝つ方法:
勝者は、最小の文字数でチャレンジを行うプログラムを作成できる人です。
language-agnostic - コードゴルフ:4は魔法
パズル
高校時代に聞いたちょっとしたパズルはこんな感じでした…
- 質問者は私に番号を教えてくれるように頼むでしょう。
- 数字を聞いた質問者は、最終的に数字の 4 にたどり着くまで(たとえば、 10 は 3と言うかもしれません)、何らかの変換を繰り返し行います(この時点で、彼は4 は魔法です)。
- どんな数でも、最終的には 4 に変換できるようです。
目標は、変換関数を理解し、このパズルを自分で確実に監督できるようにすることでした。
ソリューション
任意のステップでの変換関数は、
- 問題の番号を取って、
- ハイフン、スペース、または「and」を無視して、英単語表現の文字数を数えます (たとえば、「ten」には 3 文字、「thirty-four」には 10 文字、「one43」) 20文字あります)。
- その文字数を返します。
これまでテストしたすべての数について、これは 4 に収束します。「four」にも 4 つの文字が含まれているため、ここで無限ループが発生します。代わりに、慣例により、シーケンスを終了することは単に魔法と呼ばれます。
チャレンジ
あなたの課題は、ユーザーから数値を読み取り、「4 は魔法」に到達するまで繰り返し適用される変換関数を示す行を出力するコードを作成することです。
具体的には:
- ソリューションは、それ自体が完全なプログラムでなければなりません。それらは、単に数値を受け取る関数ではありません。入力の因数です。
- 入力は標準入力から読み取る必要があります。(「エコー」からのパイプまたは入力リダイレクトの使用は、標準入力からも送信されるため問題ありません)
- 入力は数値形式である必要があります。
- 変換関数を適用するたびに、次の行を出力する必要があります
a is b.
。ここで、a と b は、変換された数値の数値形式です。 - 終止符 (ピリオド) が必要です!
- 最後の行は当然、
4 is magic.
. - このコードは、 0 から 99までのすべての数値に対して正しい出力を生成する必要があります。
例:
勝者は、ソース コードの文字数が最も短い投稿で、これも正解です。
ボーナス
また、変換関数を適用するたびに数字の ENGLISH NAMES を出力するバージョンのコードを作成することもできます。元の入力は数値のままですが、出力行には数値の単語形式が必要です。
(編集)いくつかの説明:
- 該当するすべてのケースで、単語を両側に表示したい。
Nine is four. Four is magic.
- ただし、大文字は気にしません。そして、単語トークンをどのように分離するかは気にしませんが、分離する必要があります。大丈夫です、大丈夫です
ninety-nine
、ninety nine
大丈夫でninetynine
はありません。
チャレンジに関しては、これらは別のカテゴリーのボーナス競争だと考えているので、これを選択する場合は、コードが数値バージョンよりも長くなる心配はありません。
バージョンごとに 1 つのソリューションを提出してください。
algorithm - Code Golf - 現在のページに基づいて近くのページ番号を生成する
課題は、シーケンス内の現在の位置に基づいて、シーケンス内の数値の具体的なサイズのサブセットを生成するアルゴリズムを作成することです。
Stack Overflow や Digg のような忙しいサイトでコンテンツの多くのページをナビゲートしているときに、最初のページ、最後のページ、または現在のページに近い特定のページにすばやくジャンプする方法をユーザーに提供することが望ましいことがよくあります。見る。
要件
- 最初と最後のページ番号は常に表示されます
- ページ番号のサブセットには、現在のページ番号とその前後のページ番号が含まれます (現在のページによって異なります)。
- ページ番号のサブセットは常に固定ページ数であり、次の場合を除き、その固定数を超えたり下回ったりすることはありません。
totalPages < fixedWidth
- サブセット内の現在のページ番号の位置は、次の場合を除いて固定されています。
1 <= currentPage < (fixedWidth - defaultPostion)
また(totalPages - currentPage) < (fixedWidth - defaultPostion)
- 出力は、データの最初のページとサブセットの最初のページの間、およびサブセットの最後のページとデータの最後のページの間に0 より大きい差があることを示す必要があります。このインジケータは、いずれかの位置に最大 1 回表示する必要があります。
これをまだ想像できない場合は、質問/回答の下にあるスタック オーバーフロー プロファイルを見てください。どちらかが 10 個以上ある場合は、まさにこの方法で生成されたページング リンクが下部に表示されます。それか、 http://digg.comの一番下までスクロールして、ページング コントロールを観察してください。
例
すべての例は、サブセット サイズが 5 で、現在のページが位置 3 であることを前提としていますが、これらはソリューションで構成可能である必要があります。...
ページ番号間のギャップを[x]
示し、現在のページを示します。
現在のページ: 1/30
出力: [x][2][3][4][5]...[30]
現在のページ: 2/30
出力: [1][x][3][4][5]...[30]
現在のページ: 13/30
出力: [1]...[11][12][x][14][15]...[30]
現在のページ: 27/30
出力: [1]...[25][26][x][28][29][30]
現在のページ: 30/30
出力: [1]...[26][27][28][29][x]
現在のページ: 3/6
出力: [1][2][x][4][5][6]
現在のページ: 4/7
出力: [1][2][3][x][5][6][7]
追加の説明
- 最初と最後のページは、または
のように
numberOfPages
順番に含まれている場合を除き、カウント されません。numberOfPages
[1][x][3][4][5]...[30]
[1]...[26][27][28][x][30]
[1]...[8][9][x][11][12]...[30]
- サブセットのいずれかの端と最初または
最後のページと
fixedWidth + 2
の間の距離が 1 未満の場合、ギャップ インジケーターを含める必要はありません。[1][2][3][x][5][6]...[15]
[1][2][3][x][5][6][7]
あらゆる言語でのソリューションを歓迎します。
幸運を!
language-agnostic - コードゴルフ:誰が最高のポーカーハンドを持っていますか?
私はこのような挑戦が大好きです、うまくいけばすぐに私の答えを提出します。
どのプレイヤーが最高の7カードハンドを持っていますか?
9枚のカードの順序付けられていないリスト(スペースで区切られている)を前提として、どのプレーヤーが最高のポーカーハンドを持っているかを調べます。 これがポーカーハンドランキングのリストです。入力例:
配列の最初の2枚のカードはプレーヤー1の手を表し、配列の2番目の2枚はプレーヤー2の手を表します。最後の5枚のカードはコミュニティカードを表し、両方のプレイヤーが共有するカードです。事実上、両方のプレーヤーは7枚のカードを持っており、どちらのプレーヤーが最高の5枚のカードポーカーハンドを持っているかを判断する必要があります。
カードは文字列として定義され、最初の文字はカードの値を表し、2番目の値はスーツを表します。常に大文字。カードが2回表示されることはありません。
この関数は、ハンドがどちらかのプレーヤーにとって引き分けか勝利かを計算します。入力の最後に合計が出力されます。出力形式は、この投稿の後半で定義されます。
例
より詳しい情報
同様の問題を抱えているプロジェクトオイラーへの次のリンクを提供してくれたmgrovesに感謝します:http://projecteuler.net/index.php?section = problems&id = 54
テストデータ
プロジェクトオイラーのテストデータを使用します。
http://projecteuler.net/project/poker.txt
ソリューションは、そのテキストファイルを入力として受け入れ、勝ちと引き分けの合計を出力する必要があります。
出力例
出力は次の形式である必要があります。
プレーヤー1は45ハンドを獲得し、プレーヤー2は32ハンドを獲得し、12回のドローがありました。(実際の結果ではありません)
ルール
- 勝ち手のタイプを返す必要はありません。誰かが勝った場合にのみWHOが勝ちます。
- カードリストの入力に特定の順序はありません
- 入力にカードが2回表示されない
- 入力は常に大文字です
- プロジェクトオイラーのテストデータを入力として受け取ります
- 上記の指定された形式で、プレーヤーが最も多くのハンドと合計ドローを獲得したカウントを出力します
language-agnostic - コード ゴルフ: ビルド ミー アン アーク
チャレンジ
形式の標準入力を受け入れる文字数で最短のプログラムX-Y R
で、次の保証があります。
R
8 以下の非負の 10 進数X
およびは、45° の倍数 ( 、、、など)Y
として 10 進数で与えられる非負の角度です。0
45
90
135
X
より少ないY
Y
360
でX
はない0
X
また、開始角度から終了角度Y
radiusまでの ASCII "円弧" を標準出力に生成しますR
。ここで、
- 円弧の頂点は、
o
- との角度は
0
、180
-
- との角度は
45
、225
/
- との角度は
90
、270
|
- との角度は
135
、315
\
- 2 本の線で囲まれた多角形の領域は、空白以外の文字で埋められます。
無効な入力が与えられた場合、プログラムは意味のある出力を生成する必要はありません。もちろん、この課題のために特別に書かれた言語、または外部ユーティリティを不当に使用する言語を除いて、任意の言語でのソリューションが許可されます。出力の形式が正しいままである場合、余分な水平方向および垂直方向の空白は出力で許可されます。
ハッピーゴルフ!
多数の例
入力:
出力:
入力:
出力:
入力:
出力:
入力:
出力:
入力:
出力:
language-agnostic - コードゴルフ:掛け算の九九をコンソールに出力
私は最近、仕事の経験をしている学生に、掛け算の九九をコンソールにダンプすることについての記事を指摘しました。ネストされたforループを使用し、それぞれのステップ値を乗算しました。
これは.NET2.0アプローチのように見えました。たとえば、Linqメソッドと拡張メソッドを使用すると、同じ結果を得るのに何行のコードが必要になるのか疑問に思いました。
stackoverflowコミュニティは課題に取り組んでいますか?
課題:コンソールアプリケーションで、次の例のようなテーブルを生成するコードを記述します。
これが言語にとらわれないコードゴルフの戦いに変わったので、私は、受け入れられた答えのための最良の解決策についてのコミュニティの決定に行きます。
テーブルの仕様とフォーマットについては多くの議論がありました。意図的に00フォーマットを追加しましたが、投稿を作成するときにテキストのフォーマット方法がわからなかったため、元々2つの改行がありました。
language-agnostic - コードゴルフ:フロベニウス数
与えられた一連の正の数についてフロベニウス数を計算する最短のプログラムを作成します。フロベニウス数は、セット内の数の正の倍数の合計として記述できない最大の数です。
例: Chicken McNugget TMサイズのセット [6,9,20] の場合、式 a*6 + b*9 + c*20 = 43 (a,b ,c >= 0) であり、43 はこのプロパティの最大値です。
与えられた集合に対してフロベニウス数が存在すると仮定できます。そうでない場合 ([2,4] など)、特定の動作は予想されません。
参考文献:
[編集] GolfScript バージョンを受け入れることにしました。MATHEMATICA のバージョンは「技術的には正しい」と考えられるかもしれませんが、明らかに競技会の楽しみを奪ってしまいます。そうは言っても、他のソリューション、特に Ruby (汎用言語としては非常に短かった) にも感銘を受けました。
language-agnostic - コードゴルフ:コンウェイのライフゲーム
課題:ジョン H. コンウェイのライフ ゲームセル オートマトンを実装する最短のプログラムを作成します。【リンク】
編集:約 1 週間の競争の後、私は勝利者を選択しました: pdehaanは、perl で Matlab ソリューションを1文字打ち負かすことに成功しました。
Game of Life について聞いたことがない人のために説明すると、正方形のセルのグリッド (理想的には無限) を使用します。セルは、生きている (満たされている) か、死んでいる (空) 場合があります。次のルールを適用して、次のステップでどの細胞が生きているかを判断します。
- 生きている隣人が 2 つ未満の生きているセルは、人口不足が原因であるかのように死にます。
- 生きている隣人が 3 つ以上いる生きているセルは、過密状態のように死にます。
- 2 つまたは 3 つの生きた隣人を持つ生きたセルは、次の世代に生き続けます。
- ちょうど 3 つの生きている隣接セルを持つ死んだセルは、再生によって生きているセルになります。
プログラムは、コマンドライン引数として指定された 40x80 文字の ASCII テキスト ファイルと、実行する反復回数 (N) を読み取ります。最後に、N 回の反復後のシステムの状態を ASCII ファイル out.txt に出力します。
関連ファイルを使用して実行した例を次に示します。
in.txt:
100回繰り返す:
結果出力 (out.txt)
ルール:
- ファイルを読み書きするには、ファイル I/O を使用する必要があります。
- 入力ファイルと反復回数を引数として受け入れる必要があります
- 指定された形式で out.txt を生成する必要があります (存在する場合は上書きします)。
- ボードの端を処理する必要はありません(ラップアラウンド、無限グリッドなど)。
- 編集:出力ファイルに改行が必要です。
勝者は文字数によって決定されます。
幸運を!
regex - コードゴルフ:正規表現パーサー
目標
今日のコードゴルフの課題は、できるだけ少ない文字で正規表現パーサーを作成することです。
構文
いいえ、Perlスタイルの正規表現に一致するように求めているわけではありません。結局のところ、それらのための非常に信頼できるインタプリタがすでにあります!:-)
このチャレンジの正規表現構文について知っておく必要があるのは次のとおりです。
- 用語は、単一のリテラル文字、またはグループ化括弧内の正規表現として定義されます
()
。 - (
*
アスタリスク)文字は、前のTERMでのクリーネ閉包操作を表します。これは、前の用語が0個以上連結されていることを意味します。 - (
+
プラス)文字は便利なショートカットを表します。は、前の用語の1つ以上を意味するa+
と同等です。aa*
- (
?
疑問符)文字は、前の用語の0または1つを表します。 - (パイプ)文字は交互を表します。
|
つまり、どちらの側の正規表現も試合で使用できます。 - 他のすべての文字はリテラルであると見なされます。他のすべての文字が中にあると想定することができます
[0-9A-Za-z]
(つまり、すべての英語の英数字)。
または、別の言い方をすれば、 *
//優先順位が最も高く、次に連結、次に交互になります。交互は連結よりも優先順位が低いため、括弧なしで正規表現内で使用すると、両側で完全な正規表現にバインドされます。一方、およびは、直前の用語にのみ適用されます。+
?
*
+
?
チャレンジ
あなたの課題は、正規表現(上記で定義されている)をコンパイルまたは解釈し、それに対していくつかの文字列をテストするプログラムを作成することです。
入力はあなたに任せます。私の推奨事項は、おそらく正規表現が最初に来て、次にそれに対してテストされる任意の数の文字列が来ることです。しかし、それを長持ちさせたいのであれば、それは問題ありません。すべてをコマンドライン引数またはstdinに入れたい場合、またはコマンドラインに正規表現を入れてstdinに文字列を入れたい場合など、それで問題ありません。使用例を1つか2つ示してください。
正規表現が一致するかどうかを反映するために、出力はtrue
またはfalse
、1行に1つである必要があります。
ノート:
- 私はこれを言う必要はありません...しかし、あなたの言語で正規表現ライブラリを使用しないでください!パターンを自分でコンパイルまたは解釈する必要があります。(編集:文字列の分割または結合に必要な場合は、正規表現を使用できます。たとえば、入力正規表現を言語正規表現に変換して使用するなど、問題を直接解決するために使用することはできません。)
- 正規表現は、このチャレンジの入力文字列と完全に一致する必要があります。(同様に、Perlのような正規表現に精通している場合は、すべての一致に対して文字列の開始と終了のアンカーが設定されていると想定します)
- このチャレンジでは、すべての特殊文字
()*+?|
が文字通り出現することは期待されていません。入力に出てきた場合、問題の文字列に一致するパターンはないと想定しても安全です。 - テストする入力文字列は、大文字と小文字を区別して評価する必要があります。
例
例では、すべてがコマンドライン引数で行われると想定しています。最初に正規表現を使用します。(上で述べたように、入力はあなた次第です。)myregex
ここで、プログラムの呼び出しを表します。
注:申し訳ありませんが、コミュニティwikiを作成するのを忘れました!:-(
language-agnostic - コードゴルフ:ハッピープライム!
日曜日、コードゴルフのラウンドです!
チャレンジ
入力数値が「ハッピー素数」、「サッド素数」、「ハッピー非素数」、「サッド非素数」のいずれであるかを判断するために、文字数で最短のソース コードを記述します。
入力
入力は、コマンド ライン引数または stdin からの整数である必要があります。大きな数を扱うことを心配する必要はありませんが、できる/したい場合はそうしてください。入力値が 1 未満の場合の動作は未定義ですが、1 には明確な結果があります。
出力
出力は、数値のタイプを出力する必要があります: 「幸せな素数」、「悲しい素数」、「幸せな非素数」、または「悲しい非素数」。末尾の改行はオプションです。
例
定義
脳にリフレッシュが必要な場合に備えて。
ハッピーナンバー
ウィキペディアから、
ハッピーナンバーは以下のプロセスで定義されます。任意の正の整数から始めて、数値をその桁の 2 乗の合計で置き換え、数値が 1 になるまで (数値が留まるまで)、または 1 を含まないサイクルで無限にループするまでプロセスを繰り返します。このプロセスが 1 で終わるものはハッピー ナンバーであり、1 で終わらないものはアンハッピー ナンバー (またはサッド ナンバー) です。
例えば、
- 139
- 1^2 + 3^2 + 9^2 = 91
- 9^2 + 1^2 = 82
- 8^2 + 2^2 = 68
- 6^2 + 8^2 = 100
- 1^2 + 0^2 + 0^2 = 1
素数
素数は1より大きい整数で、正確に 2 つの約数 (1 とそれ自体) があります。
ハッピープライム
したがって、幸せな素数は、幸せで素数でもある数です。
回答の選択
明らかに、答えは、私がテストしたすべてのケースで指定された結果を出力する、文字数による最短のソース コードになります。次の (コミュニティが決定した) コード ゴルフ チャレンジが来たら、答えをマークします。:)
決断
さて、町に新しいコード ゴルフがあるようで、この質問が投稿されてから約 1 週間が経過したので、最短のソース コードを回答としてマークしました (gnibbler の 64 文字のGolfscriptソリューション)。そうは言っても、 belisarius による99 文字のMathematicaソリューションと Nabb による不可解な 107 文字のdcソリューションの両方を楽しみました。
他の皆さん、おつかれさまでした!私のコンピューターには、これほど多くのプログラミング言語環境がありませんでした。誰もがお気に入りの言語の新しい汚いトリックを学んでくれたことを願っています。
再利用
自動採点のリファレンス実装に対してさまざまなプログラムをテストするために書いたスクリプトの例として、このコンテストで作成されたコードの一部を再公開しました。そのディレクトリの README には、ソース コードの入手元が説明されており、すべてのコードが CC BY-SA 2.5 ライセンスの下で再利用されていることが記載されています (SO の法的なセクションに記載されているとおり)。各ディレクトリには、送信時の表示名が付けられます。
あなたのコードがこのように再利用されたり、帰属に問題がある場合は、お知らせください。エラーを修正します。