Como o primeiro final de semana de outubro está chegando, vamos ter nossa própria Oktoberfest!
fundo
Você e alguns outros programadores foram contratados pelos salsichas locais em Munique, Alemanha. O pessoal da linguiça fornece à Oktoberfest todas as linguiças que o gigante Volksfest precisa. Você consegue ouvir seu chefe conversando com os outros funcionários sobre por que você e os outros foram contratados sem nenhuma experiência anterior relacionada à linguiça. Você percebe que foi contratado por suas habilidades de programação impecáveis - e seu chefe aparentemente quer que você codifique um analisador de salsichas.
Este ano, os salsichas decidiram aumentar a variedade de salsichas na Oktoberfest - mas não têm idéia do quanto importaram.
Desafio
Você precisa ajudar seu chefe a descobrir quanta salsicha de um determinado tipo eles realmente importaram. Você terá que programar um analisador de salsicha que produza o tipo e o número de cada salsicha importada pela galera. Seu chefe comprou uma unidade de disquete especial para esta ocasião, que, dada uma linguiça, é usada para isso stdin
.
Entrada
Um número de salsichas stdin
, cada salsicha separada por um espaço. As salsichas são fornecidas no seguinte formato:
Prinskorv (P)
¤
| |
| |
| |
¤
Salchichón (S)
l
| |
| |
| |
| |
l
Landjäger (L)
\ /
| |
| |
| |
| |
/ \
Kabanos (K)
.
|
|
|
|
|
.
Cotechino Modena (C)
___
| |
| |
| |
|___|
Rød pølse (R)
^
| |
| |
| |
| |
v
Saída
As ocorrências de uma dada salsicha, juntamente com um identificador de que tipo de salsicha é, separadas por um espaço. O identificador é a primeira letra do nome da linguiça. A ordem não é importante.
A saída deve ser gravada stdout
, novas linhas e espaços à direita são permitidos.
Exemplos
Entrada
^ ^ ^ ^ .
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
v v v v |
.
Saída
4R 1K
Entrada
\ / ___ l ¤ ¤
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | |___| | | ¤ ¤
/ \ l
Saída
1L 1C 1S 2P
Entrada
l ¤ l
| | | | | |
| | | | | |
| | | | | |
| | ¤ | |
l l
Saída
2S 1P
O programador com o menor programa em bytes é pago pelos salsichas (vitórias)!
Curiosidades sobre salsicha
Prinskorv
Prinskorv, que se traduz diretamente em "príncipe-linguiça", é uma pequena linguiça sueca que é frequentemente vendida em links. Geralmente frito em uma frigideira e servido com uma porção generosa de mostarda.
Salchichón
Salchichón é uma salsicha espanhola de verão geralmente feita com carne de porco, embora algumas receitas usem outras carnes, incluindo boi, vitela ou cavalo. A carne e a gordura são picadas em pedaços finos, temperadas com sal, pimenta, noz-moscada, orégano e alho e depois inseridas no intestino grosso e natural da carne de porco.
Landjäger
Landjäger é uma linguiça semi-seca, tradicionalmente feita no sul da Alemanha, Áustria, Suíça e Alsácia. É popular como um lanche durante atividades como caminhadas. Ele também tem uma história como comida de soldado, porque fica sem refrigeração e vem em porções de uma refeição.
Kabanos
Kabanos é uma lingüiça seca longa e fina polonesa feita de carne de porco ou de peru kosher. São de sabor defumado e podem ter textura macia ou muito seca, dependendo da frescura. Kabanosy são frequentemente temperados apenas com pimenta. Ao contrário de outras carnes, essas salsichas são tipicamente consumidas sozinhas como aperitivo e, exceto quando kosher, geralmente são servidas com queijo.
Cotechino Modena
Cotechino Modena ou Cotechino di Modena é uma linguiça fresca feita de porco, gordura e casca de porco, e vem de Modena, Itália, onde tem status de IGP. Cotechino é frequentemente servido com lentilhas ou cannellini com molho ao lado de purê de batatas, especialmente por volta do ano novo.
Rød pølse
Rød pølse (salsicha vermelha) é um tipo de salsicha de porco cozida e muito vermelha, muito comum na Dinamarca. Como as barracas de cachorro-quente são onipresentes na Dinamarca, algumas pessoas consideram o røde pølser como um dos pratos nacionais.
Todas as informações sobre salsichas copiadas descaradamente da Wikipedia
Respostas:
Pitão, 30 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
Como todos os outros participantes, apenas olho para a primeira linha da entrada. Digamos que a primeira linha da entrada seja
\ / ___ l ¤ ¤ ____
.No começo eu divido por espaços, o que me dá a lista
Agora queremos começar o passeio de
'/'
s e''
s e tipo a coisa restante.Agora eu posso codificá-lo no comprimento.
Como se vê, a ordem (valor ASCII) desses caracteres ou da sequência
'___'
pode ser bem mapeada para os números[0, 1, 2, 3, 4, 5]
.E isso pode ser usado para mapeá-los diretamente para as letras
SKLCRP
.fonte
Pitão,
36343230 bytesEconomizou mais 2 bytes graças a ... adivinha quem? : D
Ignora todas as entradas, exceto a primeira linha, remove todos os
/
espaços, converte-os nos identificadores de destino, classifica-os, usa a codificação de execução e imprime o resultado.Demonstração ao vivo.
Versão de 32 bytes
Demonstração ao vivo.
Economizou mais 2 bytes graças a @Jakube!
Versão de 34 bytes
Demonstração ao vivo.
Guardado 2 bytes graças a @Jakube!
Versão de 36 bytes
Demonstração ao vivo.
fonte
hM-czd\\
é o mesmo que-hMfTczd\\
¤
são dois bytes.Javascript (ES6), 105
É bem simples, mas aqui está uma explicação:
fonte
a=>(h=-1,[for(g of'¤l/._^')if(f=(a.split(g).length-1)/'222261'[++h])f+'PSLKCR'[h]].join` `)
Se eu pudesse simplificar a declaração deh
...CJam,
383533 bytesTeste aqui.
Explicação
A primeira linha de cada tipo de salsicha é única e, como as salsichas estão alinhadas na parte superior, é suficiente contar os caracteres relevantes nessa primeira linha. Dois tipos requerem tratamento especial:
\
e/
. Queremos nos livrar de um deles, para podermos contar o outro como todos os outros personagens.C
imediatamente.Agora, para o código real:
fonte
Mathematica 116
Alguns bytes provavelmente poderiam ser removidos, mas nada para se aproximar dos idiomas do golfe.
ImportString[#,"Table"][[1]]
retorna uma lista de cadeias separadas por espaço que aparecem na linha superior da entrada. A sequência pode incluir qualquer um dos elementos da lista{"¤","l","/","___",".","^"}
, incluindo repetições. Cada elemento está associado a um tipo único de salsicha.Tally
conta o número de vezes que cada uma dessas strings aparece./.{"¤"->"P","l"->"S",...
substitui¤
porP
,l
comS
e assim por diante.Reverse
coloca cada registro antes do item ao qual está associado.Os dois
Row
s formatam a saída.fonte
MATLAB, 113
Supondo que espaços à direita sejam permitidos(sim, são), aqui está uma função anônima do MATLAB:E uma explicação:
Parece funcionar corretamente. Ainda tem o espaço à direita, mas agora lida com todas as salsichas corretamente.
fonte
Perl,
84bytesAlguém provavelmente poderia se livrar um pouco disso ...
84 bytes
77 bytes
Demolir:
Pegue a primeira linha de STDIN, transforme valores em códigos de letras, exclua o lixo extra. O
d
modificador não deve ser realmente necessário, mas me deparei com problemas estranhos de unicode no diretório¤
personagem sem ele.Use referência simbólica para criar e / ou incrementar variável para cada caractere encontrado.
Divida a variável C por 3, devido ao sublinhado triplo
Percorra o alfabeto e imprima variáveis maiúsculas com uma letra junto com a letra se elas tiverem um valor maior que zero
Resultado do teste: http://ideone.com/alpUlI
Edit : Pique 7 bytes fazendo com que o transliterado passe o valor de retorno anônimo diretamente para
split
.fonte
Perl, 172 bytes
Ainda mais Daresay pode ser cortado desta lingüiça, mas aqui está uma entrada para dez.
Versão ungolfed
Resultado dos testes
fonte
Python 3, 120 bytes
Tenho certeza de que você pode reduzir isso, mas ainda não havia uma solução Python, então vamos lá:
Explicação
É bem simples, alguns podem até dizer legível, mas aqui está uma breve explicação:
A primeira linha de entrada é lida, pois cada lingüiça pode ser determinada apenas a partir da primeira linha.
Agora
a={z:x.count(y)for y,z in zip('¤l/.^_','PSLKRC')}
é uma compreensão de dicionário que mapeia o identificador de cada tipo de lingüiça (z
) para a contagem de cada tipo de lingüiça (x.count(y)
, em quey
é o caractere que define a lingüiça).Em seguida, dividimos a contagem de linguiças Cotechino Modena (C) por 3, devido ao sublinhado triplo.
Finalmente, imprimir o resultado:
print(' '.join(str(a[x])+x for x in a if a[x]))
. Isso cria a contagem de saída de cada lingüiça, uma de cada vez, mas somente se essa lingüiça foi vista pelo menos uma vez (a[x]
não é zero => Verdade). Cada sequência de contagem é unida por um espaço e impressa.fonte