Sansaraの車輪から抜け出す、過激主義、少し環境に優しいもの-Joker 2018カンファレンスのGridGainブックレットからのタスクの解析

10月19日と20日に、サンクトペテルブルクでジョーカー会議が開催されました。これは、私たちと同じものを愛する人々にとって最高のイベントです。 GridGainからのタスクの3番目の問題( 1、2 )は賞賛しません。参加者からのフィードバックを引用したほうがよいでしょう。



「彼らのタスクはばかげているようで、ITに関連していない」

「優れたタスク、いつものように(私は何もマスターしていませんが)」

「タスク中毒」

「いつものようにトップタスク」



約束どおり、詳細なソリューションを公開します。 会議に参加できなかった人が自分の手を試すことができるように、彼らはそれをネタバレの下に持ち出しました。







タスク1



3か月前にこのタスクを作成しましたが、2018年10月、大統領は282件の記事を非犯罪化するイニシアチブを思い付きました。これについては非常に満足していますが、テキストのやり直しにうんざりしていました。 したがって、このタスクにすべてをそのままにしておきます。



センター・オン・ザ・レターは、虐待的なミームの配置を監視するほか、ソーシャルネットワーク上でのミームの好みや再投稿も監視します。 デジタル変革の一環として、監視部門のオフィス全体が人工知能に置き換えられました。 このイノベーションにより、ユーザーがいいね!から再投稿に切り替わる可能性をすばやく計算し、訴訟を成功させることができました。 以前は、192日で1文字の有罪判決が90%の確率で発行されました。 プロセスの自動化により、99.9%の確率でインジケーターが12日間になりました。



質問:革新的なアプローチは、文の頻度に指数分布がある場合に、282回までにマスコミから有罪判決への変換を何倍増やしましたか?



問題1の解決策
*引用符と著者のブースの作品に名前を付けると、すぐにギフトを受け取ることができます。 もちろん、これはユーリ・コイ(クリンスキー)、ガス部門、トラックのホームレスです



初期条件によると、 文の頻度は指数分布を持ち、その後、ロボットの導入前と、文が時間≤tで発音される可能性を評価するための次の式を取得した後:



F1t=1e lambda1tF2t=1e lambda2t



どこで  lambda1 lambda2 -これらは判決の頻度を指定する未知のパラメーターであり、tは時間パラメーターであり、次の条件に基づいています:



F1192=0.9F212=0.999



これらの方程式から、パラメーターは非常に簡単に表現できます  lambda1 lambda2



 lambda1= ln10.9/192 sim=0.012 lambda2= ln10.999/12 sim=0.576



文章の数と数学の数は線形に関係しているという仮定から、比率は  lambda1 lambda2 目的の値を与えるだけです:



 lambda2/ lambda1 sim=48









タスク2



仏教のヴァシリーの観点からすると、追加するものが何もないときではなく、何も削除できないときにコードは完璧です。 このアイデアに動機付けられたVasilyは、EpsilonGCを改善することを決定し、Dzen-GCを世界に公開しました。これは、ヒープメモリをクリアできるだけでなく、割り当てさえもできない完璧な製品です。 明らかに、この革新的なGCを使用したJVMでの割り当ては、スタック上でのみ可能であり、プリミティブ型に対してのみ可能です。



Vasilyは、新しい機能をテストするために、6つの値のモード(モードは最も頻繁に発生する観測値セットの値)を検出する関数をJavaで記述することにしました。つまり、次のシグネチャがあります。



public static int mode(int n0, int n1, int n2, int n3, int n4, int n5)
      
      





啓発に近づくために、Vasilyはコードで追加のローカル変数とメソッドを宣言せず、左足の小指だけでプログラミングしました。



タスク:この関数の実装でVasilyを支援します(すべての指を使用できます)。



問題2の解決策
そのような厳しい制限がなかった場合、この問題を解決する方法を考えてみましょう。 値は配列で転送され、追加メモリを使用しないことをお勧めします(ただし、少しは可能です)。



次に、Map <Integer、Integer>を使用するオプションに注目し、モードが並べ替えられた配列を検索するのに最も便利であることを確認します。値が繰り返される場合、すべての重複が近くにあります。 配列をソートし、1回のパス(および2つの変数)で、最大反復回数の値を見つけます。



次のことに注意してください。



1)値を再帰的にソートできます。



 // Expectation: if there are more than one mode, we are free to return any of them. // 2,2,3,3,4,4 has 3 modes : 2,3,4. I expect that 3 is correct answer. public static int mode (int a, int b, int c, int d, int e, int f){ // If arguments are not sorted, let's sort them with bubble sort :) if (a > b) return mode(b,a,c,d,e,f); if (b > c) return mode(a,c,b,d,e,f); if (c > d) return mode(a,b,d,c,e,f); if (d > e) return mode(a,b,c,e,d,f); if (e > f) return mode(a,b,c,d,f,e);
      
      







2)ソートされた値は6つのみです。

3)値が3回繰り返される場合(すべての値の半分)-これはすでにmodです!

3.1)そうでない場合でも、2回繰り返します-これはmodです!

