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

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

12
自動ダイヤラーをプログラムする
当時、電話の自動ダイヤラーは、ダイヤルする番号の各桁に1列のパンチカードを使用していました。列には7行ありました。最初の3行は、それぞれ番号(1,2,3)、(4,5,6)、および(7,8,9)を表しています。最後の3行は、この配置を90°回転させました:(1,4,7)、(2,5,8)、および(3,6,9)。中央の行は0に使用されました。1〜9の数字には、最初の3行に1つ、下の3行に1つの2つの穴が開けられます。ゼロでは、中央の行のみがパンチされます。レッツ・視覚化数6のためのパンチ列(.非パンチで、xパンチされ、左側のガイドだけでエンコーディングを説明することです): 123 . 456 x 789 . 0 . 147 . 258 . 369 x ダイヤルしようとしている番号を含む行を探します。6の場合、これは2行目、9行目です。これらの2つの行はパンチされ、残りの5つの行はパンチされません。すべての数字0-9のパンチパターンは次のとおりです。 0 1 2 3 4 5 6 7 8 9 123 . x x x . . . . . . 456 . . . . x x x . . . 789 . …

12
サジェクションの数
仕事 2つの正の整数nとが与えられた場合k、はn > k、n区別可能な要素のセットから区別可能な要素のセットへの射影の数を出力しkます。 定義 関数f:S→Tは、すべてのt∈Tに対してf(s)= tであるようなs∈Sがある場合、サジェクションと呼ばれます。 例 ときn=3とk=2、出力は6あるので、6からsurjections {1,2,3}には{1,2}: 1↦1, 2↦1, 3↦2 1↦1, 2↦2, 3↦1 1↦1, 2↦2, 3↦2 1↦2, 2↦1, 3↦1 1↦2, 2↦1, 3↦2 1↦2, 2↦2, 3↦1 テストケース n k output 5 3 150 8 4 40824 9 8 1451520 参照 OEIS A019538 得点 これはcode-golfです。バイト単位の最短回答が優先されます。 標準の抜け穴が適用されます。

10
以前の合成番号
シーケンス定義 a(n)次のように正の整数のシーケンスを作成します。 a(0) = 4 a(n)最初の項以外の各項は、次を満たす最小の数値です。a )a(n)は合成数、 b)a(n) > a(n-1)および c)a(n) + a(k) + 1はそれぞれの合成数です0 <= k < n。 だから私たちはで始まりa(0) = 4ます。次のエントリはでa(1)なければなりません9。それらは合成できない5か7、合成できないため、合成できない6か合成でない8ため、合成できないか、合成できないから6+4+1=11です8+4+1=13。最後に、、9+4+1=14これは複合a(1) = 9です。 次のエントリはであるa(2)必要があります。これは、両方のコンポジット10よりも大きい最小の番号だからです。910+9+1=2010+4+1=15 次のエントリについては、それらは複合ではないため両方11と13も出ています。複合ではない12ため12+4+1=17です。複合ではない14ため14+4+1=19です。したがって、15のでシーケンスの次の用語である15複合材であり15+4+1=20、15+9+1=25及び15+10+1=26従って、全て各複合ありますa(3) = 15。 このシーケンスの最初の30の用語は次のとおりです。 4, 9, 10, 15, 16, 22, 28, 34, 35, 39, 40, 46, 52, 58, 64, 70, 75, 76, 82, 88, 94, …

