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

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

12
Brainf * ckish方向
あなたのタスク-あなたがそれを受け入れることを選択した場合-は、方向を与えるトークンの文字列(左から右、任意の長さ)を解析および評価するプログラムを構築することです-左または右。4つの可能なトークンとその意味は次のとおりです。 > go right one single step < go left one single step -> go right the total amount of single steps that you've gone right, plus one, before you previously encountered this token and reset this counter to zero <- go left the total amount of single steps that …

4
受け入れられた答えを決定するコードを書く
この質問への回答を投稿して、この質問への回答を評価し、それが勝つかどうかを判断します。 誰が勝ちますか: 勝者は、3月2日日曜日の1700 UTCに最も多くの回答に従って勝つ答えです。 コンテストの進行に合わせて自分の回答を変更することを歓迎し、奨励します。他の人を変更しないでください。 関係は最短のコードによって決定されます。 あなたが通常どれくらいソックパペットをしていても、何かが怪しいなら、私はあなたを失格させます。 私は自分の答えを受け入れませんが、それをあなたの評価に使用します。 ルール: 計算では、任意の回答に対して数値スコアを提供する必要があります(簡単にするために、アルゴリズムへの入力は回答のIDまたはページ上の回答のマークダウンのいずれかです)。 スコアには少なくとも1人の勝者がいる必要があり、あなた以外の回答が勝つことができる必要があります。 あなたのアルゴリズムはあなたの答えに非常に特有のものを使用できませんし、ユーザー名やタイムスタンプもまったく使用できません。私は「非常に具体的な」とはどういうことかを最終的に判断しますが、コミュニティポリシングと公共の恥を奨励します。 コードはコンパイル、実行、および任意の答えが与えられたスコアを与える必要があります。 Ideoneにリストされていない場合、コードを実行する方法へのリンクを含めてください。下記参照。

1
JavaScriptロードとSHA-256
これは、実際のアプリケーションを使用したコードゴルフパズルです。次のようなURLを入力した場合、一部の現在のブラウザー data:text/html,<script>alert("hi")</script> 指定されたJavaScriptコードを実行します。次に、(擬似コード)のようなURLがあると仮定します。 data:text/html,<script> myPublicKey="12345678"; cryptoLib=download("http://example.com/somecryptolib.js"); if(sha256sum(cryptoLib) == "12345678") eval(cryptoLib) </script> これを名刺にQRコードとして印刷した場合、適切なブラウザーでそのURLにアクセスすると、公開キーが事前にロードされた状態で、何もインストールせずに公開キー暗号クライアントが取得されます。ハッシュ検証により、ISPがトラフィックに干渉している場合でも、彼らは本物の暗号ソフトウェアを入手したと確信できます。 残念ながら、この擬似コードの実際のバージョンは、QRコードにとって非常に長いものです。私の課題は、どのくらい短くできるかということです。実装は: データである:... ChromeおよびFirefoxのアドレスバーから正しく実行されるURL。(有効なデータ:URLを作成するには、%を%25としてエンコードし、改行を削除する必要があります) URLと SHA-256ハッシュを、できれば先頭近くにプレーンテキスト文字列リテラルとして埋め込みます を使用してURLからファイルをダウンロードする XMLHttpRequest(または同様のAPI)。(これを機能させるには、サーバーにAccess-Control-Allow-Origin:*ヘッダーを含める必要があることに注意してください。) そのURLが正常にロードされ、結果が予想されるハッシュを持つファイルである場合、eval()それ。それ以外の場合は何もしないか、エラーメッセージを表示します。 ChromeとFirefoxの両方に存在するすべての組み込みJavaScript関数は公平なゲームですが、ライブラリのロードは不可能です。 できるだけ少ないバイトを使用してください CryptoJSを使用して単純なバージョン(縮小バージョン)を作成しました。 data:text/html,<script> u = 'http://localhost:8000' h = '5e3f73c606a82d68ef40f9f9405200ce24adfd9a4189c2bc39015345f0ee46d4' // Insert CryptoJS here r = new XMLHttpRequest; r.open('GET', u, false); r.send(); if(CryptoJS.SHA256(r.response) == h) eval(r.response); </script> これは、ミニファイヤから次のように出力されます。 data:text/html,<script>u="http://localhost:8000";h="5e3f73c606a82d68ef40f9f9405200ce24adfd9a4189c2bc39015345f0ee46d4";var CryptoJS=CryptoJS||function(k,w){var …

