YAPCでのPerlゴルフ::ロシア2014





REG.RUの私たちは、興味深いイベントに参加するのが大好きです。 私たちはとても愛しているので、彼ら自身でさえ彼らを組織し始めました。 たとえば、6月13〜14日に会社のスポンサーと同僚の積極的な参加を得て、次のperl-programmers YAPC :: Russia 2014の会議を開催しました。 いつものように、素晴らしい会社が集まり、時間が楽しくて便利でした。 さらに、今年の会議の会場は初めて、そして白い夜の真っwhite中にあるサンクトペテルブルクでした! イベントの面白い写真はソーシャルネットワーク( VKontakteFacebook )で見ることができ、YouTubeでもいくつかのレポートを投稿しました(そして、残りを投稿する希望を失わないでください)。



他の文化的活動の中でも、昨年の会議YAPC :: Europeの経験を繰り返し、Perl Golf大会を再び開催することにしました。



今回はこの問題があります:



エルドス数



パル・エルデスは有名なハンガリーの数学者です。

Erdösは彼の人生で1,475件の記事を執筆しており、その多くは共同執筆されています。 伝統的に、数学では、共同記事はルールではなく例外であるため、このような多数の共著者の存在は、数学の民間伝承に「 エルデス数 」という概念を生み出しました。



この番号は次のように定義されます。

  • エルドス自体ではゼロです。
  • Erdoの直接共著者の場合、この数は1に等しく、
  • nに等しいエルドス数を持つ人々の共著者は、エルドス数n + 1を持ちます。
© ウィキペディア



接続のいくつかのバリエーションから最短、つまり可能な最小数が選択されることに留意してください。



入力データ:

最初の行には、エルドス数を決定する必要がある科学者の名前が含まれています。 次の行には、出版物のリストが含まれます。コンマとスペースで区切られた著者の名前、およびコロンで区切られた作品の名前。 指定された姓はどの出版物にも存在しない場合があります。



例:

Chen Smith, Martin, Erdos: Newtonian forms of prime factor matrices Erdos, Reisig: Stuttering in petri nets Smith, Chen: First oder derivates in structured programming Jablonski, Hsueh: Selfstabilizing data structures
      
      





データはSTDINに提出されます:

 cat data | perl golf.pl
      
      





チャレンジ:

指定された科学者のエルドラーの番号を印刷します。 Erdösとの接続がない場合は、Infを印刷します。



添付のテストスイートを使用して、ソリューションの正常性を確認できます。

 prove test.pl
      
      





ソリューションのサイズは、 golfcount.pl



スクリプトを使用して計算できます。

 perl golfcount.pl golf.pl
      
      





タスクのテキスト、一連のテスト、および補助スクリプトはgithubにあります。



ソリューションはperlバージョン5.16.0でテストされました。それ以降のバージョンでは、smartmatch実験に関する警告が表示される場合があります。



驚くべきことに、競技会での勝利のための戦いが激しくなった。 参加者は、各キャラクターをまとめて戦う前の最後の数分まで、ソリューションの改良版を文字通り送信しました。 そして、決定自体は前回よりも多様であることが判明しました。 最終的な順位は次のとおりです。



1(137文字)- ビクターサパンコフ

2(139文字)- ニコライ・シュリャコフスキー

3(140文字)- デニス・イバエフ

4(156文字) -Pavel Shcherbinin

5(180文字)- セルゲイ・ロマノフ

6(190文字)- エフゲニーブレイキン

7(200文字)- ドミトリーラテン

8(205文字)- イリヤ・コレスニコフ

9(243文字)- エフゲニー・ボストロフ

10(393文字) -Dmitry Tigrov



通常どおり、regexpを最も積極的に使用するソリューションが勝ちました。 誰が疑うでしょう。 次のようになります。

 #!/usr/bin/perl -0np $i=$_;$_=unpack('%32W',$i);$o=length$i>249;s/\s*(^|$)\s*//mg;s/69/0/;s/83/1/;s/67/{2-$o}/e;s/73/Inf/;s/^$//;s/\s+//g;s/\s*\z\s*/\n/m
      
      





すべての参加者はREG.RUから賞品を受け取り、同僚からは大きな注意と敬意を表したカートを受け取りました。







私は、パールの知恵に無関心でないすべての人に、彼らの強さをテストし、出場者の結果を超えようとすることを提案します。 まあ、または少なくとも彼らのソリューションがどのように機能するかを理解してみてください。 これを簡単にするために、各ソリューション( golf.pl



)の隣には、そのコピーがフォーマットされた形式( golf_formatted.pl



)にあります。 それが本当に役立ったというわけではありません。 しかし、まだ。



あなたが突然さらに短い決定を下すことができた場合、または特に成功したトリックを思い付くことができた場合-共有することをheしないで、私は喜んであなたの決定を出版物に追加します。











投稿コメントからのいくつかのソリューション:



107文字 -xtender

160文字 -brom_portret

81文字 - バイオフリーク



競争に時間を割いてくださった皆さんに感謝します!



All Articles