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

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

14
クエリの活用
私はあなたがウェブプロキシとして人生の喜びを体験することの試練と苦難について常に考えてきたことを知っています。正直なところ、誰がそうではありませんか?今日、あなたはこの目標(少なくともその一部)の実現を任されています。WebサイトXは、クエリパラメーターを介して機密情報を渡すことを要求する多数のユーザーのために、毎日多くのトラフィックを獲得し、PaaS(明らかにサービスとしてのプロキシを指します)を探しています(ユーザーは愚かです)。あなたのタスクは、リクエストを元の宛先に転送する前に、リクエストからすべての重要なクエリパラメータを削除することです。 入力 RFC3986セクション3の URI文法に従う、整形式の絶対HTTP URL 。 フラグメントがないと仮定できます 角括弧で囲まれたものがオプションを示す簡単な形式の例: http[s]://[user:pass@]host.name.com[:port]/[?param1=value1&param2=value2...] 削除するクエリパラメータのリスト。 出力 入力リストにパラメーターが定義されていない、変更されたHTTP URL。 例 http://example.com/ [foo] > http://example.com/ http://example.com/?foo=bar [] > http://example.com/?foo=bar http://example.com/ [] > http://example.com/ http://example.com/?foo=1&bar=2&baz=3 [foo,baz] > http://example.com/?bar=2 http://example.com/?foo=1&bar=2&baz=3 [foo,bar,baz] > http://example.com/ http://example.com/?foo&bar=2&baz= [foo,baz] > http://example.com/?bar=2 http://example.com/?abc=1&def=2&baz=foo [foo,bar] > http://example.com/?abc=1&def=2&baz=foo http://example.com/?foobar=baz [foo] > http://example.com/?foobar=baz http://foo:foo@foo.com:8080/?foo=1&bar=foo [foo] > http://foo:foo@foo.com:8080/?bar=foo …
19 code-golf 

2
チャック・ノリスと巡回セールスマン
前書き ほとんどすべての人が巡回セールスマン問題(TSP)に精通しています。タスクは、N都市のリストを指定して、最小ハミルトニアンサイクルを見つけることです。これは、各都市を訪れて最初に完全に戻るまでの最短経路を言うことです。それは、この課題の目的ではありません。この課題は、TSPにチャックノリスのソリューションを実装することです。 Chuck Norrisは、巡回セールスマンの問題をO(1)時間内に解決しました。セールスマンをN個に分割します。それぞれのピースを別の都市にキックします。 チャレンジ この方法でTSPを解決するには、切断などの軽薄さを避けない、十分に耐久性のあるセールスマンが必要です。訪問するいくつかの都市。販売する製品のセット。解体のための具体的な方法; スコアリングの計算。 仕様 都市 N セールスマンが訪問する引用数です セールスマン メインプログラムまたは機能 言語で書かれた X 長さmodがN等しい0 製品 周期表の元素の完全な名前 これには、新しく受け入れられた要素の名前が含まれます 切断 セールスマンをN同じ長さの連続した断片にスライスする 各ピースは、言語の有効な機能またはプログラムである必要があります X 出力 実行されると、セールスマンは出力Chuck Norrisし、スライスされたピースはそれぞれ個別の製品を出力するはずです 余分な末尾の空白のみが許容されます 得点 Lセールスマンの長さ(バイト数)を都市の数N(平方)で割った値。 Score = L/(N*N) 最小得点 小数のスコアを投稿する際には、有効数字を3つ含めてください 例 このセールスマンは3つの都市を訪問しN=3、その長さは9 L=9です。したがって、この回答のスコアはになりますS = 9 / (3 * 3) = 9/9 = 1。 セールスマンと各スライスピース(そのうち3つ)は、すべて同じ言語の有効なプログラムまたは関数である必要があります。 Program -> …

