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

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

15
任意の(制限された)無限集合とその順序付けられていないペアの間の可換単射関数を設計する
関連するが、これは正の整数のみを必要とし、可換である必要はない Cantorペアリング関数は、このウィキペディアの記事で説明されています。基本的に、2つの値XとYに適用されると、結果が与えられて元の値XとYを取得できるような操作です。 あなたの仕事は、実行する機能と実行する機能の2つの機能を設計X, Y -> ZすることZ -> X, Yです。キャッチは次のとおりX, Y -> Zです。可換でなければなりません。これはZ -> X, Y、入力がX, Yまたはであったかどうかを判断できないことを意味しますY, X。 この課題の正式な定義は次のとおりです。 カウント可能な数の無限集合Sを選択します。 次のタスクを実行する2つの関数を設計します。 Sの値の順序付けられていないペアを指定すると、Sの値を返します 初期関数からの戻り値を指定すると、最初の関数を通過したときに入力整数に評価される値の順序付けられていないペアを返します。入力が最初の関数からの戻り値でない場合、この逆関数の動作は気にしません。 必要条件 結果は実行間で同一である必要があります。 {a, a} 順不同のペアです 注:証拠を提供すると、あなたの答えは私から賛成票を受け取る可能性が高くなりますが、答えが得られたらテストし、それがうまくいくと確信したら票決します。

18
Japtでのゴルフのヒント
コードゴルフに完全に夢中になった今、おそらくいくつかのゴルフ言語を習得しようとしています。 JavaScriptでほぼ独占的にプレイしていることを考えると、Japtはそもそも論理的な言語のようです。次の機会にドキュメントに飛び込みますが、その間、以下の回答にJaptに関するヒントを投稿してください。 私は一般的にJaptとゴルフ言語の初心者なので、可能であれば、ヒントをJavaScriptに「翻訳」できれば、それが物事を理解するのに役立つ大きな助けになります。
18 code-golf  tips  japt 

23
nをnとともに表示する
私が欲しいもの: 簡単に言うと、入力を求めるテキストベースのディスプレイが必要でn、その値をディスプレイに表示します。しかし、キャッチがあります。「true」「pixels」(塗りつぶされたもの)のそれぞれは、その番号で表される必要がありnます 例: 入力が与えられますn。あなたはn1桁になると仮定することができます Input: 0 Output: 000 0 0 0 0 0 0 000 Input: 1 Output: 1 1 1 1 1 Input: 2 Output: 222 2 222 2 222 Input: 3 Output: 333 3 333 3 333 Input: 4 Output: 4 4 4 4 444 4 4 Input: …

2
囲まれているもの
私はいつもいくつかのテキストを#sで囲むことを望んでいましたが、私が何を囲んでいるかわからないので、この課題では、あなたはそれを行うプログラムを書くことになります 例 入力/出力は改行で区切られます。 ### #a# ### a # #a# # a ### # a # # b c # ####### a b c ABCDHIJ E####GK F# M #L # N#O P#### M N ###A### #C#B#o# #d###e# # go# ### C o d e go スペック #sはテキストのブロックを「囲む」ものです # 常に互いに隣接します(対角線を含む) # 常に閉じた形状を形成します …
18 code-golf  string 

