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

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

14
配列をビンに入れます
この単純なチャレンジでは、L負でない整数の入力配列と、b0より大きく、の長さ以下のビンの数が与えられますL。コードはM、長さがbで、配列をビニングした新しい配列を返す必要がありLます。これは例で簡単に説明できます。 L = [1,0,5,1]をb = 2返しますM = [1,6]。 L = [0,3,7,2,5,1]をb = 3返しますM = [3,9,6]。 これまでのところ、とても簡単です。ただし、この質問でbは必ずしも分割する必要はありませんlen(L)。この場合、最後のビンはそれを補うための数が少なくなります。 おそらく最後のビンを除く各ビンは、その合計に寄与する数と同じ数でなければなりません。最後のビンには、他のビンよりも多くの数字が含まれてはなりません。最後のビンには、他のルールに従って、できるだけ多くの数字が含まれている必要があります。 L = [0,3,7,2,5,1]をb = 4返しますM = [3,9,6,0]。 M = [10,8,0,0]3番目のビンにはビン1ととして名前の番号が含まれていないため、出力は受け入れられません2。 L = [0,3,7,2,5]をb = 2返しますM = [10,7]。 M = [3, 14]最後のビンには3要素が含まれていますが、最初のビンには2。 L = [1,1,1,1,1,1,1]をb = 3返しますM = [3,3,1]。 最後のルールとして、コードは線形時間で実行する必要があります。 任意の言語またはライブラリを使用でき、便利な方法で入力が提供されると想定できます。 解決できない入力がいくつかあることがわかります。たとえば[1,1,1,1,1]とb=4。あなたのコードは、それらの入力に対して好きなものを出力できます。

