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

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

9
長方形の検出
0および1の複数行の文字列を取り込むプログラムまたは関数を作成します。文字列には他の文字は含まれず、文字列は常に長方形(すべての行に同じ数の文字が含まれます)で、寸法は1×1ですが、それ以外の場合は0'と1'は任意に配置できます。 あなたは、文字列は、オプションの末尾の改行を持っていると仮定して、必要に応じて、あなたは、任意の2つの異なる使用することができ、印刷可能なASCII文字の代わりに文字を0して1。 印刷または戻りtruthy値を場合、すべてのパスが接続されているの領域を両方0のと1のある文字列内の固体の長方形、他の出力falsy値。 パス接続領域の0「いずれかからのS手段0領域内の、すべての他0のだけ上方に移動することによって到達することができるが、上下、左右他方へ0の(としない、斜めに移動しない任意に移動し1、そして文字列の境界の外側に移動しない)。同じ考え方が1パス接続されたリージョンにも適用されます。 の実線の長方形は0、長方形の領域全体がで塗りつぶされてい0ないことを意味します1。同じ考えが塗りつぶされた1長方形にも当てはまります。 バイト単位の最短コードが優先されます。Tiebreakerは以前の回答です。 (ストリングはトロイダル境界条件でラップアラウンドしないことに注意してください。) 例 1)この入力文字列には、3つのパス接続領域があります(2に対して01、1に対して1 1)。00ただし、右下の領域のみが塗りつぶされた長方形であるため、出力は偽になります。 0011 0111 0100 2)この入力文字列には、4つのパス接続領域があります(両方0とに2つ1)。それらはすべて実線の長方形であるため、出力は真実です。 0011 0011 1100 3)この入力には2つのパス接続領域がありますが、そのうちの1つだけが塗りつぶされた長方形であるため、出力は偽になります。 00000000 01111110 00000000 4)この入力には1つのパス接続領域のみがあり、単純な長方形であるため、出力は真実です。 11111111 11111111 11111111 テストケース Tただ、入力文字列の手段truthy以下、F手段がfalsy。 0 T 1 T 00 T 01 T 10 T 11 T 0000000 T 1111111 T 011100100100101100110100100100101010100011100101 T 00 11 T 01 10 …

4
ナインメンズモリスのカウントミルズ
前書き Nine Mens's Morris(Millsとも呼ばれます)は、次のボードでプレイされる2人用のボードゲームです(リンクされているウィキペディアのページからの画像)。 各プレイヤーには、黒と白の色の9人の男性がいます。具体的なルールはこの課題にとって重要ではありませんが、興味があればウィキペディアのページをご覧ください。 チャレンジ 特定のボード状態を表すグリッドを入力として指定し、で合計ミルカウントmを出力し0<=m<=8ます。 同じ色の3人の男性が接続ポイントの直線の列にいるとき、工場を形成します。 b2to f2は男性ではないため、工場ではありません。またd2するd53点を接続する必要があるため工場を形成しないでしょう。 上の画像のボードには、たとえば2つのミルが含まれています。からf2にf61つ、からe3に1つe5。 入力 ボードは、上記のサンプル画像に示すように接続された24ポイントの2Dグリッドとして表されます。この例ではa-g、列にfrom 1-7を、行にfrom numberを使用していますが、24の一意の座標を次の状態のいずれかにマッピングする限り、任意の妥当な入力形式を選択できます。 空の 黒で撮影 白で撮影 具体的な表現はあなた次第で、色の「b」または「w」に制限されません。 これに加えて、入力には追加情報が含まれない場合があります。 その他の注意事項 どのような種類の値でもポイントをマップする必要はありません。入力を2D配列として取得する場合も同様です。ただし、すべてのポイントが使用されているわけではなく、それらの間の接続を考慮する必要があることに注意してください。 入力が空の場合、ゼロを出力する必要があります(空のボード->ミルなし)。 各プレイヤーには9人の男性がいるため、入力には18を超える獲得ポイントは含まれません。 入力の空のポイントを除外することができます。したがって、取得される入力ポイントのみを除外できます。 入力は任意の方法で注文できます。特定の順序に依存することはできません。 入力は常に有効であると仮定することができます。これは、各色の男性が9人を超えないこと、および各ポイントが一意になることを意味します。 ルール ソリューションで使用する入力形式を明確にします。プログラムの実行例を提供することを強くお勧めします。 機能または完全なプログラムが許可されます。 入出力のデフォルト規則。 標準の抜け穴が適用されます。 これはcode-golfなので、バイト数が最小になります。Tiebreakerは以前の提出です。 テストケース ここでの入力形式は、上の例のような座標が最初の要素であり、ポイントの状態が2番目の要素であるタプルのリストです。白で撮影されたポイントは「w」、黒で撮影されたポイントは「b」としてマークされます。他のすべてのポイントは省略され、空になります。 [( "a4"、 "w")、( "b2"、 "b")、( "b4"、 "b")、( "c4"、 "b")、( "d1"、 "w") 、( "d2"、 "w")、( "e3"、 …