2
ローグライクライトアップ
ボードが与えられたら、最短のプログラムまたは関数を記述して、プレーヤーの視界に入っているキャラクターを表示または返します。視力を妨げるキャラクターと交差することなく、キャラクターとプレイヤーの間に線を引くことができる場合、キャラクターは見えます。 入力: @プレイヤーの位置を表します。入力にはこれらの1つだけがあります。 正規表現に一致するキャラクターは[#A-Z]視力をブロックします。 一致[ a-z]するすべてのキャラクターが視覚を許可します。 無効な文字はありません 長方形の入力が保証されます 行は次のように定義されます。 ベクトルを大きさと方向に定義する 方向は、N、NE、E、SE、S、SW、W、NWのいずれかです。 大きさは、その方向に沿って数える文字数です 初期ベクトルをd 1と呼びます。2番目のベクトルはd 2と呼ばれます d 1またはd 2のいずれかは、次の大きさでなければなりません1。もう一方はどんな大きさでも構いません d 1の方向はd 2の方向に隣接している必要があります(例:NおよびNE) 行は、d 1、次にd 2、d 1、d 2 ...を適用することによってマークされたパスに沿ったすべての文字であると定義されます。 サンプルライン(.sで指定): d 1 =(大きさ:4、方向:E) d 2 =(大きさ:1、方向NE) ..... ..... ..... @.... 出力: 適切な位置に表示される各文字は、.スペースの代わりになります。 各非表示文字のスペース。 サンプル入力: @ K J L o 対応する出力: @......... ....K..... …
14 code-golf 

9
バッチでのゴルフのヒント
Windows Batch(CMD)は、おそらくコードゴルフに最適な言語ではありません。 改行文字を避けてください。文字とは対照的に、バイト単位の最短コードを探している場合は、不要なキャリッジリターン(改行文字= 2バイト)をすべて削除する必要があります。&操作を使用してこれを行うことができ、コマンドごとに1バイトをトリミングします。 echo Hello&echo World. 変数の設定。スイッチを使用して変数を設定する場合、setパーサーはスペースを無視します。 set /a a+=1 set /p b="User Input: " :: Will be handled the same as.. set/aa+=1 set/pb="User Input: " 同じパーサールールがすべてのコマンドに適用されるわけではないことに注意してください。たとえば、forループにはスペースが必要です。set, string, or command(括弧内にあるもの)とwordの間を除きdoます。 for /f %%a in (file.txt)do ... 簡単な数式。また、set /aコマンドでインクリメントに使用した式に注目してください。単純な数式の場合+= -= *= /=は、(たとえば)の代わりに使用しますset /a a=%a%+1。 コマンド出力の収集。コマンドの出力を取得するには、ファイルの出力と読み取りが役立つ場合があります。そうでない場合は、forループを使用して出力を収集します。 for /f %%a in ('echo …
14 code-golf  tips 

12
3および5リットルの水差しパズル
Die Hardでこれを見たかもしれません:復Venとともに ...この質問は有名な3リットルと5リットルの水差しパズルに基づいていますが、わずかに異なる傾斜があります。 1〜100の整数を指定すると、3リットルの水差しと5リットルの水差しを使用して、噴水からの対応するリットルの水量をタンクに測定するための最も迅速な指示を提供するコードを実行します。 どちらの水差しにもグラデーションはありません。噴水には水が豊富にあり、タンクはコードの各実行の開始時に空になると想定されています。 タンクに入ったら、タンクから水にアクセスできません。 実行形式は次のとおりです。 入力: 4 例えば。 出力 示されているように、各番号付きステップを出力し、その後に5L水差し、3L水差し、およびタンクの容積の集計が続きます。集計形式も以下に示します。ステップの数も、ステップの最後に出力する必要があります。 1) Fill 5L jug 5L: 5, 3L: 0, T: 0 2) Pour from 5L jug into 3L jug 5L: 2, 3L: 3, T: 0 3) Empty 3L jug 5L: 2, 3L: 0, T: 0 4) Pour from 5L …

