プログラミングパズルとコードゴルフ

プログラミング愛好家やコードゴルファーのためのQ&A

20
戦略的投票、ゲーム
単一勝者選挙の最も一般的な投票システムの1つは、複数投票方法です。簡単に言えば、投票数が最も多い候補者が勝ちます。しかし、複数の投票は数学的には不健全であり、有権者が本当に好む候補者とは対照的に、「2つの悪の少ない方」に投票するように駆り立てられる状況を作り出しがちです。 このゲームでは、複数投票システムを活用するプログラムを作成します。選挙で3人の候補者の1人に投票します。各候補者は、あなた自身の特定の見返りに関連付けられており、あなたの目標は、期待される見返りを最大化することです。 ペイオフはランダムに「均一に」分配され、選挙ごとに変更され、100に加算されます。候補者Aはペイオフ40、候補者Bはペイオフ27、候補者Cはペイオフ33を持ちます。 投票する番になると、情報が不完全になります。以下は、利用できる情報です。他のプレイヤーの個々のペイオフが何であるか分からないので、現在の投票結果を考慮して彼らがどのように投票するかを予測するのはあなたの挑戦です。 これまでの選挙の部分的な結果 まだ投票していない参加者(自分を除く)の数 各候補者の個人的な報酬 各候補者の合計グループペイオフ 各プレイヤーに投票の機会が与えられた後、最も投票数の多い候補者が複数の投票に従って勝ちます。各プレイヤーは、その候補者からのペイオフに対応するポイント数を受け取ります。票に同点がある場合、割り当てられるポイントの数は、同点の候補者の平均になります。 トーナメント構造 最初にインスタンス化されると、参加者にはトーナメントで行われた選挙の回数が通知されます。私は非常に多くの選挙を実施しようとします。その後、各選挙は1つずつ実施されます。 参加者がシャッフルされた後、それぞれに投票の順番が与えられます。彼らは上記の限られた情報を与えられ、彼らの投票を意味する数を返します。各選挙が終わると、各ボットに最終的な投票結果が与えられ、その選挙から得点が上がります。 勝利した参加者は、多数の選挙が行われた後、合計スコアが最も高い参加者になります。また、コントローラーは、そのスコアをランダム投票ボットについて予測されたスコア分布と比較することにより、各競技者の「正規化された」スコアを計算します。 提出の詳細 提出は、Java 8クラスの形式を取ります。 各参加者は、次のインターフェイスを実装する必要があります。 public interface Player { public String getName(); public int getVote(int [] voteCounts, int votersRemaining, int [] payoffs, int[] totalPayoffs); public void receiveResults(int[] voteCounts, double result); } コンストラクターはintパラメーターとして1つを取る必要があります。これは、行われる選挙の数を表します。 このgetName()メソッドは、リーダーボードで使用される名前を返します。これにより、適切に書式設定された名前を使用できます。 getVote(...)メソッドが返す0、1または2投票を受け取ることになりますどの候補意味します。 このreceiveResults(...)方法は、主に履歴データを使用するより複雑な戦略の存在を可能にすることです。 与えられた情報を記録および処理する他のメソッド/インスタンス変数を作成することができます。 トーナメントサイクル、拡張 参加者はそれぞれでインスタンス化されnew …

30
すべての10進数が一意かどうかを判別
Stack Overflowで削除された質問は、素晴らしいゴルフ教材になる場合があります。 入力として非負の整数を取り、その数値の基数10表現のすべての数字が一意である場合にtrueを返す関数を作成します。例: 48778584 -> false 17308459 -> true 文字数には関数のみが含まれます。 CまたはC ++で回答することを選択した場合:マクロなし、未定義の動作なし。実装定義の動作とコンパイラの警告は問題ありません。

