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

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

15
三目並べ-XまたはO?
バックグラウンド Tic-Tac-Toeに慣れている場合は、「タスク」に進んでください(ほとんどの人はそう思います!) 三目並べは有名な二人用ゲームです。それは、2人のプレイヤーによって徐々に満たされる3x3ボードで構成されます(以下の説明)。最初のプレイヤーはキャラクターXを使用し、他のプレイヤーはを使用しますO。勝者は、水平、垂直、または斜めに3つの連続した同一の文字(XまたはO)を最初に獲得します。ボードがいっぱいになり、上記のように3人の連続キャラクターを獲得できなかった場合、ゲームは同点で終了します。プレーヤーのいずれかが合計9回未満の動きで勝った場合、ゲームの終わりに空のスポットがあるかもしれないことに注意してください(これはタイの場合には起こりえません)。 仕事 ゲームの終わりにTic-Tac-Toeボード(文字列、マトリックス、9つの順序付けられた値のフラットリスト、その他の適切な形式)が与えられたら、誰がゲームに勝つかを決定します。 入力は、一意の一貫した値で構成されますX。1つはO、もう1つは空のスポットを表します。 プログラムは、3つの異なる一貫した空でない値を出力できる必要があります。1つはX勝ち、もう1つは勝ち、もう1つOはプレイヤーが同点の場合です。 回答にこれらの値を指定してください。入力が有効なTic-Tac-Toeボードであると想定できます。 テストケース X、O、_ここで入力された値です。X wins、O winsおよびTieは出力用です。 X O X O X _ O _ X 出力:X wins。 X _ O X O _ X O X 出力:X wins。 X O X _ O X _ O _ 出力:O wins。 X O X O O …


27
パンデジタル倍増
この CMCに触発された 0より大きい正の整数を指定して、次の操作を実行します。 10桁すべての数字(1234567890)が少なくとも1回は数字に含まれている場合は、カウントを出力してプログラムを終了します それ以外の場合は、数を2倍にして繰り返し、カウントを増やします。 カウントは0から始まり、入力が2倍になった回数です。たとえば、入力が617283945の場合、1234567890には10桁すべてが含まれているため、入力を1倍にする必要があります。 これはコードゴルフなので、最短のコードが勝ちます。必要に応じて、入力を文字列として取得できます。 テストケース input => output 617283945 => 1 2 => 67 66833 => 44 1234567890 => 0 100 => 51 42 => 55

2
全方向に展開
入力: 文字列 出力: 1)まず、正方形の長さ(つまり、1、4、9、16、25、36など)が残るまで、入力文字列の末尾の文字を削除します。 したがって、abcdefghijklmnopqrstuvwxyz(長さ26)はabcdefghijklmnopqrstuvwxy(長さ25)。 2)次に、これを正方形に、一度に1行ずつ、左から右に配置します。 abcde fghij klmno pqrst uvwxy 3)次のように4方向すべてに折ります(外側に折りたたまれた「ブロック」に展開する内側の文字がなくなるまで展開を続けます)。 m qrs l n ghi abcde ihgf jihg mn lk on lm srqp tsrq uvwxy qrs l n ghi m 外側に折りたたむと、基本的にこのようにミラーリングされます(これらの例の「インデックス」を表す明確化として数字が追加されています)。 左側を広げると: 123 to: 321 123 fghij ihgf j 右側を折り畳むとき: 123 to: 123 321 fghij f jihg 上に折り畳むとき: …

8
最短の一意のサブリストを見つける
リストのリストが与えられた場合、正確に1つのリストの連続したサブリストである最短リストを見つけます。 例えば [[1,2,3], [1,2,3,4], [2,4,5,6], [1,2,4,5,6]] 最短の連続サブリストは[3,4]、2番目のリストにのみ表示されるためです。 一意の連続したサブリストがない場合(これには少なくとも1つの重複エントリが必要です)、空のリストを出力します。ここに例があります [[1,2,3], [1,2,3], [1,2]] 最小サイズの連続したサブリストが複数ある場合、それらのいずれかまたはすべてを含むリストを出力できます。たとえば、入力が [[1,2,3],[2],[1],[3]] あなたは、出力のいずれかの可能性[1,2]、[2,3]または[[1,2],[2,3]]。後者のオプションを選択した場合、ソリューションが1つしかない場合にシングルトンリストを出力できます。 出力は、他のリストに表示されない限り、同じリストで複数回発生する場合があります。例えば [[1,2,1,2],[2,1]] は、2つの異なる方法で最初のリストのサブリストであるにもかかわらず、最初のリストのサブリストであり、2番目のリストではない[1,2]ため[1,2]、出力する必要があります。 入力には、そのタイプが100を超える値、つまりブール値を持たない限り、任意のタイプを含むリストのリストを使用できます。 これはコードゴルフなので、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。 テストケース [[1,1]] : [1] [[1],[1]] : [] [[1,1],[1]] : [1,1]

