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

brim
fonte
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~>

Conor O'Brien
fonte
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

640KB
fonte
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

,[>,]<.
SuperJedi224
fonte
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
Suever
fonte
Eu teria ido para J)...
Sanchises 18/03/19
6

PHP , 13 bytes

<?=$argn[-1];

Experimente online!

Executar com php -nFentrada é STDIN. Exemplo:

$ echo 29845812674|php -nF lost.php
640KB
fonte
5

Javascript, 14 bytes

a=>a.slice(-1)
SuperJedi224
fonte
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!

MilkyWay90
fonte
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.

pizzapants184
fonte
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.

Tau
fonte
4

Haskell , 9 4 bytes

last

Experimente online!

flawr
fonte
Por que se preocupar pure? Não é lastsuficiente?
Dfeuer
Eu assumi que a saída também deve ser uma string, mas você está certo, o OP está falando apenas de "bytes".
flawr
4

Semente , 11 bytes

5 370394306

Experimente online!

O programa Befunge-98 resultante ~2j@,foi roubado emprestado de Jo King aqui , então lhes agradecemos por isso.

kungfushark
fonte
3

Java 8

Entrada de STDIN, 71 bytes

v->{int i=0;for(;System.in.available()>0;i=System.in.read());return i;}

Experimente online!

Função Argumento, 25 bytes

s->s.charAt(s.length()-1)
Benjamin Urquhart
fonte
Você pode adicionar o código do argumento do programa para ter todas as três opções. :) Pena que o OP solicite especificamente Strings, caso contrário, s->s[s.length-1]seria suficiente com um char[]tipo de parâmetro.
Kevin Cruijssen 18/03/19
61 bytes .
Olivier Grégoire
3

Cubix , 6 bytes

pA/@po

Experimente online!

  p
A / @ p
  o

Assista correr

  • A Toma toda a entrada
  • / Redirecionar ao redor do cubo
  • pp traga o fundo da pilha para o topo duas vezes
  • o/@ saída como caractere, redirecionar e parar
MickyT
fonte
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.

JPeroutek
fonte
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
MilkyWay90
fonte
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.

Nick Kennedy
fonte
-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)
Wernisch
fonte
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!

EdgyNerd
fonte
2

PowerShell, 11 bytes

"$args"[-1]

Experimente online!

Gabriel Mills
fonte
2

SmileBASIC, 16 bytes

INPUT S$?POP(S$)
12Me21
fonte
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)

Ismael Miguel
fonte
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!

Quantum64
fonte
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)

remoel
fonte
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!

Mrwerdo
fonte
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
38
somente ASCII
1
14
Somente ASCII
1
Que tal agora?
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

ElPedro
fonte
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 .

SuperJedi224
fonte
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]);}}

Arcanox
fonte
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