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

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

2
役に立たないインタプリタを実装する[終了]
閉じた。この質問には、詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 閉じた2年前。 あなたの仕事は、役に立たない言語へのインタープリターを構築することです。 機能要件は次のとおりです。 説明されているすべてのコマンドは、インタープリターによって受け入れられる必要があります。 NO.、NOOPそしてINCLUDE-xxx光栄に思う必要があります。 DONTUSEME(n) テストのためにより合理的なものに簡単に構成できるように、その基準日が必要です。 INCLUDE-xxxほぼ等しい確率でコマンドを生成できる必要があります。aを生成するDONTUSEME(n)場合、nに小さい値をランダムに選択する必要があります。 DONTUSEME(n)窓はNO.命令を生き残る必要があります。ヒント:これらのウィンドウの新しいプロセスを作成します。 BOOM!そしてKABOOM!悪いと怖い何かをしなければならず、KABOOM!より悪いでなければなりませんBOOM!。しかし、これはあまりにも真剣に受け止めてはならないので、破壊的、過度に破壊的、または元に戻すのが難しいものであってはなりません。、してくださいではない、やるんではない、としていないこれらの命令を実行させるrm -rf \、命令をフォーク爆弾を実行し、マルウェアをインストールし、ファイルシステム内のデータが破損、または郵便またはインターネットからの不適切なコンテンツをダウンロードし、またはいずれかの他の事が明らかに虐待。 TURINGVSALONZO実際に実行すべきことを実行しているかのように実行する必要があります。ヒント:ランダムに非常に長い時間、ランダムに短い時間、または永久にスリープするかどうかをランダムに決定します。 他のすべての事前定義された命令は、前述の命令と別の命令以外の何かを実行する必要がありますが、BOOM!またはより悪いものは実行しないでくださいKABOOM!。正確に何をするかはあなた次第ですが、単純な実装ではエラーメッセージまたはその他のテキストを出力するだけです。 ユーザーがインタープリターによって実行されるプログラムを提供する簡単な方法を提供する必要があります。すなわち、ファイルまたはからプレーンテキストを読むことは問題ありませんstdin。インターネットのどこかで暗号化されたファイルからそれを読むことはそうではありません。 オプション: 必要に応じていくつかの新しいコマンドを作成することもできますが、それらは他のコマンドと同じルールに従う必要があります。これを使用して、制限を回避したり、無効にBOOM!しKABOOM!たりしないでくださいDONTUSEME(n)。また、新しいコマンドを作成する場合は、それらの機能を説明してください。 未知のコマンドで入力を受け取った場合(または完全に解析不能なランダムなバイトが意味不明な場合でも)、インタープリターが何をするかを考える必要があります。 命令によってDONTUSEME(n)コマンドが無効になることはありませんが、そのためにキルスイッチを追加することができます。それを言語で公開しないでください。 悪用を避けるために、機能以外の要件がいくつかあります。 エントリは、可能な限り完全かつ自動である必要があります。これは、単に何らかのインストーラーまたは明らかに不完全なプログラムであってはならないことを意味します。この方法では、jQueryなどのライブラリまたはMaven Centralからパッケージをダウンロードして使用することは問題ありませんが、カスタムサーバーから任意のコードとパッケージをダウンロードすることはできません。 エントリは、このページ自体、またはこのページのミラーまたはコピーからコンテンツを取得して、何らかのリフレクションを行うため、または他の目的のために使用しないでください。これは、この質問に対する他の参加者の回答を読んだり、何らかの方法で質問を混乱させようとするプログラムを避けるために不可欠です。 インタプリタは不変であり、入力ファイルを自己修正または修正してはなりません。しかし、オリジナルを変更せずにインタープリターまたは入力ファイルのミュータントコピーを作成することは問題ありません。 そして最後に、それを考慮して: 回答のプログラムは、完全に適合していても、ほとんど役に立たないと予想されます。 言語は(意図的に)非常に不十分に指定されており、回答者には多くの自由度があり、それらを選択するインセンティブがあります。 要件と可能な実装には、多くの主観的なポイントがあります。 これの目的は、ただ楽しさと創造性を得ることにあります。 そして、これは人気コンテストであり、ルールに完全に準拠した最も支持された答えが勝ちです!そのため、ゴルフをしたり、答えを難読化したりする必要はありません(ただし、必要に応じて行うこともできます)。賛成に値するオリジナルでクリエイティブなものを必ず投稿してください。つまらない退屈なエントリは投稿しないでください。

