昨年 (2009 年) のGoogle Code Jamでは、Round 1B の最初の問題として興味深い問題が取り上げられました:決定木
この問題は Lisp に似た言語に合わせて調整されているように見えたので、私たちは自発的にここ SO でエキサイティングなコードゴルフを作成しました。その中では、いくつかの言語が、かなり多くの異なる手法を使用して、どの Lisp の種類よりも少ない文字数で問題を解決することができました。
今年の Round 1B Problem A ( File Fix-it ) も、特定の言語ファミリーである Unix シェル スクリプト向けに調整されているようです。したがって、「1B-A の伝統」を継続することが適切でしょう。:p しかし、どの言語が最短のコードになるでしょうか? コードゴルフして見てみましょう!
問題の説明(公式ページから適応):
T個のテスト ケースが与えられます。各テスト ケースには、コンピュータに現在存在するすべてのディレクトリのフル パスをリストするN行が含まれます。例えば:
/home
/home/awesome
/home/awesome/wheeeeeee
/home/awesome/wheeeeeee/codegolfrocks
/home/thecakeisalie
次に、作成するディレクトリのフル パスをリストするM行が表示されます。これらは、前の例と同じ形式です。コマンドを使用してディレクトリを作成できますmkdir
が、親ディレクトリが既に存在する場合にのみ作成できます。たとえば、ディレクトリ/pyonpyon/fumufumu/yeahyeah
とを作成するには、次のように4 回/pyonpyon/fumufumu/yeahyeahyeah
使用する必要があります。mkdir
mkdir /pyonpyon
mkdir /pyonpyon/fumufumu
mkdir /pyonpyon/fumufumu/yeahyeah
mkdir /pyonpyon/fumufumu/yeahyeahyeah
mkdir
テスト ケースごとに、作成するすべてのディレクトリを作成するために呼び出す必要がある回数を返します。
入力
入力はテキスト ファイルで構成され、その最初の行には整数T (テスト ケースの数) が含まれます。ファイルの残りの部分には、テスト ケースが含まれています。
各テスト ケースは、スペースで区切られた整数NとMを含む行で始まります。
次のN行には、現在コンピューターに存在する各ディレクトリのパスが含まれています (ルート ディレクトリは含まれません/
)。これは、1 つまたは複数の空でない小文字の英数字文字列を連結したもので、それぞれの前に単一の/
.
次のM行には、作成する各ディレクトリのパスが含まれています。
出力
ケースごとに、 を含む 1 行を出力します。Case #X: Y
ここX
で、 はケース番号、Y
はソリューションです。
限界
1 ≤ T ≤ 100。
0 ≤ N ≤ 100。
1 ≤ M ≤ 100。
各パスには最大 100 文字が含まれます。
すべてのパスは、コンピューターに既に存在するディレクトリのリスト、または目的のディレクトリのリストに一度だけ表示されます。ただし、以下のケース #3 のように、両方のリストにパスが表示される場合があります。
ディレクトリが既にコンピュータ上のディレクトリのリストにある場合、ルート ディレクトリを除いて、その親ディレクトリもリストされます/
。
入力ファイルの長さは最大 100,000 バイトです。
例
より大きなサンプル テスト ケースは、ここからダウンロードできます。
入力:
3
0 2
/home/sparkle/pyon
/home/sparkle/cakes
1 3
/z
/z/y
/z/x
/y/y
2 1
/moo
/moo/wheeeee
/moo
出力:
Case #1: 4
Case #2: 4
Case #3: 0
コードゴルフ
この問題を解決する最短のコードを任意の言語で投稿してください。入力と出力は、stdin と stdout を介して、または選択した他のファイルで処理できます。コードが実行時に既存のファイルを変更または削除する可能性がある場合は、免責事項を含めてください。
勝者は、Round 1B 2010 の開始前に実装が存在する言語での (バイト カウントによる) 最短のソリューションになります。解決策、それはカウントされず、おそらく反対票を得るでしょう. ^_^
順位表