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

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

10
彼らはどこから呼んでいますか?
国際電話をかける場合、電話番号の前に番号が所在する国を示すコードが付加されます。これらのコードはプレフィックスコードであり、他のコードのプレフィックスではありません。 さて、今日、あなたは電話を逃しました。そして、あなたはその電話がどこから来たのでしょうか。したがって、呼び出し元のコードを検索する必要があります。しかし、プレフィックスコードであるため、どこで終了するのかはよくわからないので、呼び出しコードを残りの番号から分離するプログラムを作成することにします。 入力 入力として、数字で構成される文字列を受け取ります0-9。最初の数桁は、以下にリストされている国の呼び出しコードの1つになります(これは、最初の数字がにならないことを意味します0)。国を呼び出すコードの後、入力の残りの部分には任意の順序でゼロ以上の数字が含まれます- 有効な電話番号であるとは限りません。プログラムは少なくとも15桁を含む入力を処理できる必要があります 出力 プログラムは、番号のプレフィックスである一意の国呼び出しコードを出力する必要があります。有効な出力は次のとおりです。 1 20 211 212 213 216 218 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 …

26
数字の文字列を単語から整数に変換します
先行ゼロを無視して、数字を単語として含む文字列を整数に変換します。 例 "four two"-> 42。 "zero zero zero one"-> 1。 仮定 提出は次のことを想定できます: 入力文字列は、スペースで区切られた数字の単語で構成されます。 すべての単語は有効で(「zero」..「nine」の範囲内)、小文字です。空の入力の動作は未定義です。 入力文字列は、常に範囲内の符号なしの数値を表しint、空の文字列ではありません。 得点 回答はバイト単位でスコアリングされ、バイト数は少ない方が良いです。

2
2つの三角形の交差点
2D平面上の4点を与えA, B, C, D、三角形OABとの交差領域の面積を計算しますOCD。ここOで、は平面の中心であり、座標は(0, 0)です。 (算術演算に関して)一定の時間の複雑さで実行されるアルゴリズムは推奨されますが、強制されません。 ルール 各ポイントは2つの実数として表され、それらのXおよびY座標を示します。 オプションで、プログラミング言語(またはプログラミング言語のライブラリ)に組み込みPoint型または同等の型がある場合、Pointオブジェクトを入力として使用できます。 入力は、以下を含むがこれらに限定されない形式で、4ポイントとして与えられます。 8つの座標のリスト。 4点のリスト。各点は任意の便利な形式で表すことができます。 2点の2つのリスト。 等 ポイントの特定の順序(反時計回りまたは時計回り)を想定することはできません ポイントOが入力として渡されると想定することはできません。言い換えれば、プログラムは外部からの入力を受け取って使用してはなりません。 すべてのポイントが異なると仮定することはできません。言い換えれば、三角形が縮退している可能性があります。そのケースも処理する必要があります(以下のテストケースを参照) 絶対的または相対的な差は、以下のサンプルテストケースの差よりも小さくなければなりません。10-3 受賞基準 これはcode-golfで、バイト単位の最短回答が勝ちです! サンプルテストケース Ax Ay Bx By Cx Cy Dx Dy area 5 1 1 3 -1 0 0 -1 0 5 1 1 3 -1 0 0 0 0 5 1 …

30
クールな無題のシーケンス
f n(k)を、各数値がn回繰り返される自然数[1、∞)の最初のk項の合計として定義しましょう。 k | 0 1 2 3 4 5 6 7 8 9 --------+------------------------------------------------- f_1(k) | 0 1 3 6 10 15 21 28 36 45 deltas | +1 +2 +3 +4 +5 +6 +7 +8 +9 --------+------------------------------------------------- f_2(k) | 0 1 2 4 6 9 12 16 20 …

9
この線はその正方形を通りますか?
以下に示すように、最初の象限(正のx軸、正のy軸、および原点を含む)を1x1グリッドに分割し、各グリッドに左下隅の座標でラベルを付けます。 各グリッドには境界と頂点が含まれていることに注意してください。数学記号を使用すると、(m、n)というラベルの付いたグリッドは正方形を表し{(x,y) | m ≤ x ≤ m+1, n ≤ y ≤ n+1}ます。 形で直線所定のax+by+c=0整数としa、b、およびc、と表されるグリッド(m,n)線は、グリッド、すなわち所与のグリッド内の任意の点がライン上にあるかどうかを通過するかどうかを出力。 a b c m n output 1 1 0 0 0 true 1 1 0 1 1 false 1 1 0 0 2 false 1 1 -3 0 1 true 1 1 -3 0 0 false …

