Girilen son baytı yazdır


12

Meydan okuma

Bir girdi bayt dizeniz var, içindeki son baytı çıktılar.

kurallar

Gönderiminiz, girişteki son baytı veren bir program veya işlev olabilir.

  • dize, stdin veya komut satırı bağımsız değişkenleridir ve
  • boş değil.

Bunu brainfuck ile çözmeye çalışıyordum, ancak tüm dillerin katılmasına izin veriliyor. Bu .

Örnekler

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

Katalog

Bu yazının altındaki Yığın Parçacığı, a) her dil için en kısa çözüm listesi ve b) genel bir lider panosu olarak cevaplardan katalog oluşturur.

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

## Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

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

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

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

Dil adını, daha sonra snippet'te görünecek bir bağlantı da yapabilirsiniz:

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


4
Hoş geldiniz, sorunuzu biçimimize daha uygun olacak şekilde değiştirdim ( genellikle korumalı alanın bunun için olduğunu unutmayın ). Ancak şu anki durumunda zorluk çok kolaydır (bf'de de), bundan emin değilim.
ბიმო

11
Kapanmaya karşı oy kullanıyorum; önemsiz olabilir, ancak bu durum hiç bir şey yapmaz
MilkyWay90

1
@MillyWay Bence yakın oyların çoğu ბიმო tarafından kapsamlı düzenleme öncesi olduğunu
Sanchises

9
@ ბიმო Konu dışı soruları, burada uygulanacağını düşündüğüm konu üzerine yapmak için düzenlememe konusunda bir uzlaşmamız var.
19'da Laikoni

2
Ne tür bir ip? Sadece ASCII olması garanti ediliyor mu? Veya örneğin UTF-8'i (ve nasıl?) Ele almalı mıyız?
FireCubez

Yanıtlar:


11

Ataşman , 4 bayt

Last

Çevrimiçi deneyin! (Giriş bir karakter listesi &/Solabilirse işe yarayabilir.)

Alternatifler

5 bayt: `@&-1

8 bayt: &/S@List

10 bayt: `@«_,-1»

10 bayt: Fold!Right

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

10 bayt: `^^&:Right

10 bayt: {Right^^_}

11 bayt: Get«_,-1»

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

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

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

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

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


4
: | wtf o kadar çok alternatif
sadece ASCII

1
@ Sadece ASCII-en az Ben böyle basit bir meydan okuma yapabilirdi: p
Conor O'Brien

LastGirilen bayt yazdırma . Program içeriği meydan okuma ile uyumlu
MilkyWay90

11

x86-16 makine kodu, 2 bayt

@CodyGray'ın doğru bir şekilde işaret ettiği gibi, girdiyi bir dize ve çıktıya bir kayıt olarak almak bağımsız program sürümünün çoğunu kaldırır.

Giriş dizesi SI, uzunluğu CXve çıkış karakteri 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.

Veya "Pascal dizesi" olarak 4 bayt (uzunluk dizenin başına eklenir):

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.

Veya "C dizesi" olarak 5 bayt (sıfır / boş sonlandırılmış) girin 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 makine kodu, IBM PC DOS, 12 11 10 bayt

Veya IBM PC DOS yürütülebilir gibi tam bir program. Giriş komut satırından, çıkış konsoldan.

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

Çıktı:

resim açıklamasını buraya girin


Bu kesinlikle stil noktaları alsa da, sıkı bir golf bakış açısından, sonucu bir kayıtta döndüren işlevler yazmanıza izin verildiğini belirtmek gerekir. Yani, bu çok daha kısa olabilir. 4 baytı önemsiz bir şekilde ortadan kaldırabilirsiniz ve yeniden yazma onu daha da küçültebilir. Bu arada, bu ekran görüntüsü bir emülatörden mi? Hangisi?
Cody Gray

@CodyGray, oh kesinlikle, komut satırından ve konsoldan çıktı almak için kod neredeyse hepsi. Evet, "girdi dizesi SI, CXçıkış char uzunluğu " diyebilirim ALve sonra gerekli olan tek kod REPZ LODSB(2 bayt) olduğunu düşünüyorum ve biz yapılır. Elbette bu yaklaşım, büyüklük için değil, verimlilik için kod yazıyorsanız, bunu nasıl yapacağınız değildir. Ne demek istediğini çok iyi alınmış, ben de işin etini yapan bir işlev olarak göndereceğiz.
640KB

7

Brainf ***, 7 bayt

,[>,]<.

ideone.com/XoJLD0 Hala çalışmıyor; (
jean

Deneyin @jean burada . (Dürüst olmak gerekirse, ideone'nin BF yaptığını bile bilmiyordum).
SuperJedi224

Evet, bağlantınızda her şey yolunda gidiyor. Ancak bu sorun için çevrimiçi yargıç, işe yaramadığı bir ideone kullanıyor; (
jean

@jean ideone -1EOF olarak kullanıyor gibi görünüyor . +[>,+]<-.çalışmalı
Jo King

@Jo King Üzgünüz, ancak giriş şöyle görünüyor: 29845812674 [enter] [EOF] Son rakamı nasıl yazdırabilirim?
jean

7

MATL, 2 bayt

0)

MATL, 1 tabanlı modüler indeksleme kullanır, böylece bu çözüm 0, girdinin-pozisyonunda öğeyi 0, sonuna kadar saran sonuncu ile aynı tutar .

MATL Online'da deneyin

açıklama

    % 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

Ben giderdim J)...
Sanchises


5

Javascript, 14 bayt

a=>a.slice(-1)

Daha kısa bir yol bulmak için elimden gelenin en iyisini yaptım ama aramadan önce 8 baytın altında bir dizeyi tersine çevirmek için korkak bir yol olmadığı sürece sürpriz için bunun geliştirilebileceğini düşünmüyorum [0]. Veya dizi uzunluğunu almanın kısa bir yolu varsa. Farklı yaklaşım: a=>[...a].pop()(15bayt)
Matsyir

4

Python 3 , 14 bayt

lambda x:x[-1]

Çevrimiçi deneyin!


Aptal hissediyorum, bunu bir değişkene bildirmeden nasıl çağırıyorsun?
Nathan Dimmer

TIO'nuza baktım, ama pek mantıklı değil ... Başlığınızda ne yapıyorsunuz?
Nathan Dimmer

1
@Bobawob İlk sorunuz için, anonim lambdalara cevaplar için izin verilir (bunu lambda'yı eüstbilgideki değişkene atayarak kullanabilirsiniz ). İkinci sorunuz için başlık, e=\ temelde şu anlama gelire=lambda x:x[-1]
MilkyWay90

Yukarıdaki yorumumda, bir sondaki boşluk olmaması gerekiyordu e=\ ama Markdown kod karakteri kaçar bu yüzden bir boşluk eklemek zorunda
MilkyWay90

Bu gerçekten havalı! Teşekkür ederim!
Nathan Dimmer


4

TI-BASIC (TI-84), 10 bayt

sub(Ans,length(Ans),1

Giriş dizesindeki son karakteri alır.
Giriş var Ans.
Çıktı girilir Ansve otomatik olarak yazdırılır.







3

Befunge-93 , 12 15 bayt

:1+_p1-,@>~#

Çevrimiçi deneyin!

@Jo King'e 3 bayt golf için teşekkürler.

Daha az dağınık alternatif 15 baytlık sürüm:

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

Dizeleri Befunge'de girdi olarak almak kolay değildir. Birden fazla karakter almak için tek bir komut olsaydı, dizeyi okumak, üst karakteri patlatmak / yazdırmak ve çıkmak kadar basit olurdu.


Aslında, $$yerine p1bayt aynı miktarda uyarı olmadan çalışması gerekir
Jo Kral

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

Çevrimiçi deneyin!

AÇIKLAMA

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

Jöle , 1 bayt

Çevrimiçi deneyin!

Jelly'deki en zor zorluk değil ...

Bunun girdiyi dize olarak kabul ettiğini unutmayın; giriş başka şekilde yorumlanabiliyorsa (örneğin bir sayı, bir liste), bu argümanın alıntılanması gerekir (örn. "123456" veya "[123,197]"). Alternatif olarak, bu bir bayt dizisi alan ve bu dizinin son üyesini PPCG standart kurallarına uygun olarak döndüren bir bağlantı olarak görülebilir.

@ MilkyWay90 ve @ ბიმო 'a bunu işaret ettiği için teşekkürler.


-1 Herhangi bir sayı için başarısız olur ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90

@ MilkyWay90: Tam bir program olması gerekmez, muhtemelen bu bir dize alarak bir Jelly işlevi olarak çalışacaktır. Ama sonra tekrar Jelly'i tanımıyorum, bu yüzden yanlış olabilirim.
ბიმო

Tamam, bunun bir bağlantı olarak çalışıp çalışmayacağını görmeye çalışacağım
MilkyWay90

@ Work Çalışıyor gibi görünüyor (OP benim cevabımı geri alabilir böylece cevap düzenleyebilirsiniz?)
MilkyWay90

T'yi sadece bir bağlantı olarak tanımlayabilir ve girişinizdeki "" gereksinimini ortadan kaldırarak bir dize girmesini sağlayabilirsiniz.
MilkyWay90

3

Excel, 10 bayt

@ Remoel'in VBA cevabına hemen hemen eşdeğer:

=RIGHT(A1)





2

Dal, 37 bayt

Bu sadece basit bir "sonuna 1 karakter çıkarmak ve yazdırmak" yaklaşım kullanır.

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

Bunu yapmak ve test etmek gerçekten kolaydı, ama eğlenceliydi!


Kullanmak için bir .twigdosyaya koymanız ve içe aktarmanız gerekir:

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

Https://twigfiddle.com/aa19wd adresinden test edebilirsiniz (test kılıfları dahil)


Tamam, ilk kez bir Twig golf gördüm.
Ven

@Ven Bir süredir yapıyorum. İşte bir örnek: codegolf.stackexchange.com/a/174040 ve işte bir tane daha: codegolf.stackexchange.com/a/166800 (Birkaç tane daha var, ama iyi)
Ismael Miguel


2

Duygu , 5 bayt

😶👉😃😨👿

açıklama

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

Çevrimiçi deneyin!


Benioku içinde, 1. Bence "emoji için" olmalıdır "emoji" 2. Eğer "emoji" olması gerekiyorsa o zaman emotinomicon ve emojicode zaten bir şey vardır
ASCII-sadece

Aslında baktığınız şey, çevrimiçi arayüz aracılığıyla da erişilebilen bir derleyiciden çıktıdır.
Quantum64

Her emoji birden fazla bayt değil mi? En azından iki bayt olacağını düşünüyorum.
Kyle Delaney

Duygu özel bir kod sayfası kullanır. Bkz. Quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek

2

VBA (Excel), 14 12 bayt

Anlık Pencere ve Hücreyi A1giriş olarak kullanma

Teşekkürler @tsh

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


1
1opsiyonel?
tsh

ikinci kodda değil. Teşekkürler :)
8'de remoel

2

Python 3, 11 18 34 Bayt

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

Programı komut satırında bir python betiği olarak çalıştırarak kullanım. Girdi, programın son argümanı olarak sağlanır.

Çevrimiçi deneyin!


Bu, hiçbir şey yazdırmaz veya bir işlevden hiçbir şey döndürmez - parçacıklara izin verilmez, yalnızca işlevlere veya tam programlara izin verilir.
Stephen

Ah, anladım, cevabı düşündüğümde bunu düşünmedim. Sadece yorumlayıcıda çalıştırmayı düşündüm.
Mrwerdo




2

IBM / Lotus Notes Formula, 11 bayt

@Right(i;1)

Girdilerini düzenlenebilir alandan alan hesaplanmış alan formülü i

resim açıklamasını buraya girin


2

Turing Makine Kodu, 72 42 bayt

Boş hücre (boşluk) olmayan bir girdi olduğunu varsayar. ASCII'ye sadece 30 bayt tasarruf için teşekkürler.

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

72 baytta eski sürüm:

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

Çevrimiçi deneyin .


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

oi pls cevap: ||
Sadece ASCII

hangi şekilde çalışmaz? Çevrimiçi test ettim
sadece ASCII-

@ ASCII-only Doğru olduğunuz ortaya çıkıyor ve programınızın gerçekte çalışma şeklini yanlış yorumluyordum. İsterseniz farklı bir yanıt olarak gönderebileceğiniz kadar farklı olduğunu düşünüyorum.
SuperJedi224

Bu basit bir zorluk, herhangi bir dilde birden fazla cevaba ihtiyaç duyduğunu düşünmeyin: P
sadece ASCII

2

C # 8.0 , 8 bayt

Beta sürümündeki .NET Core 3.0 gerektirir. Bu, şu anda bir hata nedeniyle CLR'yi kilitliyor, ancak hata düzeltildikten sonra, bu beklendiği gibi çalışacak ve meydan okuma gereksinimlerini karşılayacaktır.

s=>s[^1]

C # 8.0 , Yazma sırasında çökmeden çalışır, 22 bayt

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

C # 8.0 , Tam Program, 78 bayt

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


Zorluk "çıktı" dan bahsediyor, bu yüzden son çözüm muhtemelen doğru olan
Ven

Dang, konsolumun cevabını çok aştın. ^ 1 nasıl çalışır?
Stackstuck

Yeni Dizin türü. Bir array[^n]array[array.Length - n]
düzeltme

İlginç! Her zaman yeni C # özellikleri ile güncel kalmaya çalışıyorum. Bununla ilgili bir bağlantınız / referansınız var mı?
Mortgage

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.