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

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

13
海賊世界の流通ルール
海賊が特定のルールに従って金貨を合理的に分割する既存の「ゲーム」があります。ウィキペディアからの引用: 5人の合理的な海賊A、B、C、D、Eがいます。100人の金貨を見つけます。配布方法を決定する必要があります。 海賊には厳格な年功序列があります。AはBより優れ、BはCより優れ、DはDより優れ、EはEより優れています。 したがって、海賊世界の配布ルールは次のとおりです。最も上級の海賊はコインの配布を提案する必要があります。提案者を含む海賊は、この配布を受け入れるかどうかについて投票します。同数の投票の場合、提案者はキャスティング票を持ちます。配布が受け入れられると、コインは支払われ、ゲームは終了します。そうでない場合、提案者は海賊船から船外に投げ出されて死亡し、次に上級の海賊がシステムを再び開始するための新しい提案を行います。 海賊は、3つの要素に基づいて決定を下します。まず、各海賊は生き残りたいと思っています。第二に、生き残りを考えると、各海賊はそれぞれが受け取る金貨の数を最大にしたいと考えています。第三に、他のすべての結果が同じでなければ、各海賊は別の船外機を投げることを好むでしょう。海賊はお互いを信頼せず、各海賊に全数の金貨を提供する提案された配布計画を除き、海賊間の約束を立てたり、尊重したりしません。 チャレンジ 入力として整数n1 <= n <= 99をn取得します。これは海賊の数です。最初の海賊から始めて、コインの分布を出力します。 テストケース(最初の行が入力、2番目の出力): 1 100 2 100 0 3 99 0 1 5 98 0 1 0 1 これはcode-golfであるため、バイト単位の最短の解決策が優先されます。
14 code-golf 

2
ユークリッドベクトル
2つのベクトルのASCIIアートが与えられた場合、結果のベクトルの大きさと次数を見つけます。 入力 これは、STDIN経由で受信したり、ローカルファイルから読み取ったり、関数呼び出しで提供したりできます。2つのベクトル入力の例を次に示します。 ^------> | | | x これは、北4ユニットと東7ユニットの変更を表します。すべての入力の開始点はx(10進数120)で表されます。 すべてのベクトルは水平線または垂直線です。 各ベクトルには、次の4つのエンドポイント^v<>のいずれかがあります:、ダッシュ(-、10進数45)または垂直バー(|、10進数124)のいずれかで構成されます。 平面上の空のポイントはスペースで埋められます(、10進数の32)。 入力は単一の場合がありxます。 隣接するベクトルは常に互いに垂直です。 すべてのベクトルは先端から末尾です。 出力 これは、結果のポイントの変位(開始ポイントからの距離)と、開始ポイントに対する相対的な移動の程度になります。 上記の入力の場合、出力は8.06単位と60.3度である必要があります。それぞれに正確に3つの有効数字が必要です。有効数字3桁の数字の例を次に示します。 1.00 60.1 453 7.08 4.50 349 すべての単位の測定値はになります<= 999。 これらの番号は、以下の形式で出力されるはずです。これは上記の数字を使用しています。 8.06 units @ 60.3 degrees この後に、単一の末尾スペースまたは改行が続く場合があります。 入力がx変位なしで変位角度がない単一の場合、出力は空行(単一の改行文字)または次の形式である必要があります。 0 units @ - degrees あなたがボーナスの資格を得ようとしているなら、方向-も同様であるはずです。 ボーナス2、3、または両方が完了した場合、出力は以下のモデルに従い、上記と同じ制限に従う必要があります。 8.06 units @ 60.3 degrees NE 度は、標準平面に従って測定する必要があります。 90 135 …

