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


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


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


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

,[>,]<.

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

Je serais parti pour J)...
Sanchises


5

Javascript, 14 octets

a=>a.slice(-1)

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!


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.


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.







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.


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

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


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

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!





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)


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!


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)


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!


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




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


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 .


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.