30
デジタルルートを印刷する
これは、Wordが複雑ではなく、計算するだけで、比較する必要がないため、Wordを打ち負かすことができるのとは異なります。 デジタルルートを見つけるには、数字のすべての数字を取得して追加し、1桁の数字が得られるまで繰り返します。例えば、場合の数だった12345、あなたが追加することになり1、2、3、4、と5、なって15。その後、追加1し5、あなたに与えます6。 あなたのタスク 整数N(0 <= N <= 10000)からSTDINまでを指定すると、Nのデジタルルートが出力されます。 テストケース 1 -> 1 45 -> 9 341 -> 8 6801 -> 6 59613 -> 6 495106 -> 7 これはcode-golfであるため、バイト数が最小のコードが優先されます。

3
Brainf * ckループの問題
印刷するように頼むサイバークラブの問題があります。 ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! '、'文字を使用せずに29バイト以下でBrainf ** kを使用します。 私は動作するコードを持っています: ++++++++++[>++++++>+++++++++<<-]>-->.<[>-.<-] ただし、ループが長すぎるため、制限を超えて16バイト送信されます。 2番目と3番目のセルを58と90に設定して、2番目のループを実行できるようにするより効率的な方法はありますか?それとも、私が見ていないだけでこれをすべて一緒に行うより良い方法がありますか?

