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

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

4
色番号を見つける
驚いたことに、グラフの色付けに関してはまだ課題がありません! 無向グラフの場合、2つの隣接する頂点が同じ色を共有しないように、各頂点に色を付けることができます。これを達成するために必要な個別の色の最小数χは、有彩色数と呼ばれますは、グラフのます。 たとえば、次の例は、最小数の色を使用した有効な色付けを示しています。 (ウィキペディアで発見) したがって、このグラフの色数は χ= 3です。 頂点の数N <16(1から1までの番号が付けられている)が与えられたプログラムまたは関数を書く Nまで)とエッジのリストを指定して、グラフの色数を決定記述します。 入力が前処理されない限り、入力を受け取り、便利なフォーマットで出力を生成できます。つまり、文字列または配列を使用したり、文字列に便利な区切り文字を追加したり、ネストされた配列を使用したりできますが、フラット化された構造には、以下の例と同じ番号が(同じ順序で)含まれている必要があります。 組み込みのグラフ理論関連の関数(MathematicaのようなChromaticNumber)は使用できません。 グラフにループ(頂点とそれ自体を接続するエッジ)がないと仮定できます。これにより、グラフが色付け不能になります。 これはコードゴルフで、最短の回答(バイト単位)が勝ちです。 例 プログラムは、少なくともこれらすべてを妥当な時間内に解決する必要があります。(すべての入力を正しく解決する必要がありますが、大きな入力の場合は時間がかかる場合があります。) 投稿を短くするために、次の例では、単一のコンマ区切りリストでエッジを示しています。必要に応じて、代わりに改行を使用したり、便利な配列形式の入力を期待したりできます。 三角形(χ= 3) 3 1 2, 2 3, 1 3 6つの頂点の「リング」(χ= 2) 6 1 2, 2 3, 3 4, 4 5, 5 6, 6 1 5つの頂点の「リング」(χ= 3) 5 1 2, 2 3, 3 4, …

3
Codegolf:クインとアンチキン
この課題は、Can you Meta Quineに似ていますか? クインは、STDOUTで自身を生成するプログラムです。この課題は、実行時にSTDOUTでプログラムBを生成するプログラムAを生成することです。プログラムBを実行すると、STDOUTでプログラムAが生成されます。プログラムAとBは、同じ言語で作成(および実行)する必要があります。リンクされた質問はA!= Bを制約しました。それはあまりにも簡単に見えました。そのため、この質問では、AとBは次のルールを使用してアンチキンであると主張します。 プログラムAとBは、同じ文字を使用したり、空白やステートメントの区切り文字、句読点を保存したりすることはできません。 プログラムAおよびBには、それぞれ、空白でもステートメント区切り文字でも句読点文字でもない文字が少なくとも1つ含まれている必要があります。 ルール1および2の目的のために、「空白」という用語は、それ自体が解釈される(セパレータではなく)ステートメント、演算子、またはシンボルであるシンボルまたはシンボルのシーケンスを除外します。したがって、ホワイトスペース言語では、ホワイトスペースはありません。 ステートメント分離文字は、ステートメントを分離するために言語内で従来使用されている構文要素です。これには、Pythonの改行、またはJava、perlまたはCのセミコロンが含まれます。 句読点文字は、空白でもPOSIX単語文字クラスでもないASCII文字です(つまり、この目的ではアンダースコアは句読点ではありません)。つまりispunct()、trueを返しますが、そうではありません_。 実行時のプログラムAは、STDOUTでプログラム(プログラムB)を生成する必要があり、そのプログラムは、実行時にプログラムAを生成します。 プログラムAとBは同じプログラミング言語である必要があります。 使用されるプログラミング言語は、実際にはプログラミング言語でなければなりません。良いケースを別の方法で作らない限り、チューリング完全でなければなりません。 AとBの少なくとも1つは、言語内で少なくとも1つのステートメントを実行する必要があります。 これはコードゴルフであるため、最短回答が勝ち、スコアはプログラムAの長さ(バイト)です(つまり、プログラムBの長さは関係ありません)。
13 code-golf  quine 

