本物のソーセージフェスト


35

10月の最初の週末が近づいているので、独自のオクトーバーフェストをしましょう!

バックグラウンド

あなたと他のプログラマーは、ドイツのミュンヘンで地元のソーセージ屋に雇われています。ソーセージ担当者はオクトーバーフェストに、巨大なフォルクスフェストに必要なすべてのソーセージを提供しています。あなたは、上司が他の従業員にソーセージ関連の経験がなくても雇われた理由について話を聞くことができます。完璧なプログラミングスキルに雇われていることに気づきました。上司はソーセージアナライザーのコーディングを求めているようです。

今年、ソーセージ担当者はオクトーバーフェストでソーセージの種類を増やすことを決めましたが、どれだけ輸入したのかわかりません。

チャレンジ

上司が実際にインポートした特定の種類のソーセージの量を把握できるようにする必要があります。ソーセージ担当者がインポートしたすべてのソーセージの種類と数を出力するソーセージアナライザーをプログラムする必要があります。上司はこの機会に特別なフロッピードライブを購入し、ソーセージを与えて、それをにパイプしstdinます。

入力

上のいくつかのソーセージstdin、各ソーセージは1つのスペースで区切られています。ソーセージは次の形式で提供されます。

プリンスコルフ(P)

 ¤
| |
| |
| |
 ¤

サルチチョン(S)

 l
| |
| |
| |
| |
 l

ランドイェーガー(L)

\ /
| |
| |
| |
| |
/ \

カバノス(K)

.
|
|
|
|
|
.

コテチーノモデナ(C)

 ___
|   |
|   |
|   |
|___|

ロッドポール(R)

 ^
| |
| |
| |
| |
 v

出力

与えられたソーセージの出現と、それがどの種類のソーセージであるかの識別子が、スペースで区切られています。識別子は、ソーセージの名前の最初の文字です。順序は重要ではありません。

出力はに書き込まれstdout、末尾の改行とスペースが許可されます。

入力

 ^   ^   ^   ^  .
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
 v   v   v   v  |
                .

出力

4R 1K

入力

\ /  ___   l   ¤   ¤
| | |   | | | | | | |
| | |   | | | | | | |
| | |   | | | | | | |
| | |___| | |  ¤   ¤
/ \        l

出力

1L 1C 1S 2P

入力

 l   ¤   l
| | | | | |
| | | | | |
| | | | | |
| |  ¤  | |
 l       l

出力

2S 1P

バイト単位の最短プログラムを持つプログラマーは、ソーセージの連中(勝者)から報酬を受け取ります!

ソーセージトリビア

Prinskorv
Prinskorvは、「プリンスソーセージ」に直接翻訳され、リンクで販売されることが多い小さなスウェーデンのソーセージです。通常、フライパンで揚げ、マスタードをたっぷりと添えました。

サル
チョンサルチチョンは、豚肉で作られることが多いスペインの夏のソーセージですが、一部のレシピでは牛、子牛、馬などの他の肉を使用しています。肉と脂肪を細かく刻み、塩、コショウ、ナツメグ、オレガノ、ニンニクで味付けし、厚い天然豚の腸に挿入します。

LandjägerLandjäger
は、伝統的に南ドイツ、オーストリア、スイス、アルザスで作られた半乾燥ソーセージです。ハイキングなどの活動中の軽食として人気があります。また、冷蔵せずに一食分しか入っていないため、兵士の食べ物としての歴史もあります。

カバノスカバノス
は、豚肉またはコーシャトルコで作られたポーランドの長くて薄いドライソーセージです。それらはフレーバーがスモーキーであり、新鮮さに応じて柔らかくまたは非常に乾燥したテクスチャーになります。カバノジーは、しばしばコショウのみで味付けされます。他の肉とは異なり、これらのソーセージは通常、前菜として単独で食べられ、コーシャの場合を除いて、しばしばチーズと共に提供されます。

コテチーノモデナ
コテチーノモデナまたはコテチーノディモデナは、豚肉、ファットバック、豚の皮から作られた新鮮なソーセージで、イタリアのモデナ産のPGIステータスです。コテチーノは、レンズ豆またはカネリーニ豆とともに、特に新年の頃に、マッシュポテトと一緒にソースとともに提供されることがよくあります。

