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

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

6
ゴルファーの冒険-第1章:花瓶
ゴルファーの冒険 これが最初の挑戦です!以前のチャレンジからのデータを必要とするより多くのチャレンジが後であります:) 第1章:花瓶 ちょっと想像してみてください。あなたは強力な神であり、あなたの力は無限ですが、一つのことを必要としています:魂。ここでは、各魂はバイトで表されます。使用する各バイトは魂を犠牲にします。したがって、目標は明らかに、最小量の魂を犠牲にしながら、最大量の人々を救うことです。 あなたの最初の挑戦は小さな村を救うことです。悪魔は彼の挑戦を解決したら村全体を破壊しないことをいとわないでしょう。 チャレンジ : ちょうど10個の物(空気を含む)を含むことができる垂直花瓶があります。その花瓶に物を入れると、重力がその物を底に落とします。花瓶がすでにいっぱいになっている場合(および「空気で満たされている」とみなすと常に花瓶がいっぱいになります)、花瓶の上部にある要素が入力に置き換えられます。 許可されているもののセットは次のとおりです。 空気 0 / 岩石 1 / - 葉 2 / ~ 爆弾 3 / x 「A Bomb」の上に岩や葉がある場合、それは爆発して、その上のものを破壊します。 入力は、毎回花瓶に入れるもののリストです。 例: 11231:2つの岩、次に葉、次に爆弾、最後に最後の岩を配置します。 花瓶が静的な場合、次のルールでカウントを開始できます。 Rockはアキュムレーターに1ユニットを追加します リーフはアキュムレーターに2を掛けます 爆弾はアキュムレータを1ずつ減少させます 空気は何もしない (花瓶の上部からカウントを開始する必要があります) 入力として「11231」を使用して得られるシミュレーションは次のとおりです。 |-| |-| |~| |x| |-| | | | | | | | | | …
13 code-golf 

1
特定の期間、ジョーカーを使用して日付の最小リストを取得する
でフォーマットされた日付を考えYYYY-MM-DDます。*日付文字列の最後にジョーカーを使用できます。たとえば2016-07-2*、から2016-07-20までのすべての日付を記述し2016-07-29ます。 次に、開始日と終了日で表される期間を考えます。 アルゴリズムは、期間を表す日付の最小のリストを見つける必要があります。 例を使用しましょう。次の期間: 開始日: 2014-11-29 終了日: 2016-10-13 アルゴリズムは、次の日付リストを含む配列を返す必要があります。 2014-11-29 2014-11-30 2014-12-* 2015-* 2016-0* 2016-10-0* 2016-10-10 2016-10-11 2016-10-12 2016-10-13
13 code-golf  date 

1
ユーカーでベストカードをプレイ
入力: まず 、各プレイヤーが次のようにフォーマットされたカードを表す3枚のカードの配列 [JD][TH][9S] 表現する Jack of Diamonds, 10 of Hearts, and Nine of Spades. ユーカーでは常にチームメイトの向かいに座っているため、2番目の要素はチームメイトのプレーを表しています。ここで、TH。 次に 、次のようにフォーマットされたトランプスーツを表す単一の文字、文字列など S, D, C, H 代表する Spades, Diamonds, Clubs, Hearts 第三に、次のようにフォーマットされたあなたの手を表す4枚のカードの配列 [KD][JC][QH][AS] 代表する King of Diamonds, Jack of Clubs, Queen of Hearts, Ace of Spades 目的: 3つの入力が与えられたら、次の基準を満たすように、プレイされたカードに追加するための最良のカードを出力します。 可能であれば手がかかり、出力されない場合は最も価値の低いカード できれば手がかかりますが、やむを得ない場合を除き、チームメイトに勝ちません。 手札を取ることができる場合、最も価値の低いカードを使用して行います。(ハンドに勝てるエースとクイーンがいる場合、クイーンをプレイします)。 プレイはすべて、下部のルールで要求されているとおりに行わなければなりません。 のような出力形式 [JD] …