3
アイスパズルジェネレーターとソルバーを構築する
で単収縮プレイズポケモン、最も厄介な障害の一つ1缶の顔はあなたがいずれかの壁や岩にヒットするまで一方向にすべての方法をスライドさせて、ある場所から別の場所へ移動しなければならない氷のパズルは、あります。 あなたの仕事は、ランダムで難しい氷のパズルを生成するプログラムを構築することです。 あなたのプログラムは、3つの数字を受け入れるM、NとP、入力として(と10 <= M <= 30、15 <= N <= 40そして、0 <= P < 65536): 12 18 出力されます: 成るグリッドとMN.O、それぞれ氷と玉石を表します。 パズルの入力元を表す位置マーカー。この位置マーカーは、文字で構成されL、R、T、またはB、左、右、上、下を表すから入力されるその側(左または上から)の位置を示す数字が続きます。 パズルが終了する場所を表す同様の位置マーカー。 最短の配列からなるパズルの解決策、L、R、U、およびDそれぞれ。 出力例: ..O...O........... ............O..... ..O............... .......O.......... .................. ...........O...... O..O...........O.. ..........O....... ..O..........O.... ........O......... O....O.........O.. ............O..... R 4 B 5 LDLDRULD (Note that this output is actually invalid because it is …
13 code-golf 

5
コンパスの32点のいずれかに度を変換します
32点コンパスは...控えめに言っても面白いです。 Denelson83(所有作品)[ GFDLまたはCC-BY-SA-3.0 ]、ウィキメディアコモンズ経由 あなたの課題は、学位測定を行い、それを32ポイントコンパスの方向に変換することです。 各方向は11.25(360/32)度離れています。たとえば、N(北)は0度、NbE(北から東)は11.25度、NNE(北-北東)は22.5度などです。 道順を取得する方法については、 0度はN、90度はE、180度はS、270度はWです。 これらは基本方向と呼ばれます。 基本方向の中間点は、単純に連結された基本方向です。NまたはSは常に最初に、WまたはEは常に2番目になります。 これらは順序方向と呼ばれます。 基数方向と順序方向の中間点は、それらが連結された方向であり、やはり「-」が間にあります。枢機directions方向が最初になり、順序が2番目になります。 これらは、二次心内膜方向と呼ばれます。 二次心内方向と他の方向との中間点は、それらが最も近い(もちろんそれらのすぐ隣の方向以外の)枢軸方向による「別の」方向です。 私はこれらが何と呼ばれるのか分かりません:P この説明がすべて私の脳と同じくらいあなたの脳を傷つけるなら、あなたはこのチャートを参照できます: 1 North N 2 North by east NbE 3 North-northeast NNE 4 Northeast by north NEbN 5 Northeast NE 6 Northeast by east NEbE 7 East-northeast ENE 8 East by north EbN 9 East …
13 code-golf 

9
セットパズルゲーム
セットのゲーム(子供向けの素晴らしいゲーム)81枚のカードゲームを知っているかもしれません。各カードには、4つの異なる属性(フォーム、番号、色、塗りつぶし)の数字があります。各属性には3つの異なる値があります。 form: wave, oval, diamond colour: red, purple, and green number: 1, 2, 3 fill: none, dashed, opaque. 12枚のカードがテーブルに開かれ、今の課題はセットを示すことです。セットは、すべての属性値が0、1、または3回出現する3つのカードで構成されます。赤い数字のカード、不透明なカード、または1枚のカードを持つのは良くありません。より視覚的な説明については、提供されているリンクを参照してください。 すべての属性がエンコードされているカードのコードを想定しています "WP2N" を意味する 2 Purple Waves with No fill 一緒に例えばとOR1Nし、DG3N そして セット(3つの異なるフォーム、3つの異なる色、3つの異なる番号、1つの塗りつぶし)です。 入力は、カードを表すスペースで区切られた一意のコード(81の可能なコードからランダムに選択)の文字列です。 "OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR2D OG3O OR2D" ソリューションは、指定されたコレクション内のすべての可能なセットを示す必要があります。そう OR1N, WP2N, DG3N 他のすべてのセットとともにソリューションの一部である必要があります。
13 code-golf 

8
厄介な「.DS_Store」ファイルを削除する
OS Xを使用している場合、Finderを使用した結果として生成される悪名高い隠し ".DS_Store"ファイルに慣れているかもしれません。 課題は、ファイルシステム全体を通過し、「。DS_Store」という名前のファイルを削除するコードを記述することです。 クラシックコードゴルフ-最短コードが勝ちます。 明確化: コードでは、スーパーユーザーを必要とする.DS_Storeファイルを削除する必要はありません。そのようなファイルが存在しないと仮定します。 コードは、関連する.DS_Storeファイルのみを削除し、それ以外は何も削除しません。

24
リトルエンディアンから文字列への変換
前書き BMP(ビットマップ)ジェネレーターでの作業中に、数値をリトルエンディアンの16進文字列に変換する問題に直面しています。JavaScriptで作成した関数を次に示しますが、小さなコードでも同様に機能するのではないかと思います let liEnd= num => num.toString(16).padStart(8,'0').match(/../g).reverse().join``; console.log(liEnd(304767)) // 304767 dec = 0x4a67f hex コードスニペットを実行する結果を非表示スニペットを展開 チャレンジ 入力時に32ビットの符号なし整数を受け取り、リトルエンディアンの順序で8桁の16進数文字列を生成する関数を作成します。ジョブを実行するアルゴリズムの例: numbを16進文字列に変換します。例: 304767 -> '4a67f' パディングゼロを追加して、8文字の文字列を取得します。 '0004a67f' 文字列を4つの2文字に分割します。 '00','04','a6','7f' ピースの逆順 '7f','a6','04','00' ピースを結合して結果として返す: '7fa60400' 入力と出力の例 入力番号(または10 ->進数の文字列)はの左側にあり、出力16進数の文字列は右側にあります 2141586432 -> 0004a67f 304767 -> 7fa60400
13 code-golf 

7
最も近いHTMLカラー名を見つける
入力 1つの16進数の6桁のカラーコード、大文字#。必要に応じて、24ビット整数にすることもできます。 出力 最も近いHTMLカラー名(たとえばred、https://www.w3schools.com/colors/colors_names.aspdark-salmonとして定義されている、または以下を参照)。距離は、赤、緑、青のチャネルの差を合計することによって定義されます。 例 FF04FE: magenta FFFFFF: white 457CCB(途中間steelblueおよびdarkslateblue): steelblue(ラウンドアップ) ルール 標準の抜け穴が適用されます。 標準I / Oが適用されます 2つの色の中間にある場合は、チャネルの合計が高い色に切り上げます。2つの色が同じチャネル合計を持っている場合、16進コードとしてより高い色を出力します。例 red= #FF0000= 16711680> blue= #0000FF= 256 1つの16進コードに2つの名前(greyおよびなどgray)がある場合は、どちらかを出力します。 出力は大文字で、ハイフンを付けることができます 末尾/前のスペース/改行で結構です 名前は完全に出力する必要があります。 これはcode-golfなので、バイト単位の最短の回答が優先されます。 色 コメントの提案に従って、CSV形式のそれぞれの16進値を持つすべての色名は次のとおりです。 Color Name,HEX Black,#000000 Navy,#000080 DarkBlue,#00008B MediumBlue,#0000CD Blue,#0000FF DarkGreen,#006400 Green,#008000 Teal,#008080 DarkCyan,#008B8B DeepSkyBlue,#00BFFF DarkTurquoise,#00CED1 MediumSpringGreen,#00FA9A Lime,#00FF00 SpringGreen,#00FF7F Aqua,#00FFFF Cyan,#00FFFF MidnightBlue,#191970 DodgerBlue,#1E90FF …
13 code-golf  color 

3
マルチユーザーCRUD:有効、問題、またはエラー?
はじめに: Dropboxを他の人と一緒に使用して、同じファイルを変更したことはありますか?リレーショナルデータベースを備えたマルチユーザーアプリケーションを使用していて、2人が同じオブジェクトを変更していた(さらに悪いことに、1人が削除してもう1人が変更していた)としたら、さて、この課題(ソート)でそれをシミュレートしましょう。 この課題のために、2人のユーザーと1つまたは2つの関連ファイルしかありません。両方のユーザーは、すべてのファイルをCRUD(作成、読み取り、更新、および削除)する一般的な特権を持っています。 チャレンジ: 入力: いくつかの入力があります(入力形式は柔軟で、妥当な形式であれば何でも許可されます)。 1)ロックモード(オン/オフ):楽観的同時実行ロックと悲観的同時実行ロックの違い。 どちらのユーザーもすべてをCRUD(作成、読み取り、更新、および削除)できますが、エラーや問題が発生する場合があります。ロックモードによっては、オフにすると問題が発生し、オンにするとエラーになる場合があります。これについては、以下の「出力」セクションで説明します。 2&3)2つのユーザーアクション。これらのアクションは常に2つのことで構成されています。ユーザーが行うこと(作成、読み取り、更新、または削除)とそのファイルに対して。 出力: 3つの可能な出力があります。 有効:両方のユーザーによる両方のアクションを、問題が発生することなく同時に実行できます。 エラー:両方のユーザーによる両方のアクションを同時に実行することはできず、ユーザーの1人(このユーザーはこのチャレンジには関係ありません)にエラーを引き起こします。これは次の場合に発生します。 1人のユーザーがファイルを読み取りまたは更新し、もう1人のユーザーが削除した。 両方のユーザーがロックモードをオンにして同じファイルを更新します。 ユーザーがファイルを作成し、他のユーザーがそれを読み取り/更新/削除する(つまり、ファイルが既に存在するため、作成できない)。 両方のユーザーが同じファイルを作成します。 問題:両方のユーザーによる両方のアクションを同時に実行できますが、予期しない問題が発生する可能性があります。これは次の場合に発生します。 両方のユーザーロックモードがオフになっているときにファイルを更新します。 一方のユーザーがファイルを更新し、もう一方のユーザーがそれを読み取る。 両方のユーザーが同じファイルを削除する(実際には2番目のユーザーにエラーが発生しますが、ユーザーの希望どおりに削除されるため、このチャレンジのためにエラーではなく問題になります) チャレンジルール: すべての入力と出力は柔軟であり、誰もが答えで使用したものを明記する必要があります! 入力例:0/ 1ロックモードの場合&31(3番目のアクション:更新;ファイル:1)&21(2番目のアクション:読み取り;ファイル:1); true/ falseロックモードの場合&['C','A'](アクション:作成;ファイル:A)&['D','B'](アクション:削除;ファイル:B); etc. 出力例:null/ true/ false(null =有効; true =エラー; false =問題); -1/ 0/ 1(-1 =エラー; 0 =問題; 1 =有効); とはいえ、3 つの可能な出力は、3つの出力タイプに対して一意で異なる必要があります。 ファイルが何と呼ばれるかは関係ありません。これは上記の入力例でも確認できます。そのため、1つの(ASCII)文字または数字で構成される任意のタイプのファイル名を回答に使用してください。彼らはあなたが使用することはできませんので、しかし、すべてのテストケースで一貫してしなければならないのA/ Bつのテストケースに及び1/ 2別で。 CRUDの4つのアクションも、一意で一貫した値でなければなりません。したがって、あるテストケースで'D'/ …

