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

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

2
通常の文章
入力文字列と標準偏差を指定してσ、平均0と標準偏差の正規分布曲線に沿ってその文字列を出力するプログラムまたは関数を作成しますσ。 正規分布曲線 y各文字の座標cは次のとおりです。 ここで、σ入力として与えられ、ここxれるx軸座標c。 文字列の中央の文字にはがありx = 0ます。文字列の長さが偶数の場合、中央の2つの文字のいずれかを中心として選択できます。 文字は、以下の工程によって分離されている0.1(例えば、中央1の左側の文字があるx = -0.1、中央の1の右側に1持っているx = 0.1、など)。 文字列を印刷する 文字のような行は、のステップで区切られます0.1。 各文字は、との行に印刷されy、独自に最も近い値y(値が正確に二行の値の間にある場合、(どれだけのような最大値とのいずれかを選択して値をround返す通常1.0のために0.5))。 たとえばy、中心値(つまり最大値)0.78のy座標がで、最初の文字の座標がである場合、0.29行になります。中心文字が行に印刷され0、最初の文字が行に印刷されます8。 入力と出力 両方の入力(文字列とσ)をプログラム引数STDIN、関数引数、または言語の類似物として使用できます。 文字列には印刷可能なASCII文字のみが含まれます。文字列は空にすることができます。 σ > 0。 あなたはへの出力を印刷することができるSTDOUTファイルに、または(関数からそれを返す限り、各ラインのための文字列のリストを、それが文字列ではないと言います)。 末尾の改行は許容されます。 行の長さが最後の行を超えない限り、末尾のスペースを使用できます(したがって、最後の行に末尾のスペースは使用できません)。 テストケース σ String 0.5 Hello, World! , W lo or l l e d H ! 0.5 This is a perfectly normal sentence tly ec …
16 code-golf  math  string 

5
コメントを残す
仕事: この質問にコメントを残すプログラムを作成します。コンテンツはでなければなりません1234567890123456。 編集: ユーザー名とパスワードを使用しUてPいる場合は、ユーザー名とパスワードをそのままにしておくことができます。(該当する場合) URL Shortenersなし(該当する場合) ブラウザコンソールは使用できません。

30
文字列を配列内にn回ネストする
あなたは、文字列をネスト機能生成しなければならないs配列内、n回 >>> N("stackoverflow",2) [['stackoverflow']] パラメーター: s -アスキー文字列 n -整数 >= 0 ルール 最短のコードが優先されます。 出力は、ネストされたarray、listまたはtuple(または配列に基づく同様のタイプ)になります テストケース >>> N("stackoverflow",0) 'stackoverflow' >>> N("stackoverflow",1) ['stackoverflow'] >>> N("stackoverflow",5) [[[[['stackoverflow']]]]] インスピレーション:リスト内の文字列をn回ネストする、つまりリストのリストのリスト
16 code-golf  string 

19
自動ボックスエキスパンダー
前書き 箱が小さすぎて何も収まらないことがあります。ボックスエクスパンダーを作成する必要があります!それで、このチャレンジでボックスをボックスにするものは何ですか。 OOOO O O O O O O OOOO ボックスの角は常にスペースです。箱自体は同じキャラクターで作ることができます。その文字は、スペースを除く任意の印刷可能なASCII文字にすることができます。したがって、これらの文字は次のとおりです。 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 箱の辺の長さは、上記されている3,4。あなたは辺の長さが常に正であると仮定するかもしれません。これは、これが処理する必要がある最小のボックスであることを意味します。 # # # # ボックスを展開するには、各辺の長さを増やす必要があります。上記の例を使用して、これを順を追って説明します。まず、ボックスの上側を取り上げます。 OOOO これを1つ拡張すると、次のようになります。 OOOOO これは現在、ボックスの上部と下部です。その後、左右の側面で同じことを行います。 O O O になる: O O O O 次に、ボックスを組み立て直します。 OOOOO O O O O O O O O OOOOO タスク ボックスが与えられたら、それを1だけ拡張します。ボックスは複数行または配列で指定できます。 テストケース OOOO OOOOO O O > O …

