Desafio
Dado um número inteiro divisível por 9 e um dígito ausente, encontre o dígito ausente.
O dígito ausente pode ser representado por qualquer caractere que não seja os dígitos de 0 a 9, desde que consistente.
Se o dígito ausente puder ser 0 ou 9, digite algo para indicar isso.
Suponha que o usuário seja inteligente o suficiente para colocar apenas um dígito e um número ausentes, etc.
Casos de teste
Nos casos de teste, o dígito ausente é representado por um ponto de interrogação
123? -> 3
?999 -> 0 or 9
?0023 -> 4
000?1 -> 8
code-golf
math
arithmetic
NK1406
fonte
fonte
0
? E quanto a[0, 9]
(matriz ou lista de 2 números)??
uma entrada possível?Respostas:
Python , 21 bytes
Experimente online!
Eu costumava
I
representar um dígito ausente.fonte
Alice , 12 bytes
Experimente online!
Saída
0
se o resultado puder ser 0 ou 9.Explicação
fonte
&
pode ser removida, uma vez que o modo de cardinal interpreta a entrada original, tal como no máximo 2 inteiros.JavaScript (ES6), 40 bytes
Emite 9 se poderia ser 0 ou 9.
fonte
f=
; funções anônimas são perfeitamente válidas.Japonês, 7 bytes
Tentei algumas soluções, mas a mais curta foi semelhante à maioria das outras, exceto que não precisamos substituí-las
?
no início.Pode assumir qualquer caractere não numérico como o dígito ausente. Saída
0
quando a solução pode ser essa ou9
.Tente
Explicação
Entrada implícita da sequência
U
.¬
divide em uma matriz de caracteres individuais,x
reduz a matriz ignorando quaisquer elementos não numéricos,*J
multiplica cada elemento por -1 eu9
obtém o módulo positivo do resultado.fonte
JavaScript (ES6), 18 bytes
Espera a
+
como o dígito ausente. Retorna9
para 0 ou 9 .Casos de teste
Mostrar snippet de código
fonte
05AB1E ,
76 bytesUma saída de
0
significa que o resultado pode ser 0 ou 9 .Experimente online! ou como um conjunto de testes
Explicação
fonte
Python 2 ,
444135 bytes-6 bytes graças ao RiaD
Experimente online!
Usuários
]
para dígitos ausentes.Saída
0
se o dígito ausente puder ser 0 ou 9.fonte
0
para um caso ambíguo, o que faz sentido desde então9%9 == 0
Pitão,
97 bytesUsa espaço como delimitador e retorna 0 se o resultado puder ser 0 ou 9.
Experimente online
Explicação
fonte
Prolog (SWI) , 59 bytes
Experimente online!
Yay para programação lógica!
Explicação
Primeiro, criamos um predicado
*
, que é válido quando aplicado a zero e à lista vazia. Nosso predicado também é válido quando a frente da lista está entre 0 e 9 e, quando adicionamos o primeiro dígito mod 9, o predicado é válido.Em seguida, definimos
+
como apenas esse predicado0
como o primeiro argumento. Ou seja, queremos que a soma digital seja um múltiplo de 9.Prolog faz todo o trabalho duro de encontrar soluções para nós.
fonte
Befunge-93 , 16 bytes
Experimente online!
Uma versão de uma linha da resposta Befunge de James Holderness, que consegue cortar dois bytes. Isso essencialmente comprime o código em uma linha, inverte a direção e tira proveito do fato de o Befunge não pular no final da linha. Ele sugeriu que eu publicasse uma resposta separada com uma explicação. O código usa um * como representando o dígito ausente e gera um 9 para 0 ou 9.
Como funciona
*
(Valor ASCII 42) foi escolhido como o caractere ausente porque contraria o valor inicial do dígito, 3.fonte
LaTeX, muitos bytes (
1000628614)LaTeX, ilegível (
348334 bytes)LaTeX, 132 bytes
Somente o espaço é permitido como dígito desconhecido neste código.
fonte
J ,
1412 bytes-2 bytes graças a @BolceBussiere
Sinceramente, não sei por que
"."0
interpreta?
como 0, mas faz isso no meu intérprete e no TIO, de modo que não vou questioná-lo. (Atualização: veja os comentários para uma explicação do porquê).Essa abordagem simplesmente pega a soma dos dígitos, a nega subtraindo 9 e a módulo 9.
Experimente online!
fonte
Geléia ,
1196 bytesExplicação
Uma saída de 0 significa que o resultado pode ser 0 ou 9.
Experimente online!
Economizou 2 bytes graças ao Sr. Xcoder . Ao usar o Cada rápido (
€
) durante a avaliação, dividir o número em dígitos era redundante.Economizou 3 bytes graças a Dennis . Pode OR bit a bit com a entrada 0 em vez de analisar manualmente a entrada como um número enquanto remove zeros à esquerda e sem dígitos.
fonte
|0
funciona em vez defØDV€
.Rápido , 51 bytes
Experimente online!
fonte
Befunge-93 (PyFunge) ,
2221 bytesPercebi que não precisava usar
?
para representar o dígito ausente. Por isso, usei um múltiplo de 9 após subtrair 48:x
Isso me permite jogar fora
3+
, mas só me salvou 1 byte devido ao tamanho do primeira linha antes da condicional :(Uma porta de minha resposta Befunge-98:
5 mais bytes, a fim de verificar se tenha atingido EOF,
mais um byte de empurrar 48 (
"0"
vs'0
),1 mais bytes para imprimir a resposta com
.@
,e mais um byte, porque o segundo A linha possui um espaço
para um total de mais 8 bytes.
Experimente online!
Saída
0
se o dígito ausente puder ser 0 ou 9.Isso funciona apenas no intérprete PyFunge pelos motivos explicados abaixo.
Explicação
Grande parte dessa explicação é copiada e colada da minha explicação do Befunge-98 , pois esse programa é muito semelhante a este. plugue descarado
Na primeira linha do programa, somamos os dígitos, incluindo x, que é tratado como um 72 por causa de seu valor ASCII. No entanto, a soma será a mesma assim que tivermos modificado por 9, então isso é irrelevante.
Se apenas modificássemos por 9, ficaríamos com o dígito errado, porque queremos
9 - (sum % 9)
. No entanto, podemos fazer melhor do que9\-
, que subtrairia o restante de 9: se fizermos a soma negativa antes de modificar por 9, obteremos um resultado positivo, equivalente a9 - (sum % 9)
alguns intérpretes. É isso que exige que usemos os intérpretes PyFunge para o Befunge 93 e 98, pois é o único no TIO que faz isso. Os outros nos dão um valor entre -8 e 8 em vez de 0 e 8fonte
Befunge-98 (PyFunge) ,
1513 bytesPercebi que não precisava usar
?
para representar o dígito ausente, então usei um múltiplo de 9 após subtrair 48:x
Isso me permite jogar fora o
3+
.Experimente online!
Usa um
x
como o dígito ausente, porque seu valor ASCII é divisível por 9 após subtrair 48 (e é bom porque é comumente usado como uma variável em matemática).Saídas via código de saída (porque
q
é um byte menor que.@
)Saídas
0
se o dígito ausente puder ser 0 ou 9.Isso funciona apenas no intérprete PyFunge pelos motivos explicados abaixo.
Explicação
Na primeira linha do programa, somamos os dígitos, incluindo o
x
, que é tratado como um 72 por causa de seu valor ASCII. No entanto, a soma será a mesma assim que tivermos modificado por 9, então isso é irrelevante.Se apenas modificássemos por 9, ficaríamos com o dígito errado, porque queremos
9 - (sum % 9)
. No entanto, podemos fazer melhor do que9\-
, que subtrairia o restante de 9: se fizermos a soma negativa antes de modificar por 9, obteremos um resultado positivo, equivalente a9 - (sum % 9)
alguns intérpretes . É isso que exige que usemos os intérpretes PyFunge para o Befunge 93 e 98, pois é o único no TIO que faz isso. Os outros nos dão um valor entre -8 e 8 em vez de 0 e 8.fonte
Ruby , 22 bytes
Usos
'
(qualquer caractere que tenha uma distância0
divisível por "0" será suficiente, inclusive0
ele próprio).Uma saída de
0
significa0
ou9
.Experimente online!
Explicação
fonte
Ruby ,
46, 41 bytes-5 graças a @Unihedron
Experimente online!
fonte
chars
vez de.split(//)
, 2.'<'
pode ser substituído por?<
chars
Befunge-93,
28271918 bytesO crédito deve recair sobre Mistah Figgins , cuja resposta do PyFunge me mostrou que você não precisava de uma verificação especial para o caractere de dígito ausente, se você apenas certificou-se de que o valor ASCII fosse um múltiplo de nove.
Agradecimentos adicionais a Jo King, que mostrou que você não precisava converter totalmente os caracteres em seu equivalente numérico e poderia subtrair 3 para obter um valor relativo à base 9 (ASCII
0
menos 3 é 45, múltiplo de 9) .Experimente online!
Para que isso funcione, você deve usar o caractere
*
para o dígito ausente (existem outros que também podem funcionar, mas esse é o melhor).Saídas
9
se o dígito ausente puder ser 0 ou 9.Explicação
Basicamente, estamos calculando a soma de todos os dígitos, mais 45 por dígito (que será cancelado quando modificarmos com 9). Essa soma é subtraída de 3 (nosso total inicial) e 39 adicionais são subtraídas pelo dígito ausente (ASCII
*
menos três). Novamente, 3 menos 39 é um múltiplo de 9, então é cancelado quando modificamos com 9.Então, no final, estamos calculando a soma negativa de todos os dígitos, mod 9, mais 9, ou seja,
E isso nos dá o dígito que falta.
fonte
Befunge-98 (PyFunge) , 8 bytes
Experimente online!
Saídas via código de saída. Como na resposta de Mistah Figgin , ele só funciona com o Pyfunge, onde um número negativo mod 9 se torna positivo. Usa um x como o dígito ausente.
fonte
PowerShell , 40 bytes
Experimente online! ou Verifique todos os casos de teste
Leva entrada como
'123x'
em$a
. Constrói um intervalo0
para9
e usaWhere-Object
(aqui abreviado como|?
) para extrair os números inteiros que correspondem à cláusula. A cláusula leva$a
, executa uma regex-replace
para substituir ox
dígito atual$_
e obtém o mod 9 por%9
. Assim, se 9 dividir uniformemente, será zero. Pegamos o booleano-não, que transforma os zeros em verdade e todo o resto falsey, de modo que satisfaz a cláusula Where-Object. Esses resultados são deixados no pipeline e a saída é implícita.fonte
Haskell , 35 bytes
Experimente online!
fonte
Retina ,
353425 bytesSe
?
possível0 or 9
, o resultado é mostrado como9
.Experimente online
Explicação
fonte
\d
pode ser alterado para apenas.
e a seguinte linha para$*
.?
ainda quando escrevi isso.Perl 5 , 23 bytes
Experimente online!
Não liga para qual caractere significa o dígito ausente, contanto que não seja um dígito.
fonte
Tcl, 53 bytes
Tal como acontece com outras respostas, isso é mais curto ao não dizer explicitamente "0 ou 9".
Em vez disso, um resultado de "9" significa 0 ou 9.
Experimente online!
Explicação
Funciona de maneira bem simples. Emprega uma expressão regular para:
ponto de interrogaçãosem dígito (s)Em seguida, ele avalia 9 - (sum_of_digits mod 9) para chegar a um valor final em 1..9, que é então
puts
.O 0 inicial (in
0$argv
) é necessário caso o ponto de interrogação seja o primeiro na entrada; um sinal de adição inicial na sequência transformada não é um problema paraexpr
.fonte
Pitão , 8 bytes
Experimente online!
Usa em
I
vez de?
.fonte
APL (Dyalog) , 13 bytes
Experimente online!
O dígito ausente é
⍬
.fonte
brainfuck , 50 bytes
Experimente online!
Imprime um 9 para 0 ou 9. O caractere ausente é representado por:
Como funciona
O caractere ausente precisa ser um caractere que possua um mod 9 de 4, +3, porque subtraímos 3 dos dígitos normais e +1 para a inicialização do total como 1.
Como uma observação lateral, há muita ineficiência no código para o golfe, pois cada dígito redefinirá o total de 5 vezes cada, em vez de apenas uma vez, se subtrair 48 em vez de 3.
fonte
> <> ,
3533252115 bytesUma saída de
0
significa que o resultado pode ser 0 ou 9 .Experimente online!
Economizou 6 bytes graças a Jo King usando
'
para representar dígitos ausentes.fonte
'
caractere em vez de um?
Java 8,
3634 bytesRetorna
9
quando ambos0
e9
são válidos.Explicação:
Experimente online.
fonte