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

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

13
合同の公式
中国剰余定理は、剰余演算に威力を発揮することができます。 たとえば、次の一連の合同関係について考えてみます。 このような合同関係のセットの場合、すべての基数(3, 5, 7この例では)は互いに素であり、とのn間に1(3*5*7 = 105この例では)基数の積の間に唯一の整数があり、関係を満たします。 。 この例では、数値はであり14、次の式で生成されます。 ここで、2, 4, and 0上記の例で示されています。 70, 21, 15は式の係数であり、基底に依存し3, 5, 7ます。 70, 21, 15一連の基底の式の係数(この例では)を計算するには、次の手順を使用します。 a一連の基数の各数値について: として示される他のすべての基底の積を求めますP。 で割ったときにP余りが残る最初の倍数を見つけます。これはの係数です。1aa たとえば、base 3に対応する係数を計算するには、他のすべてのbase の積(つまり5*7 = 35)を求め、次に1baseで割ったときに余りを残すその積の最初の倍数を求めます。 この場合には、35の残りの葉2で割ったとき3、しかし35*2 = 70、葉の残りの部分1で割ったときの3ように、70に対応する係数です3。同様3*7 = 21の残りの葉1で割ったとき5と3*5 = 15の残りの葉1で割ったときに7。 一言で言えば a一連の数値の各数値について: 他のすべての数値の積を求めますP。 で割ったときにP余りが残る最初の倍数を見つけます。これはの係数です。1aa チャレンジ 課題は、2つ以上のベースのセットの場合、対応する係数のセットを見つけることです。 塩基のセットはペアワイズ素数であることが保証されており、各塩基は1よりも大きいことが保証されています。 入力は、入力[3,4,5]またはスペースで区切られた文字列としての整数のリストですが、入力は"3 4 5"機能します。 出力は、整数のリストか、係数のセットを示すスペースで区切られた文字列のいずれかである必要があります。 テストケース input output …
10 code-golf  math 

6
パスを見つけてください!
プログラムまたは関数を記述する必要があります。 入力は数値の「マップ」です。マップを改行文字(\n)付きの文字列または文字列の2D配列のいずれかとして選択できます。 すべてのマップは5文字x 5文字で、文字は常に0より大きい数字かスペースです。 これが地図の例です: 12 45 11233 233 1 2 899 あなたの仕事は、マップで接続されたコンポーネントを見つけることです。有効なコンポーネントは、水平または垂直(斜めではなく)に接続された少なくとも3つの一連の同一の数字(スペースではない)です。次に、有効な接続コンポーネントの文字をxs に置き換え、その結果を印刷または返す必要があります。 したがって、上記の例の出力は次のようになります。 x2 45 xx2xx 2xx 1 2 899 これは別のテストケースです(Martin Enderに感謝): Input: 2 3 4 1 5 111 6 11 7 Output: 2 3 4 x 5 xxx 6 xx 7 これはコードゴルフなので、バイト単位の最短コードが勝ちます!

3
数に到達する方法
最初の番号の入力と第2の数(両方とも正の整数、exludedゼロ)を考えると、次のアクションを使用して、あなたが最初の第二の実施を作ることができるどのように多くの方法で決定します+1、+2と*3。操作は単純に左から右に適用されます。 例: 入力:1 2。出力:1。つまり、あなただけ得ることができる2ことによって+1、片道そう。 入力:1 3。出力:3。+2つまり+1+1、またはを実行して3を取得できます。*3 入力:1 4。出力:4。 入力:2 6。出力:6。 入力:2 7。出力:9。 入力:1 10。出力:84。 方法がない場合、たとえば100 100、または100 80、出力は0です。 入力を配列または任意の便利なセパレーター付きの文字列として受け取ることもできます。 最短のソリューションが優先されます。

