Wydrukuj ostatnio wprowadzony bajt

12

Wyzwanie

Masz jeden ciąg bajtów wejściowych, wypisz w nim ostatni bajt.

Zasady

Twoje zgłoszenie może być programem lub funkcją wysyłającą ostatni bajt na wejściu, który

  • jest argumentem łańcuchowym, standardowym lub wiersza poleceń, oraz
  • jest niepusty

Próbowałem rozwiązać ten problem za pomocą pieprzenia mózgu, jednak wszystkie języki mogą brać udział. To jest .

Przykłady

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

Katalog

Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

## Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:

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

drelich
źródło
4
Witaj, Zmieniłem twoje pytanie, aby lepiej pasowało do naszego formatu (pamiętaj, że do tego zwykle służy piaskownica ). Jednak w obecnym stanie wyzwanie jest bardzo łatwe (również w BF), więc nie jestem tego pewien.
ბიმო
11
Głosuję przeciwko zamknięciu; może to być trywialne, ale to nie wyklucza tematu
MilkyWay90
1
@MillyWay Myślę, że większość zamkniętych głosów była przed obszerną edycją ბიმო
Sanchises,
9
@ ბიმო Jesteśmy zgodni, aby nie edytować pytań nie na temat, aby uczynić je tematami, które moim zdaniem byłyby tutaj zastosowane.
Laikoni
2
Jaki rodzaj sznurka? Czy na pewno jest to tylko ASCII? A może powinniśmy na przykład obsługiwać UTF-8 (i jak?)?
FireCubez

Odpowiedzi:

11

Attache , 4 bajty

Last

Wypróbuj online! (Jeśli wejście może być listą znaków, &/Smoże działać.)

Alternatywy

5 bajtów: `@&-1

8 bajtów: &/S@List

10 bajtów: `@«_,-1»

10 bajtów: Fold!Right

10 bajtów: `@<~_,-1~>

10 bajtów: `^^&:Right

10 bajtów: {Right^^_}

11 bajtów: Get«_,-1»

11 bajtów: Get<~_,-1~>

12 bajtów: `@«_,#_-1»

12 bajtów: `@<~_,#_-1~>

13 bajtów: Get«_,#_-1»

13 bajtów: Get<~_,#_-1~>

Conor O'Brien
źródło
4
: | wtf tak wiele alternatyw
tylko ASCII
1
@ Tylko ASCII Najmniej mogę zrobić z prostym wyzwaniem, takim jak to: p
Conor O'Brien
Wydrukuj Lastwprowadzony bajt. Treść programów pasuje do wyzwania
MilkyWay90
11

kod maszynowy x86-16, 2 bajty

Jak słusznie wskazuje @CodyGray, przyjmowanie danych wejściowych jako ciągów i wysyłanie ich do rejestru usuwa większość samodzielnej wersji programu.

Łańcuch wejściowy jest w SI, długość w, CXa znak wyjściowy w 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.

Lub 4 bajty jako „ciąg Pascala” (długość jest dodawana do początku łańcucha):

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.

Lub 5 bajtów jako „ciąg C” (zakończony zerami / zerami), wprowadź 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

kod maszynowy x86-16, IBM PC DOS, 12 11 10 bajtów

Lub tak kompletny program, jak program wykonywalny IBM PC DOS. Dane wejściowe pochodzą z wiersza poleceń, dane wyjściowe na konsolę.

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

Wynik:

wprowadź opis zdjęcia tutaj

640 KB
źródło
Chociaż z pewnością dostaje to punkty stylu, z ścisłego punktu widzenia golfa, warto zauważyć, że możesz pisać funkcje, które zwracają wynik w rejestrze. Może to być znacznie krótsze. Możesz w trywialny sposób wyeliminować 4 bajty, a przepisanie może jeszcze bardziej zmniejszyć. Nawiasem mówiąc, czy ten zrzut ekranu z emulatora? Który?
Cody Gray
@CodyGray, och, absolutnie, kod do pobrania danych z wiersza poleceń i wyjścia do konsoli to prawie wszystko. Tak, mógłbym powiedzieć „wejściowy ciąg wejściowy SI, długość CXwyjściowego znaku wyjściowego jest w AL”, a potem myślę, że jedynym kodem, który byłby potrzebny, są REPZ LODSB(2 bajty) i to byśmy zrobili. Oczywiście to podejście nie byłoby takie, jak to robisz, jeśli kodujesz pod kątem wydajności, a nie rozmiaru. Twój punkt widzenia jest jednak bardzo dobrze przyjęty, opublikuję go również jako funkcję, która jest podstawą pracy.
640 KB
7

