タグ付けされた質問 「code-golf」

コードゴルフは、ソースコードの最小バイトで特定の問題を解決するための競争です。

16
sedでのゴルフのヒント
sedでゴルフをするための一般的なヒントは何ですか?コードゴルフの問題に適用でき、sedに少なくともある程度固有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。 回答ごとに1つのヒントを投稿してください。
19 code-golf  tips  sed 

10
ソローは投げたが、トロールはタフなトラフを投げる
これら9つの紛らわしいほど類似した単語のそれぞれに、任意の方法で1〜9の番号を割り当てます。 though through thorough Thoreau throw threw trough tough troll 文字列を取り込むプログラムを作成します。入力がこれらの9つの単語のいずれかである場合、割り当てた番号を出力します。入力が上記の単語のいずれでもない場合、プログラムは何でもできます(エラーや永久ループを含む)。 単語は大文字と小文字を区別します。たとえばThoreau、1〜9の数字を生成するthoreau必要がありますが、必ずしも同じとは限りません。 例 次のように番号を割り当てるとします。 though 9 through 2 thorough 7 Thoreau 6 throw 3 threw 5 trough 4 tough 1 troll 8 ときにtough入力され、1出力する必要があります。 ときにthrough入力され、2出力する必要があります。 ときにthrow入力され、3出力する必要があります。 。。。 ときにthough入力され、9出力する必要があります。 他のすべての入力は何でもできます。 詳細 stdinまたはコマンドラインを介して入力文字列を取得し、stdoutに出力します。 出力には、単一の末尾の改行が含まれる場合があります。 プログラムの代わりに、文字列を取り込んで通常どおり結果を出力する関数を作成するか、結果を返すことができます。 バイト単位の最短の提出が勝ちます。

14
スピンタックス{タスク|問題|質問}
Spintaxを使用した記事の回転 記事の紡績は、検索エンジン最適化手法であり、これにより、検索エンジンオプティマイザーは関連するコンテンツの一意のバージョンを記事ディレクトリ、Web 2.0サイト、またはバックリンクの他のソースに投稿します。 Webサイトの作成者が自分のサイトで使用することもありますが、通常は回避されます。これは、スピンコンテンツの品質が手書きコンテンツよりも低くなるためです。スピニングは、既存の記事または記事の一部を書き換え、特定の単語、フレーズ、文、または段落全体を任意の数の代替バージョンに置き換えて、各スピンでわずかに異なるバリエーションを提供することで機能します。 このプロセスは完全に自動化するか、手動で書き直すことができます。今日の仕事は、Spintaxを含む文字列を解釈するプログラムまたは関数を作成することです。これは、プログラムが使用可能なさまざまなオプションを読み取るための構文です。以下はSpintaxを使用する文字列の例です。 {Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!} ご覧のとおり、「スパン」される文字列のセクションは中括弧で囲まれ、個々のオプションは|文字で分割されます。これが生成する可能性のあるいくつかの例文を以下に示します。 Hi there, user! What's up? Hello, user! How are you? Bonjour, user! Feeling alright? Hello, user! What's up? Hi there, user! I caught a fish! あなたの仕事 あなたの使命は、あなたがそれを受け入れることを選択した場合、Spintaxを含んでも含まなくてもよい入力文字列を受け取るプログラムまたは関数を作成し、文字列の5つのバージョンをランダムに印刷することですオプションの各ブロックから選択肢の1つを選択してことです。いくつかの仮定を立てることができます。 ネストされたSpintaxを処理する必要はありません({This|is {an|one}|example})。 |、{および}文字がどこにも他のSpintaxブロック内より発生しません。 コードが言語の乱数関数を使用してオプションを選択している限り、5つの出力文が異なるかどうかを確認する必要はありません。 入力が改行で終わると仮定することができます。 ルール …
19 code-golf 