6
括弧でくくられた中置に対する修正
Quylthulgは、Chris Presseyによる言語で、panfixと呼ばれるものを使用して中置表記法の問題を解決しようとします。 postfixと同様に、panfixは、デフォルトの演算子の優先順位をオーバーライドするために、括弧などの不可解な仕掛けを展開する必要はありません。同時に、パンフィックスは、インフィックスと同じ順序と方法で用語を指定することを可能にします。 接頭辞または接尾辞の曖昧さとともに、挿入記法の便利さをどのように取得しますか?もちろん、3つすべてを使用してください! =y=+*3*x*+1+= より正式には、letを+演算子、and aをb式にします。その後(a+b)、有効な(括弧で囲まれた)中置式であり、その式のパンフィックス表現はです+a+b+。ここで、並置は連結を表します。 あなたの目標は、パンフィックス文字列を取得し、それを完全に括弧で囲まれたインフィックスに変換することです: (y=((3*x)+1)) 簡単にするために、次の変更を行います。 演算子は2つの一意の文字のみで構成できます(いずれかを選択できますが、ここでは*andを使用します+)。 リテラルは1つだけで、別の個別の文字で構成されます(いずれかを選択できますが、ここではを使用します_)。 入力は整形式のパンフィックス式になります。 以下のために複雑、私たちは以下の変更を行います: 演算子は、1つだけでなく、任意の正数の文字で構成できます。 これは、文字列の残りの部分を見ることなく、演算子文字の特定の部分文字列がどのように分割されるかを必ずしも決定できないため、挑戦をより困難にします。 これは、@ user202729の好意によるチャレンジのリファレンス実装です。 テストケース format: input -> output +*+_*+_*+++_+*+_*+_*+++ -> ((_*+_)+(_+(_*+_))) **++*+***++_+_++_+*++*+***_*++*+*****_**_*_*** -> ((((_+_)+_)*++*+***_)*(_*(_*_))) ***_**_***_* -> ((_**_)*_) +_+_+ -> (_+_) *+*+++**+***+++++_*+*+++**+***+++++_*+*+++**+***+++++ -> (_*+*+++**+***+++++_) *++++*+*_*_*+*+++****+_++****+_++****++*+*+++_*+++ -> (((_*_)+*+(_++****+_))*+++_) +**+_*+_*+*_*+*_*+*_+*_+**+ -> (((_*+_)*_)+(_*(_+*_))) +**+++++_+++++_+++++*_*+*+_++++++_+++++_+++++++* -> (((_+++++_)*_)+*(_+(_+++++_))) +*+*+_+*+_+*+*_*+*_*+*+_+*+_+*+*+ -> (((_+*+_)*_)+(_*(_+*+_))) …

8
モデルニューロンのシミュレーション
アンIzhikevichニューロンは離散時間ステッピングシミュレーションで使用するために設計された生物学的ニューロンのシンプルで非常に効果的なモデルです。このゴルフチャレンジでは、このモデルを実装します。 パラメーター このモデルには、生理学的に正確なモデルの多数のパラメーターと比較して、2つの微分方程式に編成された7つの変数のみが含まれます。 vおよびuは、ニューロンの2つの状態変数です。ここで、vは、経時的な細胞電位を表す「高速」変数でuあり、特定の膜特性を表す「低速」変数です。vこれはシミュレーションの出力であるとして変数は、最も重要なものです。 a、b、c、及びdニューロンの特性を記述する定数を固定されています。目的の動作に応じて、ニューロンの種類によって定数が異なります。特に、cリセット電位は、スパイクした後に細胞が戻る膜電位です。 Iニューロンへの入力電流を表します。ネットワークシミュレーションでは、これは時間とともに変化しますが、ここではI、固定定数として扱います。 モデル このモデルには非常に単純な擬似コードがあります。最初に、の定数値を取得し、abcdそれらを使用して初期化vおよびを行いuます: v = c u = b * c 次に、シミュレーションコードを必要な回数ループします。各反復は1ミリ秒の時間を表します。 for 1..t: if v >= 30: # reset after a spike v = c u = u + d v += 0.04*v^2 + 5*v + 140 - u + I u += a …

15
推移的平等
チャレンジ プログラムには3つの入力が必要です。 変数の数である正の整数、 非負整数の順序付けられていないペアのセット。各ペアは変数間の等式を表し、 開始変数を表す正の整数、 開始変数(開始変数自体を含む)と推移的に等しいことを示すことができるすべての変数を表す、負でない整数のセットを返す必要があります。 すなわち、所与の入力においてN、EおよびS、セットを返すQ、その結果: S ∈ Q。 もしZ ∈ Qして(Y = Z) ∈ E、その後、Y ∈ Q。 もしZ ∈ Qして(Z = Y) ∈ E、その後、Y ∈ Q。 これは、グラフ理論の問題として表現することもできます。 無向グラフとグラフ内の頂点が与えられた場合、その接続されたコンポーネント内の頂点をリストします。 仕様書 0ベースまたは1ベースのインデックスを使用することを選択できます。 最初の入力は、存在する変数の数をカウントします。変数は数値として与えられます。または、この入力を受け取ることはできません。この場合、これは、インデックススキームに応じて、存在する最高の変数インデックスまたはこれよりも大きいインデックスのいずれかに等しいと見なされます。 入力が正しい形式であると仮定できます。最初の入力で指定された範囲外の変数は与えられません。たとえば、3, [1 = 2, 2 = 0], 1は有効な入力ですが、そうで4, [1 = 719, 1 = 2, 3 = 2], …

