Zuletzt eingegebenes Byte drucken

12

Herausforderung

Sie haben eine Zeichenfolge von Eingabebytes, geben das letzte Byte darin aus.

Regeln

Ihre Übermittlung kann ein Programm oder eine Funktion sein, die das letzte Byte in der Eingabe ausgibt

  • ist entweder ein String-, ein stdin- oder ein Befehlszeilenargument und
  • ist nicht leer.

Ich habe versucht, dies mit Brainfuck zu lösen, aber alle Sprachen dürfen teilnehmen. Das ist .

Beispiele

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

Der Katalog

Das Stack-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.

Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift unter Verwendung der folgenden Markdown-Vorlage:

## Language Name, N bytes

Wo Nist die Größe Ihrer Einreichung? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:

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

Wenn Sie dort mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder Sie die Strafen für Dolmetscherflaggen separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:

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

Sie können den Sprachnamen auch zu einem Link machen, der dann im Snippet angezeigt wird:

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

Jean
quelle
4
Willkommen, ich habe Ihre Frage geändert, um sie besser an unser Format anzupassen (beachten Sie, dass dies normalerweise für die Sandbox vorgesehen ist). In seinem gegenwärtigen Zustand ist die Herausforderung jedoch sehr einfach (auch in bf), daher bin ich mir nicht sicher.
17.
11
Ich stimme gegen das Schließen; es mag trivial sein, aber das macht es nicht offtopic
MilkyWay90
1
@MillyWay Ich denke, die meisten der engen Stimmen waren vor der umfangreichen Bearbeitung von ბიმო
Sanchises
9
@ ბიმო Wir haben einen Konsens nicht zu bearbeiten Wegthema Fragen sie beim Thema zu machen , die ich denke , hier angewandt hätte.
Laikoni
2
Was für eine Saite? Ist es garantiert nur ASCII? Oder sollten wir zum Beispiel mit UTF-8 umgehen (und wie?)?
FireCubez

Antworten:

11

Attache , 4 Bytes

Last

Probieren Sie es online aus! (Wenn die Eingabe eine Liste von Zeichen sein &/Skönnte , könnte funktionieren.)

Alternativen

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
quelle
4
: | wtf so viele Alternativen
ASCII-nur
1
@ Nur ASCII Am wenigsten konnte ich eine einfache Herausforderung wie diese bewältigen: p
Conor O'Brien
Drucken Lasteingegebene Byte. Die Programminhalte passen zur Herausforderung
MilkyWay90
11

x86-16 Maschinencode, 2 Bytes

Wie @CodyGray richtig hervorhebt, wird durch die Eingabe als Zeichenfolge und Ausgabe in ein Register der Großteil der eigenständigen Programmversion entfernt.

Die Eingabezeichenfolge ist in SI, die Länge in CXund das Ausgabezeichen ist 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.

Oder 4 Bytes als "Pascal-Zeichenfolge" (Länge wird dem Anfang der Zeichenfolge vorangestellt):

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.

Oder 5 Bytes als "C-String" (null / null terminiert), Eingabe 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

x86-16 Maschinencode, IBM PC DOS, 12 11 10 Bytes

Oder so komplettes Programm wie die ausführbare Datei von IBM PC DOS. Die Eingabe erfolgt über die Befehlszeile, die Ausgabe erfolgt über die Konsole.

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

Ausgabe:

Geben Sie hier die Bildbeschreibung ein

640 KB
quelle
Obwohl dies unter strengen Golfgesichtspunkten sicherlich Stilpunkte bringt, ist es erwähnenswert, dass Sie Funktionen schreiben dürfen, die das Ergebnis in ein Register zurückgeben. Das kann also viel kürzer werden. Sie können 4 Bytes trivial eliminieren, und ein Umschreiben könnte es noch weiter verkleinern. Ist das übrigens ein Screenshot von einem Emulator? Welcher?
Cody Gray
@CodyGray, oh absolut, der Code für die Eingabe von der Befehlszeile und die Ausgabe an die Konsole ist fast alles. Ja, ich könnte sagen "Eingabezeichenfolge in SI, Länge in CXAusgabezeichen ist in AL" und dann denke ich, dass der einzige Code, der notwendig wäre, REPZ LODSB(2 Bytes) und wir wären fertig. Natürlich wäre dieser Ansatz nicht so, wie Sie es tun würden, wenn Sie für Effizienz und nicht für Größe programmieren würden. Ihr Punkt ist jedoch sehr gut aufgenommen, ich werde ihn auch als eine Funktion veröffentlichen, die das Fleisch der Arbeit erledigt.
640 KB
7

