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

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

7
Base85エンコーディング
チャレンジ ASCII印刷可能文字を含む単一行の文字列の入力を受け取り、Base85でエンコードされた同じ文字列を(ビッグエンディアン規則を使用して)出力できるプログラムを記述します。入力は常に100文字以下であると想定できます。 Base85のガイド 4オクテットは、(通常)5つのBase85文字にエンコードされます。 Base85文字が範囲!にu及び- (117 ASCII 33)z(ASCII 122)。 エンコードするには、4オクテット(32ビット数)で85による除算を継続的に実行し、(各除算の後に)残りに33を加算して、エンコードされた値のASCII文字を取得します。たとえば、このプロセスの最初のアプリケーションは、エンコードされたブロックの右端の文字を生成します。 4オクテットのセットにnullバイトのみが含まれる場合、それらはのz代わりにとしてエンコードされ!!!!!ます。 最後のブロックが4オクテットより短い場合は、ヌルバイトが埋め込まれます。エンコード後、パディングとして追加されたのと同じ数の文字が出力の最後から削除されます。 エンコードされた値の前後には<~、が必要~>です。 エンコードされた値には、空白を含めないでください(このチャレンジのため)。 例 In: easy Out: <~ARTY*~> In: test Out: <~FCfN8~> In: code golf Out: <~@rGmh+D5V/Ac~> In: Programming Puzzles Out: <~:i^JeEa`g%Bl7Q+:j%)1Ch7Y~> 次のスニペットは、指定された入力をBase85にエンコードします。 コードスニペットを表示 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>String.prototype.toAscii85=function(){if(""==this)return"<~~>";for(var r=[],t=0;t<this.length;t+=4){for(var i=(this.substr(t,4)+"\x00\x00\x00").substr(0,4),o=0,n=0;4>n;n++)o=256*o+i.charCodeAt(n);var s=[];for(n=0;5>n;n++){var e=o%85;o=(o-e)/85,s.unshift(String.fromCharCode(e+33))}r=r.concat(s)}var a=4-this.length%4;return 4!=a&&r.splice(-a,a),"<~"+r.join("").replace(/!!!!!/g,"z")+"~>"};</script><style>#in,#out{margin:20px;width:400px;resize:none}</style><input id="in" type="text" value="Base85"><button onclick="$('#out').text($('#in').val().toAscii85())">Submit</button><br><textarea id="out" rows=5 disabled></textarea> …

3
一連のマスクのいずれかに一致するバランスの取れたバイナリ文字列をカウントする
バイナリ文字列がから引き出された文字のみを含む文字列である01。バランスバイナリ文字列が正確に多くのように含むバイナリ文字列である0としてS 1 S。 正の整数nと任意の数のマスクが与えられます。各マスクの長さは2n文字で、012から描画された文字のみが含まれます。バイナリ文字列とマスクは、長さが同じで、マスクに2がないすべての位置の文字と一致する場合に一致します。例えば、マスク011022試合バイナリ文字列011000、011001、011010、011011を。 与えられたN及び(改行で区切られた)入力としてマスクは、出力マスクの一つ以上に一致する別個の平衡バイナリ文字列の数をしなければなりません。 例 入力 3 111222 000112 122020 122210 102120 推論 唯一バランスバイナリ文字列マッチング111222である111000。 000112に一致する唯一のバランスのとれたバイナリ文字列は000111です。 マッチングバランスバイナリストリング122020がある111000(既にカウント)、110010及び101010。 122210に一致するバランスのとれたバイナリ文字列は、110010(既にカウント済み)、101010(すでにカウント済み)、および100110です。 102120に一致するバランスのとれたバイナリ文字列は、101100と100110です(すでにカウントされています)。 したがって、出力は 6 入力 10 22222222222222222222 推論 20があり、長さ20の10個のバランスのとれたバイナリ文字列があります。 出力 184756 勝者 勝者は、競争の入力を最も速く計算し、もちろん他の入力と同じように扱います。(私は明確な勝者を持ち、異なる入力が異なる勝者を与えるケースを避けるために決定されたコードを使用します。最速のコードを見つけるためのより良い方法を考えたら、そう教えてください)。 コンテスト入力 http://pastebin.com/2Dg7gbfV

18
縮小する数字
入力は、(少なくとも3、最大20)異なる整数の配列です。各整数は-1000より大きく、1000より小さい。 あなたの仕事は、からに「線形マッピング」することで、数値を縮小する0.0こと1.0です。これは、配列の最小数が0.0に、最大数が1.0にマッピングされることを意味します。 配列は、パラメーター(関数内)または標準入力/プログラムの引数(選択可能)として取得します。結果をフォーマットで出力しますdouble1;double2;double3;...。出力は入力と同じ順序でなければなりません。 必要に応じて、出力を小数点以下2桁に丸めることができます。小数点の後に少なくとも1桁ある必要があります。 組み込み関数の使い方(関数規模なmathematicasとしてあなたのための番号、ダウンをRescale)許可されていません。 例: Input Output [5,-20,30] 0.5;0.0;1.0 [1,2,3,4,5] 0.0;0.25;0.5;0.75;1.0 [0,5,100,400] 0.0;0.01;0.25;1.0 (最後の出力は丸められますが、それ以外の場合は丸められます0.0;0.0125;0.25;1.0)

7
中国の干支を計算する
中国の旧正月が近づいていることを考えると、特定の日付の中国の黄道帯、元素、および太極拳を計算するための課題があります。 入力は日付でなければなりません: 1/31/2014 ここで使用される日付はUSスタイルですが、mm/dd/yyyyISO-8601スタイルの場合もあります。yyyy-mm-ddそのため、日付入力のスタイルは厳密ではありません。 出力は、日付に対応する要素とそれに対応するTaijituを含む、中国の黄道帯の動物の標示である必要があります。 Horse - Wood - Yang 黄道帯-要素-Taijituの関係を示す表は次のとおりです。中国の黄道帯-年 出力形式は厳密ではありませんが、動物、要素、およびTaijituコンポーネントを含み、何らかの方法で区切られる必要があります。 上記の日付の有効な出力の例には、次のものがあります。 (horse, wood, yang) ["Horse", "Wood", "Yang"] プログラムは、今日の日付を含め、少なくとも100年の範囲で有効な出力を返す必要があります。これは、少なくとも60年(干支)の2サイクルを考慮する必要があることを意味します。
10 code-golf  date 

4
クリスマス・クイン!
選択した言語で、同じ形で印刷されるクリスマスツリーの形に配置されたプログラムを記述します。 許可されないもの: ソースファイルの印刷 それらがリテラルであるためにインタプリタによってエコーされるステートメントに他ならないコード(たとえば、Pythonでツリー状のリストのタワーを使用するだけ)

2
ユーザー指定の数値を使用して有効な方程式を生成します
これは、中学校で数学の先生がプレイしていたゲームに基づいています。彼はボードに5つのランダムな1桁の数字を書き、次にランダムな2桁の数字を書きます。5桁の1桁の数値すべてを使用して2桁の数値を求める方程式を作成しようとします。これをよりよく説明するためのソリューションの例をいくつか示します。 Input: Solution: 7 5 4 8 4 34 5*8-7+4/4 = 34 3 1 5 7 6 54 (7+3)*6-5-1 = 54 3 9 2 1 6 87 9*(2+1)*3+6 = 87 2 1 6 9 7 16 (9-7+6*1)*2 = 16 2 4 5 8 6 96 8*(5+6)+2*4 = 96 3 8 …

5
素因数から導出された整数列を計算する
以下を実行する関数、式、またはプログラムを作成します。 任意の数の素因数を取り、それらを合計します。たとえば、28の素因数は2 2 7であり、合計すると11になります。 結果に、指定された数の素因数を掛けます。たとえば、28には3つの素因数があり、合計は11になります。11* 3は33です。 リストに既に含まれている番号に到達するまで、結果のリスト(元の番号で始まる)を保存して、プロセスを再帰的に繰り返します。その最終的な番号を追加せずに停止し、リストに重複が含まれないようにします。33が再び28になるため、28の進行は28 33です。 結果のリストの要素を数えます。28の場合、答えは2です。 の結果は次のとおりな0<n<=10ので、アルゴリズムを確認できます。 2 1 1 10 1 11 1 9 5 10 (balphaが指摘したように、higley(1)リスト1 0からの答えは2です。Jで書かれた元のアルゴリズムのバグのため、私は最初は1でした。) 私はうんざりしたSOBであり、OEISでこれを見つけられなかったので、少なくともこのラウンドのコードゴルフの期間中、これを「ヒグレーシーケンス」と呼びましょう。追加のボーナスとして、最初の2つnが最も低いhigley(n)where nが素数ではなく、を見つけますn>1。(私は2つしかないと思いますが、それを証明することはできません。) これは標準のコードゴルフなので、いつものようにキーストロークが最も少なくなりますが、たとえ冗長であっても、他の言語で賢い回答に投票してください。
10 code-golf  math 

7
完璧な5分の1に近い
1-TETから始めて、完全な5分の1(ちょうど比率3/2)のより良い近似を持つ等しい気質を与えます。(OEISシーケンスA060528) OEISからコピーされたシーケンスの正式な説明: 最も近い音階のステップが2つの楽音のトーンの比率にますます近づく近似の平均律(オクターブの等分割)のリスト:完全な4th、4/3、およびその補数は完全な5th、3/2。 対称性により、完全な4分の1は問題ではないことに注意してください。 3がシーケンス内にあることを知っているとしましょう。3-TETの頻度は次のとおりです。 2^0, 2^⅓, 2^⅔ どこに2^⅔最も近い対数の近似が3/2。 シーケンスは4ですか?4-TETの頻度は次のとおりです。 2^0, 2^¼, 2^½, 2^¾ どこ2^½の最も近い近似値です3/2。これはに勝るもの2^⅔ではないので、4はシーケンスに含まれていません。 同様の方法で、5がシーケンス内にあることなどを確認します。 n入力として整数を指定する場合、出力は順序の最初のN個の数値でなければなりません。たとえば、の場合n = 7、出力は次のようになります。 1 2 3 5 7 12 29 xnorによるシーケンスの説明 無理数定数のlog2(3)≈1.5849625007211563…log2⁡(3)≈1.5849625007211563… \log_2(3) \approx 1.5849625007211563\dots有理分数の配列によって近似することができます。 21,32,53,85,117,1912,4629,…21,32,53,85,117,1912,4629,… \frac{2}{1}, \frac{3}{2}, \frac{5}{3}, \frac{8}{5}, \frac{11}{7}, \frac{19}{12}, \frac{46}{29}, \dots 分数は、絶対距離で新しい最も近いものである場合、シーケンスに含まれます∣∣pq−log2(3) ∣∣|pq−log2⁡(3) | \left| \frac{p}{q} - \log_2(3)\ \right|、つまり、分母が小さいか等しい他のどの分数よりも近い。 あなたの目標は、最初のnnn分母を順番に出力することです。これらはシーケンスA060528(表)です。分子(必須ではありません)は、A254351で指定されます(表) ルール: …

2
飛行機ブローアップ
ブローアップは、代数幾何学の強力なツールです。それはそれらの構造の残りを維持しながら代数的集合から特異点を取り除くことを可能にします。 心配していなくても、実際の計算を理解するのは難しくありません(以下を参照)。 以下では、2Dの代数曲線の点の拡大を検討しています。2Dの代数曲線は、2つの変数の多項式のゼロ軌跡によって与えられます(たとえば、単位円の場合は、または放物線)。その曲線()の爆発は、以下に定義する2つの多項式によって与えられます。とはどちらも、(可能な)特異点を削除してを記述します。(0,0)(0,0)(0,0)p(x,y)=x2+y2−1p(x,y)=x2+y2−1p(x,y) = x^2 + y^2 - 1p(x,y)=y−x2p(x,y)=y−x2p(x,y) = y-x^2(0 、0 )R 、S R S P (0 、0 )(0,0)(0,0)(0,0)r,sr,sr,srrrsssppp(0,0)(0,0)(0,0) チャレンジ いくつかの多項式与えられた場合、以下に定義されているようにとを見つけます。ppprrrsss 定義 まず、私がここで言うことはすべて簡略化されており、実際の定義に完全には対応していないことに注意してください。 2つの変数の多項式が与えられた場合、爆発は2つの変数の2つの多項式によってそれぞれ与えられます。pppx,yx,yx,yr,sr,sr,s を取得するには、まず定義します。その場合、はおそらく倍数になります。つまり、は、が除算しない場合です。次に、は基本的に除算後に残るものです。rrrR(x,v):=p(x,vx)R(x,v):=p(x,vx)R(x,v) := p(x,vx)R(x,v)R(x,v)R(x,v)xxxR(x,v)=xn⋅r(x,v)R(x,v)=xn⋅r(x,v)R(x,v) = x^n \cdot r(x,v)nnnxxxr(x,v)r(x,v)r(x,v)r(x,v)r(x,v)r(x,v) 他の多項式もまったく同じように定義されていますが、変数を切り替えます。最初にます。次にように定義される一部の分割しない。S(u,y):=p(uy,y)S(u,y):=p(uy,y)S(u,y) := p(uy,y)sssS(u,y)=ym⋅s(u,y)S(u,y)=ym⋅s(u,y)S(u,y) = y^m \cdot s(u,y)mmmyyys(u,y)s(u,y)s(u,y) より明確にするために、以下を検討してください 例 のゼロ軌跡によって与えられる曲線を考えます。(その点には明確に定義された接線がないため、特異点があります。)p(x,y)=y2−(1+x)x2p(x,y)=y2−(1+x)x2p(x,y) = y^2 - (1+x) x^2(0,0)(0,0)(0,0) 次に見つけます R(x,v)=p(x,vx)=v2x2−(1+x)x2=x2(v2−1−x)R(x,v)=p(x,vx)=v2x2−(1+x)x2=x2(v2−1−x)R(x,v) = …

4
あなたの言葉を比較検討してください!
チャレンジ 印刷可能なASCII文字(コード)で構成される、それぞれ30までの長さの2つの文字列が与えられた場合、それらをコードの最小バイトのバランススケールに配置します!これは次の手順で構成されます。[ 32 、126 ][32、126][32, 126] 文字列の重みを計算して比較する 適切に傾斜したASCIIアートスケールを選択する 二つの弦をはかりの上に置きます 文字列は、配列、2つの引数、またはその他の適切なメソッドとして渡されます。 文字列の重みは、その文字列の文字の重みの和として定義されます。 スペースのウェイトは0()です 小文字の重みは2(abcdefghijklmnopqrstuvwxyz)です 大文字の重みは4(ABCDEFGHIJKLMNOPQRSTUVWXYZ)です 他のすべての記号の重みは3(!"#$%&'()*+,-./0123456789:;<=>?@[\]^_`{|}~)です。 スケールは次のようになります。 。_ | _- * / \ |-* / \ _- * | / \ _- * | / \ / \ | * ------ * / \ | / \ | / \ | …

