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

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

6
韻律の列挙
「押韻構成は、」文字の文字列であるaとzから出発して文字の最初の発生が(隙間なく)昇順になるように、、 a。例(最初の出現がマークされている): abccdbebdcfa ^^^ ^ ^ ^ 長さの韻体系の数はベル番号Nによって与えられます B(N)。(OEIS A000110) チャレンジ あなたの仕事は、これらの韻律体系の列挙、すなわち整数から韻律体系への全単射マッピングを実装することです。正の整数N <= 26と負でない整数が与えられます0 <= i < B(N)。または、範囲を使用できます1 <= i <= B(N)。Nすべてiが異なる文字列を生成するように、lengthの韻体系を出力する必要があります。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 小文字または大文字を(一貫して)使用できます。 あなたのコードは、妥当な時間内で有効な任意の入力を処理できなければなりません(例えば、数時間を超えないためN = 26、最悪の場合、i)。これによりN、遅い言語でも指数関数的にスケーリングするソリューション(小さなベースの場合)を許可しますが、線形にスケーリングするソリューションi(つまりB(N))を禁止する必要があります。特に、スキームをN破棄するまで、長さのあるすべての有効なライムスキームを繰り返し処理することはできませんi。 標準のコードゴルフ規則が適用されます。 例 iスキームへの正確な割り当て(つまり、特定のスキームの順序N)はユーザー次第です。ただし、辞書式順序を選択した場合、ソリューションは次の表に対応する必要があります(-無効な入力を示します)。 N\i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 a - - …

21
隣人とビットを交換する
タスクの説明 整数が与えられた場合、すべての整数k> 0の(2k–1)番目と2k番目の最下位ビットを交換します。これは、OEISのシーケンスA057300です。 (数値には、「無限に多くの」先行ゼロがあると想定されます。実際には、これは単に、単一の0ビットを奇数長の数値の前に追加することを意味します。) これはcode-golfなので、最短のコード(バイト単位)が優先されます。 テストケース 0 -> 0 1 -> 2 9 -> 6 85 -> 170 220 -> 236 1827 -> 2835 47525 -> 30298

3
残基番号システム
多数の課題がありますが、これは面白いかもしれません。 この課題では、剰余数システム(RNS)を使用して、大きな整数の加算、減算、乗算を実行します。 RNSとは RNSは、整数を識別するために開発された多くの方法の1つです。このシステムでは、数値は剰余のシーケンス(モジュラス演算後の結果(整数除算後の剰余))で表されます。このシステムでは、各整数には多くの表現があります。物事をシンプルにするために、各整数が一意に表現されるように物事を制限します。具体的な例で何が起こっているかを説明する方が簡単だと思います。 最初の3つの素数、2、3、5を見てみましょう。RNSシステムでは、これら3つの数字を使用して、残基を使用して2 * 3 * 5 = 30未満の数字を一意に表すことができます。テイク21: 21は30未満なので、2、3、および5でモッドした後の結果を使用して表すことができます(つまり、整数を2、3、および5で除算した後の余り) 次の整数シーケンスで21を識別します。 21〜{21 mod 2、21 mod 3、21 mod 5} = {1、0、1} したがって、RNSシステムでは、「21」の代わりに{1,0,1}を使用します。 一般に、整数nが与えられた場合、nは{ n mod 2、...、n mod p_k } として表されます。ここで、p_kは最小の素数であり、nはp_k以下のすべての素数の積より小さくなります。 別の例は、ので、私たちはここに2,3,5,7,11,13を使用する必要があり、我々は3412を持っていると言う2*3*5*7*11*13=30030、一方2*3*5*7*11=2310小さすぎます。 3412〜{3412 mod 2、3412 mod 3、3412、mod 5、...、3412 mod 13} = {0、1、2、3、2、6} このシステムを使用すると、非常に大きな数を比較的簡単に表すことができます。{1、2、3、4、5、6、7、8、...}残基を使用して、最大{2、6、30、210、2310、30030、510510、9699690 ...}までの数を表すことができますそれぞれ。(ここにシリーズがあります) 私たちの仕事 これらの剰余を使用して、多数に対して+、-、および*を実行します。これらのプロセスを以下に説明します。ここでは、入力仕様と出力仕様を示します。 入力 stdinまたは関数の引数を介して2つの(潜在的に非常に大きい)数が与えられます。10桁の文字列として与えられます。 問題をさらに詳しく説明するために、最初の入力nと2番目の入力を呼び出しますm。n> m> …

