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

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

10
愚かな制限と砂漠
だから、あなたは机に座って、円周率の最初の20桁を計算するプログラムをゴルフしていました。そして上司が来て、リンゴIIeを窓から投げ出しました。現在、新しいプロジェクトに取り組んでおり、このコンピューターにはまだテキスト機能がありません。なし。フォントなし。なし。 それでは、そのプログラムを終了しましょう。プログラムの一部ではないフォントを使用せずに、piの最初の20文字を計算して表示します。出力は、イメージファイル(jpeg、png、gif、svg(文字を使用しない限り)、bmp、xpm)として表示または標準出力に書き込むことができます。任意の言語を使用できますが、言語のフォント機能、テキスト表示などを使用することはできません。 小さなボーナス(10文字)リサで動作する場合。 編集:それを理解しなかった人のために、私のインスピレーションは最初のMacであり、タイトルはしゃれです。アニメーションGIFがクールな@Sukminderへの大きな称賛。より良い答えが出れば、コンテストは終了しません。

30
ランダムチケットコードジェネレーター
宝くじ会社は、長さが10文字のランダムな宝くじチケット番号を生成したいと考えています。 すべての数字が1回だけ来るような数字を作成するために、任意の言語でコードを記述します。たとえば9354716208、この数字では、0から9までのすべての整数が1回だけです。この番号は乱数である必要があります。 生成された番号が画面に表示されます。 すべての許容文字のすべての順列を生成できる必要があります。 コードはできるだけ小さくする必要があります(バイト単位)。
18 code-golf 

25
文字列を大文字にする
文字列を指定して、大文字にします。総額で私は意味conTeNT-lENgthの変更をContent-Length。例で-は、単語境界として2つの単語を含む文字列を示しました。ただし、単一の文字で区切られた任意の数の単語を境界として含む文字列のコードを記述することを期待しています。この境界は、文字列全体で変化する場合があります。 条件 使用regular expressionsは許可されていません。 文(文字列)には任意の数の単語を含めることができます。 各単語は、あらゆるケースのEnglish文字[a-zA-Z]で構成されます。 文中の異なる単語は単一の文字で区切られます。この文字はしますのみのいずれであっても-、.、<space-character>、/、&、#。文には、言及された文字以外の文字が含まれないと想定しても安全です。 単語の境界は出力で保持する必要があります。 最短のコードが勝ちます。 たとえば、プログラムはのBegin/With.Type&Contentために出力する必要がありますBeGin/wITH.tyPE&conTeNt。 Some test cases: "aGeNT ACcEpT/LEngTh-tYPe USeR raNgE.TyPe" "type&AgeNt/CC/COnteNt lEnGth#acCePT/AgeNt.RAnGe-Cc/contEnt/cODe" "cc/rEspoNCe.lEngtH#tYpE-witH&UsEr/bEgIN&uSer.AGEnT&begIn/aCCEPt/Cc" "lENgTH#USeR.tYpE/BeGiN&LENGth tYpe/ACCEpt#rANge/codE&AnD-ACCepT/ConTenT" "contENT/ACcEpT" "BeGin/wITH.tyPE&conTeNt" "Code.cc#User.lenGTh-USer-AND&tyPE TypE&leNgtH.tYPe usER.UseR&with" "RaNgE&COnTeNT WITh CoNTENT-TypE tyPe" "BEgin COdE#uSeR#aGeNt.USeR" "TypE LENGth"
18 code-golf  string 