14
パリンドローム逆転加算
パリンドローム逆転加算 反転加算のプロセスでは、作成された数字が回文になるまで、その逆に数字が追加されます。たとえば、68から始める場合、プロセスは次のようになります。 68 + 86 => 154 + 451 => 605 + 506 => 1111 ご覧のとおり、これには回文数を得るために3つの追加が必要でした。で開始する場合は89、24の手順が必要になります(詳細はこちらで確認できます)。 回文に到達する前にとられたほとんどのステップの世界記録は261であり、これ1186060307891929990は10 118よりも大きい数を生み出します。しかし、パリンドロームを取得することができなかった数がかなりありました。これらはLychrel番号と呼ばれます。 私たちはベース10で作業しているので、これらの数字が回文に決して到達しないという証拠が存在しないため、実際には候補と呼ぶことができるだけです。たとえば、10を基数とする最小のLychrel候補は196であり、10億回をはるかに超える反復を経験しています。回文が存在する場合、10 10 8.77よりもはるかに大きくなります。比較として、その数の1が原子に内接している場合、2.26772×10 588843575宇宙分の原子が必要です。 あなたのタスク 整数入力を受け取り、回文に到達するために必要なステップ数を返すか出力するプログラムまたは関数を作成します。Lychrelの候補に対処する必要はありません(つまり、Lychrelの候補が与えられると、プログラムはエラーをスローするか、永久に実行できます)。 テストケース: f(0) => 0 f(11) => 0 f(89) => 24 f(286) => 23 f(196196871) => 45 f(1005499526) => 109 f(1186060307891929990) => 261 ルール 標準的な抜け穴はありません。 ボーナス フォーマットされた各追加ステップを印刷する場合n …

13
洗練されたパーティション
整数の配列を考えます: [1, 0, 9, 1, 3, 8] このリストを連続したサブリストに分割する方法はたくさんあります。3つあります。 A: [[1, 0, 9], [1, 3, 8]] B: [[1], [0, 9], [1, 3], [8]] C: [[1, 0], [9, 1], [3, 8]] サブリストを結合してYからXを取得できる場合、パーティションYと別のパーティションXの改良版を呼び出します。 のB洗練もA同様です。最初の2つのサブリストと最後の2つのサブリストを結合して戻すと、が得られAます。しかしC、それは洗練されたものではありません。それから回復するにはA、9とを分割する必要があります。また、どのパーティションもそれ自体が洗練されたものです。1A サブリストまたは要素をいつでも再配置することは許可されていないことに注意してください。 チャレンジ 2つのパーティション(整数のリストのリスト)Xおよびが与えられY、Yがの洗練であるかどうかを判断しXます。 あなたは、パーティションのみから整数が含まれていることを仮定してもよい0の9包括的、。あなたはそれXをY同じリストのパーティションであると仮定してはなりません(そうでない場合、互いの改良でもありません)。Xおよび/またはY空であっても、空のサブリストが含まれることはありません。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 入力は、任意の便利な文字列またはリスト形式で取得できます。要素は1桁の整数のみであるため、サブリスト内の区切り文字を省略することもできますが、先頭0のsが可能なことを確認してください。あなたは取ることを選んでもよいXし、Y逆の順序で。 出力は、洗練されている場合は真実であり、そうでない場合は偽である必要Yがあります。X コードは、妥当なデスクトップマシンで1秒以内に以下の各テストケースを解決できる必要があります。(これは、単純なブルートフォースソリューションを回避するための単なる健全性チェックです。) これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。 テストケース 各テストケースは、と書かれた独自の行にありX Yます。GolfScript / CJamスタイルの配列表記を使用して、水平方向のスペースを節約しています。 真実: [] [] [[0]] [[0]] …

