Antes da descoberta de impressões digitais e testes de DNA, a polícia britânica usou um sistema antropométrico para identificar reincidentes. Certas partes dos corpos dos criminosos foram medidas e armazenadas em registros - presume-se que essas partes do corpo não mudem de tamanho após a idade adulta. Este sistema era conhecido como bertillonnage .
O diagrama abaixo mostra um sistema de arquivamento usado pela polícia para acessar esses registros rapidamente.
Diagrama 1: Um sistema de arquivamento com gavetas numeradas.
Nota: se você não conseguir ver a imagem, tente o espelho imgur ou compile você mesmo .
O armário de arquivos é composto por 81 gavetas numeradas. Cada gaveta contém cartões e cada cartão tem medidas de partes específicas do corpo de um criminoso:
- O comprimento da cabeça (
H
) - A largura de suas cabeças (
B
) - A largura da orelha direita (
E
) - O comprimento do dedo indicador (
F
)
Cada medida é classificada como pequena, média ou grande.
Por exemplo, a gaveta 56 contém placas com as seguintes características: H pequeno, grande B, meio E, e pequena F. Isto pode ser simbolizada usando as letras S
, M
e L
em lugar de pequeno, médio e grande:
SH,LB,ME,SF
Observe que a letra do tamanho vai primeiro, depois qual é a medida. Além disso, um ponto de exclamação !
pode ser colocado na frente para causar um resultado negativo:
!SH,LB,!ME,SF
Isso indica cartões com as seguintes características: não pequeno H, grande B, não médio E e pequeno F. Existem quatro gavetas que contêm cartões com essas características - 58, 60, 61 e 63.
Sua tarefa é escrever um programa que, ao receber uma sequência notando algumas características, produza todas as gavetas que contêm cartões com essas características. Se não houver gavetas que contenham cartões com as características especificadas, produza 0
.
Aqui estão algumas entradas e saídas de amostra.
- Entrada:
SH,LB,ME,SF
Saída:56
- Entrada:
!SH,LB,!ME,SF
Saída:58,60,61,63
- Entrada:
SB,!MF,!LF
Saída:1,2,3,4,5,6,7,8,9
- Entrada:
MH,!MH
Saída:0
Isso é código de golfe, portanto a entrada mais curta vence. Faça perguntas nos comentários se a especificação não estiver clara.
Respostas:
GolfScript 95 ( DEMO )
fonte
Ruby 1.9.3 -
173 157143Editar:
Demonstração on-line: http://ideone.com/lodTLt
fonte
select
é um sinônimo mais curto parafind_all
. Você pode aparar outros dois caracteres substituindoy[-2..-1]
pory[-2,2]
e mais três usando, em==[]
vez de.empty?
.Scala - 951
Definitivamente não ganhará este, principalmente devido aos nomes das funções incorporadas, eu acho.
O argumento é passado para a função
f
f("SH,LB,ME,SF")
=56
fonte
T-SQL -
547544Não é uma entrada vencedora, mas é adequada para esse tipo de problema.
Configuração da tabela de grade - 254
Consulta -
293290A entrada é feita declarando @i antes da consulta
Eu poderia salvar mais 89 caracteres se a saída não precisar ser delimitada por vírgula
fonte
Mathematica
191235Representa cada número de célula na base 3. Cada posição de dígito representa um recurso físico. O valor do dígito {0,1,2} representa "Pequeno", "Médio", "Grande", respectivamente.
Os recursos correspondem aos dígitos da seguinte maneira:
Por exemplo, a entrada,
significa:
2001
na base 3 é 55 na base 10.Precisamos adicionar um porque estamos contando células de 1, não zero.
Código
Casos de teste
fonte
Python 3-192 - Experimente!
fonte
Python 2-194
A saída tem colchetes e não se preocupa com a ordem da saída.
Algumas sugestões da Falko e algumas de mim para tirar 10 caracteres.
fonte