Rødpølse
Rødpølse(赤ソーセージ)は、デンマークで非常に一般的な、真っ赤でゆでたポークソーセージの一種です。ホットドッグスタンドはデンマークではいたるところにあるため、一部の人々はローデ・ポルサーを国民的料理の1つと考えています。

ウィキペディアからコピーされたすべてのソーセージ情報


32
オクトーバーフェストをテーマにしたソーセージに関するチャレンジを書いていますが、Weißwurstは含まれていませんか?-1
マーティン・エンダー

3
私はそれらの卑劣なソーセージの男を非難します!
sweerpotato

31
なぜソーセージ情報をネタバレタグに入れたのですか?悪くなるのを防ぐためですか?
アレックスA.

10
MartinBüttnerまあ@私がしたこと...あなたが言うことができると思いソーセージ、これまでアイデア!
-DankMemes

2
末尾のスペースは許可されます。末尾の改行の代わりに末尾のスペースを書くつもりだったと思います。今では両方が許可されています!
-sweerpotato

回答:


8

Pyth、30バイト

jdm+hd@"SKLCRP"%Ced45rS-czd\/8

オンラインで試す:デモンストレーションまたはテストスイート

説明:

他のすべての参加者と同じように、入力の最初の行だけを見てください。入力の最初の行がであるとしましょう\ / ___ l ¤ ¤ ____

最初にスペースで分割し、リストを表示します

['\\', '/', '', '___', '', '', 'l', '', '', '¤', '', '', '¤', '', '___']

今、私たちは'/'sと''sの乗り心地を取得し、残りのものをソートしたいです。

['\\', '___', '___', 'l', '¤', '¤']

今、それを実行長エンコードすることができます。

[[1, '\\'], [2, '___'], [1, 'l'], [2, '¤']]

結局のところ、これらの文字または文字列の順序(ASCII値)は'___' 、数字にうまくマッピングできます[0, 1, 2, 3, 4, 5]

char/string |  l   .   \    ___    ^   ¤  
-------------------------------------------
value       | 108  46  92 6250335  94 164  
value%45    |  18   1   2      15   4  29    
(value%45)%6|   0   1   2       3   4   5     

そして、これを使用して文字に直接マッピングできますSKLCRP

jdm+hd@"SKLCRP"%Ced45rS-czd\/8
                        czd     split the input string at spaces
                       -   \/   remove "/"s (and also ""s)
                      S         sort
                     r       8  run-length-encode
  m                             map each pair d of ^ to:
   +hd                            d[0] + 
                Ced               convert d[1] to a number
               %   45             mod 45
      @"SKLCRP"                   take the ^th element in the string (mod 6)
jd                              join by spaces

19

Pyth、36 34 32 30バイト

XjdsMrShM-czd\\8"¤_l/^.KRLSCP

...のおかげで、さらに 2バイト節約できました。:D

最初の行を除くすべての入力を無視し、すべての/sとスペースを削除し、ターゲット識別子に変換し、ソートし、ランレングスエンコーディングを使用して、結果を出力します。

ライブデモ。

32バイト版

XjdsMrS-hMfTczd\\8"¤_l/^.KRLSCP

ライブデモ。

@ジャクベのおかげでさらに2バイト節約できました!

34バイトバージョン

jdsMrSX-hMfTczd\\"¤_l/^.KRLSCP")8

ライブデモ。

@ジャクベのおかげで2バイト節約されました!

36バイトバージョン

jdsMrSX-hMfTczd\/"¤_l\\^.""PCSLRK"8

ライブデモ。


6
私は星のカービィ好きなので、私はあなたに1を与えた
復活モニカ- NACHT

6
正確に4kの担当者であるため、+ 1はしませんでした:)
ETHproductions

正確に4kに戻すために-1を指定しました:D
Beta Decay

1
別の2バイト;-) hM-czd\\は次と同じです-hMfTczd\\
ジャクベ

1
@sweerpotatoこちらをご覧ください¤2バイトです。
kirbyfan64sos

8

Javascript(ES6)、105

a=>[...'¤l/._^'].map((g,h)=>(f=(a.split(g).length-1)/'222261'[h],f?f+'PSLKCR'[h]:0)).filter(b=>b).join` `

