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

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

20
変数の名前を印刷する[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 関数(完全なプログラムではない)を作成し、関数が引数として単一のグローバル変数(または言語に最も近いもの)で呼び出された場合、その変数の名前を出力(つまり、出力または返す)します。引数が変数ではない場合、代わりにfalsey値を出力します。(引数が変数であるがグローバルではない場合を処理する必要はありません。) 関数呼び出しと関数定義の間にコンパイル時の接続があってはなりません(特に、関数定義は、テキストまたは抽象構文ツリーではなく、ソースコードのリテラルフラグメントの形式で引数を受け取るマクロまたは同様の構成体であってはなりません。形)。つまり、個別のコンパイルをサポートする言語では、関数呼び出しが最初にコンパイルされても(関数定義の知識はないが型シグネチャまたは同等のものがあれば)プログラムが動作する必要があり、その後関数定義がコンパイルされます。言語に個別のコンパイルがない場合でも、呼び出しと定義を同様に分離する必要があります。 コンパイルされた言語を使用している場合は、ディスクから完全なプログラムのコンパイルされた形式を読み取り、プログラムがデバッグ情報を使用してコンパイルされたと見なすことができます。(したがって、プログラムからデバッガーをそれ自体にアタッチすることで機能するソリューションが許可されます。) このタスクはすべての言語で実行できるわけではないことに注意してください。 例: var apple = "Hello" p(apple) // apple var nil = "Nothing" p(nil) // nil var SOMETHING = 69 p(SOMETHING) // SOMETHING function foo(){} p(foo) // foo p(3.14159) // false p(function foo(){}) // false

16
XOR暗号化の解読
あなたの仕事は、暗号化された文字列を入力として受け取り、解読された文字列を出力して、隠されたメッセージを明らかにすることです。 入力と出力の両方の文字列には、この64個のASCII文字のリストの文字が含まれます(先頭のスペースに注意してください)。 !"#$%&'()*+,-./0123456789:;=?@[\]^_abcdefghijklmnopqrstuvwxyz|~ これらの文字には、上記の順序で番号が割り当てられます。 ! " # $ % & ... 0 1 2 3 4 5 6 ... したがって、スペースは番号0、!番号1、~番号63です。これらの番号は、6ビットのバイナリコードで表すことができます。 : 0: 000000 !: 1: 000001 ": 2: 000010 #: 3: 000011 .. ... ...... z: 61: 111101 |: 62: 111110 ~: 63: 111111 暗号化は非常に簡単です。 私が使用しますeC暗号化された文字のため、そしてC元の文字列の文字に。C(n)は、元の文字列eC(n)のn番目の文字であり、暗号化された文字列のn番目の文字です。 文字の6ビットバイナリ表現を使用します。最初の文字はになりますeC(0) = not(C(0))。そこから、すべてのキャラクターはになりますeC(n) = …

7
六角形の三角形!
あなたの仕事:辺の長さの六角形の三角形を作成します。nここnで、正の整数または0です。 最初に、六角形を定義させてください: / \ | | \ / (素晴らしいASCIIアートですよね?) 六角形は、側面を共有することで互いにリンクできます。 / \ / \ | | | \ / \ / / \ | | / \ / | | \ / 六角形の三角形は次のとおりです。 / \ | | / \ / \ | | | \ / \ / その六角形の三角形の辺の長さは2であり、1つの辺を作るには2つの六角形が必要です。辺の長さが1の六角形の三角形は単一の六角形であり、辺の長さが0の六角形は空です。 より正式には、六角形の三角形は、六角形が側面でリンクされた三角形です。上部の六角形は、下部の2つの側面でその下の2つにリンクしています。左下の三角形はその右および右上の三角形にリンクし、右下の三角形はその左および左上の三角形にリンクします。角の間に六角形があり、反対側で接続されており、その数はn-2です。三角形は塗りつぶされていません。 …

30
パスワードを読む
あなたの課題は、キーボード/標準入力から「パスワード」を読み取ることです。 チャレンジ: 文字列を読む s目に見えない。 の各文字について s、文字を出力しcます。 リアルタイムで。 ルール: 印刷する必要があります cリアルタイムでます。ユーザーが文字を入力したらすぐに表示する必要がありますc。 c 定数でなければなりません。つまり、同じ文字でなければなりません。 c目に見えるものはどれでも文字を使用(つまり、改行、スペース、タブ、または印刷不可にすることはできません)。 cに基づくことはできませんs。つまり、c前に定義/定数する必要がありますs読み取るあります。 c プログラムを実行するたびに同じでなければなりません。 c の文字のいずれかになります s他のすべての規則が守られている限り、偶然の場合。 のどの文字sも画面に表示されない場合がありますが、c例外があります(前の規則を参照)。 他のすべてのルールに従う限り、入力および出力の合理的な方法を使用できます。 の長さはs、ターミナル/グラフィカルウィンドウの幅より長くなることはないと想定できます。 端末を使用している場合、プログラムは改行またはEOFが入力された後に終了する必要があります。 例: Ifはsいたpassword01とcし*、出力は次のようになります。 勝者: 各言語で最短の提出が勝ちです。
20 code-golf  string 

11
フィボナッチ数列の線形補間
あなたの仕事はn 番目のフィボナッチ数を見つけることですが、nは必ずしも整数ではありません。 0から始まるフィボナッチ数列は次のとおりです。 0, 1, 2, 3, 4, 5, 6, 7, ... 1, 1, 2, 3, 5, 8, 13, 21, ... しかし、2 .4 番目の数字が必要な場合はどうなりますか? 2.4 番目の数は3との間の0.4倍の差であるRD及び2 番目のフィボナッチ数プラス2 番目のフィボナッチ数。したがって、2.4 番目のフィボナッチ数は2 + 0.4 * (3 – 2) = 2.4です。 同様に、6.35 番目のフィボナッチ数は13 + 0.35 * (21 – 13) = 15.8です。 あなたの仕事は見つけることであるNを番目ように、フィボナッチ数nが 0以上です。 インデックスをゼロまたは1にすることもできますが、どちらを使用しているかを言ってください。 …

1
良い振動
テルミンの音は、ザ・ビーチ・ボーイズの歌「グッド・バイブレーションズ」で不滅です。ソプラノのエミュレーションであるように見えますが、多くの人はその音をスタートレックのオリジナルシリーズのテーマとも関連付けています。 この課題では、テルミンを実装する必要があります。 入力 マウスまたは他の入力デバイス(たとえば、ジョイスティックを使用できます)から2次元入力を取得します。これにより、オーディオ出力デバイスから次のようなトーンが生成されます。 xを大きくすると、トーンの周波数が高くなります。周波数は音符で指数関数的に増加するため、マウスのx位置と音符の間に線形関係を実装する必要があります。 yを大きくすると、トーンの音量が大きくなります。 実際のテルミンによって生成される波形に関して混乱があるように見えるので、簡単にするために、正弦波(またはその近似値)を使用する必要があります。 ルール 生成されるトーンには、少なくとも2オクターブの範囲が必要です。より多くの範囲が許容されます。A-440は範囲内になければなりません。 連続的に変化する周波数と振幅の可聴外観を作成するには、入力デバイスの両方の次元で考慮される値の範囲は少なくとも500でなければなりません。または、ウィンドウを開かずに、マウスまたは他の入力デバイスから座標を直接読み取ることができます。 プログラムを停止するには、キーの組み合わせ、マウスクリック、またはその他の一般的な入力デバイスなどの簡単な手段が必要です。CTRL-cで十分です。 他の作業を必要とせずにソリューションを完全に実装しない限り、任意の標準ライブラリを使用できます。 コードゴルフとI / Oの標準ルール マウスまたは入力デバイスが入力ボックスにフォーカスを失うことで停止する場合があります。 ノート 出力トーンは動的に生成されるため、トーンが連続波形であることを確認するように注意する必要があります。つまり、位相または振幅の突然の変化によって引き起こされる可聴クリックやポップ音はありません。 入力サイズゾーンを500 x 500に制限することもできますが、それより大きくすることもできます。 これはcode-golfなので、どの言語でも最短の答えが勝ちです。 特別な感謝 この挑戦をし、秘密のサンタのサンドボックスに投稿してくれたデジタルトラウマに感謝します。私はいくつかの編集を行いましたが、ここに元の投稿があります。
20 code-golf  music 

10
Four Validatorの接続
前書き Connect Fourは、水平方向、垂直方向、斜め方向の4つを連続して取得しようとするゲームです。このコードゴルフでは、ゲームボードを与えられて、誰が勝ったかを見つけようとします。勝者は常に1人で、勝者は1人だけです。 仕事 Connect Fourボードが与えられたら、勝者が誰であるかを調べます:XまたはY。勝者は常に1人で、勝者は1人だけです。ボードのサイズは、ゲームボードの様子と同じように常に6 x 7です。 ボードの場合、次のボードはこの例でXは赤でY青です。 入力は次のようになります。 OOOOOOO OOOOOOO OOOOOOO OOOOXOO OOOXXOO OOXYYYY ゲームの行を改行文字(上記のように)で区切ることができます。分割文字は使用できません。行を配列またはリストに分割するか、文字のマトリックスを入力できます。 この例の正しい出力: Y Yには4つが連続しています。したがって、Yが勝者です。したがって、Yを出力します。 テストケース 入力: OOOOOOO OOOOOOO OOOOOOO OOOOOOO OOYYOOO OYXXXXO 出力: X 入力: OOOOOOO OOOOOOO OOOOOOO XXXXOOO YXYYOOO YXYYXYX 出力: X 入力: YXYYXOO XYXXYOO XXXYYOO YYYXXOO XXYYYYO XXYYXXO 出力: Y 入力: OOOOOOO …

20
数字を含む言葉
数字の単語は、いくつかの文字を削除した後、1、2、3、4、5、6、7、8、9のいずれか1つの数字が残る単語です(ゼロではありません)。 たとえば、BOUNCEとANNOUNCEは数字の単語を含むため、数字の単語です。 ENCODEは、O、N、およびEを含んでいるにもかかわらず、数字ではありません。それらは順序が正しくないためです。 入力またはパラメーターとして単一の(大文字または小文字-選択)単語を受け取り、それが数字単語かどうかを判別するプログラム/関数を作成します。コードをできるだけ短くしてください。 単語が数字の単語でない場合は、「NO」、0、または「falsey」値を返す必要があります(これは言語によって異なる場合があります)。単語が数字の単語である場合、それに含まれる数字を数字として出力する必要があります。 単語に複数の数字が含まれていないと想定できるため、ONFIVEのようなものはありません。 テストケース BOUNCE 1 ENCODE NO EIGHT 8 BLACKJACK NO FABULOUS NO EXERCISE NO DRIFTWOOD 2 SERVICEMAN 7 INSIGNIFICANCE 9 THROWDOWN 2 ZERO NO OZNERO 1 この課題は、BIO 2009の質問1から抜粋したものです(非常にわずかな修正です)。ほとんどのテストケースは、マークスキームから取得されます。
20 code-golf  string 

30
インターリーブ反転
文字列が与えられたら、インターリーブで逆にします。abcdefghiおよびabcdefghijにインデックスを付ける方法を次に示します。 偶数インデックスの文字を奇数インデックスの文字から分離します。acegi bdfh acegi bdfhj 奇数インデックスで文字を反転します:acegi hfdb acegi jhfdb 再び1つの文字列にインターリーブします。ahcfedgbi ajchefgdib ルール 偶数長と奇数長の両方の文字列をサポートする必要があります。 0インデックス単位では、偶数インデックスではなく奇数インデックスで文字を反転する必要があります。 1インデックス単位では、もちろん、奇数ではなく偶数インデックスで文字を反転する必要があります。 入力は印刷可能なASCII(コードポイント32-126)で構成され、改行は含まれません。 入力は、文字列または文字のリスト(1文字の文字列ではない)として取得できます。例えばString/ char[]またはchar*許可されていますが、String[]/ char[][]またはchar**ではありません。 テストケース Input Output Hello, World! HdlroW ,olle! Hello World! H!llooW rlde ABCDEFGHIJKLMNOPQRSTUVWXYZ AZCXEVGTIRKPMNOLQJSHUFWDYB !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ }"{$y&w(u*s,q.o0m2k4i6g8e:c<a>_@]B[DYFWHUJSLQNOPMRKTIVGXEZC\A^?`=b;d9f7h5j3l1n/p-r+t)v'x%z#|!~ P P AB AB xyz xyz 空の文字列の場合、空の文字列自体を返します。
20 code-golf  string 

