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

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

30
指定されたビットカウントのすべてのASCII文字
(@ChasBrownのおかげでタイトル) サンドボックス 背景 この挑戦は、私が最近Puzzling Stack Exchangeに投稿した質問に触発されました。元の質問に興味がある場合は、リンクをたどってください。そうでない場合は、ここで詳細を説明しません。 事実 印刷可能な標準ASCII文字はすべて、32〜126の10進数値を持ちます。これらは、100000から1111110までの範囲の対応する2進数に変換できます。これらの2進数のビットを合計すると、常に1〜6の整数になります。 チャレンジ 入力として1〜6の整数を指定し、バイナリ値のビットの合計が入力整数に等しい印刷可能な標準ASCII文字をすべて受け入れ可能な形式で出力するプログラムまたは関数を作成します。 例/テストケース 1 -> ' @' 2 -> '!"$(0ABDHP`' 3 -> '#%&)*,1248CEFIJLQRTXabdhp' 4 -> ''+-.3569:<GKMNSUVYZ\cefijlqrtx' 5 -> '/7;=>OW[]^gkmnsuvyz|' 6 -> '?_ow{}~' 未使用のPythonリファレンス実装は、こちら(TIO)から入手できます。 ルール 入力は常に1〜6の整数(または整数の文字列表現)であると仮定します。 結果を表示するプログラム、または結果を返す関数を作成できます。 出力は合理的な形式であるかもしれませんが、すべての入力に対して一貫していなければなりません。引用符付き文字列を出力することを選択した場合、すべての入力に同じタイプの引用符を使用する必要があります。 通常の禁止されている標準的な抜け穴。 これはコードゴルフなので、各言語の最短コードが勝ちます。
30 code-golf 

12
繰り返しフィボナッチ桁とは何ですか?
おそらくご存知のように、フィボナッチ数は、シリーズの前の2つの数の合計です。 Fibonacci Digit™は、前の2つの数字の合計です。 たとえば、シリーズの開始の1,1場合、シリーズはになります1,1,2,3,5,8,13,4,7,11,2...。変更はの後に発生し、追加する13代わりにを追加8+13します1+3。シリーズは最後にループします。ここで4+7=11、および1+1=2は、シリーズの開始と同じです。 別の例として、シリーズの始まり2,2:2,2,4,6,10,1,1,2,3,5,8,13,4,7,11,2,3...。これは一意に始まりますが、数字が合計する10と1+0=1, 0+1=1になり、シリーズはシリーズと同じように継続し、ループ1,1します。 チャレンジ 整数入力が与えられた場合0≤n≤99、これらの2桁で始まるフィボナッチ桁シリーズのループを計算します。(あなたは確かにこの範囲外の整数を考慮許可されていますが、必須ではありません。)1桁の入力が与えられた場合、コードはそれを解釈してシリーズ開始を示し0,nます。 ループ内の2桁の数値はすべて、2桁として出力する必要があります。そのため、たとえば、ループforに1,1はが含まれますが13、ではありません1,3。 出力は、ループの最初の番号から始まります。したがって、上記の制限に基づいて、のループはで1,1始まる2ため1,1、11は別々にカウントされます。 出力の各番号は、一貫している限り、必要に応じて区切ることができます。すべての例でコンマを使用していますが、常に同じ区切り文字を使用している限り、スペース、改行、ランダムな文字などはすべて許可されます。の2g3g5g8g13g4g7g11正当な出力もありますが1、2j3g5i8s13m4g7sk11ではありません。一貫したセパレータで区切られた正しい順序で正しい番号を持っている限り、文字列、リスト、配列などを使用できます。出力全体を角括弧で囲むこともできます(例:(5,9,14)または[5,9,14]など)。 テストケース: 1 -> 2,3,5,8,13,4,7,11 2 -> 2,3,5,8,13,4,7,11 3 -> 11,2,3,5,8,13,4,7 4 -> 3,5,8,13,4,7,11,2 5 -> 2,3,5,8,13,4,7,11 6 -> 3,5,8,13,4,7,11,2 7 -> 14,5,9 8 -> 13,4,7,11,2,3,5,8 9 -> 11,2,3,5,8,13,4,7 0 -> 0 14 -> 5,9,14 59 -> 5,9,14 これはcode-golfであるため、最小のバイト数が優先されます。
30 code-golf 

