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

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

5
2次元構文を解析する
バックグラウンド アリスとボブは、すべてのPPCGチャレンジに勝つためにゴルフ言語を作成しています。アリスは> <>のような2次元言語を作成したいと考えていますが、ボブはJのようなプレフィックスとインフィックスの構文を好みます。妥協として、2次元のプレフィックスとインフィックスの言語を作成することにしました。パーサーは書くのが面倒で、あなたの助けが必要です! 構文仕様 アリスとボブの言語には、小文字のASCII文字で表される変数と、大文字のASCII文字で表される関数があります。関数は、1つまたは2つの引数で呼び出すことができます。プログラムは、文字の矩形グリッドで、スペース、および左上隅には、スペースを含めることはできません。これは有効なプログラムの例です:a-zA-Za-zA-Z F Gy H R x プログラムが解析されると、1文字の変数と形式<func>(<arg>)またはの関数呼び出しを含むCスタイル言語(C、Java、Python ...)の式に変換されます<func>(<arg1>,<arg2>)。たとえば、上記のプログラムは次の式になります。 F(H(R(x)),G(x,y)) 解析プロセスの詳細は次のとおりです。 スペースは単なるフィラーであるため、解析されません。 すべての変数a-zは常にそれ自体として解析されます。 すべての関数A-Zは、関数呼び出しとして解析されます。その引数は、グリッドの下でこの順序で右にある最も近い式です。これらのいずれかのみが存在する場合は、それが唯一の引数として与えられます。すべての関数には、グリッドに少なくとも1つの引数があると仮定できます。 上記の例では、変数xとyはそれ自体として解析されます。この関数Rはx、その下とその右に何もないので、1引数呼び出しとして解析されますR(x)。同様に、の下にあるため、Hとして解析されます。関数はその下と右にあるため、として解析され、同様にのために解析されます。左上隅で解析される式は、解析プロセスの結果です。H(R(x))RGxyG(x,y)F 入出力 入力は、空でない長方形の文字配列です。これは常にアリスとボブの言語で有効なプログラムになりますが、出力には使用されない表現が含まれる場合があります。出力は、上記のプロセスの結果として解析された式になります。 ルールとスコアリング 関数の完全なプログラムを書くことができます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース これらは、形式の間に与えられ、ケース間にgrid <newline> expressionハイフン---があります。SE形式では一部の行が空白のままになりますが、空白で埋める必要があります。 x x --- x y z x --- Fx F(x) --- Fx y F(y,x) --- ABu A(B(u)) --- G H k G(H(k)) --- ABCA …

3
星空のメタゴルフ
Starryは、難解なプログラミング言語です。コードは+*.,`'、各文字が表す実際のコマンドがその前のスペースの数によって決定される場所のみで構成されます。さまざまなコマンドが非常にさまざまなバイト数に対応できるため、ゴルフの固定出力の課題であっても難しいことです。特に、数値リテラルには単項表現があるため、小さい数字を操作して大きい数字を作成する必要があります。 したがって、この課題は、そのような星空プログラムをゴルフできるプログラムを書くことです。 Starryはどのように機能しますか? (いくつかの詳細はエソランで未指定のままになっているため、Rubyインタープリターの動作について説明します。) Starryはスタックベースの言語であり、任意の精度の整数値の単一スタック(最初は空です)を備えています。 意味のある文字は次のとおりです。 +*.,`' およびスペース。他のすべての文字は無視されます。これらのスペース以外の文字のいずれかが続くスペースの各シーケンスは、単一の命令を表します。命令のタイプは、スペース以外の文字とスペースの数によって異なります。 手順は次のとおりです。 Spaces Symbol Meaning 0 + Invalid opcode. 1 + Duplicate top of stack. 2 + Swap top 2 stack elements. 3 + Rotate top 3 stack elements. That is, send the top stack element two positions down. [... 1 2 3] …
25 metagolf  stack  starry 

