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

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

1
2Bのインタープリターを作成する
通訳を書く 2Bの 好き David Cattの難解な言語2Bが。各セルがバイトの独立したテープ(「サブテープ」)であるテープにメモリが保存されています。通訳を書いてください! 言語仕様 公式の仕様はここにあります。この仕様で"は、範囲内の数値0-9(0と解釈される10)を_意味し、任意の長さの文字列を意味します。各セルはの範囲の値を格納し、0-255オーバーフロー/アンダーフローはBFと同じように折り返します。(ありがとう@MartinBüttner)。テキストを数字0-255に変換するには、ASCIIコードを使用します。私はこれについて詳細を見つけることができないので、テープの長さは255最小であるべきだと言いますが、そうでない場合は編集してください。 +-------------+----------------------------------------------------------------------------------------------------------------------------------------+ | Instruction | Description | +-------------+----------------------------------------------------------------------------------------------------------------------------------------+ | 0 | Zeroes the current cell and clears the overflow/underflow flag. | | { | If the current cell is zero, jump to the matching }. | | } | A placeholder for the { …

3
文を作り直す
この課題は2つの部分で構成されています。勝者は、総バイト数が最も少ないソリューションになります。両方の課題に同じ言語を使用する必要があります。 パート1: 入力として有効な単語のみを含む文を受け取り、使用する文字のリスト、各文字の使用回数、元の文の各単語の文字数を出力する関数またはプログラムを作成します。このプログラムからの出力は、次のプログラムへの有効な入力でなければなりません(出力されたとおり) 例と詳細なルールをさらに下に追加します。 パート2: 最初のプログラムからの出力を入力として使用し、この英単語のリストを使用して、出力からの情報を使用して文を再作成する関数またはプログラムを作成します。文は元の文と同じである必要はありません。 詳しくは。ルールと制限: パート1: 最初の入力は、引用符の有無にかかわらず、関数の引数として、または角括弧の有無にかかわらず、STDINからの任意の適切な形式にすることができます。 入力文には、最後のピリオド/ドットを除き、句読点や特殊文字は含まれません。ピリオド記号を除き、入力に含まれるすべての文字は単語リストに含まれます。 文の最初の文字は大文字になり、残りは小文字になります。 パート2の出力は、元の文と同じ大文字で開始する必要があります(したがって、入力を小文字に変換することはお勧めしません(ただし、OK)。 出力は任意の適切な形式にすることができます。 出力を次のプログラム/機能に直接コピーアンドペーストできる必要があります コピーアンドペーストの際に変更を加えることはできません。出力全体を部分的にではなく、全体としてコピーして貼り付ける必要があります。 たとえば、アルファベットのすべての文字、または使用されているもののみのヒストグラムを出力できます(一般的に、パート2を完了するために必要なものは何でも) 複数のオカレンスが繰り返される文字のリストを出力することはできません。例えば、The queue出力が得られないことができますTeeehquu (3,5)、それは次のようになりますTehqu, (1 3 1 1 2),(3 5)。 パート2: プログラム/関数は、パート1からの入力をそのまま受け入れる必要があります(1つの例外、入力としてファイル名を使用することに関する以下のコメントを参照してください)。 入力を解析するために括弧、引用符などが必要な場合、これらはパート1の出力の一部である必要があります。 単語リストはここにあります。 単語リストは、ローカルに保存するかw.txt、URLから取得できます。urlは5バイトとしてカウントされるため、url-shortenerは必要ありません。 プログラムはSTDIN(私はこれが信じているから、入力として名を読まずに、ファイルを開くことができない場合である少なくともPythのためのケースだった)、その後、ファイル名は別々の入力引数として撮影することができます。 出力は、ピリオドとオプションの改行で終わる文(有効な単語のリスト)のみである必要があります。 出力には、パート1の元の文と同じ文字数の単語が含まれている必要があります(正しい順序で) 元の文で使用されたすべての文字は、新しい出力で使用する必要があります。 文は、元の入力文と同じ大文字で始まり、ピリオドで終わる必要があります。 両方の部分: どちらの部分も実行に2分以上かかることはありません(ソリューションに到達するまでランダムに単語を選択することは受け入れられません)。 上記の規則を使用すると、まったく同じ文が再現される可能性がかなり高くなりますが、これは必須ではありません。 例: 以下の例では、いくつかの異なる入力および出力形式が示されています。さらに多くが受け入れられます。 パート1: 入力: Zulus win. 出力タイプ1: Z i l n s …

12
小数の説明
の形式で小数を指定する<float>, <precision>と、フロートの小数部分(つまり小数部)のグラフィック表現を描画します。例: 入力:6.75, 4、出力: 6||| 7 ---- 6.75(入力からの最初の数)は説明する数、4(入力からの2番目の数)はパイプの下のダッシュの数です。 6床は6.75、7天井は6.75。パイプの数はdecimal part of first input number * second input numberです。 入力:10.5, 6、出力: 10||| 11 ------ 入力:20.16, 12、出力 20|| 21 ------------ .16 実際には1.92本のパイプを使いますが、1.92本のパイプを描くことができないので、2本にします。 入力:1.1, 12、出力: 1| 2 ------------ .1 この場合は1.2パイプなので、1パイプにフロアリングされます。 また、エッジケース。入力:(5, 4つまり、数値は整数です)、出力: 5 6 ---- 説明する数値は正の浮動小数点数であり、言語能力によってのみ制限されます。 精度の数値は2より大きい偶数の整数です(つまり、必要な最小精度は4です)。任意の大きさにすることもできます。 > = n.5パイプはn + 1に切り上げられます(つまり、1.5は2に丸められ、2.5は3に丸められます)。<n.5パイプはnに丸められます(つまり、1.4は1に丸められ、2.4は2に丸められます)。 あなたの言語にとってより便利な場合は、入力を配列として取ることができます[6.75, …

5
隣接文字テスト
パスワード強度テストの1つの側面は、キーボード上の隣接する文字の実行です。このチャレンジではtrue、文字列に隣接する文字の実行が含まれている場合に返すプログラムを作成する必要があります。 何が隣接する文字の連続としてカウントされますか? この簡易版のパスワード強度テスターの場合、隣接する文字の連続は、QWERTYキーボード上で単一方向(左、右、上、または下)で互いに隣り合う3文字以上です。この課題のために、キーボードのレイアウトは次のようになります。 1234567890 QWERTYUIOP ASDFGHJKL ZXCVBNM 上記の図でQは、下にある1が下に2はないので、文字列を含む文字列1qaまたはその中の文字列はaq1、プログラムを返しますがtrue、返し2qaません。 入力 チェックするパスワード文字列。文字[0-9a-z]または[0-9A-Z](選択した)のみが含まれます。 出力 パスワードに隣接するキーの実行が1つ以上含まれている場合、プログラムは真偽値を返す必要があります。 例 次の入力はtrueを出力するはずです。 asd ytrewq ju7 abc6yhdef そして、これらの入力はfalseを出力するはずです: abc aaa qewretry zse qwdfbn pas ルール 回答は完全なプログラムまたは機能である場合があります。 標準の抜け穴は許可されていません。 これはcode-golfで、最低スコア(バイト単位)が勝ちます!

3
ロックとキーのゲーム
1-nの番号が付いたn個のボックスがあります。各ボックスはロックされており、対応する1つのタイプのキー(1〜nの番号も付けられている)のみで開くことができます。これらのキーはボックス内にランダムに散らばっていて(1つのボックスには任意の数のキーがあり、1つのキーには任意の数の重複があります)、すべてのボックスが閉じられます。宝物(番号0)も多くのボックスでロックされています。 すべての宝物を回収するために鍵屋を雇いました。彼は、開いた箱ごとに料金を請求します。キーが既に利用可能なボックスを開くのに料金はかかりません。 入力は各ボックスの内容です。入力の形式を決定できます。 宝物を入手するのに必要な最低コストを出力します。 ノート アルゴリズムには時間がかかる場合がありますが、それは無関係です。 最短のコードが優先されます。 無効な入力を気にする必要はありません。 サンプルデータ ここで、行iはボックスiに存在するキーを表します。 入力 2 0 3 4 0 5 6 0 6 0 出力 1 入力 2 0 3 0 4 0 6 5 0 出力 3 入力 2 4 0 3 0 1 0 6 5 0 出力 2 入力 1 …

2
〜ATHインタープリターを作成する
人気のあるウェブコミックHomestuckは、~ATH宇宙を破壊するために呼び出されるプログラミング言語を使用しています。このゴルフの挑戦は、私たちの存在を全滅させるプログラムを書くことではありませんが、もっと面白くない(あまり面白くない)エンティティを破壊します:variables。 ~ATH( "til death"と発音します。~ath"tilde ath"はどのように機能するかを確認してください)は、という変数を作成しTHIS、でコマンドを実行しEXECUTE、でプログラムを終了することで機能しTHIS.DIE()ます。Homestuckでの言語の使用に関するWikiページは、ここにあります。この課題の目標は、~ATH通訳を作成することです。 挑戦のために、私は~ATH実際には存在しないいくつかの詳細を作成しますが、それを(ある程度)有用にします。 この言語は、で宣言されている整数でのみ機能しますimport <variable name>;。変数は自動的に値0に設定されます。一度にインポートできる変数は1つだけです。 変数xは、書き込みによってコピーできますbifurcate x[y,z];。これにより、変数が削除されx、同一の変数yおよびに置き換えられますz。削除された変数と同じ名前の変数を作成できないことに注意してください。基本的に、変数の名前が変更され、別の名前の変数のコピーが作成されます。これは馬鹿げた機能のように見えますが、愚かさはHomestuck に非常に深く根付いています。 コードを実行するプログラムを記述するための構文xは~ATH(x){EXECUTE(<code>)}です。2つの変数に対して同時にコードを実行する場合、コードは次のようにネストされます~ATH(x){~ATH(y){EXECUTE(<code>)}}。のすべてのコマンド<code>両方で実行されますxとy。 それではコマンドに移りましょう。 +関連する変数を1つ-増やし、1つ減らします。そして...それだけです。 の最後の機能~ATHは、動作するものは何でも殺すことです。変数は<name>=<value>、コマンドで(改行が後に続く)形式で出力されます[<name>].DIE();。その後、プログラムDIE <name>は、変数の値の絶対値に等しい回数だけ単語と改行を出力します。同時に変数が削除されると[<name1>,<name2>].DIE();(存在する限り、必要な数の変数を削除できます)、DIE()コマンドは変数に対して順次実行されます。 サンプルプログラム プログラム1: import sollux; //calls variable "sollux" import eridan; //calls variable "eridan" ~ATH(sollux){EXECUTE(--)} //sets the value of "sollux" to -2 ~ATH(eridan){EXECUTE(+++++)} //sets the value of "eridan" to 5 [sollux].DIE(); //kills "sollux", prints "DIE …

3
アスキーアートライトの祭典
ゼロまたは6つのコマンドライン引数を取るプログラムをできるだけ少ない文字で記述します menorah menorah YEAR MONTH DAY HOUR MINUTE SECOND (両方の形式をサポートする必要があります。引数がゼロのバージョンは、ローカルタイムゾーンの現在のシステム日時で引数が6つのバージョンを呼び出すのと同じです。) そして、指定された(グレゴリオ暦)の日付と時刻がハヌカ中に落ちた場合、適切な数のろうそくが点灯したASCIIアート(またはUnicodeアート)の9枝の本枝の燭台を出力します。ハヌカ中にない場合は、単一の改行を出力します。例えば、 ~$ ./menorah 2015 12 7 0 0 0 * | * | | | | +++++++++ | -+- ~$ ./menorah 2015 12 9 0 0 0 * | *** | ||| | ||| +++++++++ | -+- ~$ ./menorah 2015 …

5
その角度は何ですか?
この課題の目標は、画像内の線の角度を決定することです。 画像に関する規則: 画像の背景は白になります(#FFFFFF) 線のストロークは黒になります(#000000) 行はアンチエイリアスされません 画像は100x100ピクセルになります 線は画像の中心から始まります 行は下向きになります(6-OClock) 行は50ピクセルの長さになります 線の角度は、開始位置から反時計回りに測定されます 画像コーデックは、.jpgまたは.png 入力形式は、コマンドライン引数、スクリプト入力、または関数引数によって渡されるファイル名になります。出力形式は単純です-度数(たとえば90)を出力するだけです。 回答は、指定された測定値の±1度です。以下に画像の例をいくつか示します。 背景が灰色の45度の参照画像 0度 45度 50度 130度 230度 324度 画像の作成に使用されるコードは次のとおりです(これはProcessingでコーディングされています)。 int deg = 45; int centX = width/2, centY = height/2; background(255); noSmooth(); line(centX, centY, centX + sin(radians(deg))*50, centY + cos(radians(deg))*50); saveFrame("line-"+deg+".png");// image codec can be changed here. use …

12
反復ダイスローリング
入力nが与えられた場合3 <= n <= 25、n片面のダイ(範囲内の面)から始めて、次の手順を実行します[1, n]。 現在のnサイドのサイコロをプレイ中に転がした結果をフォームに出力しますkdn: X(X結果kはプレイ中のサイコロの数です)。 プレイ中のサイコロの数の倍X以上の場合n/2、サイコロを追加します。それ以外の場合は、ダイを取り外します。 プレイ中のサイコロの数が0またはnに等しい場合、停止します。それ以外の場合は、手順1に進みます。 例の実行(括弧内の出力は説明用であり、必須ではないことに注意してください): 6面: 1d6: 4 (avg: 3.0, add) 2d6: 6 (avg: 6.0, add) 3d6: 9 (avg: 9.0, add) 4d6: 16 (avg: 12.0, add) 5d6: 13 (avg: 15.0, remove) 4d6: 9 (avg: 12.0, remove) 3d6: 5 (avg: 9.0, remove) 2d6: 7 (avg: …
12 code-golf  random 

1
fiには小さすぎる、最も優れた証明!
あなたは家に座って、最も邪悪なやり方で手をこすります。今回は、コミュニティA-SPINを設定できます!ここでこの本の中でこの問題(間違いなく改善可能)を証明したと主張するだけです...最初の関連ページを開きます。あなたはそれらの言葉を走り書きする… もちろん、あなたは邪悪なフェルマーです!はは、ただの冗談さ。あなたはそれがこのように起こらなかったことを知っています。これは単に彼の邪悪な双子、フォーマットの物語です。ここでの形式は、彼の「証拠」を余白に凝縮するのが面倒です。したがって、彼はあなたに彼のためにそれをするように呼びかけました。 目的プルーフ(文字列)とページ(テキストブロック)を指定して、プルーフのマージンに「書き込み」ます。 有効なページルール テキストブロックには、次の要件を満たしている場合にのみページが含まれます。 上部と下部の境界線は次の形式です-{10,}\+$(-a +、それから行末まで少なくとも10回の正規表現)。 すべての非最上行および非最下行は、で終わる必要があり|ます。そのような行が少なくとも1つあります。 |各行の最後から少なくとも5つのスペースがあります。 すべての線は同じ幅です。 したがって、次は有効なページです(.sは最大マージン境界がどこにあるかを示すためのものです)。 -----------------+ Lorem Ipsum. | and other . | latin crud . | . | EOF. | -----------------+ マージンが広い別のページを次に示します。 ------------------------+ Hello world! . | How are you, to. | day? --Mme. B . | . | ------------------------+ できる限り単語を維持しながら、マージンに所定の文字列を書き込む必要があります。たとえばhello、次の行に収まる場合は、現在の行で改行しないでください。 I / …

7
信号中断クイン
Quiningには長い歴史があります。聞いたことがない場合は、タグをクリックして少し読み上げてください。 あなたのタスク の無限級数を出力します 1 sを(他のスペース[改行、スペースなど]なし)UNTIL SIGINT(通常はCTRL-C)が呼び出されます。呼び出されたら、プログラムソースを出力します。 ルール 有効なクインでなければなりません: ディスクからの読み取りソースがありません。 カインに関連する他のすべての標準的な抜け穴を参照してください。 任意の言語を使用できます。 これはコードゴルフなので、最短の回答が勝ちます!
12 code-golf  quine 

1
月曜日のミニゴルフ#7:成分測定の簡素化
月曜日のミニゴルフ:毎週月曜日に(願わくば!)投稿された一連の短いコードゴルフチャレンジ。 遅れてすみません。私は、それが複製であるという別のアイデアを書き出す過程の90%を実現しました。 私の家族はかなり大きいので、たくさんの食べ物を食べます。十分な食料を作るには、通常、2倍、3倍、または4倍のレシピが必要です。しかし、測定値を乗算することは苦痛になる可能性があるため、これを行うプログラムを用意しておくと便利です。 チャレンジ あなたの挑戦は、数値Nと文字Lとして測定値を取り込んで、できるだけ単純化された同じ測定値を返すプログラムまたは関数を作成することです。必要な測定単位(すべて私の家族と同じようにアメリカ人)とそれに対応する文字は次のとおりです。 1 cup (c) = 16 tablespoons (T) = 48 teaspoons (t) 1 pound (l) = 16 ounces (o) 1 gallon (g) = 4 quarts (q) = 8 pints (p) = 128 fluid ounces (f) 「可能な限り簡素化」とは、次のことを意味します。 可能な限り最大の測定単位を使用します。各ユニットには、1 / 4、1 / 3、1 / 2、2 / 3、または3/4の残りがあります。 必要に応じて、結果を混合数値に変換します。 …

3
バルキングシーズンです
私のジムのバーベルは次のように見えます。 =========[]-----------------------[]========= 5種類のサイズ、2.5ポンド、5ポンド、10ポンド、25ポンド、45ポンドのプレートを保持できます。 . . ! | . ! | | | | | | | | ' ! | | | ' ! | ' 安全のために、クリップがある]場合[はすべてのプレートの外側にもクリップを追加します。バー自体の重さは45ポンドです。常に、最も重いプレートを中央に最も近く、プレート間に隙間がないように配置し、両側に同じプレートを配置します。また、可能な限り最小数のプレートを常に使用します。たとえば、1つの10ポンドのプレートではなく、片側に2つの5ポンドのプレートを使用することはありません。したがって、215ポンドを持ち上げたい場合、私のバーは次のようになります。 . . .!| |!. !||| |||! ====]||||[]-----------------------[]||||[==== !||| |||! '!| |!' ' ' コード、関数、または完全なプログラムは、45〜575の整数(常に5の倍数)を取り、その重みを合計するバーを出力する必要があります。例えば: 入力: 45 出力(空のバーにクリップがないことに注意してください): =========[]-----------------------[]========= 入力: 100 出力: ! ! …

4
ソーベルエッジ検出器
あなたの仕事は、入力画像を取得し、エッジ検出を実行して出力画像になるプログラムを作成することです。 エッジ検出は次のように機能します(不明な場合は、sobelエッジ検出を参照してください)。 ピクセルの値はピクセルの合計輝度であるため、カラーの場合は、まずグレースケールに変換する必要があります(物事をシンプルかつゴルフ対応にするために、R、G、およびB)。 ピクセルp (i、j)の G xおよびG yの式は次のとおりです。 G x = -1 * p (i-1、j-1) -2 * p (i-1、j) -1 * p (i-1、j + 1) + 1 * p (i + 1、j -1) + 2 * p (i + 1、j) + 1 * p (i + 1、j + 1) G …

8
多次元ラベルの組版
スチームパンクな多次元の世界では、上司はコングロマリットの多次元ファイルキャビネットの各引き出しに印刷されたインデックスラベルを貼り付けたいと考えています。 ボスは、この目的のためだけに購入したフォントを使用して、ラベルシート全体を単一のフォームとしてタイプセットしたいので、ソート(金属記​​号の断片)を注文する必要があります。ソートは非常に高価であるため、注文は各数字記号の正確なカウントのためでなければなりません。 与えられた(とにかく)次元≥0の長さのセットに対して、すべてのデカルト座標をタイプセットするのに必要な桁の頻度表である順序を(とにかく)返します。キーボードの出現順に並べる必要があります(つまり、9の後の0)。また、並べ替えがまったく行われない場合(次元の長さが0であるため)、並べ替え0の順序は含まれません。何も印刷しません。 コードが0次元も処理できる(つまり何も印刷しない)場合、-3のボーナスがソートされます。 最終的な改行文字は許容されます。 標準的な抜け穴の禁止が適用されます。 前述のように、ソートは高価なので、これはcodecolfです。 親切な魂は、この課題を編集して自動スコアリングを含めることができるため、次のようなヘッダーを含めます。# LanguageName, 123 sorts テストケース 与えられた11、印刷: 1 4 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 0 1 必要なラベルがあるため1、2、3、4、5、6、7、8、9、10、と11。 与えられた2 3、印刷: 1 5 2 5 3 2 必要なラベルがあるため1 1、 1 2、 1 3、 2 1、 …

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