진짜 소시지 축제


35

10 월 첫째 주말이 가까워지면서 우리만의 옥토버 페스트를 보자!

배경

독일 뮌헨의 현지 소시지 직원이 귀하와 다른 프로그래머를 고용했습니다. 소시지 녀석은 Oktoberfest에 거대한 Volksfest에 필요한 모든 소시지를 제공합니다. 당신은 상사가 다른 직원들에게 이전 소시지 관련 경험없이 왜 당신과 다른 사람들이 고용되었는지에 대해 말하는 것을 들었습니다. 당신은 완벽한 프로그래밍 기술을 위해 고용되었다는 것을 알고 있습니다. 그리고 상사는 소시지 분석기를 코딩하기를 원합니다.

올해 소시지 전문가들은 Oktoberfest에서 다양한 소시지를 늘리기로 결정했지만 수입량에 대해서는 전혀 모릅니다.

도전

상사가 실제로 수입 한 특정 종류의 소시지가 얼마나 많은지 알아 내야합니다. 소시지가 수입 한 모든 소시지의 종류와 수를 출력하는 소시지 분석기를 프로그래밍해야합니다. 당신의 상사는이 기회를 위해 특별한 플로피 드라이브를 샀습니다 stdin.

입력

에 여러 개의 소시지가 있으며 stdin, 각 소시지는 한 칸씩 분리되어 있습니다. 소시지는 다음 형식으로 제공됩니다.

프린스 코르 프 (P)

 ¤
| |
| |
| |
 ¤

살치 콘 (S)

 l
| |
| |
| |
| |
 l

란 제거 (L)

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

카바 노스 (K)

.
|
|
|
|
|
.

코테 치노 모데나 (C)

 ___
|   |
|   |
|   |
|___|

Rød pølse (R)

 ^
| |
| |
| |
| |
 v

산출

주어진 소시지의 발생과 소시지 종류에 대한 식별자가 공백으로 구분됩니다. 식별자는 소시지 이름의 첫 글자입니다. 순서는 중요하지 않습니다.

에 줄 stdout바꿈과 공백이 허용되도록 출력물을 작성해야합니다 .

입력

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

산출

4R 1K

입력

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

산출

1L 1C 1S 2P

입력

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

산출

2S 1P

바이트 단위로 가장 짧은 프로그램을 가진 프로그래머는 소시지 녀석 (승)에 의해 지불됩니다!

소시지 퀴즈

Prinskorv
Prinskorv "프린스 소세지"로 직접 번역되는 작은 스웨덴 소시지는 종종 링크로 판매됩니다. 보통 프라이팬에 튀겨서 겨자의 넉넉한 도움을 제공했습니다.

Salchichón
Salchichón은 종종 돼지 고기로 만든 스페인 여름 소시지이지만 일부 레시피는 소, 송아지 고기 또는 말과 같은 다른 고기를 사용합니다. 고기와 지방은 얇은 조각으로 잘게 썰고 소금, 후추, 육두구, 오레가노 및 마늘로 맛을 낸 다음 두꺼운 천연 돼지 내장에 넣습니다.

Landjäger
Landjäger는 독일 남부, 오스트리아, 스위스 및 알자스에서 전통적으로 제조 된 반 건조 소시지입니다. 하이킹과 같은 활동 중 간식으로 인기가 있습니다. 냉장하지 ​​않고 단식으로 제공되기 때문에 병사의 음식으로도 사용됩니다.

카바
노스 카바 노스는 돼지 고기 또는 코셔 칠면조로 만든 길고 얇은 마른 소시지입니다. 그들은 향이 좋고, 신선도에 따라 질감이 부드럽고 매우 건조 할 수 있습니다. 카바 노시는 종종 고추로만 맛을냅니다. 다른 육류와는 달리,이 소시지는 일반적으로 전채 요리로만 먹으며 코셔를 제외하고는 종종 치즈와 함께 제공됩니다.

Cotechino Modena
Cotechino Modena 또는 Cotechino di Modena는 돼지 고기, 팻백 및 돼지 고기 껍질로 만든 신선한 소시지이며 PGI 등급의 이탈리아 모데나에서 생산됩니다. Cotechino는 종종 새해 경에 으깬 감자와 함께 소스와 함께 렌즈 콩 또는 cannellini 콩과 함께 제공됩니다.

Rød pølse
Rød pølse (빨간 소시지)는 덴마크에서 매우 일반적인 밝은 빨강, 삶은 돼지 고기 소시지의 한 유형입니다. 덴마크에서는 핫도그 스탠드가 어디에나 있기 때문에 어떤 사람들은 로데 폴저를 국가 요리 중 하나로 생각합니다.

모든 소시지 정보가 Wikipedia에서 뻔뻔스럽게 복사되었습니다


32
소시지에 대한 옥토버 페스트를 주제로 한 도전을 작성하고 있으며 Weißwurst ? -1
Martin Ender

3
나는 소름 끼치는 소시지 놈들을 비난합니다!
sweerpotato