30
アルファベットを4回印刷する
プログラムは、アルファベットを4回印刷する必要があります。最初は通常のアルファベット順、2番目はqwertyキーボード、3番目はdvorakキーボード、最後は逆アルファベット順です。出力は次のようになります。 abcdefghijklmnopqrstuvwxyz qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz zyxwvutsrqponmlkjihgfedcba 出力では大文字と小文字が区別されず、必要に応じて改行またはスペースを追加または削除できます。 キャッチ:プログラムは104文字未満である必要があります。つまり、アルファベットの長さの4倍より小さい必要があります。 もっと感銘を受けた、本当に賢い、または面白い何かが見られない限り、最短のコードで答えを受け入れます。 編集:2011年4月27日水曜日に最短回答を受け入れます。 EDIT2:そして、勝者は(いつものように)64文字のGolfscriptです!2番目は3文字しか後ろにありませんが、67文字でGolfscriptにあり、3番目に72文字でBashが続きます。 しかし、のような、私は言及したかったいくつかの他、ありました。この1あなたの定義に応じて、唯一の52「文字」を使用し、かつ、これ彼は、彼が作成した言語でそれを書きました。 書かれていないルールを破り、資格を与えられなかった人が数 人 いましたが、私はそれらを箱なしでの彼らの考え方だけで言及します。

30
PHPでのゴルフのヒント
PHPでゴルフをするための一般的なヒントは何ですか?私は、少なくともある程度PHPに固有のゴルフ問題全般のコードに適用できるアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。回答ごとに1つのヒントを投稿してください。
37 code-golf  tips  php 

20
究極のサムライ対決
通知:この王様の挑戦は完了しました。これは、The ObserverのエントリでC5H8NNaO4に与えられた緑色のチェックマークが新しい回答に移動しないことを意味します。 まだ新しいエントリを送信できますが、新しいエントリを積極的にチェックしていないため、新しいトーナメントの実行が遅れる可能性があります。 前書き このチャレンジでは、アルティメットサムライショーダウンアルティメットエディションスペシャルバージョン2.0 Xアルファオメガターボ(略してアルティメットサムライショーダウン)というタイトルのアーケードゲームをプレイしています。相手は?Programming Puzzles&Code Golfの他のメンバー以外は誰もいません! PPCGアーケードゲームに期待されるように、Ultimate Samurai Showdownを直接プレイするのではなく、ゲームをプレイするプログラムを作成します。このプログラムは、他のユーザーが1対1の決闘で提出したプログラムと戦います。最も熟練したプログラムは、PPCGのUltimate Samuraiを冠し、伝説の緑のカチカチを与えられます。 ゲームの説明 このセクションでは、ゲームの背後にあるメカニズムについて説明します。 勝利条件 試合は 2から成る武士互いに相殺直面しています。各muraは20 ヒットポイントと1 名誉で各試合を始めます。対戦相手が死亡し、まだ生きている場合、saが勝ちます。サムライが死ぬには2つの方法があります。 サムライのヒットポイントが0になると、彼は死にます。 sa が自分の名誉を 0 未満にすると、決闘で不名誉な振る舞いをしたことで神に打たれます。 神に打たれることは、ヒットポイントを0に減らすことよりも優先されるため、1人の武士の体力が0で、もう1人の体力が-1の場合、体力が0の武士が勝ちます。両方のサムライが-1名誉である状況では、彼らは両方とも神に打たれ、ゲームは引き分けです。 マッチは最大500 ターンで構成されます。500ターンすべてがパスし、試合が決定されなかった場合(どちらのサムライも死亡しなかった場合)、神々は退屈して両方のサムライを打ち倒し、引き分けになります。 行動 各ターンで、サムライは次のアクションの1つを正確に実行する必要があります。 W サムライは待機し、アクションを実行しません。これにより、彼はクールに見えますが、相手を倒すことはできません。これもデフォルトのアクションです。 B サムライは、名誉ある方法で相手に頭を下げます。これは神を喜ばせ、したがってthusは1名誉を得るでしょう。名誉は基本的にこのゲームの「リソース」であるため、名誉はあなたのサムライの成功に不可欠です-名誉はすべて離れて移動しB、W名誉を低下させる可能性があります。また、サムライが7名以上の名誉を得た場合、神の剣の使用が許可されます。これの意味を以下に説明します。 ただし、相手がお辞儀をすると、相手が剣であなたを攻撃することに決めた場合、あなたは開いたままになりますので、お辞儀をするときは注意してください。 G サムライは防御的な位置に入り、剣の攻撃を防ぐものとする。この動きは、すべての剣のストライキ、神の剣で作られたものをもブロックします。 ただし、神は過度に防御的なサムライに眉をひそめるので、直前のターンのサムライのアクションも守っていた場合、この動きは1名誉を消費します。それ以外の場合は、Honorを消費しません。 I サムライは、鞘から刀を素早く引き抜いて相手を攻撃しようとします。サムライに7名以上の名誉がある場合、彼は通常の剣の代わりに神の剣を使用します。この動きは1名誉を消費します。 クイックドローは速いストライクで、遅いオーバーヘッドの攻撃に打ち勝ちますが、受け流しに対しては負けます。ストライクが正常に接続されると、Sword of the Godsで 1ダメージ、または2ダメージを与えます。 P サムライは、入ってくる攻撃を受け流そうとし、その後自分の攻撃を開始します。サムライに7名以上の名誉がある場合、彼は通常の剣の代わりに神の剣を使用します。この動きは1名誉を消費します。 この受け流しは速いストライキに対する優れた機動ですが、より遅いオーバーヘッド攻撃によって圧倒されます。ストライクが正常に接続されると、Sword of the Godsで …