17
英数字のラインとカーブのカウント
入力文字列が与えられたら、それが持っている線と曲線の総数を出力するプログラムを書きます。 チャレンジ STDIN、またはその他の入力メソッドから入力を受け取ります。 出力STDOUT、または任意の他の出力方法、直線と曲線の総数は、文字列に含まれるこの順序でコードスニペットに、以下の表に基づいて、。 英数字以外の文字は無視してください。 標準の抜け穴は禁止されています。 これはcode-golfなので、最短のコードが優先されます。 明確化 線と曲線は、Stackexchange forで使用されるフォントによって決まりcode blocksます。 円(のようなO, o, 0)と点(i, j)は、それぞれ1つの曲線と見なされます。 文字列、文字のリスト、文字のストリーム、バイトコードなどを入力できます。 出力は、整数の配列などの整数、カンマ区切りの文字列のタプルことができ、二つの数が別々でなければならないので、104有効ではありません、しかし10,4、10 4、10\n4、[10,4]、(10, 4)、などです。 見出しと末尾の空白は完全に許容されます。 入力と出力の例 # Format: str -> line, curve hi -> 4, 2 HELLO WORLD -> 20, 4 l33+ 5pEak -> 13, 8 +=-_!...?~`g@#$%^ -> 1, 2 9001 -> 5, 3 O …

