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

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

4
ダブルスリットクイン
目的: 2つのプログラムをコーディングします。各プログラムは、ジッパー、ダブルスリットクインのように、文字ごとにインターレースされた両方のソースコードを出力します。ダブルスリットクインからの出力は、最初のプログラムのソースコードの最初の文字から始まります。1つのプログラムのソースコードの長さが他のプログラムより短い場合は、残りの出力を残りの長いソースコードで埋める必要があります。 ルール: 両方のプログラムに同じプログラミング言語を使用する必要はなく、両方のプログラムに任意のプログラミング言語を使用できます。 プログラムは、ファイル、ファイル名、ネットワーク、他のプログラム、その他からの入力を受け取るべきではありません。 必須の基準: キャッチがあり、出力のどこかにQUINE大文字の単語が中断されずに存在している必要があります。 使用している2つのプログラミング言語を記載する必要があります。両方に同じプログラミング言語を使用している場合、必要なプログラミング言語は1つだけです。 どちらのプログラムも、他のプログラムから独立して、実行または解釈できる必要があります。 例: プログラム1のこのソースコード例は次のとおりです。 "QIE" このプログラム例2のソースコードは次のとおりです。 "UN" 次に、両方のプログラムからの有効なダブルスリットクイン出力は次のようになります。 ""QUINE"" これはコードゴルフであり、両方のソースコードの長さを合計したときの最小バイト、そして明らかに各プログラム出力の長さも勝ちます!
11 code-golf  quine 

