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

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

9
どうして?金持ちのプログラマーを喜ばせるために!
コンパイラに「なぜ?」と尋ねたいと思ったことはありませんか。私たちのほとんどは、コードが正常に機能していないことに不満を感じています。したがって、Mathworksはwhy質問に答える素敵な小さな関数を実装しました。MATLABからいくつかの例を示します。 why The programmer suggested it. why To fool the tall good and smart system manager. why(2) You insisted on it. why(46) Bill insisted on it. あなたの仕事はwhyあなたの言語で関数を実装することです。この関数は、入力引数の有無にかかわらず動作する必要があります(あるいは、入力0またはを使用します-1)。関数には名前を付ける必要がありますwhy(または、why(n)STDIN に書き込むと、適切な文字列が出力されるはずです)。 引数が指定されていない場合、または引数がゼロまたは負の場合、出力文字列はランダムで有効なフレーズでなければなりません。だから、機能があるはずwhy、why()、why(0)またはwhy(-1)そのランダムな文を返します。 入力引数nが指定された場合(STDINではなく関数引数)、出力はn番目の文字列(以下で定義)でなければなりません。したがって、why(1)常に同じ結果を出力(印刷/表示)する必要があります。 文は次のように構成されています(タイプ1、タイプ2、特殊)。すべての文はで終わり!ます。 "Person" "ending" ! "Verb" "adjective" "Person" ! A list of special cases 人のリスト: Stewie Peter Homer The programmer The …
21 code-golf 

