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

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

9
真理値表:great祖父のコンピューター
学校時代に戻ったことを思い出すと、真理値表について学んだことを覚えているかもしれません。彼らは退屈そうに見えたが、彼らは論理の基盤であり、(一部の人は主張する)すべてのコンピューティング... 問題 あなたの使命は、あなたがそれを受け入れることを選択した場合、入力が与えられた真理値表を出力できるコードのプログラム、関数、またはウィジェットを書くことです。 入力 入力は、真理値表を作成する論理ステートメントを含む文字列(データ構造など)になります。例えば: p ∧ q これはp and q(論理結合)を意味し、以下を出力します: p q p ∧ q T T T T F F F T F F F F 間隔に注意してください:列のアイテムはヘッダーの中央にあります キャラクター バイトではなく文字でスコアを付ける 論理比較文字は特別であり、常に見た目が同じではありません。次の文字を使用します。 論理積(AND):∧U + 2227 論理和(OR):∨U + 2228 論理否定(NOT)~またはそれぞれ¬U + 7eおよびU + ac ボーナス これらのボーナスはすべてオプションですが、スコアからポイントを奪います。どれか選んでください。 論理否定 論理否定は、真理値表の単項演算子です。!ほとんどのCベースの言語と同等です。それは可能false=> trueと万力その逆。¬ またはで 表記され~ます(両方をサポートする必要があります)。これをサポートすると、スコアの10%がノックオフされます。ただし、結果を表示するには追加の列を追加する必要があります。例: …

7
プレフィックスツリートラバーサル
(stdinまたはコマンドラインを介して)再帰形式の文字列を取り込むプログラムを作成します。 PREFIX[SUFFIXES] どこ PREFIX 空の文字列を含む、小文字(az)の任意の文字列を指定できます。 SUFFIXESPREFIX[SUFFIXES]空のシーケンスを含む、再帰形式が連結された任意の文字列シーケンスです。 各サフィックスの文字列のリストを再帰的に評価してプレフィックスに追加することにより、入力から小文字の文字列のリストを生成します。このリスト内の文字列を任意の順序で、1行に1つずつ(およびオプションの末尾の改行も)標準出力します。 例 入力が cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]] その後、接頭辞があるcatとし、接尾辞はs[up[][]]、[]、 ch[e[r[]s[]]]、とa[maran[]comb[]pult[[]ing[]]]。各サフィックスには、独自のプレフィックスとサフィックスが順番にあります。 出力は、これらの9ワードで任意の順序になります catsup cats cat catcher catches catamaran catacomb catapult catapulting 入力はこのツリーをエンコードするため そして、9つの出力ワードのそれぞれは、ルートからリーフへツリーを走査することによって形成できます。 ノート プレフィックスは空の文字列である可能性があることに注意してください。 [donut[][]cruller[]] 出力が(任意の順序で)有効な入力です donut cruller 空の行は、2番目のサフィックスが一致する空の文字列です。 接尾辞シーケンスも空にすることができるため、些細な入力の場合 [] 出力として単一の空行があります: 入力は一意の出力ワードのみを生成すると想定できます。 たとえば、2回エンコードされるhat[s[]ter[]s[]]ため、無効な入力になりますhats。 同様に、[[][]]空の文字列が2回エンコードされるため、無効です。 入力が可能な限り短い、または圧縮されていると想定することはできません。 たとえば、'e'上記の主な例の'ch'ノードはノードと組み合わせることができますが、それは入力が無効であることを意味しません。 同様に、[[[[[]]]]]空の文字列を次善の方法でエンコードしているにもかかわらず、有効です。 プログラムの代わりに、入力文字列を引数として受け取り、出力を通常どおり印刷するか、文字列またはリストとして返す関数を作成できます。 バイト単位の最短コードが優先されます。

4
7セグメントディスプレイを使用して単語を表示する
初めてのプログラミングパズルとコードゴルフは、Seven-Slash Displayです。これも、7セグメントディスプレイに基づく私の最初のチャレンジです。 数字以外に、単純な7セグメントディスプレイを使用してどのような文字を表示できるかをよく考えます。多くの文字が表示できることが判明しました。実際、K、M、V、W、Xの文字以外はすべて、単一の7セグメントディスプレイを使用して表示できます。これは、文字の小文字または大文字を表示できるためです。例えば 「abcdef」は次のように表示できます _ _ _ _ !_!!_ ! _!!_ !_ ! !!_!!_ !_!!_ ! 各文字は、とで構成され、3×3行列であることに注意してください!と_。 もちろん、7セグメントディスプレイを使用して数字と記号を表示できます。 _ _ _ _ _ _ _ ! _ !_ !_ ! _! !!_ !_!! !_!!_! ! _!!_ !_! !_! ! _!! !_ ! ! _! 一部の文字には、大文字と小文字の両方を使用できます。 _ _ ! _ !_!!_ …

