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

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

8
ツェッケンドルフ表現の下での総和
ゼッケンドルフの定理は、すべての正の整数は隣接しないフィボナッチ数の合計として一意に表すことができることを示しています。この課題では、2つの数値の合計をツェッケンドルフ表現で計算する必要があります。 LET F NであるN番目のフィボナッチ数どこ F 1 = 1、 F 2 = 2、および すべてのk > 2の場合、F k = F k -1 + F k -2。 非負の整数nのツェッケンドルフ表現 Z(n)は、次のような正の整数のセットです。 N =Σ I ∈Z(N) F I 及び ∀ I ∈Z(N) iは + 1つの∉Z(N)。 (プロサでは:数値nのゼッケンドルフ表現は、これらのインデックスのフィボナッチ数の合計がnになるような正の整数のセットであり、2つの隣接する整数がそのセットの一部ではありません) 特に、ツェッケンドルフの表現は独特です。ツェッケンドルフ表現の例をいくつか示します。 Z(0)=∅(空のセット) Z(1)= {1} Z(2)= {2} Z(3)= {3}({1、2}は3のツェッケンドルフ表現ではありません) Z (10)= …

6
ライリーの定理
S.ライリーは1825年に定理に従って証明しました。 すべての有理数は、3つの有理立方体の合計として表すことができます。 チャレンジ いくつかの有理数を考えるとr∈Qr∈Qr \in \mathbb Q 3つの有理数見つけ、B 、C ∈ Qは、そのようなことを、R = A 3 + B 3 + C 3。a,b,c∈Qa,b,c∈Qa,b,c \in \mathbb Qr=a3+b3+c3.r=a3+b3+c3.r= a^3+b^3+c^3. 詳細 提出は、十分な時間とメモリが与えられたすべての入力に対してソリューションを計算できる必要があります。つまり、たとえば、2つの32ビットintが分数を表すだけでは不十分です。 例 305230717280142=39829338766813−6366005495153−39775055545463=607029013173+239612924543−619227128653=(12)3+(13)3+(14)3=03+03+03=(12)3+(23)3+(56)3=(1810423509232)3+(−1495210609)3+(−25454944)330=39829338766813−6366005495153−3977505554546352=607029013173+239612924543−6192271286533071728=(12)3+(13)3+(14)30=03+03+031=(12)3+(23)3+(56)342=(1810423509232)3+(−1495210609)3+(−25454944)3 \begin{align} 30 &= 3982933876681^3 - 636600549515^3 - 3977505554546^3 \\ 52 &= 60702901317^3 + 23961292454^3 - 61922712865^3 \\ \frac{307}{1728} &= \left(\frac12\right)^3 + \left(\frac13\right)^3 …

18
ウォーカーが参加!-アラン・ウォーカーのロゴ
アラン・ウォーカーは、彼のこれまでの人気曲「フェード」から知っているかもしれません。現在、彼の「フォロワー」は「ウォーカー」と呼ばれ、ロゴが付いています。これは簡略版です。 \\ \\ //\\ \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // \\ // //\\ \\ // \\// // \\ \\// // // \\ \\ //\\ // \\ //\\ \\// \\// \\ \\ このチャレンジの目標は、このロゴを印刷することです。 ルール: メタ標準に従って関数から文字列のリストを返す場合は、画面に出力するフッターを提供してください。 上記のロゴのすべてのキャラクターがそこにいなければなりません。ショートカットはありません! 最短バイト数が勝ちます!

