Enquanto escrevia números, notei depois de um tempo que meu teclado tinha a Shifttecla pressionada e bloqueada e tudo o que escrevi foram $%&
caracteres parecidos. E ainda pior, eu estava alternando entre os layouts de teclado em inglês e espanhol, para não saber qual deles usei para cada número.
Desafio
Dada uma sequência contendo caracteres de símbolo, tente adivinhar qual número eu escrevi. Meu teclado produz os seguintes caracteres para os números quando o Shiftbotão é pressionado:
1234567890
----------
!"·$%&/()= Spanish layout
!@#$%^&*() English layout
- A entrada será uma sequência não nula e não vazia composta pelos símbolos acima.
- A saída será um número único se o layout do teclado puder ser deduzido da string (ou seja, se a string contiver um
@
layout em inglês e se a string contiver um"
layout em espanhol) ou se o número for o mesmo para ambos os layouts (ou seja, a entrada é a!$
que se traduz como14
para os dois layouts); caso contrário, a saída será os dois números possíveis para os dois layouts, se não puderem ser inferidos e os números resultantes forem diferentes. - A string de entrada sempre será gravada em um único layout. Portanto, você não precisa esperar
"@
como entrada.
Exemplos
Input --> Output
------------------
/() 789 (Spanish layout detected by the use of /)
$%& 456,457 (Layout cannot be inferred)
!@# 123 (English layout detected by the use of @ and #)
()&! 8961,9071 (Layout cannot be inferred)
((·)) 88399 (Spanish layout detected by the use of ·)
!$ 14 (Layout cannot be inferred but the result is the same for both)
!!$$%% 114455 (Layout cannot be inferred but the result is the same for both)
==$" 0042/42 (Spanish layout, if a number starts with 0 you can choose to
omit them in the result or not)
Single character translations:
------------------------------
! 1
" 2
· 3
$ 4
% 5
& 6,7
/ 7
( 8,9
) 9,0
= 0
@ 2
# 3
^ 6
* 8
Este é o código-golfe , portanto, pode ganhar o código mais curto para cada idioma!
·
é um desafio ...·
é inútil para o espanhol, é usado apenas no idioma catalão.{(8, 9, 6, 1), (9, 0, 7, 1)}
(para o quarto caso de teste) aceitável?Respostas:
Geléia ,
3231 bytesExperimente online!
fonte
Python 3 , 76 bytes
Experimente online!
fonte
Perl 6 , 62 bytes
Experimente online!
Retorna um conjunto. (Pode ser reduzido em dois ou três bytes se não houver um erro no tratamento de Rakudo de # nas listas de pesquisa.)
fonte
Java (JDK) , 173 bytes
Golfe
Experimente online!
Ungolfed
A matriz de pesquisa de hash mágico
Depois de experimentar alguns valores, percebi que cada um dos valores ASCII dos caracteres
!"·$%&/()=@#^*
módulo 16 retorna um número único. A 'matriz de pesquisa de hash mágico' armazena os números em inglês associados a cada caractere nesse índice exclusivo, e cada um dos números em espanhol nesse índice é compensado por 16, tornando a busca do número necessário da matriz trivial para cada idioma. Um hash é armazenado para valores inválidos para qualquer idioma.fonte
toCharArray()
e o cálculo do expoente a ser aplicado ao valor int o tornaram muito mais longo do que as duas.contains()
instruções.s.equals(e)|s.contains("#")
pode sers.matches(e+"|.*#.*")
.Japt, 38 bytes
Produz uma matriz de seqüências de caracteres com o layout em espanhol primeiro.
Tente
fonte
Gelatina , 38 bytes
Experimente online!
fonte
()
ou(())
como entrada, mas seu código não retorna nada. Suponho que seja uma limitação do que Jelly recebe como entrada?'()'
e'(())'
respectivamente. Sim, se você não citar o argumento, ele será inserido como uma string apenas se não puder sereval
atualizado para um valor Python 3.Retina 0.8.2 , 60 bytes
Experimente online! O link inclui casos de teste. Explicação:
Duplique a entrada.
Tente traduzir cada linha de acordo com um layout de teclado diferente.
Desduplicar o resultado.
Mantenha apenas linhas que contêm apenas dígitos.
fonte
m
seu último estágio?JavaScript (ES6), 99 bytes
Experimente online!
Quão?
x >= 0
fonte
05AB1E ,
4241 bytesPorto de @dylnan resposta Jelly 's .
Experimente online ou verifique todos os casos de teste .
Explicação:
Veja esta minha dica do 05AB1E (seção Como compactar listas inteiras? ) Para entender por que
•Hhç₁d©u÷^Σ(“ðΣèõĆ\n-•184в
é[33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41]
). Isto (em conjunto com a2ä
) é um byte mais curto do que tomar os valores Unicode da cadeia:'""!ÿ·$%&/()=""!@#$%^&*()"‚Ç
.fonte
!$
e!!$$%%
devem gerar apenas um número, pois o resultado é o mesmo para os dois layouts e não há ambiguidade.Ruby , 68 bytes
Experimente online!
fonte
Limpo , 116 bytes
Experimente online!
Recebe entrada e é codificado no CP437. O TIO suporta apenas UTF-8, portanto, um escape é usado no código de demonstração para obter o valor literal de byte 250 correspondente ao ponto central (contado como um byte).
fonte
!$%
entrada deve gerar apenas um número, não dois, pois o resultado é o mesmo para os dois layouts.APL (Dyalog) , 40 bytes
Função de prefixo tácito anônimo. Embora não seja usado,
·
está no conjunto de caracteres de byte único Dyalog . Assume a indexação baseada em 0 (⎕IO←0
), que é padrão em muitos sistemas.Experimente online!
⊂
todo o argumento'=!"·$%&/()' ')!@#$%^&*('⍳¨
índices dos caracteres em cada uma dessas cadeias{∪⍵/⍨~10∊¨⍵}
aplique o seguinte lambda (⍵
é o argumento):10∊¨⍵
para cada lista de dígitos, se 10 (indicando "não encontrado") é um membro~
negação local (ou seja, somente aquelas onde todos os dígitos são encontrados)⍵/⍨
filtrar o argumento por esse∪
encontre os elementos únicos dissofonte
Dardo , 125 bytes
Ungolfed:
Experimente no Dartpad!
fonte
T-SQL, 143 bytes
A entrada é obtida através da tabela preexistente i com o campo varchar v , de acordo com nossos padrões de IO .
Une a tabela de entrada com as duas cadeias de caracteres diferentes e usa a nova função SQL 2017
TRANSLATE
para trocar caracteres individuais eTRY_CAST
ver se terminamos com um número. Caso contrário,TRY_CAST
retornaNULL
.O exterior final
SELECT DISTINCT
combina resultados idênticos e filtra oNULLS
.fonte