8
多項式を見つける
fは、非負の整数係数を持つ多項式であることを知っています。 与えられたf(1)とf(1 + f(1))はfを返します。fを係数のリスト、ASCII形式の多項式などとして出力できます。 例: f(1) f(1+f(1)) f 0 0 0 1 1 1 5 75 2x^2 + 3 30 3904800 4x^4 + 7x^3 + 2x^2 + 8x + 9 1 1073741824 x^30

1
λ式をSK式に変換
λ計算、又はラムダ計算は、匿名関数に基づいて、論理システムです。たとえば、これはλ式です。 λf.(λx.xx)(λx.f(xx)) ただし、この課題のために、表記を簡略化します。 に変更λします\(入力しやすくするため):\f.(\x.xx)(\x.f(xx)) .我々はそれをドロップすることができますので、ラムダヘッダーのは、不要です。\f(\xxx)(\xf(xx)) 使用Unlambdaとスタイルのプレフィックス表記を`(これを行う方法の完全な説明については、参照ではなく2つの関数を書くよりもアプリケーションのためのラムダ計算表記間の変換を):\f`\x`xx\x`f`xx これは最も複雑な代替です。各変数を、その変数が属するラムダヘッダーに対してどれだけ深くネストされているかに基づいて、括弧内の数字で置き換えます(つまり、0ベースのDe Bruijnインデックスを使用します)。たとえば、\xx(恒等関数)では、式を変数から最後までトラバースするときに遭遇する最初の(0から始まる)ヘッダーに属するためx、本文のはに置き換えられ[0]ます。\x\y``\x`xxxyに変換され\x\y``\x`[0][0][1][0]ます。ヘッダーに変数をドロップして、を残すことができます\\``\`[0][0][1][0]。 組み合わせ論理は、基本的にλ計算から作成されたチューリングターピットです(まあ、実際は最初に来ましたが、ここでは無関係です)。 「組み合わせロジックはラムダ計算の変形と見なすことができ、ラムダ式(機能の抽象化を表す)は限定されたコンビネータのセット、バインドされた変数が存在しないプリミティブ関数に置き換えられます。」1 組み合わせロジックの最も一般的なタイプはSKコンビネーター計算で、次のプリミティブを使用します。 K = λx.λy.x S = λx.λy.λz.xz(yz) コンビネータI = λx.xが追加されることもありますが、SKK(または実際SKxにはx)と同等であるため、冗長Iです。 必要なのは、λ計算の任意の式をエンコードできるようにするためのK、S、およびアプリケーションだけです。例として、関数λf.(λx.xx)(λx.f(xx))から組み合わせロジックへの変換を次に示します。 λf.(λx.xx)(λx.f(xx)) = S(K(λx.xx))(λf.λx.f(xx)) λx.f(xx) = S(Kf)(S(SKK)(SKK)) λf.λx.f(xx) = λf.S(Kf)(S(SKK)(SKK)) λf.S(Sf)(S(SKK)(SKK)) = S(λf.S(Sf))(K(S(SKK)(SKK))) λf.S(Sf) = S(KS)S λf.λx.f(xx) = S(S(KS)S)(K(S(SKK)(SKK))) λx.xx = S(SKK)(SKK) λf.(λx.xx)(λx.f(xx)) = S(K(S(SKK)(SKK)))(S(S(KS)S)(K(S(SKK)(SKK)))) プレフィックス表記を使用しているため、これは```S`K``S``SKK``SKK``S``S`KSS`K``SKK`です。 1出典:ウィキペディア チャレンジ 今までに、あなたはおそらく何であるかを推測しました:有効なλ式(上記の表記法)を入力および出力(または返す)としてSKコンビネーター計算で書き直されたプログラムを書く。これを書き換える方法は無限にあることに注意してください。無限の方法のいずれかを出力するだけです。 これはcode-golfであるため、最短の有効な送信(バイト単位で測定)が優先されます。 …

