Imprimir el último byte ingresado

12

Desafío

Tiene una cadena de bytes de entrada, emite el último byte.

Reglas

Su envío puede ser un programa o función que genera el último byte en la entrada que

  • es una cadena, stdin o argumentos de línea de comandos, y
  • No está vacío.

Estaba tratando de resolver esto con brainfuck, sin embargo, todos los idiomas pueden participar. Este es el .

Ejemplos

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

El catálogo

El Fragmento de pila al final de esta publicación genera el catálogo a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

## Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:

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

vaquero
fuente
44
Bienvenido, cambié su pregunta para que se ajustara a nuestro formato de manera más adecuada (tenga en cuenta que esto es para lo que suele ser el entorno limitado ). Sin embargo, en su estado actual, el desafío es muy fácil (también en bf), así que no estoy seguro de eso.
ბიმო
11
Voto en contra del cierre; puede ser trivial, pero eso no lo convierte en tema fuera de lo común
MilkyWay90
1
@MillyWay Creo que la mayoría de los votos cerrados fueron antes de la extensa edición de ბიმო
Sanchises
99
@ ბიმო Tenemos el consenso de no editar preguntas fuera del tema para hacerlas sobre el tema, lo que creo que se habría aplicado aquí.
Laikoni
2
¿Qué tipo de cuerda? ¿Se garantiza que sea solo ASCII? ¿O deberíamos manejar UTF-8 (y cómo?) Por ejemplo?
FireCubez

Respuestas:

11

Adjunto , 4 bytes

Last