9
スペードトリックの勝者
Spadesのゲームで4枚のカードトリックで勝つ人を決定するコードを記述します。少ないバイトが勝ちます。 入力は、TH QC JH 2H(Ten of Hearts、Queen of Clubs、Jack of Hearts、Two of Hearts)のように順番に再生される4枚のカードをリストする文字列です。カードは、スーツfrom CDHSと値fromの2つの文字で与えられます23456789TJQKA。入力が有効であり、カードが異なることが保証されます。 トリックの勝者には1、2、3、または4の数字を出力する必要があります。例TH QC JH 2Hでは、ハートのジャックがトリックに勝つため、3を出力する必要があります。 入力と出力は、記述されているとおりでなければなりませんが、末尾の改行はオプションです。 トリックに勝つためのスペードのルールは次のとおりです。勝ったカードは4つの最高のカードですが、いくつか注意点があります。スペードはトランプスーツであるため、スペードはスペード以外を上回ります。最初にプレイされたカードのスーツはリードスーツで、そのスーツまたはスペードのカードのみがトリックに勝つ資格があります。同じスーツのカードは、その値によって比較されます。値は、昇順で示され23456789TJQKAます。 テストケース: TH QC JH 2H 3 KC 5S QS 9C 3 QD 2D TD 5D 1 9S 5D AD QS 4 3D 4C 3H JH 1 9S 4S TS JS …

