Cetak byte terakhir yang dimasukkan

12

Tantangan

Anda memiliki satu string input byte, output byte terakhir di dalamnya.

Aturan

Kiriman Anda dapat berupa program atau fungsi yang mengeluarkan byte terakhir pada input yang mana

  • dapat berupa argumen string, stdin atau baris perintah, dan
  • tidak kosong.

Saya mencoba menyelesaikan ini dengan brainfuck, namun semua bahasa diizinkan untuk berpartisipasi. Ini adalah .

Contohnya

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

Katalog

Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

## Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar penalti penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir dalam tajuk:

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

Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:

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

jean
sumber
4
Selamat datang, saya mengubah pertanyaan Anda agar lebih cocok dengan format kami (perhatikan ini untuk apa sandbox biasanya). Namun dalam kondisi saat ini tantangannya sangat mudah (juga dalam bf), jadi tidak yakin tentang itu.
ბიმო
11
Saya memilih menentang penutupan; itu mungkin sepele, tapi itu tidak membuatnya offtopic
MilkyWay90
1
@MillyWay Saya pikir sebagian besar suara dekat sebelum edit ekstensif oleh ბიმო
Sanchises
9
@ ბიმო Kami memiliki konsensus untuk tidak mengedit pertanyaan di luar topik untuk menjadikannya sesuai dengan topik yang saya pikir akan diterapkan di sini.
Laikoni
2
String apa? Apakah dijamin hanya ASCII? Atau haruskah kita menangani UTF-8 (dan bagaimana?) Misalnya?
FireCubez

Jawaban:

11

Attache , 4 byte

Last

Cobalah online! (Jika inputnya bisa berupa daftar karakter, &/Sbisa berfungsi.)

Alternatif

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

Conor O'Brien
sumber
4
: | wtf begitu banyak alternatif
hanya ASCII
1
@ Hanya ASCII-Setidaknya Saya bisa lakukan pada tantangan sederhana seperti ini: p
Conor O'Brien
Cetak Lastbyte yang dimasukkan. Isi program sesuai dengan tantangan
MilkyWay90
11

kode mesin x86-16, 2 byte

Seperti yang ditunjukkan oleh @CodyGray dengan benar, mengambil input sebagai string dan output ke register menghapus sebagian besar versi program mandiri.

String input dalam SI, panjang CXdan karakter output dalam 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.

Atau 4 byte sebagai "string Pascal" (panjangnya diawali dengan awal string):

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.

Atau 5 byte sebagai "string C" (diakhiri nol / nol), masukkan 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

kode mesin x86-16, IBM PC DOS, 12 11 10 byte

Atau program selengkap IBM PC DOS yang dapat dieksekusi. Input dari baris perintah, output ke 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

Keluaran:

masukkan deskripsi gambar di sini

640KB
sumber
Meskipun ini tentu saja mendapatkan poin gaya, dari sudut pandang bermain golf yang ketat, perlu dicatat bahwa Anda diizinkan untuk menulis fungsi yang mengembalikan hasilnya dalam register. Jadi, ini bisa menjadi jauh lebih pendek. Anda dapat menghilangkan 4 byte secara sepele, dan penulisan ulang dapat menyusutkan lebih jauh. Omong-omong, apakah tangkapan layar itu dari sebuah emulator? Yang mana?
Cody Grey
@CodyGray, oh tentu saja, kode untuk mengambil input dari baris perintah dan output ke konsol hampir semuanya. Ya, saya bisa mengatakan "input string SI, panjang dalam CXoutput char dalam AL" dan kemudian saya pikir satu-satunya kode yang diperlukan adalah REPZ LODSB(2 byte) dan kami akan selesai. Tentu saja pendekatan ini tidak akan bagaimana Anda melakukannya jika Anda mengkode efisiensi, bukan ukuran. Maksud Anda diambil dengan sangat baik, saya akan mempostingnya juga sebagai fungsi yang melakukan pekerjaan daging.
640KB
7

Brainf ***, 7 byte

