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

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

3
ASCIIアートで長い追加を視覚化する
ASCIIアートによる長い分割の視覚化にまったく触発されていない;) あなたの仕事は、ASCIIアートを使った長い手の追加を示すことです。列を右から左に加算して結果に1の値を配置し、10の位を次の列の最上部に持ち越すことにより、ロングハンド加算を解決します。 入力 入力は、入力として2〜9個の数字を使用する限り、基本的に任意の形式で入力できます。 出力 ここでの書式設定は、学校での学習方法と一致する可能性があります。 carry row number1 number2 ... + numX -------- result ここには、必要な量の末尾の空白を含めることができます;) 例 50, 50 1 50 +50 --- 100 1651, 9879 1111 1651 +9879 ----- 11530 6489789, 9874, 287 1122 6489789 9874 + 287 -------- 6499950

3
このポリゴンにはいくつの辺がありますか?
したがって、1年生の数学では、ポリゴンの名前を学びます。3つの辺は三角形、4は正方形、5は五角形です。ただし、1年生の栄誉では、もう少し先に進みます。 あなたの挑戦 いくつかの辺より上のポリゴンには命名システムがあるため、任意の大きなポリゴンには名前があります。 あなたの仕事は、プログラムや機能書くことで入力としてポリゴンの名前を受け入れると辺の数を出力ことがあります。 ポリゴンの名前は、いくつかの例外を除き、このウィキペディアの記事の左の列に定義されています。 3辺の多角形は、三角形ではなく三角形と呼ばれ、4辺の多角形は、四角形ではなく正方形になります(すべての多角形が規則的であると仮定します)。それ以外の場合、記事の名前が使用されます。 ルール 入力は文字列値になります。 プログラムは結果をSTDOUTに出力する必要があります(または整数を返す必要があります)。 3〜99のポリゴンのみが入力されます。 プログラムはすべてのテストケースを満たす必要があります。 標準的な抜け穴はありません。 プログラムは、無効/範囲外の入力に対して何もする必要はありません。 スコアリングはバイト単位です。これはcode-golfであるため、最短のプログラムが優先されます。 テストケース 3 triangle 4 square 5 pentagon 10 decagon 11 hendecagon 12 dodecagon 13 triskaidecagon 20 icosagon 21 icosikaihenagon 22 icosikaidigon 34 triacontakaitetragon 35 triacontakaipentagon 36 triacontakaihexagon 47 tetracontakaiheptagon 48 tetracontakaioctagon 49 tetracontakaienneagon 64 hexacontakaitetragon 80 …

1
SASマクロ変数を解決する
SASプログラミング言語は、まだ使用中今日の1966年に不格好、古風な言語デートバックです。元のコンパイラはPL / Iで記述されており、実際、構文の多くはPL / Iから派生しています。SASには、PL / Iの言語から派生したプリプロセッサマクロ言語もあります。この課題では、SASマクロ言語のいくつかの単純な要素を解釈します。 SASマクロ言語では、%letキーワードを使用してマクロ変数が定義され、ログへの出力はで行われ%putます。ステートメントはセミコロンで終わります。ここではいくつかの例を示します。 %let x = 5; %let cool_beans =Cool beans; %let what123=46.lel"{)-++; マクロ変数名は大文字と小文字を区別せず、常に正規表現と一致します/[a-z_][a-z0-9_]*/i。この課題のために、次のように言います。 マクロ変数は、印字可能なASCII文字のみで完全に成るの値を保持することができます以外に ;、&と% 値に先頭または末尾のスペースはありません 値は255文字を超えることはありません 値は空かもしれません 値の中の括弧と引用符は一致しない場合があります そこの前後にスペースの任意の量であることができる=で%let声明と、このスペースは無視されるべきです ステートメント;内の端末の前に任意の量のスペースがあり%let、このスペースも同様に無視する必要があります マクロ変数が呼び出されるとき、その値に「解決」すると言います。マクロ変数は、先頭に付加することで解決され&ます。識別子の終わりを示すオプションの末尾があり.ます。例えば、 %put The value of x is &X..; The value of x is 5.ログに書き込みます。1つの期間がに消費され&X.、解決されるため、2つの期間が必要であることに注意してください5。またx、小文字で定義したにもかかわらず、マクロ変数名では大文字と小文字が区別されないため&X、同じ&xです。 ここで注意が必要です。複数&のを一緒に連結して変数を解決&し、同じレベルのネストを同時に解決できます。例えば、 %let i = 1; %let coolbeans1 = broseph; …

