Imprimer le dernier octet entré

12

Défi

Vous avez une chaîne d'octets d'entrée, sortez le dernier octet.

Règles

Votre soumission peut être un programme ou une fonction produisant le dernier octet de l'entrée qui

  • est soit une chaîne, soit stdin ou des arguments de ligne de commande, et
  • n'est pas vide.

J'essayais de résoudre ce problème avec brainfuck, mais toutes les langues sont autorisées à participer. C'est du .

Exemples

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

Le catalogue

L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.

Pour vous assurer que votre réponse s'affiche, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque suivant:

## Language Name, N bytes

Nest la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:

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

Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:

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

Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:

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

jean
la source
4
Bienvenue, j'ai changé votre question pour qu'elle corresponde mieux à notre format (notez que c'est généralement à cela que sert le bac à sable ). Cependant, dans son état actuel, le défi est très facile (également en bf), donc je n'en suis pas sûr.
ბიმო
11
Je vote contre la fermeture; cela peut être trivial, mais cela ne le rend pas hors sujet
MilkyWay90
1
@MillyWay Je pense que la plupart des votes serrés ont eu lieu avant la révision approfondie par ბიმო
Sanchises
9
@ ბიმო Nous avons un consensus pour ne pas éditer les questions hors sujet pour en faire un sujet qui, je pense, aurait été appliqué ici.
Laikoni
2
Quel genre de ficelle? Est-il garanti uniquement en ASCII? Ou devrions-nous gérer l'UTF-8 (et comment?) Par exemple?
FireCubez

Réponses:

11

Attaché , 4 octets

Last

Essayez-le en ligne! (Si l'entrée peut être une liste de caractères, cela &/Speut fonctionner.)

Alternatives

5 octets: `@&-1

8 octets: &/S@List

10 octets: `@«_,-1»

10 octets: Fold!Right

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

10 octets: `^^&:Right

10 octets: {Right^^_}

11 octets: Get«_,-1»

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

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

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

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

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

Conor O'Brien
la source
4
: | wtf tant d'alternatives
ASCII uniquement
1
@ Moins ASCII que je pouvais faire sur un simple défi comme celui-ci: p
Conor O'Brien
Imprimer l' Lastoctet entré. Le contenu des programmes correspond au défi
MilkyWay90
11

code machine x86-16, 2 octets

Comme le souligne @CodyGray correctement, prendre l'entrée en tant que chaîne et la sortie dans un registre supprime la majeure partie de la version du programme autonome.

La chaîne d'entrée est en SI, la longueur en CXet le caractère de sortie est en 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 octets sous forme de "chaîne Pascal" (la longueur est ajoutée au début de la chaîne):

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 octets sous forme de "chaîne C" (terminée par zéro / nul), saisissez 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

code machine x86-16, IBM PC DOS, 12 11 10 octets

Ou programme aussi complet que l'exécutable IBM PC DOS. L'entrée provient de la ligne de commande, la sortie est de la 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

Production:

entrez la description de l'image ici

640 Ko
la source
Bien que cela obtienne certainement des points de style, d'un point de vue strict du golf, il convient de noter que vous êtes autorisé à écrire des fonctions qui renvoient le résultat dans un registre. Ainsi, cela peut devenir beaucoup plus court. Vous pouvez éliminer trivialement 4 octets, et une réécriture pourrait le réduire encore plus. Au fait, est-ce que cette capture d'écran provient d'un émulateur? Laquelle?
Cody Gray
@CodyGray, oh absolument, le code pour prendre l'entrée de la ligne de commande et la sortie vers la console est presque tout. Ouais, je pourrais dire "chaîne d'entrée dans SI, la longueur dans le caractère de CXsortie est dans AL" et ensuite je pense que le seul code qui serait nécessaire est REPZ LODSB(2 octets) et nous aurions terminé. Bien sûr, cette approche ne serait pas la façon dont vous le faites si vous codiez pour l'efficacité, pas pour la taille. Votre point est très bien pris cependant, je le posterai aussi comme une fonction qui fait la viande du travail.
640 Ko
7

Brainf ***, 7 octets

,[>,]<.
SuperJedi224
la source
ideone.com/XoJLD0 Ça ne marche toujours pas; (
jean
@jean Essayez-le ici . (Honnêtement, je ne savais même pas que quelqu'un avait fait BF).
SuperJedi224
Oui, dans votre lien, tout fonctionne bien. Mais le juge en ligne pour ce problème utilise idéone où cela ne fonctionne pas; (
jean
@jean ideone semble utiliser -1l'EOF. +[>,+]<-.devrait fonctionner
Jo King
@Jo King Désolé, mais l'entrée ressemble à: 29845812674 [entrer] [EOF] comment imprimer le dernier chiffre?
jean
7

MATL, 2 octets

0)

MATL utilise une indexation modulaire basée sur 1, de sorte que cette solution saisit l'élément en 0position -th de l'entrée qui est la même que la dernière depuis le 0bouclage jusqu'à la fin.

Essayez-le sur MATL Online

Explication

    % 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
la source
Je serais parti pour J)...
Sanchises
5

Javascript, 14 octets

a=>a.slice(-1)
SuperJedi224
la source
J'ai fait de mon mieux pour trouver un moyen plus court, mais à ma grande surprise, je ne pense pas que cela puisse être amélioré, sauf s'il existe un moyen amusant d'inverser une chaîne en moins de 8 octets, avant d'appeler [0]. Ou peut-être s'il existe un moyen court d'obtenir la longueur du tableau. Approche différente: a=>[...a].pop()(15 octets)
Matsyir
4

Python 3 , 14 octets

lambda x:x[-1]

Essayez-le en ligne!

MilkyWay90
la source
Je me sens stupide, comment appelez-vous cela sans le déclarer à une variable?
Nathan Dimmer
J'ai regardé votre TIO, mais ça n'a pas beaucoup de sens ... Que faites-vous dans votre en-tête?
Nathan Dimmer
1
@Bobawob Pour votre première question, les lambdas anonymes sont autorisés pour les réponses (je l'appelle en utilisant en assignant le lambda à la variable edans l'en-tête). Pour votre deuxième question, l'en-tête est e=\ , ce qui signifie essentiellemente=lambda x:x[-1]
MilkyWay90
Notez que dans mon commentaire ci-dessus, il n'est pas censé y avoir d'espace de fin e=\ mais Markdown échappe au caractère de code, donc je dois ajouter un espace de fin
MilkyWay90
C'est vraiment cool! Je vous remercie!
Nathan Dimmer
4

Bash + coreutils, 8 octets

tail -c1

L'entrée est de stdin, la sortie est de stdout.

pizzapants184
la source
4

TI-BASIC (TI-84), 10 octets

sub(Ans,length(Ans),1

Obtient le dernier caractère de la chaîne d'entrée.
L'entrée est en Ans.
La sortie est Ansentrée et est automatiquement imprimée.

Tau
la source
4

Haskell , 9 4 octets

last

Essayez-le en ligne!

flawr
la source
Pourquoi s'embêter pure? Ça ne lastsuffit pas ?
dfeuer
J'ai supposé que la sortie devait aussi être une chaîne, mais vous avez raison, OP ne parle que d '"octets".
flawr
3

Java 8

Entrée depuis STDIN, 71 octets

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

Essayez-le en ligne!

Argument de fonction, 25 octets

s->s.charAt(s.length()-1)
Benjamin Urquhart
la source
Vous pouvez ajouter le code de l'argument programme pour avoir les trois options. :) Dommage que OP demande spécifiquement des chaînes, sinon s->s[s.length-1]cela aurait suffi avec un char[]type de paramètre.
Kevin Cruijssen
61 octets .
Olivier Grégoire
3

Cubix , 6 octets

pA/@po

Essayez-le en ligne!

  p
A / @ p
  o

Regardez-le courir

  • A Prend toutes les entrées
  • / Rediriger autour du cube
  • pp ramener le bas de la pile au sommet deux fois
  • o/@ sortie en tant que caractère, rediriger et arrêter
MickyT
la source
3

Befunge-93 , 12 15 octets

:1+_p1-,@>~#

Essayez-le en ligne!

Merci à @Jo King d'avoir joué au golf sur 3 octets.

Version alternative de 15 octets moins salissante:

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

La prise de chaînes en entrée dans Befunge n'est pas la plus simple. S'il y avait une seule commande pour saisir plusieurs caractères, ce serait aussi simple que de lire la chaîne, de sauter / imprimer le premier caractère et de quitter.

JPeroutek
la source
En fait, $$au lieu de p1devrait fonctionner sans avertissement pour le même nombre d'octets
Jo King
3

Turing Machine But Way Pire , 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

Essayez-le en ligne!

EXPLICATION

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
la source
3

Gelée , 1 octet

Essayez-le en ligne!

Pas le défi le plus difficile de Jelly ...

Notez que cela accepte l'entrée en tant que chaîne; si l'entrée peut être interprétée autrement (par exemple un nombre, une liste), alors l'argument devra être cité (par exemple "123456" ou "[123,197]"). Alternativement, cela peut être vu comme un lien qui prend un tableau d'octets et renvoie le dernier membre de ce tableau, conformément aux règles standard de PPCG.

Merci à @ MilkyWay90 et @ ბიმო de l'avoir signalé.

Nick Kennedy
la source
-1 Échoue pour n'importe quel numéro ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90
@ MilkyWay90: N'a pas besoin d'être un programme complet, cela fonctionnera probablement comme une fonction Jelly prenant une chaîne. Mais là encore, je ne connais pas Jelly, donc je peux me tromper.
ბიმო
D'accord, je vais essayer de voir si cela fonctionnera comme un lien
MilkyWay90
@ ბიმო Semble fonctionner (OP pouvez-vous modifier la réponse afin que je puisse annuler mon downvote?)
MilkyWay90
Vous pouvez simplement définir le T comme un lien et lui faire entrer une chaîne, supprimant le besoin de "" dans votre entrée.
MilkyWay90
3

Excel, 10 octets

À peu près équivalent à la réponse VBA de @ remoel:

=RIGHT(A1)
Wernisch
la source
3

Cascade , 9 octets

?a|,
;.]^

Assez satisfait de cela, car il ne fait que 3 octets de plus que mon programme de chat

Étendu

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

Cela passe essentiellement en boucle en poussant les caractères d'entrée dans la apile jusqu'à ce que EOF soit atteint. Ensuite, il sort l'élément en haut de la apile en utilisant .a.

Essayez-le en ligne!

EdgyNerd
la source
2

SmileBASIC, 16 octets

INPUT S$?POP(S$)
12Me21
la source
2

Brindille, 37 octets

Cela utilise simplement une approche "extraire 1 caractère de la fin et l'imprimer".

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

C'était vraiment facile à faire et à tester, mais c'était amusant!


Pour l'utiliser, vous devez le mettre dans un .twigfichier et l'importer:

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

Vous pouvez le tester sur https://twigfiddle.com/aa19wd (mallettes de test incluses)

Ismael Miguel
la source
Ok, c'est la première fois que je vois un golf Twig.
Ven
@Ven Je le fais depuis un bon moment. Voici un exemple: codegolf.stackexchange.com/a/174040 et en voici un autre: codegolf.stackexchange.com/a/166800 (j'en ai quelques autres, mais bien)
Ismael Miguel
2

Emotion , 5 octets

😶👉😃😨👿

Explication

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

Essayez-le en ligne!

Quantum64
la source
dans votre fichier Lisez-moi, 1. je pense que "à emoji" devrait être "à partir d'emoji" 2. s'il devrait être "à partir d'emoji" alors emotinomicon et emojicode sont déjà une chose
ASCII uniquement
En fait, ce que vous regardez est la sortie d'un compilateur, qui est également accessible via l'interface en ligne.
Quantum64
Chaque emoji n'est-il pas plus d'un octet? Je pense qu'ils feraient au moins deux octets.
Kyle Delaney
Emotion utilise une page de codes personnalisée. Voir quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek
2

VBA (Excel), 14 12 octets

utilisation de la fenêtre immédiate et de la cellule A1comme entrée

Merci @tsh

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

remoel
la source
1
Est 1facultatif?
tsh
pas sur le deuxième code. Merci :)
remoel
2

Python 3, 11 18 34 octets

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

Utilisation via l'exécution du programme en tant que script python sur la ligne de commande. L'entrée est fournie comme dernier argument du programme.

Essayez-le en ligne!

Mrwerdo
la source
Cela n'imprime rien ni ne renvoie rien d'une fonction - les extraits ne sont pas autorisés, seulement les fonctions ou les programmes complets.
Stephen
Ah je vois, je n'y ai pas pensé quand j'ai pensé à la réponse. Je n'ai pensé qu'à l'exécuter dans l'interprète.
Mrwerdo
38
ASCII uniquement
1
14
ASCII uniquement
2

Formule IBM / Lotus Notes, 11 octets

@Right(i;1)

Formule de champ calculée prenant son entrée dans un champ modifiable i

entrez la description de l'image ici

ElPedro
la source
2

Code de la machine de Turing, 72 42 octets

Suppose une entrée sans cellules vides (espaces). Merci à ASCII uniquement pour avoir économisé 30 octets.

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

Ancienne version en 72 octets:

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

Essayez-le en ligne .

SuperJedi224
la source
1
0 * * r 1/1 * * l 2/1 _ _ l halt/2 * _ r 0?
ASCII uniquement
oi pls réponse: ||
ASCII uniquement
ne fonctionnerait pas de quelle manière? Je l'ai testé en ligne
ASCII uniquement
@ ASCII uniquement Il s'avère que vous avez raison, et j'ai simplement mal interprété la façon dont votre programme fonctionnait réellement. Je pense que c'est suffisamment différent pour que vous puissiez le poster comme une réponse différente si vous le souhaitez.
SuperJedi224
Eh bien, c'est un défi simple, ne pensez pas qu'il ait besoin de plus d'une réponse dans n'importe quelle langue: P
ASCII uniquement
2

C # 8.0 , 8 octets

Nécessite .NET Core 3.0, qui est en version bêta. Cela plante actuellement le CLR en raison d'un bogue, mais une fois le bogue corrigé, cela fonctionnera comme prévu et répondra aux exigences du défi.

s=>s[^1]

C # 8.0 , s'exécute sans se bloquer au moment de l'écriture, 22 octets

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

C # 8.0 , programme complet, 78 octets

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

Arcanox
la source
Le défi mentionne la "sortie", donc la dernière solution est probablement la bonne
Ven
Dang, tu as beaucoup surpassé la réponse de ma console. Comment fonctionne le ^ 1?
Stackstuck
C'est le nouveau type d'index. Le démarrage d'un index avec un array[^n]array[array.Length - n]
signe d'insertion
Intéressant! J'essaie toujours de rester à jour avec les nouvelles fonctionnalités C #. Avez-vous un lien / référence à ce sujet?
mortb
1
Je l'
ai