1
フォローセットを見つける
以下の課題では、正式なパーサー理論に精通している必要があります。用語の意味が分からないために質問の内容がわからない場合は、多くの大学のコースで文脈自由文法とファースト/フォローセットが取り上げられています。 このスタンフォードコース、特に配布資料08と09(7ページから)をお勧めします。私はこれらの配布物からチートシートも抽出しました- この挑戦を試みる誰でもそれを読むことをお勧めします。 文脈自由文法がすべての非終端記号の次のセットを見つけるプログラムまたは関数を記述します。非形式的には、非端末の次のセットは端末のセットであり、$(入力の終わりを意味します)有効な文でその端末の後に見つけることができます。 入力は、単一の印刷可能なASCII文字列または印刷可能なASCII行の配列として与えられます。$(リテラル出力、またはセット内の文字列などとして)入力の終わりを示すために使用して、任意の妥当な形式でセットを出力できます。以下の形式に従って、入力が常に有効であると想定できます。 文脈自由文法は非常に単純化された方法で与えられます。すべての行には単一の生産が含まれます。すべての制作物は、スペースで区切られたシンボルのリストです。ターミナルは、アポストロフィで囲まれた文字列です(例:)'**'。簡単にするために、端末にスペースが含まれていないと想定することもできますが、プログラムで許可されていると便利です。非終端記号は、スペースまたはを含まない任意の文字列です$。空の生成(通常はεで示されます)は、左側の非終端のみを含む単純な行です。最初の行は、開始記号を定義するプロダクションです。 例として、次の文法: S→aSa | bSb | ε として与えられます: S 'a' S 'a' S 'b' S 'b' S 入力/出力の例: In: S 'a' S 'a' S 'b' S 'b' S Out: S {'a', 'b', $} In: S A B C A 'a' A C 'b' A B …

6
手紙、動く!Pt。2
最初の手紙、Get Moving!非常に人気がありましたが、参加は限られていました。これは簡単に解決できますが、うまくいけばゴルフにいくつかのトリックが含まれます。 小文字のみの文字列が与えられます。各文字について、アルファベットmの位置で、最後からm番目の文字になるように移動します。mの値が文字列の長さよりも長い場合は、それを一番前に移動します。完全に変換された文字列のみを出力します。 例: 「キリン」 「g」はアルファベットの7番目の文字です。すでに後ろから7番目の文字なので、そのままにしておきます。 「i」は9番目の文字です。9は単語の長さよりも大きいため、先頭に移動し、文字列は igraffe 「r」は18番目の文字で、「i」のように先頭に移動します。 rigaffe 「a」は最初の文字で、最後まで行きます: rigffea 「f」は6番目の文字で、後ろから6番目になります。 rfigfea 次の 'f'は6番目の文字でもあるため、後ろから6番目に移動します。 rffigea 「e」は5番目の文字で、後ろから5番目に移動します。 rfefiga "花" 'f'(6)=> flower 'l'(12)=> lfower 'o'(15)=> olfwer 'w'(23)=> wolfer 'e'(5)=> weolfr 'r'(18)=> rweolf "パイナップル" 'p'(16)=> pineapple 'i'(9)=> ipneapple 'n'(14)=> nipeapple 'e'(5)=> nipaepple 'a'(1)=> nipepplea 'p'(16)=> pnipeplea 'p'(16)=> ppnipelea 'l'(12)=> lppnipeea 'e'(5)=> …