3
W x H桁のグリッドで最大のN桁の数字を見つける
正の整数Nと、幅Wと高さH(これも正の整数)の10進数のグリッド(0〜9)を取り込むプログラムまたは関数を作成します。Nは、WとHの大きい方以下になると想定できます。 グリッドに水平または垂直に表示され、通常の読み取り順または逆順で書き込まれた最大の連続したN桁の数字を印刷または返します。 数字の対角線は考慮されません。 グリッドはラップアラウンドしません。つまり、周期的な境界条件はありません。 たとえば、3×3グリッド 928 313 049 なければならない9N = 1のための出力として94N = 2のための出力として、および940N = 3に対する出力として。 4×3グリッド 7423 1531 6810 8N = 1、86N = 2、854N = 3、7423N = 4の場合、出力は次のようになります。 3×3グリッド 000 010 000 1N = 1、10N = 2、N = 3の出力010があります(N = 3の場合も有効です)。 1×1グリッド 0 0N = 1の出力があります。 便利で合理的な形式で入力を取得できます。たとえば、グリッドは、改行で区切られた数字列、多次元配列、または数字リストのリストなどです。それらがグリッドの一部である場合、出力に先行ゼロを使用できます。 これはcode-golfであるため、バイト単位の最短コードが勝ちますが、アルゴリズムが計算上効率的であることを示すことができる回答に対してブラウニーポイント(つまり、より有望な投票)も授与します。
25 code-golf  math  number  grid 

9
文字列の非親子化
適切に括弧で囲まれた文字列を入力として、一致する括弧内(またはすべての括弧の外側)にある空でないすべての部分文字列のリストを、ネストされた括弧を削除して出力します。各サブストリングは、まったく同じ一致する括弧内の文字のシーケンスである必要があります。部分文字列は深さの順にリストする必要があり、同じ深さの部分文字列は文字列に現れる順にリストする必要があります。入力が常に正しく括弧で囲まれていると仮定します。 入力には、小文字のASCII文字と括弧のみが含まれていると想定できます。 答えは、文字列が与えられたときに文字列のリストを返す関数でなければなりません。 例: 'a(b)c(d)e' -> ['ace', 'b', 'd'] 'a(b(c)d)e' -> ['ae', 'bd', 'c'] 'a((((b))))' -> ['a', 'b'] 'a()b' -> ['ab'] '' -> [] 'a' -> ['a'] '(((a(b)c(d)e)f)g)h' -> ['h', 'g', 'f', 'ace', 'b', 'd'] 'ab(c(((d)ef()g)h()(i)j)kl)()' -> ['ab', 'ckl', 'hj', 'efg', 'i', 'd'] 最少バイトが勝ちます。

2
どの言語が最短ですか?
code-golf -tagを使用して、少なくとも20の答えがある最新の50の課題を見つけるプログラムを作成します。次に、各課題の各言語のスコアを抽出します。同じ言語を使用した回答が複数ある場合は、すべてのスコアを数えます。その後、上位20の最も一般的な言語を取得し、言語名、回答数、平均バイト数、および中央値バイト数のリストを出力します。リストは、回答数の降順で並べ替える必要があります。 大文字と小文字の違いを考慮する必要があります(例:Matlab = MATLAB)。 多くの異なるバージョン番号を持つ言語(Pythonなど)では、それらを一意の言語としてカウントします。 Python != Python 2 != Python 2.7 != Python 3.x 出力例(出力形式はオプションです): cJam, 66, 12.4, 8.5 Pyth, 58, 15.2, 19 Ruby, 44, 19.2, 22.5 Python, 34, 29.3, 32 Python 2.7, 22, 31.2, 40 ... ... Java, 11, 115.5, 94.5 サポートする必要があるヘッダー形式: # Language name,またはで始まる#Language name で終わるxx …

20
細菌の増殖
標識された細菌のコロニー1を介して9空のセルと、等間隔のセルのセグメントで生をによって示さ0 0 0 2 0 0 0 1 2 0 0 3 3 0 0 毎秒、各コロニーは隣接する空のセルに広がります。2つのコロニーが同時に空のセルに到達すると、ラベルの大きいコロニーがそれを取得します。 t=0: 0 0 2 0 0 0 1 2 0 0 3 3 0 0 t=1: 0 2 2 2 0 1 1 2 2 3 3 3 3 0 t=2: 2 2 2 …

