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

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

10
Twitterパーサーを作成する
前書き Twitterを使用します(そうでない場合は仮装します)。ここでは、世界と共有したい個々のツイートごとに140文字に制限されています。フォロワーAbraham LincolnのGettysburg Addressにツイートしたい場合は、メッセージ全体を取り出すためにテキストを複数の140文字のチャンクに分割する必要があります。ただし、これらのチャンクの長さは常に140文字である必要はありません。たとえば、スピーチを17文字のチャンクに分割すると、これらのツイートになります。 4つのスコアとSE VEN YEARS AGO OUR フェザーズブラウト この詐欺について 新たなナチ Lで考えられる (等々) それはまずいです!個々の単語が分割されると、あなたが言おうとしていることを理解することが難しくなる可能性があります。また、twitterverseでは、フォロワーの1人が特定のツイートに出くわし、メッセージにそれ以上のものがあることに気付かない場合があるため、ツイートに番号を付けて作業するコンテキストを持たせます(17文字のチャンクを使用します) ): (1/7)4つのスコアと (2/7)7年前 (3/7)私たちの父 (4/7)BROUGHT FORTH ON (5/7)この大陸A (6/7)新国家 (7/7)に着想... 手動でツイートの最適な構成を手動で把握することもできますが、それが私たちのコンピューターの目的です! チャレンジ 可能な限り短いコードで、ゲティスバーグアドレス(または任意のテキスト、ただしこれは例としてこれに固執します)を140文字以下で構成されるツイートのセットに解析します(この例のテキストはその中の珍しい/異常なビット)。 詳細 関数/プログラム/などは、単一の文字列引数を取り、ツイートごとに1行のテキストを出力する必要があります。 解析の選択方法に関係なく、この入力が解析時に合計99を超えるツイートになることはありません(その選択が課題の他のポイントに適合する限り)。 ツイートには、ツイートの本文の前に「」の形式tweet numberのtotal tweetsインジケーターを含める必要があります(x/y)。 このカウントは、140文字のスペースの一部を占有します! ツイートのチャンクは、改行またはスペースでのみ分割できます。 ハイフン、ピリオド、コンマ、またはその他の句読点は、スペースまたは改行が直前または直後にない限り許可されません。 ツイートは、できるだけ多くの完全な単語で構成する必要があります。 この制約はやや柔軟性があります。たとえば、最終ツイートの単語が1つだけの場合 これはコードゴルフなので、最短のコードが勝ちます。 ゲティスバーグの住所の全文 (コードはまだ渡されたASCII文字列を処理できるはずです。) 4スコアと7年前私たちの父親は、この大陸で自由に考えられ、すべての人が平等に創造されるという提案に専念した新しい国を始めました。今、私たちは、そのような国や国がそのように考えられており、ひたむきに耐えることができるかどうかにかかわらず、大規模な市民戦争テストに従事しています。私たちはその戦争の素晴らしい戦いに出会っています。私たちは、その分野の一部を、その国が生計を立てた生計を立てた人たちのための最終的な休憩場所として捧げるようになりました。それはやはり適切であり、これを行うべきです。しかし、より大きな感覚では、私たちはこの地を捧げることはできません、私たちは黙認することも、放すこともできません。勇敢な男が生きて死んでしまった人は、私たちの貧弱な力を加えたり引いたりすることをはるかに凌ぐことを企てました。世界は、私たちがここで言うことを少しでも覚えていないが、彼らがここで何をしたかを決して忘れることはできないだろう。私たちにとって、生きているラザーは未完成の作品に専念し、ここで誰がここまで進んだのかを知ることができます。これらの名誉ある死から、私たちが最後の完全な献身をもたらすために、これらの名誉ある死からの献身を得るということは、私たちが偉大な仕事に専念することです。死んでしまい、神の下にあるこの国は新たな自由の誕生を持ち、人々のための人々の政府は地球から消滅することはありません。
14 code-golf  string 