Brainf ***, 7 bajtów

,[>,]<.
SuperJedi224
źródło
ideone.com/XoJLD0 To wciąż nie działa; (
Jean
@jean Wypróbuj tutaj . (Szczerze mówiąc, nawet nie wiedziałem, że ideone zrobił BF).
SuperJedi224,
Tak, w twoim linku wszystko działa dobrze. Ale sędzia online dla tego problemu używa ideonu tam, gdzie to nie działa;
Jean
@jean ideone wydaje się używać -1jako EOF. +[>,+]<-.powinien działać
Jo King
@Jo King Przepraszam, ale dane wejściowe wyglądają następująco: 29845812674 [enter] [EOF] jak mogę wydrukować ostatnią cyfrę?
Jean
7

MATL, 2 bajty

0)

MATL wykorzystuje modułowe indeksowanie oparte na 1, więc to rozwiązanie chwyta element w 0-tej pozycji wejścia, która jest taka sama jak ostatnia od momentu 0zawinięcia do końca.

Wypróbuj to w MATL Online

Wyjaśnienie

    % 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
źródło
J)
Poszedłbym
6

PHP , 13 bajtów

<?=$argn[-1];

Wypróbuj online!

Uruchom z php -nFwejściem to STDIN. Przykład:

$ echo 29845812674|php -nF lost.php
640 KB
źródło
5

JavaScript, 14 bajtów

a=>a.slice(-1)
SuperJedi224
źródło
Starałem się jak najlepiej znaleźć krótszy sposób, ale ku mojemu zaskoczeniu nie sądzę, że można to poprawić, chyba że istnieje fajny sposób na odwrócenie łańcucha poniżej 8 bajtów przed wywołaniem [0]. A może, jeśli istnieje krótka droga do uzyskania długości tablicy. Inne podejście: a=>[...a].pop()(15 bajtów)
Matsyir
4

Python 3 , 14 bajtów

lambda x:x[-1]

Wypróbuj online!

MilkyWay90
źródło
Czuję się głupio, jak to się nazywa, nie zgłaszając zmiennej?
Nathan Dimmer
Spojrzałem na twoje TIO, ale to nie ma większego sensu ... Co robisz w swoim nagłówku?
Nathan Dimmer
1
@ Bobawob W przypadku pierwszego pytania anonimowe lambdy są dozwolone dla odpowiedzi (nazywam to za pomocą przypisania lambda do zmiennej ew nagłówku). Drugim pytaniem jest nagłówek e=\ , co w zasadzie oznaczae=lambda x:x[-1]
MilkyWay90
Zauważ, że w moim powyższym komentarzu nie powinno być spacji końcowej, e=\ ale Markdown ucieka przed znakiem kodu, więc muszę dodać spację końcową
MilkyWay90
To jest naprawdę fajne! Dziękuję Ci!
Nathan Dimmer
4

Bash + coreutils, 8 bajtów

tail -c1

Dane wejściowe są od wejścia standardowego, dane wyjściowe do wejścia standardowego.

pizzapanty184
źródło
4

TI-BASIC (TI-84), 10 bajtów

sub(Ans,length(Ans),1

Pobiera ostatni znak w ciągu wejściowym.
Wejście jest w Ans.
Wyjście jest włączone Ansi jest automatycznie drukowane.

Tau
źródło
4

Haskell , 9 4 bajty

last

Wypróbuj online!

wada
źródło
Po co zawracać sobie głowę pure? Nie lastwystarczy
dfeuer
Zakładałem, że wyjście również musi być ciągiem, ale masz rację, OP mówi tylko o „bajtach”.
flawr
3

Java 8

Dane wejściowe ze STDIN, 71 bajtów

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

Wypróbuj online!

Argument funkcji, 25 bajtów

s->s.charAt(s.length()-1)
Benjamin Urquhart
źródło
Możesz dodać kod dla argumentu programu, aby mieć wszystkie trzy opcje. :) Szkoda, że ​​OP konkretnie prosi o napisy, w przeciwnym razie s->s[s.length-1]wystarczyłoby z char[]parametrem typu.
Kevin Cruijssen
61 bajtów .
Olivier Grégoire
3