30
私の名前は公式ですか?
前書き ToonAlfrinkが言うように:「私はここで初心者が試みることができる十分な簡単な質問がないと思います!」。そのため、タスクは非常に簡単です。文字列が与えられた場合、名前が公式であるかどうかにかかわらず、真実または偽の値を出力します。 単一のタイトルケースの単語である場合、名前は「公式」です。 場合は最初の文字は(公式ではない:大文字ですadnan) 他の文字はしている場合ではない(公式ではない:大文字AdNaN) 名前にアルファベット以外の文字が含まれていない場合(非公式:Adnan123、Adnan!) 名前が1語のみで構成されている場合(公式ではありません:Adn an、Adn An) 名前は、複数の文字(公式ではないが:持っている場合A) ルール 機能またはプログラムを提供できます これはcode-golfであるため、バイト数が最小の提出が勝ちです! 注:物事を簡素化するために、この課題では、Mary-Annのような名前は公式ではありません。 名前に先頭に空白がないと仮定します。 印刷可能なASCII文字(32-126)のみが名前に使用されると仮定します テストケース Input: Adnan Output: True Input: adnan Output: False Input: AdnaN Output: False Input: Adnan123 Output: False Input: Adnan Adnan Output: False Input: A Output: False Input: Mary-Ann Output: False リーダーボード コードスニペットを表示 /* Configuration …
25 code-golf  string 

17
+1素数のカウント
自然数のように定義pがある+1素数自然数のN場合、pは素数と標準バイナリ表現である(すなわち、先頭のゼロなし)P(すなわち、前置、付加又は挿入)を添加することによって得ることができます単一の1からnの標準バイナリ表現。 たとえば、17のバイナリ表現は10001 2です。添加することにより形成することができる別個の自然数1に10001 2がある110001 2または49、101001 2または41、100101 2または37、および100011 2または35。 これらのうち、41と37は素数であるため、17には2つの+1素数があります。 仕事 厳密に正の整数受け入れプログラムまたは機能書き込みN入力及び印刷またはリターンとして別個の数+1素数のNを。 入力と出力は、整数か、その10進数または単項文字列表現でなければなりません。 標準のコードゴルフ規則が適用されます。 テストケース Input: 4 Output: 0 Input: 1 Output: 1 Input: 17 Output: 2 Input: 33 Output: 3 Input: 553 Output: 4 Input: 3273 Output: 5 Input: 4145 Output: 6 Input: 4109 Output: 7 Input: 196869 Output: 8

14
コードボット4:関数型プログラミング
sheesh、これは本当に4番目ですか?昔からのすべての人にとって、中心的な課題は同じですが、カスタム言語の代わりにJavaを使用しています。興味のある方のために、過去3つの CodeBot チャレンジをご紹介します。 CodeBotsの目標は、ボットをできるだけバイラルにすることです。各ボットには旗があり、旗がどこにでもあることを確認する必要があります。 API ボットは標準化された「プロトコル」に従い、ボットは以下のステップを同期的に進行します。 IPAddress selectMessageRecipient() ボットが「フレンドリ」メッセージの送信先を選択できるようにします。 Message sendMessage() ボットが送信するメッセージの内容を選択できるようにします。 processMessage(IPAddress, Message) ボットが受信するメッセージごとに呼び出されます。 FunctionType selectFunctionToBlock()現在のターンで関数が上書きされるのをブロックします。手順7を参照してください。 IPAddress selectAttackTarget()ボットがDDOSを希望するユーザーを選択できるようにします。ボットが同時に3つのボットの標的になっている場合、DDOS攻撃は成功します。攻撃が成功した場合、各攻撃者はステップ6および7を実行できます。 readData(ReadonlyBot) ボットが脆弱なボットに保存されているデータを読み取れるようにします。 FunctionType selectFunctionToReplace()この挑戦の核心です。1つの機能(ここにリストされている8つのうち)を選択して、ボットからボットにコピーできます。その後、関数はtheirsの代わりに呼び出されます。複数のボットが同じ機能を選択した場合、ランダムなボットが成功します。 String getFlag()はゲームの終了時に呼び出され、送信に固有の文字列を返す必要があります。関数は常に同じ文字列を返す必要があります。ゲームの最後に最も多くのフラグが付いた提出が勝ちです。 ストレージ ストレージには、AddressBook、Log、Variablesの 3つの形式があります。 これらの形式のストレージは、関数が実行されているボットに対してローカルです(関数がコピーされた場合、これらの各オブジェクトの内容は異なります)。これらのオブジェクトはすべて、手動で変更または消去できます。これらのオブジェクトを取得するには、クラスにゲッターがあります(例:)getLog()。 アドレス帳は、リストに格納たIPAddressと、各AddressTypeにあなたがアドレスの種類を分類することができます。 AddressBookには常に少なくとも1つのアドレスが含まれます(クリアされた場合、ランダムなアドレスが追加されます)。アドレス帳をクリアして複数のIPアドレスを取得するは許可されていません。 ログはすべて実行されたアクションだけでなく、行動に関するデータのリストを格納します。また、成功したすべての攻撃の履歴も含まれます(ただし、どの機能が上書きされたかはわかりません) 変数オブジェクトを使用すると、文字列の名前に接続文字列変数を格納することができます。ゲームの開始時に、変数には単一の変数が含まれますID。これには、ボットタイプに固有のランダムに生成されたIDが含まれます。 他のアクセス機能もあります。 int getTurnNumber() 現在のターンの整数を返します bool functionsMatch(ReadonlyBot, FunctionType) ReadonlyBotの関数があなたのものと一致するかどうかをテストします IPAddress personalAddress() あなたのIPアドレスを返します 実装方法 Githubからコードを入手できます ボットを\botsフォルダーに追加してから、ボットへの参照を追加しますcontroller\CodeBotFactory.java ボットを拡張するcodebots.bot.CodeBotか、codebots.bots.DefaultCodeBot コントローラーを実行する場合は、Java 8が必要です。 …

20
特定の周波数の音を出力する
これはかなり単純な挑戦ですが、それに似た質問は見つかりませんでした。課題は、STDINまたは同等のものを使用して周波数を取得し、その周波数に一致するトーンをHz単位で5秒間出力することです。例えば Input: 400 Output: (a tone of 400 Hz with a duration of 5 seconds) ルール 入力は、STDIN、または使用する言語の同等物を介して取得する必要があります 答えは完全なプログラムでなければなりません ビルトインを使用できます 周波数は50〜5000 Hzのいずれかになります 出力は5秒間再生する必要があります 出力は正弦波の形式でなければなりません テストケース 入力: 440 出力: 入力: 200 出力: 入力: 4000 出力: これは、これに対する最短の解決策で言語を見つけることではありません(空のプログラムがトリックを行う場所があります)-これは、すべての言語で最短の解決策を見つけることです。したがって、回答は承認済みとしてマークされません。 通常のルールとは異なり、このチャレンジよりも新しい言語(または言語バージョン)を自由に使用できます。このチャレンジに対して0バイトの回答を送信するために特別に作成された言語は、公平なゲームですが、特に興味深いものではありません。 提出物をテストできるようにインタープリターが必要であることに注意してください。以前に実装されていない言語用にこのインタープリターを自分で作成することは許可されています(推奨されます)。 また、言語はプログラミング言語の通常の基準を満たす必要があることに注意してください。 カタログ この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 ## Language Name, N bytes N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: ## Ruby, <s>104</s> <s>101</s> …
25 code-golf  audio 

7
リストをタイムテーブルに追跡する
前書き 誰かがあなたの好きなアルバムをYouTubeにアップロードしたときに嫌いではないのですが、説明にはトラックリストのみが含まれていますか?このような: 1. Everything in Its Right Place - 4:11 2. Kid A - 4:44 3. The National Anthem - 5:50 4. How to Disappear Completely - 5:55 5. Treefingers - 3:42 6. Optimistic - 5:16 7. In Limbo - 3:31 8. Idioteque - 5:09 9. Morning Bell - 4:29 …
25 code-golf  string  date 

6
大きな大きな数字
私の答えのいくつかをゴルフにしようとしながら、できるだけ少ない文字で大きな整数を書く必要がありました。 今、私はそれを行うための最良の方法を知っています。このプログラムを書いてもらうつもりです。 チャレンジ 正の整数を指定すると、標準出力または同等の出力を出力するプログラムを出力するプログラムを作成します。 出力プログラムは、作成者と同じ言語である必要はありません。 出力は最大で128バイトでなければなりません。 stdinまたは同等のもの(関数入力ではない)からの入力を受け入れることができます 結果のプログラムをstdoutまたは同等のものに出力できます。 数値の出力は10進数でなければなりません(基数10) 得点 スコアは、プログラムでエンコードできない最小の正の整数に等しくなります。 スコアが最大のエントリが勝ちます。

3
コードを1行も書かずにシンプルな電卓を「書く」
それは超簡単: コードを1行も書かずにプログラムを作成します。コードは、既存のStack Overflowの質問と回答のみで構成されます。 プログラムは2つの乱数を作成し、その数値を出力する必要があります に追加、 から引き、 と乗算されます で割った お互い。 ルール 回答で使用した質問/回答へのリンクを含める必要があります。次の例外を除き、見つけたコードを変更することはできません。 変数、関数、およびメソッドの名前を変更できます。(これは、たとえばscanner.nextInt()をscanner.nextLine()に変更し、メソッド名を変更していると主張することにより、メソッド呼び出しを変更できるという意味ではありません。変更は、同じエンティティ。)。変数、関数、またはメソッドの名前が再度変更された場合でも、ソリューションは機能するはずです。 インデントを適切に調整できます。 コードスニペットが機能するために適切なモジュールがロードされていると想定できます。(たとえば、JavaおよびPythonのステートメントをインポートし、C#およびC ++のステートメントを使用し、すべての言語で同等のものを使用します)コードスニペットにインポートが含まれている場合、それらをコードの先頭に移動できます。 言語でコードを実行するために何らかの種類のメソッド本体(public static void main(String[] args)Java、static int Main(string[] args)C#など)にする必要がある場合、適切なメソッドでコードをラップできます。ただし、そのメインメソッドの内容は変更しないでください。 実行される変数/メソッド/関数/クラスの名前変更の明示的なリストを提供する必要があります。 スニペットのスニペットを取得することはできません(投稿からコードブロックを取得する場合は、全体を取得することを意味します)。このチャレンジを開始する前に投稿されたスニペットを使用する必要があります。 人気コンテストなので、多くの賛成票が勝ちます! 締め切り 8月の終わり頃に投票数が最も多い投稿を受け入れます。6。

12
FizzBu​​zz風の文字列マッチャー
次のような文字列があるとしましょう: abaabbbbbaabba 指定した文字が入力文字列に表示される回数をカウントしますが、その文字が連続して表示されるのは1回のみです。たとえば、文字がの場合a、 abaabbbbbaabba ^ x x ^ 合計は2になります(が2回連続しaaてa表示されるため、「s」はカウントされません)。 これはFizzBu​​zzとどのように関連していますか? 文字が連続して3回(または3の倍数)、または連続して5回(または5の倍数)出現する場合、代わりにカウンターがデクリメントされます。3 回と 5回の両方の倍数である場合、カウンターはまだインクリメントされます。文字が1行に1回しか表示されない場合もカウンターがインクリメントされ、文字が他の行に何度も表示される場合は無視されることに注意してください(上記の状況を除く)。 要約すると、一致する文字列がの場合a、 input counter (explanation) a 1 (single occurence) aaa -1(multiple of 3) aaaaa -1(multiple of 5) aaaaaaaaaaaaaaa 1 (multiple of 15) aa 0 (none of the above) aba 2 (two single instances) aaba 1 (one single occurence(+1) …
25 code-golf  string 

12
絵文字の表情認識
絵文字を入力として受け入れ、絵文字が幸せか悲しいかを出力するプログラムを作成します。 プログラムは文字列を入力またはパラメータとして受け入れ、入力が幸せな絵文字リストにある場合は文字列「happy」を表示し、入力が悲しい顔文字リストにある場合は「悲しい」を表示する必要があります。 入力は常に有効な(幸せまたは悲しい)絵文字であり、スペースやタブはありません。 以下は、スペースで区切られた幸せな顔文字のリストです。 :-) :) :D :o) :] :3 :c) :> =] 8) =) :} :^) :-D 8-D 8D x-D xD X-D XD =-D =D =-3 =3 B^D (-: (: (o: [: <: [= (8 (= {: (^: 悲しい顔文字のスペース区切りリストは次のとおりです。 >:[ :-( :( :-c :c :-< :< :-[ :[ :{ …
25 code-golf  string 

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