Печать последнего введенного байта


12

Вызов

У вас есть одна строка входных байтов, выведите в ней последний байт.

правила

Ваше представление может быть программой или функцией, выводящей последний байт на входе, который

  • является либо аргументом строки, стандартного ввода или командной строки, и
  • не пусто.

Я пытался решить эту проблему с помощью мозгового удара, однако все языки могут участвовать. Это .

Примеры

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

Каталог

Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.

Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:

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

Ответы:


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. Наименьшее, что я мог бы сделать на таком простом вызове, как это: p
— Конор О'Брайен,

Печать Lastвведенного байта. Содержание программы соответствует задаче
— MilkyWay90

11

машинный код x86-16, 2 байта

Как правильно указывает @CodyGray, взятие ввода в виде строки и вывода в регистр удаляет большую часть автономной версии программы.

Входная строка в SI, длина в 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 байта как «строка Паскаля» (длина предшествует началу строки):

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, о, конечно, код для ввода данных из командной строки и вывода на консоль - это почти все. Да, я мог бы сказать «входная строка в SI, длина в CXвыходном символе в AL», и тогда я думаю, что единственный необходимый код - это REPZ LODSB(2 байта), и мы закончили. Конечно, этот подход не был бы таким, как вы, если бы вы кодировали эффективность, а не размер. Ваша точка зрения очень хорошо принята, но я также опубликую ее как функцию, которая выполняет всю работу.
— 640KB

7

Brainf ***, 7 байт

,[>,]<.

ideone.com/XoJLD0 Он по- прежнему не работает, (
— джинсовый

@ jean Попробуй здесь . (Честно говоря, я даже не знал, что ideone сделал BF).
— SuperJedi224

Да, по вашей ссылке все отлично работает. Но онлайн посудите эту проблему использует ideone , где она не работает; (
— джинсовый

@jean ideone, похоже, использует -1в качестве EOF. +[>,+]<-.должен работать
— Джо Кинг

@Jo King Извините, но вход выглядит так: 29845812674 [введите] [EOF] как я могу напечатать последнюю цифру?
— жан

7

MATL, 2 байта

0)

В MATL используется модульное индексирование на основе 1, поэтому это решение захватывает элемент в 0-ой позиции ввода, который совпадает с последним, поскольку выполняется 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()(15 байтов)
— Мацыр

4

Python 3 , 14 байт

lambda x:x[-1]

Попробуйте онлайн!


Я чувствую себя глупо, как вы это называете, не объявляя это переменной?
— Натан Диммер

Я посмотрел на ваше TIO, но это не имеет особого смысла ... Что вы делаете в своей шапке?
— Натан Диммер

1
@Bobawob Для вашего первого вопроса анонимные лямбда-выражения разрешены для ответов (я называю это с помощью присвоения лямбда-переменной переменной eв заголовке). Для вашего второго вопроса, заголовок e=\ , который в основном означаетe=lambda x:x[-1]
— MilkyWay90

Обратите внимание, что в моем комментарии выше не должно быть завершающего пробела, e=\ но Markdown экранирует символ кода, поэтому я должен добавить завершающий пробел
— MilkyWay90

Это действительно круто! Спасибо!
— Натан Диммер


4

TI-BASIC (TI-84), 10 байтов

sub(Ans,length(Ans),1

Получает последний символ во входной строке.
Вход находится в Ans.
Выход находится Ansи автоматически распечатывается.




3

Java 8

Ввод из STDIN, 71 байт

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

Попробуйте онлайн!

Аргумент функции, 25 байт

s->s.charAt(s.length()-1)

Вы можете добавить код для аргумента программы, чтобы иметь все три параметра. :) Жаль, что ОП специально запрашивает строки, иначе s->s[s.length-1]было бы достаточно с char[]параметром-типом.
— Кевин Круйссен




3

Befunge-93 , 12 15 байт

:1+_p1-,@>~#

Попробуйте онлайн!

Спасибо @Jo King за 3 байта.

Альтернативная 15-байтовая версия, которая менее беспорядочная:

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

Взять строки в качестве входных данных в Befunge не так просто. Если бы существовала одна команда для ввода нескольких символов, это было бы так же просто, как прочитать строку, вытолкнуть / напечатать верхний символ и выйти.


На самом деле, $$вместо того, p1чтобы работать без предупреждения для того же количества байтов
— Джо Кинг

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 как ссылку и сделать так, чтобы она вводила строку, устраняя необходимость "" в вашем вводе.
— MilkyWay90

3

Excel, 10 байт

В значительной степени эквивалентно ответу VBA @ remoel:

=RIGHT(A1)

3

Каскад , 9 байт

?a|,
;.]^

Очень доволен этим, так как он всего на 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 (у меня есть еще несколько, но хорошо)
— Исмаэль Мигель


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.

Попробуйте онлайн!


в вашем файле readme: 1. я думаю, что "to emoji" должно быть "от emoji" 2. если это должно быть "от emoji", то emotinomicon и emojicode уже есть
— только ASCII

На самом деле, вы смотрите на вывод компилятора, к которому также можно получить доступ через онлайн-интерфейс.
— Quantum64

Разве каждый смайлик не больше одного байта? Я думаю, что они будут по крайней мере два байта.
— Кайл Делани

Emotion использует пользовательскую кодовую страницу. См. Quant64.github.io/EmotionBuilds/1.1.0//…
— JPeroutek

2

VBA (Excel), 14 12 байт

используя Immediate Window и Cell A1 качестве входных данных

Спасибо @tsh

?[RIGHT(A1)] или же ?Right([A1],1)


1
Является 1необязательным?
— TSH

не на втором коде. Спасибо :)
— remoel

2

Python 3, 11 18 34 байта

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

Использование через запуск программы в виде скрипта Python в командной строке. Ввод предоставляется в качестве последнего аргумента программы.

Попробуйте онлайн!


Это ничего не печатает и ничего не возвращает из функции - фрагменты запрещены, только функции или полные программы.
— Стивен

Ах, я вижу, не думал об этом, когда я думал об ответе. Только думал о том, чтобы запустить его в переводчике.
— Mrwerdo




2

IBM / Lotus Notes Formula, 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

OI просьба ответить: ||
— Только для ASCII

не будет работать каким образом? Я тестировал его онлайн
— только ASCII

@ ASCII-only Оказывается, вы правы, и я просто неверно истолковал, как на самом деле работала ваша программа. Я думаю, что это достаточно отличается, что вы можете опубликовать его как другой ответ, если хотите.
— SuperJedi224

Что ж, это простая задача, не думайте, что ей нужно более одного ответа на любом языке: P
— только ASCII

2

C # 8,0 , 8 байтов

Требуется .NET Core 3.0, который находится в бета-версии. В настоящее время происходит сбой 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 #. У вас есть какая-либо ссылка / ссылка на это?
— заклад

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.