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

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

23
ヤギを数えて眠る
一部の人々は眠りにつくために羊を数えます。その他はヤギを数えます。 正の整数Nを取り込んで、N-1個の目覚めたヤギに続いて1個の眠っているヤギを出力するプログラムまたは関数を作成します。まるで誰かがN個のヤギを数え、最後に眠ったのです。 覚醒したヤギは次のようになります。 \ ___/o> -(___)" '' '' 眠っているヤギは次のようになります。 \ ___/-> ,(___)" `` `` それらは、隣接するヤギのあごひげと尾の間に1つのスペースで連結されています。 \ \ \ ___/o> ___/o> ___/-> -(___)" -(___)" ,(___)" '' '' '' '' `` `` 出力には、末尾のスペースと単一の末尾の改行を含めることができます。 バイト単位の最短コードが優先されます。 例 N = 1: \ ___/-> ,(___)" `` `` N = 2: \ \ ___/o> ___/-> -(___)" ,(___)" …

30
EvenSt-ringコード-ゴル!f
「偶数文字列」は、文字のASCII値のパリティが常に交互になっている任意の文字列です。たとえば、文字EvenSt-ring$!のASCII値は次のとおりであるため、文字列は偶数文字列です。 69 118 101 110 83 116 45 114 105 110 103 36 33 そして、これらの数字のパリティは次のとおりです。 Odd Even Odd Even Odd Even Odd Even Odd Even Odd Even Odd 全体が交互になっています。ただし、ASCII値は次のとおりであるため、次のような文字列Hello world!は偶数文字列ではありません。 72 101 108 108 111 32 87 111 114 108 100 33 パリティは次のとおりです。 Even Odd Even Even Odd Even Odd …
36 code-golf  string 

13
アスキーアートの古くからの友人の写真
この写真があなたになじみのあるものであることを願っています。 パックマンがパワーピルを食べた後の、「脆弱な」状態のパックマンの幽霊の1つです。 チャレンジ ASCIIアートを使用して、小さなフレームに幽霊を描きます。通常のスケール(これについては後ほど説明します)では、上の画像の各正方形は1文字に対応し、フレームは上下に1文字の間隔があり、ゴーストの左右に2文字の間隔があります。 : #################### # # # #### # # ######## # # ########## # # ############ # # ############ # # ### ## ### # # #### ## #### # # ############## # # ############## # # ## ## ## ## # # # ## ## ## …

19
チェビシェフ回転
各セルに整数座標がある通常のグリッドを考えてみましょう。セルを(正方形の)「リング」にグループ化できます。各リングのセルは、原点からのチェビシェフ距離(またはチェスボード距離)が同じです。あなたの仕事は、そのようなセル座標を取り、そのセルをリング内で反時計回りに1つの位置だけ回転させることです。これにより、次のマッピングが実装されます。 したがって、たとえば、入力が(3, -2)出力の場合は(3, -1)。これ(0, 0)は、それ自体にマップする必要がある唯一の入力であることに注意してください。 ルール I / O形式はかなり柔軟です。2つの個別の数字、ペア/リスト/配列/数字のタプル、単一の複素数、2つの数字を含む文字列などを使用できます。 あなたはそれを仮定するかもしれません-128 < x,y < 128。 プログラムまたは関数を作成し、入力を受け取り出力を提供する当社の標準的な方法を使用できます。 任意のプログラミング言語を使用できますが、これらの抜け穴はデフォルトでは禁止されています。 これはcode-golfであるため、バイト単位で測定された最短の有効な回答が勝ちます。 テストケース (0, 0) => (0, 0) (1, 0) => (1, 1) (1, 1) => (0, 1) (0, 1) => (-1, 1) (-1, 1) => (-1, 0) (-1, 0) => (-1, -1) (-1, -1) …