12
靴下引き出しをシミュレートする
バックグラウンド 「平日靴下」のコレクションがあります。これは、曜日によってラベル付けされた7足の靴下です。私が靴下を洗うと、それらは山になってしまいます。クローゼットに入れる前に正しいペアに揃えなければなりません。私の戦略は、一度に山からランダムな靴下を1つずつ引き出し、引き出しに置くことです。引き出しに一致する靴下のペアがある場合は、つなぎ合わせてクローゼットに入れます。あなたの仕事は、このランダムなプロセスをシミュレートし、最初に一致するペアを見つけるのに必要なドローの数を返すことです。 入力 入力は整数N≥1です。これは「1週間の日数」を表します。パイルにはNペアの靴下があり、各ペアには個別のラベルがあります。必要に応じて、入力としてPRNGシードを使用することもできます。 出力 出力は、最初に一致するペアが見つかるまでに描画する必要がある靴下の数です。たとえば、最初の2つの靴下がすでに一致するペアを形成している場合、出力は2です。 もちろん、出力はランダムであり、描画順序に依存します。描画順序はすべて同じであると想定しているため、靴下を描画するたびに選択肢は均一であり、他のすべての選択肢から独立しています。 例 レッツN = 3私たちは、合計、ラベルに6つの靴下を持っているので、こと、AABBCC。「sock-drawing protocol」の実行の1つは次のとおりです。 | Pile | Drawer | Pairs Begin | AABBCC | - | - Draw B | AABCC | B | - Draw C | AABC | BC | - Draw B | AAC | C | BB Draw …
16 code-golf  random 

9
交互のサインマトリックス検証
交番符号行列であるnことにより、n数字からなるマトリックス-1、0、1、その結果: 各行と列の合計は1です 各行と列のゼロ以外のエントリは符号が交互になります これらの行列は順列行列を一般化し、与えられnた行列の数はしばらくの間興味がありました。それらは、行列決定要因を計算するドッジソン凝縮法(ルイスキャロルとしてよく知られているチャールズドッジソンにちなんで命名)の間に自然に発生します。 4 x 4の交互符号行列の例を次に示します。 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 -1 1 1 0 -1 1 1 0 0 0 0 1 -1 1 1 -1 1 …

7
宇宙電話をかける
宇宙の呼び出しが説明するようそれは、23枚の127 * 127pxモノクロビットマップ画像で作られている1999年と2003年に宇宙へ送られたメッセージであるここに。 あなたの使命は、127 * 2921pxメッセージ全体をテキスト(ゼロ、1、改行で構成される)または画像(画面に描画されるかディスクに保存される)として表示するプログラムを作成することです。受賞者には、テキスト出力用と画像出力用の2つのカテゴリがあります。 一般的な抜け穴を除き、すべてのトリックが許可されます。 23ページを個別に出力できます。 最大23のプログラム(各ページに1つなど)を作成し、そのサイズを合計してスコアを決定することができます。 プログラムと共に最大23個のバイナリファイルを使用できます。彼らの体重はあなたのスコアにカウントされます。 最短のコード(バイト単位)が優先されます。 ピクセルあたり1ビットで、画像には127 * 127 * 23/8 = 46370バイト+ 7ビットのデータが含まれます。(警告:ピクセル値を46371バイトに格納する場合、余分なゼロを出力することはできません) テキスト出力には末尾の改行/スペースを使用できます。 ビジュアル出力には、宇宙コールの黒ピクセル以外の黒ピクセルを含めることはできません。1列に描画する(正しく並べ替える)か、23個の画像に分割するか、アニメーション(gifのように)することもできます。 添付ファイル:テキスト出力、および再現する画像出力:

8
落下するASCIIボール
入力 ボールと地面が入った2Dマップが表示されます。次のようになります。 1 5 2 3 4 __________________________ 各数字はボールであり、_は地上レベルです。アンダースコア_文字は、グラウンドレベルの行以外の行では使用できません。0-9地上レベルではスペース、改行、数字のみが許可されています。最後のラインが地上レベルであると仮定することはできません-地上レベルの下の空のラインは許可されます。空行を埋めるためにスペースを追加することもできます。 ボールにはから0までの番号を付けることが9できます。互いの上に配置できますが、地面の下には配置できません。ボールの番号は一意です。 各文字が1メートルであると仮定します。 pastebinからマップを入手してください! テストケース1- この ようなものを出力する必要がありますテストケース2-最初のマップと同じ結果を生成する必要があります チャレンジ あなたの課題は、そのようなマップをファイルまたは(stdin使用が許可されている)から読み取り、cat balls.txt | ./yourexecutableボールが地面に当たったときに各ボールの速度を出力することです。 速度の式は次のとおりです。 それは想定hグラウンドの行番号、ボールの行番号、およびそれとの間の行数の差であるgイコール10m/s^2。 出力 m/s地上レベルで各ボールの数と速度を出力する必要があります。たとえばN - Vm/s、Nは、ボール数とVその速度です。必要に応じて配列を出力することもできます。 ハッピーコーディング!:)

