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

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

8
ASCIIトポロジpt 1:頼りにできますか?
深刻な問題があります。非常に重要な番号を保持するテキストファイルがいくつかあります。すべての重要な番号です。そして、2、3。 これらの数字はとても重要だったので、私はそれらをそれらの新しい10進数または2進数に委ねることができませんでした。次のように、各数値を単項でエンコードしたままにしました。 +--+ | | +---+ +----+ | | | | | +---+ +-------+ ~/two.txt シンプルで信頼性の高い番号:2の2つのASCIIループ 以下に、私が手作業で作成した例をいくつか示します。 1: +---+ | | +--+ | | | +--+ | | | | | | | +--+ +--+ | | +---------+ 三: +---------+ | +-----+ | | | +-+ | | | | …

30
興味のある人
バックグラウンド 関心のある人は CBSの犯罪ドラマであり、最近の私のお気に入りのテレビ番組です。 このショーは、億万長者のプログラマーであるハロルド・フィンチという男と、特殊部隊のベテランで元CIAの工作員であるパー​​トナーのジョン・リースに関するものです。このプログラマーは、暴力犯罪が発生する前に予測する「機械」と呼ばれる感覚的なAIを作成しました。世界中のすべての監視カメラと電子通信を監視および分析することにより、地球上のすべての人を常に追跡します。 ハロルドは、米国政府がテロ行為を事前に検出するためにマシンを構築しました。国家安全保障に関連するかどうかに基づいて、予測する犯罪をリストに分割します。関連するケースは政府によって処理されますが、「無関係な」リストは毎日削除されるようにプログラムされています。 ハロルドは、「無関係な」リストに対処することを望んで、自分自身のために小さなバックドアを作りました。このバックドアにより、マシンはハロルドに最も近い公衆電話を呼び出し(毎日1回程度)、社会保障番号を読み取ります。このSSNは、計画的な犯罪の一部として命が危険にさらされている人、またはそのような犯罪を計画している人に属します。 チャレンジ 入力を行わず、30個のランダムな電話番号とSSNを出力するプログラムを作成します(以下を参照)。 出力 「毎日」印刷されるテキストは2行あります。 Crime predicted: 555-55-5555 Calling: 1-555-555-5555 改行が続きます このプロセスは1つの「月」(30「日」)の間繰り返す必要があります。 電話番号 すべての電話番号には次の要素が必要です。 米国の国コード(最初の数字)が必要です。 ランダムな市外局番(3桁の最初のセット)が必要です。 自身が電話番号の最初の3桁であるべきであるが555、4つの乱数によってその後に続きます。 以下に注釈付きの例を示します。 1-814-555-3857 | | | | | | | | | | | +----------> random four digits | | | | | +--------------> the set 555 | | …
28 code-golf  random 

20
3進数字を循環させることによるテキストの難読化
この課題の目標は、入力テキストを取得し、以下のメソッドを使用して暗号化して結果を返すための最短の関数/プログラムを作成することです。 例として、文字列を使用しますhello world。 最初に、入力テキストを取得します。 hello world 2番目に、文字列を3進数(基数3)に変換します。このキーを使用します: a = 000 b = 001 c = 002 d = 010 e = 011 f = 012 g = 020 ... w = 211 x = 212 y = 220 z = 221 [space] = 222 このキーを使用するhello worldと021011102102112222211112122102010、次のようになります。 h e l l …