3.2)重複する値がない場合、値はモードです。



 // Check for mode with 3+ repeats. 3 repeats is enough to say value is a mode (3 is half of 6). // Since args are sorted, a == b && b == c is the same as a == c; if (a == c) return a; if (b == d) return b; if (c == e) return c; if (d == f) return d; // Check for 2 repeats. if (a == b) return a; if (b == c) return b; if (c == d) return c; if (d == e) return d; if (e == f) return e; return f; }
      
      







厳密に言えば、問題には多くの解決策がありますが、最も単純で調和のとれたものであることが気に入っています。







タスク3



2人の麻薬中毒者がマトリックスから脱出し、そのうちのどれが選ばれた1人であるかを理解することにしました。 これを行うために、彼らは青い1パックと赤いピル4パック(同じサイズのパック)を手に入れ、効果を高めるために緑色で飲むことにしました。



突然、マトリックスの不具合(薬物中毒者が考えたように)により、当初RGB色#2D241Dおよび#F4E3E1であった彼らの顔は、使用された錠剤と緑水の数に応じて変化し始めました:各錠剤(または緑水1 ml)は、対応する量を直線的に増加させました中毒者の顔の色。



同時に、各RGBコンポーネントの値は#FFを超えることはできません。つまり、タブレットやブリリアントグリーンをさらに使用しても効果はありません。 ゼレンカは当初、それぞれ20 mlの完全なバイアルをいくつか持っていました。これは、小分けした錠剤の合計数よりもmlで合計2倍少ないです。 2番目の中毒者が食べたマトリックスからの終了イベントの後

最初の青よりも54個多い赤の錠剤、麻薬中毒者には何も残っていませんでした。



質問:その結果、それぞれの顔が#F0FF6Bと#FFFEFFであった場合、各常用者が使用した錠剤とグリーンバックの数はどれくらいであり、グリーンバックは赤い錠剤よりも3倍強いことが知られています。

青より弱い?



問題3の解決策
まず、色の最終値の中から厳密に0xFF未満の値のみを選択します。これは、条件により、値0xFFに対して使用されるカラーエンハンサーの下側境界線のみを指定できるためです。 これらは、値0xF0、0x6B、および0xFEです。 次の方程式を取得します。



r1k=0xF00x2D=195b12k=0x6B0x1D=78g23k=0xFE0xE3=27



または



r1k=195b1k=39g2k=9



ここで、kは赤い丸薬の作用係数です。 col_i、col \ in \ {r、g、b \}、i \ in \ {1、2 \}col_i、col \ in \ {r、g、b \}、i \ in \ {1、2 \} 、-対応する消費者が対応する色で使用するアンプの数(タブレットはピース単位で、緑-ミリリットル単位)。 さらに、2番目の方が最初の青よりも54個の赤い丸薬を食べたことがわかります。すべてが単純です。



r2=54+b1



別の方程式は、錠剤の数と緑のミリリットルの比率に関する条件から得られます。



2g1+g2=r1+b1+r2+b2



また、赤と青の錠剤の比率からもわかります。



r1+r2=4b1+b2



さらに、20 mlのグリーンバックが数回あったことがわかります。



g1+g2=20z ここで、zは負でない整数です。



k全体と丸薬が丸ごと食べられるという仮定から(好きなようにグリーンバックを飲むことができます)、以下に当てはまる唯一の答え:



r1=195g1=171b1=39



r2=93g2=9b2=33



これは、たとえば以下で説明する方法によって、非常に簡単に取得できます。

比率があります b1k=39 。 39の分解は{1、39}、{3、13}のみです。 したがって、kはセット{1、3、13、39}からのみ値を取ることができます。 値「3」を試してみましょう。



r1=195/3=65b1=39/3=13g2=9/3=3r2=54+b1=54+13=67b2=r1+r24b1/4=65+67413/4=20g1=r1+b1+r2+b22g2/2=65+13+67+2023/2=79/2



しかし同時に g1+g2 20の倍数である必要がありますが、値(79.5 + 3)には当てはまりません。



まったく同じ方法で、値「13」と「39」が削除されます。 kに残る唯一の値は1です。 それを置き換えても、矛盾は生じず、答えが得られます。



実際、問題のどこにも赤RGB成分の線形増分係数kが整数であるとは言われていないため、解はファミリー全体であることが判明します。*緑*は1 mlの倍数でのみ消費され、錠剤全体が消費されると仮定した場合(これもまた個別に指定しない):



r1=1040n+195g1=732n+171b1=208n+39



r2=208n+93g2=48n+9b2=104n+33

nは負でない整数です。



このファミリを取得するには、最初の3つの方程式のkを取り除き、たとえば次のように書き換える必要があります。



3r115b1=03r165g2=015b165g2=0



次に、線形ディオファントス方程式のシステムを解きます(当然、適切な形式に縮小された残りの方程式を含む)。 zelenkaが1ミリリットルの倍数でのみ消費されると仮定しない場合、未知の分子と分母全体に対してg1とg2(明らかに合理的である必要があります)を使用して、ディオファンタス方程式の非線形システムを取得します。 最も一般的な形式(すべての値が連続的)で問題を解決する場合、さらに多くの解決策があります。



勝者



確かに、すべてのタスクはAlexey RyzhikovとValentin Shipilovによって解決されました。 また、アレクセイ・ガルキン、アントン・ブリノフ、イリヤ・ペレボズチコフなどの参加者に賞が授与されました。 おめでとうございます!



All Articles