5
この番号はランダムですか?
私は尋ねたrandom.orgを 0と2の間に128個のランダムな整数の32 - 1.乱数生成器は、最初の最初の64個の数字を与えてとても熱望していたので、彼らは明らかにしているよりランダム他の64より。 次の64個の整数のいずれかが入力されたときに、真の結果を返す完全なプログラムまたは関数を作成します。 [1386551069, 1721125688, 871749537, 3410748801, 2935589455, 1885865030, 776296760, 614705581, 3841106923, 434616334, 1891651756, 1128215653, 256582433, 310780133, 3971028567, 2349690078, 489992769, 493183796, 3073937100, 3968540100, 777207799, 515453341, 487926468, 2597442171, 950819523, 1881247391, 3676486536, 3852572850, 3498953201, 2544525180, 297297258, 3783570310, 2485456860, 2866433205, 2638825384, 2405115019, 2734986756, 3237895121, 1560255677, 4228599165, 3106247743, 742719206, 2409129909, 3008020402, 328113612, …

1
エニグママシンを実装する
Enigmaマシンは、ドイツ人などがメッセージを暗号化するために使用するかなり複雑な暗号マシンです。このマシンを実装するのはあなたの仕事です*。 ステップ1、回転 エニグママシンには、ローター用に3つのスロットがあり、これらの各スロットに5つの使用可能なローターがあります。各ローターには、26の異なる位置(A〜Z)があります。各ローターには、事前定義されたノッチ位置があります。 Rotor Notch ------------ 1 Q 2 E 3 V 4 J 5 Z キーを押すと、次の手順が発生します。 スロット1のローターが回転します スロット1のローターがノッチを通過すると、スロット2のローターが回転します。 スロット2のローターがそのノッチにある場合(ただし、そこに移動しただけではない場合)、ローター2と3の両方が1回転します。 私たちはローター1,3,5を使用していて、彼らは位置にある場合はP,U,H、その後位置の順序は次のとおりです。P,U,H> Q,U,H> R,V,H>S,W,I ステップ2、置換 各ローターは、単純な文字置換を実行します。以下は、A位置にある各ローターのチャートです。 ABCDEFGHIJKLMNOPQRSTUVWXYZ -------------------------- 1 EKMFLGDQVZNTOWYHXUSPAIBRCJ 2 AJDKSIRUXBLHWTMCQGZNPYFVOE 3 BDFHJLCPRTXVZNYEIWGAKMUSQO 4 ESOVPZJAYQUIRHXLNFTGKDCMWB 5 VZBRGITYUPSDNHLXAWMJQOFECK R YRUHQSLDPXNGOKMIEBFZCWVJAT 位置Tのローター1はPAIBRCJEKMFLGDQVZNTOWYHXUS、の代わりに文字Cを使用しIます。 3つのローターが置換を実行した後、リフレクターがヒットします(R上記のリストにあります)。独自の置換を実行し、信号をローターに反映します。次に、ローターは逆の順序で逆置換を実行します。 代わりに、1個の置換ロータの逆置換手段AとE、それは代入しEてA スロットには、すべての位置にあるローター1、2、3が充填されていAます。手紙はローターを通るQ経路Q>X>V>Mをたどります。 Mに反映しO、それはの逆経路をたどるO>Z>S>S。したがって、Aはに置き換えられSます。 入出力 合格しました: 3つのローターのリスト(整数として) 3つの開始ローター位置のリスト(文字として) 暗号化する必要がある文字列。 入力は整形式で、すべての文字はスペースでなく大文字であると想定できます。 …

4
パスをたどる
課題は、パスをたどる(描く)ことです。 ^n -n行ずつ vn -n行下へ >n -n文字分右 <n -n文字分左 nゼロより大きい整数です(つまり、などのコマンドを受け取ることはできません>-2)。 コマンド間に区切り文字はありません。整形式の入力は次のように>5v8<10^3なります。他の形式の入力は許可されません。 コマンドの数は無制限です。 入力に忍び寄るキャラクターはこれ以上いません。 例。 入力は空の文字列、出力は次のとおりです。 * 入力はまたはのいずれ>3か<3です。これは出力に違いをもたらさないことに注意してください。 **** ^3およびに類似v3: * * * * 入力:>1v2、出力: ** * * 入力:^4>3v2<1、出力: **** * * * ** * * 戻って同じパスを使用する場合は、新しいものを描画しないでください。例えば>5<5 ****** ...新しいものは何も描画しませんが、明らかに位置を変更します。したがって、入力が次のようになっている場合、出力は次のよう>4<2v3になります。 ***** * * * これはより複雑な例です。1)パスがそれ自体を横断できる2)最後のコマンドの最後の3つのステップがパス全体を右にシフトすることに注意してください。入力:v6>4^3<7、出力: * * * ******** * * * …