5
女王の螺旋を歩く
遠く離れた王国では、チェスの女王は1からまでの番号が付けられたらせん状の小道を毎日歩いておりn、スパイラル自体に追従するのではなく、単にチェス盤でするように女王の動きをします。女王は彼女の被験者に愛され、彼らは彼女が彼女の道を訪問するすべての広場を書き留めます。女王が任意の正方形で散歩を開始し、任意の正方形でそれを終了できるとすると、女王が歩くことができる最短の女王の散歩は何ですか? チャレンジ 長方形のグリッドに整数のスパイラルが与えられた場合、チェスのクイーンの動きを使用して、このスパイラルグリッド上の2つの数値間の最短経路(移動したセルの数で数えられる)の1つを返す関数を記述します。 たとえば、from 16から25: 25 10 11 12 13 24 9 2 3 14 23 8 1 4 15 22 7 6 5 16 21 20 19 18 17 可能なパスには、16, 4, 2, 10, 25およびが含まれ16, 5, 1, 9, 25ます。 ルール 入力は任意の2つの正の整数になります。 出力は、直交移動と斜め移動のみを使用して、らせんを横切る整数のパス(両方の端点を含む)になります。 パスの長さは、移動したセルの数によってカウントされます。 あなたの答えはプログラムか関数かもしれません。 これはコードゴルフなので、最小バイト数が優先されます。 いつものように、問題が不明な場合はお知らせください。幸運と良いゴルフを! テストケース >>> queen_spiral(4, 5) …