21
言葉の価値を見つける!
前書き [ここにクールな名前を挿入]の土地では、誰もが紙に対して深刻なアレルギーを持っているため、お金で物を買うことはありません。彼らは言葉でお互いに支払います!しかし、それはどうですか?まあ、彼らはそれぞれの文字の数値を与えます: a=1,b=2,c=3,etc. (後で説明する他の特別なルールを使用) この課題では、あなたの仕事は文章の価値を計算することです。 チャレンジ あなたは文になる入力を取ります。入力に改行や末尾のスペースがないと仮定できます。課題は、次のルールを使用して、文の価値を計算することです。 a=1,b=2,c=3,etc. 大文字は、対応する小文字の1.5倍の価値があります H=h*1.5 だから、言葉 cab 価値があるだろう c+a+b = 3+1+2 = 6 しかし、Cab大文字のcを持つ単語は価値があり(c*1.5)+a+b = 4.5+1+2 = 7.5 ます。したがって、プログラム入力が「Cab」の場合、プログラムは7.5を出力します。 アルファベット以外の文字はすべて1の価値があります。 これはコードゴルフであるため、バイト単位の最短回答が優先されます。幸運を!
13 code-golf  string 

13
最大100個の組み合わせを描く
各コーナーに1桁の数字のボックスがあります: 1|2 --- 3|4 行に沿って数字を左から右に連結すると、12と34が得られます。列に沿って数字を上から下に連結すると、13と24が得られます。これらの数値をすべて加算すると、12 + 34 + 13 +が得られます。 24 = 83。 チャレンジ 上記のように計算された合計が100に等しいすべてのボックスを印刷するプログラムを作成します。 各コーナーに1〜9の1桁の数字が含まれていると仮定すると、1157、1247、1337、1427、1517、2138、2228、2318、および3119の9つの組み合わせがあります。私たちはこの挑戦のためではありません。) 12 + 34 + 13 + 24は100ではないため、例1234は機能しないことに注意してください。 入力 なし 出力 次の形式の回答ボックス: A|B --- C|D 出力は、STDOUTまたは最も近い代替に出力する必要があります。 ルール AB + CD + AC + BD = 100 各コーナーには、1〜9の正の整数のみが含まれます。 0は除外されます。 番号は複数回使用できます。 上記のように、ボックスを描く必要があります。(A|B\n---\nC|D\n) すべての有効な回答を出力する必要があります。 追加の末尾の改行で問題ありません。 code-golfなので、バイト単位の最短コードが優先されます。 標準の抜け穴とT&Cが適用されます。 これは私の最初の提出ですので、何か明確にする必要がある場合はお知らせください。
13 code-golf 

3
オーバーハンドシャッフルの分析
ロッドは、ジョージとティムの2人のプレイヤーの間でカードゲームをモデレートしています。現在、ティムはカードをシャッフルしています。ロッドは、ティムが不正行為をしようとしているのではないかと疑っています。 ティムはオーバーハンドシャッフルを行っています。彼はデッキの底からカードの山を切り取り、次に山の上部からデッキの上部にさまざまな部分を切り取り、そのプロセスを数回繰り返します。 ロッドはイーグルアイで、ティムが毎回何枚のカードをカットしているかを正確に見ることができますが、ティムがシャッフルするほど速くカードを計算して追跡することはできません。ここであなたがやって来ます:Rodは、詳細なシャッフル情報を取得し、シャッフルが公正か、弱いか、またはトリックかを判断するプログラムまたは関数を作成することを望んでいます。 シャッフルした後、隣接するカードが25ペア未満(同じ順序で)残っている場合、シャッフルは公平であり、ゲームを続行できます。 隣接するカードの少なくとも25組(ただしすべてではない)が隣接している場合、シャッフルは弱くなり、ロッドはティムを頭の上で弾き、さらにシャッフルするように頼みます。 すべてのカードが最後に同じ位置に残っている場合、ティムは明らかに不正行為であり、ロッドは大きなマスで彼を叩きます。 これはコードゴルフなので、最短のコードが勝ちます。 入力: いくつかの行で、スペースで区切られた0〜52(両方とも排他的)の一連の数字を取得します。各行は、すべてのカードを積み重ねて開始および終了するシャッフルのラウンドを表します。 各行の最初の数字は、ティムがデッキの下部からカットしたカードの数であり、後続の各数字は、手からデッキの上部にドロップするカードの数です。ラインの最後の番号の後にカードが残っている場合は、ティムがそれらをデッキの一番上に置いたと想定する必要があります。 入力は有効であることが保証されています。少なくとも1行の数字があり、各行には少なくとも2つの数字が含まれています。各行の最初の数値は、同じ行の他のすべての数値の合計より小さくありません。末尾の改行はオプションです。入力に1つがあると仮定することも、入力がないと仮定することもできます。 出力: プログラムは、シャッフルが公正な場合は「公平」、シャッフルが弱い場合は「弱」、ティムがすべてのカードを同じ順序に維持している場合は「トリック」を印刷または返す必要があります。末尾の改行はオプションです。 例: このデッキには52枚のカードがあると想定されていますが、デモのために、10枚の小さなデッキを使用します。 入力: 5 3 1 4 2 2 上から見た初期デッキ:0 1 2 3 4 5 6 7 8 9 5➜ 0 1 2 3 4(5 6 7 8 9手で) 3➜ 5 6 7 0 1 2 3 …

