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

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

7
文字列が双子のシャッフルであるかどうかを確認する
説明 2枚のカードの山をシャッフルして1枚の山を作るのと同じように、2つの文字列を混ぜて新しい文字列を形成します。 例えば、文字列HELLOとをWORLD形成するようにシャッフルすることができHWEOLRLLOD、またはHEWORLLLDO恐らく単に、又はHELLOWORLD。 それはない文字の元の順序が保存されていない場合はシャッフル。たとえば、シャッフルされた後、DインWORLDが表示されることはありませんR。これはEHLLOWRDLO、たとえば、元の文字がすべて含まれていても、HELLOとのシャッフルではないことを意味しますWORLD。 ストリングは、2つの同一ストリングをシャッフルして形成できる場合、双子のシャッフルです。たとえばABACBDECDE、双子のシャッフルは、シャッフルABCDEやで形成できるためABCDEです。DBEACBCADE2つの同一の文字列をシャッフルして形成できないため、双子のシャッフルではありません。 プログラムの詳細 入力文字列を指定して、0双子のシャッフルでない場合は出力し、双子のシャッフルである場合は双子文字列の1つを出力します。 入力文字列は4文字から20文字までの長さで、すべて大文字のアルファベット文字で構成されていると想定できます。妥当な時間、たとえば10分未満で実行できるはずです。 これはコードゴルフなので、最短のソリューションが優先されます。 I / Oの例 > ABACBDECDE ABCDE > DBEACBCADE 0 > FFFFFF FFF > FFGGG 0 > ABBA 0 > AABB AB > AABAAB AAB (ゴルフではない)実装例があります。

16
交換なしのランダムサンプリング
範囲から引き出された一連の個別の乱数を出力する関数を作成します。セット内の要素の順序は重要ではありません(ソートすることもできます)が、関数が呼び出されるたびにセットの内容が異なる可能性がある必要があります。 この関数は、3つのパラメーターを任意の順序で受け取ります。 出力セットの数のカウント 下限(両端を含む) 上限(両端を含む) すべての数値が0(両端を含む)から2 31(両端を含まない)の範囲の整数であると想定します。出力は任意の方法で返すことができます(コンソールに書き込む、配列としてなど)。 審査 基準には3つのRが含まれます ランタイム -クワッドコアWindows 7マシンでテストされ、自由にまたは簡単に利用できるコンパイラーを使用します(必要に応じてリンクを提供します) 堅牢性 -関数はコーナーケースを処理しますか、それとも無限ループに陥るか、無効な結果を生成しますか-無効な入力の例外またはエラーは有効です ランダム性 -ランダムな分布では容易に予測できないランダムな結果を生成するはずです。組み込みの乱数ジェネレータを使用しても問題ありません。しかし、明白なバイアスや明白な予測可能なパターンがあってはなりません。ディルバートの経理部門が使用する乱数ジェネレーターよりも優れている必要がある 堅牢でランダムな場合は、実行時になります。頑健またはランダムでないと、その立場は大きく損なわれます。

1
Code 39バーコードスキャナー
1974 年に開発されたCode 39は、バーコードの最も一般的に使用される記号またはタイプの1つですが、小売販売で最も頻繁に見られるのはUPC / EANシステムです。Code 39バーコードは、大文字、数字、および一部の記号をエンコードでき、特別なフォントを使用してコンピューターソフトウェアから印刷するのは簡単です。これにより、商業および産業での幅広い利用が可能になりました(会社IDバッジ、資産追跡、ファクトリオートメーションなど)。 512x512ピクセルのグレースケール画像からあらゆる方向のCode 39バーコードを読み取るための最短のプログラムまたは関数を作成します。バーコードが水平または垂直に配置されていない可能性があります。 プログラムは、標準のイメージファイル形式を受け入れ、バーコードでエンコードされたデータを標準出力または戻り値(開始/停止文字を含まない)として生成する必要があります。 有効なCode 39バーコードを複数含む画像はなく、スペース文字(ASCII 32)をエンコードするバーコードはありません。 画像に有効なCode 39バーコードが表示されない場合、プログラムは単一の疑問符(?)を出力する必要があります。 有効なバーコードを使用した場合と使用しない場合の両方で、JavaScriptリファレンス実装と画像のテストスイートをPNG形式で準備しました。最新のWebブラウザーでは46のテストケースのうち3つだけが失敗するリファレンス実装は、上記の仕様に厳密に準拠するのではなく、1つの可能なデコードアルゴリズムを示すことを目的としています。 有効な送信は、これらのテストの少なくとも80%(37/46)に合格し、適度に高速なCPU(例:2.6 GHzクアッドコア)の各イメージで1分以内に完了します。私のリファレンス実装はテストの93%に合格し、各イメージを10秒以内に処理します(Google Chromeを実行しているデスクトップPCで)。 (この質問は2011年5月28日にメタで提案されました。)
10 code-golf 

