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

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

24
これをすばやく並べ替えます!
まあ... 並べ替えがタグ付けされた59(現在60)の質問がありますが、簡単なクイックソートはありません。 修正する必要があります。 クイックソートに不慣れな方のために、Wikipedia- 配列から、ピボットと呼ばれる要素を選択します。 ピボットより小さい値を持つすべての要素がピボットの前に来るように配列を並べ替え、ピボットより大きい値を持つすべての要素がその後に来るようにします(等しい値はどちらの方向にも進むことができます)。この分割後、ピボットは最終位置になります。これは、パーティション操作と呼ばれます。 上記の手順を、値の小さい要素のサブ配列に、値の大きい要素のサブ配列に個別に再帰的に適用します。 ルール ルールは簡単です: 選択したプログラミング言語で数値クイックソートを実装します。 ピボットは、ランダムに選択するか、中央値3(1番目、最後、および中間要素)で選択する必要があります。 プログラムは、完全なプログラムまたは機能になります。 STDIN、コマンドライン引数、または関数パラメーターを使用して入力を取得できます。文字列入力を使用する場合、入力はスペースで区切られます。 入力には、10進数と負の値が含まれる場合があります。ただし、重複はありません。 STDOUTに出力するか、関数から戻ることができます。 組み込みのソート(またはソート関連)機能や標準の抜け穴はありません。 リストの長さは任意です。 ボーナス1:長さ<= 5のリストまたはサブリストでは、挿入ソートを使用して少し速度を上げます。報酬:-15%。 ボーナス#2:言語が並行性をサポートしている場合、リストを並列に並べ替えます。サブリストで挿入ソートを使用している場合、最終的な挿入ソートは並列である必要はありません。組み込みのスレッドプール/スレッドスケジューリングが許可されます。報酬:-15%。 注:3人の中央値は一部の人々を混乱させていたので、ここに説明があります(再度)ウィキペディア: ピボットのパーティションの最初、中央、最後の要素の中央値を選択する 得点 これはcode-golfです。基本スコアはバイト単位です。ボーナスを1つ獲得した場合は、その数を15%引きます。両方入手した場合は、30%オフにしてください。それは本当に売り込みのように聞こえます。 これは、全体の最短回答を見つけることではなく、各言語で最短の回答を見つけることです。 そして今、リーダーボードスニペットの恥知らずなコピー。 リーダーボード この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、b)全体的なリーダーボードとして、回答からカタログを生成します。 回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。 ## Language Name, N bytes Nは提出のサイズです。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば: ## Ruby, <s>104</s> <s>101</s> 96 bytes ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。 ## Perl, 43 + 2 (-p flag) = …

3
Squarefinder –正四角形の配置
平面に描かれた長方形の束を想像してください。各長方形の頂点は整数座標にあり、辺は軸に平行です。 長方形は、平面をいくつかのばらばらの領域に分割します。これらの領域は、下の赤と青の色です。 あなたの目標は、そのような完全な正方形の領域の数を見つけることです。上記の例では、次の3つがあります。 中央の大きな正方形は、単一の領域ではないため数えられず、代わりにいくつかの小さなばらばらの領域で構成されていることに注意してください。 入力 このチャレンジのために関数または完全なプログラムを書くことができます。 入力は、平面内の長方形を4n定義する非負の整数になりますn。各長方形は、2つの対向する頂点で表されます。たとえば4 9 7 8、対向する頂点(4, 9)とで長方形を表し(7, 8)ます。この長方形は7 8 4 9またはとしても表されることに注意してください4 8 7 9。 正確な入力形式は、(例えば、スペースで区切られた文字列、カンマ区切りの文字列、整数の単一のアレイ、座標タプルのリストなど)柔軟ですが、してください合理的であるとあなたのポストにあなたのコードを実行する方法の例を与えます。入力を並べ替えることはできません。 簡単にするために、2つのエッジがオーバーラップしないことを想定できます。これには、頂点でのオーバーラップが含まれます。特に、これは、2つの長方形が端から端または角から角に触れず、長方形の面積がゼロでないことを意味します。 出力 プログラムは、単一の整数(正方形の領域の数)を出力または返す必要があります。 得点 これはコードゴルフであるため、最も少ないバイト数のコードが優先されます。 テストケース 入力: 0 0 5 5 6 8 10 4 14 16 11 13 19 1 18 2 出力: 4 これは、単純に4つの独立した正方形です。 入力: 2 1 3 11 …