5
二項関数のプロパティ
抽象代数の多くの重要なトピックには、セットに作用するバイナリ関数が含まれます。このようなトピックの調査では、このような関数の多くのプロパティが定義されています。 課題は、特定のドメイン上の特定のバイナリ関数がこれらのプロパティのうち5つを所有しているかどうかを判断することです。 プロパティ 閉鎖 可能なすべての出力がドメイン内にある場合、バイナリ関数は閉じられます。 連想性 関数が一連の入力に適用される順序が結果に影響を与えない場合、バイナリ関数は結合的です。つまり、常にに等しい$場合、結合的(a $ b) $ cですa $ (b $ c)。値(a $ b)は入力として使用されるため、連想関数を閉じる必要があることに注意してください。 可換性 入力の順序を入れ替えても結果が変わらない場合、バイナリ関数は可換です。言い換えれば、a $ b常に等しい場合b $ a。 身元 eドメインa $ e = a = e $ aにすべての要素が存在するような要素がドメインに存在する場合、バイナリ関数にはアイデンティティ要素がありaます。 べき等 バイナリ関数は、2つの同一の入力に適用してその数を出力として与えた場合、べき等です。言い換えれば、ドメイン内のa $ a = aすべての場合a。 入力 行列形式の関数が与えられます。関数の領域は数値0 ... n-1になります。ここnで、は行列の辺の長さです。 値(a $ b)は、行列でath行のbth要素としてエンコードされます。入力行列である場合Q、次にa $ b=Q[a][b] たとえば**、ドメインのべき乗関数(Pythonの場合)[0, 1, …

8
D&Dスキルの課題
でダンジョンズ&ドラゴンズ、ほとんどすべては、ダイスを転がすことによって決定されます。通常、ロールが指定された値以上の場合、やりたいことを何でも試みて成功し、そうでなければ失敗します。最も一般的には、20面ダイス(別名d20)を使用してロールします。 また、スキルチャレンジシステムが使用される場合もあります。これは上記の単純なシステムに似ていますが、成功は、プレイヤーが特定の回数失敗する前に個々のロールを特定の回数成功させるかどうかによって決定されます。たとえば、プレイヤーは、限られた数のロックピックでドアの複数のロックを選択しようとしている可能性があります。個々の成功したロールは、ロックの1つを正常に選択することを表し、個々の失敗したロールは、ロックピックを破ることを表します。全体的な成功とは、すべてのロックを解除する前にすべてのロックを正常に選択することを意味します。 さらに、特定のロールはクリティカルロールになる可能性があります。d20では、1を振るのは重大な失敗であり、チャレンジ全体がすぐに失敗します(上記の例では、プレイヤーが誤ってガードに警告する場合があります)。20を振るのは重大な成功であり、チャレンジ全体をすぐに成功させることになります(上記の例では、プレイヤーはロックへのキーのセットを見つけ、それらを選択する必要がなくなります)。クリティカルロールの場合、以前の成功と失敗の数に関係なく、課題はすぐに終わり、結果が決定されます。 このチャレンジでは、難易度、必要な成功の数、チャレンジが失敗する失敗の数が与えられます。チャレンジを試みるプレーヤーをシミュレートし、結果を出力する必要があります。 入力 個々のロールで成功するために満たす必要のある値、チャレンジで成功するために必要な成功の数、チャレンジが失敗する失敗の数を表す3つの整数。使用する順序を指定する限り、入力の順序と形式は重要ではありません。難易度は1〜20で、成功と失敗の数は両方とも1〜100です。 出力 d20の各ロールの結果(整数、順番)、およびチャレンジの全体的な結果(真実/偽の値)。個々の結果が順序どおりである限り、全体の結果は個々のロールのすべての前または後になります(たとえば、ロールの途中で全体の結果を出力することはできません)。使用する出力形式を指定し、一貫して使用します。 例(括弧内の値は説明のためのものであり、含める必要はありません): 入力: 12 5 3 (difficulty successes failures) 出力: 15 (success, 1-0) 10 (failure, 1-1) 5 (failure, 1-2) 16 (success, 2-2) 12 (success, 3-2) 15 (success, 4-2) 19 (success, 5-2) True (overall success) 入力: 15 2 3 (difficulty failures successes) 出力: 0 …
14 code-golf  game  random 

3
ベーコンの暗号:ステガノグラフィの紹介
この小さな貯金箱は市場に出ました、この小さな貯金箱はいくつかのコードを書きました... ああ、そのベーコンのことではなく、サーフランシスベーコンのことです!具体的には、暗号ベーコンは、1500年代後半に、メッセージを別のメッセージ内に隠す方法、ステガノグラフィーの方法として考案しました。 暗号は、その内容ではなく、テキストの表示でメッセージを隠すことで機能します。まず、メッセージの文字は次のようにバイナリ(0〜25)にエンコードされます。 注:コード内で次のエンコードを使用してください。入力内の数字、スペース、またはその他の記号については心配しないでください。ただし、エンコードにこれらの文字を含める人にはいくつかのボーナスを考案できます。他の記号を含める場合、文字はエンコードのスペース0〜25を占める必要があります。 Letter Encoding A AAAAA B AAAAB C AAABA D AAABB E AABAA F AABAB G AABBA H AABBB I ABAAA J ABAAB K ABABA L ABABB M ABBAA N ABBAB O ABBBA P ABBBB Q BAAAA R BAAAB S BAABA T BAABB U BABAA V BABAB …

5
nに合計する必要がある正方形、立方体、4乗などはいくつですか?
非負の整数nと整数が与えられp >= 2ます。を取得するには、いくつかのp累乗(p=2正方形をp=3意味し、立方体を意味する)を一緒に追加する必要がありますn。これは常に非負nではありませんが、必要なp(正の整数の)べき乗の多くはわかりません。 これがあなたの仕事です。p合計することができる最小のべき乗の数を見つけますn。 例 >>> min_powers(7, 2) 4 # you need at least four squares to add to 7 # Example: (2)^2 + (1)^2 + (1)^2 + (1)^2 = 4 + 1 + 1 + 1 = 7 >>> min_powers(4, 2) 1 # you need at least one square …

4
StackyMathを解釈してください!
あなたが私の新しいスタックベースの言語を実装する時間です!StackyMathと呼ばれます。これは、スタック上の8つの操作とスタックに番号を追加する方法を備えたスタックベースの言語になります。 操作のリスト: /:部門。スタックの上位2桁で実行されます。結果をスタックにプッシュします。 *:乗算。スタックの上位2桁で実行されます。結果をスタックにプッシュします -:減算。スタックの上位2桁で実行されます。結果をスタックにプッシュします +:追加。スタックの上位2桁で実行されます。結果をスタックにプッシュします ^:べき乗。スタックの上位2桁で実行されます。結果をスタックにプッシュします %:モジュロ。スタックの上位2桁で実行されます。結果をスタックにプッシュします !:階乗。スタックの一番上の番号で実行されます。結果をスタックにプッシュします D:スタックの一番上の番号を複製します 擬似コードで定義された操作: /: push(pop divided by pop) *: push(pop times pop) -: push(pop minus pop) +: push(pop plus pop) ^: push(pop to the pop) %: push(pop mod pop) !: push(factorial pop) D: t = pop; push(t); push(t) 数字をスタックにプッシュする方法: スタックに番号を追加するのは簡単です。必要な場所にプログラムに生の番号を入れるだけです。スタックに複数の数字を配置する必要がある場合は、コンマ(,)で区切ることができます。あなたのプログラムは-入力の数字を処理する必要はありません。ユーザーが数字を望むなら、否定したい数字、ゼロ、-。プログラムの入力の数値も正の整数に制限されます。 入力: プログラムは、コマンドラインで入力するか、標準入力から入力する必要があります。入力は,、必要に応じて区切られた数字(科学表記法または小数なし)と上記で定義された操作のみで構成されます。 …

11
セブンズのゲーム!誰が何を言った?
セブンズのゲームは次のようにプレイされます:nプレイヤーは円に座って、1からカウントアップを開始し、左へ(またはプレイヤーからプレイヤーAへB)通過します。 数ときにp持っている7ことにORで割り切れる7達したが、その後、番号を話したプレイヤーはp-1、次のプレーヤーが言う後p、言わなければならないp+1とは逆転を話す人々のため。例えば、プレイヤーがあればB話す6、プレイヤーはC言う7、Bと言う8と、プレイヤーがA言います9。 注:実生活でプレイしたい人のために、人が数字を忘れた場合(またはsevens言われなかったバージョンで誤ってを言う場合seven)、サークルから除外されますが、この課題からこの詳細を省略します。 チャレンジ自体は、セブンの完璧なゲームで、各プレイヤーがm入力nプレイヤーへの入力までに言うべき数字を印刷することです。 5人は、一例としてA、B、C、D、そしてE、彼らは達するまでプレイしています30。彼らはこのように遊ぶ A: 1 6 8 13 15 19 23 30 B: 2 7* 12 16 18 24 C: 3 11 17* 25 D: 4 10 21* 26 28* E: 5 9 14* 20 22 27*29 にsevensはが付いてい*ます。27と28で2回反転し、からDまで「通常どおり」プレイが継続することに注意してくださいE。 出力は上記の形式である必要はないことに注意してください。わかりやすくするために、そのように印刷しました。 ルール 入力は任意の順序の2つの整数でありm、最後に言う数をn表し、プレーヤーの数を表します。 出力は、プレーヤーごとに1つずつ、複数の配列または複数のストリングにすることができます。文字列を使用する場合は、区切り文字を使用する必要はありません(ただし、コードテストに文字列を追加できる場合は、読みやすくしてください)。どういうわけか実際にそれらを円で印刷できるなら、それも受け入れられます、そしてそれはかなりクールです。 出力は、どのプレイヤーがどのプレイヤーであるかを指定する必要はありません(最初のプレイヤーが言う人であることはかなり明らかです1)が、出力が何らかの理由でソートされていない場合、どのプレイヤーがどの数字のセットを話しているかを明確にする必要があります。発言しているプレイヤーを明確にすれば、何も言わないプレイヤーを省略することもできます。以下に可能な出力の例をいくつか追加します。 これはコードゴルフであるため、最小バイト数が優先されます。 いつものように、問題が不明な場合はお知らせください。幸運と良いゴルフ! 例 >>> sevens_string(30, …

1
矢印迷路脱出
質問 50 x 50文字の配列があります。各セルには、4つの方向のいずれかを指す矢印があります。空のセルはありません。セルに入ると、矢印で指定された方向にセルを出る必要があります。矢印は、あなたが来たのと同じ方向を指し、行き止まりになることもあります。 迷路の最も外側の境界にあるセルから開始し、迷路にあなたを導くパスを見つけて、他のセルで終了させることができます。入力は、<、>、^、およびvを含む配列として与えられます。出力は、0(タスクが不可能であることを示す)または1(持っていることを示す)として1桁(ブール、整数または文字、何でも可能)になりますタスクを達成しました)。 例(実際の配列はこれより大きくなります) ^ v < > > < v < v > v ^ 出力は 1 右側の<から入力できるため、パス「<v v」によって下のvから終了します。 タスクは、入力として迷路を受け取る最短のコードを記述し、ルールで指定されているようにパスが存在する場所を特定し、1桁の0または1を出力することです。 実際の数字の代わりにTRUEとFALSEを出力することもできます。
14 code-golf  maze 

5
アルファベット全体
アルファベット全体 この課題では、アルファベットの文字を覚えるのに苦労します。これを回避するには、アルファベットが表示されるまでアルファベットを上下します。 コードを移植可能にするため、文字ブロックでコードを記述します。大半の文字ブロックが盗まれたため、文字ブロックの数は限られているため、コードをできるだけ短くする必要があります。 例 入力/出力ペアは空白行で区切られています: Ac ABc Ad ABcd fA fedCBA adB abcdcB Hello, World! HGfefghijkllmno, WVUTSrqpopqrqponmlkjihgfed! チャレンジ あなたの目標はA-Za-z、それらの間にアルファベットのすべての中間文字()で隣接する文字を連鎖することです。大文字化が異なる場合、大文字化は途中で変換する必要があります。資本化を途中で均等に変換できない場合、途中で分割されます。文字がアルファベット文字でない場合、変換は実行されません。 勝ち これはコードゴルフなので、バイト単位の最短コードが勝ちです! -10%ボーナス:コードが数字を連結する場合
14 code-golf  string 

12
そして、すべての人々が言っ​​た...
目的文字[またはを含まないテキストの入力を前提として]、次のアクションを実行します。 すべてのインスタンスのためのAmen少なくとも一つの大文字で(そのすべてのインスタンスAmenを除くamen)、同じことを出力Amen(時価総額を保持)。 /all the people said[?: ]/i(正規表現である)のすべてのインスタンスに対して、出力も行いますAmen(どんな場合でも問題ありません)。 すべての出力の後に、改行、スペース、無などの定数セパレーターを選択できます。 これはcode-golfであるため、バイト単位の最短プログラムが優先されます。 IOの例 Input: I said AMEN! AMEN, PEOPLE! Output: AMENAMEN ; any separator is fine, I choose none. Input: amen amen amen amen Output: ; nothing Input: ; empty Output: ; nothing Input: *blah blah blah* And all the people said? Output: …

22
文字列のジップと並べ替え
文字列のリストを指定して、各位置の各文字列から文字を取得し、ASCII順序で並べ替えて、出力文字列に順番に追加することにより、単一の文字列を出力します。つまり、n入力文字列の場合、n出力の最初の文字は序数でソートされた各入力の最初の文字になり、出力の2番目のn文字は序数でソートされた各入力の2番目の文字になります。オン。文字列はすべて同じ長さであり、少なくとも1つの文字列があると想定できます。すべての文字列は、ASCII印刷可能文字(序数32-127)のみで構成されます。 Pythonでのリファレンス実装(オンラインで試してみてください): def stringshuffle(strings): res = '' for i in range(len(strings[0])): res += ''.join(sorted([s[i] for s in strings],key=ord)) return res 例: "abc","cba" -> "acbbac" "HELLO","world","!!!!!" -> "!Hw!Eo!Lr!Ll!Od" ルール 標準的な抜け穴は禁止されています これはcode-golfなので、バイト単位の最短回答が勝ちます リーダーボード この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からリーダーボードを生成します。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 ## Language Name, N bytes N提出のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: ## Ruby, <s>104</s> <s>101</s> 96 bytes ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。 ## Perl, 43 + …
14 code-golf  string 

25
チェッカーボード上のピースの数
前書き 通常のチェッカーボードには、8 x 8 = 64個の正方形が含まれています。 合計で、12個の白い部分があることがわかります。黒と白は常に同じ量のピースを持っています。ボード上にこれ以上ピースがある場合、ピースは隣接することになりますが、これはこのチャレンジでは許可されていません。物事を明確にするために、いくつかの例を示します。 このチャレンジで可能な最小のボードは3 x 3です。 ピースの最大量は2に等しいことがわかります。したがって、N = 3を指定した場合、2を出力する必要があります。入力がN = 4の場合、次の結果が得られます。 最大量も2であることがわかります。したがって、N = 4の場合、出力は2になります。以下のためにN = 5、出力は等しくなければならない5。 例 STDIN: 3 STDOUT: 2 STDIN: 4 STDOUT: 2 STDIN: 5 STDOUT: 5 STDIN: 6 STDOUT: 6 STDIN: 8 STDOUT: 12 ルール 提出は、1つの整数を取り、ボード上のピースの数を出力または返すプログラムまたは関数などでなければなりません。 入力が2以上の非負整数であると安全に仮定できます。 これはcode-golfなので、バイト数が最小のプログラムが勝ちです! ボードの左下の正方形は常に暗いことに注意してください。ピースは暗い正方形にのみ配置されます ピースで一列を占める必要があります

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