18
(奇妙な)単位円を描いてください!
前書き 通常の単位円を知っていて、愛しているかもしれません。しかし、数学者は狂っているので、彼らはコンセプトを満足するところまで抽象化しましたx*x+y*y=1。Cryptographers 1も奇妙であるため、彼らは有限の場と時々有限のリングを愛します(しかし、彼らは多くの選択肢があるわけではありません)。 チャレンジ 入力 お気に入りのエンコードで1より大きい正の整数。この番号をnと呼びましょう。 出力 "X"(大文字のラテンX)と ""(スペース)を使用して、入力整数を法としてASCII-Artとしてモジュレーションする単位円の "picture"(n x n文字で構成される)を出力します。末尾のスペースと改行を使用できます。 詳細 座標系を左下から右上にスパンする必要があります。ポイントが円の方程式を満たしている場合は常に、その位置にXを配置し、そうでない場合はスペースを配置します。 円の境界の一部と見なされるポイントの条件は次のとおり mod(x*x+y*y,n)==1です。 ここで座標系の簡単な説明: (0,4)(1,4)(2,4)(3,4)(4,4) (0,3)(1,3)(2,3)(3,3)(4,3) (0,2)(1,2)(2,2)(3,2)(4,2) (0,1)(1,1)(2,1)(3,1)(4,1) (0,0)(1,0)(2,0)(3,0)(4,0) 役立つ場合は、軸の方向を逆にすることもできますが、例ではこの方向を想定しています。 誰が勝ちますか? これはコードゴルフなので、バイト単位の最短コードが勝ちです!デフォルトのI / Oメソッドのみが許可され、すべての標準的な抜け穴は禁止されています。 例 入力:2 X X 入力:3 X X XX 入力:5 X X X X 入力:7 X X X X X X X X 入力:11 …