4
3Dネットの描画-プラトンの立体
これは、3Dネットの描画がかなり難しいベーシックバージョンです-アルキメデスの立体。 3Dネットには弱点があり、切り取って折り畳むと、紙やカードから3D形状を作成できます。タスクは簡単です。5つのプラトンの立体のネットを描く最短のプログラムを書いてください。出力は、任意の適切な形式(png、jpgなど)の画像ファイルである必要があります。 5つの形状はすべて、http://en.wikipedia.org/wiki/Platonic_solidで説明されています。彼らのネットはこのように見えます(http://www.newscientist.com/gallery/unfolding-the-earth/2から取得)。 入力: 1〜5の整数。形状には、辺の数の順に番号が付けられていると仮定します。したがって、1は四面体、5は二十面体になります。 出力:その形状のネットを含む画像ファイル。内部線を含むアウトラインだけで問題ありません。色で塗りつぶす必要はありません 好きなプログラミング言語と、このコンペティション用に特別に作成されていないライブラリを使用できます。ただし、どちらもオンラインで(両方の意味で)自由に利用できる必要があります。 正確に1週間以内に最小文字数の回答を受け入れます。 勝者。参加者は1人だけですが、素晴らしかったです。勝者は...私が今までで一番好きなコードゴルフの作品であるRaufioです。

3
ユニバーサル(ルール曲げ)コードゴルフソルバー
コードゴルフには常に、挑戦者が当然のことと思っていたり、考えたりルールに記載しなかったりした制約を破ることによって、多少なりともルールを曲げる答えが含まれます。これらの興味深い抜け穴の1つは、より良い結果を得るためにチャレンジが要求するよりも多く出力する可能性です。 これを極端なものにすると、目的の出力を印刷するユニバーサルコードゴルフソルバーを作成できます。古くなり、前後に他の多くのものが出力されることを気にしない場合。 出力する必要があるのは、可能なすべてのサブシーケンスを含むことが保証されているシーケンスだけです。このコードゴルフでは、これはEhrenfeucht-Mycielskiシーケンスになります。 シーケンスは3ビット010で始まります。連続する各数字は、シーケンス内で最も早く出現するシーケンスの最長のサフィックスを見つけ、そのサフィックスの最新の以前の出現に続くビットを補完することによって形成されます。 ビットのすべての有限サブシーケンスは連続して発生し、シーケンス内では無限に頻繁に発生します シーケンスの最初の数桁は次のとおりです。 010011010111000100001111 ...(OEISのシーケンスA038219)。 シーケンスの8ビットを1バイトに結合すると、画面またはファイルに出力でき、すべての可能な有限出力を含むASCII出力が得られます。プログラムはpiの一部、「絶対にあなたをあきらめない」の歌詞、いくつかの素敵なASCIIアート、独自のソースコード、および出力したいその他のすべてを出力します。 正確性をテストするために、シーケンスの最初の256バイトのハッシュを次に示します。 MD5: 5dc589a06e5ca0cd9280a364a456d7a4 SHA-1: 657722ceef206ad22881ceba370d32c0960e267f 16進表記のシーケンスの最初の8バイトは次のとおりです。 4D 71 0F 65 27 46 0B 7C ルール: プログラムは、8ビットをバイト/ ASCII文字に結合して、Ehrenfeucht-Mycielskiシーケンス(他に何も)を出力する必要があります。 最短のプログラム(文字数)が勝ちます。生成されたバイトごとに線形時間でシーケンスを生成する場合は、文字カウントから512を減算します。

9
Postscriptでのゴルフのヒント
人気の低い言語の1つとして、ポストスクリプトハッカーの前衛に関する文献を見つけることは困難です。では、ここでゴルファーは、スタックモデル(またはその他の機能)を活用してPostscript固有の冗長性を克服するためにどのような発見をしましたか?
14 code-golf  tips 