19
私のやり方で色を読む
すべてのシステムがRGBA空間で話している場合でも、システムごとに色を記述する方法が異なります。CSSに精通しているフロントエンド開発者はを好むかもしれません#RRGGBBAA。しかし、Android開発者はを好むかもしれません#AARRGGBB。AASファイル形式を処理する場合に#AABBGGRR必要です。それはわかりにくいです。おそらく、異なる色形式の間で変換できるプログラムが必要です。 入力: 入力には3つの部分が含まれます。 変換される色(例#1459AC0F:)、シャープ記号で始まり#8桁の16進数が続く文字列。 指定された色の形式(例#RRGGBBAA:)で始まり、#4つの異なるグループに属する8文字が続く文字列。各グループはRR/ GG/ BB/のいずれかAAです。 変換後の形式。 出力: 変換された形式で色を出力します テストケース: Color, OriginalFormat, TargetFormat -> Result #12345678, #RRGGBBAA, #AARRGGBB -> #78123456 #1A2B3C4D, #RRGGBBAA, #AABBGGRR -> #4D3C2B1A #DEADBEEF, #AARRGGBB, #GGBBAARR -> #BEEFDEAD 入力/出力は大文字と小文字を区別しません。受け入れ可能な方法で入力/出力できます。 ルール: これはコードゴルフで、各言語の最短(バイト単位)コードが勝ちます

11
マジックカードのトリックを見たいですか?
子供の頃に学んだ最初の魔法のカードのトリックは次のとおりです。 裏面のパターンが上下対称ではないカードを1デッキ持っています。 すべてのカードを一方向に向けて整理します。 個人に、「カードを選んで、どんなカードでも覚えて、それを返してくれ」と頼みます。 (間違った方向で)デッキに入れてください。 カードがどこにあるかわからないという錯覚を与えながら、激しくシャッフルします。 彼らのカードを驚かせる。 このトリックは明らかに少し欠乏しており、今日では本質的に光沢がありますが、良い挑戦になります。入力を与えない場合、ランダムにシャッフルされたカードのデッキを出力し、ランダムに選択されたカードの1つを反転して出力するプログラムを作成します。ただし、入力が1枚のカードが逆になっているカードのデッキである場合は、逆のカードを(正しい順序で)出力する必要があります。 カードのデッキ カードのデッキは次のように定義されます: [2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, 2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD, 2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, 2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC] カードは番号で定義され、次にスーツの最初の文字です。カードの裏は正反対で、スーツの最初の文字の後に数字が続きます。 描かれたカード たとえば、逆にランダムに選択したカードがであった場合、4 of Clubs (4C)(シャッフルせずに、明らかに)なります: [2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, 2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD, 2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, 2C,3C,C4,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC] シャッフル 次に、シャッフルした後: [2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D] これは、空の入力が与えられた場合の有効な出力です。 デッキ入力 ただし、逆に、プログラムが上記の出力を入力として受け取った場合は、出力する必要があります4C。つまり、次の入力に対して: [2H,2C,6S,4D,QH,6C,TD,8C,7H,5H,C4,3D,7S,7C,KC,QD,QC,JS,7D,6D,2S,5C,KD,3C,3S,2D,8H,KH,6H,AH,8S,JH,TS,AD,5D,9H,4H,JD,QS,4S,JC,3H,8D,TC,AS,TH,KS,AC,9C,9S,5S,9D] 反転したカードが見つかるまで繰り返し処理し、それを戻し、通常の状態に戻します。したがって、ここC4でCが数値ではないことがわかり、それをとして返し4Cます。これは正しいです。 ルール 外部ソースからデッキをロードすることはできません。 空の入力は、ランダムに1枚のカードが逆になった、ランダムにシャッフルされたデッキになります。 入力としてカードが1枚反転したカードのデッキでは、カードが反転します。 他の入力があると、爆発的なラマが未来のチューブを通ってセグウェイに乗ってしまいます。 または他の何か、それについて。 選択したカードとシャッフルの順序は、両方とも一様にランダムでなければなりません。 IEすべてのカードは、逆に選択される可能性が等しくあります。 IEのすべてのカードの組み合わせは、同じ確率で出現します。 あなたは使用することSHCDやshcdスーツのために、しかし、一貫して: 大文字のスーツ(SHCD)を選択する場合も使用する必要がありますTJQKA。 小文字のスーツ(shcd)を選択する場合も使用する必要がありますtjqka。 これはcode-golfで、勝者は最下位バイトです。