14
トイレットペーパーの謎
今日、非常に実用的な問題を解決する必要があります。トイレットペーパーのロールに一定の枚数のシートを置くために、いくつのループが必要ですか。いくつかの事実を見てみましょう。 裸のトイレットペーパーシリンダーの直径は3.8cmです トイレットペーパー1枚の長さは10cmです。 1枚のトイレットペーパーの厚さは1mmです。 シリンダーを最初に巻き付ける前のシリンダーの円周は3.8 * piです。シートを円柱に巻き付けるたびに、半径が.1ずつ増加するため、円周は.2 * PIずつ増加します。この情報を使用して、n枚のトイレットペーパーを収めるために必要なループの数を調べます。(注:少なくとも3.14159と同じ精度のPiの近似値を使用してください)。 テストケース: n = 1: 10 /(3.8 * pi)= .838ループ n = 2: (完全なループをいくつ作成できますか?)1つの完全なループ= 3.8 * pi = 11.938。 (最初のループの後にどれくらい残っていますか?)20-11.938 = 8.062 (残りの部分はどのくらいの2番目のループを作成しますか?)8.062 /(4 * pi)= .642ループ 回答:1.642ループ n = 3: 1番目の完全ループ= 3.8 * pi = 11.938、2番目の完全ループ= 4 * pi = 12.566 …