Cubix , 6 bajtów

pA/@po

Wypróbuj online!

  p
A / @ p
  o

Zobacz, jak biegnie

  • A Pobiera wszystkie dane wejściowe
  • / Przekieruj wokół kostki
  • pp dwukrotnie przenieś spód stosu na górę
  • o/@ wyjście jako znak, przekierowanie i zatrzymanie
MickyT
źródło
3

Befunge-93 , 12 15 bajtów

:1+_p1-,@>~#

Wypróbuj online!

Dzięki @Jo King za grę w golfa z 3 bajtów.

Alternatywna 15-bajtowa wersja, która jest mniej chaotyczna:

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

Pobieranie ciągów jako danych wejściowych w Befunge nie jest najłatwiejsze. Gdyby istniało jedno polecenie do przyjęcia wielu znaków, byłoby to tak proste, jak odczytanie ciągu, wstawienie / wydrukowanie górnego znaku i wyjście.

JPeroutek
źródło
W rzeczywistości $$zamiast p1działać bez ostrzeżenia dla tej samej ilości bajtów
Jo King
3

Maszyna Turinga, ale gorzej , 391 bajtów

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

Wypróbuj online!

WYJAŚNIENIE

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
źródło
3

Galaretka , 1 bajt

Wypróbuj online!

Nie najtrudniejsze wyzwanie w galaretce ...

Zauważ, że akceptuje to wejście jako ciąg; jeśli dane wejściowe mogłyby zostać zinterpretowane inaczej (np. liczba, lista), wówczas argument trzeba będzie zacytować (np. „123456” lub „[123, 197]”). Alternatywnie może to być postrzegane jako łącze, które pobiera tablicę bajtów i zwraca ostatniego członka tej tablicy, zgodnie ze standardowymi zasadami PPCG.

Dzięki @ MilkyWay90 i @ ბიმო za zwrócenie na to uwagi.

Nick Kennedy
źródło
-1 kończy się niepowodzeniem dla dowolnego numeru ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90
@ MilkyWay90: Nie musi to być pełny program, prawdopodobnie będzie to działać jako funkcja Jelly pobierająca ciąg znaków. Ale z drugiej strony nie znam Galaretki, więc mogę się mylić.
ბიმო
Dobra, postaram się sprawdzić, czy będzie działać jako łącze
MilkyWay90
@ ბიმო Wydaje się, że działa (OP możesz edytować odpowiedź, aby cofnąć głosowanie?)
MilkyWay90
Możesz po prostu zdefiniować T jako link i zmusić go do wprowadzenia ciągu znaków, eliminując potrzebę wprowadzania znaku „” w danych wejściowych.
MilkyWay90
3

Excel, 10 bajtów

Prawie równoważne z odpowiedzią VBA @ remoel:

=RIGHT(A1)
Wernisch
źródło
3

Kaskada , 9 bajtów

?a|,
;.]^

Całkiem zadowolony z tego, ponieważ jest tylko 3 bajty dłuższy niż mój program cat

Rozszerzony

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

Zasadniczo po prostu zapętla się przez wypychanie znaków wejściowych do astosu aż do osiągnięcia EOF. Następnie wysyła element na górze astosu za pomocą .a.

Wypróbuj online!

EdgyNerd
źródło
2

PowerShell, 11 bajtów

"$args"[-1]

Wypróbuj online!

Gabriel Mills
źródło
2

SmileBASIC, 16 bajtów

INPUT S$?POP(S$)
12Me21
źródło
2

Gałązka, 37 bajtów

To po prostu wykorzystuje proste podejście „wyciągnij 1 znak z końca i wydrukuj”.

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

To było naprawdę łatwe do zrobienia i przetestowania, ale było zabawne!


Aby go użyć, musisz umieścić go w .twigpliku i zaimportować:

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

Możesz to przetestować na https://twigfiddle.com/aa19wd (walizki w zestawie)