30
一般的な先行スペースを削除する
Pythonでコーディングする場合、関数内に複数行の文字列が必要になることがあります。たとえば、 def f(): s = """\ Line 1 Line 2 Line 3""" (バックスラッシュは、先頭の改行を削除することです) sただし、実際に印刷しようとすると、 Line 1 Line 2 Line 3 それは私たちが望むものではありません!先頭の空白が多すぎます! チャレンジ 英数字、スペース、および改行のみで構成される複数行の文字列が指定されている場合、各行の先頭からすべての一般的なスペースを削除します。各行には、少なくとも1つの非スペース文字が含まれることが保証されており、末尾のスペースはありません。出力には、出力全体または個々の行の前後に関係なく、余分な空白がない場合があります(1つのオプションの末尾の改行を除く)。 入力はSTDINまたは関数の引数を介して行われ、出力はSTDOUTまたは関数の戻り値を介して行われます。複数行の文字列を字下げしたり、Pythonのようなこの正確なタスクを実行するように設計された組み込み関数を使用することはできませんtextwrap.dedent。 これはcode-golfであるため、最小バイト数のソリューションが優先されます。標準の抜け穴が適用されます。 テストケース "a" -> "a" " abc" -> "abc" " abc\n def\n ghi" -> " abc\ndef\n ghi" " a\n b\n c" -> "a\nb\nc" " a\n b\n …

4
最小のチェスプログラム
Assemblyで487バイトの2プレーヤー(人間対人間)チェスプログラムを書いたフランスのプログラマーに語ったこの最近の記事に触発されて、小さなチェスプログラムが他の言語でどのようにできるのか疑問に思いました。 詳細 プログラムは合法的なチェスの動きのみを受け入れなければなりません。 チェックの場合は最初のルールが適用されますが、チェック/チェックメイトの宣言は必要ありません(望ましい)。 記事によると、キャスリングは必要な実装ではありません。 また、passantを実装する必要はありません。 ただし、8位に達したらポーンプロモーションを許可する必要があります(単に強制的にクイーンに変換することを選択することもできます)。 ターミナルASCII、GUIなど、ボードの表示方法はユーザー次第です。 誰の番であるかを表示する必要があります。 チェスのルールはここで見つけることができます -指定されたトーナメントルール(タイミング、タッチなど)を無視し、キャスリングとパッサンは必須の実装ではないことを覚えておいてください。
19 code-golf  chess 

5
まだ解析しているRコードの最もlineい行は何ですか?
目標は、次のような1行のRコードを生成することです。 できるだけ少ない できるだけ多くの文字で(最大100文字) そして、可能な限りいです(「lyい」とは、非効率的な計算戦略、終了セミコロンなどの無関係な文字などを意味します)。 あなたの最悪の、紳士をしてください! 勝利の客観的基準 勝利の答えは、次のポイントスケールに従って判断されます(最も多くのポイントを持つ答えが勝ちます)。 0〜10(100ポイント)のシーケンスを生成します できるだけ多くの文字(N)で N = 100の場合、0ポイント N <100の場合、N-100ポイント(つまり、100未満のすべての文字でポイントを失う) N> 100の場合、2(100-N)ポイント(つまり、100を超える文字ごとに2ポイントを失う) R Infernoのネガティブな例をできるだけ多く使用する 引用例ごとに6ポイント 各例は1回のみカウントされます。これは、「炎の墓に投獄された異端者」が一度だけ投獄できるためです。したがって、コード行の2つのグローバル割り当てでは、6ポイントしか得られません。
19 code-challenge  r 

9
ハミング数
正の整数を指定すると、その数のハミング数を順番に出力します。 ルール: 入力は正の整数N ≤ 1 、000 、000n≤1、000、000n \le 1,000,000 出力はhttps://oeis.org/A051037の最初のn項である必要があります 実行時間は1分未満でなければなりません これはcode-golfです。最短のコードが勝つ