4
アポロニアのガスケットを描く
3つの相互に接する円が与えられた場合、それら3つすべてに接する2つの円を常に見つけることができます。これら2つはアポロニア円と呼ばれます。アポロニアの円の1つが実際に3つの初期円の周りにあることに注意してください。 3つの接線円から始めて、次のプロセスでアポロニアンガスケットと呼ばれるフラクタルを作成できます。 最初の3つの円を親の円と呼びます 親円の2つのアポロニア円を見つける 各アポロニア円について: 親円の3つのペアの各ペアに対して: アポロニアン円と2つの親円を新しい親円のセットと呼び、ステップ2からやり直します。 たとえば、同じサイズの円から始めて、次のようになります。 ウィキペディアで見つかった画像 必要な表記法がもう1つあります。中心(x、y)の半径rの円がある場合、その曲率をk =±1 / rとして定義できます。通常、kは正ですが、負のkを使用して、ガスケット内の他のすべての円を囲む円を示します(つまり、すべての接線が内側からその円に接触します)。次に、3組の数字で円を指定できます:(k、x * k、y * k)。 この質問の目的のために、正の整数kと有理xおよびyを仮定します。 このようなサークルのその他の例は、Wikipediaの記事に記載されています。 また、この記事には、一体型ガスケットに関する興味深いものがあります(他の面白い点もあります)。 チャレンジ 4つの円の指定が与えられ、それぞれがのようになります(14, 28/35, -112/105)。eval必要に応じて単純に入力できるように、便利なリスト形式と除算演算子を使用できます。4つの円は実際に互いに接しており、最初の円は負の曲率を持っていると仮定できます。これは、他の3つのアポロニア円が既に与えられていることを意味します。有効な入力例のリストについては、チャレンジの下部をご覧ください。 この入力が与えられると、アポロニアンガスケットを描画するプログラムまたは関数を記述します。 関数引数、ARGVまたはSTDINを介して入力を取得し、画面上にフラクタルをレンダリングするか、選択した形式で画像ファイルに書き込むことができます。 結果の画像をラスタライズする場合、各円は少なくとも400ピクセルで、最大の円の周りに20%未満のパディングが必要です。半径が最大入力円の400未満の円、またはピクセルより小さい円のいずれか早い方に到達すると、再帰を停止できます。 完全なディスクではなく、円の輪郭のみを描画する必要がありますが、背景と線の色は任意です。アウトラインは、外側の円の直径の200倍より広くしてはなりません。 これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。 入力例 Wikipediaの記事のすべての不可欠なガスケットは、所定の入力形式に変換されています。 [[-1, 0, 0], [2, 1, 0], [2, -1, 0], [3, 0, 2]] [[-2, 0, 0], [3, 1/2, 0], [6, …

8
極端なホワイトウォーターカヌー
かなり速いホワイトウォーター川をカヌーでaいでいます。突然、パドルが爆発し、パドルなしで川を急流で急降下する危険な状況に陥ります。幸運なことに、あなたにはまだプログラミングスキルがあるので、急流を乗り切るのを助けるために、カヌーの横にプログラムを彫ることにします。ただし、プログラムを作成するカヌーの側面には表面積があまりないため、プログラムをできるだけ短くする必要があります。 川は8 x 16グリッドとして表すことができます。列にの番号0を付け7、行にの番号0を付け15ます。 y --------15 --------14 --------13 --------12 --------11 --------10 --------9 --------8 --------7 --------6 --------5 --------4 --------3 --------2 --------1 --------0 01234567 x 上:障害物のない完全に穏やかな普通の川。当然、これはあなたがいる川ではありません。 座標(4、0)から開始し、そこから(0,1)岩(oこれらの例ではで表される)に当たるまで、制御不能に川(ベクター)を上昇します。岩にぶつかると、55%の確率で岩を左に移動し(ベクトル(-1,1))、45%の確率で岩を右に移動します(つまりベクトル(1,1))。カヌーが左端または右端の列にある場合、常に中央に向かって移動します。岩がない場合は、まっすぐ上に移動します。 y ----x---15 ----xo--14 -o--x---13 ----x---12 ---ox---11 ---x----10 ---xo---9 ---ox---8 ----xo--7 -----x--6 ----ox--5 -o--x---4 ----x---3 ----xo--2 ----x---1 ----x---0 01234567 上:キャラクターを使用して表された、カヌーが通る可能性のあるルート x 川の地図を指定して、特定の列でカヌーが終了する確率を出力するプログラムを作成します。 プログラムに都合のよい方法(STDIN、コマンドライン引数、raw_input()ファイルからの読み取りなど)で入力を受け入れます。入力の最初の部分は、プログラムが確率を見つける列を表す0〜7の単一の整数です。その後x,yに、石の位置を表す形式のタプルのリストがあります。 例: 入力: 4 …

2
ASCIIボクセルを印刷する
で構成されるキューブを表すバイナリ値の配列を読み取るプログラムを作成するn×n×nn×n×nn\times n \times nn×n×nn×n×nn\times n \times nn3n3n^3個の小さいキューブます。各値は、指定された位置にボクセル(小さな立方体)が存在するかどうかを示します。プログラムは、指定された配列をASCIIグラフィックとして出力する必要があります(つまり、コンソールからの出力またはファイルへの書き込みを意味します)。 例 次の2×2×22×2×22\times 2\times 2配列を考えてみましょう。 [ [[0,0], [1,0]] [[1,1], [1,0]], ] [ [[0,0], [0,0]] [[1,1], [1,1]], ] この場合、出力は次のようになります(ここでは、垂直方向のスペースが少ないコードエディタ/コンソールでの表示ほど良くありません)。 +----+ / /|-+----+ +----+ | /| | | +----+ | | | | | + + + | |/ | | +----+ | |/ +----+ +----+----+ …

19
うるう秒の飛躍!
今日は26回目のうるう秒の機会を示すため、あなたの課題は、今日発生するものだけでなく、これまでに発生したGMTまたはUTCのすべてのうるう秒の日付と時刻を出力することです。 入力 入力はありません。 出力 1972-06-30 23:59:60 1972-12-31 23:59:60 1973-12-31 23:59:60 1974-12-31 23:59:60 1975-12-31 23:59:60 1976-12-31 23:59:60 1977-12-31 23:59:60 1978-12-31 23:59:60 1979-12-31 23:59:60 1981-06-30 23:59:60 1982-06-30 23:59:60 1983-06-30 23:59:60 1985-06-30 23:59:60 1987-12-31 23:59:60 1989-12-31 23:59:60 1990-12-31 23:59:60 1992-06-30 23:59:60 1993-06-30 23:59:60 1994-06-30 23:59:60 1995-12-31 23:59:60 1997-06-30 23:59:60 1998-12-31 23:59:60 2005-12-31 23:59:60 …

21
モラ、高貴な王のゲーム
バックグラウンド Morraのゲームはシンプルなゲームです。「オリジナル」バージョンでは、複数のプレイヤーが同時に全員のハンドの合計を推測しながら0-5の数字を手で投げます。ここで使用するバージョンは、重要な戦略の可能性を高めるために変更されました。以下で説明します。 2人のプレーヤーがいます。 じゃんけんのように、プレイヤーは同時に動きます。 各ターン、各プレイヤーは0〜5の数字を選択し、0〜5の対戦相手の選択も推測します。つまり、1ターンごとに2つの数値が出力されます。明確にするために、両方の数値の出力は、0〜5の範囲である必要があります。 対戦相手の選択を正しく推測したが、対戦相手が正しく推測しなかった場合、プレイした2つの数字の合計に等しい特定のポイント数を獲得します。たとえば、プレイした数字が3と5だった場合、正しい推測は8ポイントの価値があります。 両方または両方のプレイヤーが正しく推測した場合、ポイントは付与されません。 1000ラウンド後に最もポイントを獲得した人がそのゲームに勝ちます。 トーナメント トーナメントはラウンドロビン方式で行われ、各参加者の可能なペアを作成することによって実行されます。勝利ごとに、競技者は2勝利ポイントを獲得します。引き分けごとに1勝利ポイントが得られます。負けても勝利ポイントは獲得できません。 直観的には、トーナメントの勝者は、他の人に対して最も勝利点のある競技者でなければなりません。 入場方法 競合するボットを送信するには2つの方法があります。最初の、そして最も好ましい方法は、コントローラーによって提供されるJavaインターフェースを実装することです。2番目の方法は、独立したプログラムを作成することです。 最初にJavaメソッドについて説明しましょう。実装する必要があるインターフェイスPlayerは次の2つのメソッドを定義しpublic String getName()ます。ボットを識別し、6つの文字列の配列としてpublic int[] getMove(String[] args)受け取ります。例は次のとおりです。argsmychoices myguesses myscore opponentchoices opponentguesses opponentscore 042 045 0 324 432 6 これは、私が最初のラウンドで0を選択し、対戦相手が0を投げると推測したことを意味します。対戦相手が3を投げて、4を投げると推測しました。 2、つまり2 + 4 = 6ポイントを獲得します。 メソッドは、それぞれ選択と推測である2つの整数の配列を返します。例は{4,2}、4の選択と2の推測の場合です。 メソッドとして記述された完全なJavaボットの例を次に示します。必要に応じて、サブミットにはgetMoveメソッドで行われていることを含めるだけで済みます。 import java.util.Random; /** * A simple example Morra bot to get you …

12
短いデッドフィッシュ番号
Deadfishは、チューリング完全でない最もよく知られたプログラミング言語の1つです。データを保存するためのアキュムレータが1つ(0から始まる)と、4つのコマンドのみがあります。 i - Increment the accumulator s - Square the accumulator d - Decrement the accumulator o - Output the accumulator Deadfishプログラムは次のようになります。 iiisdo そして、それは印刷されます: 8 チャレンジ 。意志の入力数と出力Deadfishコードは番号を表示することをプログラムを作成します(またはパラメータとして番号を取り、コードを返す関数を作る。)それはから任意の整数のために働かなければならない0と255 ゴール コードを作成して、指定された数を生成するための最短のコードを作成してください。例えば: iiiiiiiiio そして iiiso それぞれを印刷します9が、2番目は短くなります。 得点 あなたのスコアは: The number of characters in your source code + The sum of the lengths of …

8
ハングマンソルバーを書く
ハングマンソルバーを作成する必要があります。この英語の単語リスト[1]に対してテストすると、最も多くの単語を解決するソルバーが勝ち、不正確な推測の総数がタイブレーカーになります。単語リスト内のすべての単語は、ランダムな順序でテストされます。 [1]:この単語リストはここから取得され、数字が削除され、長さ1またはアルファベット以外の文字が含まれる単語が削除され、最も頻繁に使用される4096個の一意の単語がこの単語リストとして選択されます。 詳細: プログラムはゲームプログラムとやり取りします。これにより、標準入力から下線と正しく推測された文字が表示されます。あなたのプログラムはあなたの推測を標準出力に与えます、そしてそれは前の推測が正しかったか間違っているかを入力から推測しなければなりません。6回間違えた後、プログラムは失われます。プログラムは、各ゲームの終了後(勝ち負け後)に次のゲームの準備ができている必要があります。 コードの長さは2048バイト未満でなければならず、プログラムは外部リソース(ローカルストレージまたはインターネットからのワードリストへのアクセスを含むがこれに限定されない)を使用してはなりません。 例:(入力は>、明確化のためだけにここに先行します-入力に実際には存在しません) >_______ // 7 underscores a // Now you wait for input again >_a___a_ e >_a___a_ // Implies that your guess is wrong >_____ // new round, this will be given ONLY IF you already have 6 losses 6回間違えた場合、推測が間違っていることを示唆する最終入力を受け取り、プログラムは新しいラウンドを開始する準備ができている(つまり、別の入力を受け取る)必要があります。 勝ったら、 >_angman h >hangman >_____ // …

2
アンダーハンドコードコンテスト:それほど速くない並べ替え[終了]
タスク sortコマンド行プログラムと同様に、標準入力からEOFまで入力行を読み取り、ASCII順で標準出力に書き込むプログラムを、選択した言語で作成します。Pythonでの手つかずの短い例は次のとおりです。 import sys for line in sorted(sys.stdin): print(line.rstrip('\n')) 下手な部分 OS Warと同様に、あなたの目標は、競合するプラットフォーム上でプログラムを意図的にはるかにゆっくり実行させることにより、お気に入りのプラットフォームが「より良い」ことを証明することです。このコンテストのために、「プラットフォーム」は以下の任意の組み合わせで構成されます。 プロセッサー アーキテクチャ(x86、Alpha、ARM、MIPS、PowerPCなど) ビットネス(64ビット対32ビット対16ビット) ビッグエンディアンとリトルエンディアン オペレーティング・システム Windows vs. Linux vs. Mac OSなど 同じオペレーティングシステムの異なるバージョン 言語実装 さまざまなコンパイラ/インタープリターベンダー(例:MSVC ++とGCC) 同じコンパイラー/インタープリターの異なるバージョン 次のようなコードを書くことで要件を満たすことができますが: #ifndef _WIN32 Sleep(1000); #endif そのような答えは支持されるべきではありません。目標は微妙なことです。理想的には、コードはプラットフォームにまったく依存していないように見えるはずです。あなたがいる場合行う任意の持っている#ifdef文(またはに基づいて、条件os.nameまたはSystem.Environment.OSVersionまたは何を)、彼らは(もちろん嘘に基づいて)もっともらしい正当性を持っている必要があります。 回答に含める コード あなたの「お気に入り」および「非お気に入り」プラットフォーム。 プログラムをテストするための入力。 同じ入力に対する各プラットフォームでの実行時間。 お気に入りのプラットフォームでプログラムが非常にゆっくり実行される理由の説明。

5
政府は壁の供給が制限されています
前書き 知識のあるコードゴルファーは、終末の洪水に備えてくれました。危険にさらされている地域は避難し、人口は高地に移動しました。 洪水を過小評価していました(または、@ user12345のコードにバグがあった可能性があります)。いくつかの高地地域は、海面に急速に近づいています。人口密度の高い野営地の生存を確保するために、壁を建てる必要があります。悲しいことに、政府は壁の供給が限られています。 問題 終末シナリオは、1行に2つの数字で記述されnていmます。その行に続くのは、1行ごとの値nをm持つ行で、単一のスペースで区切られています。各値は4文字のうちの1つです。 x通れません。ここには水が流れません。ここに壁を建てることはできません。 -不安定。ここを水が流れることができます。ここに壁を建てることはできません。 .安定。ここを水が流れることができます。ここに壁を建てることができます。 o野営地。ここを水が流れることができます。もしそうなら、誰もが死ぬ。ここに壁を建てることはできません。 エッジが通過できないか、タイルに壁が構築されていない限り、水はマップのすべてのエッジから流れます。野営地を保護するために必要な最小数の壁を出力できるプログラムを作成します。 入力例 6 7 x . . x x x x x . . x - - x x . x x - - x x . o o o - . x . o o o - . x …
28 code-golf 

18
浮遊大群
前書き 雨はやっとおさまった。@ user12345のコードのバグにより、ほとんどの人類がdr死しました。生存者は世界中の群島に散らばっています。無線通信がアップし、人類は再び繁栄する態勢を整えています。理由はまったくありませんが、ゾンビ海賊がプライム子午線に集まり、西に向かって掃引しています。大群はすべてをむさぼり食う。 問題 私たちの終末シナリオは、協力する島のコミュニティのセットを表す1行に5つの整数で記述できます。それらは、西(左端の整数)から東(右端の整数)の順に並べられます。 最東の島から始まり、島民はペアで次の最も近い島に逃げます。奇妙なことに、乗船するペアごとに、そのうち1つだけが旅行を生き延びます。島民はペアで旅行するだけです。奇数の人口は、ゾンビの海賊の大群のふざけた行動に関する最新のラジオの更新を提供するために、唯一の住民を選出します。東のすべての島が移住を完了するか、死ぬまで、住民は旅行を拒否します。人口が最終的な最西端の島に到達すると、旅行は中止されます。 世界の終わりの運用管理者には、各村の最終的な人口を出力できるプログラムが必要です。 入力例 3 8 6 0 2 出力例 8 1 0 1 0 仮定 入力は、stdinを介して提供されるか、任意の名前のファイルから読み取られるか、引数として受け入れられます。 島ごとに、0 <=母集団<= 1024 人口は島を決して飛ばさない 最短回答が勝ちます!
28 code-golf 

12
動きを教えて
ジャックとジェーンは、時間を空けてチェスをすることにしました。残念ながら、ジャックは視覚化がかなり苦手です。もちろん、ポーン以外の特定の駒で可能な動きを把握するのは難しいと思います! あなたの挑戦は、ジャックが特定のピース(ポーン以外)の可能なオプションを見つけるのを助けることです。 忘れてしまった場合、さまざまな部分は次のように示されます。 K:キング Q:クイーン N:ナイト B:ビショップ R:ルーク 一例として、次の画像にナイトに位置しているd4とに移動することができc2、b3、b5、c6、e6、f5、f3、e2。与えられた入力に対して: Nd4 あなたが生成します: Nc2 Nb3 Nb5 Nc6 Ne6 Nf5 Nf3 Ne2 ルール: すべての可能な動きがリストされている限り、出力の順序は関係ありません 可能な移動は、空白、改行、またはその他の区切り文字で区切ることができます 入力は、パラメータとして、または経由でプログラムに渡すことができます STDIN プログラム内の空白はカウントされるので、それを最適に使用してください これはコードゴルフです。(その目的のために特別に設計されたツール/ユーティリティを使用しないでください。)最短の答えが勝ちです!
28 code-golf  chess 

30
ASCIIテーブルを印刷します
タスクは、ASCIIテーブルのn文字を表示することです。 印刷する最後の文字のインデックスとなるパラメーターnを受け取る関数(またはパラメーターとして引数を受け取るプログラム、STDINも使用できます)を作成できます。 タスクは非常に単純なので、例として、Python 2.7で可能な実装を示します。 (lambda n:map(chr, range(n)))(256) 私が言ったように、それは簡単な仕事です。これがコードゴルフであり、最短のコードが勝ちです! 編集 一部の人が指摘したように、このコードは結果を出力しません。私は英語で問題を説明するのに苦労するかもしれないので、それは単なる例です;-)。 EDIT2 最短のコードでなくても、プログラミング言語で回答を投稿してください。興味深い実装がいくつかあるかもしれません! EDIT3 結果を出力するように例を修正しました。
28 code-golf 

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