22
ASCIIアートの反映
この課題では、テキストブロックが与えられ、テキストのリフレクションを実行する必要があります。 入力: 反映される文字列。テキストは、要素がテキスト行である配列として提供されない場合があります。例えば、"ab\ncd"および['a','b','\n','c','d']許可されているが、['ab','cd']か[['a','b'],['c','d']]ではありません。すべての行が同じ文字数(必要に応じて空白が埋め込まれる)であると想定できます。 TrueY反射をFalse示し、X反射を示すブール値 2つの入力は任意の順序で渡すことができます。 出力: 反映された文字列。文字は変更されず、位置のみが変更されます。結果の画像ブロックは左上に揃える必要があります(最初の行と列にはそれぞれ空白以外の文字が含まれている必要があります)。(任意の行の)末尾の空白は許可されます。 テストケース: False o / --|/ | / \ / o /|-- | \ / True o / --|/ | / \ / \ | --|/ o / True text text False text txet True P P C G G C P P False …

2
リポグラム「クイン」
仕事 単一のUnicode文字を入力として使用します。 この仕様にも従うが、入力文字を含まない同じ言語でプログラムを出力します。 プログラムが入力aで実行され、次に出力プログラムが入力bで実行される場合、出力するプログラムは文字aを含むことが許可されます。ただし、bはこのプログラムに表示することはまだ許可されていません。つまり、プログラムの最新の化身への入力のみが表示されることは禁止されています。 タイトルが何を言おうと、標準のクインルールが適用されます。 最短のプログラムが勝ちます。プログラムは少なくとも1バイトの長さが必要です。 例 プログラムがABCDの場合。(#はコメントです) > slangi "ABCD" A EBCD # "FBCD" "JGGJ" "UGDKJGDJK" are all OK > slangi "EBCD" C ABGD # "EBGD" "UIHDAIUTD" are all OK > slangi "ABGD" B AFCD > slangi "AFCD" Z ABCD slangi架空の言語の通訳はどこにありますか。

22
DNAにゴルフテキスト
DNAゴルフへのテキスト チャレンジ 入力をDNA出力に変換します。 アルゴリズム テキストをASCIIコードポイントに変換します(例codegolf-> [99, 111, 100, 101, 103, 111, 108, 102]) ASCIIコードをつなぎ合わせます(例99111100101103111108102) バイナリに変換(例10100111111001101001011010001000011001101011011110000110010111111011000000110) パッドは、0(例えば、文字の偶数個を作るために最後にね101001111110011010010110100010000110011010110111100001100101111110110000001100) 交換する00とA、01とC、10とG、と、11とT(例えばGGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA) 出力 テストケース codegolf > GGCTTGCGGCCGGAGACGCGGTCTGACGCCTTGTAAATA ppcg > GGCTAATTGTCGCACTT } > TTGG (padding) 仕様書 これはコードゴルフです プログラムは入力でスペースを受け入れなければなりません。 プログラムはで動作する必要がありcodegolfます。