4
FractranをBrainfuckに変換する
バックグラウンド Fractranは、John Conwayによって発明された難解なチューリング完全プログラミング言語です。Fractranプログラムは、分数の順序付きリストで構成されています。プログラムは、入力として単一の整数を取ることから始まります。プログラムの各反復で、最初の分数をリストで検索し、その分数で数値を乗算すると別の整数が生成されるようにします。次に、リストの先頭から新しい番号でこのプロセスを繰り返します。リストに数値と乗算できる分数がない場合、プログラムは終了し、数値を出力として提供します。 Fractranがチューリング完全である理由は、レジスタマシンをシミュレートするためです。数値の素因数分解はレジスタの内容を保存しますが、除算と乗算は条件付きでレジスタを加算および減算する方法です。ウィキペディアの記事(上記にリンク)を読むことをお勧めします。 チャレンジ あなたのタスクは、STDINから有効なFractranプログラムを唯一の入力として取得し、Fractranプログラムをシミュレートする有効なBFプログラムをSTDOUTに生成する、可能な限り最短のプログラムを作成することです。BFを使用してFractranプログラムをシミュレートする方法は2つあります。 注:あなたの答えはBFプログラムではありません。答えは、特定のFractranプログラムからBFプログラムを生成するコードです。目標は、BFプログラムをFractranプログラムと同等にすることです。(技術的にはBFで競争することができますが、難しいでしょう) オプション1 プログラムは、次のことを行うBFプログラムを出力する必要があります。 対応するASCII文字(BF入力の動作方法による)の形式で、STDINから正確に1つの番号を取得します。これは、Fractranプログラムへの入力です。 対応するASCII文字の形式でSTDOUTに正確に1つの数字を出力します。これはFractranプログラムからの出力です。 このオプションは、Fractran仮​​想マシンからの正確な入力と出力を表すことを目的としています。 オプション2 プログラムが生成するBFコードは次のことを行う必要があります。 (プログラムを実行する前に)メモリに既にエンコードされている数の素因数分解を行うことにより、入力を取得します。入力が28(2 * 2 * 7)の場合、2番目のセルに値2があり、7番目のセルに値1があります(ポインターはセル0から始まります)。他のすべてのセルはゼロになります。 プログラムの終了時に、出力の素因数分解をメモリにエンコードすることにより、出力を提供します。出力が10の場合、セル2と5のそれぞれに値1がなければなりません。他のすべての素数のセルの値はゼロでなければなりません。他のセルの内容は関係ありません。 このオプションは、Fractran言語の背後にあるコンピューティングモデルを表します。 ルールと要件 入力(プログラムの上部)は、STDINの分数のリストになります。分子と分母の間にコンマがある行ごとに1つの小数があります。空行は入力の終わりを表します。端数は常に最低の項に削減されます。 プログラムの出力は、STDOUTに対する単一行の有効なBFプログラムでなければなりません。このプログラムは、2つのオプションのいずれかに従って、特定のFractranプログラムをシミュレートできる必要があります。入力については、生成されたBFプログラムはFractranプログラムと同じ出力を生成できるはずです。 選択したオプションを指定する必要があります。 BFメモリとテープの境界、およびそれらがラッピングしているかどうかを選択できます。 コードゴルフ。また、出力されるBFプログラムのサイズは重要ではなく、変換を行うプログラムのサイズのみが重要です。 プログラムは印刷可能なASCIIのみで構成する必要があります 私がどこでもあいまいな場合は、askすることをaskしないでください。これは説明するのが非常に複雑な課題です。 さらに、プログラムが動作しているかどうかを簡単に確認できるように、次の入力用にプログラムで生成されたBFコードを投稿してください。 33,20 5,11 13,10 1,5 2,3 10,7 7,2 このプログラムは、数値のバイナリ展開で1の数を計算します。ただし、入力と出力は奇妙な形式になっています(すべてのFractranプログラムと同様)。入力の形式は2 ^ Aで、出力の形式は13 ^ Bです。

3
お気に入りのプロットツールを使用してxkcdグラフを手続き的に再作成します
最近、次のようなさまざまな言語でのxkcdスタイルのグラフ(1064)の再作成に関して、かなりの数の質問がありました。 あなたの目標は、既存のxkcdコミックを可能な限りオリジナルに近づけることです。コミックには、少なくとも1つの単純なグラフ、円グラフ、または同様の要素が必要です。 最初の有効な回答から10日以内に、最も投票数の多い回答が勝ちます。 エントリには、上記のグラフ言語で記述されたxkcd-comicを表示するコードが含まれている必要があり、少なくともそのプロットツール(Mathematica、MatLabなど)を使用しています。 コミックは画像​​として保存してはならず、手続き的に生成する必要があります 元のWebサイト、そのミラー、またはハードドライブ上のそのコンテンツなどへのリンクがあってはなりません。 投票では、結果のオリジナルとの類似性を評価する必要がありますが、ソリューションの美しさはそれほどではありません。ここにはコードゴルフはありませんが、できるだけ短く簡単なソリューションが期待されています。

