Imprimir o último byte inserido


12

Desafio

Você tem uma sequência de bytes de entrada, gera o último byte nela.

Regras

Seu envio pode ser um programa ou função que gera o último byte na entrada que

  • é uma string, argumentos stdin ou de linha de comando e
  • não está vazio.

Eu estava tentando resolver isso com cérebro, no entanto, todos os idiomas podem participar. Isso é .

Exemplos

"?" -> "?"
"29845812674" -> "4"

O Catálogo

O snippet de pilha na parte inferior desta postagem gera o catálogo a partir das respostas a) como uma lista da solução mais curta por idioma eb) como uma tabela geral de líderes.

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

## Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

## Perl, 43 + 2 (-p flag) = 45 bytes

Você também pode transformar o nome do idioma em um link que será exibido no snippet:

## [><>](https://esolangs.org/wiki/Fish), 121 bytes


4
Bem-vindo, mudei sua pergunta para ajustar-se ao nosso formato de maneira mais adequada ( normalmente, é para isso que serve a caixa de areia ). No entanto, em seu estado atual, o desafio é muito fácil (também em bf), portanto, não tenho certeza.
17/03/19

11
Eu voto contra o fechamento; pode ser trivial, mas isso não significa que seja offtopic
MilkyWay90

1
@MillyWay Acho que a maioria dos próximos votos eram antes da extensa edição, ბიმო
Sanchises

9
@ ბიმო Temos um consenso de não editar perguntas fora do tópico para torná-las no tópico, que eu acho que seriam aplicadas aqui.
Laikoni 18/03/19

2
Que tipo de corda? É garantido que seja apenas ASCII? Ou devemos lidar com UTF-8 (e como?), Por exemplo?
FireCubez 18/03/19

Respostas:


11

Anexo , 4 bytes

Last

Experimente online! (Se a entrada puder ser uma lista de caracteres, &/Spoderá funcionar.)

Alternativas

5 bytes: `@&-1

8 bytes: &/S@List

10 bytes: `@«_,-1»

10 bytes: Fold!Right

10 bytes: `@<~_,-1~>

10 bytes: `^^&:Right

10 bytes: {Right^^_}

11 bytes: Get«_,-1»

11 bytes: Get<~_,-1~>

12 bytes: `@«_,#_-1»

12 bytes: `@<~_,#_-1~>

13 bytes: Get«_,#_-1»

13 bytes: Get<~_,#_-1~>


4
: | wtf tantas alternativas
somente ASCII

1
@ ASCII-only mínimo que eu poderia fazer em um desafio simples como isto: p
Conor O'Brien

Imprimir Lastbyte inserido. Os programas de conteúdos se encaixam com o desafio
MilkyWay90

11

código de máquina x86-16, 2 bytes

Como o @CodyGray aponta corretamente, levar a entrada como uma string e a saída para um registro remove a maior parte da versão do programa independente.

A string de entrada está dentro SI, o comprimento CXe o caractere de saída estão em AL:

F3 AC  REPZ LODSB      ; start at memory location pointer in SI, put next value in AL,
                       ; loop CX number of times. The last char will be in AL when done.

Ou 4 bytes como uma "string Pascal" (o comprimento é precedido do início da string):

AC     LODSB           ; first byte is string length
91     XCHG AX, CX     ; move length to CX for loop 
F3 AC  REPZ LODSB      ; start at memory location pointer in SI, put next value in AL,
                       ; loop CX number of times. The last char will be in AL when done.

Ou 5 bytes como uma "sequência C" (zero / nulo terminado), insira DI:

F2 AE     REPNZ SCASB     ; scan for value in AL (0), end when found and advance DI
8A 45 FE  MOV AL, [DI-2]  ; DI is now two bytes ahead of last, put value of DI-2 into AL

código de máquina x86-16, IBM PC DOS, 12 11 10 bytes

Ou um programa tão completo quanto o executável do IBM PC DOS. A entrada é da linha de comando, a saída é para o console.

B3 80   MOV  BL, 80H            ; BX to DOS PSP at 80H 
8A 07   MOV  AL, BYTE PTR[BX]   ; get command line tail length 
D7      XLAT                    ; AL = [BX+AL] 
B4 0E   MOV  AH, 0EH            ; PC BIOS write to screen function  
CD 10   INT  10H                ; display  
C3      RET                     ; exit to DOS