,[>,]<.
SuperJedi224
sumber
ideone.com/XoJLD0 Masih tidak berfungsi; (
jean
@ Jean Cobalah di sini . (Jujur, saya bahkan tidak tahu ideone melakukan BF).
SuperJedi224
Ya, di tautan Anda semuanya berfungsi dengan baik. Tetapi hakim online untuk masalah ini menggunakan ideone di mana itu tidak bekerja; (
jean
@jean ideone tampaknya digunakan -1sebagai EOF. +[>,+]<-.harus bekerja
Jo King
@ Jo King Maaf, tetapi inputnya seperti: 29845812674 [enter] [EOF] bagaimana saya bisa mencetak digit terakhir?
jean
7

MATL, 2 byte

0)

MATL menggunakan pengindeksan modular berbasis 1 sehingga solusi ini mengambil elemen di 0posisi ke-input yang sama dengan yang terakhir sejak 0membungkus sampai akhir.

Cobalah di MATL Online

Penjelasan

    % 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
sumber
Saya akan pergi untuk J)...
Sanchises
6

PHP , 13 byte

<?=$argn[-1];

Cobalah online!

Jalankan dengan php -nFinput adalah STDIN. Contoh:

$ echo 29845812674|php -nF lost.php
640KB
sumber
5

Javascript, 14 byte

a=>a.slice(-1)
SuperJedi224
sumber
Saya mencoba yang terbaik untuk menemukan cara yang lebih pendek tetapi saya terkejut saya tidak berpikir ini bisa diperbaiki, kecuali ada cara yang funky untuk membalikkan string di bawah 8 byte, sebelum menelepon [0]. Atau mungkin jika ada cara pendek untuk mendapatkan panjang array. Pendekatan berbeda: a=>[...a].pop()(15bytes)
Matsyir
4

Python 3 , 14 byte

lambda x:x[-1]

Cobalah online!

MilkyWay90
sumber
Saya merasa bodoh, bagaimana Anda memanggil ini tanpa menyatakannya ke variabel?
Nathan Dimmer
Saya melihat TIO Anda, tetapi tidak masuk akal ... Apa yang Anda lakukan di header Anda?
Nathan Dimmer
1
@ Bobobob Untuk pertanyaan pertama Anda, lambdas anonim diizinkan untuk jawaban (saya menyebutnya menggunakan dengan menetapkan lambda ke variabel edi header). Untuk pertanyaan kedua Anda, tajuknya adalah e=\ , yang pada dasarnya berartie=lambda x:x[-1]
MilkyWay90
Perhatikan bahwa dalam komentar saya di atas, seharusnya tidak ada spasi tambahan e=\ tetapi Markdown lolos dari karakter kode jadi saya harus menambahkan spasi tambahan
MilkyWay90
Itu keren sekali! Terima kasih!
Nathan Dimmer
4

Bash + coreutils, 8 byte

tail -c1

Input dari stdin, output ke stdout.

pizzapants184
sumber
4

TI-BASIC (TI-84), 10 byte

sub(Ans,length(Ans),1

Mendapat karakter terakhir dalam string input.
Input di Ans.
Keluaran dalam Ansdan secara otomatis dicetak.

Tau
sumber
4

Haskell , 9 4 byte

last

Cobalah online!

cacat
sumber
Kenapa repot-repot pure? Tidak lastcukup?
dfeuer
Saya berasumsi bahwa output harus berupa string juga, tetapi Anda benar, OP hanya berbicara tentang "byte".
flawr
4

Benih , 11 byte

5 370394306

Cobalah online!

Dihasilkan Befunge-98 program ~2j@,itu dicuri dipinjam dari Jo Raja di sini , jadi kredit kepada mereka untuk itu.

Kungfushark
sumber
3

Java 8

Masukan dari STDIN, 71 byte

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

Cobalah online!

Function Argument, 25 byte

s->s.charAt(s.length()-1)
Benjamin Urquhart
sumber
Anda bisa menambahkan kode untuk argumen program untuk memiliki ketiga opsi. :) Sayang sekali OP secara khusus meminta Strings, jika tidak s->s[s.length-1]akan cukup dengan char[]tipe-parameter.
Kevin Cruijssen
61 byte .
Olivier Grégoire
3