16
MQTTサブスクリプショントピックの一致
バックグラウンド MQTT(メッセージキューテレメトリトランスポート)は、ISO標準のパブリッシュサブスクライブベースのメッセージングプロトコル(Wikipedia)です。 各メッセージには、次の例のようなトピックがあります。 myhome/groundfloor/livingroom/temperature USA/California/San Francisco/Silicon Valley 5ff4a2ce-e485-40f4-826c-b1a5d81be9b6/status Germany/Bavaria/car/2382340923453/latitude MQTTクライアントは、ワイルドカードを使用してメッセージトピックをサブスクライブできます。 シングルレベル: + 以降のすべてのレベル: # たとえば、サブスクリプションmyhome/groundfloor/+/temperatureは次の結果を生成します(太字の不適合): ✅MYHOME /地上階/リビング/温度 ✅MYHOME /地上階/キッチン/温度 ❌MYHOME /地上階/リビング/ 輝度 ❌MYHOME / firstfloor /リビング/温度 ❌ ガレージ /地上階/ 冷蔵庫 /気温 サブスクリプション+/groundfloor/#がこれらの結果を生成するのに対し、 ✅myhome / groundfloor / livingroom / temperature✅myhome / groundfloor / kitchen / brightness✅garage / groundfloor / fridge / …