30
配列に2以外のものが含まれているかどうかを判別
数値または配列で構成される配列を取得し、2s のみが含まれる場合に出力します。 出力は真実または偽の値である必要があります(これにより回答が破壊される場合はご容赦ください) 真実のテストケース [2] [2,2] [[2],[2,2],2] [] [[],[]] Falseyテストケース [1] [22] [2,2,2,1] [[1,2],2] 標準の抜け穴は禁止されています。 デフォルトのIOルールが適用されます。 コードゴルフ、最少バイトが勝ちます!

3
[Br] eaking Code Golf [Ba] d
次の文字列を検討してください。 Tin Snips この文字列には、周期表の原子記号がいくつか含まれています。これらのいくつかを識別するために、この文字列を書き換えることができます。 [Ti][N] [Sn][I][P][S] もちろん、次のように書くこともできます。 T[In] [S][Ni][P][S] 入力を書き換える規則は次のとおりです。 入力の大文字小文字は、アトミックシンボルの一致に関しては重要ではありません。 要素がアトミックシンボルで使用される場合、シンボルが正しいように大文字と小文字を変更する必要があります。例:hになり[H]ます。 すべての要素のシンボルはASCII角括弧に包まれ、されている[と]。 空白は保持さBig egoれ[Ge]ます。「g」と「e」をに結合することはできません。 すべての入力文字をアトミックシンボルに結合する必要はありません。入力文字がシンボルに入れられない場合、そのまま渡されます(大文字と小文字は区別されません)。 シンボルを作成できる場合は、作成する必要があります。つまり、Tin上記の例では、その単語に少なくとも1つのシンボルを作成できるため、出力することはできません。未使用の文字を通過できるのは、アトミックシンボルの構築に使用できない場合だけです。 この課題のために、水素(1)からオガネソン(118)までのすべての要素が有効です。有効な上位要素はありません。 上位の要素のいくつかは、あいまいな名前と記号を持っています。この課題のために、Wikipediaのバージョンが使用されます。便宜上、許容される原子記号は次のとおりです。H、He、Li、Be、B、C、N、O、F、Ne、Na、Mg、Al、Si、P、S、Cl、Ar、K、Ca、 Sc、Ti、V、Cr、Mn、Fe、Co、Ni、Cu、Zn、Ga、Ge、As、Se、Br、Kr、Rb、Sr、Y、Zr、Nb、Mo、Tc、Ru、Rh、 Pd、Ag、Cd、In、Sn、Sb、Te、I、Xe、Cs、Ba、La、Ce、Pr、Nd、Pm、Sm、Eu、Gd、Tb、Dy、Ho、Er、Tm、Yb、 Lu、Hf、Ta、W、Re、Os、Ir、Pt、Au、Hg、Tl、Pb、Bi、Po、At、Rn、Fr、Ra、Ac、Th、Pa、U、Np、Pu、Am、 Cm、Bk、Cf、Es、Fm、Md、No、Lr、Rf、Db、Sg、Bh、Hs、Mt、Ds、Rg、Cn、Nh、Fl、Mc、Lv、Ts、Og。 提供された単一の入力からすべての可能な出力を生成するプログラムまたは関数を作成します。入力と出力の両方は、任意の形式にすることができます。これは、文字列、文字の配列、またはその他のデータ構造である可能性があります。便利で入力と出力を明確に表すものであれば何でもかまいません。入力と出力の両方をコードの入出力に渡すことができますが、標準の入出力、関数の引数/戻り値、またはその他の選択を選択できます。 入力は、任意の大文字小文字のASCII文字とスペース(0x20)文字のみを含む正の長さの文字列(前の段落を参照)でなければなりません。 コードは、上記の入力ルールを使用して作成できるすべての出力文字列を生成する必要があります。 出力の順序は実装定義です。唯一の要件は、すべての出力文字列が存在することです。 アトミックシンボルを含まない有効な入力文字列が提示された場合、単に入力文字列を出力します。 上記のルールに従って無効な入力文字列(null、ゼロ文字、不正な文字が含まれているなど)が提示された場合、プログラムは何でもできます(クラッシュ、空白出力など)。 周期表と一致する必要があるアトミックシンボル以外の出力では、大文字と小文字は区別されません。 標準の抜け穴は許可されていません。 テストケース: Tin Snips [Ti][N] [Sn][I][P][S] [Ti][N] [S][Ni][P][S] [Ti][N] [S][N][I][P][S] T[In] [Sn][I][P][S] T[In] [S][Ni][P][S] T[In] [S][N][I][P][S] T[I][N] ... Quack Q[U][Ac][K] …