6
ミームを使わないでください
現在、インターネット上には、文を取り、意味を逆にn'tし、最後に追加するというミームがあります。例えば、I am smallとなりI am talln't チャレンジ チャレンジのために、これを単純化します。あなたの仕事は、文に否定があるときはいつでも検出n'tし、最後に追加された「ポジティブ」なものに置き換えることです。ルールで説明されるいくつかのトリッキーな部分があります。 ルール あなたは取らなければならない文字列として入力して、返す文字列をとして出力。 入力は、句読点のみを含む小文字の文になります。., no <any_word>またはを置き換える必要not <any_word>があり<any_word>n'tます。 no/ 部分文字列notではなく単語である必要があります:で変更する必要はありませんnone of those 単語がすでに終了している場合n、あなたは交換する必要がn'tで't:no planなるplan'tといません plann't noまたはのnot後に単語、句読点、または別のno/ が続かない場合not、それをに置き換える必要がありyesn'tます。 複合語は1語としてカウントされます。そのためno-op、部分文字列を含む場合でも、no という単語noは含まれません。したがって、結果はそうであり、そうではありません。no-op -opn't 文法エラーについて心配する必要はありません。たとえば、there is no way結果はになりthere is wayn'tます。 標準的な抜け穴は許可されていません。 これはcodegolfなので、最短のコードが優先されます。 この課題が今のところ明らかではない場合でも、いくつかの例があります。 例 入力:コードゴルフは大好きですが、短いプログラムは好きではありません。この文は理にかなっています...もちろんいいえ。 出力:私はコードゴルフを愛していますが、ショートプログラムは好きではありません。この文は理にかなっています...もちろんそうではありません。 入力:あなたは招待されていません。出て行け。 出力:あなたは招待されていません。出て行け。 入力:私は大丈夫ではない、私は計画を持っていない、私は銃を持っていない 出力:私は大丈夫、私は計画していない、私は銃を持っていない 入力:ああ、いやいやいやいやいや。 出力:ああ、はい、はい、拒否しません。 入力:ああ、いやいやいや、私は拒否します。 出力:ああ、はい、はい、はい、そうではありません、私は断ります。 入力:私はこれを信じることができません、あなたはcodegolfすることはできません。 出力:これを信じられない、あなたはcodegolfできない。 入力:ああ、いや...彼はもう一度やった。 出力:ああそうではありません...彼は再びそれをやった。 入力:nn'tは単語ではありません、kevin。これはそうではありません。 …
12 code-golf  string 