4
バドミントンサーブの関連部分
前書き: 現在、バドミントンに関連する課題は他に1つしかないことがわかりました。私は自分でバドミントンをしているので(過去13年間)、バドミントンに関連するいくつかの課題を追加すると思いました。ここで2番目(最初のものはここにあります): チャレンジ: バドミントンに関するいくつかのルールは、 サーブは常にネット上で斜めに行われます。 常にネットに平行で最も近いラインの後にサーブする必要があります。 提供できるエリアは、シングル(1対1)かダブル/ミックス(2対2)かによって異なります。 シングル(1対1)の場合、下の画像の青い領域がサービスを提供できる場所です。つまり、これは後ろのパーツ​​を含み、横のパーツを除外しています。 ダブルス/ミックス(2対2)の場合、下の図の緑色の領域がサーバーに許可されています。つまり、これは後ろのパーツ​​を除いて、横のパーツを含んでいます。 あなたがサーブするとき、あなたは列に立つことができません。しかし、シャトルがラインの上に着陸した場合、シャトルはまだ中にあります。 ここでバドミントンフィールドのレイアウト: チャレンジルール: 入力: 2つの入力が与えられます。 シングルまたはダブル/ミックスのどちらを再生するかを示すもの(つまりブール値) あなたは(つまりから提供していたブロックを示すために何か[1,2,3,4]または['A','B','C','D']上の写真で使用されます)。 出力: 現在のサーブ(ネットを含む)に関連する行のみ。これFには、どこからTサーブするかを示すための複数の行と、潜在的にサーブする場所を示すための複数の行が含まれます。 実際には、指定されたエリアのどこからでもサービスを提供することが許可されていますが、サービスを提供する人は常に、ネットの中央に近いサーブエリアの隅に立っていると想定しています。F。そして、彼らは彼らが奉仕しなければならないエリアの四隅のいずれかに奉仕します、それはあなたがTsを配置する場所です。 ASCIIアートとして、バドミントンフィールド全体は次のようになります(数字を追加するので、自分で数える必要はありません)。 2 15 15 2 +--+---------------+---------------+--+ | | | | | 1 +--+---------------+---------------+--+ | | | | | | | | | | | | | | | | | | …