2
多項式の分解
厳密に1より大きい次数の積分多項式が与えられた場合、それを厳密に1より大きい次数の積分多項式の合成に完全に分解します。 詳細 整数多項式は係数として整数のみを持つ多項式です。 2つの多項式を考えるpと、組成物は、によって定義されます。q(p∘q)(x):=p(q(x)) 分解の積分多項式のはp不可欠な多項式の有限順序付けられたシーケンスであるすべてのためにと、すべてさらに分解性ではありません。分解は必ずしも一意ではありません。q1,q2,...,qndeg qi > 11 ≤ i ≤ np(x) = q1(q2(...qn(x)...))qi たとえば、係数のリストを使用したり、入力および出力として組み込みの多項式タイプを使用したりできます。 このタスクの多くの組み込み関数は、実際には整数ではなく、特定のフィールド上の多項式を実際に分解しますが、この課題には分解整数多項式が必要です。(一部の整数多項式は、有理多項式を含む分解と同様に整数多項式への分解を許可する場合があります。) 例 x^2 + 1 [x^2 + 1] (all polynomials of degree 2 or less are not decomposable) x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6 x - 1 [x^3 - 2, …

19
ダブルのベース
バックグラウンド IEEE 754倍精度浮動小数点形式は、64ビットで実数を表現する方法です。次のようになります。 実数nはdouble、次の方法でa に変換されます。 s数値が正の場合、符号ビットは0、それ以外の場合は1です。 の絶対値はnの形式2**y * 1.xxxで表されます。つまり、baseの2のべき乗倍です。 指数eはy(2 のべき乗)-1023です。 画分がfあるxxx最も重要な52ビットを取る部分(基部の小数部分)。 逆に、ビットパターン(sign s、exponent eおよびfraction fで定義され、それぞれ整数)は数値を表します。 (s ? -1 : 1) * 2 ** (e - 1023) * (1 + f / (2 ** 52)) チャレンジ 実数を指定するnと、のdouble表現の52ビットの小数部をn整数として出力します。 テストケース 0.0 => 0 1.2 => 900719925474099 (hex 3333333333333) 3.1 => 2476979795053773 (hex …
12 code-golf 

30
整数対数
整数が与えられるとN , P > 1、Mそのような最大の整数を見つけるP ^ M ≤ N。 I / O: 入力は2つの整数Nとで与えられますP。出力は整数になりMます。 例: 4, 5 -> 0 33, 5 -> 2 40, 20 -> 1 242, 3 -> 4 243, 3 -> 5 400, 2 -> 8 1000, 10 -> 3 ノート: 入力は常に有効です。つまり、常に1より大きい整数になります。 クレジット: 名前の功績は@cairdcoinheringaahingにあります。最後の3つの例は@Nitrodonによるもので、説明を改善した功績は@Giuseppeにあります。

5
スパース分度器
何らかの正の整数が与えられた場合n、マークの数が最も少ない分度器を設計します。これにより、2π/n(それぞれの測定で)の整数倍であるすべての角度を測定できます。 詳細 出力として、各マークの位置を表す0to n-1(または1to n)の範囲の整数のリストを出力できます。別の方法としては、長さの出力文字列/一覧表示することができますnと#、各マークの位置との_何もありません(アンダースコア)。(または2つの異なる文字をより便利になります。) 例:についてn = 5、あなたはすべての角度を測定することができるように、正確に3マークが必要2π/5, 4π/5, 6π/5, 8π/5, 2πで(例えば)1つのマークを設定することにより、01つのマーク、2π/5および1つのマークがで6π/5。これをリスト[0,1,3]または文字列としてエンコードできます##_#_。 例 出力は必ずしも一意ではないことに注意してください。 n: output: 1 [0] 2 [0,1] 3 [0,1] 4 [0,1,2] 5 [0,1,2] 6 [0,1,3] 7 [0,1,3] 8 [0,1,2,4] 9 [0,1,3,4] 10 [0,1,3,6] 11 [0,1,3,8] 20 [0,1,2,3,6,10] PS:これはスパースルーラーの問題に似ていますが、線形スケール(両端)の代わりに、円形(角度)スケールを考慮します。 PPS:このスクリプトは、それぞれのマークのセットの一例を計算する必要がありますn。オンラインでお試しください! PPPS:@ngnが指摘したように、この問題は次数の循環グループの最小差分ベースを見つけることと同等nです。最小注文はhttp://oeis.org/A283297にリストされており、いくつかの理論的範囲はhttps://arxiv.org/pdf/1702.02631.pdfにあります

5
分解リーダーの変更の削減
tl; dr:縮約素因数分解リーダーが変更される値を出力します。 すべての正の整数には一意の素因数分解があります。縮約素因数分解を、素因数の多重度のリストだけで、素因数のサイズ順に並べてみましょう。例えば、の減少素因数分解が1980ある[2, 2, 1, 1]、なぜなら1980 = 2 * 2 * 3 * 3 * 5 * 11。 次に、の整数上で、各素因数分解が発生する頻度を記録しましょう[1, 2, ..., n]。たとえば、[1, 2, ..., 10]では、次の縮約素因数分解が発生します。 [1]: 4 (2, 3, 5, 7) [2]: 2 (4, 9) [1, 1]: 2 (6, 10) []: 1 (1) [3]: 1 (8) n最も頻繁に起こる減らされた素因数分解に至るまでリーダーを呼びます[1, 2, ..., n]。したがって、の簡約素因数分解リーダーはn …

3
韓国語をローマ字化する
はい、それは基本的にあなたはロマナイザー、ベイビーですが、より難しいです。以下のように、道難しいです。 韓国語を学ぶのは難しいです。少なくともアジア以外の人にとっては。しかし、彼らには少なくとも学ぶ機会がありますよね? あなたがしなければならないこと 韓国語の声明が送られます。たとえば、안녕하세요。入力をローマ字の発音に変換する必要があります。与えられた例では、出力はになりますannyeonghaseyo。 今では技術的になります 韓国語の文字には、開始子音、母音、および終了子音の3つの部分があります。エンディング子音はキャラクターに存在しない場合があります。 例えば、아あるㅇ(子音の開始)およびㅏ(母音)と손されているㅅ(子音の開始)、 ㅗ(母音)、及びㄴ(子音を終了)。 Evert子音と母音には発音があります。各子音の発音は次のとおりです。 Korean ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ Romanization Starting g kk n d tt r m b pp s ss – j jj ch k t p h …

11
バランスのとれたゼロワンエンコーディング
仕事 A-Z独自のお気に入りのスキームを使用して、ゼロと1のみを使用して、大文字のアルファベット()のみで構成される文字列をエンコードします。しかし、ルールはそれほど単純ではありません! ルール プログラム/関数は、長さ8の有効な入力文字列を正しく処理する必要があります。 結果は、すべての入力に対して同じ長さでなければなりません。 結果は、入力ごとに異なる必要があります。 結果はできるだけ短くする必要があります。 結果はゼロと1のバランスがとれている必要があります(ゼロの数と同様の数があります)。それらは等しくする必要はありません(つまり、完全にバランスが取れています)が、あなたのスコアはそのために罰せられます。 エンコードをデコードするプログラム/機能を提供する必要はありません。 入出力 の代わりに26個の異なる印刷可能なASCII文字のセットを受け入れることを決定できA-Zます。 およびの代わりに、異なる印刷可能なASCII文字の任意のペアを出力することを決定できます。01 ビット文字列の代わりに整数を出力することはできません。これは、先頭にゼロが含まれている可能性があり、実際にルール2を満たしているかどうかが不明だからです。 デフォルト(A-Z入力および01出力)から逸脱することに決めた場合は、サブミットで入力/出力文字セットを指定する必要があります。 得点 基本スコア:コードサイズ、またはプログラムが空の場合は1。 罰則 長さのペナルティ:乗算 1.5 ** (encoded length - 42) 短くしてもボーナスはありません。42は、アルファベットサイズ26の8長ストリングの完全にバランスの取れたエンコードの最小長です。 不均衡の場合のペナルティ:乗算2 ** max(abs(ones - zeros) for every valid input of length 8)、ここでonesおよびzerosは、それぞれ各出力の1および0のカウントです。 提出には、ペナルティ値に関する最悪の例(入力/出力)または理論的な説明を表示する必要があります。 最も低いスコアが勝ちます。 提出例 架空のエソラン、0バイト、スコア74733.8906 空のプログラムが入力文字のすべてのASCIIコードをバイナリで出力する仮想のエゾランを次に示します。 たとえば、AAAAAAAA入力として指定すると、プログラムは1000001連続して8回印刷します10000011000001100000110000011000001100000110000011000001。 入力アルファベットはに選択されますCEFGIJKLMNQRSTUVXYZabcdefh。この方法では、すべての文字はバイナリで7桁に変換され、ゼロから1までのカウントは文字ごとに1つだけ異なります(バイナリに変換すると、すべて3つの1と4つの0があります)。 出力の長さは常に56であり、最悪の場合の不均衡はのような入力で発生し、CCCCCCCCゼロは1より8倍多く出現します。 したがって、この提出のスコアは1.5 ** (56 - 42) …

7
暗号化しましょう!
チャレンジ 課題は、以下に指定されているルールを使用して、特定の文字列を暗号化することです。文字列には、小文字のアルファベット、数字、および/または空白のみが含まれます。 キャラクターと同等 さて、まず、各キャラクターの「同等」を見つける方法を知る必要があります。 文字が子音である場合、これは同等の検索方法です。 1) List all the consonants in alphabetical order b c d f g h j k l m n p q r s t v w x y z 2) Get the position of the consonant you are finding the equivalent of. 3) The equivalent …