11
大文字と小文字の一致検索
3つの入力、テキストの文字列T、置換する文字列、F; そして、それらを置き換える文字列R。Tと同じ(大文字と小文字を区別しない)文字を持つの各部分文字列について、の文字でF置き換えますR。ただし、元のテキストと同じ大文字小文字を使用してください。 より多くの文字が含まれているR場合F、余分な文字は大文字と小文字を区別する必要がありRます。に数字または記号がFある場合、対応する文字はRの大文字小文字を保持する必要がありRます。Fに表示されるとは限りませんT。 すべてのテキストが印刷可能なASCII範囲にあると想定できます。 例 "Text input", "text", "test" -> "Test input" "tHiS Is a PiEcE oF tExT", "is", "abcde" -> "tHaBcde Abcde a PiEcE oF tExT" "The birch canoe slid on the smooth planks", "o", " OH MY " -> "The birch can OH MY e slid OH MY …
14 code-golf  string  code-golf  string  ascii-art  alphabet  code-golf  number  sequence  counting  code-golf  sequence  counting  code-golf  quine  source-layout  code-golf  string  code-golf  decision-problem  game  code-golf  string  quine  source-layout  subsequence  code-golf  quine  code-golf  array-manipulation  integer  code-golf  ascii-art  code-golf  sequence  integer  code-golf  kolmogorov-complexity  code-golf  array-manipulation  integer  code-golf  number  array-manipulation  integer  code-golf  string  number  integer  code-golf  string  ascii-art  code-challenge  test-battery  expression-building  source-layout  printable-ascii  code-bowling  code-golf  number  code-golf  number  string  binary  code-golf  matrix  conversion  code-golf  number  arithmetic 

28
携帯電話を受け取ります!振動している!
あなたは最近新しい電話を手に入れましたが、それが振動する方法があまり好きではないので、独自の振動パターンを作成したいと決めました。だから、あなたはあなたがキーワードを使用するプログラムを書いてlong、shortそしてpauseこれらのキーワードに応じてお使いの携帯電話を振動させるために。 仕事 文字列を受け取り、小さなプログラムを作成しlong、shortし、pause振動、電話の音声音を表す別の文字列を出力します。Rrrr - Rr long音はRrrr short音ですRr (ケースの問題) pauseはダッシュです- すべての音は周囲のスペースとダッシュで区切られています' - ' テストケース 入力: long long short long short 出力:Rrrr - Rrrr - Rr - Rrrr - Rr 入力: long long long short short short 出力:Rrrr - Rrrr - Rrrr - Rr - Rr - Rr 入力: short short short …
14 code-golf  string 

18
省略記号を複数形にする方法は?
明らかに省略です。 チャットメッセージに触発された。 あなたの挑戦 リスト、スペース、またはコンマで区切られた単語の文字列を指定すると、省略記号がそれらを認識します。 単語を省略記号化するには: 単語から始めます。 元の単語の最初の文字を最後に追加します。 元の単語の最後の2文字を末尾に追加します。 元の単語の最後から2番目の文字を最後に追加します。 元の単語の最初の文字を最後に追加します。 元の単語の最後の文字を最後に追加します。 手順5と6を1回繰り返します。 完了です! あなたは仮定することができます: 入力単語は英数字のみです 入力と出力はスペースで区切られた文字列またはリストにすることができます 入力には単語のみが含まれます 言葉は少なくとも2文字の長さになります 入力は正規表現と一致します /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i 異なる入力形式と出力形式を使用できます もっと来て... テストケース: ellipsis -> ellipsisessieses goat -> goatgttagtgt covfefe -> covfefeceefcece programmer5000 -> programmer5000p000p0p0 up vote down goat -> upuppuupup voteveetveve downdnnwdndn goatgttagtgt it is golf yo -> …
14 code-golf  string 

