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

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

1
正規表現が一致する可能性のある文字列の数を評価する
少数の人々とのチャットルームで、正規表現が一致する可能性のある文字列の数について、私と彼らの間で話題が出ました。 あなたの仕事は、その質問に答えることができるプログラムを構築することです。 プログラムは、このドキュメントで「拡張正規表現」として定義されている次のようなすべての正規表現を入力として受け入れます。 ^[A-Za-z0-9]{8}$ そして、その表現に一致する可能性のある文字列の総数を出力し、infinity無限に多い場合は出力します: 218340105584896 正規表現に一致するtoo many2 63 -1を超える可能性のある文字列がある場合、プログラムは出力することもあります。ただし、infinity実際には無限に多くの文字列がない限り、出力してはなりません。 上記を行う最短のプログラムが勝ちです。
20 code-golf 

7
ジュリアでのゴルフのヒント
ジュリアでゴルフをするための一般的なヒントは何ですか?私は、ゴルフの一般的な問題をコード化するのに適用できる、少なくともジュリア特有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。
20 code-golf  tips 

2
ユタ州のティーポットを描く
ユタティーポットもともとマーティン・ニューウェルが作成したが、3Dグラフィックスのプログラムをテストするための便利なオブジェクトです。 タスクは、透視投影でティーポットのワイヤーフレーム画像を作成することです。ソースコードアプリケーションのアイデアを促進するために、表示とカメラ制御を分離し、カウントから除外することができます。これにより、パラメーターと入力ファイルを変更し、コードを再利用してさまざまな画像を生成できますが、複雑なコマンドライン引数などを受け入れる本格的なユーティリティを作成する必要はありません。「ハッカー的」なバランスが求められています。 ref。StackOverflow:ユタ州のティーポットでベジェパッチはどのように機能しますか? そのため、ここには3つのサブタスクがあります。 元の形式でティーポットデータを読み込みます。 deCasteljau分割またはその他の方法を使用して、パッチデータを再分割します。他の方法は、ベジエ基底行列を使用して、多項式(フォーリーやファンダム、ニューマンやスプロールなどの標準参照)、またはバーンスタイン基底法(まだ私を超えています)を評価しています。 ポイントが2Dに投影され(言語がネイティブで3Dをサポートしていない場合)、ビューがLookAtポイントを中心とし、垂直軸がティーポットの垂直軸と一致するアイポイントから見た各小さなパッチの輪郭を描きます。 (つまり、見晴らしの良い場所から「直立」して描く)。 ファイルから行指向のテキストデータを読み込むことは少し問題があると仮定すると、この挑戦は本当に得ることについてであるハンズオンバイキュービックベジェパッチデータを持ちます。 背面カリングの単純な通常のテストでは不十分であるため(パッチがすべて外側に向いているわけではありません)、隠線や表面の除去は必要ありません。ワイヤーフレームとして、背中が見える状態でうまく見えるはずです。見た目は、目からの距離に応じて線幅を調整することで改善できますが、これは厳密には必要ありません(自分のプログラムではこれを行いません)。 これはcode-golfとrosetta-stoneの両方です。ゴルフで競合する回答には、通常どおりカウントを含める必要があります。ただし、特別な言語ではない場合でも、通常とは異なる言語での提出を強くお勧めします。 コルモゴロフの複雑さの愛好家には、パッチの回転とミラーリングを追加することで完全なセットを再構築できる、より簡潔なデータセットがあります。また、Jim BlinnのA Trip Down the Graphics Pipelineには、個々のパッチに回転または他の対称性があるという事実を使用した、より簡潔な生成方法があります。体全体(または蓋)は、y軸を中心に回転する単一のベジェ曲線で説明できます。注ぎ口とハンドルは、それらのプロファイルの2つの曲線で記述し、次に、中間の制御点を選択して円形の押し出しを近似できます。