2
Mu Torereの完璧なゲームをプレイする
バックグラウンド Mu Torereは、ヨーロッパの影響を受ける前にニュージーランドのマオリの人々によってプレイされることが知られているたった2つのゲームの1つです。これにより、他のほとんどのゲームとは異なる「客観的な勝利基準」とプレイのルールがあるという点で非常にユニークなゲームになります。 ゲームプレイ: ボードは八角形です。隣接する各頂点間に接続があり、すべての頂点に接続された中央ノードがあります。任意の時点で、9つのノードのうち8つが石で占められています。開始時には、4つの白い石と4つの黒い石があり、それぞれが八角形の半分を占めており、中央のノードは空です。黒が先に動きます。 各ターンで、プレイヤーは自分の石の1つを16のエッジの1つに沿って1つのノードから空のノードに移動できます。石は、相手の石の隣にある場合にのみ、外側のノードから中央のノードに移動できます。 プレーヤーは、石を空のノードに接続するエッジがないときに発生する合法的な移動ができない場合に負けます。 以下は、ルールを説明する(図を使用して)いくつかの分析を提供するWebサイトです。 チャレンジ あなたの課題は、人間の対戦相手に対してMu Torereの完璧なゲームをプレイできる最短のプログラムを書くことです。プログラムは、ゲームボードの表示と更新、移動、および人間の対戦相手からの移動を受信できる必要があります。最も重要なことは、完璧なゲームをプレイすることです。 完璧なゲーム? はい、完璧なゲーム。私はいくつかのゲーム分析を行ってきましたが、両方で完全にプレイした場合、ゲームは無限の時間続くことがわかりました。これは、プログラムが決して失われないことを意味します。また、プログラムは、人間の対戦相手がミスを犯してプログラムに勝つことを許可するたびに、勝つことを強制できる必要があります。あなたのプログラムが完璧な動きを見つける方法に関しては、これはあなた次第です。 詳細 各移動後(およびゲームの開始時)、プログラムはゲームボードを印刷する必要があります。ただし、ボードの表示を選択した場合、すべてのノードが表示され、完全に接続されている必要があります(16本の接続線はすべて、交差線なしで描画する必要があります)。開始時には、ボードの開始位置が正しいはずです。これを達成する1つの方法は、ゲームボードを正方形にすることです。 w-w-w |\|/| b-o-w |/|\| b-b-b 2つの色は黒と白、または暗い/明るいです。ボードは、「b」または「w」でマークするなど、どのノードがどのプレーヤーの駒で占められているか、どのノードが空いているかを示す必要があります。参加者は、ゲームボードをプレーンテキストではなくグラフィカルにすることをお勧めします(ただし必須ではありません)。 ゲームボードには、各ノードに一意の番号を付与する番号システムが必要です。好きなようにボードに番号を付けることもできますが、回答またはプログラムで説明する必要があります。正方形のボードには、次のように番号を付けることができます。 1-2-3 |\|/| 4-5-6 |/|\| 7-8-9 人間が最初に動く。彼の入力は単一の数字になります。これは、移動した石が現在あるノードの番号になります。ノード4から空のノード5に石を移動したい場合は、と入力し4ます。5は唯一の空のノードであるため、暗示されています。 人間は常に合法的な動きをすると仮定します。 人間が移動した後、更新されたボードを印刷する必要があります。プログラムが合法的な動きを決定したら、更新された別のボードを印刷し、人間が別の動きを入力するのを待つ必要があります。 プログラムは勝ったら終了するはずです。 ノート 標準コードのゴルフ規則が適用され、外部ファイルへのアクセスなどは行われません。また、プログラムが各移動を行うための15秒の柔軟な制限時間(妥当なマシン上)を課します。述べたように、このゲームには無限ループを形成する可能性があり、深さ優先の検索が無限ループに入るのは望ましくありません。
14 code-golf  game 