8
価格の丸めでお金を節約
カナダでは、ペニーはもはや流通していません。現金支払いは、最も近い5セントに丸められます。 購入を分割することでお金を節約できます。たとえば、2つの$ 1.02アイテムの価格は2.04ドルであり、切り上げて2.05ドルになりますが、別々の購入でアイテムを購入すると、各価格は合計2.00ドルで1.00ドルに切り上げられます。ただし、2つのアイテムをそれぞれ1.03ドルで購入する場合は、1回の購入で購入することをお勧めします。 お金を節約するもう1つの方法は、クレジットの支払いが丸められないため、丸めが好ましくないときにクレジットカードを使用することです。2つの$ 1.04アイテムが必要な場合、購入の分割方法に関係なく、合計価格は$ 2.10に切り上げられます。したがって、これらのアイテムの代金はクレジットカードで支払う必要があります。 アイテムの価格リストを整数のセントとして受け入れ、現金またはクレジットによる一連の購入を通じて達成できるアイテムの可能な最低価格(セント)を出力する関数またはプログラムを記述します。 最短のコードが優先されます。 テストケース [] : 0 [48] : 48 [92, 20] : 110 [47, 56, 45] : 145 [55, 6, 98, 69] : 225 [6, 39, 85, 84, 7] : 218 [95, 14, 28, 49, 41, 39] : 263 [92, 6, 28, 30, 39, …
18 code-golf  number 

21
Javascript:1の10x10配列を作成する
明らかに、この課題は関数とライブラリを分離することで簡単になるため、許可されません。 コードはECMAscript仕様に準拠する必要があります(どの仕様でも同じです)ので、ブラウザー固有の回答はありません。 配列は、インスタンス化後にアクセスできる必要があります。 私は今のところ差し控える答えがあります。 注: javascriptで多次元配列を作成するのは不便であるため、この課題はjavascriptに固有のものです。

1
三目並べで失う
Misèretic-tac-toeのゲームをプレイするプログラムを作成します。つまり、目標は、対戦相手に強制的に3連発させることです。 標準入力で「X」または「O」(ゼロではなく文字)を受け入れて、プログラムの再生側を決定します。次に、自分のターンでの動きに1桁を出力し、ゲームオーバーになるまで相手のターンで1桁を読み取ります(Xが常に最初になります)。勝者が決定したら、勝った人にはXまたはO、引き分けにはDを出力します。たとえば、Oが連続して3を獲得した場合、Xが勝ちます。 ボードには次のような番号が付けられていると仮定します。 0|1|2 ----- 3|4|5 ----- 6|7|8 理想的には、ソリューションは最適であり、決して失われないことです。三目並べのように、完璧なプレーは常に引き分けになるはずです。上記のプロトコルが順守されている場合、さまざまな可能な戦略に対して自動的に送信をテストできます。 勝者は最短のコードです。同様に良い動きからランダムに選んで、もう少し予測不能にする場合のボーナスポイント。

14
邪悪な目的のための奇妙な選別機
こんばんは! あなたの課題は、一連の数字を完全にソート解除することです。 入力 正確に100個の整数がプログラムに送られます。プログラムは、入力をファイルとして、またはstdinを介して受け入れます。各整数は改行文字で区切られます。 これらの100個の整数は、選択した言語の符号付き整数の最小値から最大値までの範囲になります。 重複する値はありません。値は、順序付けられているか、順序付けられていないか、部分的に順序付けられている可能性があります-プログラムは、各ケースを処理できる必要があります。 出力 出力は、100個の整数で、完全にソートされておらず、それぞれ改行文字で区切られている必要があります。出力は、stdout経由またはファイルへの場合があります。 完全にソートされていないということは、リストが順序付けられた順序で完全にソートされた場合に隣接する値に隣接する値がないことを意味します。 スコア 1文字につき1ポイント、最低スコアが勝ちます。組み込みまたはライブラリの並べ替え機能を使用しないソリューションには、-100のボーナスがあります。組み込みの乱数関数を使用しないソリューションには、-20のボーナスがあります。 この質問をできる限り完全に定義しようとしました。ご質問がある場合は、お問い合わせください。次回の改善方法についてご意見がありましたら、お知らせください。 フォア!

4
スタープログラミング!
チャレンジ 星を印刷するプログラムまたは関数を作成してください!プログラムは、標準入力によって、星のサイズと星のポイント数の2つのパラメーターを受け取ります。星は0〜10の任意のサイズで、3、4、または5ポイントを持つことができます。入力パラメーターはコンマで区切られます。たとえば5,3、3ポイントのサイズ5の星を意味します。星はアスタリスクで構成されています* プログラムが有効な入力のみを受け取ることを考慮してください。 出力にきれいな星が見えるように、プリントは正しく間隔をあける必要があります! パラメータの説明 ポイント 中央のアスタリスクから数える腕の数です。 3ポイントの星: * * * * * * * それらは、垂直アームと2本の斜めアームで構成されます。対角線の間隔は2*size-1 星4つ * * * * * * * * * それらはXの形をしており、2本の対角線で構成されています。行間の分離は2*(size-1)+1 5ポイント星 * * * * * * * * * * * それらは、垂直線と水平線で構成されます。水平線の各アスタリスクは、1つのスペースで区切られます。また、2つの対角線があり、それらの間には2*(size-2)+1 サイズ サイズは、星の各腕が中央のアスタリスクから数える(含む)アスタリスクの数です。 サイズ1の星は単一のアスタリスクで構成されています * サイズ2の星の例 3点 * * * * …

1
私はあなたのようなコードゴルフパズルを解きましたが、膝に矢を取りました
矢で膝にぶつかるのは、今選択した怪我のようです。そのため、次のゴルフチャレンジを提案します。 次のような冒険家がいます。 O /|\ / | \ | | / \ / \ 1つの弓(}シンボルとして描画)、1組の壁(#シンボルとして描画)、および1人の冒険者を含むテキストファイルが与えられた場合、ヒットするために矢印を発射する角度と初期速度を計算する最小のコードを記述しますひざの彼。 以下を想定します。 ファイル内の各文字は0.5 x 0.5メートルです。 矢印はの中心から発射されます}。つまり、0.25m, 0.25m 重力は 10ms^-2 矢印の重さ 0.1kg 矢印はポイントです。つまり、矢印の座標がブロックの1つに入ったときにのみ衝突が発生します。 最大初期速度は 50m/s 角度は0(真上)から180(真下)までの範囲で指定できます 冒険者の足のどの部分を打つことは、膝への打撃と見なされます。 壁(#キャラクター)は0.5mx 0.5mブロック全体を占有します。 矢印はファイルの「上部」を移動できますが、入力が#文字の天井から始まるのを止めるものは何もありません。 矢印で壁を貫通することはできません。 冒険者の他の部分を打つことは許可されていません! 彼を膝で打つことが不可能な場合は、エラーを表示する必要があります。 入力例: # } O # /|\ / | \ # | # | / \ …

7
最も単語の多い組み合わせロックを見つける
私は数字の代わりに文字を持っている組み合わせ南京錠を持っています。それは次のようになります。http://pictures.picpedia.com/2012/09/Word_Combination_Padlock.jpgその上に10種類の文字をそれぞれ有する5つのリールは、あります。 ほとんどの人は、任意の文字列ではなく、組み合わせに単語を使用することを好みます。(もちろん安全性は低くなりますが、覚えやすいです。)したがって、ロックを製造するときは、できるだけ多くの5文字の英語の単語を作成するために使用できる文字の組み合わせを持つように構築することをお勧めします。 あなたの仕事は、あなたがそれを受け入れることを選択した場合、できるだけ多くの単語を作成できるリールへの文字の割り当てを見つけることです。たとえば、あなたのソリューションは ABCDEFGHIJ DEFGHIJKLM ZYXWVUTSR ABCDEFGHIJ ABCDEFGHIJ (もしあなたが想像しすぎていなかったら、それはそうです)。 一貫性を保つため、http://www.cs.duke.edu/~ola/ap/linuxwordsの単語リストを使用してください そのリストの5文字の単語は、適切な名前も含めて問題ありません。Sino-およびL'vov、およびaz以外の文字を含むリスト内のその他の単語を無視します。 優勝したプログラムは、単語の最大セットを生成するものです。複数のプログラムが同じ結果を見つけた場合、最初に投稿されたものが勝ちます。プログラムは5分以内に実行されます。 編集:活動が停止し、より良い解決策が出ていないので、私はピーター・テイラーが勝者であると宣言します!皆さんの独創的なソリューションをありがとう

6
偽のエラーメッセージ
コンパイラまたはインタープリターの構文エラーメッセージを出力するプログラムを作成します。エラーメッセージは誤解を招くものである必要があります。そのため、コードメンテナーはエラーが偽造されたことを見つけるのに数日かかります。また、エラーはできるだけ正確でなければならず、コードを正しく参照する必要があります。 準拠言語の場合、コードメンテナーがcompile program.p && ./programコマンドラインでプログラムをコンパイルして実行すると想定します。つまり、コンパイラーからの出力かプログラム自体からの出力かを区別できません。また、コードメンテナが構文エラーメッセージを有効にすることを前提としています。 参考のために、ここに私が作成した例を示します:https : //gist.github.com/359604 DATAセクションには、エラーメッセージの文字列を符号化し、ハッシュが%abcdefデコード表です。エラーはバックスラッシュへの参照を出力します。これにより、コード管理者はバックスラッシュをカウントしようとします。 エントリーの採点: コードには一見明白な意図がある /6 コードはエラーを正しく再現します/16 (ポイントは16から始まり、各不正確さの対応する要因で除算されます) 正しい大文字:4 正しい行番号と列番号:4 正しい言い回し:間違った単語ごとに2つ 参照されている行番号は、コード管理者を誤解させます /3 例えば、 ./pythontest1.py: line 7: syntax error near token `(' ./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input' 「トークン」の前に「予期しない」が欠落していることの正確性について8(16/2)を取得します。通常のPythonインタープリターが表示されます ./pythontest1.py: line 7: syntax error near unexpected token `(' ./pythontest1.py: line 7: …

5
ジャンプとランニング
マシューはパズルを解くのが好きです。彼がなんとか解決しようとするたびに、彼は喜んでスキップします。最近、彼は本当にこれをする必要があります、流星群が地面に彼が落ちたくないクレーターと穴を開けたので。 あなたは、マシューが横断したい風景の一部を与えられ、うまくいけば最後に健康に到着します。地面はメートル単位で与えられ、各メートルは通常の地面または穴のいずれかです。彼が走っているとき、彼はなんとかステップごとに1メートルを越えることができます。別の方法は、ステップごとに4メートルを超えるジャンプです。マシューは最初の地上メーターの一番左から始まり、最後のメーターまで行きたいと思っています(ただし、それ以上ではありません。風景の最後のメーターを超えて無限の穴を想像してください)。 入力 入力は、改行で終了する標準入力の単一行として指定されます。線はダッシュ(-)またはアンダースコア(_)で構成され、それぞれ地面または穴のメーターを表します。サンプル入力は次のとおりです。 ----__--___--- 指定されたランドスケープは少なくとも1メートル、最大で30メートルの長さで、常に地面から始まります。 出力 出力は標準出力で提供され、Matthewへの一連の移動コマンド(run(R)またはjump(J))を表します。上記のように、 実行コマンドによりマシューは1メートル走り、ジャンプすると正確に4メートル前進します。上記の例では、次の移動が可能です。 RRJRJRR おおよそ次のようになります。 ランドスケープを通る安全なパスがない場合は、感嘆符(!)を1つ印刷する必要があります。 サンプル入力 -------- ----__--___--- -_______ -_-_-_-_-_- - サンプル出力 JRRR RRJRJRR ! ! (最後の出力は移動する必要がないため空白ですが、Markdownはこれを解析できないと思います) 注意 単一の可能なパスのみが必要であるため、プログラム出力はサンプル出力に正確に一致する必要はありません。ソリューションが存在し、すべての移動コマンドが地面に移動し、最終的に最後のメーターに到達した場合にソリューションが提供される限り、出力は有効です。 標準エラーの追加出力は無視されます。 勝利条件 ゴルフで通例であるように、最短のコードが勝ちます。同点の場合、以前のソリューションが優先されます。 テストケース 同じテストケースを含む2つのテストスクリプトがあります。 bash(Venteroに感謝) パワーシェル 呼び出しはどちらの場合でも:<test script> <my program> [arguments]、./test ruby jumprun.rbまたは./test.ps1 ./jumprun.exe。 別のメモ このタスクは、2011〜W24の間に私の大学で開催されたゴルフコンテストの一部でした。出場者のスコアと言語は次のとおりです。 104 –ハスケル 131 –ハスケル 154 – C …

20
すべての文字が同じ列を検索します
私はSOでこの質問に出会い、それが素晴らしいゴルフの挑戦になると思った。だからここにある: チャレンジ: 文字列のシーケンスを1行に1つずつ読み取り、各文字列が同じ文字を持つすべての位置のリストを出力するプログラムを作成します。 入出力: 入力は、1行以上の印刷可能な非空白ASCII文字で構成され、各行に改行が続きます。すべての入力行が同じ長さであると仮定することができます。改行は入力の一部と見なされません(つまり、一致する文字として出力するべきではありません)。 入力例(SO質問から恥知らずに盗まれた): abcdefg avcddeg acbdeeg 入力を読み取った後、プログラムは一致する各列の位置とそれに含まれる文字を印刷する必要があります。(プログラムは、一致する列がないことを早期に判断できる場合、それ以上の入力の読み取りを停止できますが、する必要はありません。)妥当な出力形式は許可されます。特に、ポジションに0ベースまたは1ベースのインデックスを使用できます。 上記の入力の出力例(0ベースのインデックス付けを使用): 0: a 3: d 6: g 得点: これはコードゴルフなので、最短の回答が勝ちます。同点の場合、追加の機能に対して小数のタイブレーカー文字が授与される場合があります。 -½文字。長さが等しくない入力行を正しく処理します。(出力には、最短の入力行の終わりを超えた位置を含めないでください。) −¼ UTF-8でエンコードされた任意のUnicode文字で構成される入力を正しく処理するための1/4文字。 インスピレーションについては、SOの質問でいくつかの未解決のソリューションを見つけることができます(上記を参照)。 明確化: のように位置と文字を単純に連結しても、「合理的な出力」としてはカウントされ0a3d6gません。出力の各要素を明確に解析できるように、出力の各要素間に何らかの種類の区切り文字(スペースなど)を提供する必要があります。 入力は標準入力ストリーム(stdin)で提供されるか、選択した言語にとって最も自然なテキストファイル入力メカニズムを使用して提供されます。(選択した言語がいない場合は持っているファイル入力のための自然なメカニズムを、精神内の最も近いと思われるものは何でも。) 読み込むデータがなくなると(つまり、ファイルの終わり条件が発生すると)、入力は終了します。必要に応じて、入力を空白行で終了する必要がある場合があります(当然、入力の一部としてカウントしないでください)。そうする場合は、他の人がテストのために正しい入力を提供できるように、回答にそれを記載してください。 最後の行を含むすべての入力行は、改行文字で終わります。あなたの答えは、この改行を一致する列として報告してはいけません。(最後の行が改行で終わらない入力もソリューションで処理できる場合は問題ありませんが、必須ではありません。)
18 code-golf 

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