8
ハフニアンをできるだけ早く計算する
課題は、行列のハフニアンを計算するために可能な限り速いコードを書くことです。 対称のHafnian 2n行列の2n行列はA次のように定義されます。 ここで、S 2nはから1までの整数のすべての順列の集合2n、つまりを表し[1, 2n]ます。 ウィキペディアのリンクはまた、興味を引くかもしれない異なる見た目の数式を提供します(さらにWebを見ると、さらに高速な方法が存在します)。同じWikiページで隣接行列について説明していますが、コードは他の行列でも機能するはずです。値はすべて整数であると仮定できますが、すべてが正であるとは限りません。 より高速なアルゴリズム もありますが、理解するのは難しいようです。そして、Christian Sieversが(Haskellで)最初に実装しました。 この質問では、行列はすべて正方形で、偶数次元で対称です。 参照実装(これは可能な限り遅い方法を使用していることに注意してください)。 Xcoder氏のpythonコードの例を次に示します。 from itertools import permutations from math import factorial def hafnian(matrix): my_sum = 0 n = len(matrix) // 2 for sigma in permutations(range(n*2)): prod = 1 for j in range(n): prod *= matrix[sigma[2*j]][sigma[2*j+1]] my_sum += prod return my_sum …

3
グルーヴィーなスパイラルに沿って熱心な「クイックブラウンフォックス」「ジャンプ」
前書き 指定されたルールに従って、有名なパングラムの発信スパイラルを出力するプログラムを作成します。 チャレンジ パングラムは、少なくとも一度与えられたアルファベットのすべての文字を使用した文です。最も有名なパングラムの1つは、Windowsフォントビューアーで広く使用されているパングラムです。つまり、「素早い茶色のキツネが怠け者の犬を飛び越えます」。課題は、このテキストに基づいてスパイラルを出力することです。 タスクは次の正確なテキストを出力します。 heeeeellllllllllllazzzzzzzzzzz hummmmmmmmmmmmmppppppppppppppy hubrrrrrrrrrrrrrrrrrrooooooosy hukyddddoooooooooooooooggggwsy hukyveeeeerrrrrrrrrrrrrrrrtwsy hukyvxjjjjjjjjjjuuuuuuuuuttwsy hukyvxkbbrrrrrrrrrrrrrrrmttwsy hukyvxkogggggggttttttttomttwsy tukyvokoellllllllllllahomttwsy tukyvokoeovvvvvvvvvvvzhomttwsy tukyvocoeoummmmmmmmmezhomttwsy tukyvocoeoufooooooopezhomttwsy tukyvocohoufroooooxpezhomttwsy tukyvoiohoufrquuuwxpezhomttwsy tucyvoiohoufbqttiwxpezhomttwsy tucyvoiohoufbeehiwxprzhomttwsy tucyvoiohoufkccciwxprzeomttwsy tjiyvoidhounnnnnnwxprzeomttwsy tjiyvoidhojjjjjjjjxprzeomttwsy tjiyvoidhssssssssssprzeopttwsy tjiyvoidttttttttttttrzeopttwsy tjiyvoiyyyyyyyyyyyyyyzqopttwoy tjiyvouuuuuuuuuuuuuuuuqwpttwoy tjiyvffffnnnnnnnnnnnnnnwpttwoy tjiyossssssssssssssssssspthwoy tjizzzzalllllllllllleeeeehhwoy tjuuqqqqqqqqqqqqqqqqqeeeeehnod txxxxxoooooooooooooooffffffnod reeeeevvvvvvvvvvvvvvvvvvvvvvod gggggggoooooooooooooood 生成方法は次のとおりです。 熱狂的なキツネがいて、パングラム「怠quickな犬を飛び越える茶色いキツネ」を楽しんだ。ある日、彼は外側のらせんの中心にいて、そこに飛び込んで絵を描くことにしました。 彼はパングラムを最初から最後まで行きたいと思います。また、アルファベットのn番目の文字である場合は、n回ペイントしたいと思います。 しかし、キツネは角を曲がるのがあまり得意ではなかったので、各角に到達すると、彼はまた停止して次の文字に切り替える必要がありました。 彼はまた、彼があることを強調しパングラムの3回繰り返すことを決めた迅速な茶色のキツネ。 あなたの仕事は、キツネがそれらのすべての文字を描いた後、スパイラルがどのように見えるかを示すことです。 (ストーリーテリングなしのプレーンバージョン) 有名なパングラム「茶色いキツネが怠zyな犬を飛び越える」が3回繰り返され、スペースが削除され、すべての文字が小文字になります。 thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog らせんは中心から始まり、文字「t」で始まり、右に行くことで始まり、時計回りに外側に進みます。現在の文字がアルファベットのn番目の文字である場合、次の文字にいつでも切り替わります スパイラルが角に達する、または 現在の文字は正確にn回印刷されます。 それをよりよく説明するために、最初の3つの単語「thequickbrown」に関連するスパイラルがどのように生成されるかを説明します。 rooooo rquuuw …