17
キース番号の場合、与えられた番号をテストします
フィボナッチ数とシーケンスは、コードゴルフの人気のあるテーマのように思えるので、キースの数でコードゴルフをするのは楽しいチャレンジになると思いました。 そこで、整数を取り、キース数であるかどうかに応じてtrueまたはfalseを返す関数を作成するという課題を提案します。 キース番号の詳細 レクリエーション数学では、キース数またはレフィギット数(フィボナッチのような数字の繰り返しの略)は、次の整数シーケンスの数です:14、19、28、47、61、75、197、742、1104、1537、2208、 2580、… Numberphileには、キース数の計算方法を説明したビデオがあります。ただし、基本的には数字の数字を使用します。それらを一緒に追加してから、元の番号の最後の桁を取得し、計算の合計に追加して、すすぎ、繰り返します。そして、それを明確にするための例。 14 1 + 4 = 5 4 + 5 = 9 5 + 9 = 14 入力 整数。 出力 番号がキース番号の場合は真。そうでない場合はfalse。
14 code-golf  math  number 

8
ゴルフビンゴをコード化!
あなたが与えられているビンゴボードとコールのリスト。BINGOを印刷する必要があります!ボードがゲームに勝利するとすぐに。 ビンゴボードは次のようになります。 これらは次のように指定されます。 14 29 38 52 74 4 18 33 46 62 7 16 * 60 71 9 27 44 51 67 12 23 35 47 73 ボードのすぐ後に、次のような呼び出しがあります。 B7 I29 G60 G51 O71 I23 I16 N38 勝者となるコール(行、列、または5つの長い対角線をすべて塗りつぶす)の直後まで、コールを標準出力にエコーし、次にprintする必要がありますBINGO!。 上記の例では、次を印刷します。 B7 I29 G60 G51 O71 I23 I16 BINGO! ルール 標準のコードゴルフ規則、最短コードが勝ちます。 詳細 …
14 code-golf 

5
セミコロンのない最短のHello Worldプログラム
私は最近、SOでC#を使用してセミコロンを使用せずにHello Worldプログラムを作成できるかどうかを尋ねる質問を見ました。課題は、これを再度行うことですが、可能な限り最短のコードで行います!
14 code-golf  c# 