7
ハフマンをコーディングしてください!
さもなければ、彼はあなたの家を吹き飛ばして吹き飛ばします! それは完全に無関係でした。この挑戦は実際にハフマンコーディングについてです。その要点は、特定のテキスト内の文字の頻度を利用して、その表現を短くすることです。言い換えれば、私たちのアルファベットがa通り抜けているzとしましょう。27文字です。5ビットには32文字分のスペースがあるため、それぞれを5ビットで一意にエンコードできます。ただし、多くの状況(英語や一般的な言語など)では、一部の文字は他の文字よりも頻繁に出現します。頻度の高い文字にはより少ないビットを使用し、頻度の低い文字には(おそらく)より多くのビットを使用できます。正しく実行すると、ビット数が全体的に節約され、元のテキストを一意に再構築できます。 「この質問はハフマンコーディングに関するものです」を例に取りましょう。このテキストの長さは37文字で、通常は37 * 8 = 296ビットですが、各文字に5ビットしか使用しない場合は37 * 5 = 185ビットのみです。心に留めておきます。 以下に、各文字とテキスト内のそれらの頻度の(ソート)テーブルを、頻度の高い順に並べています(_はスペースを表します)。 _ 5 i 4 n 3 o 3 s 3 t 3 u 3 a 2 f 2 h 2 b 1 c 1 d 1 e 1 g 1 m 1 q 1 関連する最適なコーディングは次のとおりです。 _ 101 i …

3
チェックメイトですか?
このサイトには多数のチェスのパズルがあるため、これがまだ投稿されていないことに完全に驚きました。私は自分でこれを考えていましたが、3月にサンドボックスに投稿したことについてAnushに感謝しますます。しかし、私は自分で先に進むことができるほど長いと思った。 チェスのチェックメイトは、キングが攻撃され、それを防御できる動きがない状況です。チェスの駒の動きに慣れていない場合は、ウィキペディアで詳しく知ることができます。 チャレンジ この挑戦のために、あなたのインプットはあなたが好きな表記法でチェス盤の位置になります。明確にするために、あなたの入力はチェス盤上の駒を色と位置とともに説明し、もしあれば可能性のある一時的な捕獲広場も示します。(キャッスルをチェックアウトすることはできないため、キャッスルする能力は無関係です。)FEN表記は便利ですが、便利なフォーマットであれば問題ありません。簡単にするために、あなたはそれがプレイする黒だと仮定することができます -これは、黒が常にチェックメイトされたプレイヤーであることを意味します。ホワイトがチェック、チェックメイト、またはステイルメイトにあるポジションは、このチャレンジでは無効と見なされます。 位置がチェックメイトの場合は真実の値を出力し、そうでない場合は偽の値を出力する必要があります。膠着状態はチェックメイトではないことに注意してください -キングを攻撃する必要があります! 真実のテストケース 1k5R / 6R1 / 8/8/8/8/8 / 6K1 b-- rn2r1k1 ​​/ pp1p1pQp / 3p4 / 1b1n4 / 1P2P3 / 2B5 / P5PP / R3K2R b-- kr5R / rB6 / 8/8/8 / 5Q2 / 6K1 / R7 b-- 2K5 / 1B6 / 8/8/8 / …

