打印最后输入的字节


12

挑战

您有一个输入字节字符串,在其中输出最后一个字节。

规则

您的提交可能是在输入中输出最后一个字节的程序或函数,

  • 是字符串,stdin或命令行参数,并且
  • 是非空的。

我当时想尽力解决这个问题,但是所有语言都可以参加。这是

例子

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

目录

这篇文章底部的Stack Snippet从答案a)生成目录,答案是每种语言的最短解决方案列表,b)是总体排行榜。

为了确保您的答案显示出来,请使用以下Markdown模板以标题开头。

## Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,可以将旧分数保留在标题中,方法是将它们打掉。例如:

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

如果您想在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

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

您还可以将语言名称设置为链接,然后该链接将显示在代码段中:

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


4
欢迎使用,我更改了您的问题以使其更适合我们的格式(请注意,通常这是沙箱的用途)。但是,在当前状态下,挑战非常容易(在bf中也是如此),因此不确定。
ბიმო

11
我反对闭幕;它可能微不足道,但这并没有使它成为题外话
MilkyWay90

1
@MillyWay我认为大多数的接近投票是在ბიმო进行广泛编辑之前
Sanchises

9
@ბიმო我们已经达成共识,不要编辑题外的问题以使它们成为题上的问题,我认为这将在此处应用。
Laikoni

2
什么样的弦?是否保证仅使用ASCII?还是我们应该处理UTF-8(以及如何?)?
FireCubez

Answers:


11

附件,4个字节

Last

在线尝试!(如果输入可以是字符列表,则&/S可以使用。)

备择方案

5个字节: `@&-1

8个字节: &/S@List

10个字节: `@«_,-1»

10个字节: Fold!Right

10个字节: `@<~_,-1~>

10个字节: `^^&:Right

10个字节: {Right^^_}

11个字节: Get«_,-1»

11个字节: Get<~_,-1~>

12个字节: `@«_,#_-1»

12个字节: `@<~_,#_-1~>

13个字节: Get«_,#_-1»

13个字节: Get<~_,#_-1~>


4
:| wtf如此之多的选择
仅ASCII的

1
@ ASCII-only最少,我可以像这样简单的挑战:p
Conor O'Brien

打印Last输入的字节。节目内容与挑战相吻合
MilkyWay90

11

x86-16机器码,2个字节

正如@CodyGray正确指出的那样,将输入作为字符串并输出到寄存器将删除大量独立程序版本。

输入字符串为in SI,长度为in CX,输出字符为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.

4个字节作为“ Pascal字符串”(长度在字符串的开头):

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.

5个字节作为“ C字符串”(零/零终止),输入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机器代码,IBM PC DOS, 12 11 10字节

或作为IBM PC DOS可执行文件的完整程序。输入来自命令行,输出至控制台。

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

输出:

在此处输入图片说明


尽管从严格的高尔夫运动的角度来看,虽然这肯定会带来一些风格上的意义,但值得注意的是,您被允许编写将结果返回到寄存器中的函数。因此,这可以缩短很多时间。您可以删除4个字节,重写可以进一步缩小它。顺便说一下,那是模拟器的屏幕截图吗?哪一个?
科迪·格雷

@CodyGray,哦,绝对如此,从命令行获取输入并输出到控制台的代码几乎全部。是的,我可以说“输入字符串为in SICX输出字符的长度为in AL”,然后我认为唯一需要的代码是REPZ LODSB(2个字节),我们就可以完成。当然,如果您要编码的是效率而不是大小,那么这种方法将不是您的方法。您的观点虽然很好,但我也会将其发布为完成工作重点的函数。
640KB

7

Brainf ***,7个字节

,[>,]<.

ideone.com/XoJLD0 仍然无法正常工作;(
吉恩

@jean 在这里尝试。(说实话,我什至不知道ideone做过BF)。
SuperJedi224

是的,在您的链接中一切正常。但对此问题的在线判断是在不起作用的地方使用ideone;(
吉恩

@jean ideone似乎-1用作EOF。+[>,+]<-.应工作
乔金

@Jo King抱歉,输入的内容如下:29845812674 [enter] [EOF]如何打印最后一位?
让·吉恩

7

MATL,2个字节

0)

MATL使用基于1的模块化索引,因此该解决方案0在输入的-th位置抓取元素,该位置与最后一个相同,因为回0绕到最后。

MATL Online上试用

说明

    % 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

我会去的J)...
Sanchises


5

Javascript,14个字节

a=>a.slice(-1)

我尽力找到一种更短的方法,但令我惊讶的是,我认为这无法改善,除非有一种时髦的方法可以在调用之前反转8字节以下的字符串[0]。或者,也许有一种获取数组长度的短方法。不同的方法:a=>[...a].pop()(15bytes)
Matsyir

4

Python 3,14个字节

lambda x:x[-1]

在线尝试!


我觉得很蠢,您如何在不将其声明为变量的情况下调用它?
内森·迪默

我看了看您的TIO,但这没有多大意义……您在标题中做什么?
内森·迪默

1
@Bobawob对于第一个问题,允许使用匿名Lambda进行解答(我通过将Lambda分配给e标头中的变量来使用它)。对于第二个问题,标题为e=\ ,这基本上意味着e=lambda x:x[-1]
MilkyWay90

请注意,在我上面的评论中,不应有尾随空格,e=\ 但Markdown会转义代码字符,因此我必须添加尾随空格
MilkyWay90

太棒了!谢谢!
内森·迪默

4

Bash + coreutils,8个字节

tail -c1

输入来自标准输入,输出至标准输出。


4