15
デイ#4のランダムゴルフ:バートランドパラドックス
シリーズについて まず、これを他のコードゴルフチャレンジと同様に扱い、シリーズについてまったく心配することなく答えることができます。ただし、すべての課題にリーダーボードがあります。最初の投稿では、リーダーボードとシリーズに関する詳細情報を見つけることができます。 このシリーズにはたくさんのアイデアが並んでいますが、将来の課題はまだはっきりしていません。何か提案があれば、関連するサンドボックスの投稿でお知らせください。 穴4:バートランドパラドックス バートランドパラドックスが示す円内にランダムコードを選ぶための方法の異なる方法が和音、その中点とその長さの異なる分布をもたらすことができる興味深い問題です。 この課題では、「正しい」方法、つまりスケーリングと変換の下で不変なコードの分布を生成する方法を使用して、単位円のランダムなコードを生成することになっています。リンクされたウィキペディアの記事では、「方法2」はそのような方法です。 正確なルールは次のとおりです。 返される和音の数Nを指定する1つの正の整数を取る必要があります。出力はN、ラジアン単位の極角で指定された単位円上の2点としてそれぞれ指定されたコードのリストである必要があります。 コードは、2つの角度のそれぞれに対して少なくとも2 20の異なる値を返すことができるはずです。使用可能なRNGの範囲が狭い場合、最初に組み込みのRNGの上に十分に大きい範囲のRNGを構築するか、独自の適切なRNGを実装する必要があります。このページはそのために役立ちます。 和音の分布は、リンクされたウィキペディアの記事の「方法2」で作成されたものと見分けがつかない必要があります。別のアルゴリズムを実装してコードを選択する場合は、正確性の証明を含めてください。どのアルゴリズムを実装する場合でも、理論的には単位円で有効なコードを生成できる必要があります(基礎となるPRNGの制限または精度の制限されたデータ型を除く)。 実装では、浮動小数点数(少なくとも32ビット幅)または固定小数点数(少なくとも24ビット幅)を使用して返す必要があり、すべての算術演算は16 ulp以内で正確でなければなりません。 完全なプログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(出力)パラメーターを介して出力を生成できます。 出力は、個々の数字が明確に区別可能であり、それらの合計数が常に偶数である限り、任意の便利なリスト形式または文字列形式にすることができます。 これはコードゴルフであるため、最短の提出(バイト単位)が優先されます。そしてもちろん、ユーザーごとの最短投稿もシリーズの総合リーダーボードに入ります。 可視化 次のスニペットを使用して、生成された行をレンダリングし、それらの分布を検査できます。角度のペアのリストをテキスト領域に貼り付けるだけです。スニペットは、数値が単純な10進数(科学表記法ではない)である限り、ほぼすべてのリスト形式を処理できる必要があります。分布をよく理解するには、少なくとも1000行を使用することをお勧めします。また、以下の記事に記載されているさまざまな方法のサンプルデータも提供しました。 コードスニペットを表示 function draw() { document.getElementById("output").innerHTML = svg } function drawLines() { lines = document.getElementById("lines").value; var e = prefix; //e += '<circle cx="' + offset + '" + cy="' + offset + '" …

3
Pythonで2つの変数のいずれかを割り当てるより短い方法はありますか?
これはpythonでのゴルフのヒントの質問です。 Pythonで行った複数のゴルフでは、ブール値によって選択された2つの変数のいずれかに固定値が割り当てられます。選択された変数は指定された値で上書きされ、もう一方は変更されません。 17文字: if b:y=z else:x=z 条件値の割り当ては簡単ですが、条件変数への割り当ては不格好に思えます。私が見逃している短い方法があるのだろうかと思っています。 x,y代わりにlistを使用した場合、これは簡単にLなりますが、コンテキストでは書き込みL[0]を行うのに十分な変数の参照が必要でL[1]あり、禁止されていると想定します。変換に時間がかかりすぎる: 20文字: L=[x,y];L[b]=z;x,y=L 私が知っている最速の方法は、Python 2を使用することですexec。これは奇妙です。 16文字、Python 2: exec"xy"[b]+"=z" タプル選択はより長いようです: 18、19、18、18文字: x,y=b*(x,z)or(z,y) x,y=[z,x,y,z][b::2] y,x=[y,z,x][b:b+2] y,x,*_=[y,z,x][b:] # Python 3 より短い方法や文字を節約する最適化はありますか?あなたは想定できbている0か1、またはFalsey Truthyだけではなく、それが助け場合も、データ型と値についての仮定を行います。
19 code-golf  tips  python 

8
文字列から単一行と複数行のコメントを削除します
ゴール 選択したプログラミング言語を使用して、Cプログラムを表す文字列からコメントを削除する最短のプログラムを作成します。 入力 文字列は任意の形式の入力として使用できますが、変数として使用することもできます。 説明書 次の2種類のコメントを削除します。 複数行コメントで始まり、/*で終わる*/ //Linuxスタイルの改行(LF、\n)で始まり、末尾が単一行のコメント 文字列内のコメントは削除されません。この課題のために、考慮する必要があるのは、"区切り文字列のみです。特に、'区切り文字リテラルの可能性は無視できます。3文字表記と行継続(/\<LF>*...)を無視することもできます。 例 入力: #include <stdio.h> int main(int argc, char** argv) { // this comment will be removed if (argc > 1) { printf("Too many arguments.\n"); // this too will be removed return 1; } printf("Please vist http://this.will.not.be.removed.com\n"); printf("/* This will stay */\n"); …

6
23940を思い出すための記憶
主要なシステムがあるニーモニックそれらがより容易に記憶することができるように言葉に番号を変換するための装置。 単語の発音に基づいていますが、チャレンジのために物事を簡単にするために、単語のつづり方のみを考慮します。これは、いくつかの誤った変換があることを意味しますが、それは大丈夫です。 簡略化されたメジャーシステムを使用して数値を単語に変換するには: それぞれ0をsまたはに置き換えますz。(一部は可能性がsあり、一部は可能性がありますz。以下も同様です。) それぞれを交換1しtたりdまたはth。 それぞれ2をに置き換えますn。 それぞれ3をに置き換えますm。 それぞれ4をに置き換えますr。 それぞれ5をに置き換えますl。 それぞれを交換6しjたりshまたはch。 それぞれ7をkor cまたはgorで置き換えますq。 それぞれ8をfまたはに置き換えますv。 それぞれ9をpまたはに置き換えますb。 可能であれば、文字をaehiouwxy任意の場所に追加して、実際の英語の単語を作成します。 唯一の例外はh、sまたはの後に挿入できないことcです。 数値は、実際には数字0〜9の任意の文字列(小数、コンマ、または記号なし)にすることができます。 単語には小文字のa〜zのみを含めることができます。 例 番号32はとして変換する必要があります?m?n?。ここで?、文字から作成された有限の文字列aehiouwxy(必要に応じて、無料のモノイドからの文字列)を表します。これが本当の英語の単語の中に作ることができる多くの方法があります:mane、moon、yeoman、など 番号05は?s?l?またはとして変換できます?z?l?。いくつかの可能性があるeasily、hassleとhazel。単語shawlは許可されhませんs。として誤って読み取られ65ます。 チャレンジ 0から9の数字のストリングを取り込んで、簡略化されたメジャーシステムニーモニックを使用して変換できるすべての単語を見つけるプログラムまたは関数を作成します。 プログラムは、すべての「本当の」英語の単語を定義する単語リストテキストファイルにアクセスできます。このファイルの各行には1つの小文字のazワードがあり、オプションで末尾に改行があると想定できます。以下は、テストに使用できる実際の単語のリストです。この単語リストファイルはf(またはそれより長い)呼び出され、便利なディレクトリにあると想定できます。 35バイトのペナルティ(スコアに35を加算)の場合、単語リストは既に文字列のリストとして変数にロードされていると想定できます。これは主にファイルを読み取れない言語用ですが、提出することでそれを利用できます。 プログラムは、入力数値を変換できる単語リスト内のすべての単語を出力する必要があります。これらは、1行に1つずつ(オプションの末尾の改行を使用して)stdout(または同様の)に出力する必要があります。または、関数の作成を選択した場合は、文字列のリストとして返すことができます。単語リストは必ずしもアルファベット順ではなく、出力もアルファベットである必要はありません。 可能な単語がない場合、出力(またはリスト)は空になります。空の文字列が入力されると、出力も空になります。 stdin、コマンドライン、または関数の文字列引数として入力を受け取ります。単語リストまたはそのファイル名は、入力の一部ではなく、数字列のみである必要があります。 単語リスト内の単一の単語のみが一致し、単語のシーケンスは一致しません。この単語noonはおそらくの結果の1つです22が、単語シーケンスno oneはそうではありません。 テストケース これが単語リストであるとします: stnmrljkfp zthnmrlshqfb asatanamaralajakafapa aizxydwwwnhimouooraleshhhcavabe zdnmrlshcvb zdnmrlshchvb sthnmrlchgvb shthnmrlchgvb bob pop bop bopy boppy 入力0123456789はzdnmrlshchvband を除くすべての長い単語を与える必要がありshthnmrlchgvbます: stnmrljkfp zthnmrlshqfb asatanamaralajakafapa …
19 code-golf  string 

11
番号付きキューブに面を出力する
キューブの8つの頂点に0〜7の番号を自由に割り当てます。各頂点に正確に1つの番号を割り当てる必要があります。 たとえば、頂点は次のように割り当てられます。 3-----1 /| /| 4-----2 | | | | | | 5---|-0 |/ |/ 6-----7 0から5までの整数を取り込むプログラムを作成します。これらの6つの数値のそれぞれは、好きな方法でキューブの1つの面に正確に関連付けられます。これらの番号のいずれかが入力されると、関連付けられた面の4つの頂点番号が2×2の数字で標準出力に印刷されなければなりません。顔は立方体の外側から真っ直ぐに見えるようになっています。4つの顔の回転はすべて有効です。 たとえば、上の例の立方体の前面に0が関連付けられている場合、これはinputの有効な出力になります0。 42 67 顔は90度の回転で表示される可能性があるため、これらも有効です。 27 46 76 24 64 72 この出力(およびその回転)は、顔の間違った側から見られるため無効です。 24 76 同じ考えが他のすべての面に適用されます。たとえば、1が背面に関連付けられている場合、入力1は出力を生成する可能性があります13[newline]05(そして31[newline]50無効になります)。 したがって、実際の課題は、入力を4つの頂点番号に変換するのが簡単で短いように、頂点番号と回転を選択することです。 バイト単位の最短コードが優先されます。Tiebreakerは以前の投稿です。(便利なバイトカウンター。) ノート プログラムの代わりに関数を書くこともできます。0〜5の整数を取り、2×2桁のグリッド文字列を出力または返す必要があります。 stdin、コマンドライン、または関数argから入力を取得します。入力が有効であると想定できます。 出力には、オプションで末尾の改行が含まれる場合があります。 選択した頂点と面の番号を必ず教えてください。

30
ボックスを生成します!
あなたの仕事は、与えられた入力に関して任意の1つのASCII文字を使用してボックスを生成することです。 テストケース 1 1 --> ===== = = ===== 1 2 --> ========= = = = ========= 2 1 --> ===== = = ===== = = ===== 2 2 --> ========= = = = ========= = = = ========= 2 5 --> ===================== = = = = = = ===================== …

8
アレイをジャンプ!
jump the arrayというワンプレイヤーゲームをプレイしましょう。プレイするには、整数の配列、たとえばのみが必要aです。ある位置から開始しi、各ターンで新しい位置にジャンプします。順番にn、 n偶数の場合、絶対位置にジャンプしa[i] mod length(a)、 nが奇数の場合、相対位置にジャンプします(i + a[i]) mod length(a)。 配列のインデックス付けはゼロから始まります。最初のジャンプをturn 0またはturn としてカウントできます1。これにより、異なるゲームができます。ゲームの状態空間は有限であるため(あなたの動きは自分の位置とターン番号のパリティによって決定されます)、もちろん最終的には偶数の長さのループに入ります。表すloop(a, i, b)最初のジャンプがターンとしてカウントされ、このループの長さ、b。 入力 aゲームをプレイする整数の空でない配列。 出力 pある位置から開始しi、最初のターンをかのいずれかとしてカウントする0場合1、最終的にlengthのループに入るような最大数2 * p。言い換えれば、あなたの出力は数字です max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] } ルール 機能または完全なプログラムを提供できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース [0] -> 1 [-213] -> 1 [1,3,12,-1,7] -> 1 [2,3,5,7,9,11,13,17,19] …