13
遺伝子交差アルゴリズムの実行
あなたの仕事は、2つの遺伝子配列と「クロスオーバーポイント」の配列を入力として受け入れ、指定されたクロスオーバーから生じる遺伝子配列を返すことです。 これが意味するのは、シーケンス[A, A, A, A, A, A, A]、および[Z, Z, Z, Z, Z, Z, Z]、およびのクロスオーバーポイントがある2とし5ます。結果のシーケンスは[A, A, Z, Z, Z, A, A]次のとおりです。 クロスヒア:VV インデックス:0 1 2 3 4 5 6 遺伝子1:AAAAAAA 遺伝子2:ZZZZZZZ 結果:AAZZZAA ^ ^ ここではわかりやすくするために文字を使用していますが、実際の課題では遺伝子に数字を使用しています。 結果は、クロスオーバーポイントに到達するまで最初のシーケンスであり、次に別のクロスオーバーポイントに到達するまで2番目のシーケンスから結果が取得され、次にクロスオーバーポイントに到達するまで最初のシーケンスから結果が取得されます... 入力: 入力は、任意の合理的な形式にすることができます。2つのシーケンスは、ポイントを2番目の引数とするペアにすることができます。3つすべては、個別の引数、単一のトリプレット、(genes 1, genes 2, cross-points)名前付きキーを持つマップ... クロスポイントは常に整然としており、常にインバウンドになります。重複するポイントはありませんが、クロスオーバーポイントのリストは空の場合があります。 遺伝子配列は常に同じ長さで、空ではありません。 インデックスは、0または1ベースにすることができます。 遺伝子は常に0〜255の範囲の数値になります。 どの引数が「genes 1」または「genes 2」であるかは関係ありません。クロスオーバーポイントがない場合、結果は完全に「遺伝子1」または「遺伝子2」のいずれかになります。 出力 出力は、あいまいでない任意の合理的な形式にすることができます。数字の配列/リスト、文字列の数字の配列、数字の区切り文字列(数字以外の文字で数字を区切る必要があります)... …

5
階乗の因数分解
今日、統計クラスで、いくつかの階乗を一緒に乗算すると単純化できることがわかりました!例えば:5! * 3! = 5! *3*2 = 5! *6 = 6! あなたの仕事: アラビア数字と感嘆符のみを含む文字列が与えられた場合、あなたの言語の最小バイト数で、ゴルフのスタイルをコード化して、可能な限り短い文字列に階乗を単純化します。 入力 アラビア数字と感嘆符のみを含む文字列。入力の階乗は200!より大きくなりません。階乗には、数ごとに複数の階乗がありません。入力は整数のリストとして取得できます。 出力 入力に同等の値を持つ、おそらく短縮された文字列。順序は重要ではありません。階乗記法は必須ですが、数字ごとに複数の階乗記号を使用する必要はありません。 テストケース In: 3!2!2! Out: 4! In 2!3!2!0! Out: 4! In: 7!2!2!7!2!2!2!2! Out: 8!8! In: 23!3!2!2! Out: 24! Also: 4!! In: 23!3!2!2!2! Out: 24!2! In: 127!2!2!2!2!2!2!2! Out: 128! In: 32!56!29!128! Out: 29!32!56!128! 幸運を祈ります

4
ポイントフリーでのタプル追加
関数を表現できる最短の方法は何ですか f(a,b)(c,d)=(a+c,b+d) ポイントフリー表記で? pointfree.ioは私たちに与えます uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+)) 少しの作業で短縮できます uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+) 76バイト。しかし、これは、そのような単純なタスクにとっては依然として非常に長く複雑です。ペアワイズ加算をより短いポイントフリー関数として表現する方法はありますか? 関数のポイントフリー宣言の意味を明確にするために、関数のポイントフリー宣言には、既存の関数と演算子を使用し、目的の関数が作成されるようにそれらを相互に適用することが含まれます。バッククォート、括弧やリテラル値([]、0、[1..3]、など)が許可されますが、キーワードは次のようにしているwhereとletはありません。これの意味は: 変数/関数を割り当てることはできません ラムダは使用できません インポートできません これは、CMCであったときの同じ質問です