1
コードゴルフ:宇宙船の運命は?[アスキーアート版]
バックグラウンド 遠くの銀河(そして恐らくは宇宙)には、宇宙船とたくさんの惑星がありました。船内の故障により、宇宙船の燃料が不足しました。現在、惑星群の近くで危険なほど遅い速度で動いており、そこから脱出しなければなりません!乗組員の運命はどうなりますか? チャレンジ あなたはUSS StackExchangeのリードプログラマーです。そのため、あなたは、あなたが惑星に土地を衝突させる運命にあるかどうかを明らかにし、惑星系から逃れるか、永遠に軌道にとどまるシミュレータを書くことを望みます。 ただし、宇宙船の爆発は、計算リソースが非常に限られていたことを意味します。プログラムはできるだけ小さくする必要があります。また、これは、実行するシミュレーションを入力する唯一の可能な方法がASCIIアートを使用することであることを意味します。 シミュレーション この多元宇宙の象限では、ASCIIアートに対応するために物理法則がわずかに変更されています。これは、コスモスが細胞に分割されることを意味します。移動はセル単位で記述され、時間は時間ステップ単位で記述されます。 船自体に勢いがあります。船が前のタイムステップでx軸に+2セル、y軸に-1セル((2、-1)と略す)を移動し、重力場がない場合、船は正確に移動します次のタイムステップで同じ速度。 いくつかの惑星があり、そのすべてがそのすぐ周囲の8つのセルに重力場を及ぼし、それが船の速度に影響を与え、船を惑星に近づけます。惑星の「北」になると、フィールドは(-1,0)の力で船を1つのセルから「南」に引き寄せます。ちょうど惑星の「北東」であると、船は1セルを「南」に、1ユニットは「-1、-1」の力で「西」に引っ張られます。 重力場は、重力でセルを離れるときに、船の運動量にベクトルを追加します。船が直前に(2、-1)セルを移動し、現在(-1,1)の重力場にいる場合、この次のタイムステップで(1,0)セルを移動します。船が複数の惑星に近接している場合、追加するベクトルが複数あります。 入力 STDINでは、惑星の座標と船の現在の速度を表示する惑星システムのASCIIアート表現を受け取ります。@記号の形で複数の惑星があり、av ^ <>記号の形で1つの宇宙船があります。船のシンボルの選択は、船の現在の速度を示します(重力が追加される前)。たとえば、<は西への1セルの速度を意味し、^は北への1セルの速度を意味します。すべての空のスペースはピリオドで構成され、すべての行が同じ幅になるようにパディングされます。空白行は入力の終わりを表します。入力の例を次に示します。 ................. ...@.@........v.. ......@..@..@@... ..@.............. .......@..@...... ................. 出力 出力はSTDOUTの1つの単語になり、船が重力から逃れるか、土地を惑星に衝突させるか、永久に周回するかがわかります。 重力からの脱出は、船がマップから移動することとして定義されます。船が脱出する場合、プログラムは「エスケープ」という単語を出力する必要があります。 クラッシュランディングとは、船が惑星を直接通過するか、タイムステップ中に同じセルに到達することです。タイムステップごとに船の位置を単純に計算するだけでは不十分であることに注意してください。(5,5)の速度で移動している船は、(1,1)にある惑星に衝突しますが、単純な計算では、そのセルを訪れることはありません。ただし、速度が(5,6)の船は、陸地を惑星に衝突させません。宇宙船がcrash落した場合、プログラムは「クラッシュ」という単語を出力する必要があります。 周回は検出が最も難しい場合があります。宇宙船が同じセルを2回、同じ速度で訪れるたびに、周回が行われます。船が周回する場合、「orbit」という単語を印刷する必要があります。 上記の例の出力は次のとおりです。 escape 説明 上記の例の各タイムステップで宇宙船が移動した場所を示すマップを次に示します。 ^ ................. ...@.@........v.. ....^.@..@..@@... ..@..<.<<<.<.v... .......@..@...... ................. それは南に行き、西に向き、廊下を下り、北に向き、そし​​て重力のせいで、高速で惑星の間を狭く逃げました。 検査のためのより多くのケース ... ^@. ... orbit ........... .>@.@...... .@......@.. ....@...... crash (it crashes …

5
1Dセルラーオートマトンのシミュレーション
チャレンジ STDINから7つの数字を取得し、セルオートマトン(CA)の2次元の履歴をSTDOUTに出力する完全なプログラムを作成します。これはコードゴルフです。 入力フォーマット 入力は、コンマで区切られた7つの整数/文字列です。最初の数字は、Wolframコード(各ルールの標準名)に従ったルールの番号です。2番目は、最初の初期構成です。3番目と4番目は、開始パターンの左側に追加するパターンとその回数を示しています。パディングとして。5番目と6番目は右側についても同じことを行います。最後の数字は、シミュレーションを実行する世代の数です。 したがって、入力の例はです90,11,0,4,0,4,5。これにより、プログラムにルール90を実行していることがわかります。また、プログラムに、両端に11文字列を04回追加した初期構成にすることを伝える必要があるため、実際の開始パターンは0000110000です。また、このシミュレーションを5世代実行するようプログラムに指示します。 出力プログラムは、出力がCAの時空間図になるように、各世代のセルの配列全体(改行で区切られている)を印刷する必要があります。世代ごとに、各セルの状態は、その状態と、入力として提供されたルールに従って、すぐ左と右のセルの状態によって決定されます。シミュレーションはエッジの周りをラップする必要があります。最初に印刷されるのは、genとしての開始配列です。0。 入力90,11,0,4,0,4,5により、次の出力が可能な限り正確になります。 0000110000 0001111000 0011001100 0111111110 1100000011 0110000110 開始状態は5つの世代に含まれていないことに注意してください。また、シミュレーションがエッジの周りをラップしていることに注意してください。 その他の例 入力: 184,1100,01,2,01,1,4 出力: 0101110001 1011101000 0111010100 0110101010 0101010101 入力: 0,1011,1,0,0,1,2 出力: 10110 00000 00000 1D CAの仕組みと番号付け方法の詳細

4
Groovyでのゴルフのヒント
興味のある言語でゴルフをするためのヒントを尋ねる多くの質問を見てきましたので、私のお気に入りの言語であるGroovyを尋ねることにしました。人々は、Groovyでのゴルフで使用されるいくつかのヒントやトリックを提供できます。
14 code-golf  tips 

9
与えられた動詞の過去形を返す関数を書く
チャレンジ 動詞である引数を取り、動詞の過去形を返す関数を作成します。(動詞が規則的であると仮定します) 過去形 注:yは子音でも母音でもないと考えてください。 通常、追加するだけ ed動詞の終わりの後にで、動詞の過去時制が作成されます。 例:jump→ jumped、ask→asked ただし、他のルールがあります。 与えられた動詞の最後の文字がの場合e、単に追加しdます。 例:love→ loved、move→moved 動詞が子音+ yで終わる場合は、に変更yしi、を追加しedます。 例:study→ studied、cry→cried ただし、動詞が母音+ yで終わる場合は、単に追加しedます。 例:play→ played、stay→stayed 動詞が母音と子音で終わる場合は、もう一度子音を書き、を追加しedます。 例:stop→ stopped、plan→planned ただし、動詞が複数の母音+子音または単一の母音+複数の子音で終了する場合は、単にを追加しedます。 例:look→ looked、jump→jumped 他にもルールがありますが、上記のルールのみに注意しましょう。たとえば、上記のルールに従ってvisit→ visitted。 勝者 これはコードゴルフであるため、過去の時制を正しく返す最短のコードが優先されます。 例(JS、127) function f(x){return x.replace(/([^aeiouy])y$/,'$1i').replace(/([^aeiouy][aeiou])([^aeiouy])$/,'$1$2$2').replace(/e$/,'')+'ed'}
14 code-golf  string 


2
このゲームで勝った単語のセットを見つけるための最速のpythonコード
これは、子供向けの一連のアクティビティカードからの単語ゲームです。ルールの下には、/ usr / share / dict / wordsを使用して最適なトリプレットを見つけるためのコードがあります。私はそれが面白い最適化問題だと思い、人々が改善を見つけることができるかどうか疑問に思っています。 ルール 以下の各セットから1つの文字を選択します。 選択した文字(およびその他の文字)を使用して単語を選択します。 単語を採点します。 選択したセットの各文字には、セットに表示されている番号が付けられます(繰り返しが含まれます)。 AEIOU カウント0 他のすべての文字は-2 上記の手順1〜3(手順1で文字を再利用しない)をさらに2回繰り返します。 最終スコアは、3つの単語スコアの合計です。 セット (1点を1点に設定、2点を2点に設定など) LTN RDS GBM CHP FWV YKJ QXZ コード: from itertools import permutations import numpy as np points = {'LTN' : 1, 'RDS' : 2, 'GBM' : 3, 'CHP' : 4, …

5
独自のデスノートを書く
キラはあなたの助けが必要です! 入力形式: Date [and/or Time] Name Gender Reason 出力フォーマット: <Last Name, First Name> <will die/died> on the <DD><st/nd/rd/th> of <MMM, YYYY> [at <hh:mm:ss TT>]. <He/She> <will die/died> of <Reason>. 詳細、詳細: プログラムでは、少なくとも次の日付入力形式を考慮する必要があります。 9 November 2003 9/11/2003 November 9, 2003 時間形式: hh tt hh TT hh:mm tt hh:mm TT hh:mm:ss tt hh:mm:ss …
14 code-golf 

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