3
点を結びます
oドットを表す一連のsが与えられたら、それらを垂直または水平に接続します 例 入力: o o o 出力: o---o | | o 入力: o o o o 出力: o---o----o | o スペック 入力をスペースで埋めて長方形を形成する場合は、回答でこれを指定してください o入力には、スペース、改行のみが含まれます 接続するドットのペアが常にあります 2つoは直接隣接しません ドットは|および-で接続する必要があり、それぞれ垂直および水平接続 ドット接続は重なりません

7
最適な引き戸幅を見つける
スライディングドアの価格は、ドアの幅に応じて異なります。異なる価格は次のとおりです。 60-80 cm:¤150 81-100 cm:¤200 101-120 cm:220 クローゼットを購入するときは、明らかにコストを最小限に抑えたいので、クローゼットの総幅に基づいて総コストを最小化するドアの幅を見つけることがタスクです。 ルール: 合計幅が入力として取得されます すべてのドアは同じ幅になります 2種類のドアのコストが同じ場合、最小のドアを選択してください 幅はセンチメートルで、整数は小数ではありません 小数を切り上げる 価格は整数として返されます(通貨記号は不要です) 入力および出力形式はオプションですが、出力の順序は次のとおりでなければなりませんNumber of doors, Width, Price。 入力はの範囲になります[120 1000)。 これはコードゴルフです。バイト単位の最短コードが勝ちます。 例: Input: 156 Output: 2, 78, 300 Input: 331 Output: 3, 111, 660 Input: 420 Output: 4, 105, 880

4
豚シリーズを解釈する
Pig、 SickPig、DeadPig、 QuinePig、または DeafPigプログラムの入力が与えられたら、 それらの「言語」のいずれかをランダムに選択し、入力をその「言語」として解釈します。 まず、「豚シリーズ」の5つのメンバーのいずれかをランダムに選択します。 豚 選択肢が豚だった場合、以下を実行して参照インタープリターを模倣します。 PIG入力で最初に出現する単語を検索します(大文字と小文字を区別します)。 単語PIGが入力に表示されない場合は、メッセージFile must contain the string 'PIG'.を出力して 終了します。 それ以外の場合は、入力文字列をの最初の出現時に分割しますPIG。最初に出現した後のテキストを、PIG前のテキストのファイル名を持つファイルに出力しますPIG。 PIG出力されるテキストに含まれている可能性があります(したがって、の入力は というファイルにfooPIGbarPIGbaz出力barPIGbazする必要がありますfoo)。 参照インタープリターは、読み込むファイル名を指定するコマンドライン引数を介して入力を受け取ることに注意してください。ただし、PPCGで受け入れられている標準的な方法のいずれかで提出することができます。 シックピッグ SickPigを選択した場合は、Pigと同じ指示に従ってください。ただし、PIGファイルの後にテキストを書き込む代わりに、次のリストからランダムに選択します GRUNT MOAN OINK BURP GROAN WHINE 代わりにファイルに出力します。このランダムな選択は、前の選択とは独立している必要があります(したがって、の出力にGRUNTは全体で1/5 * 1/6 = 1/30のチャンスがあります)。 DeadPig DeadPigはSickPigに似ていますが、文字列をランダムに選択する代わりに、常に次の文字列を出力します。 Your pig has unfortunately died. Please try again. QuinePig QuinePigはPigに似PIGていますが、テキストをファイルに書き込む代わりに、入力全体をファイルに書き込みます(したがって、の入力は というファイルにfooPIGbarPIGbaz出力fooPIGbarPIGbazする必要がありますfoo)。 DeafPig 選択肢がDeafPigの場合、何もしません。(ブタは耳が聞こえません...何を期待しますか?) その他の規則: 「ランダム」とは、それぞれの選択肢がほぼ同じ確率である必要があることを意味します(したがって、Pigを選択するのは90%の時間であり、他のバリアントを選択するのは2.5%の時間だけが無効です)。 …