30
トーク通訳
「トーク」は、denisのtalk.tryitonline.netでの引用に対応して作成された、バロック化されたアキュムレータベースの言語です。 Waiting for someone to create an esolang called talk. 。「トーク」言語には4つのコマンドがあります。 00 アキュムレータが0の場合、アキュムレータを0に設定します。 01 アキュムレータが0の場合、アキュムレータを1に設定します。 10 アキュムレータが1の場合、アキュムレータを0に設定します。 11 アキュムレータが1の場合、アキュムレータを1に設定します。 入力: 入力は、標準のI / Oルールによって受け入れ可能な任意の入力メソッドを介して取得できます。 初期アキュムレータ値とプログラムの2つの入力があります。[00, 01, 00]必要に応じて、これらの2つの入力を1つの入力にマージしたり、入力を有効なコマンドに分割したりできます(たとえば、それらをリストとして使用するなど)。 出力: コマンドの実行が終了すると、アキュムレータは暗黙的に出力されます。 ルール: 入力は単一の文字列または文字リストです。 これはcode-golfなので、バイト単位の最も短い答えが優先されます。 数字または文字列/文字を使用します。 テストケース: 0 0001111101 -> 1 0 000100 -> 1 0 11001000 -> 0 リーダーボード これは、通常のリーダーボードと言語ごとの勝者の概要の両方を生成するスタックスニペットです。 回答が確実に表示されるようにするには、次のMarkdownテンプレートを使用して、見出しから回答を始めてください。 # Language …

28
文字列からビットへの移行
仕事 コードポイントが0〜128(排他的)である1つ以上のASCII文字の入力文字列が与えられた場合、以下を実行します。 各文字を7ビットのASCIIコードに変換します(ASCIIコードが7ビット未満の場合は、先行ゼロビットを挿入します) すべてのビットを連結します(これにより、は文字数である7*nビットになりますn) このビットストリームの各ビットについて、前のビットと異なる場合は1を出力し、それ以外の場合は0を出力します。最初の出力ビットは常に1です。 例 入力: Hi 出力: 11011001011101 説明: 文字列「Hi」にはASCIIコードがあります 72 105 これはビットです: 1001000 1101001 そして、遷移ビットインジケータ: 11011001011101 これはコードゴルフです。最小バイト数が優先されます。 テストケース テストケース1: Hello World! 110110010101110011010101101010110001110000111110000110000001011101101010101100110001 テストケース2: %% COMMENT %% 1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111 テストケース3(Luis Mendoへのクレジット): ## 11100101110010 Luis MendoがMATLで9バイトの最短のソリューションを提供してくれました!

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