Localizador de número de quarto
Encontrei uma técnica interessante para resolver problemas no meu trabalho quando recebi o número errado da sala de um colega para uma reunião. De vez em quando, a caminho de uma reunião, um membro da minha equipe me envia o número da sala errado, geralmente porque está com pressa na mesa e com o dedo gordo na tecla errada.
Curiosamente, ao chegar na sala errada, normalmente posso adivinhar qual sala eles realmente queriam imaginar imaginando um teclado numérico :
e adivinhando um número adjacente, eles pretendiam pressionar.
Desafio
Seu desafio é escrever uma função que use um número de escritório (000-999) e produza as possíveis soluções de erros de digitação, assumindo que seu colega digita incorretamente apenas um dígito.
A tabela a seguir mostra quais números são adjacentes um ao outro em um teclado numérico:
0 -> 1,2
1 -> 0,2,4
2 -> 0,1,3,5
3 -> 2,6
4 -> 1,5,7
5 -> 2,4,6,8
6 -> 3,5,9
7 -> 4,8
8 -> 5,7,9
9 -> 6,8
Entrada
Um número de 3 dígitos: 000-999
. Suponha a entrada de exatamente 3 dígitos. Se o número for menor que 100 ou menor que 10, você receberá os zeros à esquerda. (ou seja, 004 e 028).
Saída
Uma lista de quartos possíveis. Pode ser da forma que você quiser, desde que exista um delimitador entre os números dos quartos. (ou seja, espaço, vírgula, nova linha, etc.) Se o número for menor que 100 ou menor que 10, você poderá ou não ter os zeros à esquerda como saída, isso depende de você. (ou seja, 004 pode ser 004 04 4
e 028 pode ser 028 28
)
Casos de teste (zeros à esquerda são opcionais):
008 -> 108, 208, 018, 028, 005, 007, 009
123 -> 023, 223, 423, 103, 113, 133, 153, 122, 126
585 -> 285, 485, 685, 885, 555, 575, 595, 582, 584, 586, 588
777 -> 477, 877, 747, 787, 774, 778
963 -> 663, 863, 933, 953, 993, 962, 966
555 -> 255, 455, 655, 855, 525, 545, 565, 585, 552, 554, 556, 558
Isso é código-golfe , portanto o código mais curto em bytes para cada idioma vence.
933
então eu o consertei .Respostas:
Wolfram Language (Mathematica) ,
112106 bytesReconhecendo que um teclado numérico é basicamente um 3x3
GridGraph
com arestas adicionadas para 0, obtemos os dígitos adjacentes para cada dígito de entrada comAdjacencyList
.Isso pode ser visto abaixo:
EdgeAdd[GridGraph[{3,3},VertexLabels->"Name",GraphLayout->"SpringEmbedding"],{0<->1,0<->2}]
rendimentos:Então eu costumo
Tuples
descobrir todos os erros possíveis e escolher aqueles com exatamente um erro comSelect
eEditDistance
. A propósito, isso funcionará para números de sala mais longos e você também pode aumentar oEditDistance
parâmetro para permitir mais de um erro. Pode ser capaz de jogar isso um pouco mais longe, mas queria mostrar minha abordagem.Versão ligeiramente mais golfe codificada para o comprimento de 3 números de quarto (106 bytes). Isso será exibido como uma lista de classificação 3 correspondente a cada dígito:
Experimente online!
fonte
DamerauLevenshteinDistance
vez dasEditDistance
quais também incluiriam erros de transposição.Python 2 , 89 bytes
Experimente online!
O 1 st e 5 th caracteres podem não ser exibidos aqui (navegador dependente), mas a cadeia completa é equivalente a
[21, 204, 1035, 62, 157, 2468, 359, 48, 579, 68]
fonte
05AB1E , 29 bytes
Experimente online!
fonte
R , 190 bytes
Experimente online!
Minha segunda tentativa no CodeGolf! Bastante longo, 190 bytes, mas o melhor que pude gerenciar com R. Curioso para ver se os outros têm feedback ou podem fazer melhor!
fonte
:
over*/+-
pode eliminar alguns bytes na primeira linha, livrar-sedo.call
, tratara
comomatrix
e transpor ele economiza cerca de 39 bytes: Experimente online!JavaScript (Firefox 30-57),
115109 bytesEditar: salvou 6 bytes graças a @ edc65 (embora os
0
s sugeridos agora apareçam após outras sugestões). Versão ES6,118112 bytes:fonte
[...[12,240,1350,26,157,2468,359,48,579,78][c]+'']
[for(...)]
foi uma das várias propostas de sintaxe de compreensão de array que nunca chegaram ao ECMAscript. Ele permitiu que você circulasse sobre um iterador e filtrasse e / ou mapeasse sucintamente os resultados. (Eu achei particularmente útil quando se faz duplo iteração.)Java,
205177 bytesEu sei que é longo comparado com as outras respostas. Minha desculpa: é em Java.
Oracle deve renomear
toCharArray
para algo comogetCrs
.Créditos
-28 caracteres de Kevin Cruijssen
fonte
(String b)->
pode ser justob->
e você pode remover o final;
. Quanto às coisas reais do golfe: você usa apenasa
uma vez, para poder removerString[]a=...;
e usar"12,024,0135,26,157,2468,359,48,579,68".split(",")[...]
diretamente. Além disso,Byte.parseByte
pode sernew Byte
. No total: 177 bytes .Ruby 97 bytes
Experimente online!
Como alternativa, 94 caracteres, mas 100 bytes
Experimente online!
fonte
C (gcc) , 136 ou 114 bytes
Versão ASCII 136 bytes
Experimente online!
Unicode
114108 bytes (o TiO parece contar estranhamente para isso)Obrigado a @ceilingcat para esta versão.
Experimente online!
fonte
Perl 5 ,
12085 + 2 (-F
) = 87 bytesExperimente online!
Economizou 35 bytes emprestando uma idéia da resposta ruby de @ AsoneTuhid.
fonte
Python 2 , 103 bytes
graças a @Lynn por -4 bytes.
Experimente online!
fonte
in`0x134cd9a07d1e58feab643f7db24102`[int(v)::10]
(Eu tenteiint('…',36)
muito, mas é um byte mais tempo.)Julia 0.6 , 93 bytes
Experimente online!
0x502A044228550A21102B05406
éUInt128
aquele em que o1+10j
th bit é definido sei
estiver ao ladoj
do teclado numérico.big(1)
é umBigInt
. É usado para impedir o estouro e usa menos caracteres queInt128(1)
ouUInt128(1)
.fonte
SQL (SQLite), 533 bytes
Ungolfed
Explicação
A entrada é uma única linha de texto na tabela
t
com colunas
. Meu entendimento é que, de acordo com essa meta resposta, essa é uma forma aceitável de entrada. A entrada pode ser criada como abaixo.Solução anotada
fonte
Kotlin , 117 bytes
Embelezado
Teste
TIO
TryItOnline
fonte
Geléia , 35 bytes
Experimente online!
-1 graças a Jonathan Allan .
Explicação sendo atualizada ...
fonte
Wẋ3
->ḷþ
T-SQL , 322 bytes
A entrada é obtida da coluna
s
de uma tabela de linha única denominadat
:Ungolfed:
SQLFiddle
fonte