7
Hamming(7,4)を使用してエラーを修正
Hamming(7,4)コードは1950年に遡ります。当時、Richard HammingはBell Labsで数学者として働いていました。毎週金曜日、ハミングは一連の計算を実行するように計算機を設定し、次の月曜日に結果を収集しました。パリティチェックを使用して、これらのマシンは計算中にエラーを検出できました。ハミングはエラーメッセージを頻繁に受信するため、エラー検出を改善することを決め、有名なハミングコードを発見しました。 ハミングの力学(7,4) ハミングコードの目標は、データビットまたはパリティビットのシングルビットエラー(1ビットが反転)を検出して修正できるように、重複するパリティビットのセットを作成することです。複数のエラーが発生した場合のみ、ハミングコードは元のデータの回復に失敗します。エラーにまったく気付かないか、誤って修正することさえありません。したがって、この課題では、シングルビットエラーのみを扱います。 ハミングコードの例として、ハミング(7,4)コードを見てみましょう。4ビットのデータに加えて、次の式を使用して計算さd1, d2, d3, d4れる3つのパリティビットp1, p2, p3を使用します。 p1 = (d1 + d2 + d4) % 2 p2 = (d1 + d3 + d4) % 2 p3 = (d2 + d3 + d4) % 2 結果のコードワード(データ+パリティビット)はの形式p1 p2 d1 p3 d2 d3 d4です。 エラーの検出は次のように機能します。パリティビットを再計算し、受信したパリティビットと一致するかどうかを確認します。次の表では、あらゆる種類のシングルビットエラーが、パリティビットの異なる一致をもたらすことがわかります。したがって、すべてのシングルビットエラーをローカライズおよび修正できます。 error in bit | …

