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

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

18
素因数分解の根
デジタルルートに触発されて、ある数の素因数根は、ある数の素因数を取り、それらを加算し、結果の数に対してプロセスを繰り返すと、素数になるまで続きます(これは、それ自体が唯一の素因数であり、したがって、それ自身の素因数根です)。4の素因数根は4であり、2 * 2 = 2 + 2であり、これは1より大きい整数の唯一の非素素因数根です(素因数がないため、これは別の特殊なケースです)。素因数分解根によって形成されるOEISシーケンスはA029908です。 たとえば、24の素因数根は次のとおりです。 24=2*2*2*3 2+2+2+3=9=3*3 3+3=6=2*3 2+3=5, and the only prime factor of 5 is 5. Therefore, the prime factoral root of 24 is 5. あなたのタスク: 入力整数の素因数根を見つけるプログラムまたは関数を記述します。 入力: 2から言語がサポートする最大の整数(両端を含む)までの適切な方法で入力された整数。特に、最大整数サイズが不当に小さい言語を選択することは許可されていません(この標準の抜け穴にも違反しています) 出力: 入力の素因数根である整数。 テストケース: 4 -> 4 24 -> 5 11 -> 11 250 -> 17 得点: …

4
魔法のスペルチェッカーを書く
ゲーム「手を振る」は、ペンと紙のマジック「ザギャザリング」と非常に精巧な「じゃんけん」の中間にあります。ターンごとに、手ごとに8つのジェスチャーのいずれかを書き留めます。 ウィグルFingers P提案されたアルム S昼寝 Wアベニュー DIgitポインティング Cラップ staB N何もない 他のルールよりも優先される重要なルールはほとんどありません。 両手でジェスチャーをPすると自動的に降伏します。(これは簡略化ですが、それで行きます。) 一度に1つの手だけがジェスチャーできBます。 同じ手で実行される一連のジェスチャーは、各呪文が1つの特定のシーケンスに関連付けられている呪文をキャストできます。これらのシーケンスは重複する場合がありますが、各ジェスチャーは単一の呪文の最後のジェスチャーとしてのみ使用できます(したがって、1ターンで最大2つの呪文を作成できます)。一部の呪文では、両手で同時にジェスチャーを行う必要があります。 あなたの仕事は、各手に対するジェスチャーのリストを与えられて、現在のターンにどの呪文が唱えられるかを決定することです。それぞれの手について、リストの最後の文字は現在のターンで選択されたジェスチャーを表しています。 これがジェスチャーシーケンスのリストです。大文字は片手で行われるジェスチャーを指し、小文字は両手で行われるジェスチャーを指します。 B Stab cDPW Dispel magic cSWWS Summon elemental cw Magic mirror DFFDD Lightning bolt DFPW Cure heavy wounds DFW Cure light wounds DPP Amnesia DSF Confusion DSFFFc Disease DWFFd Blindness DWSSSP Delayed effect DWWFWc Raise …
14 code-golf  string  game 


2
三目並べで負けない
(最良の戦略を使用する必要があるいくつかの課題が存在しますが、ここではそうではありません。たとえあなたが勝つことができたとしても、あなたはネクタイを作ることができます) チャレンジ ゲーム三目並べを再生するプログラムを作成します。負けてはいけません(したがって、引き分けか勝利によってゲームを終了する必要があります)。 許可されるI / Oメソッド 入力は現在のボードである可能性があります。2番目のプレーヤーの以前のすべての動きがエンジンでプレイされたと仮定できます。 入力は最初のプレーヤーの動きであり、関数は過去にどの動きが起こったかを保存します。この場合、関数は複数回呼び出されます(1回の移動ごとに1回)。または、複数回の機能/プログラムプロンプト入力。 あなたが最初のプレイヤーであるかどうかを追加で入力するか、最初のプレイヤーの問題と2番目のプレイヤーの問題を解決するための2つの(おそらく関連する)関数を書くことができます。プログラムでインプットメソッド2(複数呼び出し)を使用する必要がある場合、最初の呼び出しで何を渡すかを決定できます。 出力はあなたの番の後のボードかもしれません。 出力はあなたの動きかもしれません。 移動は、数値のペア(0インデックスまたは1インデックス)、0〜8の範囲の数値、または1〜9の範囲の数値として表すことができます。 ボードは、3×3配列、または長さ9の配列として表される場合があります。言語に0インデックス配列がある場合でも、1インデックスを使用できます。 グリッド上のセルは、3つの異なる値を使用してX、Oおよび空を示します。 受賞基準 各言語で最も短いコードが優先されます。