3
ピッチでのサッカーチームの編成を示す
サッカーは、プレーヤーがボールを蹴るのではなく、蹴るスポーツです。一部の混乱した個人は、このサッカーを呼ぶかもしれません。 サッカーチームには、ゴールキーパーが1人、ピッチに10人の選手がいます。サッカーでは多くのフォーメーションが使用されており、各プレーヤーの位置が決まります(もちろんプレーヤーは動き回りますが、それは基本位置です)。 最も一般的なフォーメーションは4-4-2です。つまり、4人のディフェンダー、4人のミッドフィールダー、2人の攻撃者がいます。その他のフォーメーション(「ディフェンダー、ミッドフィールダー、攻撃者」または「ディフェンダー、ミッドフィールダー、ミッドフィールダー、攻撃者」): 4-4-2 4-3-3 5-3-2 3-4-3 3-5-2 4-5-1 5-4-1 4-4-1-1 4-3-1-2 4-1-2-3 4-1-3-2 4-3-2-1 3-4-1-2 3-3-3-1 課題は、2つのチームのそれぞれに1つずつ、2つの入力を取得し、フィールド上の選手の概要を出力することです。 一般的に、ASCIIアートのレイアウトに関するほとんどの情報は図にあります(図は1000語以上を示しています)。10人のプレーヤーをフィールドに配置する方法のみを詳細に説明します。 キーパーとペナルティエリアは、ASCII文字の3行を占有します 下の図にレイアウトとスペースの数を示します ペナルティエリアとディフェンダーの間に空の行はありません フォーメーションに3つの数字がある場合(4-4-2、4-3-3など。4-3-2-1ではありません): ディフェンダーとミッドフィールダーの間に空の列はありません ミッドフィールダーと攻撃者の間に1つの空の行があります フォーメーションに4つの数字がある場合(例4-4-2-1、3-3-3-1など。4-4-2ではない): ディフェンダーとミッドフィルダーの最初の列の間に空の列はありません ミッドフィルダーの最初の行と2番目の行の間に空の行はありません ミッドフィールダーの2列目と攻撃者の間に空の列はありません 攻撃者と中心線の間に空の行はありません 上半分のチームはとしてマークされx、後半のチームはとしてマークされoます。 プレーヤーの各列は、下の図に示すようにピッチ上に配置されます。スペースの数は図で見ることができます。 次の図は有効なフォーメーションを表すものではありませんが、各プレーヤー間のレイアウトと必要なスペースの数を示すために使用されます。これに対する入力は2 3 4 5andになり5 4 2ます。 +-----------------+ | | x | | | +-----+ | | x x …

7
年の日数を計算する
私たちはまだこれを持っていないようですので、ここに行きます: チャレンジ 入力として日付を取り、年の日番号を出力するプログラムまたは関数を作成します。そのためにビルトインを使用することはできません! ルール 通常どおり、完全なプログラムまたは関数を作成できます。 入力の形式はユーザー次第ですが、年、月、日を含める必要があります。ソリューションで使用しているものを明確にしてください! 日付関連のビルトインは許可されていません!自分で作業を行う必要があります。日付操作に関係しないビルトインは問題ありません。 計算のベースはグレゴリオ暦です。 うるう年を考慮する必要があります。 [1、9999]の範囲の年のみを処理する必要があります 標準的な抜け穴は禁止されています。 最も少ないバイト数が勝ちです! テストケース ここでの入力形式はYYYY / MM / DDです 2016/07/05 -> 187 2000/03/28 -> 88 0666/06/06 -> 157 6789/10/11 -> 284 0004/04/04 -> 95 1337/07/13 -> 194 ハッピーコーディング!
13 code-golf  date 