Brainf ***, 7 Bytes

,[>,]<.
SuperJedi224
quelle
ideone.com/XoJLD0 Es funktioniert immer noch nicht; (
Jean
@ Jean Probieren Sie es hier . (Ehrlich gesagt, ich wusste nicht einmal, dass Ideone BF hat).
SuperJedi224
Ja, in Ihrem Link funktioniert alles einwandfrei. Aber Online-Richter für dieses Problem verwendet Ideone, wo es nicht funktioniert; (
Jean
@ Jean Ideone scheint -1als EOF zu verwenden. +[>,+]<-.sollte funktionieren
Jo King
@Jo King Sorry, aber die Eingabe sieht folgendermaßen aus: 29845812674 [enter] [EOF] Wie kann ich die letzte Ziffer drucken?
jean
7

MATL, 2 Bytes

0)

MATL verwendet eine 1-basierte modulare Indizierung, sodass diese Lösung das Element an der 0-ten Position der Eingabe erfasst, die mit der letzten Position seit dem 0Umbruch bis zum Ende identisch ist .

Probieren Sie es bei MATL Online aus

Erläuterung

    % 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
quelle
Ich wäre gegangen für J)...
Sanchises
5

Javascript, 14 Bytes

a=>a.slice(-1)
SuperJedi224
quelle
Ich habe mein Bestes versucht, um einen kürzeren Weg zu finden, aber zu meiner Überraschung glaube ich nicht, dass dies verbessert werden kann, es sei denn, es gibt eine funky Möglichkeit, einen String vor dem Aufruf in weniger als 8 Bytes umzukehren [0]. Oder vielleicht, wenn es einen kurzen Weg gibt, um die Array-Länge zu ermitteln. a=>[...a].pop()Anderer Ansatz: (15 Bytes)
Matsyir
4

Python 3 , 14 Bytes

lambda x:x[-1]

Probieren Sie es online aus!

MilkyWay90
quelle
Ich fühle mich dumm, wie nennt man das, ohne es zu einer Variablen zu deklarieren?
Nathan Dimmer
Ich habe mir Ihren TIO angesehen, aber es macht nicht viel Sinn ... Was machst du in deinem Header?
Nathan Dimmer
1
@ Bobawob Für Ihre erste Frage sind anonyme Lambdas für Antworten zulässig (ich nenne es mit, indem ich der Variablen ein der Kopfzeile das Lambda zuweise ). Für Ihre zweite Frage ist der Header e=\ , was im Grunde bedeutete=lambda x:x[-1]
MilkyWay90
Beachten Sie, dass in meinem obigen Kommentar kein abschließendes Leerzeichen vorhanden sein soll e=\ , Markdown jedoch dem Codezeichen entgeht, sodass ich ein abschließendes Leerzeichen hinzufügen muss
MilkyWay90
Das ist wirklich cool! Vielen Dank!
Nathan Dimmer
4

Bash + Coreutils, 8 Bytes

tail -c1

Die Eingabe erfolgt von stdin, die Ausgabe von stdout.

pizzapants184
quelle
4

TI-BASIC (TI-84), 10 Bytes

sub(Ans,length(Ans),1

Ruft das letzte Zeichen in der Eingabezeichenfolge ab.
Eingabe ist in Ans.
Die Ausgabe ist in Ansund wird automatisch ausgedruckt.

Tau
quelle
4

Haskell , 9 4 Bytes

last

Probieren Sie es online aus!

fehlerhaft
quelle
Warum sich damit beschäftigen pure? Ist das nicht lastgenug
Feuer
Ich nahm an, dass die Ausgabe auch eine Zeichenfolge sein muss, aber Sie haben Recht, OP spricht nur von "Bytes".
Fehler
3

Java 8

Eingabe von STDIN, 71 Bytes

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

Probieren Sie es online aus!

Funktionsargument, 25 Bytes

s->s.charAt(s.length()-1)
Benjamin Urquhart
quelle
Sie können den Code für das Programmargument hinzufügen , um alle drei Optionen zu erhalten. :) Schade, dass OP speziell nach Strings fragt, sonst s->s[s.length-1]hätte man mit einem char[]Parametertyp gereicht .
Kevin Cruijssen
61 Bytes .
Olivier Grégoire
3