6
1 + 1 = 10、1 + 2 = 3
基数10と基数2の両方で単純な算術演算(加算、減算、乗算、除算)を実行できる関数またはプログラムを記述します。 この関数は、数式を入力として受け取り、正しいベースで正しい結果を出力します。入力はn、1つまたは複数の演算子(+ - * /)で区切られた数字になります。 すべての入力値に0と1のみが含まれる場合、すべての値はバイナリと見なされます。少なくとも1桁がの場合2-9、すべての値は基数10と見なされます。 ルール: 数字の間に演算子が1つだけあると仮定できます(表示10*-1されません) 括弧がないと仮定できます。 通常の演算子の優先順位(疑問がある場合は、Google計算機で式を試してください)。 整数しか存在しないと仮定することはできません 入力または出力に先行ゼロはありません 有効な入力のみが与えられると仮定できます すべての入力値が正であると仮定できます(ただし、マイナス演算子を使用すると負の出力が可能になる場合が1-2=-1あります10-100=-10) REPLは受け入れられません 入力を個別の引数または単一の引数として選択することもできますが、入力は正しい順序でなければなりません。 つまり、あなたは表すことができる1-2入力引数で1、-、2、ではなく1、2、-。 など+ - * /ではなくplus、入力で記号を受け入れる必要がありますminus。 浮動小数点値をサポートする必要があります(または言語の最大制限まで、ただし整数のみのサポートは受け入れられません)。 eval 受け入れられます 例: 1+1 10 1010+10-1 1011 102+10-1 111 1+2+3 6 10*10*10 1000 11*11*11 11011 10*11*12+1 1321 10.1*10.1 110.01 20.2*20.2 408.04 10/5 2 110/10 11 Also accepted (optional …

1
…そして、メキシコはそれを支払います!
ドナルド・トランプは、このサイトの人々の仕事に非常に感銘を受けています。彼はベン・カーソンを助けるあなたの仕事のすばらしさを知ったので、彼はあなたを雇って彼の壁を建てることさえしました。彼はあなたが素晴らしいと思います。今、彼は再びあなたの助けを必要としています。彼は自分の壁をうまく構築しましたが、今ではメキシコ政府がそれを支払う必要があります。彼は1マイルあたり100万ドルを請求したいと考えており、アメリカとメキシコの国境は1,989マイルの長さであると伝えています。ただし、この数値が正確かどうかはよくわからないため、縮尺どおりの視覚表現も必要です。それがあなたの出番です。あなたはこの地図を取るべきです: そして、境界上のn(50 <= n <= 500)マイルごとに、そのポイントでの境界の傾斜に垂直な25ピクセル長の線を引きます。地図の右側にある縮尺を使用して、100マイル〜50ピクセルであると判断しました。n = 60の最初の3行のサンプルを描画しましたが、これらは概算です。 ノート: 唯一の入力はnです。出力は、線が追加、画面に描画、またはラスターイメージファイルに保存されたマップイメージでなければなりません(元のマップファイルを上書きできます)。 空のマップファイルは、任意のファイル名で保存できます。これはJPEGですが、必要に応じて別の一般的なラスター形式に変換できます。また、寸法を比例させ、線の縮尺を維持している限り、画像のサイズを最大50%縮小できます。 各線は、そのポイントで境界の傾斜に垂直でなければなりません。勾配は、ポイントの50マイル前から開始し、ポイントの50マイル後に終了するように計算する必要があります。 正確さ: 各ラインの勾配には、±5°の誤差がある場合があります 各行の間隔には、±20マイル(通常のマップでは10ピクセル)の誤差がある場合があります。

30
数字を合計し、数字を逆にした
0より大きい数を指定すると、すべての数字(1 .. n)が連結および反転された合計が出力され、それらが加算されます。たとえば、n = 6の場合: 1〜6の数字を連結したもの: 123456 逆に: 654321 これらを合計すると、777777になります。別の例はn = 11です。 1 2 3 4 5 6 7 8 9 10 11 > 1234567891011 そして 11 10 9 8 7 6 5 4 3 2 1 > 1110987654321 それらを一緒に追加すると、になり2345555545332ます。これはA078262としても知られています。 最短のコードが勝ちます!

1
誰かが衰弱しましたか?
防御は、窓から誰かまたは何かを投げる行為です。 — ウィキペディア 入力 入力は2つの部分で構成されます。 フロアプランと家/建物内の人。 v><^は、矢印が示す方向を指している人を表します。入力には1人が含まれます。 -そして|壁を表し、#ウィンドウを表します。 空のスペースです。 入力のこの部分は、単一の文字列または配列/リスト/などとして取得できます。行の。末尾または先頭のスペースはありません。入力は常に長方形になります。 例: -----###--- | | | ^ | ----------- 人が移動する距離(文字数)を示す1以上の整数。 出力 出力は 1人がウィンドウの「内側」にいる場合(つまり、入力で指定された距離だけ前方に移動した後、人はの上にいます#)。 2人が衰弱している場合(a #と連絡を取り、さらに先に進みます)。 3人が壁にぶつかった場合(-またはに接触すると|、壁にぶつかると、人は停止し、壁を通り抜けません)。 0 上記のいずれにも当てはまらない場合(そして、人が行ったことはすべて空の空間を旅することです)。 仮定 次のすべてが真であると仮定できます。 その人は、入力領域の「範囲外」に移動することはありません。 defenestratedされた後、人は他に接触することはありません#か-/ |(あなたがあれば心配する必要はありませんので2 及び 1または3両方真です)。 テストケース 次の「フロアプラン」の場合: ----- | | |###| | | | ^ | In Out 1 0 2 …
26 code-golf  string 

15
KOTH:すべてのコインには2つの側面があります
利用可能な最終結果 前書き 私の以前の重いテーマ(ファンタジー戦争、世界的なパンデミックなど)のKOTHの後、私は新しい気楽なゲームに戻ってきました。今回は、「ボードゲームのような」状況に直面しています。逆さまのコインの山が本当に大きなテーブルの中央に置かれ、あなたは戦利品のシェアを手に入れようと決心しています! 用語集 コイン:反転または反転できるトークン。 Unflipped:値が下を向いた状態でテーブルに置かれたコイン。これは、コインのデフォルトの状態です。 反転:テーブルに置かれたコインは、その値が上向きになります。 ローカル:コインの山を指します。 グローバル:中央のコインの山を指します。 原理 ゲームの開始時に、各プレーヤーは0ポイントと0コイン(フリップまたはアンフリップ)で始まります。ゲームはターンベースです。ターン中、プレイヤーはテーブルの中央にあるコインの山、自分のコインの山、または他のプレイヤーと相互作用する最大3つのアクションを取ることができます。 プレイ順序は、ゲームの開始時にランダムに定義されます。引数リスト内のプレーヤーの順番はターン順を表し、そのリスト内で左から右に進みます。「次へ」と「前へ」はそれぞれ「そのリストの右側」と「そのリストの左側」を指し、どちらかの最後にいる場合はループします。 ゲームは50ラウンド、またはプレイヤーターンの終了時に中央にコインが0になるまで続きます(つまり、最初のアクションの後にパイルが空であっても、3つのアクションを終了し、コインを戻すことができます)ゲームは続行します)。グローバルコインの開始数は、次の式でランダムに定義されます。 (2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))` 各アクションはあなたにポイントを獲得し(またはあなたがいくらか失う)、ゲームの終わりに、あなたが持っている各コインがあなたのポイントに追加されます(フリップされていない場合は-1、フリップされている場合は+2)。最高スコアのプレイヤーが勝ちます。 コントローラーはコマンド引数を介して入力を提供し、プログラムはstdoutを介して出力する必要があります。 構文 入力 プログラムが呼び出されるたびに、この形式の引数を受け取ります。 Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;... ラウンドは1から始まります。 入力例 6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0 ここでは、第6ラウンドであり、プレイヤー2であることがわかります。中央の山には52個のコインがあります。12ポイント、反転コイン1枚、反転コイン0枚があります。ポイントはマイナスになる場合があります。 出力 3文字(スペースなし、区切りなし)を出力する必要があります。各文字は、このターンで行う1つのアクションに対応しています。文字の順序によってアクションの順序が決まります。同じアクションを複数回出力できます。アクションを完了するのに十分なコインがない場合、使用可能なコインの最大数を使用し、使用したコインのみのポイントをカウントします。 N:何もしない 1:中央の山からコインを1枚取ります[効果:+1のローカルアンフリップ/ -1ポイント/ -1のグローバルフリップなし] 2:中央のパイルから2コインを取ります[エフェクト:+2ローカルアンフリップ/ -2ポイント/ -2グローバルアンフリップ] 3:中央のパイルから3枚のコインを取ります[エフェクト:+3ローカルアンフリップ/ -3ポイント/ -3グローバルアンフリップ] A:パイルから1コインを戻します[エフェクト:-1ローカルアンフリップ/ +1ポイント/ …

24
リスト内の真の値の範囲を見つける
チャレンジ: ブール値のリストを受け入れ、Trueのすべての範囲を返す関数またはプログラムを作成します。 テストケース: f [F] = [] f [T] = [[0,0]] f [T,T,F,T] = [[0,1],[3,3]] f [F,T,T,F,F,T,T,T] = [[1,2],[5,7]] f [F,T,T,F,F,F,T,T,T,T] = [[1,2],[6,9]] f [T,T,F,F,F,T,T,T,T,T,T,T,T,T,T,F] = [[0,1],[5,14]] f [F,F,T,T,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T] = [[2,3],[12,19],[33,54],[93,94]] ルール: 入力のエンコード方法(リスト、配列、文​​字列など)を選択できます。 出力は、リストのようなリストまたはそのような文字列としてエンコードする必要があるため、配列、リスト、タプル、行列、ベクトルなどが必要です。 ブール値は定数としてエンコードする必要がありますが、それ以外の場合は、T / Fから目的の定数への単純な変換が許可されます 編集:ランタイム中のevalまたは類似のISが許可されます。 入力がプログラム/関数にどのように渡されるかを説明し、テストケースの入力/出力を与えることを忘れないでください カウントされない目的の入力形式への変換 標準的な抜け穴は許可されていません 言語にこれを行う機能がある場合、許可されていません 私は自分の提出を受け入れません 編集:出力形式は柔軟です。リストなどを印刷しない場合は、範囲の値を1つの数字以外の文字で区切り、範囲も区切る必要があります。 得点: 言語に合わない場合を除き、スコアはバイト単位です(Pietのコーデルなど) 最低得点 入力と出力にはかなりの柔軟性がありますが、T / Fをすべての作業を行う関数に置き換えるソリューションは許可されていません。 …

11
公式Dyalog APL 2016年のゲーム
これは楽しいかもしれないが、仕事が多すぎると思われる場合は、このはるかに小さなチャレンジに参加することを検討してください。 2016年のちょっとした楽しみ(そしておそらく欲求不満!)... Dyalogの「今年のパズル」。楽しい! 目的 Dyalog APL(ダウンロード)式を検索します(他の言語も許可されています。以下の適格性を参照してください)。数字0〜100に等しい順序で正確に数字2 0 1 6が含まれます。 20=16 ×2016 2⌊016 2+0+1*6 ... 目的は、各式でできるだけ少ない文字を使用することです(式の最小文字数は5 – 4桁の2 0 1 6と単一のプリミティブ関数/演算子です)。 ルール 各式には、数字2 0 1 6(この順序で)が含まれ、他の数字は含まれない必要があります。事前設定された定数と変数も使用できません。 4桁の2 0 1 6に加えて、組み込みの記号と名前、括弧/中括弧、スペース、高いマイナス記号、および小数点のみを使用できます。結果の式は確定的である必要があります(つまり、繰り返し評価しても同じ結果が得られます)。非APLの場合、名前を持つ関数/演算子も許可されます。ここと同じルール。 言語のデフォルト設定をすべて想定します。Dyalog APLの場合、これは両方とも1であり、10であることを意味⎕MLし⎕IOます⎕PP。 0から100までのすべての数値の正しい表現を含む各エントリは、冗長スペースを除くそれらの表現で使用される文字数に応じて評価されます(101個の表現すべてで最小505)。 適格性 誰でも入場できます。任意の言語で回答できますが、APLの回答のみが承認対象と見なされます。APL以外の言語を使用する場合は、スニペット、プログラム、関数などを式の代替として使用でき、コードを直接実行する限り、印刷、アクセス可能なメモリ位置に数値を残す、または結果を返すことができますご使用の言語の標準数値データ型として、目的の数値に評価されます。 決算日 2016年11月30日。 賞品 回答を受け入れます Dyalogの2016殿堂入りで不滅になれ! エントリーの提出 2016年11月30日以降、私は最短の回答を受け入れ、あなたの回答をあなたの名前でDyalogの2016年の殿堂に提出します。 よくある質問 されるJ(例えば37 = ⌈⍟!20J16)許可されていますか? いいえ:4桁の2 0 1 6に加えて、組み込みの記号と名前、括弧/括弧、スペース、高いマイナス記号、小数点のみを使用できます。 文字列としての出力は受け入れられますか? …

8
日付をxkcd表記に変換します
ISO 8601標準日付形式についての彼のxkcd で、ランドールはかなり奇妙な代替表記法を隠しています。 大きな数字はすべて通常の順序で現在の日付に表示される数字であり、小さな数字はその数字の出現の1から始まるインデックスです。したがって、上記の例はを表し2013-02-27ます。 そのような日付のASCII表現を定義しましょう。最初の行にはインデックス1〜4が含まれます。2行目には「大きい」数字が含まれます。3行目には、インデックス5〜8が含まれます。1つのスロットに複数のインデックスがある場合、最小から最大の順に並んで表示されます。m単一のスロット(つまり、同じ桁、同じ行)に多くてもインデックスがある場合、各列はm+1文字幅で左揃えにする必要があります。 2 3 1 4 0 1 2 3 7 5 67 8 逆の変換については、コンパニオンチャレンジもご覧ください。 チャレンジ ISO 8601日付(YYYY-MM-DD)を指定すると、対応するxkcd日付表記を出力します。 プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。 から0000までの任意の年9999が有効な入力です。 末尾のスペースは許可されますが、先頭のスペースは許可されません。オプションで、単一の末尾の改行を出力できます。 標準のコードゴルフ規則が適用されます。 テストケース 2013-02-27 2 3 1 4 0 1 2 3 7 5 67 8 2015-12-24 2 3 1 4 0 1 2 4 5 5 …

12
4は魔法の数です
このチャレンジを投稿する前にサンドボックスをチェックしませんでした-このチャレンジはCᴏɴᴏʀO'Bʀɪᴇɴによって提案されたようです。 整数の入力が与えられた場合、「4は魔法の数です」という謎を出力するプログラムを作成します 4は魔法の数です 5は4、4は魔法の数 6は3、3は5、5は4、4は魔法の数 11は6、6は3、3は5、5は4、4は魔法の数です 五百は十一、十一は六、六は三、三は五、五は四、四は魔数 あなたがすでになぞなぞを知っているか、なぞなぞが何であるかを知りたがってそれを解決するのが面倒な場合、ここに説明があります 次の数字は、前の数字の文字数です。したがって、たとえば、5は4文字であるため、次の数字は4です。 6を有する3次数であるので、文字を3、及び三つの有する5次数であるので、文字を5、及び5を有する4つの文字の次数であるので、4 4は、4つの文字を持っているので、4で謎の端部である理由、4は4、4は4、4は4 ...(4は魔法の数) テストケース 0 => Zero is four and four is the magic number 1 => One is three and three is five and five is four and four is the magic number 2 => Two is three and three …
26 code-golf  number 

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