13
進行中のバブルソート
2つの入力を受け取る関数またはプログラムを作成します。 ソートされる整数のリスト(20要素未満) 正の整数、Nあなたがとるべき比較の数を言う 関数は停止し、N比較後に結果の整数のリストを出力します。N比較が行われる前にリストが完全にソートされている場合、ソートされたリストが出力されます。 バブルソートのアルゴリズムはよく知られている、と私はほとんどの人がそれを知っていると思います。次の擬似コードとアニメーション(リンクされているWikipediaの記事の両方)が必要な詳細を提供する必要があります。 procedure bubbleSort( A : list of sortable items ) n = length(A) repeat swapped = false for i = 1 to n-1 inclusive do /* if this pair is out of order */ if A[i-1] > A[i] then /* swap them and remember something changed …

5
Windows MEスクリーンセーバーをASCIIとして再作成します
この課題は、Ask Ubuntu Stack Exchangeでのこの回答から着想を得ています。 イントロ パイプを使用したWindows MEスクリーンセーバーを覚えていますか?懐かしさを取り戻す時が来ました! チャレンジ スクリーンセーバーのASCII表現を出力するプログラムまたは関数を作成する必要があります。スクリーンセーバーには、半ランダムな方向に伸びる単一のパイプがあります。 パイプの始点は、画面の任意の境界にランダムに配置され、パイプ部分は境界に対して垂直になります(角の最初のパイプは水平または垂直のいずれかです)。パイプがティックするたびに、80%偶然に直面している方向(水平/垂直)に成長するか、偶然に角を取り20%ます。 パイプ表現 パイプを作成するには、6つのUnicode文字が使用されます ─ \u2500 horizontal pipe │ \u2502 vertical pipe ┌ \u250C upper left corner pipe ┐ \u2510 upper right corner pipe └ \u2514 lower left corner pipe ┘ \u2518 lower right corner pipe 入力 プログラム/関数は、入力の3つの値を取ります。これらの値は、関数パラメーターを介して収集するか、ユーザーにプロンプ​​トを出すことができます。 ティックの量 スクリーン幅 スクリーンの高さ ティックの量 …

4
式をパンフィックス表記に変換する
私はesolangsを閲覧し、その言語に応じ偶然ました:https://github.com/catseye/Quylthulg。 この言語の興味深い点の1つは、プレフィックス、ポストフィックス、またはインフィックスを使用せず、3つすべてを使用して、「パンフィックス」表記法と呼ぶことです。 以下に例を示します。1+2panfixで通常の中置記号を表す場合、次のようになります+1+2+。演算子がオペランドの前、中間、後の両方にあることに注意してください。別の例は(1+2)*3です。これはになり*+1+2+*3*ます。*オペランド+1+2+とに関して、3つの場所すべてがどのようになっているかに再び注目してください3。 チャレンジ ご想像のとおり、この課題でのタスクは、式を中置からパンフィックスに変換することです。 いくつかの説明: 次の4つの基本操作のみを処理する必要があります。 +-*/ それらの単項バージョンを扱う必要はありません、バイナリのみ あなたは括弧に対処する必要があります */thenの通常の優先順位ルールを想定し、+-それらすべてに対して結合性を残します。 数値は非負の整数になります オプションで、入力と出力の両方にスペースを含めることができます テストケース 1+2 -> +1+2+ 1+2+3 -> ++1+2++3+ (1+2)*3 -> *+1+2+*3* 10/2*5 -> */10/2/*5* (5+3)*((9+18)/4-1) -> *+5+3+*-/+9+18+/4/-1-* これはcode-golfなので、バイト単位の最短コードが勝ちです!

4
戦争ゲームの勝者を決定する
カードゲームの戦争は、カードがプレイフィールドからピックアップされてデッキに移動される順序について特定のルールに従う限り、最終結果がデッキの初期配置によって完全に決定されるという点で興味深いです。この課題では、2人のプレイヤーのみが存在し、物事を大幅に簡素化します。 ゲーム 各プレイヤーには26枚のカードが配られます。 各プレイヤーはデッキの一番上にあるカードを表向きに置きます。上位のカード(Ace > King > Queen > Jack > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2)を持つプレイヤーがラウンドに勝ち、相手のカードの上にカードを置き、裏返して、デッキの一番下に追加します(勝ったカードはデッキの一番下になります) 、他のプレイヤーの負けているカードはそのすぐ上にあります)。これは、プレイヤーの一人がカードを使い果たすまで行われます。 カードのランクが等しい場合、各プレイヤーは自分のデッキの一番上から2枚のカードを前のカードの上に表向きに配置します(そのため、デッキの上にあったカードはスタックの2枚目のカードになり、上から2番目のカードが上にあります)。次に、(各スタックの一番上のカードの)ランクが再び比較され、勝者は敗者のスタック全体の上にスタック全体を置き、スタックを上下逆にして、デッキの一番下に置きます。別のタイがある場合、勝者が選択されるか、1人のプレイヤーがカードを使い果たすまで、同じ方法でより多くのカードがプレイされます。 いずれかのプレイヤーがデッキからカードを引く必要があるが、デッキが空の場合、すぐにゲームに負けます。 チャレンジ プレイヤーのデッキにある2種類のカードのリストを便利な形式で指定すると、プレイヤー1が勝った場合は真実の値を、プレイヤー2が勝った場合は偽の値を出力します。 便宜上、10枚のカードはで表され、すべてのカードの長さが1文字にTなるように、顔カードは省略されます(Ace -> A, King -> K, Queen -> Q, Jack -> J)。あるいは、ランクは10進整数2〜14(Jack -> 11, Queen -> 12, …

11
あなたの質問は何でしたか?
前書き 退屈なテキストが与えられたら、できるだけ早くそれを乗り越えたいだけです。次のテキストを見てみましょう。 Ens colligi timenda etc priorem judicem. De quascunque ii at contingere repugnaret explicetur intellectu. Adjuvetis hoc fortassis suspicari opportune obversari vix eam? Dei praemia prudens hominum iii constet requiri haberem. Ima sane nemo modi fuit lus pro dem haud. Vestro age negare tactum hoc cui lor. Ne et …

13
カモフラージュの色が変わるカメレオンチャレンジ
明らかに、カメレオンの挑戦は悪いことです。残念なことに、カメレオンは美しい生き物です。変革の時! ご存知のように、多くのカメレオンは、肌の色を変えることで周囲に溶け込む驚くべき能力を持っています。これもこの課題の目的です。 チャレンジ 9ピクセルの正方形を想像してください。8ピクセルが周囲です。中央にカメレオンがあります。 このような: カメレオンは自然に周囲に溶け込もうとします。それは、周囲のピクセルの色の平均に色を変更することによって行われます。したがって、この場合、カメレオンの色はに変わります。 目的 周囲のピクセルの色を指定して、カメレオンの色を出力します。 カメレオンの色は、ピクセル内のすべての赤、緑、青の合計÷8として定義されます。 入力 次のように、左上から時計回りに続く8つの周囲のピクセルの色の値の配列: [[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>]] 10進数の0〜255の8つのトリプルで構成される限り、別の形式で入力を受け取ることもできます。 別の形式で入力を受け取る場合、数値は一貫した長さであるか、数値の間に数字以外の区切り文字が必要です。トリプルには、9桁まで0が埋め込まれていない限り、区切り文字が必要です。(例は044200255044200255044200255044200255044200255044200255044200255044200255有効で、そうしている44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255と44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255、しかし、4420025544200255442002554420025544200255442002554420025544200255ではありません。) 出力 次のような中央のピクセルの色を含む配列/文字列/など(10進数): [<red>,<green>,<blue>] 配列以外の何かを出力する場合:数値は、一貫した長さであるか、数値の間に数字以外の区切り文字が必要です。(Egが044200255有効で、そうである44 200 255が、44200255ではありません。) 数値に小数点を含めることはできないため、たとえば44.0 200 255.0無効です。 丸め 出力は最も近い整数に丸める必要があります。(半分を切り上げる必要があります。)たとえば、すべての赤の合計が1620の場合203、202またはではなくを出力する必要があります202.5。 例 写真は説明のみを目的としています。中央のピクセルが出力で、周囲のピクセルが入力です。 …

14
ディレクトリ計算
このチャレンジでは、絶対パスと「新しい」パス(絶対パスまたは相対パス)が与えられ、最終パスを返す必要があります。 たとえば、現在のディレクトリが/var/tmp/test次の場合: my_dirまたはmy_dir/ 戻る必要があります/var/tmp/test/my_dir ../../my_dir 帰るべき /var/my_dir /my_dir/./ 帰るべき /my_dir ../../../../../ 帰るべき / もっと用心深くなるには: ディレクトリには、英数字と記号からなる非空の文字列である-、_または. パスは、を使用して区切られた0個以上のディレクトリのリストです/。絶対パスはで始まり/、相対パスはそうではありません。パスには終了を含めることができます/。 最初のパスを指定して、2番目のパスを「解決」する必要があります。 解決のプロセスは次のとおりです。 2番目のパスが相対パスかどうかをテストします。その場合、絶対パスのディレクトリを2番目のパスの先頭に挿入します。 いずれかのディレクトリがの場合、そのディレクトリと..前のディレクトリを削除します。最初のディレクトリである場合は、単に削除します。 いずれかのディレクトリがの.場合、それを削除します。 最終的な絶対パスを出力します。エンディングを出力しないでください/。 誤った入力を処理する必要はありません。渡されたディレクトリが実際にマシンに存在するかどうかに関係なく、コマンドは機能するはずです。拡張子が付いていても、すべてがディレクトリであると想定できます。 テストケース Absolute New Output "/a/b/c" "d" -> "/a/b/c/d" "/a/b/c/" "d" -> "/a/b/c/d" "/a/b/c/" "d/" -> "/a/b/c/d" "/a/b/c" "/d" -> "/d" "/a/b/c" "/d/" -> "/d" "/../a/b/c/" "d" -> …

30
ブール配列を反転する
素敵なシンプルなもの 入力 ブール配列(または受け入れ可能な代替)が与えられた場合、配列の長さが32要素を超えないことを想定できます。 [false, false, true, false, false] 出力 配列のすべての要素を反転して出力します。 [true, true, false, true, true] ルール 完全なプログラムまたは単なる関数を書くことができます 標準的な抜け穴が適用されます 言語ごとのバイト単位の最短コードが勝ちます! テストケース Input: [true, false] Output: [false, true] Input: //Example of acceptable alternative [0,1,1] Output: [1,0,0]

16
境界ボックスを強調表示、パートI:デカルトグリッド
次のように、文字.との長方形のグリッドが与えられます#: .......... ..#....... ....#..#.. ...#...... .......... あなたの仕事は#、さらに軸に沿った境界ボックス全体をさらに埋めること#です: .......... ..######.. ..######.. ..######.. .......... 軸に沿った境界ボックスは、すべてを含む最小の長方形#です。 もっと欲しい?パートIIをお試しください! ルール およびの代わりに、任意の2つの異なる印刷可能なASCII文字(0x20〜0x7Eを含む)を使用できます。私はとしてそれらを参照続けるだろうといえ明細書の残りの部分のために。#.#. 入力と出力は、単一の改行で区切られた文字列または文字列のリスト(各行に1つ)のいずれかですが、形式は一貫している必要があります。 入力に少なくとも1つが含まれ#、すべての行が同じ長さであると想定できます。 プログラムまたは関数を作成し、入力を受け取り出力を提供する当社の標準的な方法を使用できます。 任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。 これはcode-golfであるため、バイト単位で測定された最短の有効な回答が勝ちます。 テストケース 各テストケースには、入力と出力が隣り合っています。 # # ... ... #.. #.. ... ... ... ... #.. ### ..# ### .#. ### #.. ### ..# ### ..... ..... .#.#. .###. ..... ..... ... …

18
年の月を並べ替える
関数や文字列の入力を受け取り、プログラムを書く、タイトルケースには、英語の月名を完全に綴ら:January、February、March、など(ヌル/ CR / LFは、あなたがそう選択した場合は[OK]を、いくつかの非英字で区切ら終了)のいずれか 2つの入力を比較し、2番目の入力が最初の入力よりも大きい場合(月順)にTruthy値を返します。値が等しいとFalsey値になります または、それらの任意のシーケンス(リスト、区切り文字列など)を時系列に並べ替えます (課題の核心は、正しい辞書式ソートを提供するメソッド/式を定義することです。一部の言語では、どちらか一方の回答が短くなる場合があります) 内部時間解析メソッド(などstrptime)を使用して、月名を数字に変換したり、月名の事前にマッピングされたマッピングに変換することはできません。文字列自体のプロパティ、定義した控えめなルックアップテーブル、または巧妙なものを使用します。 例 機能する例、最初のものは規則で禁止されていますが... import datetime def is_later_month(a, b): ''' Example of prohibited code because it relies on language features about how to parse month names ''' return datetime.strptime(a, '%B') < datetime.strptime(b, '%B') ただし、以下のバージョンは問題ありません。 months = { 'January': 1, 'February': 2, 'March': 3, 'April': …

7
Gijswijtのシーケンスのn桁を生成
前書き Gijswijtのシーケンス(A090822)は有名で、本当に遅いです。説明する: 最初の3つは9番目の用語に表示されます(申し分ありません)。 最初の4つは220期目に表示されます(かなり先ですが、実現可能です)。 最初の5つは(ほぼ)10 ^(10 ^ 23)番目の項に表示されます(noのみ)。 最初の6がどこにあるのかさえ、誰も本当に知りません...それがどこにあるのか疑われています... 2 ^(2 ^(3 ^(4 ^ 5)))番目の項。 2桁の数字を扱う必要はないと想定できます。 シーケンスは次のように生成されます。 最初の項は1です。 その後の各用語は、それより前の反復「ブロック」の量です(複数の反復「ブロック」がある場合、反復ブロックの最大量が使用されます)。 明確にするために、ここに最初のいくつかの用語があります。 1 -> 1, 1(1つの繰り返しブロック(1)。したがって、記録される数字は1) 1, 1 -> 1, 1, 2(2つの繰り返しブロック(1)。したがって、記録される数字は2) 1, 1, 2 -> 1, 1, 2, 1(1つの繰り返しブロック(2または1, 1, 2)。したがって、記録される数字は1) 1, 1, 2, 1 -> 1, 1, 2, 1, 1 …

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