30
パイとeを混ぜてパイを作ります!
誰もが知っているパイに、その直径に対する円の円周の比を表す数学定数を。 3.14159265358979323846264338327950288419716939937510... あなたは、おそらくも知っている電子数学定数、自然対数の底を。 2.71828182845904523536028747135266249775724709369996... しかし...あなたはパイを知っていますか?これは最も重要な定数の1つです(私にとって)。piとeの数字ですインターリーブされた。 32.1741185298216852385485997094352233854366206248373... 小数展開として: 3, 2, 1, 7, 4, 1, 1, 8, 5, 2, 9, 8, 2, 1, 6, 8, 5, 2... これはOEISシーケンスA001355ですです。 キーワード:nonn、base、dumb、easy それは非常に馬鹿げたシーケンスです。 チャレンジ 非負の整数nを取り、pieのn番目の桁を出力するプログラム/関数を作成します。 仕様書 標準のI / Oルールが 適用されます。 標準的な抜け穴は禁止されています。 ソリューションは少なくとも50桁の各定数で機能する必要があります。つまり、少なくとも100シーケンスのシーケンスで機能する必要があります(してみてください:Pないハードコードします)。 2または3の出力は小数点ではありません。 ソリューションには、0インデックスまたは1インデックスを付けることができますを指定を指定してください。 この課題は、すべての言語で最短のアプローチを見つけることではなく、各言語で最短のアプローチを見つけることです。。 コードはバイト単位で記録されます特に指定がない限り、通常はエンコーディングUTF-8で、。 このシーケンスを計算する組み込み関数が許可されますが、組み込みに依存しないソリューションを含めることをお勧めします。 「実用的な」言語であっても説明が奨励されます。 テストケース これらは0インデックスです。 Input Output 1 2 2 …

5
P i = = 3。2
このInfinite Seriesのビデオに触発されました。 前書き 円周率は、円の直径に対する円周の比率として定義されます。しかし、円はどのように定義されますか?通常、円は中心点までの距離が一定の点として定義されます(中心がにあると仮定します(0,0))。次の質問は、距離をどのように定義するかです。以下では、距離の異なる概念(Lp-norms によって誘導される)を検討しています。 ノルム(= 長さを測定するもの)が与えられると、次のように距離(= 2点間の距離)を簡単に構築できます。 dist(A,B) := norm (A-B) ユークリッドノルムは次の式で与えられます。 norm((x,y)) = (x^2 + y^2)^(1/2) これはL2-normとも呼ばれます。他のLpノルムは2、上記の式の1から無限大までの他の値で置き換えることにより作成されます。 norm_p((x,y)) = (|x|^p + |y|^p)^(1/p) これらの異なる基準の単位円は、非常に明確な形をしています。 チャレンジ が与えられたp >= 1場合、有効数字4桁の精度で-ノルムに対するLp円の円周と直径の比を計算しLpます。 テストケース 私たちは、のためにそれを使用することができるp,qと1 = 1/p + 1/q我々は同じ比率を得るLpだけでなく、Lq規範。さらに用p = q = 2比率最小限であり、そしてのためにp = 1, q = infinity私たちは4の比率を取得し、その比率は、間常にあるpiと4。 p or q ratio 1 infinity …