5
> <>水不足
&gt; &lt;&gt;(難解なプログラミング言語)のコードを泳ぐ愛する魚は、その自然環境から取り出されました。この変更により、従来の方法で動き回ることができなくなりました。トロイダル運動であったものは、単純な左から右への動きに制限されていました。しかし、&gt; &lt;&gt;プログラムは、魚がそれらの中を移動できるように書かれています。親愛なるプログラマーの仕事は、プログラムを書いて&gt; &lt;&gt;プログラムを線形化することです。そして、できるだけ少ないバイトでそれを行います。魚にはあまり大きな記憶がありません。 &gt; &lt;&gt;での移動 &gt; &lt;&gt;では、動きはトロイダルで、一度に1つのキャラクターになります。これは、魚(ポインター)が行の終わりから先頭まで「ラップ」できることを意味します。&gt; &lt;&gt;では、ほとんどのポインターの動きとは対照的に、魚は上から下、下から上、および右から左に移動することもできます。したがって、この移動パターンは有効です。 &gt;&gt;&gt;^ &gt;&gt;&gt;v &gt;&gt;&gt;^ v そして、それは無限ループで終了します(底部を無限に通過すると、最上部のラインに戻ります)。 魚は、max(row length)に等しい長さと、行の数に等しい高さのグリッドで移動します。 魚がどのように動くかをどのように把握しますか?これらのコマンドは、移動の方向ベクトルを変更します(たとえば(-1,0)、右から左を意味します)。 Command | Direction Change --------------------------- &gt; | (1,0) (default) &lt; | (-1,0) ^ | (0,1) v | (0,-1) / | (x,y) -&gt; (y,x) \ | (x,y) -&gt; (-y,-x) | | (x,y) -&gt; (-x,y) …
20 code-golf  grid 

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