1
Collat​​zのようなシーケンスの分析
4つの正の整数でCollat​​zのようなシーケンスを定義しsます。 n 開始値 d > 1 除数 m > 1 乗数 i インクリメント (元のCollat​​zシーケンスd = 2 m = 3およびi = 1。) これらの整数sは次の方法で作成されます。 s(0) = n もしk > 0およびs(k-1) mod d = 0その後、s(k) = s(k-1) / d もしk > 0およびs(k-1) mod d != 0その後、s(k) = s(k-1) * m + i シーケンス例d …

10
CSVを並べる
概要: あなたの仕事は、CSV入力をkey=value形式で取り、より整理された(以下を参照)方法で並べることです。 入力: 常にstdin経由。レコードは常に次の形式になりますkey=value。 foo=bar,baz=quux abc=123,foo=fubar baz=qwe,abc=rty,zxc=uiop,foo=asdf 事前に可能なキーのリストはありません。入力テキストでそれらを見つける必要があります。 入力の終わりは、OSに適切なEOF実装が何であれ、によって通知さEOFれます。 出力: 出力の最初の行には、すべてのキーのリストがアルファベット順に表示されます(キーがすべて数字の場合でも)。その後、キーをリストせずに、各レコードを同じCSV形式で適切な番号見出しで印刷します。したがって、上記の例の場合、正しい出力は次のようになります。 abc,baz,foo,zxc ,quux,bar, 123,,fubar, rty,qwe,asdf,uiop よくある質問: 不適切な形式の入力について心配する必要がありますか? いいえ。プログラムは、入力が正しくフォーマットされていない場合(たとえば、 foo,bar,baz 特殊文字のエスケープを処理するにはどうすればよいですか? あなたは、フォーマットの一部ではない追加のデータ,や=データにはないと仮定するかもしれませんkey=value。"このコンテストでは特別な意味はありません(従来のCSVではありますが)。また、特別なものでもありません。 行は次の正規表現と一致する必要があります。 ^([^=,]+=[^=,]+)(,[^=,]+=[^=,]+)*$ したがって、キーと値の両方が一致します [^=,]+ 何についてのCRLF対LF? プラットフォームに適した区切り文字を選択できます。ほとんどの言語は、特別な区切りコードなしでこれを処理します。 最後のいくつかの列が存在しない場合、末尾のコンマを印刷する必要がありますか? はい。例を参照してください。 CSVパーサーまたは他の同様の外部ツールは許可されていますか? いいえ。自分でデータを解析する必要があります。

7
IPアドレスをマスクし、そのブロードキャストを与える
バックグラウンド このUnix.SEの質問(そしてもちろん私自身の回答)に触発されました。 インターフェイスにIPアドレスが指定されると、多くの場合、次のドット付き10進形式で指定されます。 a.b.c.d e.f.g.h どこa.b.c.dが実際のアドレスでe.f.g.hあり、ネットマスクです。 ネットマスクは、バイナリで表される場合、基本的に1ビットの束とそれに続く0ビットの束です。ネットマスクが指定されたIPアドレスに対してビット単位でAND演算されると、結果はアドレスのネットワーク部分、または単にネットワークアドレスになります。これはホストのルートテーブルにプログラムされるため、ホストはこのネットワーク宛てのデータをこのインターフェイスから送信することができます。 ネットワークのブロードキャストアドレスは、ネットワークアドレス(上記から)を取得し、すべてのホストビットを1に設定することによって導出されます。ブロードキャストアドレスは、特定のネットワーク内のすべてのアドレスに送信するために使用されます。 チャレンジ 入力としてドット付き10進数のIPアドレスと有効なネットマスクを指定し、出力としてネットワークアドレスとブロードキャストアドレスをドット付き10進数形式で提供します。 入力は、ドット付き10進形式の2つの文字列としてのアドレスとマスクでなければなりません。これを、2つの文字列要素のリストまたは配列、または適切な区切り文字で区切られたアドレスとマスクを持つ単一の文字列として、2つの個別の文字列として渡すことができます。 出力形式には、入力形式と同じ制約が適用されます。 例 Input Output 192.168.0.1 255.255.255.0 192.168.0.0 192.168.0.255 192.168.0.0 255.255.255.0 192.168.0.0 192.168.0.255 192.168.0.255 255.255.255.0 192.168.0.0 192.168.0.255 100.200.100.200 255.255.255.255 100.200.100.200 100.200.100.200 1.2.3.4 0.0.0.0 0.0.0.0 255.255.255.255 10.25.30.40 255.252.0.0 10.24.0.0 10.27.255.255

9
教会の減算
教会の減算 ラムダ計算は常に私の魅力であり、関数を相互に渡す緊急行動は非常に複雑です。教会の数字は、関数の繰り返しの適用(通常は定数の単項加算)から構築された自然数の表現です。たとえば、数値ゼロはxを返し、入力関数を「無視」します。1つはf(x)、2つは次のf(f(x))ようになります。 ident = lambda x: x zero = lambda f: ident succ = lambda n: lambda f: lambda x: f(n(f)(x)) one = succ(zero) add1 = lambda x: x + 1 to_int = lambda f: f(add1)(0) print(to_int(one)) >>> 1 このことから、最初の関数をxに適用し、次に2番目の関数をxに適用することで加算が達成されることが簡単にわかります。 add = lambda m: lambda n: lambda f: lambda x: …

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