2
プライムグリッドゲーム
私はこれを解決するのが楽しかったので、このゴルフチャレンジを提供します。 このゴルフの目的は、指定された命令を使用して構築できる最大の素数を見つけることです。 1桁の3x3グリッドを入力として受け入れる必要があります。(どのようにするかはあなた次第ですが、プログラムでそれを指定してください。) グリッドに沿って直角に(左、右、上または下に)移動できます。移動するにつれて、横切った数字を追​​加し続けます。 例えば 1 2 3 3 5 6 1 8 9 我々が開始すると言う1、我々は数1236589を形成することができますがすることができない 15を形成します。 すべての開始位置を評価する必要があります。 素数が見つからない場合は印刷し-1、そうでない場合は素数自体を印刷します。 最短のコードが優先されます。コードが10秒以内に実行されることを確認してください。 楽しんで! 編集:整数で1つの位置を1回だけ使用します。 これがテストケースです 入力: 1 2 3 4 5 6 7 8 9 出力: 69854123

7
ビンゴカードジェネレーター
ビンゴカードは、5つの正方形がそれぞれ5列に並んでいて、中央の正方形は「無料」と指定されています。番号は重複できません。 5つの列には、次の範囲の数値が入力されます。 B:1-15 I:16〜30 N:31〜45 G:46-60 O:61〜75 できるだけ少ない文字数で、ランダムなビンゴカードとして解釈できる文字列を出力します。例えば: 1,2,3,4,5,16,17,18,19,20,31,32,33,34,35,46,47,48,49,50,61,62,63,64,65 この例はランダム化されていないため、列1に1,2,3,4,5が入力されていることがわかります。また、この文字列を解釈するフロントエンドがそれをスキップするため、空き領域には特別な処理が行われていないことにも注意してください。 別の例は次のとおりです。 1,16,31,46,61,2,17,32,47,62 ... この例では、出力は列ごとではなく行ごとです。 3番目の例は次のようになります。 01020304051617181920313233343546474849506162636465 これは、固定長であることを除いて、最初の例と同じ出力です。
10 code-golf  game 

5
単純なIRCボットを作成します。
仕事 ユーザーへの挨拶のような単純なタスクを実行する単純なIRCボットを作成します。 細部 (このRFC文書が表示される場合があります。) これらを実行する完全なプログラムを作成します。 プログラムの入力nicknameとrealnameユーザーから。 すべてnicknameとrealnameどのフォームを[A-Za-z0-9]+許可する必要がありますが、他のフォームを許可するかどうかは重要ではありません。たとえば、ユーザーが1234qwertyas nicknameおよび5319009asをrealname必要とする場合、プログラムはそれらの名前を使用する必要がありますが、プログラムが^^☆Rick Astley☆^^(非アルファベットと10進数を含む)を(nicknameまたはrealname)として使用できるかどうかは重要ではありません。サーバーによって。 プログラムserverAddressはユーザーから入力します。 の形式はserverAddressですserverIP:serverPort。serverIPはサーバーのIPアドレスで、はサーバーserverPortのポート番号です。 プログラムはserverPortIRCサーバーのポートに接続しserverIP、とを送信することによりnickname、ニックネームを実名に設定する必要があります。realnameUSER realname 0 * :realnameNICK nickname プログラムはchannelNameを含まないシングルを入力#し、チャンネルに参加します#channelName。 次のようにプライベートメッセージHello, world!を#channelNameチャンネルに送信します。PRIVMSG #channelName :Hello, world! 次に、プログラムはこれらを実行します。 A.誰かが参加する場合は、に言っHello, @!て挨拶し#channelNameます。ここで、@は彼/彼女のニックネームです。 B.プログラムがキックされた場合は、再度参加してみてください。 C.人がキックまたは禁止されている場合は、と言いPOW HAHAます。 D.人が(PARTまたはQUIT)を去る場合は、と言いますGoodbye, @!。ここで、@はその人のニックネームです。 E.誰かがTuring testまたはを含むテキストを言ったらturing test、と言いI'm a human!ます。 F.誰かがを含むテキストを言った場合、サーバーに6*9送信QUIT :42して終了します。 G.誰かがall your base are belong to us(大文字小文字を区別しない)を含むテキストを言った場合QUIT :What you say!、サーバーに送信して終了します。 H.誰かがスペースの前にあるテキストとそれ以上の動作がテキストによって実行されないと言う場合、テキスト内のすべての(最初のスペースを除く)文字の文字コードの合計を言います。 エラーが発生した場合 …