6
決定要因の最適化の課題
30 x 30のテプリッツを検討する エントリがすべて0または1である行列をます。この課題は、可能な最大の行列式を持つ行列を見つけるための単純な最適化課題です。 入力なし 出力すべてのエントリが行列式とともに0または1である30 x 30のテプリッツ行列をます。 スコア出力する行列の行列式。2人が同じスコアを獲得した場合、最初の答えが勝ちです。 これまでの主要なエントリー Matlabで 65,455,857,159,975Nick Algerによる(およそ(10 ^ 13.8) Pythonの 65,455,857,159,975 65,455,857,159,975(約10 ^ 13.8) Mathematicaの 39,994,961,721,988で39,994,961,721,988(約10 ^ 13.6) 39,788,537,400,052 in R by Flounderer(おおよそ10 ^ 13.6) Vioz-によるPythonの 8,363,855,075,832(約10 ^ 12.9) アレックスAによるジュリアの 6,984,314,690,903 (約10 ^ 12.8) 迷惑な追加の制約2015年7月16日 可能な場合は、任意のまたは高精度の算術を使用して最終出力の決定要因を計算し、実際に何であるかを確認できるようにしてください(常に整数である必要があります)。Pythonでは、これが役立つはずです。

22
バイナリで1から整数までカウント…
イントロ: 私が子供の頃、電卓を手に入れて+ボタンを押し続け、どれだけ高く計算できるかを覚えていました。今、私はプログラミングが好きで、iOS用に開発しています。 カウントは、人間とコンピューターの両方にとって基本的なスキルです。それがなければ、残りの数学はできません。単に開始し1て繰り返し追加1するだけです。 チャレンジ: これは単なる挑戦です。あなたのプログラムにし1たいIntegerことは、それが取り込むものすべてに印刷することです。しかし、10進数のカウントはちょっと退屈なので、それにひねりを加えます。 カウントは10を基数とすることはできません。バイナリでカウントを表示する必要があります。 したがって、32ビット整数を使用して5にカウントするには、次のようになります。 0000 0000 0000 0000 0000 0000 0000 0001 ..... 1 0000 0000 0000 0000 0000 0000 0000 0010 ..... 2 0000 0000 0000 0000 0000 0000 0000 0011 ..... 3 0000 0000 0000 0000 0000 0000 0000 0100 ..... 4 0000 0000 0000 …
13 code-golf 

30
ぼろぼろのランプ
移動中、ランプを壊しました。今、私は新しいものが必要です。ランプにするのはあなたの仕事です!どのサイズが欲しいのかよくわかりませんが、波打つサイズが欲しいのはわかっています。 あなたのプログラム/関数は、数値入力を取り込み、その多くの波線/バンプでランプを印刷する必要があります。 例: 入力:2 出力: /-\ () () / __ \ 入力:3 出力: /-\ () () () / __ \ 入力:5 出力: /-\ () () () () () / __ \ ルール: 0と負の数は関係ありません ランプ(この課題)をより多様にするには、ランプシェードを変更する必要があります。 幅は4文字、高さは1文字でなければなりません。 ランプシェード以外の形状を含む、任意の形状にすることができます。 空白を含めることはできません。 ベースは同じままでなければなりません。 ランプシェードを使用して入力と出力の例を示す必要があります。 最短のコードが勝ちます!

4
非常に奇妙な単語カウンター
INPUT:関数の引数、コマンドラインの引数、STDINなどの小文字のみで構成される文字列。 出力:次のメトリックに従って、文字の距離の合計を表す数値を印刷または返します。 最初と2番目の文字を取り、それらの間の距離を数えます。距離はQWERTYキーボードレイアウトで定義されます。同じ行の隣接するすべての文字に距離1があり、同じ列の隣接するすべての文字に距離2があります。隣接していない文字間の距離を測定するには、最短パスふたつの間に。 例: q->w is 1 distance apart q->e is 2 distance q->a is 2 distance q->s is 3 distance (q->a->s or q->w->s) q->m is 10 distance 次に、入力の最後に到達するまで、2番目と3番目の文字、次に3番目と4番目などを取ります。出力は、これらすべての距離の合計です。 入力と出力の例: INPUT: qwer OUTPUT: 3 INPUT: qsx OUTPUT: 5 INPUT: qmq OUTPUT: 20 INPUT: tttt OUTPUT: 0 同じ列にある文字を示す画像を次に示します。 これはコードゴルフなので、バイト単位の最短コードが勝ちです!

7
高精度の金属手段
バックグラウンド 金属の手段は、有名で始まる中庸、すべての自然数(正の整数)に対して定義され、それぞれが無理数定数(それは無限の非繰り返し小数拡張を有する)です。 自然数の場合、金属平均は二次方程式の根です 根は常に しかし、金属の平均は通常、正の根として与えられます。したがって、この質問では、次のように定義されます。 以下のために結果的に有名な黄金比です。 チャレンジ コードは、nとpの2つの入力を取る必要があります(順序は一貫している限り重要ではありません) nは、どの金属の平均を示す自然数です pは、小数点以下の桁数を示す自然数です。 コードは、n番目のメタリック平均を小数点以下p桁の精度で出力する必要があります。 有効 1〜65,535のnとpの値で機能する場合、コードは有効です。 次の形式で小数を出力する必要があります 桁。桁(スペースなし) たとえば、小数点以下9桁の黄金平均は 1.618033988 最後の数字は、長い10進数展開で表示されるため、丸めずに表示します。ゴールデン平均の次の数字は7ですが、例の最後の8は9に切り上げられません。 10進数の桁数はpでなければなりません。つまり、後続ゼロも含める必要があります。 フォームの回答 有効ではありません-10進展開を使用する必要があります。 最大1つの先行改行と最大1つの後続改行を出力できます。スペース、または数字とシングルポイント/フルストップ/ピリオド以外の文字を出力することはできません。 スコア これは標準的なコードゴルフです。スコアはコードのバイト数です。 リーダーボード (Martinのリーダーボードスニペットを使用) コードスニペットを表示 var QUESTION_ID=52493;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var …
13 code-golf 

6
O(log n)メモリにASCIIスパイラルを出力します
奇数の正の整数 を受け取るプログラムまたは関数を作成できますn。ここでn >= 3、関数引数、コマンドライン引数として、またはSTDIN(またはシステムに相当)として、ASCIIスパイラルをSTDOUT(またはシステムに相当)に出力します。どこそれは内側に時計回りに回転するトップエッジが正確であるn文字。最初の右端n+1は明らかに文字数でなければなりません。例えば、 入力: 11 出力: *********** * ********* * * * * * ***** * * * * * * * * * * * * * * * *** * * * * * * * ******* * * * *********** キャッチ: あなたのプログラムはO(log n)メモリ以上を使用してはいけません。 プログラムは、文字*(ASCII 42)、(ASCII 32)、<CR>(ASCII …

1
mtDNA突然変異ツリー
バックグラウンド: MtDNAは、母親から子供に渡されるヒトDNAの一部であり、めったに変異しません。これはすべての人間に当てはまるので、母体の祖先を通じてすべての人間が架空のEVEまでさかのぼって相互にどのように関係しているかを視覚化する巨大なツリーを作成することができます。子が生まれたときのMtDNAのすべての突然変異は、ツリーの親ブランチから新しいサブブランチを作成します。 ミトコンドリアDNA(mtDNA)の詳細については、こちらをご覧ください:https : //en.wikipedia.org/wiki/Mitochondrial_DNA 目的: プログラムにはmtDNAツリーブランチの突然変異カウントのリストが提供され、プログラムはそのツリービューを提供する必要があります。 入力と出力の例: 入力は、3列のセミコロンで区切られたテーブルで、各ブランチに1行があります。例: L0a'b'f'k;L0;14 L0a'b'f;L0a'b'f'k;23 L0;mtEVE;10 L0a'b;L0a'b'f;30 L0a;L0a'b;38 L0a1'4;L0a;39 L0a1;L0a1'4;40 L0a1a;L0a1;42 L0a1a NL;L0a1a;43 L0a1a1;L0a1a NL;44 L0a1a2;L0a1a NL;45 L0a1a3;L0a1a NL;44 L0a1 NL;L0a1;41 L0a1b;L0a1 NL;44 L0a1b NL;L0a1b;45 L0a1b1;L0a1b NL;46 L0a1b1a;L0a1b1;47 L0a1b1a1;L0a1b1a;48 L0a1b2;L0a1b NL;48 L0a1b2a;L0a1b2;50 L0a1c;L0a1 NL;45 L0a1d;L0a1 NL;44 L0a4;L0a1'4;55 L0a2;L0a;47 L0a2a;L0a2;49 L0a2a1;L0a2a;50 L0a2a1a;L0a2a1;51 L0a2a1a1;L0a2a1a;53 L0a2a1a2;L0a2a1a;53 L0a2a2;L0a2a;53 …

1
XKCDブラケット確率
今日のXKCDはスポーツトーナメントスタイルのブラケットであり、競技者はよく知られた名前であり、混乱を招く可能性のある名前のグループに入れられます。 与えられたラウンドの各競技者がそのラウンドに勝つ可能性が等しいことに基づいて、与えられた競技者がトーナメント全体に勝つ確率を与えます。 入力 出場者の名前。 XKCDはすべて大文字を使用するのが好きですが、大文字と小文字を区別せずに使用することも、入力大文字と小文字を区別しないこともできます。 すべての入力名が有効であると想定できます。 Jeff GordanはおそらくスペルミスですJeff Gordon。これらのいずれかまたは両方を受け入れることを選択できます。 いくつかの名前は句読点、例えば含めるH. G. WellsとをJoseph Gordon-Levitt。句読点の有無にかかわらず(またはその両方)、名前を受け入れることを選択できます。句読点なし上記のようになりますH G Wellsし、Joseph Gordon Levitt 同様に、どちらかBeyoncé、Beyonceまたは両方を受け入れることを選択できます Mister/Fred Astaire/Rogersラインが少し奇妙です。この1については、次のすべてを受け入れる必要がありますFred Rogers、Mister RogersとFred Astaire 出力 与えられた競技者がトーナメント全体に勝つ確率(合理的な形式)(例1/64) 例 ルイアームストロングは、6ラウンドでそれぞれ2人の競技者と対戦する可能性があるため、1/64の勝率があります。 アランリックマンは潜在的に7ラウンドでプレイする可能性があります。1回目は3人の競技者で、残りは2人の競技者であるため、1/192の確率で勝ちます。 画像からすべての名前を入力する手間を省くために、explainXKCDはすでにそれらを表にしています。また、それらをこのペーストビンにダンプしました。 ExplainXKCDでの勝ちの確率は間違っていることに注意してください-おそらく最終ラウンドを忘れているため、本来の2倍の大きさです。@Geobitsを指摘してくれてありがとう。

1
絶滅からガチョウを救う
アレックスAとして知られるガチョウの種は、64個のセルで構成される三角形のグリッドに存在することが知られています。 (この無関係なプロジェクトオイラー問題から撮影した写真。) 各セルに番号0をラベル付け63し、一番上の行から始めて、その下の各行を左から右に移動します。したがって、上のセルはで0あり、右下のセルは63です。 各セルには3つの境界線があります。フォーム内の各境界線にラベルを付けることができますa,b。aおよびbは、その境界線を共有するセルの番号です。たとえば、セル0との境界線2が呼び出される0,2か、2,0(どの順序で配置してもかまいません)。 グリッドの端のセルには他のセルと共有しない境界があるため、グリッドの端の境界のラベル付けシステムは異なります。境界線が1つのセルの一部のみである場合、文字を使用しXます。例えば、セルの3つの境界が0あり0,2、0,Xと0,X。 一部のセルにはガチョウが含まれています。しかし、これらのガチョウは、あなたがそれらを保護しないと、邪悪なキツネ(グリッドの境界の外側から来る)によって殺されます。そして、すべてのガチョウが死ぬと、BrainSteelは悲しくなります。そのため、ガチョウを保護するためにガチョウの周りにフェンスを構築するプログラムを作成します。ガチョウは、フェンスで囲まれた単一の完全に囲まれたポリゴンに存在する必要があります。フェンスの予算は非常に低いため、可能な限り少ない数のフェンスを使用してください。 入力の説明 ガチョウを含むセルを表す、カンマ区切りの0to からの数字のリスト63。例: 6,12 出力の説明 ガチョウを正常に保護するためにフェンスを構築する必要がある国境のリスト。これは、可能な限り最小のフェンスにする必要があります。例: 5,6 6,7 11,12 12,13

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