4
適切な合計で行列の数を計算する
Steenrod代数のMilnor基底で単項式を乗算する場合、アルゴリズムの一部には特定の「許容行列」の列挙が含まれます。 非負整数r 1、...、r mおよび s 1、...、s nの 2つのリストが与えられ、非負整数Xの行列 次の場合に許容されます j番目の列の合計はs j以下です。 2のべき乗で重み付けされたi番目の行の合計は、r i以下です。 仕事 リストr 1、...、r mおよびs 1、s 1、...、s nのペアを取り、これらのリストに許容される行列の数を計算するプログラムを作成します。プログラムは、必要に応じて、オプションでmおよびnを追加の引数として使用できます。 これらの番号は、好きな形式で入力できます。たとえば、リストにグループ化したり、単項でエンコードしたり、その他何でもかまいません。 出力は正の整数でなければなりません 標準の抜け穴が適用されます。 得点 これはコードゴルフです。バイト単位の最短ソリューションが勝ちです。 例: 以下の場合[2]と[1]、2人の許容行列があります。 用[4]と[1,1]3人の許容行列があります。 用[2,4]と[1,1]5人の許容行列があります。 テストケース: Input: [1], [2] Output: 1 Input: [2], [1] Output: 2 Input: [4], [1,1] Output: 3 Input: [2,4], [1,1] Output: 5 …

