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

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

16
指定された年と月の週のn番目の日付を取得する
前書き 多くの場合、人々は日付を「2018年8月の第2金曜日」または「2012年3月の第4日曜日」と呼びます。しかし、それが何の日付であるかを伝えるのは難しいです!あなたの仕事は、年、月、曜日、整数を受け取るプログラムを作成し、その日付を出力することです。 チャレンジ 入力については、年、月、曜日、および数字を取得します。 曜日に文字列を使用したり、ゼロインデックス付きの平日を使用したり、年と月を1つの文字列にしたりするなど、妥当な形式で入力を取得できます。ただし、回答では入力形式を説明してください。 月のどの曜日をターゲットにするかを示す整数は、1〜5の整数になります。整数は、存在しない曜日を指すことはありません(たとえば、存在しない2019年2月の5番目の金曜日)。 年は常にプラスになります。 出力は、最終日を印刷するなど、合理的な形式で作成できます。ただし、回答の出力形式を説明してください。 出力での年と月の指定はオプションです。また、日付が有効であると想定することもできます。 入力と出力の例 次の入力を考えてください。形式は、年を4桁の数字、月を整数、曜日を文字列、序数を整数として取ります。 2019、3、2、土曜日、2 2019、12、日曜日、1 2019、9、土曜日、1 出力: 3月9日 12月1日 9月7日 これはcode-golfなので、最短の回答が勝ちます。
17 code-golf  date 

3
翼の順序を最適化する
このツイートは、中華料理店1の翼の可能な注文のリストです。 ピザを注文するとき、私は通常、簡単な計算である最高のピザ価格比を与えるサイズを計算します。しかし、このレストランでの注文の価格を最小化することはそれほど単純な作業ではないため、そこでの次の注文に備えたいと思います。 チャレンジ 444 例 100100100$111.20$111.20$111.20 [50,50],[25,25,50],[25,25,25,25] 222[50,50] ルール n≥4n≥4n \geq 4 nnn すべての可能な注文を返すことを選択できます テストケース 4 -> [4] (4.55) 23 -> [23] (26.10) 24 -> [6,18],[9,15],[12,12] (27.20) 31 -> [6,25] (34.60) 32 -> [4,28],[6,26],[7,25] (35.75) 33 -> [4,29],[5,28],[6,27],[7,26],[8,25] (36.90) 34 -> [6,28],[9,25] (38.00) 35 -> [35] (39.15) 125 -> [125] …

19
この番号は丘の番号ですか?
丘の番号は、最初と最後の数字が同じ数字ですが、それだけではありません。丘の数では、最初の桁は厳密に増加し、最後の桁は厳密に減少しています。最大桁を繰り返すことができます。 丘の番号の例を次に示します。 12377731 | 1237... | ...731 ^ same ^ | strictly increasing | strictly decreasing ---------+---------------------+--------------------- 12377731 ^^^ okay because largest digit can be repeated これはそうではありません: 4588774 | ...8774 | ^^ not the largest digit | so this has to be strictly decreasing | but it's not, so not …

4
作成する文字列が与えられ、空の文字列で開始し、追加と複製のコストを使用して作成します
あなたの仕事は、与えられたターゲット文字列を作成することです。空の文字列から始めて、文字列が目的のものと同じになるまで、文字を追加する必要があります。コストxを使用して文字列の末尾に文字を追加するか、コストyを使用して文字列を複製できます。私たちが望むのは、これを行う最も安価な方法です。 テストケース targetString , appendcost, clonecost -> totalcost "bb", 1, 2 -> 2 "bbbb", 2, 3 -> 7 "xzxpcxzxpy", 10, 11 -> 71 "abababab", 3, 5 -> 16 "abababab", 3, 11 -> 23
17 code-golf  string 