Cubix , 6 Bytes

pA/@po

Probieren Sie es online aus!

  p
A / @ p
  o

Schau es dir an

  • A Übernimmt alle Eingaben
  • / Umleiten um den Würfel
  • pp Bringen Sie den Boden des Stapels zweimal nach oben
  • o/@ Ausgabe als Zeichen, Weiterleiten und Anhalten
MickyT
quelle
3

Befunge-93 , 12 15 Bytes

:1+_p1-,@>~#

Probieren Sie es online aus!

Vielen Dank an @Jo King für das Golfen von 3 Bytes.

Alternative 15-Byte-Version, die weniger chaotisch ist:

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

Es ist nicht einfach, Zeichenfolgen als Eingabe in Befunge zu verwenden. Wenn es einen einzigen Befehl gäbe, der mehrere Zeichen aufnehmen könnte, wäre dies so einfach wie das Lesen der Zeichenfolge, das Poppen / Drucken des obersten Zeichens und das Beenden.

JPeroutek
quelle
Eigentlich sollte $$statt p1ohne Vorwarnung für die gleiche Anzahl von Bytes funktionieren
Jo King
3

Turing Machine, aber viel schlimmer , 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

Probieren Sie es online aus!

ERLÄUTERUNG

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

Gelee , 1 Byte

Probieren Sie es online aus!

Nicht die schwierigste Herausforderung in Jelly ...

Beachten Sie, dass dies die Eingabe als Zeichenfolge akzeptiert. Wenn die Eingabe anders interpretiert werden könnte (z. B. eine Zahl, eine Liste), muss das Argument in Anführungszeichen gesetzt werden (z. B. "123456" oder "[123,197]"). Alternativ kann dies als Link angesehen werden, der ein Byte-Array verwendet und das letzte Mitglied dieses Arrays gemäß den PPCG-Standardregeln zurückgibt.

Vielen Dank an @ MilkyWay90 und @ ბიმო für den Hinweis.

Nick Kennedy
quelle
-1 schlägt für eine beliebige Zahl fehl ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90
@ MilkyWay90: Muss kein vollständiges Programm sein, wahrscheinlich funktioniert dies als Jelly-Funktion, die einen String nimmt. Aber andererseits kenne ich Jelly nicht, also könnte ich mich irren.
17.
Okay, ich werde versuchen zu sehen, ob es als Link funktioniert oder nicht
MilkyWay90
@ ბიმო Scheint zu funktionieren (OP können Sie die Antwort bearbeiten, damit ich meine Ablehnung rückgängig machen kann?)
MilkyWay90
Sie können das T einfach als Link definieren und eine Zeichenfolge eingeben, sodass "" in Ihrer Eingabe nicht mehr erforderlich ist.
MilkyWay90
3

Excel, 10 Bytes

Ziemlich gleichbedeutend mit der VBA-Antwort von @ remoel:

=RIGHT(A1)
Wernisch
quelle
3

Kaskade , 9 Bytes

?a|,
;.]^

Ziemlich zufrieden damit, da es nur 3 Bytes länger ist als mein Katzenprogramm

Erweitert

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

Dies durchläuft im Wesentlichen nur das Durchschieben von Eingabezeichen in den aStapel, bis EOF erreicht ist. Anschließend wird das Element oben im aStapel mit ausgegeben .a.

Probieren Sie es online aus!

EdgyNerd
quelle
2

SmileBASIC, 16 Bytes

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

Zweig, 37 Bytes

Dies verwendet nur einen einfachen Ansatz "1 Zeichen vom Ende extrahieren und drucken".

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

Es war wirklich einfach zu machen und zu testen, aber es hat Spaß gemacht!


Um es zu verwenden, müssen Sie es in eine .twigDatei einfügen und importieren:

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

Sie können es unter https://twigfiddle.com/aa19wd testen (Testfälle enthalten).

Ismael Miguel
quelle
Ok, das ist das erste Mal, dass ich einen Twig Golf sehe.
Ven
@Ven Ich mache das schon eine ganze Weile. Hier ist ein Beispiel: codegolf.stackexchange.com/a/174040 und hier ist ein anderes: codegolf.stackexchange.com/a/166800 (ich habe noch ein paar, aber gut)
Ismael Miguel
2

