Arte roubada De que tamanho é o dígito?
Os dígitos de 7 segmentos podem ser representados em ASCII usando _|
caracteres. Aqui estão os dígitos 0-9
:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Seu trabalho é analisar a arte em números normais.
Notas sobre números
- Cada dígito tem uma largura diferente.
1
tem uma largura de1
3
e7
são2
amplos245689
e0
são todos3
largos
Também entre cada dígito há um caractere de preenchimento. Aqui está o conjunto completo de caracteres:
// <- deve ser um espaço, mas a formatação SE estragou tudo | | ------------- _ _ | _ ------------- _ _ _ ------------- | _ | | ------------- _ | _ _ ------------- _ | _ | _ | ------------- _ | | ------------- _ | _ | | _ | ------------- _ | _ | _ ------------- _ | | | _ |
Entrada
A entrada pode ser do console ou como uma string arg para uma função.
Saída
A saída é colocada no console ou é retornada da função.
Exemplos:
_ _ _
| | | |_
| | | |_|
1776
_ _ _
_| | | | |_
|_ |_| | |_|
2016
_ _
| |_| |_| |_
| _| | _|
1945
_ _ _ _ _ _
| | | | | | | | | | | | |
| |_| |_| |_| |_| |_| |_|
1000000
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
0123456789
Isso é código-golfe, e a menor contagem de bytes ganha!
Respostas:
Pitão,
3330 bytesAqui está a idéia: Depois de transpormos a entrada e dividirmos em dígitos, podemos classificar as seqüências de dígitos individuais e atribuí-las aos seus valores.
Experimente aqui .
fonte
Ruby, 184 bytes
Explicação
Este é o meu primeiro código de golfe. Obrigado pela diversão!
fonte
Pitão, 39 bytes
Isso parece funcionar? Experimente online .
fonte
Japonês, 119 bytes
Try it here!
Oh nossa, esse é realmente longo. Acho que não terminei o golfe.
Explicação
Preparação
Pegamos a entrada e convertemos qualquer
|_
para1
. Em seguida, transpomos, eliminamos espaços finais e dividimos ao longo de novas linhas duplas.Tradução
Mapeamos a matriz resultante e encontramos o índice em que o formulário aparece em uma matriz de referência. Aqui está um diagrama para ajudar:
Depois disso, juntamos a matriz de números e a saída!
NOTA : Você pode estar se perguntando por que precisamos alterar cada caractere de arte para uma série de 1s. Isso ocorre porque parece haver um bug (ou algo parecido) que não me permite armazenar os personagens como estão
|_
.fonte
_
bug, mas não sei o que o causou."\n\n"
pode ser substituído porR²
e"\\||_"
com"%||_"
. Eu acho que você também poderia salvar alguns bytes por que codifica a longa seqüência na base 4 (mudando cada um dos 4 caracteres disinctive para0
,1
,2
ou3
, padding para um comprimento de um múltiplo de 4, em seguida, executandor"...."_n4 d}
sobre ele), mas por alguma razão , Ainda não consegui fazer isso funcionar.Python2,
299261244 bytesGostei muito desse desafio, bom trabalho!
Explicação
A função
s
recebe as três linhas como entrada, tenta encontrar uma separação de dígitos (todos os caracteres são espaços). Quando essa separação é encontrada, ela chamas
com o restante das três linhas e adiciona o valor retornado pela chamada às três linhas que compõem o dígito. Se não houver separação, significa que há apenas um dígito.A função
p
é o ponto de entrada, portanto, é necessária uma string que representa os dígitos. Os dígitos são armazenados como um "hash" calculadosum(ord(c)**i for i,c in enumerate("".join(n)))%108
para economizar espaço (graças a outras respostas!).Exemplo
Outras versões
261 bytes (py3):
249 bytes, este transpõe as linhas (py2):
fonte
JavaScript (ES6), 169 bytes
Começa dividindo em três linhas, remapeando cada coluna em um valor e construindo uma identidade exclusiva para cada coluna a partir desses valores. Em seguida, ele divide
0
(a identidade do espaço entre as colunas) e, por fim, mapeia cada identidade para seus valores numéricos, que concatena e gera.fonte
join
uma string para poder dividi-la. Eu acredito que você poderia fazer isso em Python também?Python 3,
281254 bytesEditar
Eu apenas olhei o código para a outra resposta python e notei que grande parte do código é semelhante. Isto foi alcançado independentemente.
(novas linhas adicionadas para "legibilidade")
Ungolfed:
Testes:
Como funciona
(Observação: estou explicando o programa não-golfado aqui, pois é mais legível e tem exatamente o mesmo código, com a exceção de que a
digit
função está alinhada em um lambda)A função principal é
parse
. Primeiro, divide a entrada em linhas e cria anumbers
matriz.Esta é a minha parte favorita (uma vez que demorou tanto tempo para descobrir). Aqui nós
zip
as linhas para que possamos basicamente atravessar verticalmente a entrada. Quando a linha possui caracteres, nós a adicionamos ao último número danumbers
matriz. Se ele não possui caracteres, adicionamos um novo número ao array.Realmente simples,
numbers
é mapeado com adigit
função e é convertido em uma string.Isto é (razoavelmente) simples.
fingerprint
é a representação de string dos dígitos criados acima, menos os 2 primeiros caracteres (essa foi a menor impressão digital que pude encontrar). Retornamos o índice da primeira partida.fonte
Haskell,
270207 bytesNão seja muito difícil, este é o meu primeiro programa de haskell;) Estou quase certo de que isso pode ser ainda mais aprimorado, mas não sei como, devido ao meu conhecimento limitado do idioma.
Ungolfed:
Muito obrigado a @nimi pelas dicas!
fonte
import Data.List
contagem de bytes. Boas notícias: a) se você tiverData.Lists
instalado, pode importá-lo e substituí-loa
porsplitOn
:...map c$splitOn[" "]$transpose...
e...f<-splitOn",""|_...
. b)intercalate "" n
éconcat n
ouid=<<n
. c) substituares
por um único nome de letra. d) o uso padrão de guarda em vez delet ... in
:c n|e<-drop 2$id=<<n,Just r<-elemIndex ... ]=(show r)!!0
.=<<
faz? Nem os documentos do hoogle nem a assinatura de tipo são muito úteis para mim.=<<
no contexto da listaconcatMap
, isto é , ele mapeia a função fornecida sobre a lista e combina os resultados em uma única lista.>>=
faz o mesmo, mas com os argumentos invertidos.id =<< n
(oun >>= id
) mapeia a função de identidade sobre a lista (de listas), ou seja, não faz nada com as sublistas e as concatena. Então é o mesmo queconcat
.