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


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


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


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

,[>,]<.

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



5

JavaScript, 14 bajtów

a=>a.slice(-1)

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!


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.


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.







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.


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

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.


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

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!





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)


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!


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)


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!


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




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


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 .


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.