9
RNAからタンパク質への翻訳
RNAはDNAと同様に、遺伝情報をコードする細胞に見られる分子です。これはヌクレオチドで構成され、アデニン(A)、シトシン(C)、グアニン(G)およびウラシル(U)の塩基で表されます。* コドンは3つのヌクレオチドのシーケンスです。 タンパク質は、毛や爪に見られるケラチンや血球に酸素を運ぶヘモグロビンなど、膨大な機能を果たす大きな分子です。それらは、RNA分子のコドンとしてコード化されるアミノ酸で構成されています。異なるコドンが同じアミノ酸をエンコードする場合があります。通常、各アミノ酸は1文字で表されます。たとえば、Hはヒスチジンを表します。 のシーケンスが与えられた場合ACGU、対応するタンパク質文字列に変換できますか? * DNAはACGTで構成され、Tはチミンです。DNAからRNAへの転写中、チミンはウラシルに置き換えられます。 入力 入力はACGU、大文字の文字のみで構成される単一の文字列になります。このチャレンジのために、関数または完全なプログラムを作成できます。 出力 文字列を印刷または返すことで出力することを選択できます(後者の選択は、関数の場合にのみ使用可能です)。 翻訳は、開始コドン(AUGで表されるM)で始まり、停止コドン(UAA、UAGまたはのいずれかUGAで表される*)で終了する必要があります。入力が無効である可能性がある4つのケースがあります。 入力が開始コドンで始まっていない 入力が終止コドンで終わらない 入力の長さが3の倍数ではありません 入力には、終了以外の場所に停止コドンが含まれています これらのすべての場合に、Error出力する必要があります。停止コドンとは異なり、開始コドンは文字列の開始後に表示される場合があることに注意してください。 それ以外の場合は、次のRNAコドンテーブルを使用して、各コドンをそれぞれのアミノ酸に変換する必要があります。 * UAA UAG UGA A GCU GCC GCA GCG C UGU UGC D GAU GAC E GAA GAG F UUU UUC G GGU GGC GGA GGG H CAU CAC I AUU AUC AUA …

5
ASCIIアートをゴルフするためのヒント
PPCGのASCIIアートの質問は楽しいと思いますが、個人的には、特に質問がcode-golfとしてタグ付けされている場合は、かなり難しいと思います。 ここに誰かがASCIIアートの制作に役立つヒントを持っているのではないかと思います。 単純に文字を配置するのは簡単ですが、(短い)アルゴリズムでは、事態はより複雑になります。 私は次のようなASCIIアートについて話している: テキストからASCIIアート(文字) 画像(ロゴまたはアイコン) 一般的なヒントを探していますが、ほとんどの言語はとにかく翻訳できるので、言語固有のものを使用できます。

