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

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

15
キーボードシフト暗号
次の入力が与えられた場合: 整数nどこn > 0。 swhere sが空でない文字列s~=[0-9A-Z]+(英数字のみ)。 標準の簡素化されたQWERTYキーボードを使用します(以下を参照)。 1234567890 QWERTYUIOP ASDFGHJKL ZXCVBNM 次の操作を実行します。 各文字がキーボード上にある元の行を見つけます。 n元の位置+ nに基づいて、文字を正しいシフト等価文字に置き換えます。 EG s="AB"とはn=2:AとなるDとBなりますM。 の場合keyboard_row[position + n] > keyboard_row.length、最初に戻ります。 EG s="0P"とはn=2:0となる2とPなりますW。 例: f("0PLM",1) = 1QAZ f("ZXCVB",2) = CVBNM f("HELLO",3) = LYDDW f("0PLM",11) = 1QSV f("0PLM",2130) = 0PHX ルール これはcode-golfであり、バイト数が最も少なくなります。 これは、一見思われるよりも少し難しいです。

11
半音数
ガイドライン 仕事 文字列またはリスト/配列として入力された2つのノートが与えられた場合、それらが離れている半音の数(ノート自体を含む)を計算し、数値として出力します。 半音の説明: 半音は、キーボードを1段上げまたは下げます。例は、CからC#です。以下に示すように、音符Cは白い音符の上にあり、C#はその1つ上の黒い音符です。半音は、次の場合を除き、黒の音符から次の白の音符に上下にジャンプします。 BからC CからB EからF FからE 例 'A, C' -> 4 'G, G#' -> 2 'F#, B' -> 6 'Bb, Bb' -> 13 ルール 2つのノート間の最大距離は13半音です。 2番目に入力されたノートは常に最初に入力されたノートの上になります。 入力は、文字列または配列/リストとして取得できます。あなたは文字列としてそれを取る場合は、ノートがなり、カンマ区切り(例えばString -> 'A, F'、Array -> ['A', 'F'])。 常に2つの有効なメモが与えられると仮定できます。 シャープはと表示され#、フラットはと表示されますb コードは調和的な同等物をサポートする必要があります(例:F#とGbの両方をサポートする必要があります) コードは、名前の付いたメモをサポートする必要はありませんが、シャープまたはフラットなしで名前を付けることができます(つまり、E#やCbをサポートする必要はありません)。ただし、コードでサポートされている場合はボーナスポイントです。 コードでダブルシャープまたはダブルフラットをサポートする必要はありません。 同じ音符または同じ音高(たとえば、「Gb、Gb」または「A#、Bb」)の両方を取得した場合、2番目の音は最初の音よりも正確に1オクターブ上ではないと想定できます。 これはコードゴルフであるため、バイト数が最も少ない答えが優先されます。
21 code-golf  music 

11
ゼロの重み
番号の順序付きリスト(先頭にゼロが付いている場合もある)を指定して、番号を垂直に並べ、すべてのゼロを一番下まで落とし、すべてのオーバーハングを一番下の空きスロットまで落とします。結果の整数を出力し、先行ゼロを削除します。 実施例 入力として次のものが与えられたとします。 ['0000312941295', '239124000124581598', '32852353800451258', '10235923505185190', '1491359102149'] まず、垂直に配置します。 0000312941295 239124000124581598 32852353800451258 10235923505185190 1491359102149 次に、列ごとに、ゼロが他の数字を「通り抜ける」ようにドロップして、それらが下に残り、他の数字を「押し上げる」ようにします。これにより、最初のいくつかの手順は次のようになります。 2000312941295 339124000124581598 12852353800451258 10235923505185190 0491359102149 ^ 2300312941295 329124000124581598 14852353800451258 10235923505185190 0091359102149 ^ 2390312941295 328124000124581598 14252353800451258 10935923505185190 0001359102149 ^ ... 2391312941295 328524538124581598 14232323525451258 10915991001185190 0000350000049 ^ 次に、まるで重力が砂のようにそれらを引き下げているかのように、すべての張り出しを落とします。 2391312941295 3285245381245 1598 14232323525458258 10915991001181190 00003500000495 ^ 2391312941295 3285245381245 …