12
2つの文字列をインターリーブするすべての可能な方法
最近、stackoverflowでこの質問を見ました。すばらしい質問ですが、この質問には致命的な問題が1つあります。彼らはそれを行うための最良の方法を求めています。たとえば、読みやすく、最も慣用的で、最近のものなど。彼らはそれが重要ではないことを知らないのですか?最小限のコードでそれを行う方法について尋ねる必要があります! 私はその質問がstackoverflowで高く評価されるとは思わないので、私はそれをここで尋ねることにしました。 チャレンジ 任意の2つの文字列をインターリーブするためのすべての可能な方法を生成する、最短のプログラムまたは関数を作成する必要があります。たとえば、2つの文字列が'ab'との'cd'場合、出力は次のとおりです。 ['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab'] ご覧のとおり、aは常にの前bにあり、c常にの前にありdます。 IOは任意の合理的な形式にすることができます。このpythonコードを使用して、出力を確認してください。(クレジット:JeD) def shuffle(s,t): if s=="": return [t] elif t=="": return [s] else: leftShuffle=[s[0]+val for val in shuffle(s[1:],t)] rightShuffle=[t[0]+val for val in shuffle(s,t[1:])] leftShuffle.extend(rightShuffle) return leftShuffle サンプルIO: shuffle("$", "1234"): ['$1234', '1$234', '12$34', '123$4', '1234$'] shuffle("az", "by"): ['azby', 'abzy', 'abyz', 'bazy', …

14
1の最大長方形を見つける
バックグラウンド 土地を購入して、その上に家を建てたいです。私の家は長方形で、できるだけ大きくなければなりません。しかし、利用可能なプロットには、私が構築できない岩の多いエリアがたくさんあり、プロットに潜在的な家を当てるのに苦労しています。私にプロットを分析するプログラムを書いてほしい。 入出力 入力は、妥当な形式の、少なくとも1×1サイズの長方形の2Dビット配列です。配列は土地のプロットを表します。1sは家を建てることができる「良い」エリアであり、0sは家を建てることができない「岩だらけの」エリアです。 出力は1、入力配列内のsの塗りつぶされた長方形の最大領域になります。それは、私がプロット上で構築できる最大の家の面積を表しています。1入力にs がない場合、出力はであることに注意してください0。 例 入力を検討する 101 011 111 1s の最大の長方形は、右下隅の2×2の長方形です。これは、正しい出力がであることを意味します4。 ルールとスコアリング 完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース 0 -> 0 1 -> 1 00 00 -> 0 01 10 -> 1 01 11 -> 2 111 010 111 -> 3 101 011 111 -> 4 0111 1110 1100 -> 4 1111111 …

4
小さな言語は小さな通訳に値する
これは非常に簡単な言語定義です。 A Variable is any string that does not contain ^, <, >, !, or ? The empty string is a valid variable identifier The value of every variable starts at 0. A Statement is one of (var is a Variable, P is a Program): var^ -> changes var to …

30
ILDの合計を計算する
入力: 整数 出力: 入力自体の合計+入力の長さ+入力の個々の数字。 nr + nr-length + {sum of digits} = output 例: 入力:99 出力:99(nr)+ 2(nr-length)+ (9 + 9)(数字)→119 入力:123 出力:123 + 3 + (1 + 2 + 3)→132 チャレンジルール: 入力には、特別に解決される負の入力を含めることもできます。-/マイナス記号でもある+1長さのために、第一の部分ですdigit。 例えば: 入力:-123 出力:-123 + 4 + (-1 + 2 + 3)→-115 入力も出力も(32ビット)整数の範囲外になると想定できます。 一般的なルール: これはcode-golfであるため、バイト単位の最短回答が優先されます。 コードゴルフ言語では、コードゴルフ以外の言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを持つ関数/メソッドを使用できます。あなたの電話。 …

5
JavaScriptでアルファベットを生成する
私はこれを行うためのより良い方法はないと確信していますが、尋ねることを傷つけることはできないと考えました。 入力するのはうんざりですa='abcdefghijklmnopqrstuvwxyz'。 クールな言語が持っているRange('a'..'z')か類似 できるだけ短いJSを考え出すにはどうすればよいですか? for(i=97,a='';i<123;){a+=String.fromCharCode(i++)} アルファベットよりも長いですが、どこかでめちゃくちゃにしないことを保証します。 私は、50文字未満でazを生成する厄介なビットシフトの方法があることを望んでいます。 私はいじりました i=97;Array(26).map(x=>String.fromChar....i++ しかし、それは私が参加したときまでずっとずっと長く、その後使用可能になるように配列(26)を分割しました 編集:私はそれを得た [...Array(26)].reduce(a=>a+String.fromCharCode(i++),'',i=97) 60バイト

4
パーティションの逆数
数n> 77が与えられた場合、セットの合計がnに等しく、セットの逆数の合計が1になるように、明確な正の整数のセットを見つけるプログラムまたは関数を記述します。 80の例: 80 = 2 + 4 + 10 + 15 + 21 + 28⟶1/2 + 1/4 + 1/10 + 1/15 + 1/21 + 1/28 = 1 プログラムまたは関数は、(理論的には)n <2 32で動作する必要があり、浮動小数点の丸め誤差は許されません。n> 77のすべてのソリューションが存在することに注意してください。 バイト単位の最短コードが優先されます。 ボーナスインセンティブがあります。任意のnで機能し、log(n)を実行する最小のソリューションに賞金を授与します。nが小さい場合、高速である必要があります(私の判断で決定されます)。はい、これは可能です。

18
Repdigit Base Finding
ぞろ目は、同じ数字を繰り返すことによってのみ書き込むことができる自然数です。たとえば、3回繰り返される777数字のみで構成されるため、repdigit 7です。 ただし、これは単に10進数(10進数)に限定されません。 (M n = 2 n -1の形式の)すべてのメルセンヌ数は、バイナリ(基数2)で書かれた場合、repdigitです。 単項(基数1)で記述されている場合、すべての数字は簡単にrepdigitです。 すべての数値nは11、基本的にrepdigitとして簡単に記述できますn-1(たとえば、1716進数(16進数)で記述されている場合は11、32進数(2 進数)で記述されている場合も同様です11)。 ここでの課題は、入力番号がrepdigitである可能性のある他のベースを見つけることです。 入力 x > 3任意の便利な形式の正の整数。 出力 正の整数bと(x-1) > b > 1の表現ここでxベースではbぞろ目です。 そのようなものbが存在しない場合、出力0または何らかの偽の値。 そのようなものbが複数存在する場合、それらのいずれかまたはすべてを出力できます。 ルール (x-1) > b > 1制限は、単項または「減算つ」塩基に些細な変換を防止するためです。出力数は、単項または任意の便利な塩基で書くことができるが、基部自体は些細な変換のいずれかであってはなりません。 入出力は、任意の適切な方法で行うことができます。 標準的な抜け穴の制限が適用されます。 例 In --> Out 11 --> 0 (or other falsey value) 23 --> 0 (or other falsey …

1
整数を分離する
前書き トポロジーとして知られる数学の分野では、分離公理と呼ばれるものがあります。直感的に、のセットXとサブセットのコレクションがありX、これらをプロパティと考えることができます。Xプロパティに基づいてすべてのアイテムを区別できる場合、システムは十分に分離されています。分離公理はこの考えを形式化します。この課題でのタスクは、指定された3つの分離公理Xとプロパティのリストを確認することです。 入力 入力は整数n ≥ 2であり、整数のリストのリストTです。の整数はTから描画されX = [0, 1, ..., n-1]ます。のリストはT空でソートされていない場合がありますが、重複は含まれません。 出力 出力は4つの文字列の1つであり、3つの分離公理によって決定され、それぞれが最後のものよりも強力です。他の公理もありますが、簡単にするためにこれらを使用します。 すべてのdistinct xおよびyinについてX、Tそのうちの1つだけを含むリストが存在するとします。次にX、公理T0をT満たします。 すべての明確なためと仮定xし、yでX、そこに二つのリストが存在してT含まれているの一つ、xではなくy、その他に含まれていyますがありませんx。次にX、公理T1をT満たします。 上記の2つのリストにも共通の要素が含まれていないとします。次にX、公理T2をT満たします。 あなたの出力は次のいずれかであるT2、T1、T0またはTS、(保持している上記の条件のどれに応じて、TSそれらの手段のどれも行いません)。T2はT1よりも強く、T1はT0よりも強いことに注意してください。常に可能な限り強い公理を出力する必要があります。 ルールとスコアリング 完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース 2 [] -> TS 2 [[],[1]] -> T0 2 [[0],[1]] -> T2 3 [[0],[0,1,2],[1,2]] -> TS 3 [[],[0],[0,1],[2]] -> T0 3 [[0],[0,1],[2,1],[0,1,2]] -> T0 3 [[0],[0,1],[2,1],[2,0]] -> T1 6 …

11
このメモの頻度は?
クイックミュージックリフレッシャー: ピアノの鍵盤は88音で構成されています。各オクターブには、12の音符がC, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭ありBます。「C」を押すたびに、パターンは1オクターブ高くなります。 メモ一意キーボードの0〜8〜第3音の数は1)任意のシャープまたはフラットを含む文字、および2)オクターブによって識別されているA0, A♯/B♭とB0。この後、オクターブ1 C1, C♯1/D♭1, D1, D♯1/E♭1, E1, F1, F♯1/G♭1, G1, G♯1/A♭1, A1, A♯1/B♭1とのフルクロマチックスケールが続きますB1。この後、オクターブ2、3、4、5、6、および7のフルクロマティックスケールが続きます。その後、最後の音符はになりC8ます。 各音は20〜4100 Hzの範囲の周波数に対応しています。A0正確27.500ヘルツから始まる、それぞれ対応するノートは、二つの、又は略1.059463の第十二回ルート前のノートです。より一般的な式は次のとおりです。 ここで、nはノートの番号で、A0は1です(詳細はこちら)。 チャレンジ メモを表す文字列を取り込み、そのメモの頻度を出力または返すプログラムまたは関数を作成します。#シャープ記号(または、Younginsのハッシュタグ)にはポンド記号を使用bし、フラット記号には小文字を使用します。すべての入力は(uppercase letter) + (optional sharp or flat) + (number)空白なしで表示されます。入力がキーボードの範囲外(A0未満またはC8を超える)であるか、無効な文字、欠落文字、または余分な文字がある場合、これは無効な入力であり、処理する必要はありません。また、E#やCbなどの奇妙な入力を取得しないと安全に想定できます。 精度 無限の精度は実際には不可能なので、真の値の1セント以内であれば何でもかまいません。余分な詳細に進むことなく、セントは2の1200のルート、つまり1.0005777895です。具体例を使用して、より明確にします。入力がA4だったとします。この音の正確な値は440 Hzです。一度セントフラットです440 / 1.0005777895 = 439.7459。一度セントシャープになると、440 * 1.0005777895 = 440.2542したがって、439.7459より大きく440.2542より小さい数値であれば、十分に正確にカウントできます。 テストケース …
21 code-golf  music 

7
増加するサイズでプログラムを生成する
この課題では、元のプログラムの2倍の長さのプログラムを出力するプログラムを作成します。出力されたプログラムは、出力の新しいプログラムは、プログラムが倍増する必要があり、その長さを。 例 私のプログラムがa次の場合: < a > aa < aa > aaaa < aaaa > aaaaaaaa ルール クインは組み込まれていません 元のプログラムは少なくとも1バイトである必要があります シーケンスは理論的には無限に機能するはずです あなたのプログラムは何(ファイル、stdio)からも読み取ることはできません スコアは元のプログラムのサイズです。

7
単純なシステムの静電ポテンシャル
物理学では、電荷のように反発し、電荷とは異なります。 距離を隔てた2つの単位電荷間のポテンシャルエネルギーdは1/d、同様の電荷と-1/d異なる電荷です。電荷システムのポテンシャルエネルギーは、電荷のすべてのペア間のポテンシャルエネルギーの合計です。 チャレンジ 文字列で表される単位電荷のシステムのポテンシャルエネルギーを決定します。 これは code-golfであるため、バイト単位の最短ソリューションが優先されます。 入力 のみからなる空でない複数行の文字列、+、-、 各ライン一定幅の改行。+と-、それぞれ+1と-1の電荷を表します。たとえば、次の文字列: + - + (左上を原点とみなす)は、(4,0)と(1、-1)に正電荷、(6,0)に負電荷を持つシステムを表します。 または、入力を行のリストとして取得することもできます。 出力 電荷システムのポテンシャルエネルギーを表す符号付き実数。出力は、4つの有効数字または10 -4のうち、どちらか緩い方に修正する必要があります。 テストケース: - 出力する必要があります0。反発または引き付ける電荷のペアはなく、空白は何も変更しません。 + - 料金は2つのみです。それらは垂直方向に1単位、水平方向に2単位離れているため、距離はsqrt(5)です。出力は-1 / sqrt(5)=になり-0.447213595ます。 + - - + 与える必要があります-2.001930531。 - -- -+ - - -+-++-+ +-- + +-- + ++-++ - ---++-+-+- -+- - +- -- - -++-+ --+ …

1
一般的なGame of Lifeパターンを数える
ここでのタスクは.rle、ファイル名が(STDINまたはコマンドライン引数として)提供されているGolly またはプレーンテキストファイル(選択)から読み取り、そこにエンコードされたグリッド内の共通パターンを識別してカウントすることです。 または、代わりにSTDIN経由でファイルの内容を直接提供することもできます。 あなたのプログラムは少なくとも15の最も一般的な厳密な静物と5つの最も一般的な発振器とグライダーを特定し、区別できるべきです。 グライダーの4つの位相すべてと同様に、これらのオシレーターのすべての位相を認識する必要があります。 各パターンの最終カウントを含むリストを出力し、各パターンの名前と数量を別々の行に出力する必要があります。プログラムは、これらのパターンのすべてまたは少なくとも1つが見つかったパターンのみを出力リストに含めることができます。 カウントされる他のパターンの一部であるパターンはカウントされません。(たとえば、ビーコンの8セルフェーズは2ブロックとしてカウントされるべきではなく、船のタイも2隻としてカウントされるべきではありません) 入力がすでに安定しており、前述のセットにないパターンが含まれていないことを想定できます。入力グリッドが1024x1024ボックス内に収まると仮定することもできます。 これはcode-golfなので、最短のプログラムが優先されます。 RLEファイル形式の説明 RLEファイルには、ランレングスでエンコードされたライフグリッドが含まれています。で始まる行はすべて#コメントであり、無視する必要があります。 最初の空ではなく、コメントではない行はの形式x=<width>,y=<height>,rule=<rule>です。このタスクの目的上、ルールは常にになりますB3/S23。この行を処理する前に削除する必要があるスペースを含めることができます(もちろん、この行を処理する必要はまったくありません。) 最初の行の後の非コメント行は、単一の文字列として扱われるべきです。これは、小数点以下の数字、文字で構成されなければならない$、bとo、改行、および数字で終了しません。改行は無視されますが、改行は数字列に割り込まないと想定できます。 これは単一で終えられるかもしれません!。 b死んだセル、o生きているセル、$行の終わりを表します。10進数は、次の記号が何度も繰り返されるものとして扱われることを示します。 平文パターンエンコーディング もう1つのオプションは、ここで説明する別のプレーンテキスト形式でパターンを読み取ることです。このエンコーディングでは、オフセルはハイフンで表され、オンセルは大文字のOで表され、改行で行が区切られます。 非コメント行はすべて、ハイフンで同じ長さにパディングされると想定できます。 で始まる行!はコメントであり、無視されます。 いくつかのテストケース RLE: #This is a comment x = 35, y = 16, rule = B3/S23 bo$2o$obo5$22bo$22bo$22bo2$18b3o3b3o2$22bo$22bo10b2o$22bo10b2o! 平文: !This is a comment -O--------------------------------- OO--------------------------------- O-O-------------------------------- ----------------------------------- ----------------------------------- ----------------------------------- ----------------------------------- ----------------------O------------ ----------------------O------------ ----------------------O------------ …

2
多項式のシンボリック統合
与えられた文字列に不定積分を適用します。使用するルールは、次のように定義されます。 ∫cx^(n)dx =(c /(n + 1))x ^(n + 1)+ C、n≠-1 c、C、およびnはすべて定数です。 仕様: 多項式を可能な機能のいずれかと統合できる必要があります。 係数、場合によっては形式の分数(numerator/denominator)。 eおよびπが定数であり、それらを使用すると、分数またはそれらを含む式を形成できることを認識します((e/denominator)または(numerator/e)などの分数、または指数の場合はx^(e+1)) これら2つの特別な定数は別として、すべての係数は合理的な実数になります。 形式の指数、場合によっては分数 x^(exponent) それらを含むeまたはπその中の式は、それ自体は別として、指数ではありません。(のようなものを統合する必要はありませんが、統合x^(e+1)するかもしれませんx^(e)) x以外の1文字の変数を使用できます(つまりf) これは、ASCII範囲65〜90および97〜122のみです。 チェーンルールを使用したり、統合したりする必要はありませんx^(-1)。 出力にはパディング(用語間の分離、つまりx^2 + x + C。 上記の機能と統合する方法が不明な場合、プログラムは出力する必要があります"Cannot integrate "+input。 完全なプログラムでなければなりません。 ボーナス: マークダウン用にフォーマットされた「きれいな」指数を印刷する場合は、-10%(代わりにx^2、x<sup>2</sup>)。 方程式を印刷する場合は-10%(つまり∫xdx = (1/2)x^2 + C) 例: 入力: x 出力: (1/2)x^(2) + C 入力: -f^(-2) 出力: f^(-1) + …

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