7
安心できるたとえ
ここのかなりの数の人々は、おそらく熱心なXKCDリーダーです。だから、私はあなたに、ミーガンが簡単にできることをするように挑戦するだろうと考えています。コンピューターが決してできないことについて、何千もの安心できるたとえを生成するスクリプトを作成します。 あなたのスクリプト 任意の言語で書くことができます コードゴルフが必要 stdin吐き出されるたとえ話の数を入力する必要があります(これに相当する言語でMAX_INT)。 ランダムに生成された多くのたとえを出力します。 たとえは次のとおりです 〜で始まる 'Computers will never ' 次に、プログラムを最適化するために自由に選択できる16のユニークな英語動詞の1つですが、とを含める必要があります。code-golfunderstand 次に、プログラムを最適化するために自由に選択できる16個のユニークな英語の名詞の1つですが、とを含める必要があります。a saladan octopus 次に、プログラムを最適化するために自由に選択できる16のユニークな英語句の1つですが、とを含める必要があります。for funafter lunch 改行(\nまたは同等の)文字で終わる したがって、たとえば、入力がの2場合、有効な出力は次のようになります Computers will never code-golf a salad for lunch Computers will never hug a tree in vain プログラムのサイズは、文字ではなくバイト単位でカウントされます(したがって、ユニコードの意味がありません)。標準の抜け穴は許可されていません。 これが私の最初の挑戦なので、明らかな変更を加える必要がある場合はコメントしてください。 編集:辞書の「圧縮」を促進するために、バイト数から辞書のサイズを差し引くことを考えています。これがリモートで実行可能かどうかは、将来の回答から確認します。もしそうなら、あなたはボーナスを頼りにすることができます。

25
次の1スパース2進数を見つける
正の整数Nは、バイナリ表現の2つの連続する1の間に少なくともK 0 がある場合、K疎です。 したがって、1010101の数値は1のスパースですが、101101はそうではありません。 あなたの仕事は、与えられた入力番号の次の1スパース番号を見つけることです。たとえば、入力が12(0b1100)の場合、出力は16(0b10000)であり、入力が18(0b10010)の場合、出力は20(0b10100)です。 最小のプログラムまたは関数(バイト単位)が勝ちます!標準の抜け穴は許可されていません。

18
最短のソート済みHello World
入力を受け取らHello, World!ず、stdoutまたは使用言語の最も近い代替に出力するプログラムを作成します。キャッチは、プログラムの各行に印刷可能なASCII文字のみを含める必要があり、辞書順、つまりソートされている必要があることです。 95個すべての印刷可能なASCII文字を順番に示します。 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ したがって、たとえば、およびは順序が!!A0~正しくないため、行は無効になります。行は有効です。A0!!0A~ プログラムの各行の長さは任意であり、行の数は任意です。空行はソート済みと見なされます。プログラム内の各改行は同じでなければなりません(ミキシング\nと\r\n)。タブやその他の印刷できないASCII文字は禁止されています。 人気のある需要により、勝ちの条件は入れ替わりました: 最少のラインの提出が勝ちます。Tiebreakerは最短プログラムに進みます(改行は単一文字としてカウントされます)。 Hello, World!オプションの末尾の改行のみを出力する必要があります。ことを注意HQ9 +は、それが出力するので無効ですhello, world。「Hello、World!」という文字が1つあるHQ9 +に類似した言語を禁止する場合があります。自明によるコマンド。 ヒント: 非常に簡潔ではありませんが、これは単項および言語で間違いなく可能です。