Resultado:

insira a descrição da imagem aqui


Embora isso certamente consiga pontos de estilo, do ponto de vista estrito do golfe, é importante notar que você pode escrever funções que retornam o resultado em um registro. Portanto, isso pode ficar muito menor. Você pode eliminar trivialmente 4 bytes, e uma reescrita pode diminuir ainda mais. A propósito, é essa captura de tela de um emulador? Qual?
Cody Gray

@CodyGray, ah, absolutamente, o código para levar a entrada da linha de comando e a saída para o console é quase tudo. Sim, eu poderia dizer "string de entrada SI, comprimento na CXsaída char AL" e então acho que o único código necessário seria REPZ LODSB(2 bytes) e estaríamos prontos. É claro que essa abordagem não seria como você faria se estivesse codificando eficiência, não tamanho. Porém, seu ponto de vista está muito bem entendido, vou postá-lo também como uma função que faz a carne do trabalho.
640KB

7

Brainf ***, 7 bytes

,[>,]<.

ideone.com/XoJLD0 Ainda não funciona; (
jean

@ jean Experimente aqui . (Honestamente, eu nem sabia que o ideone fazia BF).
SuperJedi224

Sim, no seu link tudo funciona bem. Mas o juiz on-line para esse problema usa ideone onde não funciona; (
jean

A ideone @jean parece usar -1como EOF. +[>,+]<-.deve trabalhar
Jo Rei

@Jo King Desculpe, mas a entrada se parece com: 29845812674 [enter] [EOF] como posso imprimir o último dígito?
jean

7

MATL, 2 bytes

0)

O MATL usa indexação modular com base em 1, de modo que esta solução agarra o elemento na 0-ésima posição da entrada, que é a mesma que a anterior, desde a 0volta ao final.

Experimente no MATL Online

Explicação

    % Implicitly grab the input
0   % Push the literal 0 to the stack
)   % Use this zero to grab the character at the end of the string
    % Implicitly display the result

Eu teria ido para J)...
Sanchises 18/03/19


5

Javascript, 14 bytes

a=>a.slice(-1)

Eu tentei o meu melhor para encontrar uma maneira mais curta, mas para minha surpresa, acho que isso não pode ser melhorado, a menos que haja uma maneira divertida de reverter uma string com menos de 8 bytes, antes de chamar [0]. Ou talvez se houver uma maneira curta de obter o comprimento da matriz. Abordagem diferente: a=>[...a].pop()(15bytes)
Matsyir 26/09/19

4

Python 3 , 14 bytes

lambda x:x[-1]

Experimente online!


Eu me sinto idiota, como você está chamando isso sem declarar uma variável?
Nathan Dimmer

Eu olhei para o seu TIO, mas não faz muito sentido ... O que você está fazendo no seu cabeçalho?
Nathan Dimmer

1
@ Bobobob Para sua primeira pergunta, são permitidas respostas lambdas anônimas (eu chamo usando atribuindo o lambda à variável eno cabeçalho). Para sua segunda pergunta, o cabeçalho é e=\ , o que basicamente significae=lambda x:x[-1]
MilkyWay90

Note-se que no meu comentário acima, não é suposto ser um espaço à direita na e=\ , mas Markdown escapa o caráter de código então eu tenho que adicionar um espaço à direita
MilkyWay90

Isso é muito legal! Obrigado!
Nathan Dimmer

4

Bash + coreutils, 8 bytes

tail -c1

A entrada é de stdin, a saída é para stdout.


4

TI-BASIC (TI-84), 10 bytes