19
7セグメントディスプレイのデコード
おそらく、すべての数字を表示できる7セグメントディスプレイをご存知でしょう。0 … 90…90\dots 9 チャレンジ セグメントのみを考慮します。あなたの仕事は、どのセグメントがオンになっているかを考えて、1桁をデコードすることです。A…GA…G\texttt{A}\dots\texttt{G} これは、8ビット整数としてエンコードできます。バイナリ表現と対応するリトルエンディアンおよびビッグエンディアンの値を持つ各桁の表は次のとおりです。 Digit0123456789.ABCDEFG01111110001100000110110101111001001100110101101101011111011100000111111101111011Little-endian126481091215191951121271230x7E0x300x6D0x790x330x5B0x5F0x700x7F0x7BBig-endian12612182158204218250142542220x7E0x0C0xB60x9E0xCC0xDA0xFA0x0E0xFE0xDEDigit.ABCDEFGLittle-endianBig-endian0011111101260x7E1260x7E100110000480x30120x0C2011011011090x6D1820xB63011110011210x791580x9E400110011510x332040xCC501011011910x5B2180xDA601011111950x5F2500xFA7011100001120x70140x0E8011111111270x7F2540xFE9011110111230x7B2220xDE \begin{array}{c|c|rr|rr} \text{Digit} & \texttt{.ABCDEFG} & \text{Little-endian} && \text{Big-endian} & \\ \hline 0 & \texttt{01111110} & 126 & \texttt{0x7E} & 126 & \texttt{0x7E} \\ 1 & \texttt{00110000} & 48 & \texttt{0x30} & 12 & \texttt{0x0C} \\ 2 & \texttt{01101101} & 109 & \texttt{0x6D} …
17 code-golf  decode 

19
数字列
これは、整数百科事典のオンライン百科事典にないかなり簡単な配列です。 空のシーケンスから開始し、各用語をスペースなしでこれまでのシーケンスのすべての数字を英語で書き出すのに必要な文字数として定義します。* 参考のために、英語のすべての(10進数)桁の文字数は次のとおりです。 zero one two three four five six seven eight nine 4 3 3 5 4 4 3 5 5 4 (A52360とA5589の両方の始まりです。) これにより、空のシーケンスにゼロ桁が存在するため、最初のエントリがa (0 )= 0a(0)=0a(0) = 0になります。 これにより、現在存在する唯一の数字である「ゼロ」を書き込むのに4文字かかるため、2番目のエントリはa (1 )= 4a(1)=4a(1) = 4になります。 これにより、3つ目のエントリがa (2 )= 8a(2)=8a(2) = 8になります。これは、「zerofour」を書き込むのに合計8人で「4」を書き込むのにさらに4文字が必要だからです。 これにより、4番目のエントリがa (3 )= 13a(3)=13a(3) = 13になります。これは、「zerofoureight」を書き込むのに合計13人で「8」を書き込むのにさらに5文字が必要だからです。 これにより、5番目のエントリがa (4 …

10
相互模倣
してみましょうAAAからなる正の整数小数点以下の桁。してみましょう別の正の整数です。nnnd1、d2、。。。、dnd1,d2,...,dnd_1,d_2,...,d_nBBB このチャレンジのために、次のような正の整数リストが少なくとも1つ存在する場合、をコピーキャットと呼びます。AAAB P 1、P 2、。。。、p nBBBp1、p2、。。。、pnp1,p2,...,pnp_1,p_2,...,p_n ∑i = 1nd私p私= B∑i=1ndipi=B\sum_{i=1}^{n}{{d_i}^{p_i}}=B AAAB A B B Aと呼ばれている相互の模倣場合の模倣であるとの模倣である。BBBAAABBBBBBAAA 例 526526526853およびは、相互模倣です。853853853 53+29+63=85353+29+63=8535^3 + 2^9 + 6^3 = 853 そして: 83+51+32=52683+51+32=5268^3 + 5^1 + 3^2 = 526 チャレンジ 2つの正の整数と与えられた場合、とが相互コピーキャットであ​​る場合は真実の値を出力するか、そうでない場合は偽の値を出力することがタスクです。AAABBBAAABBB 明確化と規則 あなたはとることができといずれかの合理的な、明確な形式で(例えば整数、文字列、数字のリスト、...)AAABBB AAABとは等しい場合があります。数値がそれ自体の相互的な模倣である場合、それはA007532に属します。BBB 真偽値の代わりに、2つの異なる一貫した値を返す場合があります。 以下のためにと、あなたのコードはに完了しなければならない1分未満。ただし、値を大きくするのに時間がかかりすぎる場合は、理論的にそれらを解決できる必要があります。1≤A&lt;10001≤A&lt;10001\le A<10001≤B&lt;10001≤B&lt;10001\le B<1000 これはcode-golfです。 テストケース Truthy: 1 1 12 33 22 64 …

28
文字列を指定して、対応する列の数を計算します
Excelでは、列の範囲は等A-Z, AA,AB,AZ,BA,..,BZです。実際にはそれぞれ数字を表しますが、アルファベット文字列としてエンコードされます。 このチャレンジでは、アルファベットの文字列が与えられ、それに対応する列を計算する必要があります。 いくつかのテスト: 'A'は1を返します(最初の列であることを意味します) 'B'は2を返します 「Z」は26を返します 「AA」は27を返します 「AB」は28を返します 「AZ」は52を返します 「ZZ」は702を返します 「AAA」は703を返します 大文字のみが与えられると仮定できます。 最短バイトが勝ちます。 幸運を!
17 code-golf  math 

25
就業日カウントダウン
ワークライフをより簡単にするための天才的なアイデアがありました-就業日のみをカウントする特定の日付へのカウントダウン。 基本的なタスクは、カウントダウンに就業日のみを含む特定の日付までのカウントダウンを作成することです。 就業日は月曜日、火曜日、水曜日、木曜日、金曜日にカウントされます。 入力は「非公式」ヨーロッパ標準形式の特定の日付であるdd.MM.yyyy必要があり、今日または将来の日付でなければなりません。 出力は、残りの日数のみである必要があります。 それのようコードゴルフ最短コード勝ち。 テストケース: Today | Input | Output 10.12.2018 | 17.12.2018 | 5 02.10.2018 | 16.10.2018 | 10 私が質問でいくつかのことを逃した場合、私を許してください-それは私の最初の質問です:) 編集: &lt;-のfalse代わりに出力として使用できますが、0 美しくありません DSTを尊重する必要はありません
17 code-golf  date 