24
数値の立方根を計算する
このゴルフの目標は、入力として与えられた数値の立方根を計算して出力するプログラムまたは関数を作成することです。 ルール: 外部リソースなし 組み込みのキューブルート関数は使用しません。 数値を累乗する(平方根、4番目の根などを含む)メソッド/演算子を使用しません。 関数/プログラムは、入力として浮動小数点数と負数を受け入れられる必要があります。 立方根が浮動小数点数である場合は、小数点以下4桁に丸めます。 これはコードゴルフで、バイト単位の最短コードが勝ちです。 テストケース: 27 --> 3 64 --> 4 1 --> 1 18.609625 --> 2.65 3652264 --> 154 0.001 --> 0.1 7 --> 1.9129 上記のすべてのテストケースを使用して-27 --> -3、負の数(、-64 --> -4...)をテストできます。
12 code-golf  math 

7
Cコード圧子
状況:あなたは高校の教師で、コンピューティングクラスにCプログラムの書き方を教えています。ただし、これは用語の始まりに過ぎないため、インデントとスペースの重要性については教えていません。あなたが彼らの作品に印をつけていると、あなたの目はとても痛くなり、あなたは苦痛に悲鳴を上げ、これが続くことができないことに気づきます。 タスク:任意の言語で、有効なCソースコードを入力として受け取り、適切にフォーマットされたプログラムを作成することにしました。人気のコンテストなので、適切にフォーマットされたコードを決定する必要があります。できるだけ多くの機能を実装することをお勧めします。以下に例を示します。 各行の前に適切なインデントを追加します 後にスペースを追加,変換例えば、およびその他の演算子をint a[]={1,2,3};しますint a[] = {1, 2, 3};。ただし、文字列リテラル内で演算子を処理しないでください。 各行の末尾のスペースを削除します ステートメントを複数の行に分割します。たとえば、生徒が書いtmp=a;a=b;b=tmp;たり、int f(int n){if(n==1||n==2)return 1;else return f(n-1)+f(n-2);}すべてを1行にしたりする場合、それらを別の行に分割できます。forただし、ループには注意してください。セミコロンが含まれていますが、分割する必要はないと思います。 各関数を定義した後に新しい行を追加します 生徒のコードを理解するのに役立つ他の機能もあります。 受賞基準:これは人気コンテストなので、ほとんどの賛成票で答えが勝ちます。同点の場合、実装されているほとんどの機能を備えた答えが優先されます。それが再び同点の場合、最短のコードが優先されます。 回答には、実装した機能のリスト、およびサンプルの入力と出力を含めることをお勧めします。 編集:ここのコメントで要求されているのはサンプル入力ですが、これは参照用であり、できるだけ多くの機能を実装することをお勧めします。 入力: #include <stdio.h> #include<string.h> int main() { int i; char s[99]; printf("----------------------\n;;What is your name?;;\n----------------------\n"); //Semicolon added in the string just to annoy you /* Now we take …