20
カーマイケル関数を計算する
タスクの説明 数論では、カーマイケル関数 λは正の整数かかり N戻る以上の正の整数kのようにk個の各整数の乗互いに素に、nは 1に等しいモジュロNを。 正の整数nが与えられた場合、解はλ(n)を計算する必要があります。バイト単位の最短コードが優先されます。 プログラムは理論的には任意の大きな入力に対して機能するはずですが、効率的である必要はありません。 ヒント すべてのλ(n)のシーケンスはOEIS A002322です。 未実装のPython実装は次のようになります from fractions import gcd def carmichael(n): coprimes = [x for x in range(1, n) if gcd(x, n) == 1] k = 1 while not all(pow(x, k, n) == 1 for x in coprimes): k += 1 return k (Pythonでは、pow(A, …

1
「グリッドを埋める」問題
単純なルールでありながら、自明でないアルゴリズムによる課題。:-) 仕事 スペースで区切られた整数の形式で入力を取得します。 N A B S ここで、Nは、AとBの間の一意の数値(整数)で満たされた2D正方行列の辺の長さです。この行列の各行と列の合計は常に同じです:S(言い換えると、行列は半魔法の正方形です)。 注意: すべての数値は正です。例外はAであり、0の場合があります。 例 ために 3 1 10000 2015 有効な解決策は ために 8 1 300 500 有効な解決策は 出力 出力はASCIIテーブルである必要があります。上記の最初の例の例: 384 159 1472 1174 499 342 457 1357 201 スペースで埋められた右揃えの整数。各列の幅は、その列の最大の整数の幅です。 得点 これはcode-golfであるため、バイト単位の最短コードが優先されます。標準的な抜け穴が適用されます(特に、この問題を解決するためのビルトインについて)。間違った入力や不可能な入力(負の数を含む)を気にする必要はありません。上記の2番目の例の回答(必須)にサンプル出力を提供してください。
36 code-golf  math  grid 

27
メトロノームの構築
前書き 数日前、何かのためにメトロノームが必要でした。利用できるものがなかったため、App Storeからアプリをダウンロードしました。アプリのサイズは71 MBでした!!! 三目並べの作成に71 MB ...?! それで、コードゴルフが私の頭に浮かびました。 チャレンジ サウンドを出力するコードをゴルフします。どんな音なのかはまったく無関係です。必要に応じてサウンドファイルを作成します...しかし、システムビープ音も同様に機能します。(ここに私が作成したサウンドがあります...特別なものはありません。) 入力:メトロノームが出力する1分あたりの拍数。 例 これは非ゴルフJavaバージョンです!タスクを表示するだけです。 public class Metronome { public static void main(String[] args) throws InterruptedException { int bpm = Integer.valueOf(args[0]); int interval = 60000 / bpm; while(true) { java.awt.Toolkit.getDefaultToolkit().beep(); // or start playing the sound Thread.sleep(interval); System.out.println("Beep!"); } } } ルール …
36 code-golf  music  audio 

2
タワーのバランスは取れますか?
前書き ASCIIタワーと風の力が与えられたら、プログラムまたは関数を作成して、タワーのバランスをとるか、どちらに落ちるかを決定します。 たとえば、最初の塔はバランスが取れていますが、2番目の塔は左に倒れます。 # # # # ### ### ### ### # # # # ##### ##### ### ### ### # これが私の最初の挑戦です。あなたが楽しんでくれることを望みます。 行き方 塔はによって表される連結ブロックで構成され#、剛体を形成します。各ブロックは、幅と高さが1単位の正方形で、密度は一定です。タワーに作用する力には、重量と風力があります。すべての力は各ブロックに個別に作用し、ブロックの中心を通過します。 その重量により、各ブロックには1つのユニットの下向きの力が作用します。 また、風上側に隣接する別のブロックを持たない各ブロックには、風の方向に水平に作用する力があります。この力の大きさは入力として与えられます。 風の方向は、入力のどこかにASCIIフラグで示されます。風がゼロでない場合にのみ、入力にフラグが表示されます。フラグは力に影響しません。 フラグは、下に表示されるとおりになります。 Flag design and corresponding wind direction: o~~ ~~o |~~ ~~| ---> <--- 明確にするために、タワーは堅固な物体であり、バラバラにならず、地面に取り付けられていません。ただし、プログラムは各ブロックの力を個別に計算して、タワーのバランスが取れているかどうかを判断する必要があります。 例 o~~ |~~ # # > > ### >## …

30
コインフェアを作る
0またはを生成するコインがあります1。しかし、コインは偏っている可能性があると思われます。つまり、0(または1)の確率は必ずしも1/2ではありません。 フォン・ノイマンによって提案された、偏ったコインを公正なコインに「変換」する(すなわち、同等の結果を得る)ためのよく知られた手順は次のとおりです。ブロックの2つの値が異なるまで、2つのコイントスの(重複しない)ブロックを生成します。そのブロックの最初の値を出力します(2番目の値でも同様ですが、この課題のために最初のものを選択します)。直感的には、よりも高い可能性がありますが、同様に可能性があります。100110 たとえば、入力1110...は最初のブロックを破棄1し、2番目のブロックからa を生成します... 単一の結果を生成するために複数のコイントスが消費されるため、この手順は高価です。 チャレンジ 元のコインのトスを表すゼロと1の有限シーケンスを取り、すべての入力が消費されるまで、上記の手順に従って最大数の結果を生成します。 入力値の数が奇数の場合、最後のブロックは不完全な場合があります。たとえば、入力シーケンス11111は結果を生成しません(最初の2つのブロックの値は等しく、3番目のブロックは不完全です)。 ルール 入力は、負または負の数の値を持つことができ、必ずしも正または偶数である必要はありません。 入力形式は次のとおりです。 ゼロと1の配列。 オプションの区切り文字を含むゼロと1の文字列。 出力形式は次のとおりです。 セパレーターの有無にかかわらず、ゼロと1のストリング。 ゼロと1の配列。 改行で区切られた単一のゼロまたは1を含む文字列。 あなたの言語に合った同様の合理的なフォーマット。 コードゴルフ。最少バイトが勝ちます。 テストケース ここでは、入力と出力は文字列であると想定されています。 Input --> Output '1110' --> '1' '11000110' --> '01' '1100011' --> '0' '00' --> '' '1' --> '' '' --> '' '1101001' --> '0' '1011101010' --> '1111'

30
フィボナッチオリアル
定義 F(n)正整数のフィボナッチ数列は、次のように定義されます。 1. F(1) = 1 2. F(2) = 1 3. F(n) = F(n-1) + F(n-2), where n is an integer and n > 2 正の整数のフィボナッチ口径はの積です[F(1), F(2), ..., F(n)]。 仕事 正の整数が与えられた場合n、のフィボナッチオリアルを見つけますn。 スペック のフィボナッチオリアルは100、合理的なコンピューターで5秒未満で計算する必要があります。 テストケース n Fibonacci-orial of n 1 1 2 1 3 2 4 6 5 30 6 240 …

1
カップスタッキングロボットをプログラムする
カップをピラミッド(およびその他の形状)に積み重ねることができることは誰もが前に見たことがあると思います。 A A A A A A A A A A A A A A A A A はい、A間違いなくカップを表すのに十分なキャラクターです。 新しいカップは、地面、構造物の右側、または隣接する2つのカップのいずれかに追加できます。再び上記の構造がありますが、新しいカップに使用できるすべてのスポットにはが付いてい_ます: _ A A A A A _ _ A A A A A A A A A A A A _ _ _ これらのカップスタックを組み立てることができるロボットを構築したいとしましょう。ロボットは、このような構造を操作するための2つの簡単な指示を理解します。 a:新しいカップを左から右の読み取り順序で最初の使用可能なスポットに追加します(つまり、使用可能なスポットが見つかるまで上から下、左から右に行をスキャンし、そこにカップを配置します)。上記の例は次のようになります。 A A A A A …

25
C配列を展開する
Cプログラミング言語では、配列は次のように定義されます。 int foo[] = {4, 8, 15, 16, 23, 42}; //Foo implicitly has a size of 6 配列のサイズは、初期化要素(この場合は6)から推測されます。この方法でC配列を記述し、明示的にサイズを変更してから各要素を順番に定義することもできます。 int foo[6]; //Give the array an explicit size of 6 foo[0] = 4; foo[1] = 8; foo[2] = 15; foo[3] = 16; foo[4] = 23; foo[5] = 42; チャレンジ 最初の方法から2番目の方法に配列を拡張するプログラムまたは関数を作成する必要があります。コードを長くするプログラムを作成していて、皮肉が大好きなので、コードをできるだけ短くする必要があります。 入力は元の配列を表す文字列になり、出力は拡張された配列定義になります。入力は常に次のように見えると安全に仮定できます。 <type> …
36 code-golf  string  parsing  c 

14
合計は常に15です
入力として負でない整数の配列を受け取り、入力配列の要素を含むベクトル/配列のセットを順番に出力するプログラムまたは関数を作成します。各ベクトルが合計15になるように分割します。 N個の要素は「15をヒット」せず、15をパスした数を切り捨てる必要があり、残りは次のベクトルの最初の要素になります。これは、入力配列の最後に到達するまで続きます。最終ベクトルの合計が15未満の場合、合計を増やすために最後に数値を追加する必要があります。 例を見れば、ルールがより簡単に理解できると思います。 Input: 3 7 5 10 Output: 3 7 5 <- Sum is 15 10 5 <- 5 is added to make the sum 15 Input: 2 4 5 9 2 3 5 0 2 4 5 0 3 Output: 2 4 5 4 <- Sum 15. 9 …

22
頭字語は、明らかにメッセージセンサーを絞り込むことができます
このため、フレーズが単語の頭字語である場合は、より良い解決方法が必要です。また、問題のフレーズと単語が再帰的な頭字語であるかどうかを確認する価値があると思います。 あなたのタスク: 単語とフレーズを行で区切って指定すると、フレーズが頭字語であり、再帰的な頭字語である場合に出力されます。(フレーズにはそれが意味するものが含まれています) 入力は、アルファベット文字とスペースで構成されます。 プログラムでは大文字と小文字を区別しないでください。 入力/出力の例: 事例1: 入力: Acronyms Acronyms can really obviously narrow your message sensors 出力: True True ケース2: 入力: FAQ frequently asked questions 出力: True False ケース3: 入力: foo bar baz 出力: False False ケース4: 入力: GNU GNU is not Unix 出力: False False ケース5: 入力: Aha …

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