18
1桁の最長の繰り返し部分シーケンス
チャレンジ: 正の整数を指定すると、少なくとも2回発生する最長の1桁のサブシーケンスを出力し、ANDには別の桁(または整数の開始/終了)の境界があります。 例: 入力:7888885466662716666 1桁の最長サブシーケンスは、長さが5の88888(7[88888]5466662716666)になります。ただし、このサブシーケンスは整数で1回しか発生しません。 代わりに、入力のために結果が7888885466662716666あるべきである6666(78888854[6666]271[6666]それは二倍(少なくとも)が発生するので、)。 チャレンジルール: サブシーケンスの長さは、発生する回数よりも優先されます。(つまり、入力の8888858888866656665666場合、出力88888([88888]5[88888]66656665666;長さ5、2回発生します)ではなく、666(88888588888[666]5[666]5[666];長さ3、3回発生します)。 複数のサブシーケンスの長さが等しい場合、発生回数が最大のサブシーケンスを出力します。入力に、即ち3331113331119111、我々出力111(333[111]333[111]9[111];長さ3は、3回発生する)、およびいない333([333]111[333]1119111;ならびに長さ3が、2回出現) 複数のサブシーケンスの出現回数と長さが等しい場合、それらのいずれか、またはすべてを(任意の順序で)出力できます。777333777333つまり、inputの場合、可能な出力は次のとおり777です。333; [777, 333]; または[333, 777]。 サブシーケンスには、他の数字(または整数の開始/終了)の境界が必要です。すなわち、入力の場合122222233433、結果は33(1222222[33]4[33];長さ2、2回発生します)ではなく222(1[222][222]33433、長さ3、両方とも無効で2回発生します)。 これは、オカレンスカウンターにカウントされるすべての数値に適用されます。811774177781382つまり、入力の場合、結果は8([8]117741777[8]13[8]2;長さ1、3回発生します)ではなく77(811[77]41[77]781382/ 811[77]417[77]81382;長さ2、無効な1回で2回発生)、1(8[1][1]774[1]7778[1]382;長さ1、無効な2回で4回発生)です。 入力に数字が含まれないと想定できます0(一致します[1-9]+)。(これは、ほとんどの言語がデフォルトで出力する10002000outputのようなテストケースを処理する必要を避けるためです。)0000 入力には常に少なくとも1つの有効な出力が含まれると想定できます。 I / Oは両方とも柔軟です。リスト/配列/数字/バイト/文字のストリーム、または単一の整数ではなく文字列として指定できます。 一般的なルール: これはcode-golfであるため、バイト単位の最短回答が優先されます。 コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 回答には標準的な規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを備えた関数/メソッドを使用できます。あなたの電話。 デフォルトの抜け穴は禁止されています。 可能であれば、コードのテストへのリンクを追加してください。 また、回答の説明を追加することを強くお勧めします。 テストケース: Input: 7888885466662716666 / [7,8,8,8,8,8,5,4,6,6,6,6,2,7,1,6,6,6,6] Output: 6666 / [6,6,6,6] Input: 3331113331119111 / [3,3,3,1,1,1,3,3,3,1,1,1,9,1,1,1] Output: 111 / [1,1,1] Input: 777333777333 …

30
合計
ましょう(入力)n=42n=42n=42 除数は次のとおりです:1、2、3、6、7、14、21、42 各除数の平方:1、4、9、36、49、196、441、1764 合計(加算):2500 以来したがって、我々はtruthy値を返します。完全な正方形でない場合は、偽の値を返します。50×50=250050×50=250050\times 50=2500 例: 42 ---&gt; true 1 ---&gt; true 246 ---&gt; true 10 ---&gt; false 16 ---&gt; false これはコードゴルフなので、各言語のバイト単位の最短コードが勝ちます シーケンスを指摘してくれた@Arnauldに感謝します:A046655

7
ビットを分割します!
は、合計がxになる2のべき乗のリストとして定義します。例えば、V (35 )= [ 32 、2 、1 ]。V(x)V(x)V(x)222xxxV(35)=[32,2,1]V(35)=[32,2,1]V(35)=[32,2,1] 慣例により、ここではパワーが最高から最低の順にソートされます。ただし、チャレンジのロジックや予想されるソリューションには影響しません。 仕事 半素数 与えられた場合、V (N )の各項を、この項を合計する別の2のべき乗のリストで置き換えます。結果として生じるすべてのサブリストの和集合は、次のように定義される行列Mの正確なカバーですNNNV(N)V(N)V(N)222MMM Mi,j=V(P)i×V(Q)jMi,j=V(P)i×V(Q)jM_{i,j}=V(P)_i \times V(Q)_j ここで、とQはNの素因数です。PPPQQQNNN これはいくつかの例で理解するのがはるかに簡単です。 例1 、我々は持っています:N=21N=21N=21 V(N)=[16,4,1]V(N)=[16,4,1]V(N)=[16,4,1] 及び V (P )= [ 4 、2 、1 ]P=7P=7P=7V(P)=[4,2,1]V(P)=[4,2,1]V(P)=[4,2,1] 及び V (Q )= [ 2 、1 ]Q=3Q=3Q=3V(Q)=[2,1]V(Q)=[2,1]V(Q)=[2,1] M=(844221)M=(842421)M=\pmatrix{8&4&2\\4&2&1} オンにの正確なカバーにM、我々は分割することができる16の中に8 + 4 + 4及び4に2 + 2ながら、1は変更されません。したがって、可能な出力は次のとおりです。V(N)V(N)V(N)MMM1616168+4+48+4+48+4+44442+22+22+2111 [[8,4,4],[2,2],[1]][[8,4,4],[2,2],[1]][ [ 8, …

15
ポリリズムで助けて
私はミュージシャンであり、人生でもっとポリリズムが必要です! ポリリズムは、2つのイベント(拍手、音、ホタルの点滅など)が2つの異なる定期的な間隔で発生するときに、音楽(および自然)で発生します。2種類のイベントは、同じ間隔で異なる回数発生します。 同じ時間内に左手で2回、右手で3回タップすると、次のようになります。 ------ R . . . L . . 上部のハイフンは、多発性パターンの長さを示します。これは、最小公倍数または2と3です。これは、パターンが繰り返されるポイントとして理解できます。 「メタリズム」もあります。これは、どちらかの手がタップされたときに生成されるパターンです。 ------ R . . . L . . M . ... これはシンプルで非常に一般的なポリリズムで、比率は3:2です。 頭の中でできるシンプルなポリリズムをしたくないので、それを解決するために何かが必要です。紙の上で長い形式でやることもできますし... ルール: 上記のように、ポリリズムダイアグラムを生成および表示するコードを記述します。 古い言語は、最小限のバイトで試してください。 コードは2つの引数を取ります。 左手でのタップ数(正の整数) 右手でのタップ数(正の整数) 2つの引数の最小公倍数である長さを計算します。 一番上の行は、2つの空白文字とそれに続く長さ(長さ* '-')を表示するハイフンで構成されます 2行目と3行目には、右手と左手のパターンが表示されます。 RまたはLで始まり、どちらのハンドであるかを示し、その後にスペースが続きます。 その手の間隔は、長さを引数で割ったものです。 タップは、選択した任意の文字で示される3番目の文字から始まります。それ以降は、同じ文字の「間隔」文字が離れて表示されます。 長さの行より長くなることはありません。 4行目はメタリズムです。 大文字のMで始まり、その後にスペースが続きます。 3番目のキャラクターからは、右手または左手のいずれかのタップがあるすべての位置にキャラクター(選択した任意のキャラクター)が表示されます。 末尾の空白は無関係です。 テストケース: r = 3、l = 2 …
17 code-golf 

22
数字のペアの説明で並べ替える
正の整数を指定すると、ペアで取得した数字で記述される新しい数字を作成できます(数字の奇数の場合は、先頭に0を追加します)。 例えば: 1234は1つ、2つ、3つの4として読み取ることができます。したがって、1234の出力は2444です。 643の桁数は奇数なので、先頭にゼロを追加して偶数にします。この場合、0643は次のように読み取ることができます:ゼロ6秒、4つの3秒。したがって、出力は3333になります。 (これはOEIS A056967です)。 タスク:正の整数の配列が与えられた場合、数字ペアで記述された値で昇順に並べ替えます。同じ値につながる入力番号の間で順序は関係ありません。 入力:正の整数の配列/リスト/セット。入力の先頭のゼロは許可されず、文字列/数字のリストなどとして入力されます。許可されていません-入力は、言語が使用できる限り整数/数値型に近いものでなければなりません。 出力:上記の方法でソートされた配列で、通常の方法(関数の戻り値/ STDOUT / voidへの叫びなど)で返されます。それらを個別に印刷し、数値、文字列、またはリストとして返すことができます。桁。 テストケース Input Output [19, 91, 2345, 2023] [19, 2023, 2345, 91] [25257, 725, 91, 5219, 146125, 14620512] [725, 5219, 14620512, 91, 146125, 25257] [123130415 3335 91 111111111 528 88] [528, 111111111, 123130415, 3335, 88, 91] [1 21 33 …

15
リストをサイズのチャンクに分割しますが、述語に失敗したアイテムはカウントしません
動機:リスト内の特定のアイテムが合計にカウントされない場合があります。例えば、赤ちゃんが親の膝の上に座っている飛行機の乗客を列に数えます。 課題:アイテムのリストをチャンクに分割するプログラムを作成します。各チャンク(最後のチャンクを除く)は同じサイズです。サイズは、述語関数を渡すアイテムの数として定義されます。 ルール: あなたのプログラムは アイテムのリスト 正の整数チャンクサイズ 述語関数(項目を取り、trueまたはfalseを返します) 入力リストをチャンクに分割して返す必要があります 各チャンクはアイテムのリストです 全体的に、アイテムは同じ順序のままで、何も変装していない必要があります 各チャンク(おそらく最後を除く)で述語を渡すアイテムの数は、入力チャンクサイズと一致する必要があります。 述語に失敗したアイテムは、このサイズにカウントされません 述語に失敗した項目は 出力チャンクにまだ含まれています チャンクが「満杯」であるが、次の項目が述語に失敗したものである場合、最も早いチャンクに割り当てられます したがって、最終チャンクは、述語に失敗した項目のみで構成されない場合があります すべてのアイテムが考慮されているため、最終チャンクのサイズはチャンクサイズよりも小さい場合があります。 非網羅的な例: 最も簡単な例は、述語関数がである1sと0s を考慮することですx ==&gt; x &gt; 0。この場合、sum各チャンクのがチャンクサイズと一致する必要があります。 items:[]、size:2、predicate:x &gt; 0-&gt; []または[[]] アイテム:[0, 0, 0, 0, 0, 0]、サイズ:2、述語:x &gt; 0-&gt;[[0, 0, 0, 0, 0, 0]] アイテム:[0, 1, 1, 0]、サイズ:2、述語:x &gt; 0-&gt;[[0, 1, 1, 0]] …

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