5
トポロジーソートの総数
特定のDAG(有向非巡回グラフ)の場合、そのトポロジーの並べ替えはすべての頂点の順列であり、DAGのすべてのエッジ(u、v)について、uは順列のvの前に表示されます。 あなたのタスクは、特定のDAGのトポロジカルソートの総数を計算することです。 ルール エンコーディングで有用な計算を行わない限り、隣接行列、隣接リスト、エッジリストなど、任意の形式を使用してグラフを表すことができます。有用な場合は、入力に頂点数や頂点リストなどを含めることもできます。 入力のグラフは常にDAGであると想定できます(サイクルはありません)。 あなたのプログラムは理論的にはどんな入力に対しても機能するはずです。ただし、言語の基本的な整数型をオーバーフローすると失敗する可能性があります。 頂点の名前は、任意のタイプの任意の連続した値にすることができます。例:0または1から始まる数値(もちろん、この数値にコードを格納していない場合のみ)。 これはコードゴルフです。最短のコードが勝ちます。 例 これは、異なる形式の同じ入力です。プログラムはそれらすべてを受け入れる必要はありません。頂点は常に0から始まる整数です。 Adjacency list: [ [1 2 3 5] [2 4] [] [2] [] [3] ] Adjacency matrix: [ [0 1 1 1 0 1] [0 0 1 0 1 0] [0 0 0 0 0 0] [0 0 1 0 0 …

4
Pigpen Cipher暗号化
Pigpen Cipher暗号化 あなたの使命は簡単です。入力としてテキストを受け取り、そのテキストのASCII表現をPigpen Cipherに出力するプログラムを書くことです。 入力 ASCIIのみ(Unicodeなし)の文字。少なくとも16384文字と256行を処理できる必要があります。 出力 改行ではないすべての文字を、スペースで、ABCDEFGHIJKLMNOPQRSTUVWXYZまたはabcdefghijklmnopqrstuvwxyzスペースで置き換えます。 大文字と小文字を区別せずに、各文字を暗号化された形式に置き換え(次のセクションを参照)、3行それぞれに末尾のスペースを挿入します。エンコードされた各文字は、ASCIIアートの3 * 3ブロックです。スペースを3 * 3ブロックのスペースに置き換えます。 新しいピッペンラインを開始する新しいラインがない限り、すべてのキャラクターは同じ3行にある必要があります(これらの3行を1つのピッペンラインと呼びます)。ピッペンラインの間の通常のラインは空白のままにします。 暗号 | | | | .| |.| |. --+ for J +-+ for K +-- for L --+ +-+ +-- .| |.| |. --+ for M +-+ for N +-- for O --+ +-+ +-- .| …

3
クレム通訳を書く
Clemは、ファーストクラスの機能を備えた最小のスタックベースのプログラミング言語です。あなたの目的はクレム言語のインタプリタを書くことです。ここにあるリファレンス実装に含まれるすべての例を適切に実行する必要があります。 いつものように、標準の抜け穴が適用されます。 バイトカウントによる最小のエントリが優先されます。 クレム語 Clemは、ファーストクラスの機能を備えたスタックベースのプログラミング言語です。クレムを学ぶ最良の方法はclem、引数なしでインタプリタを実行することです。インタラクティブモードで起動し、使用可能なコマンドで遊ぶことができます。サンプルプログラムを実行するには、「example」がプログラムclem example.clmの名前であると入力します。この簡単なチュートリアルは、始めるのに十分なはずです。 関数には2つの主要なクラスがあります。原子関数と複合関数。複合関数は、他の複合関数とアトミック関数で構成されるリストです。複合関数にそれ自体を含めることはできません。 原子関数 アトミック関数の最初のタイプは定数です。定数は、単に整数値です。たとえば、-10。インタープリターが定数を検出すると、それをスタックにプッシュします。clem今すぐ実行します。入力-10プロンプトで。君は見るべきだ > -10 001: (-10) > 値001はスタック内の関数の位置を表し、入力し(-10) た定数です。+11プロンプトで入力してください。君は見るべきだ > +11 002: (-10) 001: (11) > (-10)がスタックの2番目の位置に移動し(11)、最初の位置を占めていることに注意してください。これがスタックの性質です!これが-減分コマンドでもあることに気づくでしょう。たび-または+番号の前に、彼らはその数ではなく、対応するコマンドの兆候を示しています。他のすべてのアトミック関数はコマンドです。合計14あります。 @ Rotate the top three functions on the stack # Pop the function on top of the stack and push it twice $ Swap the top …

5
ポーカーハンドに名前を付ける-7カードエディション
チャレンジ: この質問では:5カードのポーカーハンドを取り、それを識別する必要があるポーカーハンドに名前を付けます。この質問は似ていますが、2つの工夫があります。 まず、出力はすべて小文字になります。flushとの大文字の使用について心配する必要がないので、これはより多くのゴ​​ルフを可能にしますstraight high card one pair two pair three of a kind straight flush full house four of a kind straight flush royal flush 次に、テキサスホールデムと7枚のカードスタッドの人気により、ここコードゴルフでは、7枚のカードポーカーハンドを獲得できるはずです。7枚のカードの手にスコアを付けるときは、手札に最高の5枚のカードを使用し、不要な2枚は無視してください。 参照: ポーカーハンドのリスト:http : //en.wikipedia.org/wiki/List_of_poker_hands 入力(前のスレッドから直接持ち上げられた) stdinまたはコマンドライン引数からの7 枚のカード。カードは、フォーム上の2文字の文字列で、RSRはランク、Sはスーツです。ランクはある2- 9(番号カード)、T(10)、 J(ジャック)、(Q女王)、 K(王)、 A(エース)。スーツがありS、D、H、Cそれぞれスペード、ダイヤ、ハート、クラブのために。 カードの例 5H - five of hearts TS - ten of spades AD - …
11 code-golf  game 

8
大きなファイルをすばやくフィルタリングする
大きなファイルをすばやくフィルタリングすることが課題です。 入力:各行には、スペースで区切られた3つの正の整数があります。 出力:すべての入力行A B、T満足は、以下のいずれかの基準のこと。 別の入力ラインが存在するC、D、UどこD = Aと0 <= T - U < 100。 別の入力ラインが存在するC、D、UどこB = Cと0 <= U - T < 100。 テストファイルを作成するには、テストにも使用される次のPythonスクリプトを使用します。1.3Gファイルを作成します。もちろん、テストのnolinesを減らすことができます。 import random nolines = 50000000 # 50 million for i in xrange(nolines): print random.randint(0,nolines-1), random.randint(0,nolines-1), random.randint(0,nolines-1) ルール。コンピューターで上記のスクリプトを使用して作成した入力ファイルでテストした場合の最速のコードが優先されます。締め切りは最初の正しいエントリーの時から1週間です。 私のマシンタイミングは私のマシンで実行されます。これは、AMD FX-8350 8コアプロセッサへの標準8GB RAM Ubuntuインストールです。これは、コードを実行できる必要があることも意味します。 関連するタイミング情報 各テストの前に以下を実行するようにタイミングが更新されました。 sync && sudo …

18
デッドロックを引き起こす最短コード
デッドロックを作成する最短のコードを記述します。コードの実行を停止する必要があるため、これは機能しません。 public class DeadlockFail extends Thread{ //Java code public static void main(String[]a){ Thread t = new DeadlockFail(); t.start(); t.join(); } //this part is an infinite loop; continues running the loop. public void run(){while(true){}} } ほぼ確実に、コードがデッドロックになることを確認する必要はありません(無限に実行するとデッドロックになります)。

6
有理数関数
自然数(0から始まる)を取り、それぞれ分子と分母である正の整数のペアを返す関数を作成します。斜めトラバーサルを使用します。以前にカウントされた数値はスキップする必要があります。(スキップした値のセットを記憶できます) 図: 赤はスキップされた値です 値: f(0)= 1、1 f(1)= 2、1 f(2)= 1、2 f(3)= 1、3 f(4)= 3、1(スキップに注意) f(5)= 4、1 f(6)= 3、2 f(7)= 2、3 f(8)= 1、4 f(9)= 1、5 f(10)= 5、1(スキップに注意) Rationalデータ構造とその操作が存在する場合は、それらを使用できます。最短のコードが勝ちます。

7
シャミールの秘密共有の再構築を実装する
シャミールの秘密共有方式は、秘密を再構築するために必要ないくつかの部分に分割することによって秘密を保護する簡単な方法です。 あなたの仕事は、首相によって定義された有限体上のシャミルの秘密共有再構築を実装すること1928049029です。これが何を意味するかについて疑問がある場合は、質問するか、Wikipediaの有限体と有限体演算を参照してください(以下のリソースを参照)。 入力 入力はstdinを使用して行われます。最初に整数k、次にk行続きます。これらの各行にはx y、秘密を表す整数のペアが含まれています。言い換えればf(x) = y、秘密を構築するために使用された元の多項式で。 指定されたシークレットの数は、対応するシークレットを構築するのに常に十分です。 出力 再構築されたシークレットをstdoutに出力します。 例 入力: 5 1 564797566 2 804114535 4 1354242660 6 1818201132 7 503769263 出力: 1234 入力: 7 1 819016192 2 1888749673 3 1737609270 4 365594983 5 1628804870 6 1671140873 7 492602992 出力: 456457856 資源 ウィキペディアの記事 論文 有限体出典:ウィキペディア 有限体演算出典:ウィキペディア ラグランジュ多項式出典:ウィキペディア 有限体演算に関する章

14
1か月の稼働日の割合
年と月を考えて、その月の就業日の割合を調べます。稼働日は、月曜日から金曜日で、休日やその他の特別なことは考慮されません。グレゴリオ暦が使用されます。 入力 ISO 8601形式の年と月(YYYY-MM)。年は常に4桁、月は常に2桁です。指定された年は1582年より前ではありません。 出力 出力は、整数に丸められた、指定された月の就業日(上記の定義による)のパーセンテージです。パーセント記号や小数桁は続きません。 サンプル1 Input Output 2010-05 68 サンプル2 Input Output 2010-06 73 サンプル3 Input Output 1920-10 68 サンプル4 Input Output 2817-12 68 1週間が経過し、回答が受け入れられました。好奇心旺盛な方のために、コンテストで私たちが受け取った提出物のサイズ: 129 – Zシェル 174 – VB.NET 222 – C 233 – C 300 – C 独自の(ランク付けされていない)ソリューションと同様に: 75 – PowerShell 93 – Ruby 112 …
11 code-golf  date 

2
ニューラルネットワークで多項式の最大根を求める
チャレンジ 整数エントリを持つ3次元入力ベクトルが与えられると、ネットワークは、多項式、誤差はより厳密に小さい。(a,b,c)(a,b,c)(a,b,c)[−10,10][−10,10][-10,10]x3+ax2+bx+cx3+ax2+bx+cx^3+ax^2+bx+c0.10.10.1 許容性 私の以前のニューラルネットゴルフチャレンジの許容性の概念は少し制限的であるように思われたので、このチャレンジでは、フィードフォワードニューラルネットワークのより寛大な定義を使用しています。 ニューロンは、機能であるのベクトルで指定されるの重み、バイアスとアクティベーション関数は次のようになります。ν:Rn→Rν:Rn→R\nu\colon\mathbf{R}^n\to\mathbf{R}w∈Rnw∈Rんw\in\mathbf{R}^{n} b∈Rb∈Rb\in\mathbf{R} f:R→Rf:R→Rf\colon\mathbf{R}\to\mathbf{R} ν(x):=f(w⊤x+b),x∈Rn.ν(バツ):=f(w⊤バツ+b)、バツ∈Rん。 \nu(x) := f(w^\top x+b), \qquad x\in\mathbf{R}^n. 有するフィードフォワードニューラルネットワークの入力ノード の関数であるそれが配列から構築することができるのニューロン。各はとスカラーを出力します。出力ノードの指定されたセットが与えられた場合、ニューラルネットワークの出力はベクトルです。{1,…,n}{1、…、ん}\{1,\ldots,n\}(x1,…,xn)∈Rn(バツ1、…、バツん)∈Rん(x_1,\ldots,x_n)\in\mathbf{R}^n(νk)Nk=n+1(νk)k=ん+1N(\nu_k)_{k=n+1}^Nνk:Rk−1→Rνk:Rk−1→R\nu_k\colon\mathbf{R}^{k-1}\to\mathbf{R}(x1,…,xk−1)(x1,…,xk−1)(x_1,\ldots,x_{k-1})xkxkx_kS⊆{1,…,N}S⊆{1,…,N}S\subseteq\{1,\ldots,N\}(xk)k∈S(xk)k∈S(x_k)_{k\in S} アクティブ化関数は任意のタスクに合わせて調整できるため、この課題を面白く保つために、アクティブ化関数のクラスを制限する必要があります。以下のアクティベーション機能が許可されています。 身元。 f(t)=tf(t)=tf(t)=t ReLU。 f(t)=max(t,0)f(t)=max⁡(t,0)f(t)=\operatorname{max}(t,0) SoftPlus。 f(t )= ln(et+1)f(t)=ln⁡(et+1)f(t)=\ln(e^t+1) シグモイド。 f(t)=etet+1f(t)=etet+1f(t)=\frac{e^t}{e^t+1} 正弦波。 f(t)=sintf(t)=sin⁡tf(t)=\sin t 全体として、許容ニューラルネットは、入力ノード、ニューロンのシーケンス、および出力ノードによって指定されますが、各ニューロンは、重みのベクトル、バイアス、および上記のリストからのアクティブ化関数によって指定されます。たとえば、次のニューラルネットは許容されますが、この課題のパフォーマンス目標を満たしていません。 入力ノード: {1,2}{1,2}\{1,2\} ニューロン: forνk(x1,…,xk−1):=xk−2+xk−1νk(x1,…,xk−1):=xk−2+xk−1\nu_k(x_1,\ldots,x_{k-1}):=x_{k-2}+x_{k-1}k∈{3,…,10}k∈{3,…,10}k\in\{3,\ldots,10\} 出力ノード: {5,9,10}{5,9,10}\{5,9,10\} このネットワークは8つのニューロンで構成されており、それぞれにバイアスとアイデンティティのアクティブ化がありません。つまり、このネットワークは、とによって生成された一般化フィボナッチ数列を計算し、この列から5番目、9番目、10番目の数をこの順序で出力します。x1x1x_1x2x2x_2 得点 実数所与小数拡張を終了すると、聞かせて最小の非負整数であるのための、およびlet最小の非負整数であるのためのこのは整数です。その後、我々は言うある精度の。xxxp(x)p(x)p(x)ppp10−p⋅|x|&lt;110−p⋅|x|&lt;110^{-p}\cdot |x|<1q(x)q(x)q(x)qqq10q⋅x10q⋅x10^q \cdot xp(x)+q(x)p(x)+q(x)p(x)+q(x)xxx たとえば、の精度はが、の精度はです。x=1.001x=1.001x=1.001444x=0x=0x=0000 スコアは、ニューラルネットワークの重みとバイアスの精度の合計です。 (たとえば、上記の例のスコアは16です。) 検証 根は3次式で表現できますが、最大の根はおそらく数値的手段で最も簡単にアクセスできます。XNORの提案、@の後、私は整数のすべての選択のための最大のルートを計算し、との結果がここで見つけることができます。このテキストファイルの各行の形式はです。たとえば、最初の行は、の最大ルートが約ます。a,b,c∈[−10,10]a,b,c∈[−10,10]a,b,c\in[-10,10]xは3 - …

6
本当に大きい数は大きいですか?
この質問は、より難しいパズルが好きな人にとって、トリッキーです(特に、「大きい数は大きいですか?」より難しいです)。 入力 整数a1、a2、a3、a4、a5、b1、b2、b3、b4、b5の範囲はそれぞれ1〜10です。 出力 True if a1^(a2^(a3^(a4^a5))) &gt; b1^(b2^(b3^(b4^b5))) and False otherwise. ^はこの質問での累乗です。 ルール これはコードゴルフです。TIOでの有効な入力に対して、コードは10秒以内に正しく終了する必要があります。言語がTIOにない場合、コードはマシン上で10秒未満で終了するはずです。 Trueの場合はTruthy、Falseの場合はFalseyを出力できます。 テストケース 指数の規則により、a1 ^(a2 ^(a3 ^(a4 ^ a5)))== a1 ^ a2 ^ a3 ^ a4 ^ a5であることを思い出してください。 10^10^10^10^10 &gt; 10^10^10^10^9 1^2^3^4^5 &lt; 5^4^3^2^1 2^2^2^2^3 &gt; 10^4^3^2^2 6^7^8^9^10 is not bigger than 6^7^8^9^10 10^6^4^2^2 &lt; 10^6^2^4^2 …

30
First-nフィボナッチ数列要素
ここには、短い(最小の文字)フィボナッチシーケンスジェネレーターを要求するよく知られた質問があります。 誰かがフィボナッチ数列の最初のN個の要素のみを非常に短いスペースで生成できるかどうか知りたいのですが。私はそれをpythonでやろうとしていますが、どんな言語でも、どんな短い答えにも興味があります。関数F(N)は、シーケンスの最初のN個の要素を生成し、関数の戻りとしてそれらを返すか、出力します。 興味深いことに、コードゴルフの回答は1 1 2でなくで始まるようです0 1 1 2。それはコードゴルフや一般的なプログラミングの慣習ですか?(ウィキペディアによると、フィボナッチ数列はゼロから始まります。) Pythonサンプル(最初の5要素): def f(i,j,n): if n&gt;0: print i; f(j,i+j,n-1) f(1,1,5)

7
奇妙な秘密の力を持つ配列の戦い
これは、比較的単純な2次元配列の課題です。 625人の歩兵の戦場を想像してみてください。あなたはコマンド奇妙な軍隊を、残念ながらの強さも、軍があなたを圧倒する。ありがたいことに、あなたの兵士には秘密の力があります:奇妙な各部隊とそれらを取り巻く仲間の奇妙な同盟国の力が秘密の力の数で割り切れる場合、彼らは最終的な攻撃を解き放ち、勝ちます!あなたは勝利した兵士一人一人を尊敬しなければなりません。 ルール 各要素がそのxとyの位置に1を加えた積を含む25 x 25の整数配列を指定すると、次の基準を満たすすべての「勝利の」奇数要素の座標を返します。 要素の値とそれに隣接する奇数要素(上、下、左、右)の合計は、入力(シークレットパワー番号)で割り切れます。要素は4つの辺すべてに隣接していて、エッジ上にはない必要があります。 提出は、単一の入力を必要とする関数または完全なプログラムのいずれかです。出力は任意の順序にすることができます。 25 x 25の配列、戦場は次のようになります。 1, 1, 1, 1,... 1, 2, 3, 4,... 1, 3, 5, 7,... 1, 4, 7, 10,... etc. 例 以下は3 x 3の例です。 43, 57, 71 46, 61, 76 49, 65, 81 要素(中央の61)が勝るかどうかを判断するには、その要素と隣接する奇数要素の値を合計します。 61 + 57 + 65 = 183 合計が入力で割り切れる場合、要素のxとyの位置が出力されます。入力が3の場合、183は3で割り切れるため、「1、1」が出力されます。 …

2
シェルグロブゴルフ
このタスクは、グロブ拡張後にファイルへの最短パスを出力することです。 シェルグロビングとは何ですか?ほとんどのシェルで*は、パス内の文字を使用して、その位置にある任意の文字を表すことができます。たとえば、ディレクトリfooにファイルbar bazとが含まれている場合asdf、foo/b*に展開されfoo/bar foo/bazます。 ここで、現在のディレクトリにというファイルだけが含まれているとしましょうihavealongname。このファイルを参照する場合は*、完全な名前を入力するのではなく、と入力します。これは、その1つのファイルのみを表します。 ディレクトリにというファイルも含まれている場合、両方のファイルに一致するialsohavealongnameため*、実行できません。私は少なくともしなければならないでしょうih*。 この*パターンは、探しているファイルの上のディレクトリに一致する場合にも機能します。そこに2つだけのディレクトリがある場合fooとbarが、fooファイルのみが含まれているbazとbar、ファイルが含まれているasdf、私は一致させることができますfoo/bazし*/baz。それとも、もっと簡潔に、*/b*。場合はbar空だった、*/*働くだろう。 あなたのタスク:「現在のディレクトリ」を表すパスの文字列配列と単一のターゲットパスを指定して、* sを展開した後、そのターゲットパスのみに展開される最短の文字列を出力します。 ターゲットパスは、それ自体の文字列として、パスの配列へのインデックスとして、渡されたパスの配列の最初の項目として、またはハードコーディングされていない他の便利な方法として取得できます。わからない場合はコメント欄で尋ねてください。 ターゲットパスは、「現在のディレクトリ」に存在することが保証されています。 すべてのパスに英数字のASCII(および/s)のみが含まれていると想定できます。入力パスとして、ルート(で始まる/)または相対(で始めない)を取ることができます/。 等しく短い可能性が複数ある場合は、それらのいずれかまたはすべてを返します。 これはコードゴルフで、最少バイトが勝ちます! Kevin Cruijssenのおかげで、テストケース。

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