11
この配列を行列に変換します
ネストされていない配列を入力として受け取ります。次の方法を使用して、マトリックスに変換します。 私の配列が [1, 2, 3, 4, 5] 最初に、その配列を5回繰り返します:(長さ) [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]] 次に、対角線に沿って読みます: [[1], [2, 1], [3, 2, 1], [4, 3, 2, 1], [5, 4, 3, 2, 1], [5, …

2
ひねりを加えた素数
注:これは、この質問に大きく影響を受けています。 仕事: あなたの仕事はn、プログラムの各文字がn所定の位置で繰り返されるときに、thプライムを生成することです。 あなたのプログラムが次のようだとしましょう: Derp そこにあるすべての文字が1回繰り返されるため、が出力されるはず2です。 次のように、すべての文字が所定の場所に複製される場合: DDeerrpp これにより、2番目の素数が生成され3ます。 仕様: プログラムは入力を受け入れず、それぞれの素数を出力する必要があります。 プログラムは、十分な時間とメモリがあれば、すべての素数で機能する必要があります。 先頭と末尾の改行は問題ありません。 出力は、言語のデフォルトのベースである必要があります-デフォルトがない場合は、どのベースでも構いません。 これはcode-golfなので、バイト単位の最短コードが優先されます。

8
シーソーの片側に重量を加えてバランスを調整します
綱渡り シーソー(おそらく「this-that」を意味するフランス語の「ci-ça」から)は、同様に遍在するスライドとスイングとともに、遊具の神聖な三位一体の3分の1を形成します。シーソーは、各側のモーメントの合計が等しい場合にのみ、完全なバランスになります。したがって、シーソーは、モーメントの合計が小さい側に特定の量の重量を追加することでバランスを取ることができます。これを達成することがこの挑戦の目標です。 チャレンジ あなたの課題は、入力としてシーソーの描写を取り、それを再び出力し、バランスをとるためにシーソーの一端に重みを追加することです。 入力 プログラムは、合理的な形式で、次のようなASCIIシーソーを取る必要があります。 100 100 ------------------- ^ 最初の行には2つの数値が含まれ、それぞれがシーソー上の重みを表します。それぞれの側にちょうど1つの重りがあり、それぞれが厚板の側の端に作用します。重みは整数であることが保証されており、常に対応する厚板の端に合わせられます。これらの数値が支点(^)と重なることはありません。 2行目は、シーソーの「プランク」を表します。各ダッシュ(-)は、長さの^ない支点()のすぐ上のダッシュを除いて、各ダッシュと同じ長さを表します。 3行目は、シーソーの支点を表します。この支点は、この行のスペースではない唯一の文字、サーカムフレックス( '^')によってマークされます。支点は、有効な入力の板の長さに沿った任意の場所に配置できます。ただし、十分なスペースが残っていれば、重みを表す数値が入力または出力の支点と重ならないようにできます。 入力には3行が含まれ、シーソーを構成する文字の前後に空白がないことが保証されます(もちろん、必要な3行目を除きます)。 出力 出力の場合、同じシーソーの描写を標準出力に印刷する必要がありますが、シーソーのバランスをとるために、重量の1つ(1つのみ)をより大きい重量に置き換えます。入力は、整数のみを使用してこれを可能にすることが保証されています。したがって、重みは小数点やその他の同様の表記なしで表示する必要があります。あなたの言語がstdoutを使用していない場合は、出力についてコミュニティ/メタコンセンサスで行ってください。末尾の改行は問題ありませんが、描画形式に対する他の変更はおそらく大丈夫ではありません。 例示 テスト入力と対応する出力 入力1 12 22 -------------------- ^ 出力1 12 26 -------------------- ^ 入力2 42 42 ----------- ^ 出力2 42 42 ----------- ^ 入力3 3 16 ---------------- ^ 出力3 14 16 ---------------- ^ 入力4 …

4
チートでカンニングを手伝ってください
チートは、あなたの手を取り除こうとしているカードゲームです。ターンは次のようになります。 そのターンにプレイするカードのランクを決定します。ほとんどのバリエーションでは、これは前のターンより1ランク高いです。 1-4枚のカードを裏向きにプレイします。これらは有効なランクと一致する必要はありません。そうでない場合、チートと見なされます。この時点で、どのプレイヤーもあなたに挑戦できます。 誰もあなたに挑戦しない場合、プレイは次のプレイヤーに続きます。 誰かがあなたに挑戦し、あなたがカンニングをしなかった場合、彼らはプレイしたカードのすべてを取らなければなりません。 誰かがあなたに挑戦し、あなたがチートをした場合、あなたはプレイされたカードのすべてを取らなければなりません。 戦略は、主にブラフとカードカウントの組み合わせです。しかし、私は数学が苦手なので、Cheatをごまかしてボットを持ってきます。 入力 入力は、任意の順序または形式になります。 プレイヤーの手。彼らがカードを持っている必要があることを知っている場合(たとえば、それらを拾うのを見たことがあります)、それらは昇順でリストされます。不明なものは、後にとしてリストされ?ます。たとえば、6枚のカードがあり、2枚が1枚で、1枚が4枚であることがわかっている場合、有効なハンドの表現は114???です。?は常に既知のカードの後に​​リストされます。 141???そして11???4両方の無効な入力であり、あなたのコードでは、それらを処理する必要はありません。 私が間違いなく知っているカードは彼らの手の一部ではありません(私はそれらを持っています、他の誰かがそれらを拾うのを見ました、など)。リストはランクの昇順になります。リストは空かもしれません。 プレーヤーがプレイすると主張したカード。彼らが3 7をプレイすると主張した場合、ここで可能な入力はになります777。カードは常に同じランクになります。 プレイされるカードの数は常に1〜4で、ランクは常に0〜9です。ランクは、手ではなく手に4回以上表示されることはありません。 これは有効な入力の例です: 33577?? 01555688 55 これは無効な入力の例です: 35377?? # Out of order 7779 # Five 7's in total 23 # Two separate ranks played 出力 私たちが間違いなくすべきなら、真の価値挑戦。チャレンジしたくない場合はfalse値。 彼らがだまされていることがわかっている場合、私たちは常に挑戦します。持っていなかったカードをプレイした場合、彼らはだまされたことがわかります。 12 3 # They don't have any 3's or ?'s …

5
ラプラス方程式を解く
数値数学入門 これが「Hello、World!」です のPDE(偏微分方程式)。ラプラス方程式または拡散方程式は、物理学によく登場します。たとえば、熱方程式、変形、流体力学などです。実生活は3Dですが、「こんにちは、世界!」と言いたいのです。「99本のビール...」を歌わないでください。このタスクは1Dで行われます。これは、両端の壁に何らかの力が加えられたゴム製のローブと解釈できます。 上の[0,1]ドメイン機能を見つけるu与えられたソース関数のf境界値u_Lとu_R、そのようなことを: -u'' = f u(0) = u_L u(1) = u_R u'' の二次導関数を示します u これは純粋に理論的に解くことができますが、あなたの仕事は点の離散化された領域xで数値的に解くことですN: x = {i/(N-1) | i=0..N-1}または1ベース:{(i-1)/(N-1) | i=1..N} h = 1/(N-1) 間隔です 入力 f 関数または式または文字列として u_L、u_R浮動小数点値として N 整数> = 2として 出力 配列、リストの区切り文字列のいくつかの並べ替えu、その結果u_i == u(x_i) 例 例1 入力:f = -2、u_L = u_R = 0、N = …
13 code-golf  math  number 

8
アリ順列の生成
前書き 以前の挑戦でアリ順列のクラスを定義しました。覚え書きとして、0からr-1までの数字の順列pは、最初のエントリを除くすべてのエントリp [i ]に対して、p [i] == p [ ik]±1。楽しい事実として、私はまたのためにあると述べR≥1 、まさにそこにある2 R-1の長さのイライラ順列rが。これは、長さrのアンチ順列と長さr-1のバイナリベクトルとの間に1対1の対応があることを意味します。。この課題では、あなたの仕事はそのような通信を実装することです。 タスク あなたの仕事は、長さのバイナリーベクターにかかるプログラムや関数の書き込みにある1≤N≤99を、長さのイライラ順列出力するN + 1。順列は0ベースまたは1ベースのいずれか(ただし、これは一貫している必要があります)であり、入力と出力は任意の妥当な形式にすることができます。さらに、異なる入力は常に異なる出力を与える必要があります。それ以外の場合は、必要な任意の順列を自由に返すことができます。 最も低いバイトカウントが優先されます。 例 長さ4の(0ベース)anty順列は次のとおりです。 0 1 2 3 1 0 2 3 1 2 0 3 1 2 3 0 2 1 0 3 2 1 3 0 2 3 1 0 3 2 1 0 …

4
ハロウィンの飾り付けを手伝ってください
ハロウィーンがやって来て、まだ家を飾っていないので、この仕事をするためにあなたの助けが必要です 入力入力 は4桁の数字のリストで、各数字は装飾の一部を表します。 EMBU |||| |||+-upper decoration ||+-bottom decoration |+-mouth/nose +-eyes 目: 0 - ° 1 - ¯ 2 - - 3 - ^ 4 -' 口/鼻 0 - v 1 - w 2 - o 3 - _ 4 -- 下飾り 0-なし 1-スケルトン 2-カボチャ アッパーデコレーション 0-なし 1-空飛ぶバット 2-休憩バット 3-クモ …

6
4つの距離
この挑戦はこのビデオに基づいています。この挑戦を試みる前にそれを見ることをお勧めします。 最初に関数を定義します。この関数(OEIS)は、整数nを入力として受け取り、nの英語表現(スペースまたはハイフンなし)で文字数を出力します。たとえば、「3」は5文字なので、3は5にマップされます。 このプロセスを繰り返す任意の数で始まるビデオで示されているように、最終的には4になり、それは永久にマップされます。 以下は、16より小さい数の軌道を示す大まかな有向グラフです。 12 11 \| 15 2 6 1 10 14 13 \ \|/ / / / 7 3-/ 8--/ \| / 9 0 5--/ \ \| \-4 あなたの課題は、4に達する前に数値がとるステップの数(またはこの関数を数値に適用する必要がある回数)を決定することです(つまり、グラフの有向グラフのレベル)。 英語の数字の形成 このチャレンジのために英語の単語をどのように形成するかについての簡単な説明を次に示します。 1から19までの数字は次のとおりです。 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19 19を超える数の場合、プロセスは次のとおりです。 数が数百位の場合、数百位の数字の名前で始まり、「百」。 例えば 100 -> "onehundred" 剰余が20未満の場合、剰余の英語表記を追加します。 例えば 714 -> "sevenhundredfourteen" それ以外の場合、10桁がゼロでない場合は、適切な表現を追加します。 2-> twenty 3-> …

4
ヘキサゴルフ:バリダゴン
チャレンジ ASCIIアートの形を考えると、その形が正六角形かどうかを調べる必要があります。 六角形 通常の六角形は、2つのルールを使用して定義されます。 それは6つの側面を持っています 各辺の文字数は等しい たとえば、次の形状は規則的ですが、6つの辺がないため、正六角形ではありません。 B a a h s a i d y o u r g a o t 同様に、以下の形状は、6つの辺を有するが、異なる長さの辺を有し、そうではない正規六角形。 * * * * * * * * * * * * * * ただし、次の形状には6つの辺があり、すべての辺に同じ数の文字があるため、正六角形です。 T h e h e x a g o n s …

7
世界は鏡のようなものです:笑顔とそれはsɯıןǝqɐɔʞ
入力: 次の文字のみを含む文字列:( abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.?!末尾のスペース)と2つの特殊文字(_および|) 出力: _およびの位置に基づいてテキストをミラーリングします|。 _水平方向に|ミラーリングし、垂直方向にミラーリングします。 ミラーリングプロセス 最初_はそのサブストリングのミラーリングの開始を示し、2番目_は終了を示します。 1つだけ_が存在する場合、文字列の最後まで続行できます。 3つ以上_存在する場合、同じプロセスが繰り返されます。 |ストリングには1つしか存在できません。これにより、最初のサブストリングが反転され、2番目のサブストリングが削除されます。 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.?!(末尾のスペース)はɐqɔpǝɟɓɥıɾʞlɯuodbɹsʇnʌʍxʎz∀𐐒ƆᗡƎℲ⅁HIſ⋊⅂WNOԀΌᴚS⊥∩ΛMX⅄Z0⇂ᘔƐ߈ϛ9ㄥ86˙¿¡、_(Unicode値のリンクをクリックします-ユニコードv8.0 +が必要です)によってミラーリングされると、(末尾のスペース)に変換されます。 入力例1: _Will I be mirrored?! 出力1: Mıll I qǝ ɯıɹɹoɹǝp¿¡ 入力例2: Wi_ll I be mi_rrored?! 出力2: Will I qǝ ɯırrored?! によってミラーリングされる場合|、サブストリングを0からindex-of-に単純に逆にします|。 入力例1: Will I be mirror|ed?! 出力1: Will I be mirrorrorrim eb I lliW 両方のミラー(_および|)を文字列に含めることができます。 一般的なルール: これはcode-golfであるため、バイト単位の最短回答が優先されます。 …
13 code-golf  string 

10
ASCII奇数/偶数暗号
以下の擬似コードを使用して、ASCII奇数/偶数暗号を定義します。 Define 'neighbor' as the characters adjacent to the current letter in the string If the one of the neighbors is out of bounds of the string, treat it as \0 or null Take an input string For each letter in the string, do If the 0-based index of the …

5
正しい道を見つける
パスのリストを指定して、正しいパスを出力します。 パスの例: /\ ----+/ | -および|は水平および垂直パスです。 /そして\、90°ターンしています。 +現在の方向に応じてa -またはa として扱われ|ます。 パスは任意の方向に進むことができ、キャラクターは複数のパスで使用できます。 入力は次のようになります。 /--\ A------+--+--# B------/ \--: C------------# D------------# A、B、CとDしているパスが開始 # 壁です(パスが悪い) : 終わりです(パスは正しいです) したがって、出力はになりますB。 あなたは仮定することができます: :そして#、常に左から到達することになります。 パスの開始点の右側の文字は常にになります-。 パスは常に適切に形成されます。 # そして :いつも同じ列になります。 常に1つと:4つのパスのみが存在します。 テストケース A------# B------# C------# D------: => D A-\ /---: B-+-/ /-# C-+---+-# D-+---/ \-----# => B /-\ A-+\\---# …

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