4
算術式を使用して特定の大きな整数を表現するための戦略
特定の数を念頭に置いていますが、それは私がしている挑戦の一部です。 以下は、同じ数字ですがシャッフルされた数字です。 5713167915926167134578399473447223554460066674314639815391281352328315313091488448321843 8892917486601064146636679920143691047671721184150386045081532202458651561779976236919751 5521854951599379666116678853267398393892536121049731949764192014193648608210652358947001 6332620900065461061195026191178967128001712341637591690941978871368243245270800684616029 6679555942849366434586090627998161441134473428845367022486230724219981658438108844675033 4461550796750244527407413996606134735852639191026103378962082622204359677030054592798927 4145951979523473408718011778751084514127053772614511042703365596651912104541233491744530 87457854312602843967491787086250478422477028164189 数字は666桁(10進数)です。Pythonを使用しているため、整数(または技術的に長い)は自動的にbignumです。 使用する255文字があり、同じ番号を記述する必要があります。説明は、元の数値を生成するためにeval()を実行することを意図しています。 どの戦略を検討すべきですか?

3
数学記号を解読する
Carl Saganの「 Contact」という本を読んだことがあれば、この課題はおなじみかもしれません。 数、未知の演算子、別の数、および結果で構成される一連の数学方程式の入力が与えられると、どの演算子が加算、減算、乗算、または除算を表すかを推測します。 各入力方程式は常に 負でない整数 文字の1 A、B、C、またはD 別の非負整数 キャラクター = 最終的な非負整数 連結されます。たとえば、可能な入力はであり1A2=3、そこからA加算を表すと推定できます。各整数はを満たし0 ≤ x ≤ 1,000ます。 ただし、必ずしもそれほど単純ではありません。次の間にあいまいさが存在する可能性があります。 5A0=5:加算/減算 1A1=1:乗算/除算 0A5=0:乗算/除算 2A2=4:加算/乗算 4A2=2:減算/除算 0A0=0:加算/減算/乗算 等々。課題は、この機能を使用して選択肢を絞り込み、消去プロセスと組み合わせて、各文字が表す演算子を把握することです。(常に少なくとも1つの入力方程式があり、入力で使用される各文字を1つの演算子で明確に一意に一致させることが常に可能です。) たとえば、入力が次の方程式であるとします。 0A0=0:これは、Aを加算、減算、または乗算に絞り込みます(0で除算できません)。 10B0=10:Bは加算または減算のいずれかでなければなりません。 5C5=10:Cは明らかに加算であり、B減算を行い、A乗算を行います。 したがって、これらの入力方程式の出力は次と一致Aする必要があります。*、B と-、とCを有します+。 入力は、それぞれが1つの方程式を表す、単一の空白/コンマ区切りの文字列または文字列の配列として指定できます。出力は単一の文字列("A*B-C+")、配列(["A*", "B-", "C+"])、または辞書/辞書のような2D配列({"A": "*", ...}または[["A", "*"], ...])のいずれかです。 数値が割り切れない別の数値で除算されることはないと想定できます(したがって、除算を浮動小数点にするか切り捨てるかを心配する必要はありません)。 これは code-golfであるため、バイト単位の最短コードが優先されます。 テストケース: In Out ------------------------------- 0A0=0 10B0=10 5C5=10 A*B-C+ 100D100=10000 …

2
ロジバンの有効な子音クラスターですか?
.i xu .e'o lo zunsnagri cu drani loka jboge'a 2文字で構成される文字列の入力が与えられた場合、それがロジバンの有効な子音クラスタであるかどうかを出力します。 ここからの引用であるCLL 3.6(というか、有効な子音クラスタペアのための規則を詳述無効なもの): 1) It is forbidden for both consonants to be the same, as this would violate the rule against double consonants. 2) It is forbidden for one consonant to be voiced and the other unvoiced. The consonants “l”, “m”, …

3
GF(5)上の既約多項式
あるフィールド Fに係数を持つ多項式は、Fに係数を持つ低次の多項式の積に分解できない場合、F上の既約と呼ばれます。 ガロア体 GF(5)上の多項式を考えます。このフィールドには、5つの要素、つまり数字0、1、2、3、および4が含まれます。 仕事 正の整数nが与えられた場合、GF(5)上の次数nの既約多項式の数を計算します。これらは、0-4の係数を持つ多項式であり、0-4の係数を持つ他の多項式に因数分解することはできません。 入力 入力は単一の整数であり、任意の標準ソース(STDINまたは関数引数など)から取得できます。出力がオーバーフローしないように、最大​​整数までの入力をサポートする必要があります。 出力 GF(5)で既約な多項式の数を出力または返します。これらの数値はかなり速く大きくなることに注意してください。 例 In : Out 1 : 5 2 : 10 3 : 40 4 : 150 5 : 624 6 : 2580 7 : 11160 8 : 48750 9 : 217000 10 : 976248 11 : 4438920 これらの番号は、OEIS のシーケンスA001692を形成することに注意してください。

