Número grande do último dígito


12

Para uma lista específica de número encontre o último dígito de Exemplo:x x x x n 3 2 1[x1,x2,x3,...,xn]x1x2x3xn

[3, 4, 2] == 1
[4, 3, 2] == 4
[4, 3, 1] == 4
[5, 3, 2] == 5   

Porque .3(42)=316=43046721

Porque .4(32)=49=262144

Porque .4(31)=43=64

Porque .5(32)=59=1953125

Regras:

Isso é código de golfe, então a resposta com o menor número de bytes vence.

Se o seu idioma tiver limites para o tamanho inteiro (ex. ) n será pequeno o suficiente para que a soma caiba no número inteiro.2321

A entrada pode ser de qualquer forma razoável (stdin, arquivo, parâmetro de linha de comando, número inteiro, string, etc.).

A saída pode ser de qualquer forma razoável (stdout, arquivo, elemento gráfico do usuário que exibe o número, etc.).

Vi em guerras de código.


2
Uma pergunta que tenho: No seu post, você fala apenas sobre numbers. Você quer dizer números inteiros positivos exclusivamente? É assim que sinto como foi interpretado.
Jonathan Frech

1
Aceitar a entrada ao contrário é razoável? A entrada pode ser zero?
NieDzejkob 10/07/19

1
Eu acho que você pretende que o limite seja na soma dos termos e, portanto, rotinas que calculam a soma real e modificam que ela deve falhar. Por exemplo, a entrada [999999,213412499,34532599,4125159,53539,54256439,353259,4314319,5325329,1242149,142219,1243219,14149,1242149,124419,999999999]é válida e o resultado deve ser Em 1caso afirmativo, isso precisa ser esclarecido na pergunta, pois você tem respostas positivas que não resolvem isso (dica - mova o modinterior do loop). Talvez adicione alguns exemplos que deixem isso claro.
Neil Slater

1
Na verdade, o resultado do meu exemplo é 9. O esquema de redução de dígitos necessário para implementar isso é muito mais interessante do que as respostas reais que esse problema obteve.
Neil Slater

2
Caro OP, precisamos de mais casos de teste.
NieDzejkob

Respostas:


15

JavaScript (ES7), 22 bytes

Limitado a .2531

a=>eval(a.join`**`)%10

Experimente online!


2
Que diabos, por que isso funciona ?!
Caleb Jay #

@ komali_2: **é o operador de exponenciação do JavaScript. O resto é bem direto.
Shaggy

2
@ komali_2 a.join`**` é equivalente a.join(['**'])e ['**']é coagido '**'pelo joinmétodo.
Arnauld

1
Penso que o OP pretende que o limite esteja na soma dos valores, caso em que isso não resolve os problemas propostos.
Neil Slater

1
@AJFadayay% 10 no final. Ao dividir qualquer número por 10, o restante (o módulo) sempre será o último dígito, portanto n % 10, retornará o último dígito den
Skidsdev

13

R , 25 bytes

Reduce(`^`,scan(),,T)%%10

Experimente online!


Não tenho certeza do que as pessoas gostaram tanto dessa resposta.
Ng

1
Eu pessoalmente gosto de ver Reducesendo usado.
Jayce


9

HP 49G RPL, 36,5 bytes

Execute-o no modo APPROX (mas insira o programa no modo EXATO). Recebe entrada na pilha com o primeiro elemento mais profundo da pilha, como números inteiros ou reais.

WHILE DEPTH 1 - REPEAT ^ END 10 MOD

Ele exponencia diretamente a pilha como na solução de Sophia até que exista um valor restante e, em seguida, é necessário o mod 10 para obter o último dígito.

A razão pela qual eu uso o APPROX para computação é porque 0,0 ^ 0,0 = 1 (quando ambos são reais), mas 0 ^ 0 =? (quando ambos são inteiros). APPROX coage todos os números inteiros em reais, portanto a entrada é adequada para qualquer um. No entanto, eu uso EXACT para entrar no programa porque 10 (inteiro) é armazenado dígito por dígito e tem 6,5 bytes, mas 10,0 (real) é armazenado como um número real completo e tem 10,5 bytes. Também evito usar a redução de RPL (chamada STREAM) porque ela introduz um objeto de programa extra, que tem 10 bytes de sobrecarga. Eu já tenho um e não quero outro.