23
2つの文字列の大文字の入れ替え
your shift key is broken. wheNever you type two lines, the cApitaL LetteRs in them get swappeD. you must write a program to fiX THIS! 説明 入力は2つの文字列でs1あり、s2、長さが等しいです。それぞれには、印刷可能なASCIIのみが含まれ、長さは少なくとも1文字です。次の2つの文字列、2つの文字列の配列、または持つ単一の文字列として入力これらのかもしれないs1とs2、タブや改行のいずれかで区切られています。 出力は次のとおりです。 各文字のc中にs1: 文字が文字でない場合は、そのまま出力します。 それ以外の場合、c文字が: で一致する文字(同じインデックスの文字)を見つけますs2。 大文字の場合、出力 c大文字になります。 小文字の場合、出力 cします。 それ以外の場合、出力はc変更されません。 次に、with s1とs2switch を除いて同じことを行います。 本質的に、s1一致する文字s2が大文字であるすべての文字は大文字にs1するs2必要があり、同じインデックスに小文字が含まれるすべての文字は小文字になります(逆も同様です)。 テストケース 入力: ABCDEfghijKlMnOpqrstuvwxyz aaaaaaaaaaaaaaaa---------- 出力: abcdefghijklmnopqrstuvwxyz AAAAAaaaaaAaAaAa---------- 入力: PRogrammiNG …
27 code-golf  string 

9
英語を数値に変換する[終了]
課題の簡潔でわかりやすい説明: このサイトの他のいくつかの質問のアイデアに基づいて、あなたの挑戦は、英語で書かれた数字を入力として受け取り、それを整数形式に変換するプログラムで最も創造的なコードを書くことです。 本当に乾燥した、長くて徹底した仕様: あなたのプログラムは、入力として整数を受け取ります小文字の英語の間zeroおよびnine hundred ninety-nine thousand nine hundred ninety-nine包括的。 それは間の番号の出力のみ整数形成しなければならない0と999999何もない(スペースなし)。 入力には、またはのように、またはが含まれません。,andone thousand, two hundredfive hundred and thirty-two 10の位と1の位が両方とも0でなく、10の位がより大きい場合1、-スペースではなくハイフンマイナス文字で区切られます。数千と数千の場所のための同上。たとえば、six hundred fifty-four thousand three hundred twenty-one。 プログラムは、他の入力に対して未定義の動作をする場合があります。 適切に動作するプログラムの例: zero->-> 0 fifteen-> 15 ninety-> 90 seven hundred four-> 704 sixty-nine thousand four hundred eleven-> 69411 five hundred twenty thousand two->520002