5
レピュテーションをフォーマットする
質問ページ/投稿から見ると、Stack Exchangeのさまざまなレピュテーションレベルの形式が異なることをご存じでしょう。すべてのrep-formattingルールがあります: ユーザーの担当者が1〜999(1〜3桁)の場合、そのままです。 ユーザーが1000〜9999担当者(4桁)の場合、コンマを区切り記号として受け取ります。 9,999 ユーザーの担当者が10000〜99999(5桁)の場合、短縮および丸められます。すなわち、16741担当者はとしてフォーマットされ16.7kます。下の担当者(前のポイント)のコンマとは異なり、ドット区切りに注意してください。 16750はすでに発生します16.8k(これは修正されているようです) 16941ので結果16.9kまで16950回、17kならびに、例えば、17014を行います。 99941ラウンド99.9k、99950ラウンド100k(これは、SEの担当者による丸めでは実際に嫌いなものです。100,000はそのようなマイルストーンであり、99950はどこにも近くないためです)。 ユーザーの担当者が100000〜999999の場合、次のように丸められます。 100100 100kは切り捨て、100500は切り上げ101kます。問題は、丸めは行われますが、小数部分は取り除かれることです(4桁の繰り返しとは異なります)。 100450は切り捨てられますが100k、450から500に切り捨てるステップはありません。100499も切り捨てません100k。 279843はに切り上げ280k、399999はに切り上げ400kます。 入力として、生の評判が与えられ、フォーマットされたものとして出力されます。 入力は、無効な数字/非数字、または先行ゼロのある数字、つまりを受け取らないと考えることができ0001234ます。 Jon Skeetはすぐに1,000,000に到達しないようですので、コードはできるだけ短くする必要があります。100万を超える担当者を処理する必要はありません(つまり、999500以上の特別なケースはありません)。
13 code-golf  number 

9
Quinean Regex Tester
この課題は非常に簡単です。入力として、正規表現を使用します。 次に、ソースコードが正規表現と一致するかどうかの真実/偽を出力します。とても簡単です!あと2つだけ: 馬のビルトインはありません。ただし、ファイルIOなどによりコードのソースコードにアクセスできます。 これはcode-golfなので、バイト単位の最短コードが勝ちです! 例 ソースコードがの場合abc、の入力はa\wctrueを返し、の入力はa\dcfalseを返します。

5
数学的置換
複数の入力を使用して数学の問題を実行すると便利な場合があります。この課題の目標は、このタスクを容易にするプログラムを作成することです。 数値生成式 3種類の式をサポートする必要があります。 単一の数値ジェネレーター:非常にシンプルで、単なるリテラルの数値 複数番号ジェネレータ:少し複雑です。これらは角括弧([])で囲まれています。数値は,、式内でコンマ()で区切られています。例[-1,2,3.26]。 範囲ジェネレーター:これは中括弧({})で囲まれています。カンマで区切られた3つの数字があります。この式の形式は{start,stop,step}です。startそしてstop包括的です。 評価のルール 操作の順序をサポートする必要があります。(https://en.wikipedia.org/wiki/Order_of_operations#Definition) 括弧をサポートする必要はありません。 式には任意の数のスペースを入れることができます。 浮動小数点数をサポートする必要があります(言語のデフォルトの精度は問題ありません)。 0結果による除算NaN(数値ではない)。 プログラムは*、乗算()、除算(/)、加算(+)および減算(-)をサポートする必要があります。 出力 出力の各行は、ジェネレーターの組み合わせの1つです。形式は、式(それに置換される実数を含む)の後に等号(=)と評価の結果が続きます。ジェネレーターのすべての組み合わせは、出力で表す必要があります。 例 (>>>入力を示す) >>>3 * [3,2] 3 * 3 = 9 3 * 2 = 6 >>>{1,2,3} 1 = 1 <-- this is because 1 + 3 > the end >>>{0,2,1} + {0,1,1} 0 + 0 …
13 code-golf  math 

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