Pruébalo en línea! (Si la entrada pudiera ser una lista de caracteres, &/Spodría 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
fuente
44
: | wtf tantas alternativas
ASCII solo
1
@ Solo ASCII Lo menos que puedo hacer en un desafío simple como este: p
Conor O'Brien
Imprimir Lastbyte ingresado. El contenido del programa encaja con el desafío
MilkyWay90
11

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

Como @CodyGray señala correctamente, tomar la entrada como una cadena y la salida a un registro elimina la mayor parte de la versión del programa independiente.

La cadena de entrada está adentro SI, la longitud adentro CXy el carácter de salida está adentro 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.

O 4 bytes como una "cadena Pascal" (la longitud se antepone al comienzo de la cadena):

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.

O 5 bytes como una "cadena C" (cero / nulo terminado), ingrese 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

O un programa tan completo como el ejecutable de IBM PC DOS. La entrada es desde la línea de comando, la salida es a la consola.

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

Salida:

ingrese la descripción de la imagen aquí

640 KB
fuente
Aunque esto ciertamente obtiene puntos de estilo, desde un punto de vista estricto de golf, vale la pena señalar que se le permite escribir funciones que devuelven el resultado en un registro. Entonces, esto puede ser mucho más corto. Puede eliminar trivialmente 4 bytes, y una reescritura podría reducirlo aún más. Por cierto, ¿es esa captura de pantalla de un emulador? ¿Cúal?
Cody Gray
@CodyGray, oh, absolutamente, el código para tomar la entrada de la línea de comando y la salida a la consola es casi todo. Sí, podría decir "input string in SI, length in CXoutput char is in AL" y luego creo que el único código que sería necesario es REPZ LODSB(2 bytes) y ya estaríamos listos. Por supuesto, este enfoque no sería cómo lo haría si estuviera codificando la eficiencia, no el tamaño. Sin embargo, su punto está muy bien tomado, lo publicaré también como una función que hace la carne del trabajo.
640 KB
7

Brainf ***, 7 bytes

,[>,]<.
SuperJedi224
fuente
ideone.com/XoJLD0 Todavía no funciona; (
jean
@jean Pruébalo aquí . (Honestamente, ni siquiera sabía que ideone hacía BF).
SuperJedi224
Sí, en tu enlace todo funciona bien. Pero el juez en línea para este problema usa ideone donde no funciona; (
jean
@jean ideone parece usar -1como EOF. +[>,+]<-.debería funcionar
Jo King
@Jo King Lo siento, pero la entrada se ve así: 29845812674 [enter] [EOF] ¿cómo puedo imprimir el último dígito?
jean
7

MATL, 2 bytes

0)

MATL utiliza la indexación modular basada en 1, por lo que esta solución toma el elemento en la 0posición -th de la entrada, que es la misma que la última desde que se 0ajusta hasta el final.

Pruébelo en MATL Online

Explicación

    % 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
fuente
J)
Hubiera
6

PHP , 13 bytes

<?=$argn[-1];

Pruébalo en línea!

Ejecutar con php -nFentrada es STDIN. Ejemplo:

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

Javascript, 14 bytes

a=>a.slice(-1)
SuperJedi224
fuente
Hice todo lo posible para encontrar una forma más corta, pero para mi sorpresa, no creo que esto pueda mejorarse, a menos que haya una forma funky de revertir una cadena en menos de 8 bytes, antes de llamar [0]. O tal vez si hay una forma corta de obtener la longitud de la matriz. Enfoque diferente: a=>[...a].pop()(15bytes)
Matsyir
4

Python 3 , 14 bytes

lambda x:x[-1]

Pruébalo en línea!

MilkyWay90
fuente
Me siento tonto, ¿cómo se llama esto sin declararlo como una variable?
Nathan Dimmer
Miré tu TIO, pero no tiene mucho sentido ... ¿Qué estás haciendo en tu encabezado?
Nathan Dimmer
1
@Bobawob Para su primera pregunta, se permiten respuestas lambdas anónimas (lo llamo usando asignando la lambda a la variable een el encabezado). Para su segunda pregunta, el encabezado es e=\ , lo que básicamente significae=lambda x:x[-1]
MilkyWay90
Tenga en cuenta que en mi comentario anterior, no se supone que es un espacio final en el e=\ pero de rebajas escapa el carácter de código de modo que tengo que añadir un espacio al final
MilkyWay90
¡Eso es realmente genial! ¡Gracias!
Nathan Dimmer
4

Bash + coreutils, 8 bytes

tail -c1

La entrada es desde stdin, la salida es hacia stdout.

pizzapants184
fuente
4

TI-BASIC (TI-84), 10 bytes

sub(Ans,length(Ans),1

Obtiene el último carácter en la cadena de entrada.
La entrada está adentro Ans.
La salida está adentro Ansy se imprime automáticamente.

Tau
fuente
4

Haskell , 9 4 bytes

last

Pruébalo en línea!

falla
fuente
¿Por qué molestarse con pure? ¿No es lastsuficiente?
dfeuer
Supuse que la salida también debe ser una cadena, pero tienes razón, OP solo está hablando de "bytes".
flawr
3

Java 8

Entrada desde STDIN, 71 bytes

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

Pruébalo en línea!

Argumento de función, 25 bytes

s->s.charAt(s.length()-1)
Benjamin Urquhart
fuente
Puede agregar el código para que el argumento del programa tenga las tres opciones. :) Lástima que OP solicite específicamente cadenas, de lo contrario s->s[s.length-1]habría sido suficiente con un char[]tipo de parámetro.
Kevin Cruijssen
61 bytes .
Olivier Grégoire
3

Cubix , 6 bytes

pA/@po

Pruébalo en línea!

  p
A / @ p
  o

Míralo correr

  • A Toma toda la entrada
  • / Redireccionar alrededor del cubo
  • pp lleva el fondo de la pila a la parte superior dos veces
  • o/@ salida como personaje, redirigir y detener
MickyT
fuente
3

Befunge-93 , 12 15 bytes

:1+_p1-,@>~#

Pruébalo en línea!

Gracias a @Jo King por jugar 3 bytes.

Versión alternativa de 15 bytes que es menos desordenada:

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

Tomar cadenas como entrada en Befunge no es la más fácil. Si hubiera un solo comando para tomar varios caracteres, sería tan simple como leer la cadena, hacer estallar / imprimir el carácter superior y salir.

JPeroutek
fuente
En realidad, en $$lugar de p1funcionar sin la advertencia por la misma cantidad de bytes
Jo King
3

Máquina de Turing pero mucho peor , 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

Pruébalo en línea!

EXPLICACIÓN

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
fuente
3

Jalea , 1 byte

Pruébalo en línea!

No es el desafío más difícil en Jelly ...

Tenga en cuenta que esto acepta la entrada como una cadena; si la entrada puede interpretarse de otra manera (por ejemplo, un número, una lista), entonces el argumento deberá ser citado (por ejemplo, "123456" o "[123,197]"). Alternativamente, esto puede verse como un enlace que toma una matriz de bytes y devuelve el último miembro de esa matriz, de acuerdo con las reglas estándar de PPCG.

Gracias a @ MilkyWay90 y @ ბიმო por señalar esto.

Nick Kennedy
fuente
-1 falla por cualquier número ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90
@ MilkyWay90: No es necesario que sea un programa completo, probablemente esto funcionará como una función Jelly que toma una cadena. Pero, de nuevo, no conozco a Jelly, así que podría estar equivocado.
ბიმო
Bien, intentaré ver si funciona o no como un enlace
MilkyWay90
@ ბიმო Parece funcionar (OP, ¿puedes editar la respuesta para que pueda deshacer mi voto negativo?)
MilkyWay90
Puede definir la T como un enlace y hacer que ingrese una cadena, eliminando la necesidad de "" en su entrada.
MilkyWay90
3

Excel, 10 bytes

Más o menos equivalente a la respuesta VBA de @ remoel:

=RIGHT(A1)
Wernisch
fuente
3

Cascada , 9 bytes.

?a|,
;.]^

