Stampa l'ultimo byte immesso


12

Sfida

Hai una stringa di byte di input, genera l'ultimo byte in esso.

Regole

Il tuo invio può essere un programma o una funzione che emette l'ultimo byte nell'input che

  • è una stringa, uno stdin o argomenti della riga di comando e
  • non è vuoto.

Stavo cercando di risolvere questo problema con brainfuck, tuttavia tutte le lingue sono autorizzate a partecipare. Questo è .

Esempi

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

Il catalogo

Lo snippet di stack in fondo a questo post genera il catalogo dalle risposte a) come elenco della soluzione più breve per lingua eb) come classifica generale.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

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

Se si desidera includere più numeri nell'intestazione (ad esempio perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

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

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet:

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


4
Benvenuto, ho modificato la tua domanda in modo che si adatti al nostro formato in modo più adeguato (nota che questo è lo scopo della sandbox , di solito). Tuttavia nel suo stato attuale la sfida è molto semplice (anche in bf), quindi non ne sono sicuro.
ბიმო

11
Voto contro la chiusura; può essere banale, ma ciò non lo rende offtopico
MilkyWay90

1
@MillyWay Penso che la maggior parte dei voti stretti siano stati prima dell'ampia modifica di ბიმო
Sanchises

9
@ ბიმო Abbiamo il consenso a non modificare le domande fuori tema per renderle in tema che, a mio avviso, avrebbero applicato qui.
Laikoni,

2
Che tipo di stringa? È garantito che sia solo ASCII? O dovremmo gestire UTF-8 (e come?) Per esempio?
FireCubez,

Risposte:


11

Attache , 4 byte

Last