18
デンマーク語で100まで数える
デンマークのカウント方法を使用して、0〜100のすべての数字を正しい順序で印刷します。 彼らが数える方法 英語と同様に、0〜20、30、40、100の専用の単語があります。 その代わりと言ってのtwenty-oneとtwenty-two、彼らが言うone and twentyと、two and twenty 50から始まって、彼らはn * 20として10の倍数を言う 50 = half third times twenty = half way to the 3rd multiple of 20 60 = three times twenty 70 = half fourth times twenty 80 = four times twenty 90 = half fifth times twenty したがって、たとえば55はになりますfive and …

30
ランダム大文字
タスク あなたの仕事は、入力が与えられると、ランダム化された文字を大文字にして入力テキストを出力するプログラムまたは関数を作成することです。 小文字の大文字のあらゆる組み合わせが可能です。入力された場合、例えばabc、以下の組み合わせのいずれかを出力する非ゼロの確率があるはず:abc、Abc、aBc、abC、ABc、AbC、aBCまたはABC。 入力 入力は、たとえば、任意の数の印刷可能なASCII文字を含む文字列Hello Worldです。その入力に対する出力が含まれるHeLLo WoRlD、HElLO WOrldなど 得点 これはコードゴルフですので、各言語で最短の答えが勝ちです!

28
プロス番号ですか?
フランソワプロスにちなんで名付けられたプロス番号は、次のように表現できる番号です。 N = k * 2^n + 1 where kは奇数の正の整数で、nはのような正の整数です2^n > k。より具体的な例を使用してみましょう。テイク3. 3はProth番号です。 (1 * 2^1) + 1 そして2^1 > 1満足しています。5はProth番号でもあります。 (1 * 2^2) + 1 そして2^2 > 1満足しています。ただし、7はProth番号ではありません。フォームに書き込む唯一の方法N = k * 2^n + 1は (3 * 2^1) + 1 そして2^1 > 3満足していません。 あなたの挑戦は非常に単純です:あなたは、正の整数を与えられて、それがプロス数であるかどうかを決定するプログラムまたは関数を書かなければなりません。入力は合理的な形式で行うことができ、Proth番号の場合は真実の値を出力し、そうでない場合は偽の値を出力する必要があります。言語に「Proth-number detection」機能がある場合は、それらを使用できます。 テストIO 1000までの最初の46個のProth番号を以下に示します。(A080075) 3, 5, 9, …

6
COBOL Y2K redux
1990年代には、COBOLのコンピュータエンジニアがそれらを変換することにより、6桁の日付フィールドを拡張する方法働いたYYYDDDところYYYであるyear - 1900とDDD年の日です[001 to 366]。このスキームは、最大日付をまで延長でき2899-12-31ます。 2898年に、900年前のコードベースが失敗するため、エンジニアはパニックに陥り始めました。2898年から、彼らはタイムマシンを使用して、このアルゴリズムとそれを可能な限り広く実装するタスクとともに、単独のCodeinatorを1998年に送信しました。 PPQQRR場合は1900年代の01 ≤ QQ ≤ 12標準YYMMDD日付ですが、QQ > 12その後2000-01-01はベース100でPP、RRベース87で以降の日を表すスキームを使用しQQ - 13ます。 このスキームは2899年をはるかに超えて拡張され、標準の日付と下位互換性があるため、既存のアーカイブを変更する必要はありません。 いくつかの例: PPQQRR YYYY-MM-DD 000101 1900-01-01 -- minimum conventional date suggested by J. Allen 010101 1901-01-01 -- edge case suggested by J. Allen 681231 1968-12-31 -- as above 991231 1999-12-31 -- maximum conventional date 001300 …

7
Pythonバージョンのリスト
Pythonは、今日最も急速に成長している主要なプログラミング言語です。これは3年連続で最も求められている言語です。つまり、まだ使用していない開発者は学習したいと言っています。[1] Pythonの人気の理由は、その多くのバージョンにあります。[要出典]実際には、2つの開発バージョンを含む116のバージョンのPythonがあります。 あなたの仕事は、すべてのPythonバージョンのリストを、好きな順序で、好きな形式で出力/印刷することです。この情報が保存されている組み込み関数は使用できません。 出力形式は自由に選択できますが、各バージョンは、標準的な方法1.1(2.3.0、2.7.10など)で識別する必要があります。 コンマ区切りのPythonバージョンの完全なリスト2を以下に示します。 1.1, 1.2, 1.3, 1.4, 1.5, 1.5.1, 1.5.2, 1.6, 2.0, 2.0.1, 2.1, 2.1.1, 2.1.2, 2.1.3, 2.2, 2.2.1, 2.2.2, 2.2.3, 2.3, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.4, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5, 2.5.1, 2.5.2, 2.5.3, 2.5.4, 2.6, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.6.6, 2.6.7, 2.6.8, 2.6.9, 2.7, …