それは非常に簡単ですが、とにかくここに説明があります:

input=>
  // list of all unique characters of the sausages
  [...'¤l/._^'].map((sausage_char, index)=>(
    // find all occurrences of the character in the string
    occurrences = (input.split(sausage_char).length - 1)
      / '222261'[index], // divide by the number of that character in its sausage
      // when dividing and multiplying by numbers in strings, JS automatically casts them
    occurrences ? // is there anything for this sausage?
      occurrences + 'PSLKCR'[index] : // add the sausage's letter and count
      0 // return 0 so it can be filtered out
  ))
  // filter out the 0s
  .filter(b=>b)
  // return a space-separated string
  .join` `

3
非常に賢い!このバージョンのゴルフにES7の配列理解を使用して、91を得ました:... a=>(h=-1,[for(g of'¤l/._^')if(f=(a.split(g).length-1)/'222261'[++h])f+'PSLKCR'[h]].join` `)の宣言を単純化できればh
...-ETHproductions

@ETHproductionsかっこいい!ES7を学ぶべきです
DankMemes

8

CJam、38 35 33バイト

l'_%'C*"l¤\^./""SPLRK "erS-$e`S*

ここでテストしてください。

説明

ソーセージの各タイプの最初の行は一意であり、ソーセージは上部に揃えられているため、その最初の行の関連する文字を数えるだけで十分です。2つのタイプには特別な処理が必要です。

  • Landjäger(L)はとの両方\を持ってい/ます。そのうちの1つを取り除きたい場合は、他のすべてのキャラクターと同様にもう1つを数えることができます。
  • Cotechino Modena(C)には3つのアンダースコアがあるため、アンダースコアカウントを3で割る必要があります。ターゲットキャラクターをCすぐに。

次に実際のコードについて:

l         e# Read one line from STDIN.
'_%       e# Split on runs of underscores.
'C*       e# Join back together by C's.
"l¤\^./"  e# Push a string with characters corresponding to each type, and a slash.
"SPLRK "  e# Push a string with the corresponding letters and a space.
er        e# Transliterate, turning each identifying character into the correct
          e# letter and all slashes into spaces.
S-        e# Remove spaces (which also gets rid of what used to be slashes).
$         e# Sort the string to group each letter.
e`        e# Run-length encode.
S*        e# Join by spaces.

何をするにしても、Splurkを忘れないでください。
テイラーロペス

6

Mathematica 116

おそらくいくつかのバイトは削ぎ落とされる可能性がありますが、ゴルフの言語には近づきません。