2
ローダーの数よりも大きい数のゴルフ
フォローアップとして 出力サイズがGrahamの数を超え、GolfがTREE(3)より大きい数である最短終了プログラムの、私は新しい課題を提示します。 ローダーの数は非常に大きい数であり、説明するのは困難です(それ自体が柔軟な目標を持つコードゴルフ練習の結果であるため)。そこ定義と説明があり、ここではなく、自己封じ込めのために、私も、この記事の後半でそれを説明しようとします。 Ralph Loaderが使用するアルゴリズムは、これまでに作成された(計算可能な)アルゴリズムの中で最大の数の1つを生成します。実際、Loaderの番号は、Googology Wikiで最大の「計算可能な」番号です。(「計算可能な」数とは、計算の観点から定義された数を意味します。)つまり、答えがローダーの数よりも面白い数(つまり、ローダーの数+1だけではない)を生成する場合、 Googologyの歴史!そうは言っても、Loaderのnumber + 1のようなものを生成するプログラムは、間違いなく有効な答えであり、この質問に対する候補です。名声を期待しないでください。 あなたの仕事は、ローダーの数よりも大きい数を生成する終了プログラムを作成することです。これはcode-golfなので、最短のプログラムが勝ちです! 入力を許可されていません。 プログラムは最終的に確定的に終了する必要がありますが、マシンには無限のメモリがあると想定できます。 あなたの言語の数値型は任意の有限値を保持できると仮定するかもしれませんが、これがあなたの言語で正確にどのように機能するかを説明する必要があります(例:浮動小数点数は無限の精度を持っていますか?) 出力として無限は許可されません。 数値型のアンダーフローは例外をスローします。ラップアラウンドしません。 番号が非常に大きい理由の説明と、ソリューションが有効かどうかを確認するためのコードの未使用バージョンを提供する必要があります(ローダーの番号を格納するのに十分なメモリを備えたコンピュータがないため)。 ローダーの番号の説明は次のとおりです。より正確な詳細については、http://googology.wikia.com/wiki/Loader%27s_numberおよびその中のリンクを参照してください。特に、ローダーの番号を(定義により)正確に生成するプログラムが含まれています。 構造の計算は、本質的に非常に特定のプロパティを持つプログラミング言語です。 まず、構文的に有効なプログラムはすべて終了します。無限ループはありません。これは、構築プログラムの任意の計算を実行する場合、プログラムがスタックしないことを意味するため、非常に便利です。問題は、これは構造の計算がチューリング完全ではないことを意味することです。 第二に、チューリング以外の完全な言語の中で、最も強力な言語の1つです。基本的に、チューリングマシンがすべての入力で停止することを証明できれば、それをシミュレートする構造計算の関数をプログラムできます。(停止しても、停止できないことを証明できない停止マシンがあります。) ローダーの番号は、基本的に構造の計算のためのビジーなビーバー番号です。これは、すべてのcocプログラムが終了するため計算が可能です。 特に、loader.cはと呼ばれる関数を定義しますD。おおよそ、D(x)未満のすべてのビット文字列を反復処理しx、それらをcocプログラムとして解釈し、構文的に有効なものを実行し、結果を連結します(これもビット文字列になります)。この連結を返します。 ローダーの番号はD(D(D(D(D(99)))))です。 googolology wikiからのコードのより読みやすいコピー int r, a; P(y,x){return y- ~y<<x;} Z(x){return r = x % 2 ? 0 : 1 + Z (x / 2 );} L(x){return x/2 >> …