8
私の情報源は順調です、あなたのものですか?
あなたの課題は、渡された文字列が「順序どおり」かどうかを計算するプログラム、関数などを書くことです。つまり、文字列の文字には、最小から最大の順序の文字コードがあります。最小の文字コードが最初でなければなりません。つまり、最低のUnicodeコードポイントから最高のUnicodeコードポイントを意味します。言語で使用するコードページは関係ありません。 入力が「順序どおり」の場合は1つの値を返し、そうでない場合は別の値を返す必要があります。値は異なる必要がありますが、出力値には他の制限はありません。たとえばtrue、!1AQaq¡±(順番に)およびの印刷/返品/出力が可能falseですaq!QA。2つの異なる値は、真実であるか偽物である必要はなく、2つの異なる値である必要があります。繰り返される文字列(例:)aaは順序どおりです。 サポートする必要があるのは、Unicode U+007E(~)(ascii 126)までです ただし、プログラムの文字自体は正しいものでなければなりません。幸運と幸せなコードゴルフ!

3
チャレンジを提案してください!
私は退屈すぎて、解決するための挑戦が欲しいです。しかし、私は興味深い挑戦を見ていません、そして、私は1つを探すのが面倒です。(まあ、厳密にはあなたのコード)私に提案できますか? I / O 入力:なし。 出力: PPCGのランダムなオープン(つまり、クローズされていない)チャレンジ(「チャレンジ」はヒントを除外します!)へのリンク。チャレンジ内の回答にリンクすることはできません。ただのチャレンジです。(私は興味深い答えを求めませんでした!) 例 有効: http://codegolf.stackexchange.com/questions/93288/make-me-a-mooncake http://codegolf.stackexchange.com/questions/113796/raise-a-single-number http://codegolf.stackexchange.com/questions/113898 無効: http://codegolf.stackexchange.com/questions/78152/tips-for-golfing-in-matl (tips question) http://codegolf.stackexchange.com/questions/113896/josephus-problem (closed) http://codegolf.stackexchange.com/questions/84260/add-two-numbers/84365#84365 (linked to answer)

14
再配置可能なコードボウリング
コードボウリングチャレンジ ソースコードをどのように再配置しても、同じ出力を生成するプログラムまたは関数を作成します。(出力はエラーにはなりません) パングラムスコアリング スコアは、ソースコード内の一意の文字の量です。 ソースコードAJBを使用し3 たプログラムのスコアは、ソースコードAAJを使用し2 たプログラムのスコアは、ソースコードを使用したプログラム111のスコアは、1 これはコードボウリングの亜種です。最高得点のプログラムが勝ちます! (便宜上、ここに自動スコアリングツールが作成されています) チャレンジルール 入力 プログラム/関数は入力を受け取ることができますが、これは完全にオプションです。 出力 この出力には任意のものを指定できますが、nil、null、null、空、およびエラーではないはずです。(したがって、出力は少なくとも1バイトでなければなりません) 再配置 ソースコードがどのように再配置されても、出力は同じである必要があります。例: プログラム:ABJ出力hello world、プログラムがそうであるように:[ AJB、JAB、JBA、など] これはコードボウリングの亜種です。文字数が最も多いプログラムが勝ちます!

21
行列の乗算を行う!
数学では、行列乗算または行列積は、2つの行列から行列を生成する2項演算です。この定義は、線形方程式とベクトルの線形変換によって動機付けられています。これらは、応用数学、物理学、および工学で多くの用途があります。より詳細には、Aがn×m行列で、Bがm×p行列である場合、それらの行列積ABはn×p行列です。 Bの列と合計してABのエントリを生成します。2つの線形変換が行列で表される場合、行列積は2つの変換の構成を表します。 出典:ウィキペディア 言い換えると、2つの行列を乗算するには、たとえば: 1 2 3 1 4 2 3 4 × 3 1 = 3 4 5 4 6 第一、第二のマトリックス中に第1の行列における行番号1、列番号1を取り、乗算1によって1、2によって3、そして3による4。 1 × 1 = 1 2 × 3 = 6 3 × 4 = 12 それらを一緒に追加して、最初のアイテムを取得します。 1 2 3 1 4 19 2 3 4 × 3 1 …
14 code-golf  math  matrix 