Emotion , 5 Bytes

😶👉😃😨👿

Erläuterung

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

Probieren Sie es online aus!

Quantum64
quelle
In Ihrer Readme-Datei: 1. Ich denke, "zu Emoji" sollte "von Emoji" sein. 2. Wenn es "von Emoji" sein sollte, dann sind Emoticinicon und Emojicode bereits eine Sache
ASCII-only
Eigentlich handelt es sich um eine Ausgabe von einem Compiler, auf den auch über die Online-Schnittstelle zugegriffen werden kann.
Quantum64
Ist nicht jedes Emoji mehr als ein Byte? Ich würde denken, dass sie mindestens zwei Bytes sind.
Kyle Delaney
Emotion verwendet eine benutzerdefinierte Codepage. Siehe quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek
2

VBA (Excel), 14 12 Bytes

Verwenden von Sofortfenster und Zelle A1als Eingabe

Danke @tsh

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

remoel
quelle
1
Ist 1optional?
tsh
nicht auf dem zweiten Code. Danke :)
Remoel
2

Python 3, 11 18 34 Bytes

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

Verwendung über das Ausführen des Programms als Python-Skript in der Befehlszeile. Die Eingabe wird als letztes Argument für das Programm bereitgestellt.

Probieren Sie es online aus!

Mrwerdo
quelle
Dies druckt nichts oder gibt nichts von einer Funktion zurück - Snippets sind nicht erlaubt, nur Funktionen oder vollständige Programme.
Stephen
Ah, ich verstehe, habe nicht darüber nachgedacht, als ich über die Antwort nachdachte. Ich dachte nur daran, es im Dolmetscher auszuführen.
Mrwerdo
38
ASCII-
1
14
ASCII-
2

IBM / Lotus Notes-Formel, 11 Byte

@Right(i;1)

Berechnete Feldformel, die ihre Eingabe aus einem bearbeitbaren Feld bezieht i

Geben Sie hier die Bildbeschreibung ein

ElPedro
quelle
2

Turing Machine Code, 72 42 Bytes

Nimmt eine Eingabe ohne leere Zellen (Leerzeichen) an. Dank ASCII-only für das Speichern von 30 Bytes.

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

Alte Version in 72 Bytes:

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

Probieren Sie es online aus .

SuperJedi224
quelle
1
0 * * r 1/1 * * l 2/1 _ _ l halt/2 * _ r 0?
Nur ASCII
Antwort: ||
Nur ASCII
würde nicht auf welche Weise funktionieren? Ich habe es online getestet
ASCII-
@ Nur ASCII Es stellt sich heraus, dass Sie richtig liegen, und ich habe einfach falsch interpretiert, wie Ihr Programm tatsächlich funktioniert hat. Ich denke, es ist anders genug, dass Sie es als eine andere Antwort posten können, wenn Sie wollen.
SuperJedi224
Nun, dies ist eine einfache Herausforderung, denken Sie nicht, dass es mehr als eine Antwort in einer Sprache braucht: P
ASCII-nur
2

C # 8.0 , 8 Bytes

Benötigt .NET Core 3.0, das sich in der Beta befindet. Dies stürzt derzeit die CLR aufgrund eines Fehlers ab. Sobald der Fehler behoben ist, wird dieser wie erwartet ausgeführt und erfüllt die Anforderungen an die Herausforderung.

s=>s[^1]

C # 8.0 , Läuft zum Zeitpunkt des Schreibens ohne Absturz, 22 Byte

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

C # 8.0 , Vollprogramm, 78 Bytes

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

Arcanox
quelle
Die Herausforderung erwähnt "Ausgabe", daher ist die letzte Lösung wahrscheinlich die richtige
Ven
Dang, du hast meine Konsolenantwort um ein Vielfaches übertroffen. Wie funktioniert die ^ 1?
Stackstuck
Es ist der neue Indextyp. Das Starten eines Index mit einem Caret zeigt an, dass es vom Ende ist, dh es array[^n]ist dasselbe wiearray[array.Length - n]
Arcanox
Interessant! Ich versuche immer, mit neuen C # -Funktionen auf dem Laufenden zu bleiben. Haben Sie einen Link / eine Referenz dazu?
Mortb