Cubix , 6 byte

pA/@po

Cobalah online!

  p
A / @ p
  o

Lihat saja

  • A Mengambil semua input
  • / Arahkan ulang di sekitar kubus
  • pp bawa bagian bawah tumpukan ke atas dua kali
  • o/@ output sebagai karakter, redirect, dan stop
MickyT
sumber
3

Befunge-93 , 12 15 byte

:1+_p1-,@>~#

Cobalah online!

Terima kasih kepada @ Jo King untuk bermain golf 3 byte.

Alternatif versi 15 byte yang tidak terlalu berantakan:

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

Mengambil string sebagai input di Befunge bukan yang termudah. Jika ada satu perintah untuk mengambil beberapa karakter, itu akan sesederhana membaca string, muncul / mencetak karakter teratas, dan keluar.

JPeroutek
sumber
Sebenarnya, $$alih-alih p1harus bekerja tanpa peringatan untuk jumlah byte yang sama
Jo King
3

Turing Machine But Way Worse , 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

Cobalah online!

PENJELASAN

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

Jelly , 1 byte

Cobalah online!

Bukan tantangan tersulit di Jelly ...

Catatan ini menerima input sebagai string; jika input dapat diartikan sebaliknya (mis. angka, daftar), maka argumennya perlu dikutip (mis. "123456" atau "[123.197]"). Atau ini dapat dilihat sebagai tautan yang mengambil array byte dan mengembalikan anggota terakhir array itu, sesuai dengan aturan standar PPCG.

Terima kasih kepada @ MilkyWay90 dan @ ბიმო karena telah menunjukkan ini.

Nick Kennedy
sumber
-1 Gagal untuk nomor apa pun ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90
@ MilkyWay90: Tidak perlu program penuh, mungkin ini akan berfungsi sebagai fungsi Jelly mengambil string. Tapi sekali lagi saya tidak tahu Jelly, jadi saya mungkin salah.
ბიმო
Oke, saya akan mencoba melihat apakah itu akan berfungsi sebagai tautan
MilkyWay90
@ ბიმო Tampaknya berhasil (OP, bisakah Anda mengedit jawaban sehingga saya dapat membatalkan downvote saya?)
MilkyWay90
Anda bisa mendefinisikan T sebagai tautan dan membuatnya memasukkan string, menghilangkan kebutuhan "" pada input Anda.
MilkyWay90
3

Excel, 10 byte

Cukup mirip dengan jawaban VBA @ remoel:

=RIGHT(A1)
Wernisch
sumber
3

Cascade , 9 byte

?a|,
;.]^

Cukup senang dengan ini, karena hanya 3 byte lebih lama dari program kucing saya

Diperluas

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

Ini pada dasarnya hanya loop melalui mendorong karakter input ke astack sampai EOF tercapai. Kemudian output item di bagian atas atumpukan menggunakan .a.

Cobalah online!

EdgyNerd
sumber
2

PowerShell, 11 byte

"$args"[-1]

Cobalah online!

Gabriel Mills
sumber
2

SmileBASIC, 16 byte

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

Ranting, 37 byte

Ini hanya menggunakan pendekatan sederhana "ekstrak 1 char dari ujung dan cetak".

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

Itu sangat mudah dilakukan, dan diuji, tetapi menyenangkan!


Untuk menggunakannya, Anda harus meletakkannya di .twigfile dan mengimpornya:

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

Anda dapat mengujinya di https://twigfiddle.com/aa19wd (termasuk testcases)

Ismael Miguel
sumber
Ok, itu pertama kali saya melihat golf Ranting.
Ven
@Ven, saya sudah melakukannya cukup lama. Berikut ini contohnya: codegolf.stackexchange.com/a/174040 dan ini satu lagi: codegolf.stackexchange.com/a/166800 (Saya punya beberapa lagi, tapi yah)
Ismael Miguel
2

