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

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

30
横方向プログラムによる波動粒子双対性
空でない単一行の文字列を取り込むプログラムまたは関数を作成します。文字列は、ゼロまたはそれ以上のスペースが一の周期(続くであろう粒子のような).又は .、あるいは文字列が前方に交互に一つ以上のシーケンスとバックスラッシュ(あろう波いずれかで開始することができる)、そのような\または/\/または\/\/\/\/\/\/。 どちらの場合でも、粒子/波を1単位だけ右に伝播します。 具体的には、パーティクルの場合、の前にスペースを挿入し、.1つ右に移動して、結果の文字列を出力します。例えば: .→ . .→ . .→ . .→ . .→ . .→ . .→ . .→ . ウェーブの場合、ウェーブが交互になり、長さが1ずつ増加するように、いずれか/または\適切に追加して、結果のストリングを出力します。例えば: /→ /\ \→ \/ /\→ /\/ \/→ \/\ /\/→ /\/\ \/\→ \/\/ /\/\→ /\/\/ \/\/→\/\/\ どちらの場合でも、出力には末尾のスペースは含まれませんが、オプションの末尾の改行が許可されます。 バイト単位の最短コードが優先されます。

29
嫌い/愛の難問
チャレンジの説明 この課題では、我々は唯一の考慮loveやhate感情など。秩序の感情表現を発したい場合はN、次の2つを交互に使用します(で始まりますhate)。 order | expression 1 I hate it. 2 I hate that I love it. 3 I hate that I love that I hate it. 4 I hate that I love that I hate that I love it. パターンは、すべての正の整数に対して続きますN。与えられたN、秩序の対応感表現を出力してくださいN。 ノート .式の最後の完全停止()は必須です。 末尾および先頭の空白(改行を含む)は許可されますが、 非正または非整数の出力Nは未定義であり、 これはコードとゴルフの課題なので、コードをできるだけ短くしてください。
30 code-golf  string 

16
qwertyキーボードの単一行を使用した最長単語
qwertyキーボードの3行はqwertyuiop、asdfghjklとzxcvbnmです。あなたの仕事は、与えられた単語のリストから、キーボードの1行だけを使用して入力できる最も長い単語を見つけることです。 サンプル入力1 artist home gas writer geology marine twerp 出力 writer (指定された単語の中でgas、writerとのみtwerpが1行で記述できwriter、最長です) 単語は実際の単語ではない場合があります(したがって、3行目が無効であると想定しないでください)。ただし、常に正確に1つの答えがあると仮定できます(これ以上でもそれ以下でもありません)。 サンプル入力2 wrhuji bxnzmmx gllwssjjd vnccbb lrkjhgfdsa tttttt 出力 bxnzmmx 追加の句読点と空白を入力で提供できます(言語要件に従って)。ただし、追加の出力は指定しないでください。入力と出力は小文字です。最短のコードが優先されます。