30
最も一般的な部分文字列
入力として文字列のリストを受け取り、すべての入力文字列の部分文字列である最長の文字列を出力するプログラムまたは関数を作成します。同じ長さの部分文字列が複数あり、部分文字列がなくなった場合は、いずれかを出力します。 これは、空の文字列を出力することを意味する場合があります。 有効な出力が複数ある場合は、いずれかを出力できます。出力が常に有効である限り、特定の入力に対して一貫した出力を提供する必要はありません。 入力には常に少なくとも1つの文字列がありますが、空ではない文字列が存在しない場合があります。 すべての印刷可能なASCII文字が入力に表示される場合があります。表示されるのはこれらの文字のみであると想定できます。 デフォルトのメソッドのいずれかを使用して、入力を取得したり出力を生成したりできます。 標準抜け穴は許可されていません。 これはコードゴルフです -コードのバイト数が少ないほど良いです。 テストケース: [Inputs] -> [Valid outputs (choose one)] ["hello", "'ello"] -> ["ello"] ["very", "much", "different"] -> [""] ["empty", "", "STRING"] -> [""] ["identical", "identical"] -> ["identical"] ["string", "stRIng"] -> ["st", "ng"] ["this one", "is a substring of this one"] -> ["this one"] …

23
GUIDを増やす
最近のDaily WTFの記事に触発されて ... GUID(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX各Xが16進数を表すformatの文字列)を受け取り、1ずつ増加したGUIDを出力するプログラムまたは関数を作成します。 例 >>> increment_guid('7f128bd4-b0ba-4597-8f35-3a2f2756dfbb') '7f128bd4-b0ba-4597-8f35-3a2f2756dfbc' >>> increment_guid('06b86883-f3e7-4f9d-87c5-a047e89a19fa') '06b86883-f3e7-4f9d-87c5-a047e89a19fb' >>> increment_guid('89f25f2f-2f7b-4aa6-b9d7-46a98e3cb2cf') '89f25f2f-2f7b-4aa6-b9d7-46a98e3cb2d0' >>> increment_guid('89f25f2f-2f7b-4aa6-b9d7-46a98e3cb29f') '89f25f2f-2f7b-4aa6-b9d7-46a98e3cb2a0' >>> increment_guid('8e0f9835-4086-406b-b7a4-532da46963ff') '8e0f9835-4086-406b-b7a4-532da4696400' >>> increment_guid('7f128bd4-b0ba-4597-ffff-ffffffffffff') '7f128bd4-b0ba-4598-0000-000000000000' ノート リンクされた記事とは異なり、Fで終わるGUIDをインクリメントすると、前の16進数に「移動」する必要があります。上記の例を参照してください。 入力がにならないことを前提とするかもしれませんffffffff-ffff-ffff-ffff-ffffffffffff。 9を超える16進数の場合、大文字(AF)または小文字(af)を使用できます。 はい、GUIDはで始まる場合があり0ます。 出力は、必要な先行s を含めて、正確に 32桁の16進数と期待される形式の4つのハイフンで構成する必要があります0。 GUIDのバージョン番号またはその他の固定ビットを保持する必要はありません。ビットが特別な意味を持たない単なる128ビット整数であると仮定します。同様に、GUIDは、Windows GUID構造体のバイナリ順ではなく、簡単な辞書順でソートされると想定されます。 関数を書く場合、入力は、任意の配列オブのものとすることができるcharデータの種類:string、char[]、List<char>、等
30 code-golf 

3
素数検定式
あなたの目標は、特定の数nが最小バイトで素数であるかどうかを判断することです。しかし、あなたのコードは、単一でなければならないのPython 2のみからなる数字で表現 オペレーター 入力変数 n 整数定数 括弧 ループなし、割り当てなし、組み込み関数なし、上記のリストのみ。はい、可能です。 オペレーター Python 2のすべての演算子のリストを次に示します。算術演算子、ビット演算子、論理演算子が含まれます。 + adddition - minus or unary negation * multiplication ** exponentiation, only with non-negative exponent / floor division % modulo << bit shift left >> bit shift right & bitwise and | bitwise or ^ bitwise xor ~ bitwise …

17
ある種のクイン
stringを指定すると、ソースコードでの表示順序に従ってx文字がxソートされて出力されます。 例 Source: ThisIs A Test Input: Is it a Test? Output: TissI etta? Source: Harry - yer a wizard. Input: I'm a what? Output: aa wh'?Imt Source: Mr. H. Potter, The Floor, Hut-on-the-Rock, The Sea Input: Output: ルール 標準的な抜け穴とI / Oルールが適用されます 入力と出力は、文字列、文字のリスト、またはバイトのリストのいずれかです。 If a character is used multiple times …