7
分解をキューに入れる
この課題では、正方行列のQR分解を見つけるようにお願いします。行列AのQR分解は、A = QRである2つの行列QとRです。特に、Qが直交行列(Q T Q = QQ T = Iで、Iが乗法恒等式、Tが転置)であり、Rが上三角行列(その対角線より下のすべての値がゼロになる)。 適切な方法で正方行列を取り、任意の方法でQR分解を出力するコードを記述します。多くの行列には複数のQR分解がありますが、出力が必要なのは1つだけです。 結果のマトリックスの要素は、マトリックス内のすべてのエントリの実際の回答の小数点以下2桁以内である必要があります。 これはコードとゴルフのコンペティションなので、回答はバイト単位でスコアリングされ、バイト数が少ないほどスコアが高くなります。 テストケース これらは可能な出力のみであり、出力が有効である限り、これらすべてに一致する必要はありません。 0 0 0 1 0 0 0 0 0 0 0 0 -> 0 1 0 0 0 0 0 0 0 0 0 1 , 0 0 0 1 0 0 1 0 0 …

2
論理ゲートでのゲリマンダーリング
多数決関数は、3つのブール入力を取り、最も一般的な値を返すブール関数です。たとえば、if maj(x,y,z)が多数決関数であり、TtrueをF示し、false を示す場合: maj(T,T,T) = T maj(T,T,F) = T maj(T,F,F) = F maj(F,F,F) = F この質問は、ブール関数を多数決関数の構成として記述することに関するものです。多数決関数の5進構成の例は(x1,x2,x3,x4,x5) => maj(x1,x2,maj(x3,x4,x5))です。この関数は、これらのサンプル入力ベクトルで次の出力を返します。 (T,T,F,F,F) => maj(T,T,maj(F,F,F)) = maj(T,T,F) = T (T,F,T,T,F) => maj(T,F,maj(T,T,F)) = maj(T,F,T) = T (T,F,T,F,F) => maj(T,F,maj(T,F,F)) = maj(T,F,F) = F (F,F,F,T,T) => maj(F,F,maj(F,T,T)) = maj(F,F,T) = F 仕事 ブール値の正の整数nと長さnのベクトルのリストを入力し、可能であれば与えられたすべてのベクトルでtrueを返す多数決ゲートのツリーを出力するプログラムを作成します。この関数は、制約のリストにないベクトルに対してtrueまたはfalseを返す場合があります。 ベクトルのリストは、任意の形式で入力できます。必要に応じて、ベクトルを入力する代わりに、ベクトル内の真の位置のリストを入力できます。したがって、たとえば、[TTF,TFT,FTT]or [[T,T,F],[T,F,T],[F,T,T]]または[[1,2],[1,3],[2,3]](真の位置のリスト)はすべて問題ありません。 …

24
一致する連続ペアのないIDジェネレーター
2つの入力(m = 最小開始ID、n = IDの数)が与えられると、> = mで始まる、0から9の数字で構成されるIDの連続リストを生成します。わかりました、1233はそうではありません(隣同士に2 '3が含まれています)。 例 m = 985、n = 6の場合、以下で生成/スキップされるIDを示します ... 985 - ok, 1st 986 - ok, 2nd 987 - ok, 3rd # skip 0988 (contains '88') 989 - ok, 4th # Skip 099x (contains '99') # Skip 100x (contains '00') 1010 - ok, 5th …

8
可能な限り悪である
前書き これは、あなたがその人の邪悪な双子の役割を担っているこの挑戦のフォローアップです。悪であるため、シェアを最大化するのではなく、可能な限り不公平になり、それをあまりにも明白にしないため、次のスキームを思いつきました。 兄弟のようにできるだけ公平になりたいことを他の人に伝え、整数を等しい長さの断片に分割します。したがって、整数ごとに、適切な人数の人々を見つけて、最大のピースと最小のピースの差が最大になるようにします。 たとえば、整数6567を指定した場合、そのままにして、2つ65,67または4 つに分割できます6,5,6,7。これにより、次の最大の違いが得られます。 6567 -> max() = 0 65,67 -> max(|65-67|) = 2 6,5,6,7 -> max(|6-5|,|6-5|,|6-6|,|6-7|,|5-6|,|5-7|,|6-7|) = 2 あなたが唯一の悪になりたいので、あなたは好まない67にわたる7ため、あなたは出力のどちらかでしょう2か4。 別の(あまり特別なケースではない); 整数121131を指定すると、次のように分割できます。 121131 -> max() = 0 121,131 -> max(|121-131|) = 10 12,11,31 -> max(|12-11|,|12-31|,|11-31|) = 20 1,2,1,1,3,1 -> max(…) = 2 今回は1つの解決策しかありません。つまり3、3人で最大の違いがあるためです。 チャレンジ 整数を考えると決めるどんな最大限に悪であることの可能な方法をと報告した人々の数、これを達成するために必要なの。 ルール 入力は常に≥1 入力は、整数、数字のリスト、または文字列のいずれかです 無効な入力を処理する必要はありません …

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