Provalo online! (Se l'input potrebbe essere un elenco di caratteri, &/Spotrebbe funzionare.)

alternative

5 byte: `@&-1

8 byte: &/S@List

10 byte: `@«_,-1»

10 byte: Fold!Right

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

10 byte: `^^&:Right

10 byte: {Right^^_}

11 byte: Get«_,-1»

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

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

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

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

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


4
: | wtf così tante alternative
solo ASCII il

1
@ Solo ASCII Almeno potrei fare una semplice sfida come questa: p
Conor O'Brien,

Stampa Lastbyte inserito. I contenuti del programma si adattano alla sfida
MilkyWay90,

11

codice macchina x86-16, 2 byte

Come sottolinea correttamente @CodyGray, portare input come stringa e output in un registro rimuove la maggior parte della versione del programma autonomo.

La stringa di input è in SI, la lunghezza in CXe il carattere di output è in 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 byte come "stringa di Pascal" (la lunghezza è anteposta all'inizio della stringa):

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 byte come una "stringa C" (zero / null terminato), immettere in 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

codice macchina x86-16, IBM PC DOS, 12 11 10 byte

O come programma completo come eseguibile IBM PC DOS. L'input proviene dalla riga di comando, l'output è alla 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

Produzione:

inserisci qui la descrizione dell'immagine


Sebbene questo ottenga certamente punti di stile, dal punto di vista del golf, vale la pena notare che è consentito scrivere funzioni che restituiscono il risultato in un registro. Quindi, questo può essere molto più breve. È possibile eliminare banalmente 4 byte e una riscrittura potrebbe ridurlo ulteriormente. A proposito, quello screenshot è di un emulatore? Quale?
Cody Gray,

@CodyGray, oh assolutamente, il codice per prendere l'input dalla riga di comando e l'output sulla console è quasi tutto. Sì, potrei dire "input string in SI, length in CXoutput char in AL" e quindi penso che l'unico codice che sarebbe necessario sia REPZ LODSB(2 byte) e avremmo finito. Naturalmente questo approccio non sarebbe il modo in cui lo faresti se stavi programmando per l'efficienza, non per le dimensioni. Il tuo punto è molto ben preso, lo posterò anche come una funzione che fa la carne del lavoro.
640 KB

7

Brainf ***, 7 byte

,[>,]<.

ideone.com/XoJLD0 Non funziona ancora; (
jean

@jean Provalo qui . (Onestamente, non sapevo nemmeno che ideone facesse BF).
SuperJedi224

Sì, nel tuo link tutto funziona bene. Ma il giudice online per questo problema usa l'ideone dove non funziona; (
jean

@jean ideone sembra usare -1come EOF. +[>,+]<-.dovrebbe funzionare
Jo King

@Jo King Siamo spiacenti, ma l'immissione è simile a: 29845812674 [invio] [EOF] come posso stampare l'ultima cifra?
Jean

7

MATL, 2 byte

0)

MATL utilizza l'indicizzazione modulare basata su 1, quindi questa soluzione afferra l'elemento nella 0-esima posizione dell'input, che è lo stesso dell'ultimo dall'avvolgimento 0alla fine.

Provalo su MATL Online

Spiegazione

    % 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

Sarei andato per J)...
Sanchises


5

Javascript, 14 byte

a=>a.slice(-1)

Ho fatto del mio meglio per trovare un modo più breve, ma con mia sorpresa non credo che questo possa essere migliorato, a meno che non ci sia un modo funky per invertire una stringa in meno di 8 byte, prima di chiamare [0]. O forse se c'è un modo breve per ottenere la lunghezza dell'array. Approccio diverso: a=>[...a].pop()(15 byte)
Matsyir,

4

Python 3 , 14 byte

lambda x:x[-1]

Provalo online!


Mi sento stupido, come lo chiami senza dichiararlo a una variabile?
Nathan Dimmer,

Ho guardato il tuo TIO, ma non ha molto senso ... Cosa stai facendo nella tua intestazione?
Nathan Dimmer,

1
@Bobawob Per la tua prima domanda, le lambda anonime sono autorizzate per le risposte (lo chiamo usando assegnando lambda alla variabile enell'intestazione). Per la tua seconda domanda, l'intestazione è e=\ , che in pratica significae=lambda x:x[-1]
MilkyWay90

Si noti che nel mio commento sopra, non si suppone che ci sia uno spazio finale in, e=\ ma Markdown sfugge al carattere del codice quindi devo aggiungere uno spazio finale
MilkyWay90

È davvero fantastico! Grazie!
Nathan Dimmer,

4

Bash + coreutils, 8 byte

tail -c1

L'input è dallo stdin, l'output è allo stdout.


4

TI-BASIC (TI-84), 10 byte

sub(Ans,length(Ans),1

Ottiene l'ultimo carattere nella stringa di input.
L'ingresso è in Ans.
L'output è attivo Anse viene stampato automaticamente.






3

Cubix , 6 byte

pA/@po

Provalo online!

  p
A / @ p
  o

Guardalo correre

  • A Accetta tutti gli input
  • / Reindirizzamento attorno al cubo
  • pp porta due volte il fondo della pila in cima
  • o/@ output come carattere, reindirizzamento e arresto

3

Befunge-93 , 12 15 byte

:1+_p1-,@>~#

Provalo online!

Grazie a @Jo King per giocare a golf con 3 byte.

Versione alternativa a 15 byte meno disordinata:

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

Prendere le stringhe come input in Befunge non è il più semplice. Se ci fosse un singolo comando per accettare più caratteri, sarebbe semplice come leggere la stringa, fare scoppiare / stampare il carattere principale ed uscire.


In realtà, $$invece di p1funzionare senza l'avviso per lo stesso numero di byte
Jo King

3

Turing Machine But Way Peggio , 391 byte

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

Provalo online!

SPIEGAZIONE

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

Gelatina , 1 byte

Provalo online!

Non è la sfida più difficile in Jelly ...

Nota che accetta l'input come una stringa; se l'input potrebbe essere interpretato diversamente (ad es. un numero, un elenco), sarà necessario citare l'argomento (ad es. "123456" o "[123.197]"). In alternativa, questo può essere visto come un collegamento che accetta un array di byte e restituisce l'ultimo membro di tale array, in conformità con le regole standard PPCG.

Grazie a @ MilkyWay90 e @ ბიმო per averlo segnalato.



@ MilkyWay90: non deve essere un programma completo, probabilmente funzionerà come una funzione Jelly che prende una stringa. Ma poi non conosco Jelly, quindi potrei sbagliarmi.
ბიმო

Ok, proverò a vedere se funzionerà o meno come link
MilkyWay90

@ ბიმო Sembra funzionare (OP puoi modificare la risposta in modo che io possa annullare il mio voto negativo?)
MilkyWay90

Puoi semplicemente definire la T come un link e fargli inserire una stringa, eliminando la necessità di "" nel tuo input.
MilkyWay90

3

Excel, 10 byte

Praticamente equivalente alla risposta VBA di @ remoel:

=RIGHT(A1)

3

Cascata , 9 byte

?a|,
;.]^

Abbastanza soddisfatto di questo, in quanto è solo 3 byte più lungo di mio programma gatto

allargato

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

Questo essenzialmente scorre semplicemente spingendo i caratteri di input nello astack fino al raggiungimento dell'EOF. Quindi genera l'elemento in cima alla apila usando.a .

Provalo online!





2

Ramoscello, 37 byte

Questo utilizza solo un semplice approccio "Estrai 1 carattere dalla fine e stampalo".

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

È stato davvero facile da fare e testare, ma è stato divertente!


Per usarlo, devi metterlo su un .twigfile e importarlo:

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

Puoi provarlo su https://twigfiddle.com/aa19wd (casi di prova inclusi)


Ok, questa è la prima volta che vedo un golf Ramoscello.
Ven

@Ven lo sto facendo da un po 'di tempo. Ecco un esempio: codegolf.stackexchange.com/a/174040 ed eccone un altro: codegolf.stackexchange.com/a/166800 (ne ho altri, ma bene)
Ismael Miguel


2

Emozione , 5 byte

😶👉😃😨👿

Spiegazione

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

Provalo online!


nel tuo readme, 1. penso che "alle emoji" dovrebbe essere "dalle emoji" 2. se dovrebbe essere "dalle emoji", allora emotinomicon ed emojicode sono già una cosa
ASCII-only

In realtà quello che stai guardando è l'output di un compilatore, a cui puoi accedere anche tramite l'interfaccia online.
Quantum64

Ogni emoji non è più di un byte? Penso che sarebbero almeno due byte.
Kyle Delaney,

Emotion utilizza una tabella codici personalizzata. Vedi quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek

2

VBA (Excel), 14 12 byte

utilizzando la finestra e la cella immediate A1 come input

Grazie @tsh

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


1
È 1facoltativo?
TSH

non sul secondo codice. Grazie :)
rimuovi il

2

Python 3, 11 18 34 byte

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

Utilizzo tramite l'esecuzione del programma come script Python sulla riga di comando. L'input viene fornito come ultimo argomento del programma.

Provalo online!


Questo non stampa nulla o non restituisce nulla da una funzione: non sono consentiti frammenti, solo funzioni o programmi completi.
Stephen,

Ah, vedo, non ci ho pensato quando ho pensato alla risposta. Ho solo pensato di eseguirlo nell'interprete.
Mrwerdo,




2

Formula IBM / Lotus Notes, 11 byte

@Right(i;1)

Formula di campo calcolata prendendo il suo input dal campo modificabile i

inserisci qui la descrizione dell'immagine


2

Codice di Turing Machine, 72 42 byte

Presuppone un input senza celle (spazi) vuote. Grazie solo a ASCII per il salvataggio di 30 byte.

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

Vecchia versione in 72 byte:

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

Provalo online .


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

Risposta dei pls: ||
ASCII il

non funzionerebbe in che modo? L'ho provato online
solo ASCII il

@ Solo ASCII Risulta che tu abbia ragione e io stavo semplicemente fraintendendo il modo in cui il tuo programma ha funzionato. Penso che sia abbastanza diverso da poterlo pubblicare come risposta diversa se lo si desidera.
SuperJedi224,

Bene, questa è una sfida semplice, non pensare che abbia bisogno di più di una risposta in qualsiasi lingua: P
ASCII il

2

C # 8.0 , 8 byte

Richiede .NET Core 3.0, che è in versione beta. Questo attualmente blocca il CLR a causa di un bug, ma una volta risolto il bug, questo funzionerà come previsto e soddisferà i requisiti della sfida.

s=>s[^1]

C # 8.0 , viene eseguito senza arresti anomali al momento della scrittura, 22 byte

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

C # 8.0 , Programma completo, 78 byte

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


La sfida menziona "output", quindi l'ultima soluzione è probabilmente quella giusta
Ven

Dang, hai superato di gran lunga la mia risposta alla console. Come funziona il ^ 1?
Stackstuck,

È il nuovo tipo di indice. L'avvio di un indice con un cursore indica che è dalla fine, ovvero array[^n]è uguale aarray[array.Length - n]
Arcanox

Interessante! Cerco sempre di rimanere aggiornato con le nuove funzionalità di C #. Hai qualche link / riferimento su questo?
mortaio

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.