Muy contento con esto, ya que es solo 3 bytes más largo que mi programa cat

Expandido

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

Básicamente, esto solo pasa a través de la inserción de caracteres de entrada en la apila hasta que se alcanza EOF. Luego genera el elemento en la parte superior de la apila usando .a.

Pruébalo en línea!

EdgyNerd
fuente
2

SmileBASIC, 16 bytes

INPUT S$?POP(S$)
12Me21
fuente
2

Ramita, 37 bytes

Esto solo usa un enfoque simple "extraer 1 carácter del final e imprimirlo"

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

Fue realmente fácil de hacer y probar, ¡pero fue divertido!


Para usarlo, debe colocarlo en un .twigarchivo e importarlo:

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

Puede probarlo en https://twigfiddle.com/aa19wd (casos de prueba incluidos)

Ismael Miguel
fuente
Ok, esa es la primera vez que veo un golf Twig.
Ven
@Ven Lo he estado haciendo durante bastante tiempo. Aquí hay un ejemplo: codegolf.stackexchange.com/a/174040 y aquí hay otro: codegolf.stackexchange.com/a/166800 (Tengo algunos más, pero bueno)
Ismael Miguel
2

Emoción , 5 bytes

😶👉😃😨👿

Explicación

😶 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.

Pruébalo en línea!

Quantum64
fuente
en su archivo léame, 1. creo que "a emoji" debería ser "de emoji" 2. si debería ser "de emoji", entonces emotinomicon y emojicode ya son una cosa
solo ASCII
En realidad, lo que está viendo es el resultado de un compilador, al que también se puede acceder a través de la interfaz en línea.
Quantum64
¿No son cada emoji más de un byte? Creo que serían dos bytes al menos.
Kyle Delaney
Emotion usa una página de códigos personalizada. Ver quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek
2

VBA (Excel), 14 12 bytes

usando la ventana inmediata y la celda A1como entrada

Gracias @tsh

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

remodelar
fuente
1
Es 1opcional?
tsh
No en el segundo código. Gracias :)
Remoel
2

Python 3, 11 18 años 34 bytes

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

Uso mediante la ejecución del programa como un script de Python en la línea de comando. La entrada se proporciona como el último argumento para el programa.

Pruébalo en línea!

Mrwerdo
fuente
Esto no imprime nada ni devuelve nada de una función: no se permiten fragmentos, solo funciones o programas completos.
Stephen
Ah, ya veo, no pensé en eso cuando pensé en la respuesta. Solo pensé en ejecutarlo en el intérprete.
Mrwerdo
38
Solo ASCII
1
14
Solo ASCII
2

Fórmula IBM / Lotus Notes, 11 bytes

@Right(i;1)

Fórmula de campo calculada que toma su entrada del campo editable i

ingrese la descripción de la imagen aquí

ElPedro
fuente
2

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

Asume una entrada sin celdas vacías (espacios). Gracias a ASCII-only por guardar 30 bytes.

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

Versión anterior en 72 bytes:

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

Pruébalo en línea .

SuperJedi224
fuente
1
0 * * r 1/1 * * l 2/1 _ _ l halt/2 * _ r 0?
Solo ASCII
oi por favor responda: ||
Solo ASCII
no funcionaría de qué manera? Lo he probado en línea
solo ASCII el
@ Solo ASCII Resulta que tienes razón, y simplemente estaba malinterpretando la forma en que realmente funcionaba tu programa. Creo que es lo suficientemente diferente como para que pueda publicarlo como una respuesta diferente si lo desea.
SuperJedi224
Bueno, este es un desafío simple, no piense que necesita más de una respuesta en cualquier idioma: P
Solo ASCII
2

C # 8.0 , 8 bytes

Requiere .NET Core 3.0, que está en beta. Esto actualmente bloquea el CLR debido a un error, pero una vez que se soluciona, se ejecutará como se esperaba y cumplirá los requisitos de desafío.

s=>s[^1]

C # 8.0 , se ejecuta sin fallar al momento de escribir, 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
fuente
El desafío menciona "salida", por lo que la última solución es probablemente la correcta
Ven
Dang, superaste mucho la respuesta de mi consola. ¿Cómo funciona el ^ 1?
Stackstuck
Es el nuevo tipo de índice. A partir de un índice con un símbolo de intercalación indica que es desde el final, es decir, array[^n]es el mismo quearray[array.Length - n]
Arcanox
¡Interesante! Siempre trato de estar al día con las nuevas funciones de C #. ¿Tienes algún enlace / referencia sobre eso?
mortb