18
カスタム数値ベースコンバーター
自分の好きな形式を使用して、自分の持っている数字を自分の数字ベースにすばやく変換できるようにしたい力。 入力 プログラムは3つのパラメーターを受け入れる必要があります。 番号:変換される文字列番号 InputFormat:数値が現在含まれている基本文字列 OutputFormat:数値が変換されるベース文字列。 出力 プログラムはNumber、古い数値ベースInputFormatから新しい数値ベースに変換する必要がありますOutputFormat 例 ("1","0123456789","9876543210") = "8" ("985724","9876543210","0123456789ABCDEF") = "37C3" ("FF","0123456789ABCDEF","0123456789") = "255" ("FF","0123456789ABCDEF","01234567") = "377" ("18457184548971248772157", "0123456789","Aa0Bb1Cc2Dd3Ee4Ff5Gg6Hh7Ii8Jj9Kk,Ll.Mm[Nn]Oo@Pp#Qq}Rr{Ss-Tt+Uu=Vv_Ww!Xx%Yy*Zz") = ",sekYFg_fdXb" 追加 新しいベース77テストは、機能する場合は小道具を必要としません 最初に数値に変換する必要があり、32ビット内でロックされている言語の場合は、スキップできます。 追加のテストなので。 すべての例は、次のコード(vars mins、ただしコードはフォーマット済み)を使用して、bcmath拡張を使用してPHP 7.2によって生成されました。おそらくもっと短い方法がありますが、これは私がこれを行う必要があるシステムのために思いついた方法であり、誰かが短いバージョンを思い付くことができるかどうかを確認するのは良いことです。 PHP 7.2(bcmath-拡張)614バイト <?php function f($a, $b, $c) { $d= str_split($b,1); $e= str_split($c,1); $f= str_split($a,1); $g=strlen($b); $h=strlen($c); $k=strlen($a); $r=''; …

30
ワードラダーを構築する
少なくとも2つの単語(小文字のみで構成される)のリストが与えられた場合、最初に右から次に左に、最初の方向を左から右に交互に変えて、単語のASCIIラダーを作成および表示します。 。 単語を書き終えたら、方向を変えてから、次の単語を書き始めます。 ご使用の言語が単語のリストをサポートしていない場合、またはより便利な場合は、単一のスペースで区切られた単語の文字列として入力を取得できます。 先頭と末尾の空白は許可されます。 ["hello", "world"] または "hello world" hello w o r l d ここでは、書き込みから始めhelloて、次の単語(または文字列としての入力の場合-スペースが見つかった場合)に達したときに、相対方向を右に変更して書き込みを続けますworld テストケース: ["another", "test", "string"] or "another test string" -> another t e s tstring ["programming", "puzzles", "and", "code", "golf"] or "programming puzzles and code golf" -> programming p u z z l e …

24
コードへの(簡単な)道
入力: 整数nnnであることが保証され、≥ 3≥3\ge3。 いずれかである整数ddd。[ - 1 、0 、1 ][−1、0、1][-1,0,1] 出力: 場合、北西方向のサイズの道路。場合は北方向。または場合は北東方向。道路の幅は常に3スペース(外側の境界線を含める場合は一般に5スペース)です。さらに、下部に道路の区切り線があり、その後、上に向かって交互に切り替わります。nnnd= − 1d=−1d=-1d=0d=0d=0d=1d=1d=1 いくつかの例: 入力: 出力:n=7,d=1n=7,d=1n=7, d=1 / / / / / / / / / / / / / / / / / / 入力:n=4,d=−1n=4,d=−1n=4, d=-1 出力: \ \ \ \ \ \ \ \ \ \ チャレンジルール: 画面のどこかに必要な道路を印刷する限り、任意の長さの先頭/末尾スペースおよび/または改行を使用できます。 …

30
pwaS eht tirsf dna tasl setterl fo hace dorw
または、「各単語の最初と最後の文字を入れ替える」 あなたの課題は、アルファベットのASCII文字列と、区切り文字として使用する他の1文字(各単語を区切る)を指定して、各単語の最初と最後の文字を入れ替えることです。1文字の単語がある場合は、そのままにします。 サンプル/テストケースでは、小文字とスペースを区切り文字として使用します。 句読点を処理する必要はありません。すべての入力は、デリミタで区切られたa〜zの文字のみで構成され、すべてが大文字です。 たとえば、文字列「hello world」の場合: Input string: "hello world" Identify each word: "[hello] [world]" Identify the first and last letters of each word: "[[h]ell[o]] [[w]orl[d]]" Swap the first letters of each word: "[[o]ell[h]] [[d]orl[w]]" Final string: "oellh dorlw" 注:区切り文字を個別に入力する必要はありません。区切り文字は、単語を区切るために使用される文字です。何でも構いません。創造的なゴルファーのためにオプションを開いたままにしたかったので、スペースや改行だけに制限したくありませんでした。区切り文字は、入力文字列内の単語を区切る単なる文字です。 テストケース: "swap the first and last letters of each word" …
30 code-golf  string 

29
ラッキーハウス
ラッキーハウスとして知られるスーパーマリオ3Dワールドにはミニゲームがあります。4ブロックのスロットマシンで構成されています。 各ブロックは5つの異なるアイコン(花、葉、ベル、チェリー、ブーメラン)のいずれかであり、プレーヤーの目標は、できるだけ多くの同一のアイコンを取得することです(ビデオを参照))。 プレイヤーにはコインが与えられ、コインはさらにライフに変換されます。あなたの仕事は、獲得した追加のライフの数を計算することです。 一致するアイコンの数に応じて、報われるコインの量は次のとおりです。 一致なし-10コイン 1ペア-100コイン 2ペア-200コイン 三種類-300コイン 4種類-777コイン 100コインごとに1つの追加ライフ(1UP)を獲得します。したがって、1ペアで正確に1UP 、2 ペアで2UP 、3-of-a-kindで 3UP を獲得することが保証されます。ただし、対戦なしまたは4種類の勝ちで獲得したライフの数は、最初のコインストックによって異なります。 ソース:スーパーマリオウィキ 入力 あなたが最初のコイン株式与えられている0 ≤ C &lt; 1000≤c&lt;1000 \le c < 100と4つの値のリストを[ v1、v2、v3、v4][v1、v2、v3、v4][v_1,v_2,v_3,v_4]スロットマシンの最終的なアイコンを表します。 出力 余分な生活の数が勝った:、、、3、7または8を000111222333777888。 ルール アイコンは、リスト、文字列、または4つの異なるパラメーターなど、適切な形式で取得できます。 各アイコンは、1桁の整数または単一の文字で表されます。。回答で使用されるアイコンのセットを指定してください。(ただし、それらがどのようにFlower、Leaf、Bellなどにマッピングされるかを説明する必要はありません。それはまったく問題ではないからです。) 出力値を再マップすることはできません。 これは🎰code -golf isです。 テストケース 次の例では、整数のリストを使用してアイコンを表します。[ 1..5 ][1..5][1..5] coins icons output explanation ------------------------------------------------------------------------- 0 [1,4,2,5] 0 no matches …