2
回路図を解釈する
あなたの課題は、論理ゲートを備えた回路図を解釈することです。 論理ゲート(実際にこれらが何をするかを知る必要はありません/このチャレンジを完了するには): およびゲート: a またはゲート: o ナンドゲート: A また、ゲート: O XORゲート: x xnorゲート: X ゲートではない: ~ 最後のゲートを除く各ゲートには2つの入力があります。入力は.、ゲートを中心とした3 x 3の正方形の左上隅と左下隅のaからです。ないため、入力はその左側に直接あります。出力は.、右側に直接あります。 ワイヤは -|\/.= - 右に1本、左に1本の2本のワイヤに接触します。 c-c | 2本のワイヤに接続します。1本は上、もう1本は下です。 c | c /そして\次のように動作します: c c \ / c c . 周囲のすべてのワイヤに接触します: ccc c.c ccc =特別です; 隣接するワイヤを接続します: -=- 2本のワイヤを接続します。以下では \|/ -=- /|\ 反対側の各ワイヤは相互に接続されていますが、他のワイヤは接続されていません(これは、それとは異なるところです.)。 電流が流れるためには、2本のワイヤが両方とも他方に接続されている必要があるため|-、電流は流れません。 …

30
縦書きの単語を含む文字列を印刷する
タスクは、ASCII文字の入力文字列を取得し、文字列をスペースで区切られた一連の垂直ワードとして出力することです。以下に例を示します。 与えられた文字列: Hello, World! My name is Foo. 出力は次のようになります。 H W M n i F e o y a s o l r m o l l e . o d , ! プログラムが端末をラップアラウンドする必要がある文字列を正しく処理する場合、10文字のボーナスポイントが付与されます。これは80文字に設定されます。 あなたのプログラムが逆もできるなら50ポイント!

6
排水溝に行く
私はかつてこの(ミニ)ゲームに遭遇しました。このゲームでは、複数の水平パイプで接続された4つ以上の垂直パイプがあり、ボールまたは水を垂直パイプに落とさなければなりません。 私が知っている2種類があります: オブジェクトを出口の1つの下のバケット/バスケットに入れます(どのパイプを投入するかを推測します) オブジェクトのパイプを推測します。 サンプルパイプ: | | |-------| |-------| |-------| | |-------| | |-------|-------|-------| | |-------| | |-------| |-------| |-------| |-------| | |-------| | 基本的なルール: 水平パイプを移動する場合、オブジェクトは可能な場合は下に移動します 垂直パイプを移動すると、可能な場合、オブジェクトは水平パイプに変わります。 あなたの仕事 パイプのランダムなグリッドを作成するプログラムを作成します(サンプルパイプを参照)。 少なくとも4本の垂直パイプと、少なくとも10本の水平パイプが必要です。 垂直パイプの長さはあなた次第です。 オブジェクトが最下部に到達するまでにたどったパスを表示し、そこに到達するのに何ターンかかったかを示します。 (オプション)開始点を決定するための入力。左から右へ1..Nの番号が付けられたパイプ。 表示: | vertical pipe - horizontal pipe : vertical pipe used by the object = horizontal pipe …

4
ManufactoriaのMod 7
シンプルなManufactoriaチャレンジ。7を法とする入力を計算します。入力はビッグエンディアンバイナリ(青= 1、赤= 0)になります。出力は同じ形式である必要があります。 テストケースが提供されます。最小の部品数が優先されます。 http://pleasingfungus.com/Manufactoria/?ctm=Mod7;Input:_binary_number_big_endian._Output:_that_binary_number_mod_7;bbb:|brrr:b|brrrr:br|bb:bb|bbrrb:brr|brrrrb:brb|bbrb:bbr; 13; 3; 1 ; (入力mod 7が0の場合、何も出力しません。)

1
2Dバイト配列で長方形の数を見つける
0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000001111111111111100000000000000000011111111111111100000000000000000 0000001111111111111100000000000000000011111111111111100000000000000000 0000001111111111111100000000000000000011111111111111100000000000000000 0000001111111111111100000000000000000011111111111111100000000000000000 0000000000000000000000000000000000000011111111111111100000000000000000 0000000000000000000000000000000000000011111111111111100000000000000000 0000000000011111100000000000000000000011111111111111100000000000000000 0000000000011111100000000000000000000011111111111111100000000000000000 0000000000011111100000000000000000000011111111111111100000000000000000 0000000000000000000000000000000000000011111111111111100000000000000000 0000000000000000000000000000000000000011111111111111100000000000000000 0000000000000111111000000000000000000011111111111111100000000000000000 0000000000000100001000000111111000000011111111111111100000000010000000 0000000000000100001000000111111000000000000000000000011000000000000000 0000000000000111111000000111111000000000000000000000011000000000000000 0000000000000000000000000000111111000000000000000000000000000000000000 0000000000000000000000000000111111000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 サイズmx nのバイトの2次元配列が与えられます。すべてのバイトが1または0であることが保証されています。上記のように、2dで表示したときに1で表される長方形の数を見つけます。 完全に塗りつぶされた長方形のみがカウント対象と見なされます。 長方形は、エッジ上にある場合を除き、0で囲む必要があります(ただし、1の斜めに接する長方形は大丈夫です(例を参照してください))。 たとえば、上記の配列には5つの有効な長方形があります。 任意の言語を使用できます。