sub(Ans,length(Ans),1

Obtém o último caractere na sequência de entrada.
A entrada é no Ans.
A saída está dentro Anse é automaticamente impressa.







3

Befunge-93 , 12 15 bytes

:1+_p1-,@>~#

Experimente online!

Obrigado a @Jo King por jogar fora 3 bytes.

Versão alternativa de 15 bytes que é menos confusa:

~:1+#v!_
  @,$<

Tomar seqüências de caracteres como entrada no Befunge não é o mais fácil. Se houvesse um único comando para receber vários caracteres, seria tão simples quanto ler a sequência, exibir / imprimir o caractere superior e sair.


Na verdade, $$em vez de p1deve funcionar sem o aviso para a mesma quantidade de bytes
Jo rei

3

Máquina de Turing, mas muito pior , 391 bytes

1 0 1 1 0 0 0
0 0 0 1 1 0 0
1 1 1 1 0 0 0
0 1 0 1 2 0 0
1 2 1 1 0 0 0
0 2 0 1 3 0 0
1 3 1 1 0 0 0
0 3 0 1 4 0 0
1 4 1 1 0 0 0
0 4 0 1 5 0 0
1 5 1 1 0 0 0
0 5 0 1 6 0 0
1 6 1 1 0 0 0
0 6 0 1 7 0 0
1 7 1 1 0 0 0
0 7 0 1 8 0 0
1 8 1 1 0 0 0
0 8 0 0 9 0 0
0 9 0 0 a 0 0
0 a 0 0 b 0 0
0 b 0 0 c 0 0
0 c 0 0 d 0 0
0 d 0 0 e 0 0
0 e 0 0 f 0 0
0 f 0 0 h 0 0
0 h 0 0 g 0 0
0 g 0 0 0 1 1
1 g 1 0 0 1 1

Experimente online!

EXPLICAÇÃO

Detect eight zero bits (which will occur at the end of the input, since TMBWW uses an infinite tape of bits.)
1 1 1 1 0 0 0
0 1 0 1 2 0 0
1 2 1 1 0 0 0
0 2 0 1 3 0 0
1 3 1 1 0 0 0
0 3 0 1 4 0 0
1 4 1 1 0 0 0
0 4 0 1 5 0 0
1 5 1 1 0 0 0
0 5 0 1 6 0 0
1 6 1 1 0 0 0
0 6 0 1 7 0 0
1 7 1 1 0 0 0
0 7 0 1 8 0 0
1 8 1 1 0 0 0
0 8 0 0 9 0 0

-------------

When eight 0 bits are detected, move back to the final byte of the input and print it out while halting the program.
0 9 0 0 a 0 0
0 a 0 0 b 0 0
0 b 0 0 c 0 0
0 c 0 0 d 0 0
0 d 0 0 e 0 0
0 e 0 0 f 0 0
0 f 0 0 h 0 0
0 h 0 0 g 0 0
0 g 0 0 0 1 1
1 g 1 0 0 1 1

3

Geléia , 1 byte

Experimente online!

Não é o desafio mais difícil em Jelly ...

Observe que isso aceita a entrada como uma string; se a entrada puder ser interpretada de outra forma (por exemplo, um número, uma lista), o argumento precisará ser citado (por exemplo, "123456" ou "[123,197]"). Como alternativa, isso pode ser visto como um link que pega uma matriz de bytes e retorna o último membro dessa matriz, de acordo com as regras padrão do PPCG.

Obrigado a @ MilkyWay90 e @ ბიმო por apontar isso.


-1 Falha em qualquer número ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90

@ MilkyWay90: Não precisa ser um programa completo, provavelmente isso funcionará como uma função Jelly usando uma string. Mas, novamente, eu não conheço Jelly, então posso estar errado.
ბიმო

Ok, vou tentar ver se ele funcionará ou não como um link
MilkyWay90

@ ბიმო parece funcionar (OP você pode editar a resposta para que eu possa desfazer o meu downvote?)
MilkyWay90

Você pode definir o T como um link e inserir uma string, removendo a necessidade de "" na sua entrada.
MilkyWay90

3

Excel, 10 bytes

Praticamente equivalente à resposta VBA do @ remoel:

=RIGHT(A1)

3

Cascata , 9 bytes

?a|,
;.]^

Muito feliz com isso, pois é apenas 3 bytes mais longo que o meu programa para gatos

Expandido

   ?
  ^;.
 | |a
 ] |
a ,|

Isso basicamente faz um loop através do envio de caracteres de entrada para a apilha até que o EOF seja alcançado. Em seguida, ele gera o item no topo da apilha usando .a.

Experimente online!





2

Galho, 37 bytes

Isso apenas usa uma abordagem "extrair 1 caracter do final e imprimi-lo".

{%macro a(a)%}{{a[-1:1]}}{%endmacro%}

Foi realmente fácil de fazer e testar, mas foi divertido!


Para usá-lo, você deve colocá-lo em um .twigarquivo e importá-lo:

{% import 'a.twig' as a %}
{{ a.a("string") }} {# should display "g" #}

Você pode testá-lo em https://twigfiddle.com/aa19wd (casos de teste incluídos)


Ok, é a primeira vez que vejo um golfe Twig.
Ven

@ Ven Eu venho fazendo isso há um bom tempo. Aqui está um exemplo: codegolf.stackexchange.com/a/174040 e aqui está outra: codegolf.stackexchange.com/a/166800 (eu tenho mais alguns, mas bem)
Ismael Miguel


2

Emoção , 5 bytes

😶👉😃😨👿

Explicação

😶 Push a copy of the first stack value.
👉 Push the length of the first stack value interpreted as a string.
😃 Push literal 1
😨 Push the difference of the second and first stack values.
👿 Push the character of the second stack value at the index of the top stack value.

Experimente online!


em sua readme, 1. Eu acho que "a emoji" deve ser "de emoji" 2. se ele deve ser "de emoji", então emotinomicon e emojicode são uma coisa já
ASCII-only

Na verdade, o que você está vendo é a saída de um compilador, que também pode ser acessado através da interface online.
Quantum64

Cada emoji não tem mais de um byte? Eu acho que eles teriam dois bytes pelo menos.
Kyle Delaney

A emoção usa uma página de código personalizada. Veja quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek 18/03/19

2

VBA (Excel), 14 12 bytes

usando Janela e Célula Imediatas A1como entrada

Obrigado @tsh

?[RIGHT(A1)] ou ?Right([A1],1)


1
É 1opcional?
tsh

não no segundo código. Obrigado :)
remoel 18/03/19

2

Python 3, 11 18 34 bytes

import sys;print(sys.argv[-1][-1])

Uso via execução do programa como um script python na linha de comando. A entrada é fornecida como o último argumento para o programa.

Experimente online!


Isso não imprime nada nem retorna nada de uma função - trechos não são permitidos, apenas funções ou programas completos.
Stephen

Ah, entendo, não pensei nisso quando pensei na resposta. Só pensei em executá-lo no intérprete.
Mrwerdo 18/03/19




2

Fórmula IBM / Lotus Notes, 11 bytes

@Right(i;1)

Fórmula de campo computado que recebe sua entrada do campo editável i

insira a descrição da imagem aqui


2

Código da máquina de Turing, 72 42 bytes

Assume uma entrada sem células vazias (espaços). Obrigado ao ASCII-only por salvar 30 bytes.

0 * * r 1
1 * * l 2
1 _ _ l halt
2 * _ r 0

Versão antiga em 72 bytes:

0 * * r 0
0 _ * l 1
1 * * l 2
2 * _ l 2
2 _ _ r 3
3 _ _ r 3
3 * * * halt

Experimente online .


1
0 * * r 1/1 * * l 2/1 _ _ l halt/2 * _ r 0?
somente ASCII

oi pls reply: ||
somente ASCII

não funcionaria de que maneira? Eu testei online
somente ASCII

@ Somente ASCII Acontece que você está correto e eu estava simplesmente interpretando mal a maneira como seu programa realmente funcionava. Eu acho que é diferente o suficiente para que você possa publicá-la como uma resposta diferente, se quiser.
22719 SuperJedi224

Bem, esse é um desafio simples, não pense que ele precise de mais de uma resposta em qualquer idioma: P
somente ASCII

2

C # 8.0 , 8 bytes

Requer o .NET Core 3.0, que está na versão beta. Atualmente, o CLR trava devido a um erro, mas, uma vez corrigido, ele será executado conforme o esperado e atenderá aos requisitos do desafio.

s=>s[^1]

C # 8.0 , é executado sem travar no momento da gravação, 22 bytes

s=>s.ToCharArray()[^1]

C # 8.0 , Programa completo, 78 bytes

using C=System.Console;class A{static void Main(){C.Write(C.ReadLine()[^1]);}}


O desafio menciona "output", por isso a última solução é provavelmente o caminho certo
Ven

Dang, você superou muito a resposta do meu console. Como o ^ 1 funciona?
Stackstuck

É o novo tipo de índice. Iniciar um índice com um sinal de intercalação indica que é do final, ou seja, array[^n]é o mesmo quearray[array.Length - n]
Arcanox 18/03/19

Interessante! Eu sempre tento manter-me atualizado com os novos recursos do C #. Você tem algum link / referência sobre isso?
mortb 19/03/19

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.