Limitado à precisão de um HP 49G real (12 dígitos decimais)

-10 bytes após a lista vazia -> 1 requisito foi removido.

-2 bytes, tendo entrada na pilha.


1
Ei, você poderia explicar como o número de bytes é calculado? Apenas curioso como essa linguagem usa petiscos .
JungHwan Min

1
@JungHwanMin O HP 49G usa um processador de 4 bits e aritmética BCD, já que é uma calculadora. Internamente, a maioria dos comandos é transformada em ponteiros de 2,5 bytes para as rotinas que representam, para economizar espaço. Números pequenos (0-9) também são transformados dessa maneira.
Jason

1
O processador Saturn é realmente muito divertido de se trabalhar. Há muito tempo, escrevi essa porta do BurgerTime (em montagem) para o HP 48G (X). Mais tarde foi portado para o 49G . Boas memórias!
Arnauld

7

dc , 17 15 bytes

1[^z1<M]dsMxzA%

Experimente online!

Pega a entrada da pilha, sai para a pilha. Implementação simples - exponencia até que apenas um valor seja deixado na pilha e mod para o último dígito.

Obrigado ao brhfl por salvar dois bytes!


2
Você pode golfe um byte, alterando 10%a A%, e mais um byte por não verificar profundidade da pilha duas vezes - basta colocar um 1no topo da pilha antes de executar desde n ^ 1 == n:1[^z1<M]dsMxA%
brhfl

Boas idéias! Eu não tinha ideia de que o dc me permitiria usar Acomo literal enquanto definido como entrada decimal. Obrigado @brhfl!
Sophia Lechner

1
@SophiaLechner Esse truque funciona para todas as bases de entrada: codegolf.stackexchange.com/a/77728/11259
Digital Trauma


6

05AB1E , 4 bytes

.«mθ

Experimente online!

Explicação

.«     # fold
  m    # power
   θ   # take the last digit

1
Tanto quanto eu estou ciente, linguagens baseadas em pilha pode assumir a entrada está presente na pilha em vez de STDIN ou alternativas, para que algo como isso deve funcionar para 4 bytes (em alternativa, basta colocar Eno cabeçalho).
Mr. Xcoder


1
Corrigi esse problema na confirmação mais recente para uso futuro.
Adnan

@ Mr.Xcoder: Certo! Eu deveria ter lembrado disso. Tão raramente precisa pensar com entrada implícita. Obrigado :)
Emigna

@ Mr.Xcoder Uh, não tenho certeza se é isso que a meta realmente significa. O que é uma "função" em 05AB1E? Eu acho que deveria ser simplesmente uma string, já que você pode atribuí-la a uma variável e pode ser avaliada com ela .V. .«mθparece mais um snippet, pois, por si só, não é possível atribuí-lo a uma variável para reutilização posterior. Bem, Adnan agora resolveu o problema, mas eh.
Erik the Outgolfer

5

Pure Bash (somente interno - sem utilitários externos), 21

