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

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

12
最小素因数の合計
SF(n)は、指定された数値nに対して最小の素因数を計算する関数です。 T(N)を2 <= n <= NのすべてのSF(n)の合計と呼びます。 T(1)= 0(合計は0の被加数以上) T(2)= 2(2は最初の素数) T(3)= 5 = 2 + 3 T(4)= 7 = 2 + 3 + 2 T(5)= 12 = 2 + 3 + 2 + 5 ... T(10000)= 5786451 勝者は、自分のラップトップ(Toshiba Satellite L845、Intel Core i5、8GB RAM)で60秒で最大のT(N)を計算することに成功した人です。 Current top score: Nicolás Siplis - 3.6e13 …

9
入力が与えられたら、キーボードに沿ってN文字移動します
チャレンジ: キーボードで入力できる入力がある場合、テキストをN文字ずつ移動します。 使用するQWERTYキーボードは次のとおりです。修飾キー(Shift、Caps、Enter、Delete、Tab)は無視できます。(たとえば|)ループバックの一方に到達すると、次のよう|になりQます。N = 1ます。 スペースを移動する必要はありません(修飾子をスキップすると、スペースに戻ります)。シフトは、(例えば、文字を入力するために使用された場合!と@)変更された文字は、シフトを使用して入力する必要があります(すなわち!に行く@ではない2場合N = 1)。 英国のキーボードはこれとは異なりますが、比較できるようにこれを使用してください。 入力: 上記のキーボードで入力できる文の後に正の整数が続きます。この整数のサイズに最大値はありません。 出力: 同じ文、Nに沿ってシフト 例: My name is Tim 3 ?o .f/y [g I[/ Hello World 7 Spgge Oe[g; I Wi5h I h4d b3773r C@d3ing ski{{s 3 { T[8l { l7h ,6006u N%h6[.k g'[QQg これはコードゴルフなので、最短のコードが勝ちます。

16
sedでのゴルフのヒント
sedでゴルフをするための一般的なヒントは何ですか?コードゴルフの問題に適用でき、sedに少なくともある程度固有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。 回答ごとに1つのヒントを投稿してください。
19 code-golf  tips  sed 

10
ソローは投げたが、トロールはタフなトラフを投げる
これら9つの紛らわしいほど類似した単語のそれぞれに、任意の方法で1〜9の番号を割り当てます。 though through thorough Thoreau throw threw trough tough troll 文字列を取り込むプログラムを作成します。入力がこれらの9つの単語のいずれかである場合、割り当てた番号を出力します。入力が上記の単語のいずれでもない場合、プログラムは何でもできます(エラーや永久ループを含む)。 単語は大文字と小文字を区別します。たとえばThoreau、1〜9の数字を生成するthoreau必要がありますが、必ずしも同じとは限りません。 例 次のように番号を割り当てるとします。 though 9 through 2 thorough 7 Thoreau 6 throw 3 threw 5 trough 4 tough 1 troll 8 ときにtough入力され、1出力する必要があります。 ときにthrough入力され、2出力する必要があります。 ときにthrow入力され、3出力する必要があります。 。。。 ときにthough入力され、9出力する必要があります。 他のすべての入力は何でもできます。 詳細 stdinまたはコマンドラインを介して入力文字列を取得し、stdoutに出力します。 出力には、単一の末尾の改行が含まれる場合があります。 プログラムの代わりに、文字列を取り込んで通常どおり結果を出力する関数を作成するか、結果を返すことができます。 バイト単位の最短の提出が勝ちます。

14
スピンタックス{タスク|問題|質問}
Spintaxを使用した記事の回転 記事の紡績は、検索エンジン最適化手法であり、これにより、検索エンジンオプティマイザーは関連するコンテンツの一意のバージョンを記事ディレクトリ、Web 2.0サイト、またはバックリンクの他のソースに投稿します。 Webサイトの作成者が自分のサイトで使用することもありますが、通常は回避されます。これは、スピンコンテンツの品質が手書きコンテンツよりも低くなるためです。スピニングは、既存の記事または記事の一部を書き換え、特定の単語、フレーズ、文、または段落全体を任意の数の代替バージョンに置き換えて、各スピンでわずかに異なるバリエーションを提供することで機能します。 このプロセスは完全に自動化するか、手動で書き直すことができます。今日の仕事は、Spintaxを含む文字列を解釈するプログラムまたは関数を作成することです。これは、プログラムが使用可能なさまざまなオプションを読み取るための構文です。以下はSpintaxを使用する文字列の例です。 {Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!} ご覧のとおり、「スパン」される文字列のセクションは中括弧で囲まれ、個々のオプションは|文字で分割されます。これが生成する可能性のあるいくつかの例文を以下に示します。 Hi there, user! What's up? Hello, user! How are you? Bonjour, user! Feeling alright? Hello, user! What's up? Hi there, user! I caught a fish! あなたの仕事 あなたの使命は、あなたがそれを受け入れることを選択した場合、Spintaxを含んでも含まなくてもよい入力文字列を受け取るプログラムまたは関数を作成し、文字列の5つのバージョンをランダムに印刷することですオプションの各ブロックから選択肢の1つを選択してことです。いくつかの仮定を立てることができます。 ネストされたSpintaxを処理する必要はありません({This|is {an|one}|example})。 |、{および}文字がどこにも他のSpintaxブロック内より発生しません。 コードが言語の乱数関数を使用してオプションを選択している限り、5つの出力文が異なるかどうかを確認する必要はありません。 入力が改行で終わると仮定することができます。 ルール …
19 code-golf 

14
パリンドローム逆転加算
パリンドローム逆転加算 反転加算のプロセスでは、作成された数字が回文になるまで、その逆に数字が追加されます。たとえば、68から始める場合、プロセスは次のようになります。 68 + 86 => 154 + 451 => 605 + 506 => 1111 ご覧のとおり、これには回文数を得るために3つの追加が必要でした。で開始する場合は89、24の手順が必要になります(詳細はこちらで確認できます)。 回文に到達する前にとられたほとんどのステップの世界記録は261であり、これ1186060307891929990は10 118よりも大きい数を生み出します。しかし、パリンドロームを取得することができなかった数がかなりありました。これらはLychrel番号と呼ばれます。 私たちはベース10で作業しているので、これらの数字が回文に決して到達しないという証拠が存在しないため、実際には候補と呼ぶことができるだけです。たとえば、10を基数とする最小のLychrel候補は196であり、10億回をはるかに超える反復を経験しています。回文が存在する場合、10 10 8.77よりもはるかに大きくなります。比較として、その数の1が原子に内接している場合、2.26772×10 588843575宇宙分の原子が必要です。 あなたのタスク 整数入力を受け取り、回文に到達するために必要なステップ数を返すか出力するプログラムまたは関数を作成します。Lychrelの候補に対処する必要はありません(つまり、Lychrelの候補が与えられると、プログラムはエラーをスローするか、永久に実行できます)。 テストケース: f(0) => 0 f(11) => 0 f(89) => 24 f(286) => 23 f(196196871) => 45 f(1005499526) => 109 f(1186060307891929990) => 261 ルール 標準的な抜け穴はありません。 ボーナス フォーマットされた各追加ステップを印刷する場合n …

13
洗練されたパーティション
整数の配列を考えます: [1, 0, 9, 1, 3, 8] このリストを連続したサブリストに分割する方法はたくさんあります。3つあります。 A: [[1, 0, 9], [1, 3, 8]] B: [[1], [0, 9], [1, 3], [8]] C: [[1, 0], [9, 1], [3, 8]] サブリストを結合してYからXを取得できる場合、パーティションYと別のパーティションXの改良版を呼び出します。 のB洗練もA同様です。最初の2つのサブリストと最後の2つのサブリストを結合して戻すと、が得られAます。しかしC、それは洗練されたものではありません。それから回復するにはA、9とを分割する必要があります。また、どのパーティションもそれ自体が洗練されたものです。1A サブリストまたは要素をいつでも再配置することは許可されていないことに注意してください。 チャレンジ 2つのパーティション(整数のリストのリスト)Xおよびが与えられY、Yがの洗練であるかどうかを判断しXます。 あなたは、パーティションのみから整数が含まれていることを仮定してもよい0の9包括的、。あなたはそれXをY同じリストのパーティションであると仮定してはなりません(そうでない場合、互いの改良でもありません)。Xおよび/またはY空であっても、空のサブリストが含まれることはありません。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 入力は、任意の便利な文字列またはリスト形式で取得できます。要素は1桁の整数のみであるため、サブリスト内の区切り文字を省略することもできますが、先頭0のsが可能なことを確認してください。あなたは取ることを選んでもよいXし、Y逆の順序で。 出力は、洗練されている場合は真実であり、そうでない場合は偽である必要Yがあります。X コードは、妥当なデスクトップマシンで1秒以内に以下の各テストケースを解決できる必要があります。(これは、単純なブルートフォースソリューションを回避するための単なる健全性チェックです。) これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。 テストケース 各テストケースは、と書かれた独自の行にありX Yます。GolfScript / CJamスタイルの配列表記を使用して、水平方向のスペースを節約しています。 真実: [] [] [[0]] [[0]] …

9
スペードトリックの勝者
Spadesのゲームで4枚のカードトリックで勝つ人を決定するコードを記述します。少ないバイトが勝ちます。 入力は、TH QC JH 2H(Ten of Hearts、Queen of Clubs、Jack of Hearts、Two of Hearts)のように順番に再生される4枚のカードをリストする文字列です。カードは、スーツfrom CDHSと値fromの2つの文字で与えられます23456789TJQKA。入力が有効であり、カードが異なることが保証されます。 トリックの勝者には1、2、3、または4の数字を出力する必要があります。例TH QC JH 2Hでは、ハートのジャックがトリックに勝つため、3を出力する必要があります。 入力と出力は、記述されているとおりでなければなりませんが、末尾の改行はオプションです。 トリックに勝つためのスペードのルールは次のとおりです。勝ったカードは4つの最高のカードですが、いくつか注意点があります。スペードはトランプスーツであるため、スペードはスペード以外を上回ります。最初にプレイされたカードのスーツはリードスーツで、そのスーツまたはスペードのカードのみがトリックに勝つ資格があります。同じスーツのカードは、その値によって比較されます。値は、昇順で示され23456789TJQKAます。 テストケース: TH QC JH 2H 3 KC 5S QS 9C 3 QD 2D TD 5D 1 9S 5D AD QS 4 3D 4C 3H JH 1 9S 4S TS JS …

15
デイ#4のランダムゴルフ:バートランドパラドックス
シリーズについて まず、これを他のコードゴルフチャレンジと同様に扱い、シリーズについてまったく心配することなく答えることができます。ただし、すべての課題にリーダーボードがあります。最初の投稿では、リーダーボードとシリーズに関する詳細情報を見つけることができます。 このシリーズにはたくさんのアイデアが並んでいますが、将来の課題はまだはっきりしていません。何か提案があれば、関連するサンドボックスの投稿でお知らせください。 穴4:バートランドパラドックス バートランドパラドックスが示す円内にランダムコードを選ぶための方法の異なる方法が和音、その中点とその長さの異なる分布をもたらすことができる興味深い問題です。 この課題では、「正しい」方法、つまりスケーリングと変換の下で不変なコードの分布を生成する方法を使用して、単位円のランダムなコードを生成することになっています。リンクされたウィキペディアの記事では、「方法2」はそのような方法です。 正確なルールは次のとおりです。 返される和音の数Nを指定する1つの正の整数を取る必要があります。出力はN、ラジアン単位の極角で指定された単位円上の2点としてそれぞれ指定されたコードのリストである必要があります。 コードは、2つの角度のそれぞれに対して少なくとも2 20の異なる値を返すことができるはずです。使用可能なRNGの範囲が狭い場合、最初に組み込みのRNGの上に十分に大きい範囲のRNGを構築するか、独自の適切なRNGを実装する必要があります。このページはそのために役立ちます。 和音の分布は、リンクされたウィキペディアの記事の「方法2」で作成されたものと見分けがつかない必要があります。別のアルゴリズムを実装してコードを選択する場合は、正確性の証明を含めてください。どのアルゴリズムを実装する場合でも、理論的には単位円で有効なコードを生成できる必要があります(基礎となるPRNGの制限または精度の制限されたデータ型を除く)。 実装では、浮動小数点数(少なくとも32ビット幅)または固定小数点数(少なくとも24ビット幅)を使用して返す必要があり、すべての算術演算は16 ulp以内で正確でなければなりません。 完全なプログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(出力)パラメーターを介して出力を生成できます。 出力は、個々の数字が明確に区別可能であり、それらの合計数が常に偶数である限り、任意の便利なリスト形式または文字列形式にすることができます。 これはコードゴルフであるため、最短の提出(バイト単位)が優先されます。そしてもちろん、ユーザーごとの最短投稿もシリーズの総合リーダーボードに入ります。 可視化 次のスニペットを使用して、生成された行をレンダリングし、それらの分布を検査できます。角度のペアのリストをテキスト領域に貼り付けるだけです。スニペットは、数値が単純な10進数(科学表記法ではない)である限り、ほぼすべてのリスト形式を処理できる必要があります。分布をよく理解するには、少なくとも1000行を使用することをお勧めします。また、以下の記事に記載されているさまざまな方法のサンプルデータも提供しました。 コードスニペットを表示 function draw() { document.getElementById("output").innerHTML = svg } function drawLines() { lines = document.getElementById("lines").value; var e = prefix; //e += '<circle cx="' + offset + '" + cy="' + offset + '" …

3
Pythonで2つの変数のいずれかを割り当てるより短い方法はありますか?
これはpythonでのゴルフのヒントの質問です。 Pythonで行った複数のゴルフでは、ブール値によって選択された2つの変数のいずれかに固定値が割り当てられます。選択された変数は指定された値で上書きされ、もう一方は変更されません。 17文字: if b:y=z else:x=z 条件値の割り当ては簡単ですが、条件変数への割り当ては不格好に思えます。私が見逃している短い方法があるのだろうかと思っています。 x,y代わりにlistを使用した場合、これは簡単にLなりますが、コンテキストでは書き込みL[0]を行うのに十分な変数の参照が必要でL[1]あり、禁止されていると想定します。変換に時間がかかりすぎる: 20文字: L=[x,y];L[b]=z;x,y=L 私が知っている最速の方法は、Python 2を使用することですexec。これは奇妙です。 16文字、Python 2: exec"xy"[b]+"=z" タプル選択はより長いようです: 18、19、18、18文字: x,y=b*(x,z)or(z,y) x,y=[z,x,y,z][b::2] y,x=[y,z,x][b:b+2] y,x,*_=[y,z,x][b:] # Python 3 より短い方法や文字を節約する最適化はありますか?あなたは想定できbている0か1、またはFalsey Truthyだけではなく、それが助け場合も、データ型と値についての仮定を行います。
19 code-golf  tips  python 

8
文字列から単一行と複数行のコメントを削除します
ゴール 選択したプログラミング言語を使用して、Cプログラムを表す文字列からコメントを削除する最短のプログラムを作成します。 入力 文字列は任意の形式の入力として使用できますが、変数として使用することもできます。 説明書 次の2種類のコメントを削除します。 複数行コメントで始まり、/*で終わる*/ //Linuxスタイルの改行(LF、\n)で始まり、末尾が単一行のコメント 文字列内のコメントは削除されません。この課題のために、考慮する必要があるのは、"区切り文字列のみです。特に、'区切り文字リテラルの可能性は無視できます。3文字表記と行継続(/\<LF>*...)を無視することもできます。 例 入力: #include <stdio.h> int main(int argc, char** argv) { // this comment will be removed if (argc > 1) { printf("Too many arguments.\n"); // this too will be removed return 1; } printf("Please vist http://this.will.not.be.removed.com\n"); printf("/* This will stay */\n"); …

2
ユニークな出力を持つBrainf ***サブプログラム
100バイトの長いBrainfuck(BF)プログラムを作成する必要があります。 結果の100個の新しい(99バイト長)プログラムは、可能な限りあらゆる方法で1文字削除されます。プログラムのために例えば++.>.5つのサブプログラムは+.>.、+.>.、++>.、++..と++.>。 スコアは、100個のプログラムが生成する一意の出力の数になります。スコアが高いほど優れています。 詳細 プログラムは、最初の文字を出力した後に終了します。 無効または終了しないプログラム、および空の出力を生成するプログラムは、スコアにカウントされません。 BFセルは8ビットラッピングセルです。(255 + 1 = 0、0-1 = 255) プログラムには入力がありません。,コードで使用すると、現在のセルがに設定され0ます。 開始位置の左側にセルはありません。たとえば<.、無効.<ですが、実行はで終了するため有効です.。テープは反対方向に無制限です。 不均衡な括弧([および])があるプログラムは無効です。 元のプログラムは、スコアを変更せずに100バイトに簡単に拡張できるため、100バイトより短くすることができます。 元のプログラムは有効なBFコードである必要はありません。 あなたは使用することができ、このプログラムのpython3(ideoneリンクを)あなたの答えのスコアを決定します。(長期実行プログラムの場合、maxstep変数を変更する必要がある場合があります。) 例 (簡単にするために、このプログラムは100バイトよりも短いです。) Solution: ++,+[-]+><.-,-. Score: 3 Explanation: Subprogram => Output +,+[-]+><.-,-. => 1 +,+[-]+><.-,-. => 1 +++[-]+><.-,-. => 1 ++,[-]+><.-,-. => 1 ++,+-]+><.-,-. => None ++,+[]+><.-,-. => None ++,+[-+><.-,-. => None …

6
23940を思い出すための記憶
主要なシステムがあるニーモニックそれらがより容易に記憶することができるように言葉に番号を変換するための装置。 単語の発音に基づいていますが、チャレンジのために物事を簡単にするために、単語のつづり方のみを考慮します。これは、いくつかの誤った変換があることを意味しますが、それは大丈夫です。 簡略化されたメジャーシステムを使用して数値を単語に変換するには: それぞれ0をsまたはに置き換えますz。(一部は可能性がsあり、一部は可能性がありますz。以下も同様です。) それぞれを交換1しtたりdまたはth。 それぞれ2をに置き換えますn。 それぞれ3をに置き換えますm。 それぞれ4をに置き換えますr。 それぞれ5をに置き換えますl。 それぞれを交換6しjたりshまたはch。 それぞれ7をkor cまたはgorで置き換えますq。 それぞれ8をfまたはに置き換えますv。 それぞれ9をpまたはに置き換えますb。 可能であれば、文字をaehiouwxy任意の場所に追加して、実際の英語の単語を作成します。 唯一の例外はh、sまたはの後に挿入できないことcです。 数値は、実際には数字0〜9の任意の文字列(小数、コンマ、または記号なし)にすることができます。 単語には小文字のa〜zのみを含めることができます。 例 番号32はとして変換する必要があります?m?n?。ここで?、文字から作成された有限の文字列aehiouwxy(必要に応じて、無料のモノイドからの文字列)を表します。これが本当の英語の単語の中に作ることができる多くの方法があります:mane、moon、yeoman、など 番号05は?s?l?またはとして変換できます?z?l?。いくつかの可能性があるeasily、hassleとhazel。単語shawlは許可されhませんs。として誤って読み取られ65ます。 チャレンジ 0から9の数字のストリングを取り込んで、簡略化されたメジャーシステムニーモニックを使用して変換できるすべての単語を見つけるプログラムまたは関数を作成します。 プログラムは、すべての「本当の」英語の単語を定義する単語リストテキストファイルにアクセスできます。このファイルの各行には1つの小文字のazワードがあり、オプションで末尾に改行があると想定できます。以下は、テストに使用できる実際の単語のリストです。この単語リストファイルはf(またはそれより長い)呼び出され、便利なディレクトリにあると想定できます。 35バイトのペナルティ(スコアに35を加算)の場合、単語リストは既に文字列のリストとして変数にロードされていると想定できます。これは主にファイルを読み取れない言語用ですが、提出することでそれを利用できます。 プログラムは、入力数値を変換できる単語リスト内のすべての単語を出力する必要があります。これらは、1行に1つずつ(オプションの末尾の改行を使用して)stdout(または同様の)に出力する必要があります。または、関数の作成を選択した場合は、文字列のリストとして返すことができます。単語リストは必ずしもアルファベット順ではなく、出力もアルファベットである必要はありません。 可能な単語がない場合、出力(またはリスト)は空になります。空の文字列が入力されると、出力も空になります。 stdin、コマンドライン、または関数の文字列引数として入力を受け取ります。単語リストまたはそのファイル名は、入力の一部ではなく、数字列のみである必要があります。 単語リスト内の単一の単語のみが一致し、単語のシーケンスは一致しません。この単語noonはおそらくの結果の1つです22が、単語シーケンスno oneはそうではありません。 テストケース これが単語リストであるとします: stnmrljkfp zthnmrlshqfb asatanamaralajakafapa aizxydwwwnhimouooraleshhhcavabe zdnmrlshcvb zdnmrlshchvb sthnmrlchgvb shthnmrlchgvb bob pop bop bopy boppy 入力0123456789はzdnmrlshchvband を除くすべての長い単語を与える必要がありshthnmrlchgvbます: stnmrljkfp zthnmrlshqfb asatanamaralajakafapa …
19 code-golf  string 

11
番号付きキューブに面を出力する
キューブの8つの頂点に0〜7の番号を自由に割り当てます。各頂点に正確に1つの番号を割り当てる必要があります。 たとえば、頂点は次のように割り当てられます。 3-----1 /| /| 4-----2 | | | | | | 5---|-0 |/ |/ 6-----7 0から5までの整数を取り込むプログラムを作成します。これらの6つの数値のそれぞれは、好きな方法でキューブの1つの面に正確に関連付けられます。これらの番号のいずれかが入力されると、関連付けられた面の4つの頂点番号が2×2の数字で標準出力に印刷されなければなりません。顔は立方体の外側から真っ直ぐに見えるようになっています。4つの顔の回転はすべて有効です。 たとえば、上の例の立方体の前面に0が関連付けられている場合、これはinputの有効な出力になります0。 42 67 顔は90度の回転で表示される可能性があるため、これらも有効です。 27 46 76 24 64 72 この出力(およびその回転)は、顔の間違った側から見られるため無効です。 24 76 同じ考えが他のすべての面に適用されます。たとえば、1が背面に関連付けられている場合、入力1は出力を生成する可能性があります13[newline]05(そして31[newline]50無効になります)。 したがって、実際の課題は、入力を4つの頂点番号に変換するのが簡単で短いように、頂点番号と回転を選択することです。 バイト単位の最短コードが優先されます。Tiebreakerは以前の投稿です。(便利なバイトカウンター。) ノート プログラムの代わりに関数を書くこともできます。0〜5の整数を取り、2×2桁のグリッド文字列を出力または返す必要があります。 stdin、コマンドライン、または関数argから入力を取得します。入力が有効であると想定できます。 出力には、オプションで末尾の改行が含まれる場合があります。 選択した頂点と面の番号を必ず教えてください。

30
ボックスを生成します!
あなたの仕事は、与えられた入力に関して任意の1つのASCII文字を使用してボックスを生成することです。 テストケース 1 1 --> ===== = = ===== 1 2 --> ========= = = = ========= 2 1 --> ===== = = ===== = = ===== 2 2 --> ========= = = = ========= = = = ========= 2 5 --> ===================== = = = = = = ===================== …

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