5
ハーディ・ラマヌジャン数の一般化
1729は、ハーディ–ラマヌジャン数として知られ、2つの方法で正の整数の2つの立方体の合計として表現できる最小の正の整数です(12^3+1^3=10^3+9^3=1729)。n(選択した言語にとって自然な形式の入力として)整数が与えられた場合n、2つの一意の方法で2のべき乗した正の整数の和として表現できる最小の正の整数を見つけます。外部ソースを使用しません。最も少ないキャラクターが勝ちます。 これは実際にはの未解決の問題であることに注意してくださいn>4。これらの数値については、プログラムを検索で永久に実行するか、試してみてください!無限の時間とリソースが与えられた場合に、プログラムが問題を解決するようにします。

5
シェルスクリプトのサブセットを実装する
このサイトには、インタープリタータグでのさまざまな言語の実装に関連する多くの問題がありました。ただし、実際にはそれらはすべて、誰も使用しない難解な言語でした。ここのユーザーのほとんどがおそらく既に知っている実用的な言語の通訳を作成する時間です。はい、タイトルの読みに問題がある場合(あなたが持っているのではない)のシェルスクリプトです。(はい、GolfScriptやBefungeなどの言語がすべてを獲得するのにうんざりしているので、私は意図的にこの挑戦をしました。そのため、より実用的なプログラミング言語が勝つ可能性が高い場合に挑戦をしました) ただし、シェルスクリプトは比較的大きな言語であるため、実装を求めません。代わりに、シェルスクリプト機能の小さなサブセットを作成します。 私が決めたサブセットは次のサブセットです。 プログラムの実行(ただし、単一引用符が許可されている場合でも、プログラムには文字のみが含まれます) プログラム引数 単一引用符(空白を含む印刷可能なASCII文字を受け入れ、単一引用符を除く) 引用符で囲まれていない文字列(ASCII文字、数字、ダッシュを許可) パイプ 空のステートメント 改行で区切られた複数のステートメント 末尾/先頭/複数のスペース このタスクでは、STDINから入力を読み取り、要求されたすべてのコマンドを実行する必要があります。POSIX互換のオペレーティングシステムを安全に想定できるため、Windowsなどの移植性は必要ありません。他のプログラムにパイプされていないプログラムは、STDINから読み取らないと安全に想定できます。コマンドが存在すると仮定しても安全です。他に何も使用されないと想定しても安全です。何らかの安全な仮定が破られていれば、何でもできます。最大15個の引数と512文字未満の行を安全に想定できます(明示的なメモリ割り当てなどが必要な場合-Cがまだ小さい場合でも、Cで勝つ可能性はほとんどありません)。ファイル記述子をクリーンアップする必要はありません。 すべての行を受信した後、またはSTDINが終了した後でも、いつでもプログラムを実行できます。必要なアプローチを選択してください。 シェルをテストできるシンプルなテストケース(3番目のコマンドの後に続く空白に注意してください): echo hello world printf '%08X\n' 1234567890 'echo' 'Hello, world!' echo heeeeeeelllo | sed 's/\(.\)\1\+/\1/g' yes|head -3 echo '\\' echo 'foo bar baz' | sed 's/bar/BAR/' | sed 's/baz/zap/' 上記のプログラムは、次の結果を出力するはずです。 hello world 499602D2 Hello, world! helo y …

