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

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

16
短い真実を偽造する
ブール値のリストでtrueの最長実行を見つけます。他のすべての真偽を偽造して、同じリストを返します。 入出力 リスト; 通常の形式(たとえば、文字列として区切られたリスト)。 詳細 真と偽は、言語がこれらの値に通常使用するもの、または整数1と0です。単一の文字を使用する場合、リストは連結(例:)にすることができます10001。 最長の実行に同点がある場合は、すべての同点の実行を真に保ち、すべての短い実行を偽造します。 例 input ↦ output 1,0,1,0,1 ↦ 1,0,1,0,1 1,1,0,1,1,0,1 ↦ 1,1,0,1,1,0,0 1,1,0,1,1,1,0,1,1 ↦ 0,0,0,1,1,1,0,0,0 1,1,1 ↦ 1,1,1 0,0,1 ↦ 0,0,1 0,0 ↦ 0,0 1,1,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,1,1,1,0,0,1,0 ↦ 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0 (https://stackoverflow.com/q/37447114から直接)

22
指数をASCIIアートに変換する
仕事 あなたの仕事は、このような文字列を変換することです: abc^d+ef^g + hijk^l - M^NO^P (Ag^+) このような文字列へ: d g l N P + abc +ef + hijk - M O (Ag ) これはabc d + ef g + hijk l -M N O P(Ag +)の近似値です つまり、キャレットのすぐ隣の文字を上の行に移動します。キャレット1つにつき1文字です。 スペック 出力で余分な末尾の空白を使用できます。 チェーンされたキャレットm^n^oは入力として提供されません。 キャレットの直後にスペースまたは別のキャレットが続くことはありません。 キャレットの直前にはスペースが付きません。 すべてのキャレットの前には少なくとも1つの文字があり、その後に少なくとも1つの文字があります。 入力文字列には、印刷可能なASCII文字のみが含まれます(U + 0020-U + 007E) 2行の出力の代わりに、2つの文字列の配列を出力できます。 …

8
最大公約数を視覚化する
バックグラウンド 最大公約数(略してgcd)は便利な数学関数です。多くの有用な特性を持っているからです。そのうちの一つがあるベズーの等式:場合はd = gcd(a, b)、その後、整数が存在するxとy、そのようなことをd = x*a + y*b。この課題では、タスクは単純なASCIIアートでこのプロパティを視覚化することです。 入力 入力は、2つの正の整数aとでb、適切な形式で指定されます。単項入力(選択可能な単一の印刷可能なASCII文字の繰り返し)を使用することもできますが、両方の入力に一貫性があり、同じ形式を使用する必要があります。入力の順序は任意で、同じでもかまいません。 出力 出力はs長さの文字列ですlcm(a, b) + 1(lcmは最小公倍数を表します)。の文字はsから0までの整数を表しますlcm(a, b)。文字s[i]は、またはの倍数のo場合iは小文字で、それ以外の場合はピリオドです。ゼロはすべての数値の倍数であることに注意してください。現在、Bézoutのアイデンティティにより、距離が正確にである文字のペアが少なくとも1つあります。そのような左端のペアは大文字のsに置き換えられます。これが最終出力です。ab.osgcd(a, b)O 例 入力a = 4とを考慮してくださいb = 6。その後、我々は持っているgcd(a, b) = 2とlcm(a, b) = 12、程度の長さはsになります13。aおよびの倍数は、b次のように強調表示されます。 0 1 2 3 4 5 6 7 8 9 10 11 12 o . . . o . o …

25
多次元配列のインデックス
CやC ++などの低レベル言語には、実際には多次元配列の概念がありません。(ベクトルと動的配列以外)で多次元配列を作成する場合 int foo[5][10]; これは実際には単なる構文糖です。Cが実際に行うのは、5 * 10要素の単一の連続した配列を作成することです。この foo[4][2] また、構文糖です。これは実際に次の要素を指します 4 * 10 + 2 または、42番目の要素。一般に、要素のインデックス[a][b]の配列では、foo[x][y]です a * y + b 同じ概念が3D配列にも適用されます。foo[x][y][z]要素があり、要素[a][b][c]にアクセスする場合、実際に要素にアクセスします。 a * y * z + b * z + c この概念は、n次元配列に適用されます。次元を持つ配列があり、D1, D2, D3 ... Dn要素にアクセスする場合S1, S2, S3 ... Sn、式は (S1 * D2 * D3 ... * Dn) + …

30
Lithp Tranthlator
私の友人は先日、Lispトランスレータを作成しました。つまり、文字列を取り、s => thとS => Thに変換しました。かなり長く、ゴルフができると思った。 したがって、タスクは、入力文字列を受け取り、それをlispに変換して出力するプログラム/関数を作成することです テストケース Sam and Sally like Sheep Tham and Thally like Thheep Sally likes sausages Thally liketh thauthageth Sally sells seashells Thally thellth theathhellth hが常に繰り返されることは重要ではないことに注意してください。 これはコードゴルフなので、最短の回答が勝ちます
28 code-golf  string 

30
同じ場所で大文字化を維持しながら文字列を反転します
ここでの目標は、1つのひねりを加えて文字列を単純に逆にすること です。同じ場所に大文字を保持します。 入力例1:Hello, Midnightas 出力例1:SathginDim ,olleh 入力例2:例の.Q 出力2:q. ルール: STDOUTへの出力、STDINからの入力 優勝者は7月13日GMT + 3 12:00(1週間)に選出されます 入力はASCIIシンボルのみで構成されている場合があり、非ASCII文字を含むエンコードを使用しないプログラムで簡単に使用できます。 大文字があった位置で終わる句読点は無視する必要があります。
28 code-golf  string 

30
単純な整数演算計算機
単純な整数演算のスクリプト可能な計算機を実装します。 概念 アキュムレータは0から始まり、操作が実行されます。プログラムの最後に、アキュムレーターの値が出力されます。 操作: +1アキュムレータに追加します -1アキュムレータから減算します * アキュムレータに乗算します 2 / アキュムレータを除算します 2 サンプルスクリプト 入力++**--/は出力を与えるべき3です。 実装例 def calc(s) i = 0 s.chars.each do |o| case o when '+' i += 1 when '-' i -= 1 when '*' i *= 2 when '/' i /= 2 end end return i end …

18
あるかどうか
可能な限り少ないバイトで、指定された2つの値が次のいずれかに一致するかどうかを判断します。 最初の値 2 string or integer - whichever you prefer to case insensitive too case insensitive two case insensitive t0 case insensitive (t zero) 二番目の値 b case insensitive be case insensitive bee case insensitive b3 case insensitive 例 2 'Bee' true '2' 'b' true 'not to' 'be' false 'that is' …
28 code-golf  string 

30
入力がデジタル和である入力よりも大きい最小数を見つける
「デジタル合計」とは、数字のすべての数字の合計を指します。 例えば、デジタルの合計が1324ある10ので、1+3+2+4 = 10。 課題は、デジタル合計が入力である入力よりも大きい最小数を計算するプログラム/関数を作成することです。 ウォークスルーの例 例9として、入力として数値を使用します。 9 = 1+8 -> 18 9 = 2+7 -> 27 9 = 3+6 -> 36 ... 9 = 8+1 -> 81 9 = 9+0 -> 90 有効な出力は、上記の最小数であるになります18。 スペック 9反転した数値は元の数値よりも大きくなければならないため、この例では有効な出力ではないことに注意してください。 入力は正になることに注意してください。 テストケース: 2 => 11 (2 = 1 + 1) 8 => 17 (8 …

19
ASCIIラダーを作成する
2つの整数nおよびmの入力が与えられた場合、長さnおよびサイズmの ASCIIラダーを出力します 。 これは、長さ3およびサイズ3のASCIIラダーです。 o---o | | | | | | +---+ | | | | | | +---+ | | | | | | o---o これは、長さ5、サイズ1のASCIIラダーです。 o-o | | +-+ | | +-+ | | +-+ | | +-+ | | o-o これは、長さ2およびサイズ5のASCIIラダーです。 o-----o | | | | | …

3
左への4つのステップ:バイパー。右への4つのステップ:崖。死ぬな!
前書き バイパーと崖が3つではなく、わずか2ステップの距離にあるとします。 o --- Hsss! | ';;' ___ /_\ ___ _ | 残念ながら、あなたはサディスティックな拷問の虜です。ターンごとに左または右に一歩踏み出す必要があります。そうしないと、彼らは即座にあなたを射殺します。事前にステップを計画することはできますが、最初のステップを踏んだ後は、計画を変更することはできません。(また、どろぼうもありません。彼らはあなたを撃ちます。) 突然、明るいアイデアが思い浮かびます... あ!左右に交互にステップすることができます!右ステップ、左ステップ、右ステップ、左ステップなど... ああああああ、それほど速くない。私が言ったように、拷問はサディスティックです。彼らはあなたがすべての一歩を踏み出すか、2番目の一歩を踏み出すか、3番目の一歩を踏み出すかなどを選択することができます。そのため、単純にシーケンスを選択すると、RLRLRL...から始まる2番目のステップを実行するように強制できますLL。ええとああ!あなたは毒蛇に噛まれました!闇があなたを襲い、他のすべては消え去ります... 実際には、あなたはまだ死んでいません。あなたはまだあなたの計画を考え出す必要があります。数分間それについて考えた後、あなたは運命にあることに気づきます。あなたの生存を保証する一連のステップを計画する方法はありません。あなたが思いつくことができる最高のものですRLLRLRRLLRR。1 11の安全なステップとそれ以上。12番目のステップがの場合、Rトーチャーはすべてのステップを実行し、最後の3つのステップは崖からあなたを送り出します。12番目のステップがの場合、L拷問者は3番目ごとのステップ(LRLL)を実行させます。 あなたRは、あなたの終pick をできるだけ長く遅らせることを望んで、12番目のステップとして選びます。風があなたの耳に響き渡ると、あなたは自分自身に疑問に思います... 3つのステップがある場合はどうなりますか? スポイラー警告! あなたはまだ死ぬでしょう。結局のところ、歩数がいくつであっても、どの選択を行っても、致命的な運命を確実に満たすためにTorturerが選択できる一連のステップがあるという点があります。2ただし、毒蛇と崖が3歩離れている場合、合計で1160歩の安全な歩を歩むことができ、4歩離れている場合、少なくとも13,000歩の安全な歩があります!3 チャレンジ 単一の整数を指定すると、崖と毒蛇が4ステップ離れていると仮定して、安全なステップのn < 13000シーケンスを出力しnます。 ルール 完全なプログラムまたは関数のいずれかです。 入力は、STDINまたは同等のものを介して、または関数の引数として取得できます。 出力は持っている必要があります二つの異なる文字(することができ+/-、R/L、1/0、など)。 出力内の空白は関係ありません。 ソリューションのハードコーディングは許可されていません。それはこの挑戦を平凡にするでしょう。 プログラムは(理論上)十分な時間で終了するはずです。たとえばn=13000、1か月ほどかかりますが、1000年以上かかることはありません。つまり、総当たりはありません。(まあ、少なくともしようとし、それを避けるために。) ライフボーナス:一連の2000安全な手順を提供します。これを行うと、拷問者はあなたの粘り強さ、忍耐力、そして先見の明に非常に感銘を受け、彼らはあなたを生きさせます。一度だけ。(このシーケンスを2進数として扱い、検証用に10進数を提供します。これは、回答に非常に長い時間がかかるため、すぐに終了する回答に報いることを目的としています。) スコア:バイト、ボーナスの資格がない場合-0.75を掛けます。 生き残ります! 1 Numberphileのスターの1人であるJames Grimeによるこの問題と「解決策」の説明は、https://www.youtube.com/watch?v = pFHsrCNtJu4のYouTubeチャンネルにあります。 2エルドスの矛盾問題として知られるこの80年の推測は、ごく最近テレンスタオによって証明されました。これについては、Quanta Magazineの非常に素晴らしい記事をご覧ください:https : //www.quantamagazine.org/20151001-tao-erdos-discrepancy-problem/。 3出典:Bordo KonevとAlexei LisitsaによるErdos 不一致推測に対するSAT攻撃。ここから取り出さ:http://arxiv.org/pdf/1402.2184v2.pdf。

30
バイト/文字
仕事 すべての要素が対応する入力文字をエンコードするために使用されるバイト数であるUTF-8文字列を(何らかの手段で)答え(あらゆる手段で)与えられる同等のリスト。 例 ! → 1 Ciao → 1 1 1 1 tʃaʊ → 1 2 1 2 Adám → 1 1 2 1 ĉaŭ→ 2 1 2(単一文字) ĉaŭ→ 1 2 1 1 2(オーバーレイの組み合わせを使用) チャオ → 3 3 3 (空の入力)→ (空の出力) !±≡𩸽 → 1 2 3 4 (ヌルバイト)→ 1 ヌルバイト …

23
デジタルトライアングルでまとめる
まあ、本当にそれを要約します。 10進整数の空でないリスト(0-9)を取り込んで、最初の行の後のすべての数字が2桁の合計である入力リストを上部に持つ数字の下向きの「三角形」を出力するプログラムまたは関数を作成します。 10を法としてその上。 たとえば、入力に[7, 5, 0, 9]は出力があります 7 5 0 9 2 5 9 7 4 1 ためには、2ある(7 + 5) mod 10、5ある(5 + 0) mod 10、9ある(0 + 9) mod 10など、すべての方法1であること(7 + 4) mod 10。 リストに項目が1つしかない場合、出力は入力と一致します。例えばの入力[4]意志収率 4 追加の例を次に示します。 [0] 0 [1, 2] 1 2 3 [8, 7] 8 7 5 [0, …

10
ヘテログラム、パリンドローム、なんてこった!
(最初の課題は、問題があるかどうかを教えてください。) heterogramはアルファベットのない手紙が複数回発生していない、と言葉で回文が同じ前後にあるフレーズです。 ここでの課題は、単語(文字だけ)を入力として受け取り、それがヘテログラム(真実/偽)であるかどうかを出力するコードを書くことです。キャッチは、プログラムが回文である必要があるということです-同じ前後を読み取ります。ここでは大文字化は重要ではないため、ヘテログラムを有効にするには、たとえばqとQの両方を含めることはできません。コメントは許可されません。また、回文部分を簡単にするために、コード(またはコードの重要な部分)を含む文字列を配置することはできません:P これはコードゴルフなので、最短のコードが優先されます。がんばろう! 編集:パリンドローム部分については、左右の形の括弧、括弧、またはその他の記号を適切に反転する必要があります。(helloolleh)は回文ですが、(helloolleh(はそうではありません。これは便利な回文と呼ばれます。 編集2:空の入力、複数の単語の入力、または文字以外の文字の入力はありません。だからそれを心配しないでください:)

2
BrainfuckをMarioLANGに変換する
MarioLANGは、ソースコードがスーパーマリオブラザーズレベルに似ている2次元プログラミング言語です。さらに、その命令セットはBrainfuckのものと非常に似ています。つまり、MarioLANGは本質的に、命令ポインターがマリオのように移動する2次元のBrainfuckです。だから、私は私のMarioLANGの提出を書いたとき、プログラミング言語クイズのために、私はBrainfuck変換することによって始めに「Hello、World!」という MarioLANGへのプログラム。これは非常に体系的なプロセスで可能であることに気づいたので、Brainfuck-to-MarioLANGコンパイラを作成しましょう。 注: MarioLANGの仕様は完全に明確ではないため、Ruby実装の解釈を想定しています。 以下のBrainfuckプログラムでプロセスを説明します。 ++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>. 印刷Hello!し、末尾に改行を付けます。 変換<および>to (および)、それぞれ: ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.). マリオが歩く床を追加します。 ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.). ======================================================================== 問題は、MarioLANGに[andのようなループがないこと]です。代わりに、エレベーターと方向指示を使用して、マリオを実際にループで歩く必要があります。まず、我々は交換する[と>とに、床を変更します"。また、フロアを次のように置き換え]て[!変更し=#ます。 ++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================ エレベーター(から始まる形成することができるで終わるが、今すべての私たちに必要なのは、)マリオに戻って歩くための補助床です。で始まり、で終わる:"##"!< ++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================ ! < #===============================" ! < #==========================================" インタプリタはエレベータの端を短い行に接続できないため、すべての行は少なくとも最大のループを囲む必要があります。したがって、中央の行にスペースを埋め込みます。 以上です。完全に機能する、同等のMarioLANGプログラムがあります。 チャレンジ 有効なBrainfuckプログラムが与えられたら、上記の手順を実装してMarioLANGプログラムにコンパイルします。 入力にはコマンド文字のみ、つまり以外の文字はないと想定でき,.+-<>[]ます。 すべての補助フロアは、メインプログラムフロアのできるだけ近くに配置する必要があります。中間フロアのラインをできる限り小さくする(最大の囲みループの幅まで)か、メインプログラムの最後までパディングするかを選択できます。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。結果をSTDOUTに出力しない場合でも、改行で区切られた単一の文字列である必要があります。 これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。 テストケース テストケースの形式は次のとおりです。最初の行はBrainfuckプログラム(入力)で、空の行があり、次の空の行までがMarioLANGの期待される出力です。これらの例では、最小限の埋め込みスペースを使用しています。あるいは、出力の最初の行の幅まで各行にスペースを埋め込むこともできます。 >,++-.< ),++-.( ======= ,[.,] ,>.,[! ="===# ! < #===" >>[-]<<[->>+<<] ))>-[!((>-))+(([! =="==#=="=======# ! < ! …

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