Emosi , 5 byte

😶👉😃😨👿

Penjelasan

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

Cobalah online!

Quantum64
sumber
dalam readme Anda, 1. saya pikir "to emoji" harus "dari emoji" 2. jika harus "dari emoji" maka emotinomicon dan emojicode sudah menjadi hal
ASCII-only
Sebenarnya yang Anda lihat adalah output dari kompiler, yang juga dapat diakses melalui antarmuka online.
Quantum64
Bukankah setiap emoji lebih dari satu byte? Saya pikir mereka setidaknya dua byte.
Kyle Delaney
Emosi menggunakan halaman kode khusus. Lihat quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek
2

VBA (Excel), 14 12 byte

menggunakan Window dan Cell Segera A1 sebagai input

Terima kasih @tsh

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

remoel
sumber
1
Apakah 1opsional?
tsh
bukan pada kode kedua. Terima kasih :)
remoel
2

Python 3, 11 18 34 Bytes

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

Penggunaan melalui menjalankan program sebagai skrip python di baris perintah. Masukan diberikan sebagai argumen terakhir ke program.

Cobalah online!

Mrwerdo
sumber
Ini tidak mencetak apa pun atau mengembalikan apa pun dari suatu fungsi - snippet tidak diperbolehkan, hanya fungsi atau program lengkap.
Stephen
Ah saya mengerti, tidak memikirkan hal itu ketika saya memikirkan jawabannya. Hanya berpikir untuk menjalankannya di interpreter.
Mrwerdo
38
ASCII
1
14
ASCII
2

Formula IBM / Lotus Notes, 11 byte

@Right(i;1)

Rumus bidang terkomputasi mengambil inputnya dari bidang yang dapat diedit i

masukkan deskripsi gambar di sini

ElPedro
sumber
2

Kode Mesin Turing, 72 42 byte

Mengasumsikan input tanpa sel kosong (spasi). Berkat ASCII-saja karena telah menghemat 30 byte.

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

Versi lama dalam 72 byte:

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

Cobalah online .

SuperJedi224
sumber
1
0 * * r 1/1 * * l 2/1 _ _ l halt/2 * _ r 0?
ASCII
oi tolong jawab: ||
ASCII
tidak akan bekerja dengan cara apa? Saya sudah mengujinya secara online
ASCII
@ ASCII-only Ternyata Anda benar, dan saya hanya salah menafsirkan cara program Anda sebenarnya bekerja. Saya pikir itu cukup berbeda sehingga Anda dapat mempostingnya sebagai jawaban yang berbeda jika Anda mau.
SuperJedi224
Nah, ini adalah tantangan sederhana, jangan berpikir itu membutuhkan lebih dari satu jawaban dalam bahasa apa pun: P
ASCII-satunya
2

C # 8.0 , 8 byte

Membutuhkan .NET Core 3.0, yang dalam versi beta. Ini saat ini crash CLR karena bug, tetapi begitu bug diperbaiki, ini akan berjalan seperti yang diharapkan dan memenuhi persyaratan tantangan.

s=>s[^1]

C # 8.0 , Berjalan tanpa menabrak pada saat penulisan, 22 byte

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

C # 8.0 , Program Lengkap, 78 byte

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

Arcanox
sumber
Tantangannya menyebutkan "output", jadi solusi terakhir mungkin yang tepat
Ven
Dang, Anda mengalahkan jawaban konsol saya banyak. Bagaimana cara kerja ^ 1?
Stackstuck
Ini adalah tipe Indeks baru. Memulai indeks dengan tanda tanda menunjukkan itu dari ujung, yaitu array[^n]sama denganarray[array.Length - n]
Arcanox
Menarik! Saya selalu mencoba untuk tetap up to date dengan fitur C # baru. Apakah Anda memiliki tautan / referensi tentang itu?
mortb