Row[Row/@Reverse/@Tally@ImportString[#,"Table"][[1]]/.{"¤"->"P","l"->"S","/"->"L","___"->"C","."->"K","^"->"R"}," "] &

ImportString[#,"Table"][[1]]入力の最上行に表示されるスペースで区切られた文字列のリストを返します。文字列には、{"¤","l","/","___",".","^"}繰り返しなど、リスト内の任意の要素を含めることができます。各要素は、一意の種類のソーセージに関連付けられています。

Tally そのような各文字列が出現する回数をカウントします。

/.{"¤"->"P","l"->"S",...置き換える¤PlSのように。

Reverse 関連するアイテムの前に各集計を配置します。

2つRowのsは出力をフォーマットします。


6

MATLAB、113

末尾のスペースが許可されていると仮定すると(そうです)、MATLAB無名関数は次のとおりです。

@(a)arrayfun(@(p,m)fprintf([(m>32&&p)*'%d%c ' ''],p,m),histc(strtok(strrep(a,'___','_'),10),'./\^_l¤'),'K LRCSP')

そして説明:

@(a) %Anonymous function, with an input a
    arrayfun(@(p,m) %Loop through the two input arrays (see later)
                   fprintf( %Print to console
                           [(m>32&&p)*'%d%c ' ''] %Essentially this means if p>0 and m>' ', print an integer followed by a char, then a space
                                                 ,p,m) %The values from the array input is what is getting printed
                                                      ,histc( %Make an array of how many times 
                                                                       strtok(strrep(a,'___','_'),10), %Keep only the first line (as that is where the interesting bit is) and also replace ___ with _ for the 'C'
                                                             './\^_l¤'), %these inputs appear (which will be passed in turn as the 'p' variable to cellfun)
                                                                        'K LRCSP' %These are the characters to be printed with the count representing each sausage (it will be placed in the 'm' input of arrayfun)
             )

正しく動作しているように見えます。後続スペースはまだありますが、すべてのソーセージを正しく処理できるようになりました。


3

Perl、84 77バイト

誰かがおそらくこれを少し削る可能性があります...

84バイト

($s=<>)=~y|_^\.l\\¤|CRKSLP|d;$$_++for split//,$s;$C/=3;for(A..Z){print"$$_$_ "if$$_}

77バイト

$$_++for split//,<>=~y|_^\.l\\¤|CRKSLP|dr;$C/=3;for(A..Z){print"$$_$_ "if$$_}

壊す:

STDINの最初の行を取得し、値を文字コードに音訳し、余分なゴミを削除します。d修飾子は本当に必要ではありませんが、私は上の奇妙なUnicodeの問題に遭遇し¤、それなしで文字。

シンボリック参照を使用して、見つかった各文字の変数を作成またはインクリメントします。

$$_++ for split //, <> =~ y|_^\.l\\¤|CRKSLP|dr;

トリプルアンダースコアのため、C変数を3で除算します

$C /= 3;

アルファベットをループし、1文字の大文字の変数が0より大きい値を持っている場合は文字とともに出力します

for (A..Z) {
    print "$$_$_ " if $$_;
}

テスト結果:http : //ideone.com/alpUlI

編集:音訳に匿名の戻り値を直接渡すことで7バイトを切り刻みますsplit


2

Perl、172バイト

Daresayはこのソーセージからさらに切り出すことができますが、ここに10のスターターがあります。

$a=<>;$a=~s/¤/h/g;$a=~s/_+/_/g;$a=~s/(\/| |\n)//g;$a=~s/\\/x/g;$h{$_}++ for split(//,$a);foreach (sort keys %h){print $h{$_};$_=~tr/^.hlx_/RKPSLC/;print "$_ ";}print "\n"

ゴルフされていないバージョン

$a=<>;              # get 1st line
$a=~s/¤/h/g;        # convert ¤ to h, avoid unicode hassles
$a=~s/_+/_/g;       # multiple consecutive _ to single _
$a=~s/(\/| |\n)//g; # strip / and spaces
$a=~s/\\/x/g;       # convert \\ to x to avoid regexp hassles

# build hash that counts occurences of character
$h{$_}++ for split(//,$a);

# print the answers
foreach (sort keys %h) {
 print $h{$_};
 $_=~tr/^.hlx_/RKPSLC/;
 print "$_ ";
}
print "\n";

試験結果

$ perl meaty.pl <test1.txt
1K 4R
$ perl meaty.pl <test2.txt
1C 2P 1S 1L
$ perl meaty.pl <test3.txt
1P 2S
$

2

Python 3、120バイト

これを短くできると確信していますが、Pythonソリューションはまだないので、ここで説明します。

x=input()
a={z:x.count(y)for y,z in zip('¤l/.^_','PSLKRC')}
a['C']//=3
print(' '.join(str(a[x])+x for x in a if a[x]))

説明

とても簡単で、読みやすいと言う人もいるかもしれませんが、とにかく簡単な説明があります:

各ソーセージは最初の行だけから決定できるため、入力の最初の1行が読み取られます。

これa={z:x.count(y)for y,z in zip('¤l/.^_','PSLKRC')}は、各タイプのソーセージの識別子(z)を各タイプのソーセージのカウント(x.count(y)、ここで、yソーセージを定義する文字です)に。

次に、トリプルアンダースコアのため、コテチーノモデナ(C)ソーセージの数を3 で割ります。

最後に、結果を出力しますprint(' '.join(str(a[x])+x for x in a if a[x]))。これにより、各ソーセージの出力カウントが一度に1つずつ作成されますが、そのソーセージが少なくとも1回見られた場合のみです(a[x]ゼロではない=> Truthy)。各カウント文字列はスペースで結合され、出力されます。


print 'a [x]' + '' + a [x] for ...動作するはずです(テストされていません)。5バイトを節約します。'バックティックである。
agtoever
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.