7
ガウスからアイゼンシュタイン
整数ガウスを与え+ bはIここで、bは整数であり、iは= EXPを(π I / 2 )虚数単位であり、(ユークリッド距離にWRT)最も近いを返すアイゼンシュタイン整数K + L ω K、Lはです整数およびω = EXP (2 π I / 3 )= (- 1 + I √a+bia+bia+biaaabbbi = exp(πi / 2 )私=exp⁡(π私/2)i = \exp\left(\pi i/2\right)K + L個のωk+lωk+l\omegakkklllω=exp(2πi/3)=(−1+i3–√)/2ω=exp⁡(2πi/3)=(−1+i3)/2\omega = \exp(2\pi i/3) = (-1+i\sqrt{3})/2。 バックグラウンド すべてのガウス整数は一意のように書くことができることを、おそらく非常に明白である+ B Iと、Bの整数。それはとても明らかそれでも真ではない:任意アイゼンシュタイン整数を一意のように書くことができるK + L個のωとK、L個の整数。それらは両方とも複素数内でZモジュールを形成し、両方ともそれぞれp = 2または3のp番目のサイクロトミック整数です。なお、3 + 2 I …

7
和のセットに適合する配列を見つける
A長さの配列を考えnます。配列には正の整数のみが含まれます。たとえばA = (1,1,2,2)。f(A)のすべての空でない隣接部分配列の合計のセットとして定義しましょうA。この場合f(A) = {1,2,3,4,5,6}。作成する手順f(A) は次のとおりです。 の部分配列はAです(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)。それぞれの合計は1,1,2,2,2,3,4,4,5,6です。したがって、このリストから取得するセットはです{1,2,3,4,5,6}。 仕事 S正の整数と配列の長さのみを含むソートされた順序で指定された合計のセットが与えられたn場合、あなたのタスクは、少なくとも1つの配列を出力するXことf(X) = Sです。 例えば、場合S = {1,2,3,5,6}やn = 3、有効な出力がありますX = (1,2,3)。 そのような配列がない場合X、コードは定数値を出力する必要があります。 例 入力:n=4, S = (1, 3, 4, 5, 6, 8, 9, 10, 13)、可能な出力:X = (3, 5, 1, 4) 入力:n=6, S = (2, …

10
Skittishプログラム
目的 n入力として(コマンドラインから)整数を受け取り、それ自体(プログラム)のnディレクトリをディレクトリツリーに埋め込むプログラムを作成します。例n=5: フォルダ名はあなたが望むものなら何でもかまいません。唯一の要件は、深さが正しく、プログラムをディレクトリツリーの新しい場所から再度実行できること、および新しいソースファイルが同じファイル名を保持することです。 ボーナス: スコア* 0.9すべてのディレクトリの名前が異なる場合(少なくとも深さ1 000 000に該当する必要があります) スコア* 0.5ソースファイルを直接または間接的に読み取ったり移動したりしない場合、またはプログラムのソースコードにアクセスしない場合

2
放射線硬化照射器を書く
タスクは、放射線硬化照射装置を作成することです。それはどういう意味ですか? 照射器は、入力として文字列が与えられると、1文字が削除された文字列のすべての可能なバージョンを出力するプログラムです。たとえば、入力が与えられるHello, world!と、プログラムは次を出力します。 ello, world! Hllo, world! Helo, world! Helo, world! Hell, world! Hello world! Hello,world! Hello, orld! Hello, wrld! Hello, wold! Hello, word! Hello, worl! Hello, world ただし、照射器はその放射線から保護する必要があるため、作成した照射器はそれ自体を通過したときにも存続する必要があります。つまり、プログラムの1バイトが削除されても、プログラムは適切に機能する必要があります。 テストケース abc -> bc; ac; ab foo bar -> oo bar:fo bar:fo bar:foobar:foo ar:foo br:foo ba source -> ource;surce;sorce;souce;soure;sourc; 仕様書 標準のI …

8
ジミーはあなたの助けを必要としています!
最近のように、そこに見られるように、Jimmysが彼らの死に落ちる多くなっているようだここでは、こことジミーが落ちるかどうかを判断するように求めていたところ。この狂気をやめ、ジミーを救おうとする時です。 ジミーは3体の部分を持っている/、oと\このように配置されました /o\ プラットフォームはで表され-ます。ジミーは、プラットフォームの真上にない2つ以上の身体部分がある場合、プラットフォームから落下します。 いくつかの例: /o\ - ------- ジミーは体のすべての部分が体温以上であるため、バランスを取るでしょう-。 /o\ ------ --- 2つの体の部分が-s を超えているため、ジミーはバランスを取ります。 /o\ -- ---- -- ジミーは2つのプラットフォームに分割されていてもバランスを取ります /o\ - 2つの身体部分がプラットフォームの上にないため、ジミーはバランスが取れません。 プラットフォームの供給が不足しているため、プラットフォームの長さは5しかなく、できるだけ少ない数を使用することが重要です。 あなたの仕事は、Jimmysの入力を取得し、すべてのJimmysを入力に保存する一連のプラットフォームを出力することです。出力はできるだけ少ないプラットフォームを使用する必要がありますが、各プラットフォーム-の幅は5でなければなりません。 プラットフォームの-幅が5であるという規則は、各プラットフォームの間にスペースが必要であることを意味することに注意してください。----------は、長さ5の2つのプラットフォームではなく、長さ10のプラットフォームと見なされるため、出力では無効です。 テストケース /o\ /o\/o\ // input ----- ----- // output /o\ /o\ ----- ----- /o\ /o\ // same input as above ----- ----- // this is …

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