11
出力個別因子の直方体
出力個別因子の直方体 今日のタスクは非常に単純です。正の整数を指定すると、その因子によって形成可能な各直方体の代表を出力します。 説明 直方体の体積は、3辺の長さの積です。例えば、側面の長さは整数辺を有することができ、ボリューム4の直方体[1, 1, 4]、[1, 2, 2]、[1, 4, 1]、[2, 1, 2]、[2, 2, 1]、または[4, 1, 1]。しかし、これらのいくつかは、同じ直方体表す:例えば[1, 1, 4]と[4, 1, 1]同じ直方体が回転しています。そこボリューム4と整数辺と2つだけ異なる立方体は、次のとおり[1, 1, 4]と[1, 2, 2]。出力は、最初の直方体の任意の表現、および2番目の直方体の任意の表現にすることができます。 入力 あなたのプログラムは、整数単一の正を取る必要があります1 ≤ N ≤ 231− 11≤n≤231−11 \le n \le 2^{31}−1。 出力 可能なすべての直方体をリストまたはその他の受け入れ可能な方法で出力する必要があります。例えば Input Output 1 [[1, 1, 1]] 2 [[1, 1, 2]] 3 [[1, 1, …

14
アイリッシュスナップ:バリアントルール
前書き 最近、私と数人の友人がいくつかのカードをプレイすることに決め、そのうちの1人がこのチャレンジのインスピレーションとなったゲーム「アイリッシュスナップ」を提案しました。ただし、このゲームには、プレイできるさまざまなルールがあり、そのうちのいくつかがここにリストされていることが後でわかり ました。このチャレンジにあるルールは現在そのページにリストされていないため、「Variant Rules」という名前が付けられています チャレンジ 3枚のカードの配列が与えられたら、アイリッシュスナップのゲームで有効なスナップを行うかどうかに応じて、真偽値または偽値を出力します。 入力 入力は1から13までの3つの数字の配列で、1はエース、11はジャック、12はクイーン、13はキングを表します。入力は、上、中、下の任意の順序にすることができます。 ルール カードがアイルランドのスナップを作る場合の4つの異なる基準は次のとおりです。 トップとミドルカードは同じです トップとミドルカードには1つの違いがあります 上部と下部のカードは同じです 上部と下部のカードには1つの違いがあります これらの基準のいずれかが満たされている場合、真実の値を出力する必要があります。これに加えて、カードに1つの違いがあることを必要とする2つの基準については、「ラップアラウンド」します。つまり、エースとキングは1の違いがあると見なされます。 テストケース Input (Bottom, Middle, Top) -> Output 1 13 7 -> False 1 4 13 -> True 9 3 6 -> False 8 9 7 -> True 2 6 5 -> True 12 5 11 …

4
議席の分配
前書き 総選挙では、議席ごとに定価を計算したいと思います。これは、N >= 0配布されるシートとnsパーティーごとの投票リストについて、次のdような数を見つけたいことを意味します。 sum(floor(n/d) for n in ns) == N 物事を面白くするために(さらに現実の世界に近づけるために)、さらに2つの事実を追加します。 2つの政党が「連合」に集まって、その中のすべての政党の票の合計によって議席が「連合」に与えられます。次に、「連合」が獲得した座席は、同様の方法でパーティ間で分割されます(除数を見つけるなど)。 一定の割合の票(3.25%など)を渡さなかった党は自動的に0議席を獲得し、その票は「連合」にカウントされません。 チャレンジ あなたが与えられます: リストのリスト。ネストされた各リストには整数(投票数)が含まれ、単一のパーティの場合は長さ1、「連合」の場合は長さ2です。 議席を獲得するための票の最小割合(別名「弾幕」の「バー」)、分数(したがって、3.225%は0.0325として与えられます) すべての関係者間で分配される座席の総数(整数) あなたは同じ入れ子になったリスト構造を印刷し、投票数を議会の議席に置き換えます。 勝者は、バイト数が最も少ないコードです。 コーナーケース: 複数の可能な除数が存在する可能性があります(通常は存在します)。出力に含まれていないため、実際には問題ではありません。 想像N=10とns = [[1]]除数が0.1であってもよいので、(ない整数) いくつかの例は、例えば、解くことができませんns=[[30],[30],[100]]、bar=0、N=20。d=7.5フロア化された値の合計が19から21にジャンプする境界があります。これらのケースを解決することは期待されていません。(このケースを指摘してくれたコミュニティメンバーArnauldに感謝します) 入力と出力の例 非常に最適化されていないPython3の例: from math import floor def main(_l, bar, N): # sum all votes to calculate bar in votes votes = sum(sum(_) for …

28
2つの文字列から1つの文字列への注入
チャレンジ 入力として文字列の順序付きペアを、出力として1つの文字列をとる単射関数を適用するプログラムを作成します。つまり、各入力は一意の出力にマップする必要があります。 仕様 入力があってもよい、任意の任意の長さの2つの文字列のみ印刷可能なASCII文字(コードからなるであろう[32,126][32,126][32, 126])。 同様に、出力文字列には長さの制限はありませんが、印刷可能なASCII文字のみで構成する必要があります。 言語が任意の長さの文字列を処理できない場合、プログラムは単に任意のサイズの文字列に対して理論的に機能する可能性があります。 入力から出力へのマッピングは、プログラムの実行間で一貫している必要があります。それ以外の場合、インジェクションである限り、使用するマッピングは完全にユーザー次第です。 入力が順序付けられます。2つの入力文字列が異なる場合、それらはスワップされた場合とは異なる出力を生成するはずです。s≠t⟹f(s,t)≠f(t,s)s≠t⟹f(s,t)≠f(t,s)s \neq t \implies f(s, t) \neq f(t, s) すべての文字列が可能な出力である必要はありません。 各言語の最短回答が勝ちます! テストケース 次の入力はすべて異なる出力になるはずです。混乱を避けるため、文字列はギメット(«»)で囲まれ、単一のスペースで区切られています。 "こんにちは世界" «lelho»«ドロール» «diffe»«_rent» "同じではありません" «コード»«ゴルフ» «Co»«deGolf» «CodeGolf»«» «»«» «»«» «»«» «»«» «»«» «abc "、»«def» «abc»«、 "def» «abc '»«' def» «abc '»«' def» «\»« "» «\\»«\ "»
13 code-golf  string 

12
すべての
前書き 数論では、その素因数がすべて最大kであるとき、数はkkk平滑であると言います。ので、例えば、2940 7滑らかで2940 = 2 2 ⋅ 3 ⋅ 5 ⋅ 7 2。kkk2940=22⋅3⋅5⋅722940=22⋅3⋅5⋅722940=2^2\cdot3\cdot5\cdot7^2 ここでは、kkk -smoothのペアを、両方がkkk -smoothである2つの連続した整数として定義します。7平滑対の例は、あろう(4374,4375)(4374,4375)(4374,4375)ので、4374=2⋅374374=2⋅374374=2\cdot3^7及び4375=54⋅74375=54⋅74375=5^4\cdot7。楽しい事実:これは実際には最大の7スムーズペアです。 ストーマーはことを1897年に証明したすべてのためkkk、有限個しか存在しkkk -smoothペア、そしてこの事実は、次のように知られているストーマーの定理。 チャレンジ あなたの仕事は、素数入力kkk与えられると、すべてを出力または返すプログラムまたは関数を書くことですkkk滑らかなペアを重複せず任意の順序で(ペア内の順序は関係ありません)ことです。 素数pppおよびqqqでは、p&lt;qp&lt;qp<qであると仮定すると、すべてのppp -smoothペアもqqq -smoothペアです。 サンプルI / O Input: 2 Output: (1, 2) Input: 3 Output: (1, 2), (2, 3), (3, 4), (8, 9) Input: 5 Output: (1, 2), (2, 3), (3, …

13
因数分解ゲーム
入力 単一の整数1≤x≤10151≤x≤10151 \leq x \leq 10^{15}。 出力 積xxxを持つ明確な正の整数の最大数。 例 入力:1099511627776。出力:9.考えられる最適な要因のリスト:(1、2、4、8、16、32、64、128、4096)。 入力:127381。出力4.考えられる最適な因子のリストの1つは、(1、17、59、127)です。 この古い質問に関連しています。
13 code-golf  math 

17
数字を絵文字数学に変換[終了]
閉じた。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 9か月前に閉鎖されました。 ユーザーが作成したビデオゲーム「Keep Talking And Nobody Explodes」のモジュールを作成したEmoji Mathでは、数字は絵文字の文字列として記述されます。各絵文字は10桁の基本を表します。以下は、数字と絵文字間の変換表です。 Digit | Emoticon 0 | :) 1 | =( 2 | (: 3 | )= 4 | :( 5 | ): 6 | =) 7 | (= 8 | :| 9 | |: 番号を指定して、Emoji Mathエンコーディングで出力します。数字以外の文字が存在しないと仮定することもできます。 これはcode-golfであるため、バイト単位の最短回答が優先されます。
13 code-golf  number 

7
最小限の一意の文字を使用して整数のラダーを生成します(C ++)
私はコードゴルフのスポーツは初めてです。C ++で一意の文字の最小数を使用して整数のはしごを生成しようとしています。 整数4が与えられたとしましょう。 次のラダーを生成します。 1 1 2 1 2 3 1 2 3 4 要するに、私のプログラムはstdinから正の整数を読み取り、このラダーを出力に出力します。できる限り少ない数の一意の文字でこれを実行しようとしています。 私のプログラムは次のとおりです。 #include&lt;iostream&gt; int i; int ii; int iii; int iiii; main() { std::cin &gt;&gt; i; for(ii++; ii &lt;= i; ii++) { int iii = iiii; for(iii++; iii &lt;= ii; iii++) { std::cout &lt;&lt; iii &lt;&lt; …

4
ロック、ペーパー、はさみ、トカゲ、スポックトーナメント
5月4日の直後にスタートレックの参照を含むチャレンジを与えることは嫌われるかもしれませんが、ここに行きます。 あなた、ルーク、アナキン、パルパティーン、ヨーダ、ハンソロは、ロック、ペーパー、シザー、トカゲ、スポックの非常識なトーナメントに参加しています。 ここでの問題は、固定された順序の移動のみを使用できることです。注文が「R」の場合、すべてのプレイヤーに負けるか勝つまで、Rockを使用する必要があります。注文がRRVの場合、2つのロックとそれに続くスポックを使用し、勝つか負けるまで繰り返す必要があります。 Luke、Anakin、Palpatine、Yoda、Han Soloがそれぞれの注文を提出しました。専門のハッカーであるあなたは、それぞれの注文を手に入れました! この知識があれば、トーナメントの順序を設計することになります。誰もが勝ちたいので、全員を破ってトーナメントに勝つような順序を作成します。しかし、これはすべての状況下で可能とは限りません。 勝利の可能性がある注文がある場合は、それを印刷してください。勝つ方法がない場合は、-1(または0またはFalseまたは「不可能」)を出力します。 入力:5つの注文のリスト 出力:単一の注文または-1 サンプル入力1 R P S L V サンプル出力1 -1 説明1 あなたが最初の動きで何をプレイしても、あなたを打ち負かす人が少なくとも一人はいるでしょう。したがって、あなたが勝つことは不可能です。 サンプル入力2 RPS RPP R SRR L サンプル出力2 RPSP 説明2 最初の動きでロックをプレイすると、最終的に「L」と「SRR」を破って残りの部分と結びつきます。これは、トカゲとハサミがロックに負けたためです。次にペーパーをプレイすると、「R」を破って残りの2を引きます。これは、ロックがペーパーに負けたためです。次にハサミをプレイすると、ハサミが紙を破るときに「RPP」に勝ちます。 最後に、PaperがRockを倒すと、Paperで「RPS」を破ります。 表記法のリストを次に示します(5つのリテラルを使用できますが、回答で指定してください)。 R : Rock P : Paper S : Scissor L : Lizard V : Spock すべての可能な結果のリストは次のとおりです。 winner('S', 'P') -&gt; …
13 code-golf 

30
ASCIIミーム矢印ジェネレーター
仕様書 数値を指定するとn、&gt;サイズがASCIIの「ミーム矢印」(より大記号)を出力しますn。 n 常に0より大きい正の整数になります。 例 n = 2 \ \ / / n = 5 \ \ \ \ \ / / / / / サンプルコード 以下は、正しい結果を返す、Crystalで作成されたサンプルプログラムです。として実行します./arrow 10。 arrow.cr: def f(i) i.times { |j| j.times { print ' ' } puts "\\" } i.times { |j| (i-j-1).times { print ' …

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