4
月の大きさを計算する
月の謎の大きさ 月のサイズが変わることを聞いたことがあると思います。あなたが恋をしていて幸運なとき、月は通常の状況に比べてほぼ2倍の大きさです。一部の人々は、理由はレンズとして機能する雰囲気だと言います。他の人は、近くの木など他のオブジェクトとの比較の問題にすぎないと考えています。どのような説明を読んでも、それは非常に主観的なものです。 月の科学の大きさ プログラマーですよね?事実に頼っていますよね?だからここに実験があります: 時間と絞りの手動設定をサポートする素敵なカメラを用意してください。 カメラを最大ズームレベルに設定します。 外に出て、月の写真を撮って、最適な設定を検出して、月がシャープになり、照明がちょうど良いようにします。 設定を覚えておいてください 月が大きいか小さいと思うたびに、これらの設定で月の写真を撮ります。 月のサイズをピクセルで計算する カメラは嘘をつきませんよね?明るいピクセルを数えることで、月の大きさを少なくともピクセル単位で効果的に測定できます。 サイズがすべての写真で同じ場合、それは私たちの脳のバグです。サイズが異なる場合、推測の余地があります 月は本当に成長します(しかし、それは何を食べますか?) 大気のレンズ効果があります 月は楕円曲線を持ち、時には近く、時には地球から遠く離れています ... ただし、タスクが完了するまで開いたままにします。もちろん、ソフトウェアが月のサイズを正確に計算できるかどうかを事前に知りたいと思うでしょう。 タスク 月の最適化された写真をいくつか与えて、月のサイズを計算してください。最適化は次のとおりです。ピクセルは黒または白です。間に何もない。アンチエイリアスなし。これで簡単になりますよね? 警告:月はいつも満杯ではありません、あなたは知っています...それは鎌でありえます!しかし、鎌の形であっても、月のサイズは大きくなります。したがって、フルサイズを計算してください。 プログラムは、PNGを入力として受け取ります。たとえばstdin、プログラムの代わりに関数を記述する場合、ファイル名のコマンドライン引数として、または(標準フレームワークライブラリの)Bitmapオブジェクトとしてパイプされます。 プログラムは、適切な入力ビットマップサイズで動作しますが、必ずしも正方形ではありません。150ピクセルの最小幅と高さが保証されています。 満月は写真の少なくとも25%を覆います。 プログラムは、満月のように計算された月のサイズをピクセル単位で出力します。 月は完全な球体であると仮定します。 正確なサイズは常に整数ですが、計算で返される場合は10進数を出力できます。 精度は98%から102%の間でなければなりません。(それは私が達成できると保証できるものよりもむしろ推測です。到達するのが難しすぎると思われる場合は、コメントを残してください。) 更新: 月の中心は必ずしも写真の中央にあるとは限りません。 最小の可視領域は月の5%またはピクセルの総数の1.25%です。 写真は、月全体が画像に合うように撮影されます。つまり、ピクセルの総数は月のサイズの上限です。 月は切り取られません。 サンプル 必要に応じて、ブレンドファイルを使用して独自のサンプルを生成できます。次の写真を作成しました。WhitePixelCounter.exe(.NETが必要)を使用してPNGファイル内のピクセルをカウントし、イメージに黒と白のピクセルのみが含まれているかどうか、およびそれらの数を確認できます。 次の256x256ピクセルの画像は白いピクセルの量が異なりますが、計算された月のサイズは16416ピクセルになります。 そして、これらの177x177ピクセルの画像は10241ピクセルを返すはずです。画像は基本的に同じですが、今回は焦点距離の異なるカメラが使用されました。 結果が9988の非正方形および非中心サンプル: ああ、私は今のところリファレンス実装を持っていませんし、何かを実装できるかどうかさえ知りません。しかし、私の脳には、数学的に解決可能でなければならないという強い信念があります。 ルール これはコードゴルフです。2015-03-30の最短コードが受け入れられます。

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