3
JSFuckゴルフ-Hello World
JSFuckは、6文字のみを使用する別の有効なJavascriptプログラムにJavascriptステートメントを正確に再現できる難解な言語です[]()!+。 JSFuckコンバーターは、を入力するとalert("Hello World!")、22,948文字のコードブロックを生成します。プログラムは多くの自動変換を使用してそのブロックを作成したため、手動の最適化を使用してコードを大幅に短縮できると考えています。 あなたのタスクはalert("Hello World!")、文字のみを使用してタスクを実行するJavascriptプログラムを構築すること[]()!+です。そのための最短のコードが優先されます。

6
パターンで奇妙な文字を見つける
入力 最初の行は、特定の文字列が何回も繰り返されます。例えば、それができるabcabcabcabc、[];[];[];等これは、切断されてもよいです。例:1231231231。常に最も短い文字列を見つけます。たとえば、行がの場合、22222文字列は2、ではない22、22222またはその他のものです。文字列は常に少なくとも2回は繰り返されます。 後続のすべての行は、任意の数だけオフセットされたパターンになります。たとえば、次のようになります。 abcabcabc cabcabcab bcabcabca (1オフセット)、または次のようになります。 abcdefabcdefabcdefabc cdefabcdefabcdefabcde efabcdefabcdefabcdefa (4オフセット)。 入力の文字の1つが間違っています。(最初の行にないことが保証されています。)たとえば、次の入力では: a=1a=1a=1 =1a=1a=1a 1a=11=1a= a=1a=1a=1 =1a=1a=1a 13行目は奇数1つのアウトです。 出力 奇数の座標の出力(左上から開始するゼロベース)を出力する必要があります。たとえば、上記の入力では、対応する出力は4,2です。また、出力をしてもよい4 2、または"4""2"、あるいは[[4],[2]]、または任意の他の形式は、限り、あなたは出力が可能になっているものを言うことができるように。 テストケース 入力: codegolfcodegolfco egolfcodegolfcodeg lfcodegolfcodegoff odegolfcodegolfcod golfcodegolfcodego fcodegolfcodegolfc 出力: 16,2 入力: ][[][][[][][[][][[][][[ [][][[][][[][][[][][[][ [][[][][[][][[][][[][][ [[][][[]]][[][][[][][[] 出力: 8,3 入力: ... . . ... 出力: 1,1 入力: ababa babab ababb babab …
20 code-golf 

4
2Dポイントのセットの凸包を見つける
釘のセットを木製の板に打ち込み、輪ゴムを巻き付けると、凸包が得られます。 あなたの使命は、あなたがそれを受け入れることに決めたなら、2Dポイントの与えられたセットの凸包を見つけることです。 いくつかのルール: 関数として記述し、ポイントのリスト座標(任意の形式)が引数です 出力は、任意の位置から開始して、時計回りまたは反時計回りにリストされた凸包内のポイントのリストである必要があります 出力リストは、各ポイントの座標が明確に区別できる合理的な形式にすることができます。(たとえば、1次元のリストではありません{0.1、1.3、4、...}) 凸包のセグメント内の3つ以上のポイントが整列している場合、出力では2つの極値のみを保持する必要があります。 サンプルデータ: サンプル0 入力: {{1, 1}, {2, 2}, {3, 3}, {1, 3}} 出力: {{3, 3}, {1, 3}, {1, 1}} (図は単なる例示です) サンプル1 入力: {{4.4, 14}, {6.7, 15.25}, {6.9, 12.8}, {2.1, 11.1}, {9.5, 14.9}, {13.2, 11.9}, {10.3, 12.3}, {6.8, 9.5}, {3.3, 7.7}, {0.6, 5.1}, {5.3, 2.4}, …

17
三角法を始めましょう!
前書き: 正弦のx式によって与えられます。 sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! - x^11/11! // and more follows... 余弦のx式によって与えられます。 cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + x^8/8! - x^10/10! // and more follows... 仕事: との値を考えるxとn、プログラム出力する(NO関数、等)の値を書き込むsin(x)とcos(x)、正しい点で最大n上記式の条件を。xラジアン単位であると仮定します。 入力: x n 10進数 x( 3桁まで)および整数n。入力は標準入力またはプロンプトダイアログボックスで行う必要があります(言語が標準入力をサポートしていない場合) 出力: [sin(x)] [cos(x)] 両方の値sin(x)とは、cos(x)小数点以下6桁に丸めなければなりません。場合sin(x)である0.5588558855(10桁)、それはに四捨五入する必要があります0.558856 6桁)にます。丸めは、このWiki記事の表の5番目の列「最も近い値に丸める」で説明されているように、最も近い値に行う必要があります。 …
20 code-golf  math 

9
ピサノ時代を見つける
フィボナッチ数列は、各ウェルエントリは、前の2の合計であり、我々はシーケンスが周期的になるだろう定数によって各用語の剰余を取る場合は、最初の2つのエントリが1である、順序を知っています。たとえば、シーケンスmod 7を計算することにした場合、次のようになります。 1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ... これの周期は16です。ピサノシーケンスと呼ばれる関連するシーケンスa(n)は、nを法として計算されたときのフィボナッチシーケンスの周期であるように定義されます。 仕事 nフィボナッチ数列modの周期を計算して出力するプログラムまたは関数を作成する必要がありますn。これは、Pisanoシーケンスのn番目の項です。 範囲の整数のみをサポートする必要があります 0 < n < 2^30 これはコードとゴルフの競争なので、ソースコードのサイズをバイト単位で最小化することを目指してください。 テストケース 1 -> 1 2 -> 3 3 -> 8 4 -> 6 5 -> 20 6 -> 24 …

14
Playfair暗号化プログラムを書く
2行の入力を受け取り、最初のフレーズをキーフレーズとして使用して、Playfair暗号化技術に従って2番目のフレーズを暗号化するプログラムを作成します。 ウィキペディアではPlayfair暗号化についてある程度詳しく説明していますが、あいまいさを避けるために、簡単な要約を以下に示します。 1.キーテーブルを生成します。 Jキーフレーズ内のすべての出現をで置き換えI、アルファベット以外の文字と繰り返し文字をすべて削除します。5x5暗号化テーブルに挿入し、残りのセルにアルファベットの残りを入力します(ただしJ、;は好きではありませんJ)。 例: S T A C K O V E R F Stack Overflow --> STACKOVERFLW --> L W B D G H I M N P Q U X Y Z 2.暗号化するメッセージを準備する すべてJをで置き換えI、アルファベット以外の文字をすべて削除し、ペアを使用Xして、同じ文字を含むペアを2回分割します。奇数の文字で終わる場合Xは、末尾に追加します。(注:数字がいっぱいにスペルアウトする必要がある- 、ONE、TWO、THREEなど-しかし、あなたは、これはすでにあなたのために行われていると仮定することができます。) 例: In: The cat crept into the crypt, crapped, and crept out …

18
有効なコードのみを使用して短編小説を書く
私が見たいのは、かなり読みやすい意味を持つが、有効なコードフラグメントを作成する一種の「ストーリー」を書くあなたの試みです。たとえば、次の(BBC)BASICコード: LET customer = "sober" REPEAT INPUT "more beer" UNTIL customer = "drunk" (http://img.rakuten.com/PIC/12184048/0/1/300/12184048.jpgに基づいて考えています) ルール/ガイドライン: コードは指定した言語で有効である必要があります-誰もが空想を作成することなくそれを実行できなければなりません 文字列、コメント、またはフリーテキストをコードに追加できるものを使用できますが、文字列ごとに最大3ワード(および、複数の文字列またはコメントを連続して入力することはできません) コードは、実行時に適切な出力になる必要はありません。コードが有効であり、英語で読むと意味のあるもの(*)を表す限り、無限ループになることさえあります。 コード内の中断点は、ストーリーでは無視されます。 変数を定義する必要はありません。ここで作成するコードは、単なるコードフラグメントです。あなたはなり5点を失うなど/未定義の変数/キーワード/ラベルを呼び出します。しかし。 使用する個々の組み込みキーワード/ステートメント/関数/などごとに、15ポイントを受け取ります。これらにはforおよびifが含まれますが、などの組み込み関数も含まれreplace()ます。ライブラリは組み込み関数としてカウントされませんが、自由に使用できます。 コード内のすべての文字、数字、またはアンダースコアごとに、1ポイントを受け取ります。 ストーリーに関係のない()コードのすべての行/ブロック、または英語で意味のないキーワード/ステートメントなどを使用する()場合、20ポイントを失い、関与するキャラクターは1文字あたり1ポイントにカウントされません数。int変数を定義するときなど、データ型を必要とする言語に対して公平に保つために、データ型は完全に無視されます。これは、キーワードであるために10ポイントを受け取らないこと、つまり関連するキャラクターのポイントを受け取らないことを意味しますが、ポイントを失うこともありません。 「空白を埋める」ためのコメントを挿入して、何か有効な英語を作成することはできません。 これは人気コンテストであるため、回答への賛成票ごとに25ポイントを受け取ります。 コードの言語と、回答が得られるポイント数をカウントするために使用した式を必ず指定してください。 上記のシステムを使用して、最もポイントの多い答えが勝ちです。 このシステムを使用すると、上記のサンプルコードは4*15 + 53*1 = 113初期ポイントを取得します。 (*)オーバーanalysation /オブジェクト化部分:可能な限り客観的、「賢明な」または「無関係」としてこれを維持するためには、次のことを意味します。英語でないコードが使用する単語の一部ならば、それは例えば(有効ではありません、constまたはintあります英語の単語ではありませんが、foreachまたはtypeof2つの英語の単語がマージされているので、大丈夫です)。また、printまたはなどの有効な英語の単語を使用する場合でもecho、これらは元の意味でストーリーに適合する必要があります(「画面に表示する」ではなく「紙にインクを入れる」と「音を反映する」)。そして、「適合」とは、物語の主題がそれに関連していなければならないことを意味します。 この最後の「免責事項」が客観的な基準を定義する要件を満たすことを願っています。

10
「無料の空白」を活用する
codegolfチャレンジは、プログラムの長さの空白をカウントしないとします。スクリプトを空白にエンコードしてこのシステムをごまかし、埋め込まれた空白をデコードして実行するスクリプトをゴルフします。 例 JBernardoのMeta Golf Challengeに対する私の解決策は、Sage(またはPython)コードを空白にエンコードし、デコーダーをゴルフすることでした。 s = ' ' for c in '<lots of whitespace>'.split(s): s+=chr(len(c)) exec s エンコードは、スクリプトを取得し、改行を追加cし、スクリプト内の各文字について、ord(c)タブを出力し、その後にスペースを続けます。Pythonを使用していsて、スペースでスクリプトを開始するため、改行を前に付ける必要があります。 得点 完全なソリューションには、使用するエンコードの説明(複雑な場合はスクリプトを提供します)、および「デコードと実行」スクリプトが含まれます。スコアは、デコード実行スクリプト内の非空白文字の数です。 空白(言語)は禁止されています さらに、空白文字のみを使用する演算子の完全なセットを持つ言語は許可されていません。最低のゼロ以外のスコアを受け入れます。

15
低すぎるゲームを作るための最短コード-高すぎるゲーム
ゲームを低すぎる---高すぎる(TLTH)最短コード(バイト単位)で作成する必要があります ゲームのルール: コンピューターは整数範囲(-32768..32767)から乱数を選択します。 ここで、数字を考えて入力します。 コンピューターは、選択した番号よりも小さい(TOO LOW)か大きい(TOO HIGH)かを判断します。 数字を推測すると、コンピューターにが表示されますCongrats! You found the number!。 コード規則: 文字を使用しないでくださいT、O、L、W、H、IおよびG文字列または文字リテラルで(小文字でも大文字でもありません)。 例えば: tolower(T); // Acceptable cout<<"T"; // Unacceptable char ch='T'; // Unacceptable ゲームを開始する前にコードでゲームルールを表示できる場合は、300バイトを削除します。 コードで次のようにターン数をカウントし、ゲーム終了時に取得したターン数を表示できる場合は、50バイトを削除します。 "Congrats! You found the number in n turns!" ここで、nは "Congrats! You found the number!" 入力した数値が整数範囲外であることをコードがユーザーに通知できる場合は、スコアから25バイトを削除します。 例えば: Enter the number: 40000 Sorry! This number …
20 code-golf 

3
1P5:ワードチェンジャー
これは、最初の定期的なプレミアプログラミングパズルプッシュの一部として書かれました。 ゲーム 同じ長さの開始ワードと終了ワードが提供されます。ゲームの目的は、開始単語の1文字を変更して別の有効な単語を作成し、最小限のステップを使用して、終了単語に達するまでこのステップを繰り返すことです。たとえば、TREEとFLEDという単語を指定すると、出力は次のようになります。 TREE FREE FLEE FLED 2 仕様書 OWLまたはSOWPODSのウィキペディアの記事は、単語リストに関する限り、有用な出発点になる可能性があります。 プログラムは、開始ワードと終了ワードを選択する2つの方法をサポートする必要があります。 コマンドライン、stdin、または選択した言語に適したものを使用してユーザーが指定します(実行していることを記載してください)。 ファイルからランダムに2つの単語を選択します。 開始語と終了語、およびすべての中間語は同じ長さでなければなりません。 各ステップはその行に印刷する必要があります。 出力の最終行は、開始語と終了語の間を取得するために必要な中間ステップの数である必要があります。 開始語と終了語の間で一致が見つからない場合、出力は、開始語、終了語、および単語OYの3行で構成される必要があります。 ソリューションのビッグO表記を回答に含めてください プログラムが生成するステップを示すために、10の一意の開始と終了の単語のペアを(もちろん、その出力とともに)含めてください。(スペースを節約するために、プログラムはこれらを個々の行に出力する必要がありますが、これらを投稿用に1行に統合し、各実行の間に新しい行をスペースとコンマで置き換えることができます。 目標/勝利基準 1週間後に最短の暫定ステップを生成する最速/最高のBig Oソリューションが勝ちます。 Big O基準の結果が同点の場合、最短のコードが優先されます。 まだ同点の場合、最速かつ最短のリビジョンに到達する最初のソリューションが勝ちます。 テスト/サンプル出力 DIVE DIME DAME NAME 2 PEACE PLACE PLATE SLATE 2 HOUSE HORSE GORSE GORGE 2 POLE POSE POST PAST FAST 3 検証 出力の検証に使用できるスクリプトに取り組んでいます。 そうなる: …

30
ランレングスデコード
指定した文字列のランレングスデコードを実行するには、選択した言語で最短のコードを記述します。 文字列は、標準入力で次の形式で入力されます。 CNCNCNCNCNCNCNCN それぞれ C任意の印刷可能なASCII文字である可能性があり、それぞれがN数字である1と9(包括的)。 サンプル入力: :144,1'1 対応する出力: :4444,'
20 code-golf  string 

6
平行投影ボクセルテレインジェネレーター
あなたの仕事は、高さマップを生成し、平行投影されたボクセルの風景として表示することです。ルールは次のとおりです。 ランドスケープ(のハイトマップ)はランダムに生成する必要があります また、使用しているアルゴリズムがどのように機能するかを説明する必要があるため、誰もがここで新しいことを学ぶことができます また、画像を生成するか、生成された風景を画面に表示する必要があります 結果として得られる画像は、平行投影されている必要があるため(遠近法ではなく)、ボクセルのみを含むことができます(したがって、小さな箱で作成する必要があります) これは人気コンテストなので、プログラムにいくつかの追加機能を追加して、より多くの賛成票を獲得できます。 勝者は、最後の有効な提出から7日後に最も支持された有効な回答です。すべての有効な提出は、使用されるアルゴリズムの説明を含むルールに従う必要があります。いくつかのルールに従わない追加機能(パースペクティブモードの追加など)を追加できますが、この場合はオプション機能である必要があります(たとえば、結果をオフにする場合はすべてのルールに従う必要があります) 私の提出は有効とはみなされません。 結果イメージの例は次のとおりです。 ここから撮影した画像 いくつかのアルゴリズムが必要な場合はこちらをチェックしてください

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