6
スワイプタイプコンバーター
ノートパソコンでのタイピングの次の革命は、SwiftKeyによって2014年4月1日にリリースされました。しかし、私は最初にスワイプするナノクローンを書く人になりたいのですが、スワイプテキストからリアルテキストライブラリへの良いスワイプを見つけることができず、それらを待つことができないので、私はここで尋ねています。 仕事 スワイプテキストを取り込んで、同等の実テキストを出力するプログラムを作成します。例: Input: hgrerhjklo Output: hello ユーザーが行う場合: 他の例: Input: wertyuioiuytrtjklkjhgfd Output: world Input: poiuytrtyuioiugrewsasdfgbhnmkijnbg Output: programming Input: poiuygfdzxcvhjklkjhgres Output: puzzles Input: cvhjioiugfde Output: code Input: ghiolkjhgf Output: golf ルール プログラムは、stdinまたはargvでスワイプされた「単語」を1つ受け取ります。 スワイプ入力の最初と最後の文字は、実際の単語の最初と最後の文字と同じです ユーザーが合理的に直線を作成すると想定できますが、サンプルデータを使用してこれを確認できます(サンプルデータを作成し、最終テストデータを作成します) 入力があいまいな場合は、どちらかの出力を選択できますが、テストデータからすべてのあいまいさを排除しようとします この単語はこの単語リストに含まれます(ただし、スワイプされます)。単語リストは現在のディレクトリにあり、読み取ることができます(改行区切り、名前付きwordlist、拡張子なし)。 スワイプには小文字のアルファベットのみが含まれます ユーザーがキーで一時停止すると、スワイプに重複した文字が含まれる場合があります プログラムは標準出力に出力する必要があります(大文字と小文字は区別されません) プログラム0は戻りコードとして戻らなければなりません 実行コマンド、コンパイルコマンド(必要な場合)、名前、使用する入力パスを指定する必要があります 標準的な抜け穴が適用されます(ただし、助けにはならない場合があります) 非組み込みライブラリは許可されていません 確定的、非ゴルフ/難読化ソリューションが望ましい ファイルの書き込み、ネットワーキングなどはありません コードは1秒以内に実行する必要があります(コードは単語ごとに1回実行されます) スコアリングの実行は、4つの仮想コード(2つの実際のコード)を備えたIntel i7 Haswellプロセッサーで実行されるため、必要な場合はスレッドを使用できます。 5000バイトの最大コード長 使用する言語には、Linux(Arch …

11
n%12を計算
符号なし32ビット整数のnモジュロ12を計算します。 ルール: 0〜23のすべてnで機能する必要があります。その他の番号はオプションです。 演算子のみのいずれかを使用しなければならない+-*、~&^|または<<、>>一般に32ビットするuintで定義した通りです。 任意の数の定数uintを使用できます。 配列を含むポインター、またはif三項演算子や「より大きい」演算子などのifステートメントにコンパイルされるものを含むステートメントを使用することはできません。 得点: 演算子+ -とビット演算子~ & ^ | << >>(NOT、AND、XOR、OR、ビットシフトが)のスコアを与える1、*のスコアを与えます2。 最も低い合計スコアが勝ちます。

8
Piはまだ間違っています[クローズ]
パイが間違っている 円周率を計算する一般的な方法は、「ダーツ」を1x1ボックスに投げて、投げられた合計と比較して単位円内のどの土地を見るかです。 loop x = rand() y = rand() if(sqrt(x*x + y*y) <= 1) n++ t++ pi = 4.0*(n/t) piを正しく計算するように見えるプログラムを作成します(piを計算するこの方法または他の一般的な方法を使用)が、代わりにtau(tau = 2 * pi = 6.283185307179586 ...)を計算します。コードは、少なくとも最初の小数点以下6桁を生成する必要があります:6.283185 優勝者は6月6日(今日から1週間)になります。

1
MP3ファイルでビートを見つける
この課題では、あなたの仕事は、mp3形式で簡単な録音を行い、ファイル内のビートの時間オフセットを見つけることです。2つの録音例がここにあります。 https://dl.dropboxusercontent.com/u/24197429/beats.mp3 https://dl.dropboxusercontent.com/u/24197429/beats2.mp3 これは、前の2つよりもはるかにノイズの多い3番目の録音です。 https://dl.dropboxusercontent.com/u/24197429/noisy-beats.mp3 たとえば、最初の録音の長さは65秒であり、正確に76ビートを含みます(誤算しない限り)。あなたの仕事は、そのようなmp3ファイルを入力として受け取り、ファイル内のビートのミリ秒単位の時間オフセットのシーケンスを出力するプログラムを考案することです。ビートは、もちろん、ギタリストが1つまたは複数の弦を弾くときに発生します。 あなたのソリューションは: 同様の「複雑さ」のmp3ファイルで作業します。ノイズの多い録音や、すぐに演奏されるメロディに失敗する可能性があります-私は気にしません。 かなり正確に。許容誤差は+/- 50ミリ秒です。したがって、ビートが1500ミリ秒で発生し、ソリューションが1400を報告する場合、それは受け入れられません。 フリーソフトウェアのみを使用してください。ffmpegを呼び出すことは、選択した言語に対応する無料のサードパーティソフトウェアを使用する場合と同様に許可されます。 勝利の基準は、提供されたファイルのノイズにもかかわらず、ビートを正常に検出する能力です。同点の場合、最短のソリューションが優先されます(サードパーティのコードの長さはカウントに追加されません)。
27 code-golf  music 

8
こんにちは世界!繰り返しなし
この質問が尋ねられる前に存在したプログラミング言語では、文字のHello world!後に改行を出力するプログラム(関数ではない)を書きます。あなたのプログラム: 文字を複数回使用しないでください(空白を含む) ASCII文字のみを使用する必要があります 組み込みライブラリを使用しないでください 入力(ユーザー、ファイル、ファイル名、システム変数、インターネットなど)を取得しないでください 何も出力しないでください 勝者は、14日後に最も票を集めた人で、6つのルールを順守します。 6番目のルールは、H9 +、HQ9 +、HQ9 + B、HQ9 ++、HQ9 + 2D、Hello、Hello +、Hello ++、Hexish、CHIQRSX9 +、またはFugueを使用できないことです。また、このチャレンジよりも新しい実装を必要とするすべての回答は、非競合としてマークする必要があります。 免責事項:この質問は、Hello world!限られた繰り返しで、答えを考え出す過程でコンピューターや脳に損傷を与えることはありませんでした。


30
Cヘッダー名をC ++ヘッダー名に変換する
C標準ライブラリでは、ヘッダー名は.hサフィックスで終わります。 stdio.h C ++では、これらのヘッダー名は代替形式で利用できますが、代わりにcプレフィックスが付いています。 cstdio 最初の形式を2番目の形式に変換する関数を作成します。変換はインプレースで行うことも、元の文字列をそのままにして新しい文字列を返すこともできます。選択した言語で自然に感じるものは何でも。 コードはエラーなしでコンパイル/解釈する必要があります。コンパイラの警告は受け入れられます。 これがベースラインCソリューションです。それは持っている70文字程度の警告を生成しますstrlen: void f(char*h){int i=strlen(h);h[--i]=0;while(--i)h[i]=h[i-1];*h='c';} 最短の解決策(文字数で測定)が優先されます。 更新:選択した言語が機能をサポートしていない場合、プログラム全体も受け入れられます。 更新: FUZxxlが示唆するように、C標準ライブラリのヘッダーファイルの完全なリストを以下に示します。 assert.h ctype.h errno.h float.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stddef.h stdio.h stdlib.h string.h time.h 具体的には、複数のドットを含むヘッダー名はありません。

17
ルール110のシミュレーション
ルール110は、いくつかの興味深い特性を持つセルオートマトンです。 目標は、できるだけ少ない文字数でルール110をシミュレートすることです。 知らない人のために、ルール110はグリッド内の行ごとにシミュレートされます。グリッドの行の各正方形は、上、左上、および右上の正方形を見て、どのセルになるかを決定します。 current pattern 111 110 101 100 011 010 001 000 new cell 0 1 1 0 1 1 1 0 入力:合理的な形式(カンマ区切りの文字列、リスト、関数の引数)で、最上行のn番目の入力正方形を表す0から39までの数字。1インデックス付き言語に対応するために、数字も1インデックス付きであるため、範囲は1〜40です。 入力例: 38,39 出力:最初の行を含む実行中のオートマトンを表す40 x 40のグリッド。0を空白、1を表示可能な印刷文字として残す必要があります。実際のグリッドを合理的に区別できる限り、末尾のスペースを使用できます。グリッドの下部には改行が含まれている場合がありますが、グリッド線の間に空白行があってはなりません。 出力例: XX XXX XX X XXXXX XX X XXX XX XX X XXX XXXXXXX X XX XXX XXX XX X XX …

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