3
最終的に水はタンクに到達しますか?
ASCIIアートの世界では、水、ハッシュウォール、および文字のメカニズムがあります。 あなたはハッシュウォール(#標識)で構成された部屋にいます: ####### # # # # # # # ### # # # ####### S水源(Sサイン)とE水タンク(Eサイン)を設置します。これらは、あらゆる方向から水を受け取ることができますが、SソースとEタンクはそれぞれ1つしかありません。 ####### # S # # # # # # ### # # E # ####### そのため、ソースを配置する場所を賢く選択する必要があります。そこで、コードゴルフのスキルを引き出します。 タスク ソースとタンクがある部屋を表す文字列で構成される入力を取得します。 ####### # S # # # # # # ### # # E # ####### 最終的に水がタンクに到達するかどうかを確認する必要があります。水は可能であれば流下し、可能であれば左右に流下します。上がっていないので水はたまりません。 …

24
文字列の回文化
前書き 分からない人にとっては、回文とは、文字列が逆方向の文字列と等しい場合です(インターパンクション、スペースなどを除く)。回文の例は次のとおりです。 abcdcba これを逆にすると、次のようになります。 abcdcba どちらも同じです。したがって、これを回文と呼びます。物事を回文化するために、文字列の例を見てみましょう。 adbcb これは回文ではありません。これを回文化するには、逆の文字列を最初の文字列の右側にある最初の文字列にマージし、両方のバージョンをそのままにする必要があります。短いほど良い。 最初に試すことができるのは次のとおりです。 adbcb bcbda ^^ ^^ すべての文字が一致するわけではないため、これは逆の文字列の正しい位置ではありません。一歩右に進みます。 adbcb bcbda ^^^^ これもすべての文字に一致するわけではありません。次のステップに進みます。 adbcb bcbda 今回は、すべての文字が一致します。私たちはすることができますマージ、両方の文字列をそのままを残します。最終結果は次のとおりです。 adbcbda これは回文化された文字列です。 タスク 小文字(またはより適切な場合は大文字)のみを含む文字列(少なくとも1文字)を指定すると、回文化された文字列を出力します。 テストケース Input Output abcb abcba hello hellolleh bonobo bonobonob radar radar hex hexeh これはcode-golfであるため、バイト数が最小の提出が勝ちです!

12
それは素晴らしかった…ほとんど
数学のクラスで素数について学んだことがあるなら、おそらく、ある時点で、数が素数かどうかを判断しなければならなかったでしょう。まだ39をプライムと間違えているなど、まだ学習している最中に混乱している可能性があります。39は半素数、つまり、2つの素数の積であるため、心配する必要はありません。 同様に、我々は定義することができ、Kの生成物であるとしてプライム-almost K素数。たとえば、40は4番目のほぼ4つの素数です。40 = 5 * 2 * 2 * 2、4つの因子の積。 あなたの仕事は、2つの整数nとkを入力として受け入れ、n番目のk-ほぼ素数を返す/返すプログラム/関数を書くことです。これはコードゴルフであるため、バイト単位の最短プログラムが優先されます。 テストケース n, k => output n, 1 => the nth prime number 1, 1 => 2 3, 1 => 5 1, 2 => 4 3, 2 => 9 5, 3 => 27 雑多 そのような閉じた形式が存在する場合、単純な閉じた形式以外の方法で自分で素数を生成する必要があります。

22
タイトルの大文字化の経験則
このサイトによると、米国政府印刷局スタイルマニュアルが推奨する一般的なルールは a、an、the、at、by、for、in、of、on、to、up、and、as、but、or、およびnorを除く、出版物および文書のタイトルのすべての単語を大文字にします。 スタイルマニュアルでそのような推奨事項を見つけることができないため、これは真実ではないかもしれませんが、とにかくこのルールを使用しましょう。 チャレンジ スペースで区切られた小文字の単語で構成される入力文字列が与えられた場合、次の規則に従って文字列の大文字化を出力します 最初と最後の単語は大文字です。 a、an、the、at、by、for、in、of、on、to、up、and、as、but、or、およびnorを除くすべての他の単語は大文字です。 入力文字列は、少なくとも一つの単語が含まれ、各単語から少なくとも一つの文字と文字のみが含まれているaとz。 これはコードゴルフのチャレンジなので、選択した言語でできるだけ少ないバイトを使用するようにしてください。タスクを完了するための完全なプログラムまたは関数を作成できます。 テストケース "the rule of thumb for title capitalization" -> "The Rule of Thumb for Title Capitalization" "programming puzzles and code golf" -> "Programming Puzzles and Code Golf" "the many uses of the letter a" -> "The Many Uses of the Letter …
30 code-golf  string 

20
見つけて回転
タスク これは簡単な挑戦です。入力は、数字0123456789とハッシュのみを含む単一の空ではない文字列#です。これには、非負の整数をエンコードし、文字列の終わりを囲む可能性のある1桁の数字と、少なくとも1桁が含まれます#。整数には先行ゼロが含まれる場合があります。たとえば、##44##、013####および23###1有効な入力、しばらくしている###、0099と#4#4はありません。 あなたの仕事はn、文字列から整数を抽出し、文字列をn右に回転させて出力することです。 例 入力#1##は右に1ステップ回転する必要があるため、正しい出力は##1#です。 #026###先頭の0は無視されるため、入力は26ステップ右に回転する必要があります。正しい出力は26####0です。 入力1####2には最後に整数21がラップされているため、21ステップ右に回転する必要があります。正しい出力は##21##です。 ルールとスコアリング 完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 あなたは、その数があなたの言語のn標準的なintタイプに適合すると仮定することができます。逆に、その標準int型が任意精度の整数を実装する場合、(理論上)任意の大きなをサポートする必要がありますn。 テストケース #1## -> ##1# ##4## -> #4### 1####1 -> ####11 1####2 -> ##21## #026### -> 26####0 #000### -> #000### ###82399 -> ##82399# 51379#97 -> #9751379 #98##### -> ###98### #######4## -> #4######## 60752#1183 -> 8360752#11 ####99366800## -> 366800######99 ########9##### -> ###9########## …

30
平均ビット:平均的な課題
整数N> = 1の場合、0からN-1の整数の平均ビット数を出力します 仕様 出力は、0からN-1までの各整数のバイナリ表現のビット数の合計をNで割って計算できます。 整数のバイナリ表現には、このコンテキストでは先行ゼロがありません。ただし、ゼロはバイナリで0として表されます。 出力は、少なくとも7つの有効数字まで正確でなければなりません。 例 N = 6 0: 0 : 1 bit 1: 1 : 1 bit 2: 10 : 2 bits 3: 11 : 2 bits 4: 100 : 3 bits 5: 101 : 3 bits 平均ビット数=(1 + 1 + 2 + 2 + 3 …

11
この素敵なアスキーアートのフレーム
前書き 素敵な写真には素敵なフレームが必要だということは誰もが認めていると思います。しかし、このサイトでのASCII-Artに関するほとんどの課題は、生の画像が必要なだけで、保存については気にしません。 ASCIIアートをいくつか取り、それを素敵なフレームで囲む​​プログラムがあったらいいと思いませんか? チャレンジ 入力としてASCIIアートを受け取り、素敵なフレームに囲まれて出力するプログラムを作成します。 例: ***** *** * *** ***** になる ╔=======╗ ║*****║ ║***║ ║*║ ║***║ ║*****║ ╚=======╝ フレームには、例とまったく同じ文字を使用する必要があります。 ═ ║ ╔ ╗ ╚ ╝ フレームの上部と下部は、入力の最初の行の前と最後の行の後に挿入されます。 フレームの左部分と権利部分には、入力の最も広い行に正確に1スペースのパディングが必要です。 出力に先頭または末尾の空白がない場合があります。末尾の改行のみが許可されます。 入力に不要な先頭の空白がないと仮定できます。 入力のどの行にも末尾の空白がないと仮定できます。 空の入力を処理する必要はありません。 入力には、印刷可能なASCII文字と改行のみが含まれます。 ルール 機能または完全なプログラムが許可されます。 入出力のデフォルト規則。 標準の抜け穴が適用されます。 これはcode-golfなので、バイト数が最も少なくなります。Tiebreakerは以前の提出です。 ハッピーコーディング! このサイトでのチャレンジで作成されたすばらしいASCII-Artを使用して、プログラムへの入力として、素敵なフレームで表示することを強くお勧めします!

17
範囲を修復する
いくつかがに置き換えられた正の整数のリストの入力が与えられた場合、置き換えられて0変更された欠損数を含むリストを出力します0。 入力リストの特性: リストの長さは常に少なくとも2です。 入力リストをとして定義しa、「元のリスト」(つまり、番号が0s に置き換えられる前のリスト)を定義しますb。いずれの場合もn、またはのa[n]いずれb[n]か0です。 いずれの場合もn、またはのb[n]いずれb[n-1] + 1かb[n-1] - 1です。つまり、の数値bは常に1、以前のインデックスから各インデックスごとに変化します。もちろん、最初の要素はこの規則を免除されています。 ゼロのすべての実行a(つまり、連続した要素がに置き換えられます 0)xに対して、実行の開始のインデックスとy 終了を表すa[x-1]to a[y+1]は、常に増加のみまたは減少のみのいずれかになります。したがって、ゼロを埋める方法は1つしかありません。 これは、配列の最初の要素も最後の要素もゼロにできないことも意味します。 簡単に言えば、ゼロの連続を埋めるには、前の数字から次の数字までの範囲に置き換えるだけです。たとえば、次の入力 1 2 0 0 0 6 7 出力する必要があります 1 2 3 4 5 6 7 これはcode-golfであるため、バイト単位の最短コードが優先されます。 テストケース: In Out ----------------------------------------------------- 1 0 0 0 5 6 0 4 0 0 1 | 1 2 …

2
画像を4 KiBプレビューに圧縮する
この課題では、画像プレビュー圧縮アルゴリズムを作成します。目標は、任意の画像ファイルを4 KiBプレビュー画像に縮小することです。これを使用して、非常に少ない帯域幅で画像をすばやく識別できます。 圧縮プログラムと解凍プログラムの2つのプログラム(または1つの結合プログラム)を作成する必要があります。どちらも入力としてファイルまたは標準入力を取り、ファイルまたは標準出力に出力する必要があります。コンプレッサーは、主流の可逆画像形式(PNG、BMP、PPMなど)の1つの画像を受け入れ、最大4096バイトのファイルを出力する必要があります。解凍プログラムは、圧縮プログラムによって生成されたファイルをすべて受け入れ、入力にできるだけ近い画像を出力する必要があります。エンコーダー/デコーダーにはソースコードサイズの制限がないため、アルゴリズムを工夫することができます。 制限事項: 「不正行為」はありません。プログラムは隠し入力を使用したり、インターネットにデータを保存したりすることはできません。また、スコアリング画像のセットのみに関連する機能/データを含めることも禁じられています。 ライブラリ/ツール/ビルトインの場合、一般的な画像処理操作(スケーリング、ぼかし、色空間変換など)を使用できますが、画像のデコード/エンコード/圧縮操作はできません(コンプレッサー入力およびデコンプレッサー出力を除く)。また、一般的な圧縮/解凍も許可されていません。この課題のために独自の圧縮を実装することを意図しています。 圧縮解除プログラムによる画像出力のサイズは、圧縮プログラムに指定された元のファイルのサイズと正確に一致する必要があります。画像の大きさがどちらの方向でも2 16を超えないと仮定できます。 コンプレッサーは、平均的な消費者向けPCで5分以内に実行する必要があり、デコンプレッサーは、以下のセットのすべての画像に対して10秒以内に実行する必要があります。 得点 迅速な検証と視覚的な比較を支援するために、回答を使用して圧縮した後のテストコーパスのロスレスイメージアルバムを含めてください。 コンプレッサーは、次の画像コーパスを使用してテストされます。 こちらから zipファイルのすべての画像をダウンロードできます。 スコアは、すべての画像でのコンプレッサーの平均構造類似性インデックスになります。dssimこの課題にはオープンソースを使用します。ソースから簡単に構築できます。Ubuntuを使用している場合はPPAもあります。独自の回答を採点することをお勧めしますが、Cアプリケーションの構築方法がわからず、Debian / Ubuntuを実行していない場合は、他の人に採点を許可することができます。dssimPNGでの入出力を想定しているため、別の形式で出力する場合は、最初に出力をPNGに変換します。 スコアリングを簡単にするために、以下に簡単なPythonスクリプトの使用方法を示しますpython score.py corpus_dir compressed_dir。 import glob, sys, os, subprocess scores = [] for img in sorted(os.listdir(sys.argv[1])): ref, preview = (os.path.join(sys.argv[i], img) for i in (1, 2)) sys.stdout.write("Comparing {} to {}... ".format(ref, preview)) out …

30
Takewhileを実装する
紹介とクレジット 今日は派手なプレリュードなし:を実装してくださいtakewhile。 これのバリエーション(非自明なデータ構造)は、大学の関数型プログラミングコースでの課題でした。この課題は現在閉鎖されており、クラスで議論されており、ここに投稿する教授の許可があります(明示的に尋ねました)。 仕様 入力 入力は、正の整数のリスト(または言語の同等の概念)になります。 出力 出力は、正の整数のリスト(または言語の同等の概念)である必要があります。 何をすべきか? あなたのタスクは、takewhile考慮中の数が偶数であるという述語を使用して実装することです(言語組み込みが許可されます)(テイクタイムに焦点を合わせるため)。 したがって、リストを最初から最後まで反復し、条件が(偶数)である間に出力リストにコピーし、条件を満たさない要素にヒットするとすぐに、操作と出力を中止します。 (ステップバイステップの例を以下に示します)。この高次機能は、takeWhile(takewhile)とも呼ばれます。 潜在的なコーナーケース 入力リストに比べて出力リストの順序は、例えば、変更することはできません[14,42,2]になってないかもしれません[42,14]。 空のリストは有効な入出力です。 誰が勝ちますか? これはコードゴルフなので、バイト単位の最短回答が勝ちです! もちろん、標準ルールが適用されます。 テストベクター [14, 42, 2324, 97090, 4080622, 171480372] -> [14, 42, 2324, 97090, 4080622, 171480372] [42, 14, 42, 2324] -> [42, 14, 42, 2324] [7,14,42] -> [] [] -> [] [171480372, 13, 14, …

27
3つの入力整数の差
入力として3つの整数x、y、およびzを受け取る関数diffを実装します。これらの数値の1つを別の数値から引くと3番目の数値が得られるかどうかを返します。 Test cases: diff(5, 3, 2) yields True because 5 - 3 = 2 diff(2, 3, 5) yields True because 5 - 3 = 2 diff(2, 5, 3) yields True because 5 - 3 = 2 diff(-2, 3, 5) yields True because 3 - 5 is -2 diff(-5, -3, -2) …

30
みなさん、カウントアップ!
前書き 奇妙に聞こえるかもしれませんが、から1までカウントするためのチャレンジは1つもありませんn。 これは同じことではありません。その1つは(閉じた)十分に説明されていない挑戦です。 これは同じことではありません。それは無期限にカウントアップすることです。 チャレンジ から1までのすべての整数を出力するプログラムまたは関数を作成しnます。 ルール nどんな方法でも手に入れることができます。 これnは常に正の整数であると想定できます。 n任意のベースを取得できますが、常に10進数で出力する必要があります。 出力は、にない文字(またはパターン)で区切る必要があります0123456789。10進数以外の先頭または末尾の文字を使用できます(たとえば、などの配列を使用する場合[1, 2, 3, 4, 5, 6])。 標準の抜け穴は拒否されます。 最短の言語ではなく、各言語で最短のアプローチを見つけたいので、私は答えを受け入れません。 この編集後に回答を更新する必要があります。最後の編集の前に投稿された回答は、標準の抜け穴に関する変更ルールに準拠する必要があります(拒否したくありませんでしたが、コミュニティをroめたくありませんでした。私はそれらを否定しました)。 デート後の任意の言語バージョン(または言語)を使用できます。この課題のためだけに作成された言語または言語バージョンは使用できません。 ボーナス 20% プログラムは、少なくとも18446744073709551615(2^64-1)までカウントできる必要があります。たとえば、新しいデータ型が大きな整数をサポートする唯一の方法である場合、それを構築する必要があります。あなたの言語が最大2 ^ 64-1までの巨大な整数をサポートする方法を持っていない場合、代わりにその特定の言語の上限をサポートする必要があります。 編集:制限をから2^64に変更し2^64-1て、より多くの回答を許可しました。 編集:このチャレンジにはあまり関心がなかったので、2 ^ 64-1ルールをボーナスにしました。回答が2 ^ 64-1をサポートしている場合、ボーナスを含めるように編集できます。また、短い場合は、サポートしていない回答を投稿できます。

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