8
スティックをペイントするにはどれくらい時間がかかりますか?
(このMath.SE問題に基づいて、グラフィックも提供します) 私はこのように見える棒を持っています: 私はそれをちょっとこのように見せたいです: 私は専門の画家ではありませんが、このような野心的なDIYプロジェクトを始める前に、頭の中にいないことを確認したいと思います。 あなたのプログラムは、このスティックをペイントするのにいくつのステップが必要かを教えてくれるはずです。各ステップでは、前のペイント層を覆う無地の連続領域をペイントします。上記の例では、左半分を青、右半分を赤、そして2つの別々の緑の領域を合計4ステップでペイントできます(緑は連続的にペイントされません)。 これはASCII形式です。 ------ bbb--- bbbrrr bgbrrr bgbrgr このスティックをペイントして同じ結果を得るには、いくつかの異なる方法があります。ただし、時間の見積もりにのみ興味があり、これは4つのステップです。 ゴール プログラムは、指定された配色でスティックをペイントするために必要な最小ステップ数を出力する必要があります。ペイントスキームは文字列の形式になり、出力は数字になります。これはコードゴルフです。最短のプログラムが勝ちます。 入力 プログラムは、文字列の形でスティックの配色を受け取ります。一意の文字(大文字と小文字が区別されます)はそれぞれ、一意の色を表します。 YRYGR grG GyRyGyG pbgbrgrp hyghgy 出力 これらの数値は、スティックをペイントするのに必要な最小ステップ数です。 4 3 4 5 4 説明 これが私が上記の数字に到達した方法です。プログラムはこれを出力する必要はありません: ----- YYY-- YRY-- YRYG- YRYGR --- g-- gr- grG ------- GGGGGGG GyyyGGG GyRyGGG GyRyGyG -------- pppppppp pbbbpppp pbbbrrrp pbgbrrrp pbgbrgrp …
12 code-golf  math 

12
数値文字列を縮小する
文字列を考える1と、2いくつかのコードを記述し、任意の長さの(である必要はありません機能を計算するにはどのように多くのステップ、それはこの基準以下、最終形態に文字列を縮小する必要がないということはもう、すべてがうまくなります): 文字列がの場合112112、これは次のように1、2、1、2を印刷する必要があることを意味します 1112。もう一度操作を実行すると、1と2を印刷する必要があります12。次に、1を2つ印刷して、を取得し2ます。この文字列は今後変更されないため、これは最終的な形式です。3最終フォームに到達するために3つのステップが必要だったため、コードが出力されます。 その他の規則 文字列の長さが不均等な場合、最後の数字はそのまま残ります。 これ以上変更できない文字列(など222222)はすべて最終形式と見なされます。 外部ソースは使用できません。 コードは1およびのすべての文字列で動作する必要があり2ます。 コードゴルフなので、最短のコードが優先されます。 コードはすべてのステップを印刷する必要があります。 すべての入力方法で問題ありません。 例 Input >> 122122122121212212 Your code has to print: 211222111111222 11222111222 122111222 2111222 111222 1222 222 Steps:7 (you can omit the "Steps") ---- ---- ---- ---- Input >> 22222221 Your code has to print: 22222211 2222221 2 ---- ---- …
12 code-golf 

1
日の出と日の入り
私は少しロマンチックです。私たちがいる場所で日の出と日の入りを見るために妻を連れ出すのが大好きです。この演習のために、私がたまたま日付や緯度、経度に関係なく、日没または日の出の時間を教えてくれるコードは持っていないとしましょう。 あなたのタスク、コーダーは、10進数の緯度と経度(N度とW度で取得されるため、SとE度は負と見なされます)とYYYY-MM-DD形式の日付( 2000年1月1日以降)、日の出と日の入りのために24時間形式で2回吐き出します。 例:オーストラリアのシドニーでの今日 riseset -33.87 -151.2 2013-12-27 05:45 20:09 ボーナス:高度を考慮できる場合は-100、夏時間を考慮できる場合は-100 コードは、緯度と経度に基づいて入力で指定された関連するタイムゾーン、またはクライアントマシンのタイムゾーンで時間を吐き出さなければなりません。
12 code-golf  math 