4
フランス語で時間を伝える
Bonjour、PPCG!Quelle heure est-il?これはフランス語で何時かということを意味します。まさにそれがまさにこの挑戦の目的です。 フランス語で(少なくとも正式に)時間を伝えることは、英語で時間を伝えることとは少し異なります。Il est(It is)で時間を告げます。その後、あなたは続く時間入れユール(時を)。(フランス語の番号がわからない場合は、http://blogs.transparent.com/french/french-numbers-learn-how-to-count-from-1-to-1000/のリストをご覧ください)。それが1時である場合は、これを回避します。正午にはmidi(ヒュールなし)を使用し、深夜にはminuitを使用します。 分が00でない限り、その後に分数を続けます。ただし、これにはいくつかの例外があります。15分間はet quartと言い、30分間はet demiと言います。30分後の場合は、時間数を1つ増やし、moinsと60-分という単語を追加します。したがって、午後6時40分は最低9月のheures moins vingt(vingt = 20)です。45分はクォートです。 最後に、時刻で終了します。午前中(午前1時から午後12時まで)にdu matinと言います。午後(主観的ですが、午後1時から午後5時と定義します)、de l'apres-midiと言います(技術的には、eの上にアクセントがあるはずですが、ehになります)。そして、夜(午後5時から午前12時)については、「デュソワール」と言います。真夜中と正午(minuitとmidi)には、これらを後で入れないことに注意してください-使用する時間に基づいて時刻が暗黙指定されます。 おそらくすでに確認したように、ここでの課題は、これらのルールを使用して現在の現地時間をフランス語で出力することです。さまざまな時点でのサンプル出力は次のようになります。(カッコ内の時刻は明らかに印刷する必要はありません、それはちょうどそこにあるので、あなたは何時かを知っています): Il est sept heures du matin. (7:00 A.M) Il est deux heures de l'apres-midi. (2:00 P.M) Il est une heure du matin. (1:00 A.M) Il est huit heures du soir. (8:00 P.M) Il …

18
整数パーセント
正の整数のリストを受け取り、同じ位置にある対応する整数の合計のパーセントに近い整数のリストを返す関数を作成します。 返されるリスト内のすべての整数は、正確に100まで加算する必要があります。渡された整数の合計は0より大きいと仮定できます。どちらの方向でも1を超えてオフになりません。 p([1,0,2]) -> [33,0,67] or [34,0,66] p([1000,1000]) -> [50,50] p([1,1,2,4]) -> [12,12,25,51] or [13,12,25,50] or [12,13,25,50] or [12,12,26,50] p([0,0,0,5,0]) -> [0,0,0,100,0] これはcode-golfなので、バイト単位の最短コードが勝ちです!

15
プログラムのバイト数を数える
注2:@DigitalTrauma6バイトの長い回答を受け入れました。誰かがそれを打つことができるなら、私は受け入れられた答えを変えます。遊んでくれてありがとう! 注:10/14/15の午後6時(MST)に回答を受け付けます。参加したすべての人に感謝します! これがまだ質問されていないことに非常に驚いています(または、十分に検索しませんでした)。いずれにしても、この課題は非常に簡単です。 入力:文字列形式のプログラム。さらに、入力には以下が含まれる場合と含まれない場合があります。 先頭と末尾のスペース 末尾の改行 非ASCII文字 出力: 2つの整数、1つはUTF-8文字カウントを表し、もう1つはバイトカウントを表します。どの順序を選択してもかまいません。末尾の改行が許可されます。出力は、STDOUTに送信することも、関数から返すこともできます。2つの数値が互いに区別できる限り、ITはどの形式でもかまいません(2327は有効な出力ではありません)。 ノート: 改行を\nまたはと見なすことができます\r\n。 テスト用の素敵なバイトと文字のカウンターを次に示します。また、同じことがメタ投稿です(@Zeregesに感謝)。 サンプルI / O:( すべての出力はの形式です{characters} {bytes}) 入力: void p(int n){System.out.print(n+5);} 出力: 37 37 入力: (~R∊R∘.×R)/R←1↓ιR 出力: 17 27 入力: friends = ['john', 'pat', 'gary', 'michael'] for i, name in enumerate(friends): print "iteration {iteration} is {name}".format(iteration=i, name=name) 出力: 156 156 …

8
サーキュラーブルース
正の整数Nを取り込んで、N×Nピクセル画像に合うようにスケーリングされたこの円のパターンを再作成するプログラムまたは関数を作成します。 この画像は、N = 946の有効な出力例です。 明確でない場合、すべての小さな水色の円は同じ半径を持ち、同じように4つの濃い青の円に配置されます。濃い青の円はその半径が2倍で、同じように大きな水色の円に配置されています。 青の2色の代わりに、視覚的に異なる2色を使用できます。 背景の正方形に色を付ける必要があります。 アンチエイリアスはオプションです。 画像をファイルに保存、表示、または生の画像データを標準出力にパイプします。 一般的な画像ファイル形式はすべて許可されます。 バイト単位の最短コードが優先されます。 この円パターンの再帰的側面をさらにレベルに拡張すると、ブラウニーがポイントします。(チャレンジエントリとは区別してください。)

3
特定のサイズのグループをカウントする
グループ 抽象代数では、グループはタプル(G,∗)(G,∗)(G,\ast)であり、ここでGGGは集合であり、∗∗\astは次のような関数G×G→GG×G→GG\times G\rightarrow Gです。 すべてのためのx,y,zx,y,zx, y, zにおけるGGG、(x∗y)∗z=x∗(y∗z)(x∗y)∗z=x∗(y∗z)(x\ast y)\ast z=x\ast(y\ast z)。 要素が存在するにおけるGような、そのすべてのためのxにおけるG、X * E = X。eeeGGGxxxGGGx∗e=xx∗e=xx\ast e=x 毎におけるG、要素が存在するYにおけるGように、X * Y = eは。xxxGGGyyyGGGx∗y=ex∗y=ex\ast y=e グループの順序は、Gの要素の数として定義されます。(G 、∗ )(G、∗)(G,\ast)GGG 厳密に正の整数ごとに、次数nのグループが少なくとも1つ存在します。例えば、(C N、+ Nは)そのような基であり、C N = { 0 、。。。、n − 1 }およびx + n y = (x + y )nnnnnn(Cn、+n)(Cn、+n)(C_n,+_n)Cn= { 0 、。。。、n − 1 }Cn={0、。。。、n−1}C_n=\{0,...,n-1\}。x …

9
関数型プログラミングパラダイムを実装する
あなたの会社はプロジェクトを始めたばかりで、初めて関数型プログラミングコードスタイルを使用することに決めました。しかし、上司は本当に気が進まないため、組み込み関数を使用したくないため、メイン関数を自分で実装する必要があります。特に、あなたは関数を記述する必要があります:Map、Nest、Apply、Range、FoldとTableお好みの言語で。上司は本当に忙しいので、プログラムをできるだけ短くしたいので、読書に時間を浪費しません。彼はまた、ループを使用しないことを望んでいるため、ループを使用しない場合のバイトカウントが10%削減されます。 機能の詳細な要件は以下のとおりです。 地図 Mapこの関数は2つのパラメータを取りますfし、listどこf関数であり、list値のリストです。のf各要素に適用されたを返す必要がありlistます。したがって、次のように機能します。 Map(f,{a,b,c}) 返す { f(a), f(b), f(c) } そして Map(f, {{a,b},{b,c}}) 返す { f({a,b}), f({b,c})} ネスト Nest機能は同様に3つのパラメータを取ります:f、arg、timesどこf機能があり、argその開始引数で、times関数が適用される回数です。にf適用されたtimes時間を含む式を返す必要がありargます。したがって、次のように機能します。 Nest(f, x, 3) 返す f(f(f(x))) そして Nest(f, {a,b}, 3) 返す f(f(f({a,b}))) 適用する Applyこの関数は2つのパラメータを取りますfし、argsどこfの機能とあるargsリスト。に適用fする必要がありますargs。したがって: Apply(f, {a,b,c}) 返す f(a,b,c) 範囲 このRange関数は1つの整数rを取り、その数までの整数を出力します。したがって: Range(5) 返す { 1, 2, 3, 4, 5} 折ります Foldこの関数は3つのパラメータを取りf、arg、othersどこfの関数である、arg簡単なパラメータ、及びあるothersリスト。以下のように機能します: Fold(f, …

8
クレイジーライブラリアンのすばらしい仕分けシステム
学校シーズンに戻りました!アルバイトの場合、学校の図書館で手伝っています。問題は、主任司書が「デューイ十進法」という言葉さえ聞いたことがないことであり、そのシステムを実装したことは言うまでもない。代わりに、ライブラリが拡大するにつれて、使用中の分類システムが「有機的に」成長しました... あなたの正気を保つために、あなたは本が返されるときに本を分類するのを助けるプログラムを書くことを選んだ。(ヘッドライブラリアンは非常に厳格です。) 入出力 入力は、STDIN /同等の言語からの(架空の)書籍タイトルのリストで、1行に1つずつです。 一度に入力できるのは100冊までです(一度に多くの本を図書館に持ち込むことができます)。 書籍のタイトルには複数の単語を含めることができ、これらの単語はスペースまたはその他の句読点(コロン:、ダッシュ-など)で区切ることができます。 計算を簡単にするために、すべてのタイトルがUTF-8であると想定します。 出力は同じタイトルで、以下のルールに従ってソートされ、再び1行に1つずつ、STDOUT /言語に相当します。 ソート規則 書籍は、平均文字値(つまり、累積文字値を書籍タイトルの文字数で割った値)に基づいて数値順にソートされ、次の規則に従ってカウントされます。 すべての文字は、タイトルの文字数を決定するためにカウントされます。 小文字は、アルファベットの位置によってカウントされます。(a = 1、b = 2、... z = 26) タイトルに大文字が含まれる場合、それらは小文字の値(A = 1.5、B = 3、... Z = 39)の1.5としてカウントされます。(「大文字が重要です!」司書は言います。) このリストの各句読点/記号は、!@#$%^&*()-=_+[]\{}|;':",./<>?~平均する前に累積値から-1をカウントします。(「壮大なタイトルは違います!」) タイトルにアラビア数字で書かれた数字が含まれている場合、ソートする前にその数字が平均値から差し引かれます。複数の連続した数字は1つの数字として扱われます(たとえば、424を減算してから2を減算するのではなく、42を減算します)。個々の数字は累積値にはカウントされません(つまり、各数字は0に寄与します)が、DOは文字数にカウントされます。これは負の値になる可能性があるため、適切に処理する必要があることに注意してください。(噂によると、司書は数年前から数学のインストラクターに夢中になっている。) タイトルにで始まる2つの単語が含まれているR場合、本は「無限」のスコアを取得し、コーナーの山に捨てられます(つまり、リストの最後にランダムに配置されます)。(司書は、それらのイニシャルを持つ人によってかつて投げ捨てられた、またはあなたは聞いたことがあります。) スペースは、累積文字値にはカウントされません(つまり、0は寄与します)が、タイトルの文字数には寄与します。 上記のルールに適合しない文字(例:a ÿ)は、累積文字値にはカウントされません(つまり、0に寄与します)が、タイトルの文字数には寄与します。 たとえば、架空の本ÿÿÿÿÿにはの「スコア」が(0+0+0+0+0) / 5 = 0ありますが、架空の本ÿÿyÿÿにはの「スコア」があり(0+0+25+0+0) / 5 = 5ます。 偶然同じ「スコア」の2冊の本を、選択した順序で出力できます。(とにかく同じ棚にあります) 入力例1 War and Peace Reading …

6
グレートブリティッシュケーキオフ
誰かが誕生日にとても利己的で、みんなにケーキを要求し、共有する予定はなかったと聞いています!🎂 今日は誰かの誕生日になりますので、ケーキを焼かないでください。お気に入りのプログラミング言語を使用して、おいしい「Happy Birthday」メッセージを出力としておいしいケーキを作成します。(シェフをお勧めします!) あなたのケーキは 現実世界のレシピを真似します(リンクできるなら、素晴らしい!) ケーキを作るのに適した改行で区切られた成分のリスト メソッドのステップの改行区切りリスト それが何人の人々に奉仕するか できるだけ正しい成分比に近づけてください。 提供される場合、最小限の「Happy Birthday」を出力します。 最高のケーキは次のとおりです。 おいしい -これは人気コンテストなので、コミュニティはおいしいものを決定します パーソナライズ -特定の人にカスタム誕生日メッセージを焼き付けてみてください。(PPGCユーザーが見つからない場合、有名人はいませんか?) バランスの取れた -レシピが準備するサービングの量に適した数の材料を使用するようにしてください。1000 eggs, serves 1一食分はたぶんほんの少しだけ 大きく、巨大で、絶対に巨大です! Outlandish-基本的なスポンジ以上のものを焼くことができます。たとえば、アイシング、霧雨、ソース添え、飾りなどを含むことができます。 視覚的に魅力的 -画像はasciiとしてのソースコードでも出力でも優れています。最初の「バイト」は、結局のところ目です。 そして、忘れないでください、良いパン屋は角を切って、適切に物事をしません。(no-opコードを使用してレシピのように見せてから印刷し、コードの意味を確認するだけではありません)これらのレシピを否定的に見ることを投票者に奨励します。 ハッピーベーキング!

4
再帰的なASCIIスパイラル
この競争は終わりました。エソラン以外の興味深いエントリーに感謝し、JakujeがJavaScriptを受賞したことを祝福します。 このサイトのASCIIアートチャレンジの偉大な伝統に、もう1つあります。入力が与えられたら、らせんを描きます。 &>----v ||>--v| |||>v|| |||@||| ||^-<|| |^---<| ^-----< 簡単ですね ふふふふ...うん... (ASCII Dragons Curve投稿と、オプティマイザーのASCII Art of the Day投稿に触発されました) 入力 入力は、通常のSTDIN /関数の引数などから取得される一連のパラメーターの形式で、4つの部分で構成される同等の言語になります。これらの部分は、4つの引数、4つ、サイズ4の配列などになります。チャレンジ全体を通して単純さと一貫性を保つために、入力を1つの単語として表します。 2 ≤ x ≤ 20スパイラルのサイズを「正方形」で指定する整数。各印刷文字は1つの「正方形」を表します。理論的にはこれは非常に範囲が広いかもしれませんが、ASCIIアートを描いていることを考えると、これは画面上である程度適切に収まるように、これの安全な上限は20になります。 d u rまたはの1文字。l開始「正方形」からの最初の動き(下、上、右、左)を示します。 c「反時計回り」を示すオプションの。cが省略された場合、スパイラルが時計回りに回転すると仮定します。 1 ≤ y ≤ 10前のスパイラルの仕上げ「正方形」を新しいものの開始「正方形」として使用して、スパイラルの描画を再帰する回数を指定する最後の整数。描画をある時点で終了させるため、上限の10を選択しています。 いくつかの入力例: 20lc5 13d2 2rc1 興味深いことに、サイズ入力の奇数の値は@常にスパイラルの正確な中心になりますが、偶数の値は、初期の方向に応じて、4つの斜め方向のいずれかで開始「正方形」オフセットを持つ場合があることに注意してください旅行。これにより、いくつかの...興味深い...パターンが生じる可能性があります。以下の2つの偶数の例を参照してください。 入力仕様に従っていない入力(例11q#s:)は未定義であり、プログラムが適切にbarfすることを完全に期待しています。:) 出力 出力は、言語と同等のSTDOUTを介したASCII印刷可能な出力であり、次の仕様があります。 (各再帰の)開始「正方形」は、アットマークでマークする必要があります@。 最後の「正方形」は、アンパサンドでマークする必要があります&。複数の再帰の場合、最後の「正方形」のみをマークする必要があり&ます。 スパイラルパスの角は、を使用して、進行方向を「指す」必要があり< > v ^ます。 垂直移動はパイプで引く必要があります|。 …

26
PPCGファビコンを作成する
11月1日、プログラミングパズルとコードゴルフが卒業するので、今後11か月以内に、卒業していないときの思い出を保存したいと思います。 以下に示すPPCGファビコンを生成するプログラムを作成します。 画像は少なくとも64x64ピクセルである必要があります。 青は色#62B0DFでなければなりません。背景は白または明るい灰色です。 画像はここのようにピクセル化する必要はありません。 または、シアンと白の標準の明るいANSIカラーコードを使用して、テキスト(少なくとも64x64の非空白文字)を作成します。 組み込み画像とPPCGロゴのインポートは許可されていません。 これはコードゴルフなので、標準的な規則が適用されます。バイト単位の最短コードが優先されます。

13
あらゆる可能なサイクル長
入力を受け取り、出力を提供する関数(またはプログラム)は、独自の出力で関数を繰り返し呼び出して最終的に元の数に達した場合、サイクルを持っていると言えます。たとえば、次の関数を使用します。 Input: n 1 2 3 4 5 6 Output: f(n) 5 7 1 3 4 9 我々が開始するとn=1、f(n)=5、f(f(n))=f(5)=4、f(f(f(n)))=f(4)=3、f(f(f(f(n))))=f(3)=1。 これは書かれてい(1 5 4 3)ます。このループには4つの一意の番号があるため、これは長さ4のサイクルです。 あなたの課題は、あらゆる長さのサイクルを持つプログラムまたは関数を書くことです。つまり、長さ1、長さ2などのサイクルが必要です。 さらに、関数/プログラムは正の整数から正の整数である必要があります。また、すべての正の整数にわたって、可能な出力値ごとに1つの入力値が存在する必要があることを意味するbijectiveでなければなりません。別の言い方をすれば、関数/プログラムは正の整数の順列を計算する必要があります。 詳細:STDIN、STDOUT、関数の引数、戻り値など、標準の入出力システムはすべて許可されます。標準の抜け穴は禁止されています。 データ型の制限について心配する必要はありません-上記のプロパティは、たとえば、任意の値を保持できる、intまたはfloat任意の値を保持できるという仮定の下でのみ保持する必要があります。 正の整数ではない入力に対する関数の動作に制限はなく、これらの入力/出力は無視されます。 得点はバイト単位のコードゴルフで、最短のコードが勝ちです。

2
ダイヤモンドタイルを回転させる
たとえば、次のように、通常の六角形にダイヤモンドを並べることができます(この質問から盗まれました)。 ______ /_/_/\_\ /_/\_\/\_\ /\_\/_/\/_/\ \/_/\_\/_/\/ \_\/_/\_\/ \_\_\/_/ 上記はサイズ1のタイルと考えます(ダイヤモンドの側面はそれぞれ1つまたは\で作られているため)。サイズ2の同じタイリングは次のようになります。 ____________ / / /\ \ /___/___/ \___\ / /\ \ /\ \ /___/ \___\/ \___\ /\ \ / /\ / /\ / \___\/___/ \/___/ \ \ / /\ \ / /\ / \/___/ \___\/___/ \/ \ \ / /\ \ / …

10
画像の平均色
画像の平均色 科学者は宇宙の平均色を決定できましたが、画像の平均色は何バイトで見つけることができますか? あなたのタスク 入力は単一の画像になり、画像内の色の平均を見つけて16進数の色文字列(#??????)を出力する必要があります。画像は次の形式のいずれかです。 JPEG / JFIF JPEG 2000 TIFF GIF BMP PNG PNM PPM 入力は、画像へのURL / URIとして取得することもできます。 ImageMeasurements許可されていないなど、平均を計算したり、一度に画像をサンプリングしたりする組み込み関数。 例 結果は、平均の計算方法と使用するカラーモデルによってわずかに異なります。下の画像にRGBとLCH(HSV)の値を追加しました。 出力:#53715FRGB、#3B7D3DLCH(HSV)の場合もあります 出力:#8B7D41RGB、#96753CLCH(HSV)

8
簡単ですか、それとも難しいですか?
あなたの難しいことをするために、あなたはいくつかの単語が簡単な方法で説明されるかどうかを見つけることをするためにコンピュータのために何かを作らなければなりません。使用頻度の最も高い単語100語のみを使用する場合、何かが簡単に説明されます。そうでない場合は、難しい方法で説明されます。これは、完全なコンピューターのものでも、コンピューターのものの一部でもかまいません。(完全なプログラムまたは機能) コンピューターには、各単語の間にスペースを入れて1万個の単語がすべて含まれているものを読む必要があります。コンピューターが読み取るものの名​​前は「most used.txt」と呼ばれます。このコンピューターの場所からこのことを取ることができます。 コンピューターを使用する人は、いくつかの単語を入力します。(これはSTDIN、関数の引数、またはコマンドラインの引数から取得できます)コンピューターは、単語が単純な場合はtrueのように、難しい場合はtrueではないようなものを言う必要があります。(真実-偽)コンピューターがすることを最短にする人が最高です。すべての人が悪いと知っていることは悪いことです。(標準の抜け穴が適用されます) コンピュータの仕組みがどのように機能するかについて知っておくべきこと: 単語が大きいか小さいかは関係ありません。 単語の意味をわかりやすくするための写真(句読点)は重要ではありません。そのため、コンピューターを使用する人が「しない」と言っても、「しない」という言葉と異なる言葉ではありません。数字やその他の写真も関係ありません。だから、人が「HE $$ ll9o」と言ったら、コンピュータは「hello」のように読むべきです 単語(ダッシュ)間の小さな線は、スペースと同じように機能します。したがって、「up-goer-five」という単語は「up-goer five」という単語と同じです。 このような単語の作成について知っておくべきこと: https://xkcd.com/1133/ http://splasho.com/upgoer5/#
21 code-golf  string 

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