5
n個の異なる素因数を持つn番目の数
最短関数、プログラム、または算出式作成A073329に、すなわち、a(n)あるn番目持つ数n個の別個の素因数を。入力は、返されるシーケンス内の要素の数です。0 < n。整数の精度には関心がありません。アルゴリズムが欲しいだけです。任意の大きな整数をサポートしていない言語については、サポートするふりをします。 上記のOEISへのリンクをたどることで、テストケースを見つけることができます。 更新: プログラム、関数、または式から整数シーケンスを返す必要があることを明確にしましょう。つまり、1からまでのすべてf(x)を計算a(n)する必要があります。与えられた8の、あなたの関数が返す必要があり、配列または他の適切なデータ構造として。nxx2, 10, 60, 420, 4290, 53130, 903210, 17687670
10 code-golf  math 

3
飛行機のナビゲーション
あなたは地元の飛行機配達会社の飛行ルートの計画を立てられています。飛行機をA地点からB地点にルーティングする必要があります。Aから出発してB地点に飛行機を向けることはできませんが、卓越した風がコースを吹き飛ばすためです。代わりに、風を考慮して、飛行機がBに直接飛行するように飛行機をどの方向に向けるかを判断する必要があります。 入力 7つの浮動小数点数、A_x、A_y、B_x、B_y、S、W_x、W_yをエンコードします。これらは、出発地と目的地の座標、あなたの航空機の対気速度、及びXに沿って風の強さとy軸(風が吹く方向であるに対して、ではないから)。 出力 平面がBに直線で到達するように向ける角度(度数の正のx軸から反時計回りに回転)を印刷する必要があります。GROUNDED風が強すぎて旅行が不可能になる場合は、印刷します。 あなたは最も近い程度に丸めることができます、そしてあなたが望むどんな方法でもそうします(上/下/最近/ ...)。 例 入力 0 0 10 0 100 0 -50 0 0 10 0 50 -55 0 3.3 9.1 -2.7 1.1 95.0 8.8 1.7 出力 30 GROUNDED 229 最短のコードが勝ちます。
10 code-golf  math 

12
シーケンスの平衡インデックス
シーケンスの平衡インデックスは、低いインデックスの要素の合計が高いインデックスの要素の合計と等しくなるようなインデックスです。たとえば、シーケンスAの場合: A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0 3は平衡指数です。 A[0]+A[1]+A[2]=A[4]+A[5]+A[6] 6は平衡指数でもあります。 A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0 (ゼロ要素の合計はゼロです)7はシーケンスAの有効なインデックスではないため、平衡インデックスではありません。 アイデアは、シーケンス(配列)を指定して、平衡インデックス(任意)または平衡インデックスが存在しない場合は-1を返すプログラムを作成することです。
10 code-golf 

13
桁の積
与えられた正の整数Nに対して、Mの数字の積がNに等しくなるような最小の自然Mを見つける完全なプログラムを作成します。Nは1,000,000,000未満です。Mが存在しない場合は、-1を出力します。どのような場合でも、コードは10秒を超えてはなりません。 Sample Inputs 1 3 15 10 123456789 32 432 1296 Sample Outputs 1 3 35 25 -1 48 689 2899
10 code-golf  math 