4
Greater Golfの構文強調表示!
ゴルファー。 一緒になって、簡潔で機能的に美しく、元の小説のオペラ座の怪人よりもいコードを作成するために団結しました。 プログラミングの世界に美しさを取り戻す時が来ました。色付き。簡潔な方法で、機能的に美しいのは、オリジナルの小説のオペラ座の怪人よりもいです。 カラフルな構文ハイライターをコーディングします。可能な限り最短のコードで。 入力ファイルまたはStdinを介して有効なCファイルを受け取ります。Cファイルは、選択した行規則を使用し、ASCII文字32-126のみを含みます。少なくともChromeで正しく表示されるHTMLファイルに変換する必要があります。これにより、構文が強調表示されたソースコードが表示されます。出力はファイルまたはStdoutにあります。 強調する必要があります: 緑(#00FF00)のすべての文字列と文字(引用文字を含む)。文字列にはエスケープ文字が含まれる場合があります。 青のすべてのC予約語(#0000FF)。 すべてのコメントは黄色(#FFFF00)です。 ピンク色のすべてのCプリプロセッサディレクティブ(#FF00FF)。 Chromeで表示されるときの出力は、 固定幅フォントである 元のソースのどこにでも新しい行を表示する 空白を正確に再現します。タブ文字は4つのスペースであると解釈する必要があります。 ボーナス 行番号を含める場合はx 0.9。行番号は少なくとも99999に到達できる必要があります。すべてのソースはまだ整列している必要があります。したがって、行番号の小さいソースコードは、行番号の大きいソースコードと同じ位置から開始する必要があります。 x 0.8(各行の背景が明るい灰色(#C0C0C0)と白(#FFFFFF)の間で交互になっている場合) ソースコードがCで記述されていて、自分自身を正しくフォーマットできる場合はx 0.9。 得点 これはコードゴルフです。スコアは、ソースコードのバイト数にボーナスを掛けたものです。勝者は最低スコアのゴルファーです。
14 code-golf  string 

30
ピタゴラスの定理を実装する最短の方法
ピタゴラスの定理a²+b²=c²が嫌いな人はいますか?値aとbを取り込んで、「この直角三角形の斜辺は」+ cと出力する任意の言語で可能な最短の方法を記述します。cは小数点以下3桁までにしてください。
14 code-golf 

4
多肢選択式テストを行う
私はあなたにテストを提示します!あなたのテストはテストすることです。テストは、短いテスト量のコードで、テスターが提供するテストで受験者をテストすることです。具体的には、入力として受け取った多肢選択テストを行います。 この課題では、次のような入力を行う必要があります。 1. Our site is called Programming Puzzles & Code ________. A: Debugging *B: Golf C: Hockey D: Programming 2. What is the *most* popular tag on our site? A: [debug] B: [program] *C: [code-golf] D: [number] E: [c++] 3. We are part of the ________ Exchange network. *A: …
14 code-golf 

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

4
Ratetodテキストfexir
私はvewolsがratetodであるように見えるこの奇妙なテキストをhevaします: 私はひどく書かれたテキストです。一部の狂人は母音の順序で遊んだ。私を修正してください! だから私はテキストがraadeble agianであるように戻ってvewols(と思われるように「y」文字)に評価することができるpragromが必要になるでしょう。 Ouyは、ouyr chieco privedod ouy meka a cempleto pragrom(単なるfinctounではない)のlungaegaを選択できます。yntreは、アンピットフィールド、テキストフェリ、またはカモンドレニです。ouy lekiとしてのuutpot mya olsa vyra。 cuersoの私はyna pragrom uutpitongの悪いテキストをアンビリします。merags text ouy can endarstundできないpragromにはvuleaはありません。しかし、ouyは、必要に応じて、ratetodテキストでouyr cemmontsとqeistounsを作成できます。 明確化 プログラムは、ASCIIテキストを処理するためにのみ必要です。 この質問の目的上、次の文字は母音です。 aeiouy 各単語内の母音の位置を回転させる必要があります。単語として適格なものを決定する際にある程度の柔軟性があります:最小要件は、スペースで区切られた2つの文字が異なる単語にあり、アルファベット文字a-zA-Zのみで区切られた2つのアルファベット文字()が同じ単語にあることです。 回転の望ましい方向は、以下のテストケースから推測する必要があります。 テストケース 入力:I'm a badly written text. Some lunatic guy played with the order of vowels. Please fix me ! 出力:I'm …
14 code-golf 

4
分岐しないでください
低レベルのコード最適化にある程度慣れている人は、if-statements、loops、またはselect-statementsとして実装されても、分岐の予測ミスの可能性はひどいクロックを浪費するものです。 単純な問題は単純な算術ではるかによく解決できるので、そうしましょう。 次の問題では、すべての変数は32ビット符号なし整数であり、許可されるコードは次の演算子のみを含むプレーンセットステートメントのみです。 + addition - subtraction * multiplication / integer division, rounds down, division by 0 not allowed % modulo & binary and | binary or ^ binary exclusive or >> bitshift right << bitshift left Logic operators, return 1 if the expression is true and 0 if it …

7
記号の変更を使用して重複エントリを回避する
この逸話には、次の興味深い交換が含まれています。 「ファイン、フレッド」アヴィは割り込んだ。「では、エントリの重複を避けるためにこれをどのように変更しますか?」 「あそこのネガティブなものに変えてください。」 この主張は文脈では正確ではありませんが、理にかなっているもっともらしいコードがあるのではないかと思います。 あなたの挑戦は、この基準に適合するコード(プログラム、関数など)を書くことです。 2つの入力リストを1つにマージし、重複を保持します。[編集:オプションで、それらが整数であること、および/またはリスト自体が一意であると仮定することができます。整数が正であると仮定することはできません(これを行う1つの答えは祖父です)。] リテラル「1」はコードのどこかに表示されます。これをリテラル「-1」に変更すると、コードは同じことを行いますが、重複を削除します。 コードは単に1 / -1から分岐しません。たとえば、if (1 < 1) removeDuplicates()またはを探していません[do_nothing, merge_with_dups, merge_without_dups][1].call()。 入力および出力は、選択した任意の妥当な形式にすることができます。一例は [1,2],[2,3]->[1,2,2,3]符号が変わる前と[1,2,3]後。 これは人気コンテストです。あなたが自慢したいのでなければ、それはコードゴルフではありません。約2週間以内に最高投票数の回答を受け入れます。

9
ジャンプの最小数
一連の数字が与えられたら、開始位置から終了まで移動して再び開始位置に戻るための最小ジャンプ数を見つけます。 シーケンスの各要素は、その位置から移動できる移動の最大数を示します。 任意の位置で、最大k移動でジャンプできます。kはその位置に保存されている値です。最後に到達すると、以前はジャンプに使用されていなかったジャンプの位置のみを使用できます。 入力は、単一のスペースで区切られた数字のシーケンスとして与えられます。出力は、使用されるジャンプの最小数である単一の数値でなければなりません。最後まで移動して開始位置に戻ることができない場合は、-1を出力します 入力: 2 4 2 2 3 4 2 2 出力: 6(最後に到達するには3、戻ってくるには3) 入力 1 0 出力 -1 注意 シーケンスのすべての数が負でないと仮定します 編集1 「したがって、常に最後の位置からジャンプできることは明らかです。」紛らわしいかもしれないので、質問から削除しました。質問には影響しません。 受賞基準: 勝者はコードが最も短いものになります。

4
マシンコードで印刷可能な表示ASCII文字のみを使用して、x86 / x86-64で異なる分岐を行います。
タスクは簡単です:マシンコードで印刷可能な可視ASCII文字0x21 ... 0x7e(スペースとdelは使用できません)のみを使用して、x86(32ビット)とx86-64(64ビット)で異なる分岐を行うプログラムを記述します。 条件付きアセンブリは許可されていません。 API呼び出しの使用は許可されていません。 カーネルモード(リング0)コードの使用は許可されていません。 LinuxのIA-32とx86-64の両方、または他の保護モードOSで例外を発生させずにコードを実行する必要があります。 機能はコマンドラインパラメータに依存してはいけません。 すべての命令は、0x21 ... 0x7e(10進数で33 ... 126)の範囲のASCII文字のみを使用してマシンコードでエンコードする必要があります。例えば 自己修正コードを使用しない限りcpuid、制限外です(0f a2)。 同じバイナリコードをx86とx86-64で実行する必要がありますが、ファイルヘッダー(ELF / ELF64 / etc。)が異なる場合があるため、再度アセンブルしてリンクする必要があります。ただし、バイナリコードは変更しないでください。 ソリューションはi386 ... Core i7の間のすべてのプロセッサで動作するはずですが、より限定的なソリューションにも興味があります。 コードは32ビットx86で分岐する必要がありますが、x86-64で分岐することはできませんが、条件付きジャンプの使用は必須ではありません(間接ジャンプまたは呼び出しも受け入れられます)。分岐ターゲットアドレスは、コード用のスペース、つまりショートジャンプ(jmp rel8)が収まる少なくとも2バイトのスペースがあるようにする必要があります。 勝利の答えは、マシンコードの中で最も少ないバイトを使用するものです。ファイルヘッダーのバイト(ELF / ELF64など)はカウントされず、分岐後のコードのバイト(テスト目的など)もカウントされません。 回答をASCII、16進バイト、コメントコードとして提示してください。 私のソリューション、39バイト: ASCII: fhotfhatfhitfhutfhotfhatfhitfhut_H3<$t! 16進数:66 68 6F 74 66 68 61 74 66 68 69 74 66 68 75 74 66 …

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