31
소시지 정보를 왜 스포일러 태그에 넣었습니까? 그것이 나 빠지지 않도록 하는가?
Alex 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, '¤']]

결과적으로,이 문자 또는 문자열의 순서 (아스키 값) '___' 는 숫자에 잘 매핑 될 수 있습니다 [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 바이트를 절약 했습니까? :디

첫 번째 행을 제외한 모든 입력을 무시하고 모든 /s 및 공백을 제거 하고 대상 식별자로 변환 한 후 정렬하고 실행 길이 인코딩을 사용하여 결과를 인쇄합니다.

라이브 데모.

32 바이트 버전

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

라이브 데모.

@Jakube 덕분에 2 바이트를 더 절약했습니다!

34 바이트 버전

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

라이브 데모.

@Jakube 덕분에 2 바이트를 절약했습니다!

36 바이트 버전

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

라이브 데모.


6
내가 커비 사랑하기 때문에 당신에게 일을 준
분석 재개 모니카 - 밤

6
정확히 4K 담당자에이기 때문에 나는 :) 당신에게 일을주지 않았다
ETHproductions

나는 당신에게 정확히 4k로 되돌아 가기 위해 -1을주었습니다. : D
Beta Decay

1
또 다른 2 바이트 ;-) hM-czd\\는 다음과 같습니다.-hMfTczd\\
Jakube

1
@sweerpotato 여기를 참조 하십시오 . 는 ¤두 바이트입니다.
kirbyfan64sos

8

자바 스크립트 (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*

여기에서 테스트하십시오.

설명

각 유형의 소시지의 첫 번째 줄은 고유하며 소시지가 맨 위에 정렬되므로 첫 번째 줄의 관련 문자를 계산하는 것으로 충분합니다. 두 가지 유형은 특별한 치료가 필요합니다.

  • Landjäger (L) 에는 \및 이 모두 /있습니다. 우리는 그들 중 하나를 제거하고 싶다면 다른 모든 캐릭터와 마찬가지로 다른 하나를 셀 수 있습니다.
  • 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를 잊지 마십시오.
Taylor Lopez

6

매스 매 티카 116

일부 바이트는 아마도 깎일 수 있지만 골프 언어에는 접근 할 수 없습니다.

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

ImportString[#,"Table"][[1]]입력의 맨 윗줄에 나타나는 공백으로 구분 된 문자열 목록을 반환합니다. 문자열은 {"¤","l","/","___",".","^"}반복을 포함 하여 목록의 요소를 포함 할 수 있습니다 . 각 요소는 독특한 유형의 소시지와 관련이 있습니다.

Tally 이러한 각 문자열이 나타나는 횟수를 계산합니다.

/.{"¤"->"P","l"->"S",...대체 ¤P, lS등등.

Reverse 연결된 항목 앞에 각 탈리를 배치합니다.

2 Row는 출력을 형식화합니다.


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

펄, 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수정 정말 필요는 없습니다,하지만 난에 이상한 유니 코드 문제로 실행 ¤없이 문자.

기호 참조를 사용하여 발견 된 각 문자에 대한 변수를 작성 및 / 또는 증가시킵니다.

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

트리플 밑줄로 인해 C 변수를 3으로 나눕니다.

$C /= 3;

알파벳을 반복 하고 값이 0보다 큰 경우 문자와 함께 단일 문자 대문자 변수를 인쇄 합니다

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

테스트 결과 : http://ideone.com/alpUlI

편집 : 음역으로 익명 반환 값을 전달하여 7 바이트를 잘라 split냅니다.


2

펄, 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

파이썬 3, 120 바이트

나는 당신이 이것을 줄일 수 있다고 확신하지만, 아직 파이썬 솔루션이 없었으므로 여기에 우리가 간다 :

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]))

설명

아주 간단하고 일부는 읽을 수 있지만 어쨌든 간단한 설명이 있습니다.

각 소시지는 첫 번째 줄에서 확인할 수 있기 때문에 첫 번째 입력 줄을 읽습니다.

이제 a={z:x.count(y)for y,z in zip('¤l/.^_','PSLKRC')}각 유형의 소시지 ( z) 의 식별자 를 각 유형의 소시지 ( x.count(y), 여기서 y소시지를 정의하는 문자) 의 개수에 매핑하는 사전 이해가 있습니다 .

그런 다음 트리플 밑줄 때문에 Cotechino Modena (C) 소시지 수를 3으로 나눕니다 .

마지막으로 결과를 출력합니다 : print(' '.join(str(a[x])+x for x in a if a[x])). 이것은 소시지가 한 번에 한 번에 하나씩 출력 카운트를 생성하지만, 그 소시지가 한 번 이상 보인 경우에만 ( a[x]0이 아닌 = Truthy). 각 카운트 문자열은 공백으로 결합되어 인쇄됩니다.


print 'a [x]'+ ''+ a [x] for ... 작동 (테스트되지 않음)하고 5 바이트를 저장합니다. '는 떨림이 있습니다.
agtoever
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.