8
順列のパリティ
バックグラウンド 順列のパリティは、ウィキペディアで定義されている次のように、次のとおりです。 順列σの符号または署名はsgn(σ)で示され、σが偶数の場合は+ 1、σが奇数の場合は-1として定義されます。 順列の符号は、次のように明示的に表現できます。 sgn(σ)=(−1)^ N(σ) ここで、N(σ)はσの反転数です。 あるいは、置換σの符号は、転置の積への分解から次のように定義できます。 sgn(σ)=(−1)^ m ここで、mは分解の転置の数です。 数学でギリシャ語のアルファベットスープが好きではない人のために、例(ウィキペディアから盗まれた)を使って定義を少し簡略化してみます。 例 入力配列{1, 2, 3, 4, 5}、およびその順列を考えてみましょう{3, 4, 5, 2, 1}。その順列に元の配列から取得するためには、インデックスを交換しなければならない0と2、1と3、その後、2および4。これは独自のソリューションではありませんが、パリティは明確に定義されているため、すべての場合に機能します。 3つのスワップが必要なので、この順列にoddパリティを付けます。ご想像のとおり、偶数のスワップを必要とする順列にはevenパリティがあると言われています。 チャレンジ あなたの課題は、置換のパリティを決定するために、できるだけ少ないバイトでプログラムを書くことです。プログラムまたは機能は以下を行う必要があります。 置換の前後のセットを表す2つの入力配列(または文字列)を引数として受け入れます。 順列が与えられると、偶数eまたはo奇数の文字を返すか出力します。 配列または文字列内のすべてのインデックスに一意の値があると想定する必要があります。 テストケース 次の名前の関数を宣言したと仮定しますf。 f([10], [10]) == "e" f([10, 30, 20], [30, 20, 10]) == "e" f([10, 30, 20, 40], [30, 20, 40, …

21
スマイル!ただ笑って
Brainf * ckがコルモゴロフの複雑さの問題に非常に悪いことはよく知られています。たとえば、「He​​llo world」を印刷するには約100文字が必要です。 ただし、Brainf * ckが非常に得意なテキストがあるかもしれません。 ここでのタスクは、入力を受け取らないプログラムを作成することで、次のように表示されます。 ☺ つまり、スマイリーフェイス(ブラウザーがレンダリングしない場合はASCII 1)。 Brainf * ckは2文字でそれを行うことができます。 +. それに勝る言語を見つけてみてください! コンソールが実際にその文字を表示できる(またはフォントに文字が含まれているなど)と想定しています。 最短のコードが優先されます。同じ長さのものがもっとある場合は、最初のものが勝ちますが、他のものも同様に投票します。 編集:すみません、最初の投稿がすぐに届くとは思いませんでした。簡単な編集:言語はチューリング完全でなければなりません!

30
プログラムのASCIIコードの合計を印刷するプログラムを書く
タスクは、プログラム自体の文字のASCIIコードの合計を印刷するプログラムを作成することです。ファイルを開くことはできません(コマンドライン引数、標準入力、ファイルなどの入力は禁止されています)。 最小の数字を出力する(つまり、ASCIIコードの合計が最小の)プログラムが勝ちます。 Cで書かれたこのようなプログラムの例(最短ではありません)は次のとおりです。 #include <stdio.h> int main(){ printf("4950");/*i*/ return 0; } (後に改行なし})

5
入力しますが、左[閉じる]
閉じた。この質問には、詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 4か月前に閉鎖されました。 バックグラウンド 会議のメモを取るタスクが与えられました。Googleドキュメントで入力を開始しますが、会議中に入力中にキーボードを確認する十分な時間がありません。 幸いなことに、キーボードを見なくても入力できます。ミーティングの後、入​​力したすべてが左側の1つのキーであることがわかります。 チャレンジ この課題では、QWERTYキーボードレイアウトの文字、数字、スペースバーを使用します。 (任意の標準入力メソッドからの)テキストの入力が与えられた場合、結果のテキストを出力します。すべての文字はキーボード上で1つ左に移動します。 大部分の文字については、文字を見て、左の文字に変換するだけです(にcなりx、にtなりますr、など)。 letterのq場合、リテラルのタブ文字(\t)に変換します。 letterのa場合、Caps Lockを有効にして、残りの文字列の大文字化を逆にします。 letterのz場合、文字列の次の文字を大文字にします。 スペースバーの翻訳は必要ありません。 変換中は大文字を保持し、Caps Lockに注意してください(Caps Lockが有効になっている場合は、大文字と小文字が逆になっていることを確認してください)。 入力文字列のすべての文字は、文字、数字、またはスペースになります。句読点やその他の文字を含めることはできません。 テストケース \t リテラルのタブ文字です Hello world -> Gwkki qieks Code Golf -> Xisw Fikd Queried apples -> \tyweuws OOKWA 得点 バイト単位の最低スコアが勝ちです。楽しんで!

30
2つのリストのデカルト積
仕事 文字の2つのリストが与えられたら、デカルト積、つまり最初のリストの各文字と2番目のリストの各文字のペアのリストを出力します。 例 "123456"そして"abcd"与える: [["1","a"],["1","b"],["1","c"],["1","d"],["2","a"],["2","b"],["2","c"],["2","d"],["3","a"],["3","b"],["3","c"],["3","d"],["4","a"],["4","b"],["4","c"],["4","d"],["5","a"],["5","b"],["5","c"],["5","d"],["6","a"],["6","b"],["6","c"],["6","d"]] 入力 文字または文字列の2つのリスト。使用される文字は英数字でa-z, A-Z, 0-9あり、文字は複数回、両方の入力で同時に発生する可能性があります。 出力 入力リストのデカルト積。つまり、最初のリストからの文字と2番目のリストからの文字の可能な各順序ペアのリスト。各ペアは、2つの文字、または2つの長さ1の文字列のリスト、文字列、または類似物です。出力の長さは、入力の長さの積に等しくなります。 ペアは順番にリストする必要があります。最初に最初のリストの最初の文字と2番目のリストの最初の文字をリストし、その後に最初のリストの最初の文字のすべてのペアが続きます。最後のペアは、最初のリストの最後の文字と2番目のリストの最後の文字で構成されます。 出力は、ペアのフラットリストである必要があります。ペアが最初または2番目の要素でグループ化されている2Dマトリックスではありません。 テストケース inputs output "123456", "abcd" [["1","a"],["1","b"],["1","c"],["1","d"],["2","a"],["2","b"],["2","c"],["2","d"],["3","a"],["3","b"],["3","c"],["3","d"],["4","a"],["4","b"],["4","c"],["4","d"],["5","a"],["5","b"],["5","c"],["5","d"],["6","a"],["6","b"],["6","c"],["6","d"]] "abc", "123" [["a","1"],["a","2"],["a","3"],["b","1"],["b","2"],["b","3"],["c","1"],["c","2"],["c","3"]] "aa", "aba" [["a","a"],["a","b"],["a","a"],["a","a"],["a","b"],["a","a"]]

7
256要素のフィールドを定義する
数学の分野とは、特定の公理(Wikipediaで説明。以下も参照)を満たすように、加算および乗算演算が定義された一連の数値です。 有限体はp n個の要素を持つことができます。ここでpは、素数でありn、自然数です。この課題では、p = 2とを使用してn = 8、256個の要素を持つフィールドを作成しましょう。 フィールドの要素は、0およびを含む範囲内の連続した整数でなければなりません1。 -128 ... 127 0 ... 255 または他のそのような範囲 フィールドの公理を満たすように、抽象「加算」および抽象「乗算」のために、2つの関数(またはそれがより簡単な場合はプログラム)を定義します。a(x,y)m(x,y) 一貫性:同じ引数で呼び出されたときに同じ結果a(x,y)をm(x,y)生成します 閉鎖性:aおよびの結果はm、関連する範囲の整数です 連想は:いずれかのためにx、yおよびz範囲内、a(a(x,y),z)に等しいですa(x,a(y,z))。同じm 可換性:任意用x及びy範囲内には、a(x,y)に等しいですa(y,x)。同じm 分配性:いずれかのためにx、yおよびz範囲内、m(x,a(y,z))に等しいです。a(m(x,y),m(x,z)) 中立要素:x範囲内のいずれかに対して、にa(0,x)等しくx、にm(1,x)等しいx 否定は:いずれかのx範囲内で、そのような存在するyことa(x,y)です0 逆:いずれかのx≠0範囲内で、そのような存在するyことm(x,y)です1 名前aとmは単なる例です。他の名前または名前のない関数を使用できます。あなたの答えのスコアはのためのバイトの長さの和であるaとm。 組み込み関数を使用する場合は、その関数が生成する結果を言葉で説明してください(たとえば、乗算表を提供する)。

13
マインスイーパグリッドの生成
マインスイーパは、ほとんどのOSに搭載されているロジックゲームです。ゲームの目標は、そのスポット周辺の地雷の数を示す数字が与えられ、地雷がグリッド上のどこにあるかを判断することです。 グリッドサイズと一連の地雷を指定して、その一連の地雷の掃海艇グリッドを生成します。 入力:グリッドサイズを示す2つの整数と、地雷の位置を示す未定義の整数。位置は(列位置、行位置)として指定され、インデックスは行1から始まります。 出力:マインスイーパグリッド。ブロックの周囲に地雷がない場合は、を印刷しxます。新しい行ごとに、改行を印刷します。すべての地雷をアスタリスクとして出力してください*。印刷時に行の値の間に空白を残さないでください。 テストケース: 入力「5 5 1 3 3 5 2 4」: xxxxx 11xxx *21xx 2*21x 12*1x 入力「3 4 3 1 1 4 2 3 3 2」: x2* 13* 2*2 *21 最短のコードが優先されます。

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