Ismael Miguel
źródło
Ok, po raz pierwszy widzę golfa Twig.
Ven
@Ven Robię to od dłuższego czasu. Oto przykład: codegolf.stackexchange.com/a/174040, a oto kolejny: codegolf.stackexchange.com/a/166800 (Mam jeszcze kilka, ale dobrze)
Ismael Miguel
2

Emocja , 5 bajtów

😶👉😃😨👿

Wyjaśnienie

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

Wypróbuj online!

Quantum64
źródło
w twoim pliku Readme: 1. myślę, że „emoji” powinno być „emoji” 2. jeśli powinno być „emoji”, to emotinomicon i emojicode to już coś
tylko ASCII
Tak naprawdę to, czego szukasz, to dane wyjściowe kompilatora, do którego można również uzyskać dostęp za pośrednictwem interfejsu online.
Quantum64,
Czy każde emoji nie jest więcej niż jednym bajtem? Sądzę, że będą to co najmniej dwa bajty.
Kyle Delaney
Emotion używa niestandardowej strony kodowej. Zobacz quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek
2

VBA (Excel), 14 12 bajtów

używając Immediate Window i Cell A1jako danych wejściowych

Dzięki @tsh

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

remoel
źródło
1
Jest 1opcjonalny?
tsh
nie na drugim kodzie. Dzięki :)
remoel
2

Python 3, 11 18 34 bajtów

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

Wykorzystanie poprzez uruchomienie programu jako skrypt Pythona w wierszu poleceń. Dane wejściowe są dostarczane jako ostatni argument programu.

Wypróbuj online!

Mrwerdo
źródło
To nic nie drukuje ani nie zwraca niczego z funkcji - fragmenty nie są dozwolone, tylko funkcje lub pełne programy.
Stephen
Ach, rozumiem, nie myślałem o tym, kiedy myślałem o odpowiedzi. Myślałem tylko o uruchomieniu go w tłumaczu.
Mrwerdo
38
Tylko ASCII,
1
14
Tylko ASCII
2

Formuła IBM / Lotus Notes, 11 bajtów

@Right(i;1)

Formuła pola obliczeniowego, pobierająca dane wejściowe z pola edytowalnego i

wprowadź opis zdjęcia tutaj

ElPedro
źródło
2

Kod maszynowy Turinga, 72 42 bajty

Zakłada dane wejściowe bez pustych komórek (spacji). Dzięki ASCII tylko za oszczędność 30 bajtów.

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

Stara wersja w 72 bajtach:

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

Wypróbuj online .

SuperJedi224
źródło
1
0 * * r 1/1 * * l 2/1 _ _ l halt/2 * _ r 0?
Tylko ASCII
Odpowiedź na pytanie: ||
Tylko ASCII
nie działa w jaki sposób? Przetestowałem to online
tylko ASCII
@ Tylko ASCII Okazuje się, że masz rację, a ja po prostu źle zinterpretowałem sposób działania twojego programu. Myślę, że jest na tyle inny, że możesz opublikować go jako inną odpowiedź, jeśli chcesz.
SuperJedi224,
Cóż, jest to proste wyzwanie, nie sądzę, że wymaga więcej niż jednej odpowiedzi w dowolnym języku: P
tylko ASCII
2

C # 8.0 , 8 bajtów

Wymaga .NET Core 3.0, który jest w wersji beta. Obecnie powoduje to awarię CLR z powodu błędu, ale gdy błąd zostanie naprawiony, uruchomi się zgodnie z oczekiwaniami i spełni wymagania dotyczące wyzwania.

s=>s[^1]

C # 8.0 , Działa bez awarii w momencie pisania, 22 bajtów

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

C # 8.0 , pełny program, 78 bajtów

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

Arcanox
źródło
Wyzwanie wspomina o „wynikach”, więc ostatnie rozwiązanie jest prawdopodobnie właściwe
Ven
Cholera, bardzo często przeoczyłeś moją konsolę. Jak działa ^ 1?
Stackstuck
To nowy typ indeksu. Rozpoczęcie indeksu od karetki oznacza, że ​​jest on od końca, tj. array[^n]Jest taki sam jakarray[array.Length - n]
Arcanox
Ciekawy! Zawsze staram się być na bieżąco z nowymi funkcjami języka C #. Czy masz na ten temat link / odnośnik?
Mortb