5
1つから2つを取得
この質問で見たように、複雑な論理ステートメントは、一般化された掃海艇の単純な接続詞で表現できます。ただし、一般的な掃海艇にはまだ冗長性があります。 これらの冗長性を回避するために、「Generalized-1 Minesweeper」という新しいゲームを定義します。 Generalized-1 Minesweeperは、任意のグラフで実行されるバージョンの掃海艇です。グラフには、「インジケータ」または「値」という2種類の頂点があります。値はオンまたはオフ(地雷または不発地)のいずれかになりますが、その状態はプレイヤーに知られていません。インジケータは、隣接するセルの1つが正確にオンであることを示します(鉱山)。インジケーターは地雷としてはカウントされません。 たとえば、一般的なマインスイーパの次の掲示板では、セルAとBが両方とも地雷であるか、どちらも地雷ではないことがわかります。 (図ではインジケーターは灰色でマークされ、値は白です) オフになっている値をクリックしてインジケーターを表示する通常の掃海艇とは異なり、一般化された掃海艇にはそのようなメカニズムはありません。プレーヤーは、グラフのどの状態でインジケータを満たすことができるかを単純に決定します。 あなたの目標は2、Generalized-1 Minesweeper を作ることです。Generalized-1 Minesweeperで構造を構築し、8つの特定のセルに対して、値のすべての可能な構成でちょうど 2つのセルがオンになるようにします。これ2は、従来の掃海艇と同じように動作することを意味します。ソリューションを作成するとき、値セルに特定の値を念頭に置いてはいけません。(H.PWizの質問への回答では、一部の値セルが状態から推定できる場合があります) 得点 回答は、最終グラフの頂点の数から8(8入力の場合)を引いたものでスコア付けされ、スコアが低いほど優れています。このメトリックで2つの回答が同点の場合、タイブレーカーはエッジの数になります。

3
「寛大な」金額のローン
前書き ローンを頼み続ける友人がいて、それに飽きています。今日、彼は再び融資を受けました。彼の申し出を断る代わりに、あなたは素晴らしいアイデアを得ます:できるだけ多くのコイン/手形を彼に与えることによってあなたの友人を荒らしてください。 チャレンジ 入力として受け取ります:あなたの友人がローンを望んでいるお金の量とあなたが持っているコイン/手形の量。このチャレンジでは、可能な金額は20.00ドル、10.00ドル、5.00ドル、2.00ドル、1.00ドル、0.25ドル、0.10ドル、0.05ドル、0.01ドルです。入力の例は次のとおりです。5.67, [5, 3, 4, 5, 5, 9, 8, 1, 2]、友人が$ 5.67を望んでいて、5ドルの20ドル札、3ドルの10ドル札などがある場合です。あなたの出力は、友人にできるだけ多くの金属/紙/プラスチックを与えるコイン/紙幣の量です。 友だちに必要な金額を正確に渡すことができない場合は、友だちが望む金額よりも大きい金額を最も近い金額で支払います。たとえば、友人が0.07ドルを望んでいるが[0, 0, 0, 0, 0, 2, 4, 2, 0]、持っているのがの場合、2枚の$ 0.05コインを与えます(1 0.10ドルではありません。 あなたの友人があなたが持っているよりも多くのお金を望んでいるなら、彼にあなたのすべてのお金を与えてください(そしてあなたが何も買う必要がないように祈ってください)。 テストケース Input: 6.54, [9, 8, 7, 6, 5, 4, 3, 2, 4] Output: [0, 0, 0, 1, 4, 1, 2, 1, 4] Input: 2, …
12 code-golf  math 

10
N次元シンプレックス(四面体)を作成する
任意の次元に対して作成できる最も単純なN次元形状はシンプレックスであり、これは互いに等しい距離にあるN + 1ポイントのセットです。 2次元の場合、これは正三角形、3次元の場合、これは正四面体、4次元では5セルなどです。 チャレンジ 入力として整数次元Nを指定すると、この次元のシンプレックスを表す配列/リスト/スタック/ N個の次元ポイントを出力します。つまり、互いに等しく、ゼロ以外の距離にあるN + 1個の頂点。 Luaでのリファレンス実装 例 1 -> [[0], [1]] 2 -> [[0, 0], [1, 0], [0.5, 0.866...]] 4 -> [[0, 0, 0, 0], [1, 0, 0, 0], [0.5, 0.866..., 0, 0], [0.5, 0.288..., 0.816..., 0], [0.5, 0.288..., 0.204..., 0.790...]] ノート 入力は標準形式の数値であり、常に1より大きく10より小さい整数になります。 ハードコーディングは1の入力に許可されますが、それ以上は許可されません。 妥当なエラーは出力で許可されます。浮動小数点演算またはトリガーの問題は無視できます。 N次元シンプレックスの変換は、レギュラーおよび非ゼロのままである限り許可されます。 …

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