2
数が代数であることを証明する
この答えに触発されて(私の強調): ゲームをします。いくつかの数xがあるとします。xから始めて、ゼロ以外の任意の整数で加算、減算、乗算、または除算できます。xを掛けることもできます。これらのことは何度でも行うことができます。合計がゼロになると、勝ちます。 たとえば、xが2/3 であるとします。3を乗算してから2を減算します。結果はゼロです。あなたが勝ちます! 仮定xは 7 ^(1/3)です。乗算により、X、それまでのx再び、その後、あなたは勝つ7を引きます! 仮定xは √2+√3です。ここで勝つ方法を見ることは簡単ではありません。しかし、xを掛けて10を引き、xを 2倍して1を加えると、勝つことがわかります。(これは自明ではありません。電卓で試すことができます。) しかし、x =πで始めると、勝つことができません。加算、減算、乗算、整数による除算、またはπによる乗算では、いくつのステップを実行しても、πから0に到達する方法はありません。(これも明白であるとは限りません。非常に注意が必要です!) あなたが勝つことができる√2+√3のような数は代数と呼ばれます。あなたが勝つことができないπのような数は超越と呼ばれます。 なぜこれが面白いのですか?各代数は整数に算術的に関連付けられており、ゲームでの勝利の動きはその方法を示しています。ゼロへの道は長くて複雑かもしれませんが、各ステップは単純であり、道があります。しかし、超越数は根本的に異なります。それらは、簡単な手順で整数に算術的に関連しているわけではありません。 基本的に、上記の質問で使用した手順を使用して、特定の入力でゲームを「勝ち」ます。 実数の代数定数が与えられたx場合、以下の許可された演算を使用して数値をゼロに変換します。 整数を加算または減算します。 ゼロ以外の整数で乗算または除算します。 元の定数を掛けxます。 入力は、整数、加算、減算、乗算、除算、指数(**またはの選択^、指数は根を表すために使用されます)、および括弧を含む可能性のある文字列です。入力のスペースはオプションですが、出力にはありません。ゼロの結果を得るのに必要なステップを出力する必要があります。そのため7、1ステップとして乗算すると、として出力され*7ます。末尾にスペースや改行を入れることができます。 例 0 -> +0 (or any other valid, or empty) 5/7 + 42 -> -42 *7 -5 (or shorter: *7 -299) 2^(1/3) -> *x *x -2 5*(3**(1/4)) -> *x *x …
10 code-golf  math 

10
結果を得るために必要な操作を見つける
したがって、タスクは単純で、数値の配列と結果が与えられた場合、要求された結果を取得するには、arrayから数値に使用する必要がある操作を見つける必要があります。 簡単に始めましょう。加算、減算、乗算、除算などの基本的な演算のみを許可します。 例: Input : [5,5,5,5,5] 100 Output : 5*5*5-5*5 Javaのような言語にいくつかの利点を与えるために、要求はプログラム全体ではなく関数を実装することであり、結果はパラメーター経由で返すか、コンソールに出力できます。 コードはバイト数に基づいてスコアリングされ、ゴルフコードチャレンジなので、最低のスコアが勝ちます。 別の要件は、配列にdigidsのみが含まれている場合、追加の-10ポイントを取得できることです。次の数字から数値を構成できるソリューションをサポートします。すなわち Input : [1,2,3,4,5] 0 Output : 12-3-4-5 出力が提案された出力である場合、いくつかのケースでは複数のソリューションがあることに注意してください。特定のタスクに対して1つ以上のソリューションを提供するかどうかは、あなた次第です。 編集: 結果は数学的な観点から有効である必要があります。したがって、除算は整数ではなく有理除算であり、演算の優先順位は従来の数学と同じです(最初の乗算と除算、次に加算と減算)。

3
百の広場!
基本に立ち返って... 地元の小学校(学年?)の教師として、クラスに時間割を教える方法が必要です。あなたの処分で、あなたは100個の正方形とたくさんの赤ペンを持っています。また、クラスに正解をすばやく表示できるようにする必要もあります。 さて、あなたはタイムテーブルを実行できるプログラムを書くのに十分賢いですが、100の正方形にそれらを描くことができますか? チャレンジ 入力の倍数である数値に陰影を付けるためにANSIエスケープコードを使用して、100平方を標準出力または同等のものに出力します。 1〜100の数字を含む10x10グリッドを出力します。 各ボックス内の2桁の数字の配置が一貫している限り、それは問題ではありません 1桁の数字の場合は、2桁にパディングして、2桁の数字と同じフォーマットを使用するか、ボックスの中央に配置することができます。 ボックス内の数値が入力の倍数である場合は、ボックス全体を赤で着色します。 これは、数字部分だけでなく、ボックス全体を意味します たとえば、入力が与えられた場合、与え3られた100平方を印刷します これはコードゴルフなので、バイトでの最短の答えが勝ちます!