21
リストの個別の要素を頻度で降順に並べ替えます
リストまたは配列を受け取り、頻度の降順でソートされた個別の要素のリストを返す関数を作成します。 例: 与えられた: ["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"] 期待される戻り値: ["Doe","Harry","John","Dick"]
12 code-golf 

23
GolfScriptの改良バージョン[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は、もっと多くのことができるより短いプログラムのために、改善されたGolfScriptを書くつもりです。これは挑戦ではありません。それは私がすべきことについてのフィードバックとヒントのリクエストです。(タグを参照) これがコミュニティWikiかどうかはわかりません。もしそうだと思うなら、モデレーターにそれを変換するようにフラグを立ててください:) この言語は、GolfScriptと非常によく似ています。まだRubyで書かれています。ただし、いくつかの違いがあります。 `文字列の区切り文字として使用します。これは一般的な文字ではないため、エスケープの必要は少なくなります。(他のキャラクターは、その機能を置き換えることができます#(詳細は後ほど))。\`バックティック\\をエスケープする、バックスラッシュをエスケープする、他のエスケープシーケンスはありません。改行が必要な場合は、文字列に実際のリテラル改行を挿入するだけです。 RationalGolfScriptの主な欠陥の1つである任意精度の浮動小数点にRubyを使用する。 型を他の型に変換する機能。たとえば、ブロックを文字列に変換できます。 正規表現。おそらくで作成されました"..."。オペレーターもそれらに対して過負荷になります。たとえば、"\W"~{`Invalid: non-word character`}{`OK`}if。ブロックなどの変数からプッシュされると、自動的に実行されます。 ファイルおよび日付オブジェクト。GolfScriptでは不可能だったより多くのことを行います。これらにはリテラルはありませんが、それらを初期化するための関数`file.txt`flがあります(ファイル作成関数の名前は変更される場合があります)。 ハッシュかもしれませんが、それについてはわかりません。したほうがいい? さらに機能するヘルパー関数。たとえば、`http://example.com`netネットワークアクセスの場合(ここでも、net演算子の名前を変更できます)。rb文字列をRubyコードとして実行します。これらはさらに多くあります。提案を歓迎します。 コメントはありませんので、#他のことに使用できます。コメントが必要な場合は、問題`comment here`;なく機能します。(おそらく関数#を置き換えることができ`ます) 関数を追加するのがはるかに簡単になるように完全に書き直されます。基本的に、コードはより読みやすくなります。(GolfScriptのソースを見ましたか?:/) Github上にあるため、共同で作業できます。私はMITか何かの下でそれを認可します。 最終的な改行がないため、チートなクインが機能します:P そして、私はこれらを最も劇的で有用な変更だと思うので、これらを区別しています(おそらく浮動小数点を追加することを除く): 多くのRuby関数が組み込まれています。例えば、shuffle(略称されてもよいsf)(以前にかかった9文字)、 tr(以前は14文字)、 sample(sm予め.,rand=)、 flatten(fl以前???)、等 レブムのようにドロドロになります。たとえば~:a0<{0a-}aIF、~:$0<{0$-}$if(sort関数を上書きする)代わりに(文字変数名を使用して)できるようになりました。(ここからの例)。この方法では、大文字と小文字が区別されず、変数名に数字を使用できないことに注意してください。これはゴルフの言語なので、私の意見では大丈夫です:P デバッグが行われます。配列区切り文字、要素区切り文字などを指定するフラグ、数値出力(有理数、浮動小数点数、または整数?)、命令を1つずつステップ実行し、プログラムを実行する代わりに各トークンをトークン化して出力する機能を追加します。等 だから、私の質問は次のとおりです。改善するものは何ですか?何を追加すべきだと思いますか? コーディングを始める前に、これに関する他のアイデアはありますか?

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