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

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

5
ピクルスのビット
Pythonのpickleモジュールはシリアル化に使用され、後で再構築できるようにオブジェクトをダンプできます。このため、pickleは単純なスタックベースの言語を使用します。 物事を単純にするために、この言語の小さなサブセットを扱います。 ( Push a mark to the stack S'abc'\n Push a string to the stack (here with contents 'abc') l Pop everything up to the last mark, wrapping all but the mark in a list t Pop everything up to the last mark, wrapping all but the mark in …

8
Lisp抽出ミッション
Lispスタイルの言語では、リストは通常​​次のように定義されます。 (list 1 2 3) このチャレンジのために、すべてのリストには正の整数または他のリストのみが含まれます。またlist、最初はキーワードを省略するため、リストは次のようになります。 (1 2 3) を使用して、リストの最初の要素を取得できますcar。例えば: (car (1 2 3)) ==> 1 そして、最初の要素が削除された元のリストを取得できますcdr: (cdr (1 2 3)) ==> (2 3) 重要:cdrリストに単一の要素がある場合でも、常にリストを返します。 (cdr (1 2)) ==> (2) (car (cdr (1 2))) ==> 2 リストは、他のリスト内に含めることもできます。 (cdr (1 2 3 (4 5 6))) ==> (2 3 (4 5 6)) …

8
行方不明の死者を見つける
チャレンジ ピーターは私たちを二重の挑戦から救うために再び立ち上がりました! ピーター・テイラーは死んでおり、それについて疑いの余地はありません(まあ、私たちが持っている膨大な疑いは別として...しかし、それを無視してください)。彼の記憶には、特定のユーザーが生きているか死んでいるかを判断するプログラムを書く必要があります。 さらに詳しい情報 ユーザーが1日以上見られなかった場合、ユーザーは死んでいます。ここにある最後のセクションを確認してください。 入力はユーザーIDになります(たとえば、私のものは30525、ピーターテイラーのものは194)。すべての入力が有効なPPCG IDであると想定します。 ユーザーが生きている場合は、次を出力する必要があります。 [User name] is alive! [ユーザー名]をユーザーID ではなくユーザー名に置き換える場所。 ユーザーが死亡している場合は、次を出力する必要があります。 Sadly, [User name] is dead. SEデータエクスプローラーを使用したT-SQL参加者は許可されません。 勝ち バイト単位の最短プログラムが優先されます。 リーダーボード var QUESTION_ID=59763;OVERRIDE_USER=30525;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 commentUrl(e,s){return"http://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 s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var …

6
+!()[]スクリプトのフィボナッチ
呼び出すJavaScriptコードを記述します alert最初の50フィボナッチ数を含む配列を順番に。次の文字のみを使用できます+!()[]。 参考として、あなたのコードは機能的に以下と等しくなければなりません: var fib = [], a = 1, b = 1; for (var _ = 0; _ < 50; _++) { fib.push(a); var t = a; a = b; b = t + a; } alert(fib); ウェブページ上のコンテンツを想定してはいけません。プログラムはでコンソールで実行されabout:blankます。同様に、設定をCookie、設定、またはその他のデータに「チート」して保存することはできません。ソリューションは、どのOSでも最新のGoogle Chrome または Firefoxの新規インストールで動作する必要があります。疑わしいときは、できるだけポータブルにしよう。 バイト単位の最小のソースコードが優先されます。

6
上昇、シーケンス、上昇
次のように、非負整数の厳密に増加するシーケンスがあります。 12 11 10 待つ!このシーケンスは厳密には増えていませんよね?まあ、数字は異なるベースで書かれています。可能な最小のベースは2、最大は10です。 タスクは、各数値が書き込まれたベースを推測することです。 シーケンスは厳密に増加しています。 塩基の合計が最大化されます。 たとえば、サンプルのソリューションは次のようになります。 6 8 10 これらの基底の下では、シーケンスは8 9 1010進数になります-厳密に増加するシーケンスであり、シーケンスが厳密に増加したままで、合計がより大きいベースを見つけることはできません6+8+10。 2番目の制限のため、解決策3 5 7は満足のいくものではありません。実際、シーケンスは5 6 7これらのベースの下になりますが、ベースの合計を最大化する必要があり3+5+7 < 6+8+10ます。 基底2<=b<=10がない場合、系列が厳密に増加する可能性があります。たとえば: 102 10000 10 シングル 0 出力されるはずです。 入力シーケンスは、ソリューションに最も便利な方法で渡すことができます(標準入力/コマンドラインパラメーター/関数引数...)。

26
標準偏差の計算
チャレンジ 数のリストが与えられたら、リストの母標準偏差を計算します。 母標準偏差を計算するには、次の式を使用します。 入力 入力は、任意の形式(リスト、文字列など)の整数のリストになります。いくつかの例: 56,54,89,87 67,54,86,67 数値は常に整数になります。 入力は、STDINまたは関数の引数になります。 出力 出力は浮動小数点数でなければなりません。 ルール 組み込み関数を使用して、標準偏差を見つけることができます。 あなたの答えは、完全なプログラムまたは機能のいずれかです。 例 10035, 436844, 42463, 44774 => 175656.78441352615 45,67,32,98,11,3 => 32.530327730015607 1,1,1,1,1,1 => 0.0 勝ち 最短のプログラムまたは機能が優先されます。 リーダーボード コードスニペットを表示 var QUESTION_ID=60901,OVERRIDE_USER=30525;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 commentUrl(e,s){return"http://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 s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var …

2
新しい葉をひっくり返す
コンピュータサイエンスの伝統では、最上部に根を持ち、最下部に葉を持つ木が与えられます。リーフノードには番号が付いています。目標は、マークされた特別な葉を取り、-1それを上に移動して新しいルートにすることです。 [3, [[16], -1], [4]] --> [[[[4], 3], [16]]] 特別な葉を上に回転させ、残りの木を垂れ下がらせることを想像できます。すべての枝の正しい左から右の順序を取得するために、ツリーを回転させながらツリーを保持します。 新しいツリーには、を除く元のツリーの葉がすべてあり-1ます。 入力: 葉が異なる正の整数であるツリー-1。ただし、の1つの葉を除きます。ツリーのルートには、少なくとも2つのブランチが外れます。 入力は、ネストされたリスト[3, [[16], -1], [[4]]]またはその文字列表現として提供されます。区切り文字はオプションであり、ユーザー次第ですが、隣接する数字は区切る必要があります。 出力: 反転したツリーを入力と同じ形式で出力または印刷します。リストエントリの順序は正しい必要があります。インプレース変更は問題ありません。 入力/出力がデータ型の場合、デフォルトで必要な形式で印刷するものでなければなりません。基本的にタスクを実行するビルトインは許可されていません。 テストケース: >> [3, [[16], -1], [4]] [[[[4], 3], [16]]] >> [2, -1] [[2]] >> [44, -1, 12] [[12, 44]] >> [[[[-1]]], [[[[4]]]]] [[[[[[[[[4]]]]]]]]] >> [[1, 2, 3], [4, -1, 6], …


13
いくつかの価格を調整する時間です!
10ドルを使用する代わりに、9.99ドルの価格体系について知っていると思います。さて、大規模な小売店のシステム管理者としてのあなたの新しい仕事では、彼らは価格が同様のスキームに従うことを望んでいます: 価格はすべてドル単位で、セント単位ではありません。 すべての価格は5または9で終了する必要があります。最後の桁が5から9の間にある場合、最も近い値に切り上げます(最後の桁2および7に適用) 最低価格は1ドルで、最低価格は5ドルです。 入力は整数のリストです: 12 8 41 27 144 99 3 出力には、新しい価格のリストが表示されます。上記の場合: 15 9 39 29 145 99 5
19 code-golf  number 

6
水で満たされたボウル
ボウルの容積とその中の水の容積を入力として受け取り、その中に水が入ったボウルのASCII表現を必要な容積で出力または返すプログラムまたは関数を作成する必要があります。 ボウルの構造は次のとおりです。 \ / \___/ ボウルには少なくとも1つの_キャラクターがあります。数\のと/のも正であり、彼らは対称性に起因する等しいです。 ボウルの量は、合計の数である_とspaceの間の文字\のと/のプラスのすべてのペアのための1 \と/。これは、上記のボウルの容積が10次のことを意味します。 \ / => xxxxx x (the last one is for the \/ pair) \___/ xxx x (the last one is for the \/ pair) 2つの異なるボウルの容積が同じである可能性があることに注意してください。たとえば、次の両方のボウルの容積は18です。 \ / \ / \ / \___/ \_______/ ボウルに水を注ぐことができます。水は~、ボウル内のスペースではなく、キャラクターの列として表されます。一番下の行にはスペースがないため、~「」を含めることはできません。これは、この例に一方向でのみ水を入れることができることを意味します。 \~~~~~/ \___/ 他のボウルには複数の方法で充填できます。 \~~~~~/ \ / \ / …

7
印刷可能なASCIIフロントに移動します
バックグラウンド 最前面への変換(MTF)は、エントロピーエンコーディング技術のパフォーマンスを向上させるために設計されたデータエンコーディングアルゴリズムです。 BZIP2圧縮アルゴリズムの後、それが適用されるバローズ-ウィーラー変換(に見られるようにバローズ、ウィーラー戻る小さい、容易に圧縮非負整数に繰り返される文字のグループを旋回する目的で、)。 定義 この課題のために、MTFの印刷可能なASCIIバージョンを次のように定義します。 入力文字列が与えられ、S、空の配列を取るR、列Dの各文字については、以下のすべての印刷可能なASCII文字の(0x7Eをへの0x20を)と繰り返しCのS: インデックス付加Cの中のDにR。 cをdの前に移動します。つまり、dからcを削除し、残りの前に追加します。 最後に、rの要素を元の dのインデックスとして使用し、対応する文字を取得します。 ステップバイステップの例 INPUT: "CODEGOLF" 0. s = "CODEGOLF" d = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" r = [] 1. s = "ODEGOLF" d = "C !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" r = [35] 2. s = "DEGOLF" d = "OC !\"#$%&'()*+,-./0123456789:;<=>?@ABDEFGHIJKLMNPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" r = [35 47] 3. s = …

19
整数のべき乗
のようないくつかの数値64は、複数の方法で整数のべき乗として表現できます。 64 ^ 1 8 ^ 2 4 ^ 3 2 ^ 6 可能な限りすべてのそのようなべき乗(ここでは[1,2,3,6])のソートされた配列を、できるだけ少ないバイトで出力します。 入力 1より大きく10000より小さい正の整数。 出力 入力がwhole-numberで表現できる整数のべき乗の配列p(を含む1)。出力は、順番に並んでいる限り、小数を含む場合があります。a^pa 浮動小数点の問題はすべてプログラムで処理する必要があります。 例 Input: 3 Output: [1] Input: 9 Output: [1, 2] Input: 81 Output: [1, 2, 4] Input: 729 Output: [1, 2, 3, 6] スコアボード ボードにスコアを表示するには、次の形式にする必要があります。 # Language, Bytes 取り消し線は問題を引き起こさないはずです。 コードスニペットを表示 function …
19 code-golf  math  number 

14
シンプソン多様性指数
シンプソン指数は、重複を持つアイテムのコレクションの多様性の尺度です。単純にランダムに交換せずにピッキングするときに2つの異なるアイテムを描画する確率です。 nグループ内の項目n_1, ..., n_kと同じ項目、二つの異なるアイテムの確率であります たとえば、リンゴが3個、バナナが2個、ニンジンが1個ある場合、ダイバーシティインデックスは D = 1 - (6 + 2 + 0)/30 = 0.7333 あるいは、異なるアイテムの順序付けられていないペアの数は3*2 + 3*1 + 2*1 = 11、全体で15ペアのうちです11/15 = 0.7333。 入力: 文字の文字列AへZ。または、そのようなキャラクターのリスト。その長さは少なくとも2になります。ソートされていると想定することはできません。 出力: その文字列内の文字のシンプソンダイバーシティインデックス、つまり、置換でランダムに取得された2つの文字が異なる確率。これは、0から1までの数値です。 以下のような正確な出力を終了するが、フロート、表示少なくとも4桁を出力する場合1、または1.0、または0.375OKです。 ダイバーシティインデックスまたはエントロピー測定を具体的に計算するビルトインを使用することはできません。テストケースで十分な精度が得られる限り、実際のランダムサンプリングは問題ありません。 テストケース AAABBC 0.73333 ACBABA 0.73333 WWW 0.0 CODE 1.0 PROGRAMMING 0.94545 リーダーボード これは、MartinBüttnerの厚意による言語別のリーダーボードです。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 # Language Name, N bytes …
19 code-golf  math 

1
レースカーのトラックを作りましょう!
前書き 私のはレースカーのトラックを作りたいと思っています。彼女は、一緒になってトラックを形成する木製の部品を持っています。各パーツは正方形で、異なる形状が含まれています。パイプ描画文字を使用して説明します。 │:垂直に進む道路 ─:水平に進む道路 ┌ ┐ └ ┘:方向に曲がる道路 ┼:地下道のある橋 不思議なことに、tジャンクションはありません。 レースカートラックの例を次に示します。 ┌─┐ │ │┌─┐ │ └┼─┘ └──┘ 有効なレースカートラックのルールは次のとおりです。 どこにも行かない道路はありません。 ループを形成する必要があります(すべてのピースが同じループの一部でなければなりません)。 橋/地下道では、曲がることはできません(そのため、まっすぐに通らなければなりません)。 残念ながら、raceと私が持っているレースカーのトラックは限られています。しかし、我々は間違いなくそれらをすべてトラックで使用したいと考えています。在庫にあるピースのリストを指定して、それらのピースをすべて使用するレースカートラックを出力するプログラムを作成します。 入力説明 STDIN、コマンドライン引数、ファイル読み取り、またはユーザー入力関数(raw_inputまたはなどprompt)を介して入力を受け取りたい。入力は、次の形式のコンマ区切りの正の整数です。 │,─,┌,┐,└,┘,┼ ここで、それぞれが特定のピースの量を表します。したがって、たとえば入力: 1,1,1,1,1,1,1 それぞれのピースが1つあることを意味します 出力の説明 上記のパイプ描画文字を使用して、レースカートラックを出力します。レースカートラックは、入力で指定された各ピースの数を正確に使用する必要があります。これ以上でもそれ以下でもありません。すべての入力に対して少なくとも1つの有効なレースカートラックがあります。 入力と出力の例 入力: 3,5,2,2,2,2,1 可能な出力: ┌─┐ │ │┌─┐ │ └┼─┘ └──┘ 入力: 0,0,1,4,4,1,3 可能な出力: ┌┐ └┼┐ └┼┐ └┼┐ └┘

2
点のリストが与えられた正方形の回転を決定する
このチャレンジでは、ポイントのリストが与えられます。 これらの点は、想像上の正方形の境界線上にあります。あなたの目標は: 可能であれば、正方形の回転を印刷します。これは、[0、90)からの値になります。0は、垂直および水平の線の正方形を表します。回転は反時計回りにカウントされた度数で与えられます。 正方形の回転があいまいな場合(2ポイントしか与えられないなど)、「不明」を出力します ポイントが与えられた正方形を作成できない場合は、「Impossible」を印刷してください 与えられるポイントは一意であることが保証されており、順不同です。リストの入力には任意の形式を使用できますが、私の例では、ポイントはformat x,yであり、スペースで区切られます。数値は浮動小数点数であり、言語が処理できる範囲内にあると想定できます。出力は、少なくとも小数点以下3桁まで正確で、言語が完全な精度で浮動小数点数を処理することを前提としています。 以下にいくつかのテストケースを示します(簡単に視覚化するためにこれらのほとんどを整数で作成しましたが、プログラムは浮動小数点を処理する必要があります)。 未知の: 0,0 0,0 1,0 0,0 1,0 0,1 0,0 1,0 0,1 1,1 0,1 0,2 1,0 1,3 2,0 2,3 3,1 3,2 不可能: 0,0 1,0 2,0 3,1 4,2 0,0 1,0 2,0 1,1 0,1 0,2 1,0 1,3 2,0 2,3 3,1 3,2 2,2 2,0 0,1 2,2 0,3 …

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