3
トロリー問題を解く
哲学者はトロリー問題を長い間熟考してきた。残念ながら、この問題を解決した人はいません。幸運なことに、プログラマーとしてコンピューターを使用して問題を解決できます! 入力 プログラムは、(より多くても1つのエッジで入力として有向グラフを(有限の)を取るxのyいずれかのために、xおよびy)、指定されたノードと、各エッジに取り付けられた非負の整数(そのトラックに関連付けられた人々の数を表します) 。さらに、すべてのノードには少なくとも1つの出口エッジがあります。 トロリーは指定されたノードで開始します。各ターン、トロリーがnodeにあるx場合、功利主義者はedgeを選択します(x,y)。その端の人々は死に、トロリーは今や端にいyます。このプロセスは永遠に続きます。 死ぬのは一度しかできないので、端(x,y)にn人が縛られていて、トロリーがその上を100回走ったとしても、n死に至るだけです。 出力 功利主義者は、死ぬ人の数を最小限にするような方法で彼の選択をします(有限の人しかいないので、それは有限であることが保証されます)。プログラムはこの番号を出力します。 入力フォーマット 任意の合理的な方法で入力グラフを取得できます。たとえば、マトリックスとしてそれを取り、指定されたノードを0とラベル付けされたノードとしてカウントできますx1,y1,n1;x2,y2,n2;...。または、のようなものを使用することもできます。たとえば0,a,0;a,b,5;a,c,1;b,b,0;c,c,0、標準的なトロリーの問題を表すために(最後にループがある場合)。 テストケース 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0 -> 1(0からa、aからc(1人を殺す)に移動してから、トロリーをcからcにループし続けます)。 0,0,1;0,a,5;a,a,0 -> 1(0から0に進み、永遠に1人以上走る)、 0,a,5;0,b,1;a,a,1;b,b,6 -> 6(0-> a-> a-> a-> a-> ...(bへ行く欲張りな解は間違っていることに注意してください) 0,a,1;0,b,5;a,b,1;b,a,1 -> 3(0-> a-> b-> a-> b-> ...) 0,a,1;0,b,1;a,a,0;b,b,0 -> 1(実利主義者が取る可能性のある2つの異なるオプションがあり、どちらも1人だけを殺すことに注意してください) これはcode-golfなので、最短の答えが勝ちです!幸運を。 注:病気のループデループはなく、マルチトラックドリフトは禁止されています。また、私はこの問題をアシモフの3つの法則(/ s)の観点から考えることを好みますが、ピーターテイラーはサンドボックスで、この問題は重みが最小のrho(ループ自体に戻るパス)を見つけることと数学的に同等であると述べています。

12
n番目のアーロン数を見つける
バックグラウンド ルース=アーロン・ペアは、連続的な正の整数のペアであるnとn+1、各整数の素因数の合計は(計数素因数を繰り返す)等しくなるようにします。たとえば、(714,715)は、、およびであるため714=2*3*7*17、ルースとアーロンのペアです。ルースとアーロンのペアの名前は、1935年5月25日から1974年4月8日までハンクアーロンがホームランを打ったまでの世界記録としてのベーブルースのキャリアホームラン合計を参照して、カールポメランスによって選ばれました。このNumberphileビデオで、これらの数字の魅力的な歴史について詳しく知ることができます。715=5*11*132+3+7+17=5+11+13=29714715 ゴール 正の整数を指定しnてnthアーロン数を出力する完全なプログラムまたは関数を記述します。ここで、nth数はnthルース-アーロンペアの大きい整数に定義されます。したがってn番目アロンの数でa(n)+1あり、a(n)あるnOEISシーケンスにおける番目用語A039752は。 テストケース 最初のいくつかのアーロン数は 6,9,16,78,126,715,949,1331,1521,1863,2492,3249,4186,4192,5406,5561,5960,6868,8281,8464,10648,12352,14588,16933,17081,18491,20451,24896,26643,26650,28449,28810,33020,37829,37882,41262,42625,43216 ルール 標準的な抜け穴は禁止されています。 入力と出力は、任意の便利な形式にすることができます。 これはcode-golfで、最短の回答(バイト単位)が勝ちです。

12
prepend、append-Sequence
仕事 prepend、append-Sequenceは、このように再帰的に定義されます a(1)= 1 nが偶数の場合、a(n)= a(n-1).n nが奇数の場合、a(n)= na(n-1) どこ 。整数の連結を表します。 最初のいくつかの用語は次のとおりです。1,12,312,3124,53124,531246,7531246,...これはA053064です。 タスクは、整数a> 0が与えられてnを返すため、prepend、append-Sequence のn番目の要素はaに等しく、そのようなnが存在しない場合は0、負の数、エラー出力などを返します。 ルール 入力は、整数、文字列、文字/数字のリストなどとして取得できます。 出力はSTDOUTに出力するか、返すことができます(整数、文字列などは問題ありません) 入力が無効で、そのようなnが存在しない場合、プログラムは正の整数を返す以外の処理を実行できます(例:永久ループ、0を返すなど)。 0インデックスを使用することもできますが、nが存在しない場合の出力は0にできません テストケース 1 -> 1 12 -> 2 21 -> 0 123 -> 0 312 -> 3 213 -> 0 211917151311975312468101214161820 -> 21 2119171513119753102468101214161820 -> 0 333129272523211917151311975312468101214161820222426283031 -> 0 999795939189878583817977757371696765636159575553514947454341393735333129272523211917151311975312468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100 -> 100

23
行列ベクトルを計算する
少なくとも2つの要素の整数配列を指定して、配列のMatrix-Vector(以下で定義)を出力します。 Matrix-Vectorを計算するには、最初nにsize - input配列を回転させて、サイズの行列を作成しますn x n。配列の最初の要素は主対角線に続きます。これにより、マトリックス部分が形成されます。ベクトルの場合、入力配列を垂直に反転します。次に、通常の行列乗算を実行します。出力ベクトルは結果です。 例えば、 a = [1, 2, 3] まず、配列を右に2回回転して、とを取得[3, 1, 2]し[2, 3, 1]、次にそれらをスタックして3x3行列を形成します [[1, 2, 3] [3, 1, 2] [2, 3, 1]] 次に、配列を垂直に反転させてベクトルを形成します [[1, 2, 3] [[1] [3, 1, 2] x [2] [2, 3, 1]] [3]] 通常の行列乗算を実行する [[1, 2, 3] [[1] [[1+4+9] [[14] [3, 1, 2] …

11
文字列の平方根を取る
動機 で、この挑戦あなたのタスクは、2つの文字列を乗算した、これは当然の文字列の平方根を取るための方法を紹介します。 どのように機能しますか? 文字列(たとえばpub)を指定すると、最初に行う必要があるのは、各文字のASCIIコードを決定することです。 "pub" -> [112, 117, 98] 次に、各値を[0..94]減算してこれらのコードを範囲にマッピングし32ます。 [112, 117, 98] -> [80, 85, 66] ここで、各値のルートモジュロを見つける必要があります95(たとえば40*40 % 95 = 80、を選択することもできます55)。 [80, 85, 66] -> [40, 35, 16] そして最後に、範囲にマッピング[32..126]し直して、文字列に変換します。 [40, 35, 16] -> [72, 67, 48] -> "HC0" 確かに"HC0" ⊗ "HC0" = "pub"、ここで他の課題からのソリューションで検証できるように。 モジュラー演算に精通している人は、おそらく平方根モジュロ95が常に存在するとは限らないことに気付いたでしょう2。たとえば、にはルートがありません。そのような場合、文字列の平方根が定義されておらず、プログラム/関数がクラッシュしたり、無限にループしたりする可能性があります。 便宜上、平方根を持つ文字のリストを示します(最初の文字はスペースです): !$%&)+03489:>CDGLMQVW]`bjlpqu ルール あなたは、引数として文字列(または文字のリスト)を受け取り、返すプログラム/機能書きます任意のそれが存在する場合は平方根を 入力には常に平方根があると仮定できます …

8
八角形の単語を作る
先週の木曜日のユーザー@SpookyGengarは、Squared Wordsの作成についての彼/彼女の最初の挑戦を喜んでくれました。辺の数を2倍にしたらどうなりますか? チャレンジ 次の例のように、必要な妥当な形式(string、char配列...)で文字列を入力として受け取り、入力の八角形表現(任意の妥当な形式:string、stringsのリスト、char行列...)を出力します。 Input: golf Output: golf o l l o f g l o o l g f o l l o flog Input: HelloWorld Output: HelloWorld e l l r l o o W W o o l r l l e d H l e r …
14 code-golf  string 

30
ソート後に配列のインデックスを取得します
今日の課題は、リストlを取得し、ソートさlれた各連続要素がl現れる位置を与えるプログラムまたは関数を作成することです。 つまり、最小値のインデックスを出力し、次に2番目に小さい値のインデックスを出力します。 入力配列には正の整数のみが含まれ、少なくとも1つの要素が含まれると想定できます。 テストケース: Input | Output (1-indexed) [7, 4, 5] | [2, 3, 1] [1, 2, 3] | [1, 2, 3] [2, 6, 1, 9, 1, 2, 3] | [3, 5, 1, 6, 7, 2, 4] [4] | [1] 同じ値を持つ2つ以上の要素が表示される場合、それらのインデックスは最小から最大の順に並んで表示されます。 これはcode-golfで、最少バイトが勝ちます!

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