19
すべての異なるGozintaチェーンを検索
ゴジンタチェーン (Project Euler#606に触発) nのgozintaチェーンは、{1,a,b,...,n}各要素が次を適切に分割するシーケンスです。たとえば、12には8つの異なるgozintaチェーンがあります。 {1,12}, {1,2,12}, {1,2,4,12}, {1,2,6,12}, {1,3,12}, {1,3,6,12}, {1,4,12} and {1,6,12}. チャレンジ 正の整数(n > 1)を受け入れ、指定された数のすべての異なるgozintaチェーンを出力または返すプログラムまたは関数を作成します。 チェーンの順序は重要です(昇順)。チェーンの順序は関係ありません。 偶然に、それは存在します、あなたは挑戦を解決するビルトインを使うことができません。 これはcode-golfです。 編集:1潜在的な入力としての削除。

18
協和音か不協和音か?
2つの音名が与えられたら、これら2つの音によって形成される音程が子音か不協音かを決定するプログラムを作成します。 前書き 西洋音楽では、12の「異なる」音しかありません。それらの名前は、最低から最高の順に並べられていますC, C#, D, D#, E, F, F#, G, G#, A, A#, B。シーケンスは循環的です。つまり、のC後Bに無限に続きます。 2つのトーン間の距離は、インターバルと呼ばれます。上記のシリーズ(C — C#またはE — F)で隣接する2つの音の間隔は、半音と呼ばれます。より遠くの音符の間隔は、最初から2番目の音まで(シーケンスをラップしている間)取得するのに必要な半音ステップの数として定義されます。いくつかの例:D to E= 2半音、C to G= 7半音、B to D#= 4半音(これはシーケンスをラップします)。1 現在、これらの間隔は2つのカテゴリに分けられます。子音(一度に2つの音を弾くと心地よく鳴ります)と不協和音(それほどではありません)です。 子音の間隔を0、3、4、5、7、8、9半音に定義します。 残りは不協和音です。つまり、1、2、6、10、11半音です。 チャレンジ 次のことを行うために、「プログラム」(通常の広義の意味:関数は完全にOK)を作成します。 入力として2つの音名(上記のシーケンスの文字列)を使用します。好きなようにそれらを使用することができます(引数として、必要なもので区切られた引数として、自由に文字のリスト(例["C","#"])としてそれらを使用することもできます。ただし、ノートに他の名前を割り当てることはできません(特に0から11までの番号を付けたり、番号を使用したりすることはできません)。 あなたの音楽オタクのために、音符はオクターブなしで指定されます。この場合、ノートがどの順序で来て、どれがより低く、どれがより高いかは重要ではありません。最後に、上記のリストにない名前を処理する必要はありません。のような他の高調波E#、フラット、二重変更などはありません。 2つの異なる値を選択します。プログラムは、入力内の2つの音符が形成する間隔が子音である場合は常に1つを出力し、そうでない場合はもう1つを出力する必要があります。(Trueand Falseになる可能性がありますが、必要に応じてπとeでも可能です:)) これはコードゴルフです。各言語のバイト単位の最短プログラムが優先されます。楽しむ! 例とテストケース Note 1 Note 2 Output Interval [semitones] C D Dissonant 2 …
36 code-golf  music 

17
Optimus以外の素数
チャレンジ 入力整数を指定すると、nの10進展開の1桁を変更することで生成できるn > 0素数(それ自体が素数nである場合以外n)を出力します(桁数は変更しません)。 例 たとえば、n = 2。小数展開で一桁を変更することにより2、我々は、三つの追加素数を思い付くことができます3, 5, 7ので、a(n) = 3。 別の例として、n = 13。1桁を変更することにより、あなたは素数を得ることができます11, 17, 19, 23, 43, 53, 73, 83ので、a(13) = 8。 最後の例として、n = 20。1桁を変更することにより、あなたは素数を得ることができます23, 29ので、a(20) = 2。 シーケンス 始めるための最初の20の用語を以下に示します。これはOEIS A048853です。 4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.