1
ASCIIボックス描画をUnicodeに変換します
私は、私が実際に役立つと思うものへのリクエストを恥知らずに投稿しています。タスクは、このような任意のアスキーボックスの描画を取ることです | +----+----+ | state A +---+ +---------+ | | +----v----+ | state B | +---------+ ...そして、ユニコードボックス描画文字を使用して、より美しいものに変換します。たとえば、 │ ╭────┴────╮ │ state A ├───╮ ╰─────────╯ │ │ ╭────v────╮ │ state B │ ╰─────────╯ さらに詳細に: 変換のみ+-| 文字-他の文字は変更しないでください 使用する 箱型図垂直ライト(U + 2502)│ ボックスドローイングライト水平(U + 2500)─ 箱の図ライトアークダウンおよび右(U + 256D)╭ 箱の図ライトアークダウンと左(U + 256E)╮ ボックス図面ライトアークアップおよび左(U + …

4
数字を追加して8をたくさん取得する正しい方法
触発され、この問題をさらに触発されたこの1、7セグメントディスプレイでそれらを表示するために使用されるセグメントにOR演算を行うことにより、2つの整数をとり、ユニークな方法でそれらを加算するプログラムを書きます。参考のため、数字は次のように表されます。 _ _ _ _ _ _ _ _ | | | _| _| |_| |_ |_ | |_| |_| |_| | |_ _| | _| |_| | |_| _| 1は左側ではなく右側の2つのセグメントを使用することに注意してください。この方法で生成できる2つの特殊文字は、数字ではありません。以下の追加表を参照してください。 | 0 1 2 3 4 5 6 7 8 9 --+-------------------- 0 | 0 0 8 8 8 …

17
ギアトレイン、回転
ギアは、噛み合ったギアのサイズに応じて、異なる量の速度を転送します。 ジャックにはギアトレインを回転させる機械があります。しかし、最後のギアの速度はわかりません。 幸いなことに、あなたは素晴らしいコードゴルファーなので、彼を助けることができます! だから、私は何をすべきですか? 各ギアは、内側ギアの半径と外側ギアの半径の2つの数字で表されます。 ギアAが[a,b]でギアBがの場合[c,d]、の速度Aとの速度の比はにBなりますc:b。 ギアのリスト(2タプルのリスト)を指定して、最後のギアの速度を出力します。 最初のギアの速度はであると仮定でき1ます。 完成した例 入力がであるとしましょう[[6,12],[3,10],[5,8]]。 最初のギア[6,12]の速度はになり1ます。 次に、2番目のギア[3,10]の速度はになり1*12/3 = 4ます。 次に、最後のギア[5,8]の速度はになり4*10/5 = 8ます。 テストケース input output [[1,1],[2,2]] 0.5 (1/2) [[1,2],[1,2],[1,2]] 4 (2/1*2/1) [[6,12],[3,10],[5,8]] 8 (12/3*10/5) ルール 基本的なコードゴルフ規則が適用されます。
16 code-golf 

18
調和級数の分母
前に、数値の疑似因子分析を行いました。これは、から1までの数値のLCMですn。 分数を一緒に追加するのに役立ちます。 しかし、我々は分母がいることを見つけること1/1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6で20はなく、pseudofactorialです6、60。 あなたの仕事は、1/1 + 1/2 + ... + 1/n与えられた正の整数の分母を見つけることnです。 テストケース n result 1 1 2 2 3 6 4 12 5 60 6 20 7 140 8 280 9 2520 10 2520 11 27720 12 27720 13 360360 14 …

12
ジオビット言語
Geobitsian言語は英語の新しい倒錯であり、単語はそれぞれが異なる文字で始まる必要があるセグメントに分割されます。次に、それらの開始文字の1つが別の文字列に現れるたびに、対応するセグメント全体に置き換えられ、大文字が使用されます。 このプロセスはGeobitsizingと呼ばれます。 たとえば、「ジオビット」という単語geo bitsは、 Algy met a Bear A Bear met Algy The Bear was bulgy The bulge was Algy としてGeobitsizedになります Algeoy met a Bitsear A Bitsear met Algeoy The Bitsear was bitsulgeoy The bitsulgeoe was Algeoy すべてgがになるのでgeo、すべてがG(何もありませんが)になりGeo、すべてbがbitsになり、すべてがにBなりBitsます。 各置換は、中間ステップではなく、元の文字列に対して実行されることに注意してください。たとえば、代わりに作成されgeoていた場合gbo、b作成されたはに置き換えられませんbits。 チャレンジ Geobitsian言語を生成できるプログラムまたは関数を作成します。 小文字(az)とスペースで構成される1行の文字列を取得します。これは、セグメントを区切るスペースを使用して、ジオビット化引数として使用される単語になります。あなたは仮定することができます: セグメントは空になりません。そのため、スペースは互いに隣接せず、文字列の先頭または末尾にありません。 各セグメントは異なる文字で始まります。したがって、26を超えることはできません。 たとえば、あなたがサポートしなければならないいくつかの有効なセグメント化された文字列はgeo bits、butt ner、alex、およびdo o r k …
16 code-golf  string 

26
長さmのn個の文字列を長さnのm個の文字列に変換する
「m」の長さの「n」個の文字列を指定すると、次の条件で「m」個の「n」長の文字列を返すプログラムを作成します。 すべての新しい文字列には、他の文字列と同じインデックスの文字が含まれている必要があります たとえば、最初の出力文字列にはすべての入力文字列の最初の文字が含まれている必要があり、2番目の出力文字列にはすべての入力文字列の2番目の文字が含まれている必要があります。 例(文字の下の数字は文字列のインデックスです): input: "car", "dog", "man", "yay" 012 012 012 012 output: "cdmy", "aoaa", "rgny" 0000 1111 2222 input: "money", "taken", "trust" 01234 01234 01234 output: "mtt", "oar", "nku", "ees", "ynt" 000 111 222 333 444 入力が毎回正しいと仮定する 最短バイトのコードが勝ちます! 編集: 多くのプログラミング言語があり、それぞれに多くの解決策がある可能性があるため、各プログラミング言語とそれを提供したユーザーに最も短い解決策を投稿します。コーディングを続けてください! 再編集: ユーザーDennisのおかげで、リーダーボードにスニペットを挿入しました。 コードスニペットを表示 var QUESTION_ID=85255,OVERRIDE_USER=56179;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var …
16 code-golf  string 

3
最短時間でこの数字パズルのすべての解決策を見つける
歴史 私の会社は、毎週のニュースレターを社内の全員に送信しています。これらのニュースレターには、先週のなぞなぞの解決策を最初にメールしたり提供したりした会社の誰に対しても叫び声とともに、なぞなぞが含まれています。これらのなぞなぞのほとんどは非常に些細なものであり、正直なところハイテク企業にとってはかなり退屈なものですが、数か月前に私が注意を引いたものがありました。 オリジナルのなぞなぞ: 以下の形状を考えます: 1〜16の自然数があります。すべての連続する行と連続する列の合計が29になるように、すべてをこの形状に合わせます。 たとえば、このパズルに対するそのようなソリューション(ニュースレターに提出した「標準的な」ソリューション)は次のとおりです。 しかし、それを解決する過程で、かなり興味深い情報を見つけました。 それよりもはるかに多くのソリューションがあります。実際、9,368のソリューションがあります。 ルールセットを拡張して、行と列が29である必要はなく、互いに等しいことだけを要求する場合、33,608のソリューションが得られます。 合計27の4,440のソリューション。 合計28の7,400のソリューション。 29の合計のための9,368のソリューション。 合計30の6,096のソリューション。 合計31の5,104ソリューション。 合計32の1,200ソリューション。 だから私と私の同僚(主に私のマネージャーは、「一般目的」のプログラミングスキルを持っている私以外の唯一の人物だったので)は、1か月のほとんど続いた挑戦に着手しました。関連する義務-可能な限り迅速にすべてのソリューションを見つけるプログラムを作成しようとするために。 元の統計 問題を解決するために私が書いた最初のプログラムは、単にランダムな解決策を何度もチェックし、解決策が見つかった時点で停止しました。この問題について数学的分析を行ったことがあれば、おそらくこれが機能してはならないことをすでに知っているでしょう。しかし、どういうわけか私は幸運に恵まれ、プログラムが1つのソリューション(上記で投稿したもの)を見つけるのに1分しかかかりませんでした。プログラムを繰り返し実行すると、多くの場合10〜20分かかるため、これは明らかに問題の厳密な解決策ではありませんでした。 パズルのあらゆる可能な順列を反復する再帰的ソリューションに切り替え、合計していない合計を削除することで、多くのソリューションを一度に破棄しました。IE私が比較した最初の行/列が既に等しくなかった場合、パズルに入れ替わったものがそれを変更しないことを知って、そのブランチのチェックをすぐに停止できました。 このアルゴリズムを使用して、最初の「適切な」成功が得られました。プログラムは、約5分で33,608のソリューションすべてを生成して吐き出すことができました。 私のマネージャーは異なるアプローチを持っていました:私の仕事に基づいて、可能な解決策は27、28、29、30、31、または32の合計しかないと知っていたので、彼はそれらの特定の値についてのみ可能な合計をチェックするマルチスレッドソリューションを書きました。彼はわずか2分でプログラムを実行することができました。だから私は再び繰り返しました。可能なすべての3/4桁の合計をハッシュし(プログラムの開始時に、合計ランタイムでカウントされます)、行の「部分合計」を使用して、以前に完了した行に基づいて、以前に完了した行に基づいて残りの値を検索しました残りのすべての値をテストし、時間を72秒に短縮しました。その後、いくつかのマルチスレッドロジックを使用して、40秒に短縮しました。私のマネージャーは、プログラムを家に持ち帰り、プログラムの実行方法についていくつかの最適化を実行し、12秒に短縮しました。行と列の評価を並べ替え、 私たちのどちらかが1か月後にプログラムを取得した最速の時間は、マネージャーが0.15秒、私が0.33秒でした。私のマネージャーのプログラムはすべての解決策を見つけましたが、それらをテキストファイルに出力しなかったので、私は私のプログラムがより高速であると主張しました。彼がコードにそのロジックを追加した場合、多くの場合、0.4〜0.5秒かかりました。 私たちは、以来、生存するまで、当社内の個人的な挑戦を許されましたが、当然のことながら、質問の遺跡は:することができます。このプログラムは高速化できますか? それが私が皆さんに提起する挑戦です。 あなたの挑戦 私たちが取り組んだパラメーターは、「29の合計」ルールを緩和し、代わりに「すべての行/列の合計が等しくなる」ようにしました。このルールを皆さんにも設定します。したがって、課題は次のとおりです。この謎に対するすべての解決策を可能な限り短時間で発見(および印刷!)するプログラムを作成します。提出されたソリューションに上限を設定します。比較的まともなコンピューター(<8歳)でプログラムに10秒以上かかる場合、カウントするには遅すぎる可能性があります。 また、パズルにはいくつかのボーナスがあります: ソリューションを一般化して、16個の数値のセットだけでなく、それでも機能するようにできますint[1,16]か?タイミングスコアは、元のプロンプト番号セットに基づいて評価されますが、このコードパスを通過します。(-10%) 重複した数値を適切に処理して解決する方法でコードを記述できますか?これは見かけほど簡単ではありません!「視覚的に同一」のソリューションは、結果セット内で一意である必要があります。(-5%) 負の数を処理できますか?(-5%) あなたもすることができますしようとハンドルがの浮動小数点数というソリューションを生成するが、それは全く失敗した場合はもちろん、ショックを受けることはありません。しかし、堅牢なソリューションを見つけた場合、それは大きなボーナスの価値があるかもしれません! すべての意図と目的に対して、「回転」はユニークなソリューションと見なされます。したがって、異なるソリューションの単なるローテーションであるソリューションは、独自のソリューションとしてカウントされます。 コンピューターで作業しているIDEはJavaとC ++です。他の言語からの回答を受け入れることもできますが、コードのセットアップが容易なランタイム環境を入手できる場所へのリンクも提供する必要があります。

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