TI-BASIC(TI-84),10个字节

sub(Ans,length(Ans),1

获取输入字符串中的最后一个字符。
输入为Ans
输出已输入Ans并自动打印输出。







3

Befunge-93,12 15个字节

:1+_p1-,@>~#

在线尝试!

感谢@Jo King打高尔夫球3个字节。

备用的 15字节版本,不会太混乱:

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

在Befunge中将字符串作为输入并不是最简单的。如果只有一个命令可以接收多个字符,那么它就像读取字符串,弹出/打印顶部字符并退出一样简单。


实际上,对于相同数量的字节$$p1应该在没有警告的情况下正常工作
Jo King

3

图灵机但更糟,391字节

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

在线尝试!

说明

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

果冻,1字节

在线尝试!

不是果冻中最困难的挑战...

注意,这将输入作为字符串接受;如果可以用其他方式解释输入(例如,数字,列表),则该参数将需要加引号(例如,“ 123456”或“ [123,197]”)。或者,可以将其视为链接,该链接采用字节数组并根据PPCG标准规则返回该数组的最后一个成员。

感谢@ MilkyWay90和@ბიმო指出这一点。


-1失败用于任何数目(tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA
MilkyWay90

@ MilkyWay90:不需要是一个完整的程序,可能可以作为Jelly函数使用一个字符串。但是话又说回来,我不认识果冻,所以我可能是错的。
ბიმო

好的,我会尝试看看它是否可以作为链接工作
MilkyWay90

@ბიმო似乎可以工作(OP您可以编辑答案,这样我才能撤消我的否决票吗?)
MilkyWay90

您只需将T定义为链接,并使其输入字符串即可,而无需在输入中使用“”。
MilkyWay19年

3

Excel,10个字节

几乎等同于@remoel的VBA答案:

=RIGHT(A1)

3

级联,9个字节

?a|,
;.]^

对此感到非常满意,因为它仅比我的cat程序长3个字节

展开式

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

从本质上讲,这只是循环遍历将输入字符压入a堆栈,直到达到EOF。然后使用将该项目输出到a堆栈的顶部.a

在线尝试!





2

小枝,37字节

这只是使用一个简单的“从末尾提取1个字符并打印出来”的方式。

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

这确实很容易做到和测试,但很有趣!


要使用它,您必须将其放在.twig文件上并导入:

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

您可以在https://twigfiddle.com/aa19wd上进行测试(包括测试用例)


好的,那是我第一次看到Twig高尔夫。
法师

@Ven我已经做了一段时间了。这是一个示例:codegolf.stackexchange.com/a/174040,这是另一个:codegolf.stackexchange.com/a/166800(我还有其他一些,但是很好)
Ismael Miguel


2

情感,5 个字节

😶👉😃😨👿

说明

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

在线尝试!


在您的自述文件中,1.我认为“ to emoji”应该是“ from emoji”。2.如果应该是“ from emoji”,那么emotinomicon和emojicode已经是一件事情了
仅ASCII

实际上,您正在查看的是编译器的输出,也可以通过在线界面进行访问。
Quantum64 '19

每个表情符号不超过一个字节吗?我认为它们至少是两个字节。
凯尔·德莱尼

Emotion使用自定义代码页。见quantum64.github.io/EmotionBuilds/1.1.0//...
JPeroutek

2

VBA(Excel),14 12字节

使用即时窗口和单元格A1作为输入

谢谢@tsh

?[RIGHT(A1)] 要么 ?Right([A1],1)


1
1可选的吗?
tsh

不在第二个代码上。谢谢:)
取消删除

2

Python 3, 11 18岁 34字节

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

通过在命令行上将程序作为python脚本运行来使用。输入是程序的最后一个参数。

在线尝试!


这不会打印任何内容或从函数返回任何内容-不允许摘要,仅允许函数或完整程序。
斯蒂芬

我知道,当我回答这个问题时,并没有考虑这一点。只考虑在解释器中运行它。
Mrwerdo

38

1
14


2

IBM / Lotus Notes公式,11个字节

@Right(i;1)

计算字段公式取自可编辑字段的输入 i

在此处输入图片说明


2

图灵机代码,72 42字节

假定输入没有空单元格(空格)。多亏了仅ASCII格式,可以节省30个字节。

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

旧版本(72字节):

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

在线尝试


1
0 * * r 1/1 * * l 2/1 _ _ l halt/2 * _ r 0
ASCII码,仅ASCII,

oi pls回复:||
ASCII码,仅适用

用什么方式行不通?我已经在线测试过
仅ASCII的

仅限@ASCII事实证明您是正确的,而我只是在曲解您的程序的实际工作方式。我认为这足够不同,您可以根据需要将其发布为其他答案。
SuperJedi224 '19

好吧,这是一个简单的挑战,不要以为任何一种语言都需要一个以上的答案:P
ASCII码,仅ASCII

2

C#8.0个字节

需要.NET Core 3.0(处于beta中)。当前,由于错误而使CLR崩溃,但是,一旦修复了错误,它将按预期运行并满足挑战要求。

s=>s[^1]

C#8.0,在编写时运行时不崩溃,22字节

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

C#8.0,完整程序,78字节

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


挑战提到“输出”,因此最后一个解决方案可能是正确的解决方案
Ven

亲爱的,您远远超过了我的控制台答案。^ 1如何运作?
Stackstuck

这是新的索引类型。从尖号开始索引表明它是从末尾开始的,即array[^n]array[array.Length - n]
Arcanox

有趣!我总是尝试与最新的C#功能保持同步。您对此有任何链接/参考吗?
mortb

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.