2
数論スタイルに書きます
記号を使用して数学的ステートメントを記述します。 There exists at least one non-negative integer(としてE存在する量指定子) All non-negative integers(と記述されているA、汎用数量詞) + (添加) * (乗算) = (平等) >、<(比較演算子) &(および)、|(または)、!(ない) (、)(グループ化用) 変数名 これはステートメントと同等です 有理数aが存在し、π+ e * aは有理数です。 (もちろん、π= 3.1415 ...π=3.1415...\pi =3.1415...は円周を円の直径で割った数学的定数であり、e = 2.7182 ...e=2.7182...e=2.7182...はオイラー数です) あなたの声明が実際に上記の声明と同等であることを証明しなければなりません。 明らかに、これを実行する「最短」の方法は、ステートメントを真または偽として証明し、その後、すべての偽ステートメントと同様にすべての真のステートメントが同等であるため、些細な真または偽のステートメントで答えることです。 π+ eπ+e\pi+e 得点 E A + * = > < & |そして!、それぞれのスコアに1を追加します。スコアには何も追加しない(で)ください。各変数名はスコアに1を加算します。 例:E x (A …

9
スーパーセットを計算する
ここでのタスクは簡単です。 整数セットのリストが与えられたら、セットの和集合を見つけます。つまり、元のセットのリスト内のすべての要素を含む(ただし、他の要素は含まれない)整数セットの最短リストを見つけます。例えば: [1,5] and [3,9] becomes [1,9] as it contains all of the elements in both [1,5] and [3,9] [1,3] and [5,9] stays as [1,3] and [5,9], because you don't want to include 4 セットは範囲表記を使用して表記されます:[1,4]整数を意味します1,2,3,4。セットは無制限にすることもできます:[3,]すべての整数>= 3を[,-1]意味し、すべての整数を意味します<= -1。範囲の最初の要素が2番目の要素より大きくならないことが保証されています。 文字列表記のセットを選択するか、定数の非整数を「無限」値として使用して、2要素のタプルを使用できます。2つの異なる定数を使用して、無限の上限と無限の下限を表すことができます。たとえば、Javascriptでは、すべてのテストケースで一貫して使用している限り、[3,{}]すべての整数の表記に使用できます。>= 3{} テストケース: [1,3] => [1,3] [1,] => [1,] [,9] => [,9] [,] …

7
ブラインドランダムソート
ソートアルゴリズムの非常に一般的なパターンを次に示します。 def sort(l): while not is_sorted(l): choose indices i, j assert i < j if l[i] > l[j]: l[i], l[j] = l[j], l[i] これらのアルゴリズムは、インデックスiとjがリストの状態に基づいて慎重に選択されるため、うまく機能しますl。 しかし、が表示されずl、盲目的に選択しなければならなかった場合はどうなりますか?それではリストをどれくらい速くソートできますか? あなたの課題は、の長さのみを指定して、インデックスのランダムなペアを出力する関数を書くことですl。具体的には、出力2つのインデックス、しなければならないi, j、と0 <= i < j < len(l)。関数は任意の長さのリストで機能するはずですが、長さ100のリストでスコアリングされます。 スコアは、上記のパターンに従って一様にランダムにシャッフルされたリストをソートするために必要なインデックス選択の平均数であり、インデックスは関数に従って選択されます。 長さ100の均一にランダムにシャッフルされたリストで、繰り返しのエントリなしで、1000回を超える試行のインデックス選択の平均数を取得して、提出物を採点します。 提出物が明らかに非競争的または終了しない場合、私はより少ないトライアルを実行する権利を留保します。複数の上位の提出物が計算リソースの限界でエラーの範囲内に残っている場合、さらなる計算リソースを負担できるようになるまで、以前の提出物を勝者と宣言します。 Pythonのスコアリングプログラムの例を次に示します。 import random def is_sorted(l): for x in range(len(l)-1): if l[x] > l[x+1]: return …

8
Brain-Flak Classicインタープリターを作成してください!
Brain-Flak(Brainf ** kとFlak-Overstowのクロス)は、スタックベースの難解な言語です。この課題が投稿されて以来、言語は進化し更新されましたが、この言語のこの最初のリビジョンは「brain-flak classic」として知られています。 Brain-Flakクラシックコードの文字列を取得して評価するプログラムまたは関数を作成する必要があります。また、整数の(空の可能性のある)リストを取ります。Brain-Flakクラシックプログラムへの入力があります。 言語 Brain-Flakには、「左」と「右」として知られる2つのスタックがあります。アクティブなスタックは左から始まります。空のスタックがポップまたはピークされた場合、0が返されます。変数はありません。プログラムが開始されると、各入力がアクティブスタックに順番にプッシュされます(したがって、最後の入力がスタックの一番上になります)。 Brain-Flakプログラムで有効な文字はのみ()[]{}<>であり、常にバランスをとる必要があります。無効な文字がある場合、または角かっこが一致しない場合、未定義の動作が発生します。何でも有効です。 関数には、NiladsとMonadsの 2つのタイプがあります。niladは 0の引数をとる関数です。すべてのniladsは次のとおりです。 () +1。 [] -1。 {} アクティブなスタックをポップします。 <> アクティブなスタックを切り替えます。 これらは評価されるときに連結されます。したがって、アクティブスタックの上部に「3」がある場合、このスニペットは次のとおりです。 ()(){} するために評価されます1 + 1 + active.pop()。5.に評価思われる<>0と評価されます。 モナドは1つの引数、Brain-Flakコードの塊を取ります。すべてのモナドは次のとおりです。 (n) アクティブなスタックで「n」を押します。 [n] 'n'をintおよび改行として出力します。 {foo}active.peek()!= 0の間に、fooを実行します。0¹に評価します。 <foo> fooを実行しますが、0として評価します。 これらの関数は、内部の値も返すため、 (()()()) 3を押して [()()()] 3を印刷しますが、 [(()()())] 印刷してプッシュします3。 プログラムの実行が完了すると、アクティブスタックに残っている各値が整数として出力され、間に改行が入ります。他のスタックの値は無視されます。 ルール: プログラムは、(-128、127)の範囲の数字と、少なくとも255のスタックサイズをサポートする必要があります。より大きな、素晴らしいをサポートする場合。 アンダーフロー/オーバーフローは未定義です。 サンプルIO: 空のプログラム: 入力:なし 出力:なし …

5
インタビュー:フロントナイン
インタビュー:フロントナイン これは、就職の面接の質問をプログラミングすることに触発された一連の課題の最初のものです。 潜在的な将来の上司が座っているオフィスに入ります。「さあ、座って」と彼は言う。あなたは緊張して座って、きびきびとしたプロの服装にしわがないようにします。彼はあなたの教育、以前の仕事の経験などについて多くの質問をします。あなたはほとんど正直にそれらに答え、あなた自身をより良くするためにあちこちに少し装飾を追加します。彼は前かがみになり、再び話し始めます。 「コードゴルフのことを聞いたことがありますか?」はい、あなたはゴルフのコードが好きで、あなたの自由な時間に頻繁にそれをします。「すごい。インタビューの最後の部分は技術的な試験です。一連の問題を解決するためのコードを書く必要があります...」彼はあなたに一枚の紙を渡します。あなたはすぐにそれを見ます。簡単です。なぜ彼はコードゴルフについて尋ねたのですか? 「これらの問題に対する解決策の合計サイズに基づいて採点されます。他のすべての候補者よりも低い得点が得られるなら、仕事はあなたのものです。」ああ。「ゴルフのように、18の問題があり、9の2つのセットに分かれています。お好きな言語を自由に使用して解決してください。聞いたことのあるすべての言語、 「がんばって!」 タスク タスク1:乗算表 番号を与えられたn範囲内の正の整数の入力、出力、乗算テーブルとして[1, n]。n範囲内になります[1, 12]。すべての数値は、テーブル内で左揃えにする必要があります。x左上隅に文字を使用します。 例: n=4 x 1 2 3 4 1 1 2 3 4 2 2 4 6 8 3 3 6 9 12 4 4 8 12 16 n=10 x 1 2 3 4 5 6 7 8 9 10 …

2
vimに緑色の卵とハムを入力します
スース博士の「Green Eggs and Ham」という本は、本の全編に50の異なる言葉しかないことで有名です。 あなたのタスクは、vimテキストエディタで空のファイルに適用すると、すべてのデフォルト設定で通常モードで開始されるときに、Green EggsとHamのテキスト全体を生成するキーストロークのシーケンスを作成することです。キーストロークは、操作の一部として他のファイルをロードしてはなりません。すべてのテキストはエディター内で生成する必要があります。 最終バッファは、このファイルとまったく同じように見える必要がありますが、最終的にどのモードになってもかまいません(<Esc>通常モードに戻すために最終バッファを保持する必要はありません)。 Shiftキー<C-o>を使用したり、Shift キーを使用して大文字のカウントを単一のキーストロークとして入力したりするコード化されたキーストローク。 この目標を達成するための最も少ないキーストロークのシーケンスが勝ちです。

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