30
Xステップ前進、1ステップ後退
ここでは、簡単なシーケンスの最初の100個の番号: 0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226 このシーケンスはどのように機能しますか? n: 0 1 2 3 4 5 6 7 8 9 10 11 12 0, 1-1=0, 2-1=1, 4-1=3, 7-1=6, 11-1=10, 16-1=15, 0+1=1, 0+2=2, 1+3=4, 3+4=7, 6+5=11, 10+6=16, 15+7=22 a(0) = 0 奇数n(0インデックス)ごとに、a(n-1) + X(X=1アクセスされるたびに1ずつ増加します) 偶数n(0インデックス)ごとに、a(n-1) - 1 チャレンジ: の一つ: 入力整数を指定すると、シーケンスの '番目の数をn出力nします。 入力整数を指定すると、シーケンスのn最初のn数を出力します。 入力を取得せずに(または空の未使用入力を取得せずに)シーケンスを無期限に出力します。 チャレンジルール: 入力にnは、0または1の両方のインデックスを付けることができます。 シーケンス(の一部)を出力する場合、リスト/配列を使用して、任意の区切り文字(スペース、コンマ、改行など)を使用してSTDOUTに出力できます。あなたの電話。 回答で使用した3つのオプションのいずれかを明記してください。 …

14
今どこにいるの?
今どこにいるの? d文字のみを含む文字列を指定しますNSWE移動した座標(左から右へ、貪欲に消費)と、私が住んでいる最終的な座標が決まります。 左から右へ座標を読み取るための規則: 次の文字がNまたはの場合S: Norの後の文字Sが別のNorである場合S: 最初Nまたはのみを消費しSます。 出力[0,1] 用N 出力[0,-1]用S Norの後の文字がorでSあるW場合E: 両方の消費NまたはSおよびWまたはE。 出力[1,1]または[-1,1]for NEおよびNW。 出力[1,-1]または[-1,-1]for SEおよびSW。 文字がEorのW前にあるSかどうかN: Eまたはを消費しWます。 出力[1,0]のためにE。 出力[-1,0]のためにW。 実施例 NSWE [0,1] (North N) [-1,-1] (South-west SW) [1,0] (East E) [0,0] (N+SW+E = Didn't actually move) これは任意の形式にすることができます。有効な出力の他の例を次に示します。 [[0,1],[-1,-1],[1,0],[0,0]] [[[0,1],[-1,-1],[1,0]],[0,0]] "0,1\n0,-1\n-1,0\n1,0\n0,0" 等... その他の例 SWSENNESWNE [-1,-1] [1,-1] [0,1] [1,1] [-1,-1] [1,1] [1,0] …
21 code-golf 

3
ひとりパズルを解く
前書き 最小バイトを使用して、ひととりパズルのソルバーを作成します。 チャレンジ あなたの仕事は、ヒトリ(ひとり、日本語で「一人で」の単語。ゲーム名の意味は「一人でいる」)の論理パズルを書くことです。ルールは次のとおりです。 n行n列のセルのグリッドが表示され、各セルには1〜nの整数が含まれます。 目標は、次の2つのルールで示された制限に従って、指定されたグリッドから番号を削除することにより、グリッドの各行と各列に複数の番号が表示されないようにすることです。 2つの隣接する(水平または垂直)セルから2つの数値を削除することはできません。 残りの番号付きセルはすべて相互に接続する必要があります。残りの2つの番号付きセルは、隣接する残りの番号(水平または垂直)を接続するセグメントのみで構成される曲線で接続できることを意味します。(これが欠落していることを指摘してくれた@ user202729に感謝) 今までにルールが明確になっていることを願っています。ルールについて不明な点がある場合は、ウィキペディアのページを確認してください。 テストケース 番号が削除されるセルは0で表されます。 Input -> Output 4 2 2 2 4 0 2 0 4 1 4 2 3 -> 1 4 2 3 2 3 2 1 2 3 0 1 3 4 1 2 3 0 1 2 4 …
21 code-golf  game 

5
5日間の天気予報
天気予報:あまりにも頻繁に頼りすぎて、あまりにも頻繁に無視します。 気温が高く、気温が低く、1日に4つの気象条件の1つがある場合、ASCIIアートのグラフィカルな5日間の天気予報を出力します。4つのグラフィカルインジケータの構造を以下に示します。 \ / -O- Sunny / \ \ / -O(==) Partly Cloudy (====) (==) Cloudy (====) (==) (====) Rainy ///// 予測チャートは次のとおりです。各グラフィカルインジケータは、独自の9x5ボックスの中央に配置され、チャート全体に5つのボックスがあります。各ボックスは|文字で区切られています。グラフィカルインジケータの下には、曜日(MON, TUE, WED, THU, FRI, SAT, SUN)の3文字の略語が、独自の9x1ボックスに集中しています。気温は、それぞれの9x2ボックスを中心に曜日を下回ります。以下に例を示します。 --------------------------------------------------- | | | | | | | (==) | (==) | \ / | \ / | \ / | | …

8
はさみアニメーションを作成します!
シンプルなASCIIアートはさみアニメーションを作成してみてください! チャレンジ すべての入力は整数-31〜31です。 出力は、アニメーション(1つ前のフレームが置き換えられる限り、どこかに出力されます。GIFが許可されます)で、1/4秒(約)で区切られます。 入力(n)が正の場合: アニメーションは8<、オープンハサミで始まる必要があります。 次のフレームは8=です。これは、ハサミが「切断」していることを示しています。 はさみの後ろにダッシュ(カットマーク)が追加され、nダッシュが現れるまでアニメーションが繰り返されます。 入力が負の場合: :ハサミは(このようなオープン起動し、左の方を向く>8と、)nの前にスペース。 はさみは閉じて、左に向けたままです(=8)。 スペースが削除されると、ハサミが再び開き、ハサミの後ろにダッシュが追加されます。 入力がゼロの場合: 10フレームの開閉はさみだけを出力します。一貫している限り、どちらの方向を向いていてもかまいません。 これはcode-golfであるため、バイト単位の最短の送信が優先されます。(もしあなたのエントリーが何らかの新しい「ゴルフ言語」のせいで明らかに勝てない場合でも、私たちはそれを見たいと思っています。) エラーメッセージ自体がアニメーションに干渉しない限り、エラーメッセージは許可されます。 入力と出力のペアの例: (わかりやすくするためにフレームを分離しましたが、各フレームの間に約.25秒が必要です) Input: 1 Output: 8< 8= -8< Input: 2 Output: 8< 8= -8< -8= --8< Input: 5 Output: 8< 8= -8< -8= --8< --8= ---8< ---8= ----8< ----8= -----8< Input: 0 Output: 8< …

10
孤独な素数を見つける
孤独な素数(私はそれらを呼ぶ)は素数であり、widthの数グリッドが与えられた場合w ≥ 3、直交または対角線上に他の素数が隣接しない素数です。 たとえば、次の場所でグリッドを取得した場合w = 12(太字で強調されたプライム): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23... ...86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 …

20
私は自分の本をこのテーブルから遠ざけたい
ストーリー だから私は、他の本だけで私のテーブルから分離したい本を持っています。これを本の長さで達成するために必要な本の数を知りたい。nnn 以下は、Wolframの友人が描いた視覚化です。 WolframおよびWikipediaのトピックに関する詳細情報。 チャレンジ 整数の入力与えられると、最上部の本がテーブルから水平方向にn本の長さだけ離れるのに必要な本の数を出力します。または次の不等式で入力n のmの最小整数値を見つけます。 m ∑ i = 1 1nnnnnn mmmnnn∑i=1m12i≥n∑i=1m12i≥n\sum_{i=1}^{m}\frac{1}{2i} \geq n 編集:分数の場合、少なくともIEEE単精度浮動小数点を使用します。投稿後にチャレンジを編集して申し訳ありません (OEIS A014537) テストケース 1 4 2 31 3 227 5 12367 10 272400600

5
HTMLページを山に変換する
タスク: HTMLページを山に変換します! HTMLページがインデントされると、次のようになります。 <div> <div> <div> </div> <div> <div> </div> </div> </div> </div> しかし、正直なところ、山はこの構造をより代表しています。 したがって、次のように書き換えることができます。 /\ /\/ \ / \ / \ 左右の一番外側のスラッシュは、外側のdivに対応しています-HTMLタグの各ペアは、 /、開始タグと\終了タグ -すべてのタグの内側は同じ構造で「より高い」です。 入力: 何もないだろう <!DOCTYPE> 自己終了タグはありません。例 <img />または<br /> タグ内に属性またはコンテンツがある場合があります スペースまたはタブがある場合があります-プログラムはこれらを無視する必要があります <またはの間にスペースはありません</とタグ名 すべての入力は有効なHTMLになります 出力 -上記のタグを表す山。 その他のテストケース: 入力: <div id="123"> HI </div><a><span></span></a> 出力: /\ /\/ \ 入力: <body …

5
私の番号はユニークですか
で、この課題我々は要因の木を使用して整数すべての正をエンコードする方法を学びました。 仕組みは次のとおりです。 空の文字列の値は1です。 (S)ここSで、値がSの式は、S番目の素数に評価されます。 ABここでAおよびBは、それぞれAおよびBの値を持つ任意の式の値はA * Bです。 たとえば、7を表す場合は、次のようにします。 7 -> (4) -> (2*2) -> ((1)(1)) -> (()()) この方法を使用すると、すべての整数を表すことができます。実際、いくつかの数値は複数の方法で表すことができます。乗算は可換であるため、10は両方 ((()))() そして ()((())) 同時に、いくつかの数値は1つの方法でしか表現できません。例として8を取り上げます。8は次のようにしか表現できません ()()() そして、私たちの原子はすべて同じなので、commutivityを使用して原子を再編成することはできません。 それで、今の質問は「どの数字が一方向でしか表現できないのか?」です。最初の観察は、私がそこに戻り始めたばかりのものです。完全な力にはいくつかの特別な特性があるようです。さらに調査すると、36を見つけることができます。これは6 2が完全な力ですが、複数の表現があります。 (())()(())() (())()()(()) ()(())()(()) ()(())(())() ()()(())(()) また、6はすでに再配置可能であるため、これは理にかなっています。したがって、6から作成する数も再配置可能でなければなりません。 これでルールができました: 数値は、一意の表現を持つ数値の完全な力である場合、一意の表現を持ちます。 この規則は、素数が一意であるかどうかを判断するために、合成数が一意であるかどうかの判断を減らすのに役立ちます。この規則ができたので、何が素数を一意にするのかを理解したいと思います。これは実際にはかなり自明です。一意の番号を取得して括弧で囲む場合、結果は一意である必要があります。逆に、nに複数の表現がある場合、n番目の素数には複数の表現が必要です。これにより、2番目のルールが生成されます。 N番目の素数をしている場合にのみ場合は一意であるnがユニークです。 これらのルールは両方とも再帰的であるため、ベースケースが必要になります。最小の一意の番号は何ですか?()空の文字列である1 だけがさらに小さく、一意であるため、2と言いたくなるかもしれません。 1は一意です。 これらの3つのルールを使用して、数値に一意の因子ツリーがあるかどうかを判断できます。 仕事 あなたはそれが来るのを見たかもしれませんが、あなたの仕事は正の整数を取り、それが一意であるかどうかを判断することです。この計算を行うプログラムまたは関数を作成する必要があります。2つの可能な値のいずれかを出力する必要があります。これらの値は自由ですが、入力が一意の場合は「yes」を、そうでない場合は「no」を出力する必要があります。 回答はバイト単位でスコアリングする必要があり、バイト数は少ない方が良いでしょう。 テストケース 最初のカップルの一意の番号は次のとおりです。 1 2 3 4 5 …

16
再帰的コラッツ予想
このCollat​​z推測あなたは任意の正の整数を取る場合は、以下のアルゴリズム十分な回数繰り返すこと公準: if number is odd, then multiply by three and add one if number is even, then divide by two 最終的には1になります。常に機能するように見えますが、常に機能することは証明されていません。 あなたはすでに1に達するのにかかる時間を計算しているので、私は少し物事を切り替えると思いました。 指定された正の整数から始めて、1(「停止時間」)に達するまでにかかる時間を計算します。次に、その番号の停止時間を見つけます。 1に達するまで、または100回の反復という完全に任意の制限に達するまで繰り返します。前者の場合、それが何回繰り返したかを出力します。後者の場合、整数でない限り、「Fail」または選択した他の一貫した出力を出力します1≤n≤100。このオプションに空の文字列を出力することはできません。ただし、範囲[1、100]以外の整数の出力は許可されています。 例: Input: 2 2->1 Output: 1 Input: 5 5->5->5->5->5->... Output: Fail Input: 10 10->6->8->3->7->16->4->2->1 Output: 8 Input: 100 100->25->23->15->17->12->9->19->20->7->16->4->2->1 Output: 13 Input: 10^100 10^100->684->126->108->113->12->9->19->20->7->16->4->2->1 Output: 13 …

7
半指数関数
半指数関数は、それ自体となるとき、指数関数を与えるものです。たとえば、の場合f(f(x)) = 2^x、f半指数関数になります。この課題では、特定の半指数関数を計算します。 具体的には、次のプロパティを使用して、非負の整数から非負の整数への関数を計算します。 単調増加:if x < y、thenf(x) < f(y) 少なくとも半指数:すべてのx場合、f(f(x)) >= 2^x 辞書式に最小:上記の特性を有する全ての機能のうち、出力最小化するf(0)という選択肢最小に与えられ、f(1)後f(2)など。 入力に対するこの関数の初期値0, 1, 2, ...は次のとおりです。 [1, 2, 3, 4, 8, 9, 10, 11, 16, 32, 64, 128, 129, 130, 131, 132, 256, 257, ...] この関数は、関数または完全なプログラムとして、次のいずれかの方法で出力できます。 乗りx入力、出力としてf(x)。 テイクx出力まず、入力としてxの値f。 すべてを無限に出力しますf。 を取得xして出力する場合はf(x)、xインデックスをゼロにする必要があります。 リファレンス実装 これはコードゴルフです-バイト単位の最短コードが勝ちます。いつものように、標準的な抜け穴は禁止されています。

11
Unicode分数
形式の分数m/n(mおよびnは互いに素な整数)を指定すると、対応するUnicode分数を出力します。プログラム/関数は、Unicode文字に対応しない入力を受け取ることはありません。配列は、たとえば[2, 3]とは対照的に2/3受け入れられます。m / nとは対照的にm/nも大丈夫です。二つの別々の入力mとnも有効です。 処理する必要があるUnicodeの分数は次のとおりです。 ½, ⅓, ⅔, ¼, ¾, ⅕, ⅖, ⅗, ⅘, ⅙, ⅚, ⅐, ⅛, ⅜, ⅝, ⅞, ⅑, ⅒ したがって、可能な入力は次のとおりです。 1/2, 1/3, 2/3, 1/4, 3/4, 1/5, 2/5, 3/5, 4/5, 1/6, 5/6, 1/7, 1/8, 3/8, 5/8, 7/8, 1/9, 1/10 文字のUnicodeコードポイントは次のとおりです。 188 ¼ 189 ½ 190 ¾ 8528 …

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