26
自分で食べられる数
正の整数が与えられた場合、その数値がそれ自体を食べることができるかどうかに関する真実/偽の値を出力します。 ルール 左端が頭、右端が尾 頭が尾以上である場合、頭は尾を食べ、新しい頭が合計になります。 もしsum≥10sum≥10sum \ge 10 その後、ヘッドが置き換えられます。summod10summod10sum \mod 10 sum=0sum=0sum=0は無視できませんが、入力番号に先行ゼロはありません。 例: number=2632 head-2, tail-2 2632 -&gt; 463 head-4, tail-3 463 -&gt; 76 head-7, tail-6 76 -&gt; 3 If only one digit remains in the end, the number can eat itself. 頭が尾を食べることができない場合、答えは偽になります。 number=6724 072 False (0&lt;2) テストケース: True: [2632, 92258, …

30
最も近いフィボナッチ数を見つける
我々は、すべての有名に精通しているフィボナッチ数列で始まり、0そして1、各要素は、前の2の合計です。以下に、最初のいくつかの用語を示します(OEIS A000045): 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584 与えられた正の整数で、これらの規則の下で、フィボナッチ数列の最も近い数を返します。 最も近いフィボナッチ数は、指定された整数と最小絶対差がフィボナッチ数として定義されます。たとえば、34はに最も近いフィボナッチ数30です|34 - 30| = 4。これは、、、が2番目に近いもの、、の21ためにのためです|21 - 30| = 9。 指定された整数がフィボナッチ数列に属する場合、最も近いフィボナッチ数はそれ自体です。たとえば、最も近いフィボナッチ数13はになり13ます。 同点の場合、入力に最も近いフィボナッチ数のいずれかを出力するか、両方を出力するかを選択できます。たとえば、入力がの場合、17次のすべてが有効です:21、13または21, 13。両方を返却する場合は、形式を明記してください。 デフォルトの抜け穴が適用されます。任意の標準的な方法で入力を取得し、出力を提供できます。プログラム/関数は、10 8までの値のみを処理する必要があります。 テストケース 入力-&gt;出力 1-&gt; 1 3-&gt; 3 4-&gt; 3または5または3、5 6-&gt; 5 7-&gt; 8 11-&gt; 13 …

2
靴下の整理を手伝ってください!
ペアに分類したいきれいな靴下が山ほどあります。残念ながら、靴下は中央ではなく、パイルの両端からしか取れません。さらに、一致するペアを一度に山から靴下のみを削除できます。私の戦略は、最初にパイルを1つ以上の小さなパイルに分割することです。いくつかの例でこれが明らかになると思います。各靴下を正の整数として表します(整数が一致する場合は、靴下が等しいことを示します)。 靴下の最初の山が 1 2 3 3 2 1 その後、分割する必要はありません。両方の1靴下、次に両方の2靴下、次に両方の3靴下を取り外します。 代わりに、初期パイルが 1 2 3 2 3 1 靴下を端から取り外すだけではすべての靴下をペアリングできないため、最初に分割する必要があります。1つの可能性は、それを2つの山に分割することです 1 2 3 and 2 3 1 今、私は削除することができ1、靴下を残し2 3 and 2 3、続い3靴下、残して2 and 2、そして最後に2靴下。 あなたの仕事 靴下の最初の山を考えて、靴下を並べ替えることができるように小さな山に分割するプログラムを作成します。プログラムは、パイルを可能な限り少ない数のパイルに分割する必要があります(最適なソリューションが複数ある場合は、1つだけ見つける必要があります)。 入力は、リスト、区切り文字列、またはその他の便利な形式で提供されます。間1にある整数と最大値の間の整数のみが含まれn、各整数は正確に2回発生します。 出力は、任意の便利な形式で与えられた、より小さなリストに分割された入力リストで構成される必要があります。 例 Input Sample Output 1 1 1 1 1 2 1 2 1; 2 1 …
30 code-golf 

10
///を解釈する(「スラッシュ」と発音)
難解な言語のゴルフを十分に得ることができないので、できますか? /// —発音のスラッシュ ——Perlのs///名声の正規表現置換機能に基づいた楽しい小さな言語です。スラッシュ/とバックスラッシュの2つの特殊文字のみが含まれています\。esolangs wikiで完全な記事を見つけることができますが、以下の言語の説明といくつかの例を再現します。 つまり、/pattern/repl/restプログラムで識別し、可能な限り何度も置換を行うことで機能します。いいえ文字は除いて特別ではない/と\:/画定パターンや交換プログラムで、しばらくは\リテラルを挿入することを可能にする/か、\あなたのコードに文字を。特に、これらは正規表現ではなく、単なる文字列の置換です。 あなたの課題は、できるだけ少ない文字で、STDINを読み取るプログラムまたは文字列引数を取る関数として、///言語のインタープリターを作成することです。 ///自体以外の任意の言語を使用できます。///;を解釈するライブラリは使用できません。ただし、正規表現、正規表現ライブラリ、または文字列一致ライブラリを使用できます。 実行 4つの状態、print、pattern、replacement、およびsubstitutionがあります。置換を除くすべての状態で: プログラムが空の場合、実行は停止します。 それ以外の場合、最初の文字がの場合、\次の文字(存在する場合)で何かを実行し、プログラムから両方を削除します。 それ以外の場合、最初の文字がの場合、/それを削除し、次の状態に変更します。 それ以外の場合は、最初の文字で何かをして、プログラムから削除します。 繰り返す。 状態は、print、pattern、replacement、およびsubstitutionを順に循環します。 では、印刷モード、文字手段の出力「何かを行います」。 では、パターンモードで、「何かをする」という意味は、現在のパターンに文字を追加します。 で代替モードで、「何かをする」という意味では、現在の交換に文字を追加します。 で置換モードでは、ルールの異なるセットに従ってください。置換が不可能になるまで、現在のパターンの最初の出現をプログラムの現在の置換で繰り返し置換します。その時点で、パターンと置換をクリアし、印刷モードに戻ります。 プログラム/foo/foobar/foo foo fooでは、次のことが起こります。 /foo/foobar/foo foo foo foo foo foo foobar foo foo foobarbar foo foo foobarbarbar foo foo ... これは永久にループし、置換モードを終了しません。同様に、パターンが空の場合、プログラムの先頭にある最初の空の文字列は常に一致するため、置換モードは永久にループし、停止することはありません。 例 no 出力:no。 / world! world!/Hello,/ world! world! world! 出力:Hello, …

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