
REG.RUの私たちは、興味深いイベントに参加するのが大好きです。 私たちはとても愛しているので、彼ら自身でさえ彼らを組織し始めました。 たとえば、6月13〜14日に会社のスポンサーと同僚の積極的な参加を得て、次のperl-programmers YAPC :: Russia 2014の会議を開催しました。 いつものように、素晴らしい会社が集まり、時間が楽しくて便利でした。 さらに、今年の会議の会場は初めて、そして白い夜の真っwhite中にあるサンクトペテルブルクでした! イベントの面白い写真はソーシャルネットワーク( VKontakteとFacebook )で見ることができ、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文字 - バイオフリーク
競争に時間を割いてくださった皆さんに感謝します!