13
対角線のドット積
この課題は非常に簡単です。入力として正気な方法で表された正方行列が与えられ、行列の対角線のドット積を出力する必要があります。 具体的には、対角線とは、左上から右下へ、および右上から左下への対角線です。 テストケース [[-1, 1], [-2, 1]] -> -3 [[824, -65], [-814, -741]] -> 549614 [[-1, -8, 4], [4, 0, -5], [-3, 5, 2]] -> -10 [[0, -1, 0], [1, 0, 2], [1, 0, 1]] -> 1

4
最小コストのブロック対角化
主対角線上に1の正方ブロックを持ち、その他の場所では0であるバイナリブロック対角行列を考えます。このような行列を「有効な」行列と呼びましょう。 たとえば、ここにいくつかの有効な4x4行列があります。 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 1 0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 1 1 1 …

30
繰り返しアイテムのグループ
チャレンジの説明 アイテムのリスト/配列を指定して、連続する繰り返しアイテムのすべてのグループを表示します。 入力/出力の説明 入力は、アイテムのリスト/配列です(すべてが同じタイプであると想定できます)。言語が持つすべてのタイプをサポートする必要はありませんが、少なくとも1つをサポートする必要intがあります(できれば、のようなタイプbooleanも非常に興味深いものではありませんが、問題ありません)。出力例: [4, 4, 2, 2, 9, 9] -> [[4, 4], [2, 2], [9, 9]] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4] -> [[1, 1, 1], [2, 2], [3, 3, 3], [4, 4, 4, 4]] [1, 1, 1, 3, 3, 1, 1, 2, …

1
f(item)が最小のリストでアイテムを見つける方法は?
リストlと関数がありますf。f厳密に増加または減少しているわけではありません。リストでf(item)最小のアイテムを見つけるにはどうすればよいですか?たとえば、次のようなリストがあるとします。 l = [1, 2, 3, 4] そしてlist(f(x)for x in l): [2, 9, 0, 3] f(3)他のどのfよりも小さいので、「3」と表示されます。これを行う最短の方法は何ですか?私は最初に試しました: min(f(x) for x in l) しかし、これは0、ではありません3。簡潔にするためではなく、読みやすさのために撮影している場合は、次のようにします。 index = 0 smallest = f(l[0]) for i in range(len(l)): value = f(l[i]) if value < smallest: smallest = value index = i これは問題ありませんが、コードゴルフにとっては恐ろしいものです。ゴルフしても i,s=0,f(l[0]) for x in …
10 code-golf  tips  python 

2
橋を架ける
あなたの仕事は、入力を与えられた2つの崖をd距離で離して接続するブリッジを構築することです。d常に均一になります ただし、ブリッジにはそれを保持するための柱が必要です。各列は、両側に最大6つのスペースを保持できます。 この例では: ________ ________ | | A | | B |----------------------| d = 22 のブリッジはd = 20、2列のこのようになります。列はdにはカウントされません。 _____|__________|_____ 12345|1234554321|12345 | | ルール: 立ち上がるのに十分なカラムが必要です。 立ち上がるのに必要な最小数のカラムが必要です。 対称でなければならない 勝ったバイトの最小量 例:(#はスペースを数えるのに役立つだけです。出力には含めないでください) d = 10 _____|_____ 12345|12345 | d = 32 _____|___________|___________|_____ 12345|12345654321| | | | | d = 8 ____|____ 1234|1234 | d …

3
RegEx-golf:文字列のすべてのコンテンツに一致
あなたの仕事は、文字列内のすべてに一致するRegExを記述することです。 文字列は、エスケープされていない2つので囲まれている(ただし含まれていない)すべてのものとして定義されます"。 Aが"でエスケープすることができ\、また再びエスケープすることができ、。 テストケース string: ab\c"defg\\\"hi"jkl"mn\\\\"opqrst"" matches: ^^^^^^^^^^ ^^^^^^ ^ (the empty string) 得点 最短のソリューションが優先されます。 スペック 使用するフレーバーを指定してください。 入力はバランスが取れてい"ます。 \string-beginning-delimiterの直前には何もありません。たとえば、処理する必要はありませんabc\"def"

12
N固有の加算セット
セットは重複することなく順序付けされていないことに注意してください。 定義アンN -uniquely添加集合S長さであり、Kは、セットようであるすべてのNに-lengthサブセットSの異なる数の合計。言い換えれば、SのすべてのN長さのサブセットの合計はすべて異なっています。 対物入力として配列/セットと番号が与えられるN任意の合理的な形式で機能するか、完全なプログラムには、検索およびリターン又は出力truthy又はfalsey値入力であるか否かを示す(falseyためerroringは大丈夫です)N -独自の添加剤。 各要素は最大で1回しか出現せず、各数値は言語のネイティブデータ型内にあると想定できます。必要に応じて、入力がソートされていると想定することもできます。最後に、あなたはそれを仮定するかもしれません0 < N <= K。 例 セットS = {1, 2, 3, 5}とを考えてみましょうN = 2。以下は、すべての一意のペアのすべての合計ですS(一意のペアのみが合計の対象となるため)。 1 + 2 = 3 1 + 3 = 4 1 + 5 = 6 2 + 3 = 5 2 + 5 = 7 3 + 5 = 8 出力に重複がないことがわかるので、Sは2一意的に加算されます。 …

1
浮かびますか?
チャレンジ ボートの底を表す2D文字列を入力として指定すると、ボートが浮くかどうかを決定する必要があります。この2D文字列は、最も便利な形式にすることができます。(改行付きの文字列、文字列のリスト、文字のリストのリストなど)。浮かぶ場合は真の値を、沈む場合は偽の値を出力します。 船底の密度が一定でない場合、ボートは転倒するため、のすべての特性は同じでなければなりません。また、スペースで表される大きな穴がボートにある場合、沈みますので、ボートに4より大きい面積の穴があってはなりません。次に例を示します。 ######## # #### ######## # ## ## # ##### ######## このボートは有効です。その最大の穴の面積は4であるためです。このボート: ######## ######## # ## # ##### ######## 面積が7の穴があるため、は無効です。すべての入力の外側は穴のない塗りつぶされた四角形であると安全に想定できます。さらにいくつかのテストがあります: $$$$$$$$ ***$$$$$ ***$$$$$ ***$$$$$ $$$$$$$$ Invalid density. Sink. %%%%%%%% % % % %%%%% % % % % %%%%%%%% None of the holes are larger than 4. Float. OOOOOOOO …

9
パスワードについて
でキープトーキングと誰もが爆発、プレイヤーは自分の「専門家」(手動で他の人)からの情報に基づいて爆弾を融着除去する使命を帯びています。各爆弾はモジュールで構成されており、そのうちの1つはパスワードにすることができます。エキスパートには、すべての5文字の長さの可能なパスワードのリストが提供されます。 about after again below could every first found great house large learn never other place plant point right small sound spell still study their there these thing think three water where which world would write プレイヤーには、パスワードの各場所で使用可能な6文字のリストが与えられます。可能な文字の組み合わせを考慮して、正しいパスワードを出力します。入力は任意の適切な形式(2D配列、改行で区切られた文字列など)にすることができます。リスト/文字列/配列/パスワードの圧縮/生成に使用するコードを割り引くことができます。(@DenkerAffeに感謝) 注:パスワードは大文字と小文字を区別しません。入力は1つのパスワードに対してのみ解決されると想定できます。 例/テストケース ここでの入力は、文字列の配列として表されます。 ["FGARTW","LKSIRE","UHRKPA","TGYSTG","LUOTEU"] => first ["ULOIPE","GEYARF","SHRGWE","JEHSDG","EJHDSP"] => large ["SHWYEU","YEUTLS","IHEWRA","HWULER","EUELJD"] => still
10 code-golf 

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