9
任意のベース変換[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、 Code Golf Stack Exchangeのトピックとなるようにします。 5年前休業。 1つの数値ベースシステムのブロックの配列を取り、それらを別の数値ベースシステムのブロックの配列に変換するルーチンを作成します。fromシステムとtoシステムはどちらも任意であり、パラメーターとして受け入れる必要があります。入力配列は任意の長さにすることができます(Cなど、配列の長さが配列に格納されていない言語を使用している場合は、長さパラメーターを関数に渡す必要があります)。 以下にその仕組みを示します。 fromArray = [1, 1] fromBase = 256 toBase = 16 result = convertBase(fromArray, fromBase, toBase); どちらが返される[0, 1, 0, 1]か、または返される可能性があります[1, 0, 1](先頭0のは、回答の値を変更しないため、オプションです)。 ここにいくつかのテストベクトルがあります: アイデンティティテストベクトル fromArray = [1, 2, 3, 4] fromBase = 16 toBase = 16 result = [1, 2, 3, …

4
多項式の長除算
2つの多項式を除算し、商と剰余を取得するアルゴリズムである多項式長除算を実装します。 (12x ^ 3-5x ^ 2 + 3x-1)/(x ^ 2-5)= 12x-5 R 63x-26 プログラムでは、定数項が末尾にある配列として多項式を表現します。たとえば、x ^ 5-3x ^ 4 + 2x ^ 2-x + 1は[1、-3、0、2、-1、1]になります。 作成する長除算関数は、商と剰余の2つの値を返します。数値の不正確さと算術エラーを処理する必要はありません。数学ライブラリを使用してジョブを実行しないでください。ただし、関数でシンボリック値を処理できるようにすることができます。最短のコードが勝ちます。 例: div([12, -5, 3, -1], [1, 0, -5]) == ([12, -5], [63, -26])

7
テキストのサークル
コンソールの文字を使用して、特定の半径の円を作成する方法を見つけます。フォント名とサイズを指定してください。また、出力の例を少なくとも1つ提供してください。 例えば: 入力: 3 出力: ****** ** ** ** ** * * ** ** ** ** ****** ...まあ、半径3の「手描き」「円」よりも見栄えが良いもの。 ボーナス質問:楕円。:)

20
コイントスの半分の頭が出る確率を計算します。
標準入力から小さな正の偶数の整数を指定して、その多くのコインを反転させると、半分の頭数になる確率を計算するプログラムを記述します。 たとえば、2つのコインが与えられた場合、可能な結果は次のとおりです。 HH HT TH TT ここで、HとTは頭と尾です。コインの数の半分の頭数の2つの結果(HTおよびTH)があります。合計4つの結果があるため、確率は2/4 = 0.5です。 これは見た目より簡単です。 テストケース: 2 -> 0.5 4 -> 0.375 6 -> 0.3125 8 -> 0.2734375

13
BCDバイナリクロックを描画する
ASCIIでBCD バイナリクロックを作成します。暗黙のとおり、6列のドットで時間を表示します。 (出典:ウィキメディア・コモンズ) 各列はバイナリコード化された数字で、左から右に時間、分、秒を読み取ります。時間は24時間形式で表示されます。 表示する時間は、コマンドラインまたはstdin(どちらか適切な方)から読み取られます。空の場合は、代わりに現在の時刻を使用する必要があります。 出力サイズはここで少し制限されており、2行のテキストしか収めることができません。したがって、ドットを2行だけに入れる必要があります。文字.、:そして'ここに便利になります。 入力 ISO-8601形式で表示する時間HH:MM:SS。つまり、小数秒なし。必須の24時間形式。入力は空にすることができます。その場合、現在の時刻が使用されます。 出力 の2本の線は、上の画像のようにBCDバイナリクロックを表しています。各行は正確に6文字で、使用できる文字はスペース、ピリオド、コロン、アポストロフィのみです。 勝者 バイト数による最短コードが優先されます。引き分けに、ソリューションが最初に勝利しました。 入力例1 (空の) 出力例1 . ''. :: 入力例2 17:59:20 出力例2 ..' .:..' 入力例3 01:08:01 出力例3 ' . .

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