echo $[${1//,/**}%10]

A entrada é fornecida na linha de comando como uma lista separada por vírgula.

Os números inteiros do Bash estão sujeitos a limites inteiros assinados normais para as versões de 64 e 32 bits.

Experimente online!


2
^é um XOR bit a bit, e é por isso que você está 5saindo do caso de teste em vez do correto 1. Você precisará adicionar um byte para mudar para**
Sophia Lechner

@SophiaLechner Sim - claro - boa captura! Não tenho certeza de como isso ^ocorreu - eu tinha **nas iterações anteriores do meu ciclo de desenvolvimento.
Digital Trauma



4

Ruby, 41 47 bytes

Aumento do tamanho devido à manipulação de qualquer 0 na matriz de entrada, o que precisa de consideração extra. Graças arewritten

->a{a.reverse.inject{|t,n|n<2?n:n**(t%4+4)}%10}

Isso é resolvido como eu acredito que a fonte original pretendia, ou seja, para exponenciações muito grandes que não se encaixam em números inteiros nativos da linguagem - a restrição é que a matriz será agregada 2**32-1, não que os cálculos provisórios também sejam garantidos. De fato, isso parece ser o ponto do desafio em Code Wars. Embora os números inteiros nativos do Ruby possam ficar muito grandes, eles não podem lidar com o exemplo abaixo processado ingenuamente com um% 10 no final

Por exemplo

Entrada: [999999,213412499,34532597,4125159,53539,54256439,353259,4314319,5325329,1242149,142219,1243219,14149,1242149,124419,999999999]

Resultado: 9


Impressionante. Gastando mais 4 bytes, você também pode lidar com torres muito mais altas: substitua n**(t%4+4)por n**((t-1)%4+1)para obter em n**1vez de n**5etc. Parabéns pela observação de que em qualquer estágio 4 seria um bom ciclo.
reescrito

1
Existe um problema se a sequência tiver 0s
reescrita

@rewritten: Bom local! Vou ter que pensar sobre isso. Em teoria, a sequência deve ser forçada a terminar 2 etapas antes do primeiro zero.
Neil Slater

De fato, mas isso exigirá muito mais código, exatamente mais 6 bytes: n<2?n:antes n**.
reescrito




3

C # (.NET Core) , 84 bytes

a=>{int i=a.Length-1,j=a[i];for(;i-->0;)j=(int)System.Math.Pow(a[i],j);return j%10;}

Experimente online!

  • -7 bytes graças a @raznagul

Você pode salvar alguns bytes removendo os colchetes ao redor ae combinando a condição do loop com o decremento ( for(var i=a.Lengt-1;i-->0;)). Porém, a usingdeclaração deve ser incluída na contagem de bytes.
raznagul

@raznagul: desculpe, eu sou muito novo em codificar golfe em C #, está tudo bem agora?
digEmAll

Sem problemas. Sim, está tudo bem agora.
raznagul

1
Você pode salvar mais 3 bytes usando uma nova variável para manter o resultado e remover a maior parte do acesso ao índice da matriz: Experimente online!
raznagul

@raznagul: great!
digEmAll

3

C (gcc) , 56

  • Guardado 4 bytes graças a @JonathanFrech

A função recursiva r()chamada de flimites de pilha macro -normais se aplica.

R;r(int*n){R=pow(*n,n[1]?r(n+1):1);}
#define f(n)r(n)%10

Entrada fornecida como uma matriz int terminada em zero. Isso está no pressuposto de que nenhum dos x n é zero.

Experimente online!


2
) r(-> )r(.
Jonathan Frech

1
Além disso, se você quiser usar UB, você poderia golf r(int*n){return powpara R;r(int*n){R=pow.
Jonathan Frech



3

Japonês -h , 7 6 bytes

Se a entrada puder ser obtida na ordem inversa, o primeiro caractere poderá ser removido.

Limitado a 2**53-1.

Ôr!p ì

Tente


Explicação

Ô          :Reverse the array
 r         :Reduce by
  !p       :  Raising the current element to the power of the current total, initially the first element
     ì     :Split to an array of digits
           :Implicitly output the last element

Eu recebi exatamente a mesma resposta sem a bandeira, então esta parece ser a melhor maneira por enquanto.
Nit

@Nit: até que seja confirmado que pode tirar a entrada em sentido inverso :)
Shaggy

@ Oliver Sim, mas você ainda está usando uma bandeira. Pessoalmente, acho que a contagem de bytes sem sinalizadores é o resultado de pontuação mais preciso.
Nit

@Nit Uma bandeira não deve adicionar 3 bytes por meta consenso?
LegionMammal978

@ LegionMammal978, não mais .
Shaggy



2

Excel VBA, 60 bytes

Uma função de janela imediata anônima do VBE que recebe entrada do intervalo [A1:XFD1]

s=1:For i=-[Count(1:1)]To-1:s=Cells(1,-i)^s:Next:?Right(s,1)


2

CJam , 14 bytes

q~_,({~#]}*~A%

Deve funcionar para qualquer entrada, pois o CJam não está limitado a números inteiros de 64 bits.

Experimente online!


2

Python 3 , 55 bytes

p=lambda l,i=-1:not l or f'{l[0]**int(p(l[1:],0))}'[i:] 

versões mais antigas

p=lambda l,i=-1:len(l)and f'{l[0]**int(p(l[1:],0))}'[i:]or 1    (60 bytes)


Isso não teria que ser p=lambda...? O Python não pode lidar com lambdas anônimas recursivas; portanto, se você precisar que sua função seja nomeada, ela precisará fazer parte da sua solução, e a nomeação será considerada na contagem de bytes para desafios de código-golfe.
91818 mypetlion


2

Flak cerebral , 161 bytes

Inclui +1 para -r

([][()]){({}[()]<({}<(({}))>[()]){({}<(({})<({}<>)({<({}[()])><>({})<>}{}<><{}>)>)>[()])}{}{}>)}{}({}((()()()()()){})(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})

Experimente online!

O exemplo [3, 4, 2]leva mais de 60 segundos, portanto, o link TIO é usado [4, 3, 2].

A -rpode ser removido se a entrada pode ser feita na ordem inversa para uma contagem de bytes de 160.

# Push stack size -1
([][()])

# While there are 2 numbers on the stack
{({}[()]<

    # Duplicate the second number on the stack (we're multiplying this number by itself)
    ({}<(({}))>[()])

    # For 0 .. TOS
    {({}<

        # Copy TOS
        (({})<

        # Multiple Top 2 numbers
        ({}<>)({<({}[()])><>({})<>}{}<><{}>)

        # Paste the old TOS
        >)

    # End for (and clean up a little)
    >[()])}{}{}

# End While (and clean up)
>)}{}

# Mod 10
({}((()()()()()){})(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})


2

Z80Golf , 36 bytes

00000000: cd03 80f5 30fa f1f1 57f1 280d 4f41 15af  ....0...W.(.OA..
00000010: 8110 fd47 1520 f818 ef7a d60a 30fc c60a  ...G. ...z..0...
00000020: cd00 8076                                ...v

Experimente online!

Arnês de teste de força bruta

Recebe entrada como bytes brutos. Limitado a 2 ** 8-1.

Explicação

input:
    call $8003    ;      the input bytes
    push af       ; push                 on the stack
    jr nc, input  ;                                   until EOF
    pop af        ; the last byte is going to be pushed twice
    pop af
outer:
    ld d, a       ; d = exponentiation loop counter, aka the exponent
    pop af        ; pop the new base off the stack
    jr z, output  ; The flags are being pushed and popped together with the
                  ; accumulator. Since the Z flag starts as unset and no
                  ; instruction in the input loop modifies it, the Z flag is
                  ; going to be unset as long as there is input, so the jump
                  ; won't be taken. After input is depleted, a controlled stack
                  ; underflow will occur. Since SP starts at 0, the flags
                  ; register will be set to the $cd byte from the very beginning
                  ; of the program. The bit corresponding to the Z flag happens
                  ; to be set in that byte, so the main loop will stop executing
    ld c, a       ; C = current base
    ld b, c       ; B = partial product of the exponentiation loop
    dec d         ; if the exponent is 2, the loop should only execute once, so
                  ; decrement it to adjust that
pow:
    xor a         ; the multiplication loop sets A to B*C and zeroes B in the
mul:              ; process, since it's used as the loop counter
    add c         ; it's definitely not the fastest multiplication algorithm,
    djnz mul      ; but it is the smallest
    ld b, a       ; save the multiplication result as the partial product
    dec d         ; jump back to make the next iteration of either
    jr nz, pow    ; the exponentiation loop or the main loop, adjusting the
    jr outer      ; loop counter in the process
output:           ; after all input is processed, we jump here. We've prepared
    ld a, d       ; to use the result as the next exponent, so copy it back to A
mod:              ; simple modulo algorithm:
    sub 10        ;            subtract ten
    jr nc, mod    ; repeatedly              until you underflow,
    add 10        ; then undo the last subtraction by adding ten
    call $8000    ; output the result
    halt          ; and exit

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.