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

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

Выход:

введите описание изображения здесь

640 КБ
источник
Хотя это, безусловно, дает очки стиля, с точки зрения строгой игры в гольф, стоит отметить, что вам разрешено писать функции, которые возвращают результат в регистр. Таким образом, это может стать намного короче. Вы можете тривиально удалить 4 байта, а перезапись может уменьшить его еще больше. Кстати, это скриншот из эмулятора? Который из?
Коди Грей,
@CodyGray, о, конечно, код для ввода данных из командной строки и вывода на консоль - это почти все. Да, я мог бы сказать «входная строка в SI, длина в CXвыходном символе в AL», и тогда я думаю, что единственный необходимый код - это REPZ LODSB(2 байта), и мы закончили. Конечно, этот подход не был бы таким, как вы, если бы вы кодировали эффективность, а не размер. Ваша точка зрения очень хорошо принята, но я также опубликую ее как функцию, которая выполняет всю работу.
640KB
7

Brainf ***, 7 байт

,[>,]<.
SuperJedi224
источник
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
Suever
источник
Я бы пошел на J)...
Sanchises
5

Javascript, 14 байт

a=>a.slice(-1)
SuperJedi224
источник
Я старался изо всех сил, чтобы найти более короткий путь, но, к своему удивлению, я не думаю, что это можно улучшить, если только нет простого способа перевернуть строку длиной до 8 байт перед вызовом [0]. Или, может быть, если есть короткий способ получить длину массива. Другой подход: a=>[...a].pop()(15 байтов)
Мацыр
4

Python 3 , 14 байт

lambda x:x[-1]

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

MilkyWay90
источник
Я чувствую себя глупо, как вы это называете, не объявляя это переменной?
Натан Диммер
Я посмотрел на ваше TIO, но это не имеет особого смысла ... Что вы делаете в своей шапке?
Натан Диммер
1
@Bobawob Для вашего первого вопроса анонимные лямбда-выражения разрешены для ответов (я называю это с помощью присвоения лямбда-переменной переменной eв заголовке). Для вашего второго вопроса, заголовок e=\ , который в основном означаетe=lambda x:x[-1]
MilkyWay90
Обратите внимание, что в моем комментарии выше не должно быть завершающего пробела, e=\ но Markdown экранирует символ кода, поэтому я должен добавить завершающий пробел
MilkyWay90
Это действительно круто! Спасибо!
Натан Диммер
4

Bash + coreutils, 8 байт

tail -c1

Ввод от stdin, выход для stdout.

pizzapants184
источник
4

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

sub(Ans,length(Ans),1

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

Тау
источник
4

Haskell , 9 4 байта

last

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

flawr
источник
Зачем беспокоиться pure? Не lastдостаточно?
dfeuer
Я предполагал, что вывод тоже должен быть строкой, но вы правы, OP говорит только о «байтах».
Flawr
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[]параметром-типом.
Кевин Круйссен
61 байт .
Оливье Грегуар
3

Befunge-93 , 12 15 байт

:1+_p1-,@>~#

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

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

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

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

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

JPeroutek
источник
На самом деле, $$вместо того, 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
MilkyWay90
источник
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)
Wernisch
источник
3

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

?a|,
;.]^

Очень доволен этим, так как он всего на 3 байта длиннее моей программы для кошек

расширенный

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

По сути, это просто циклически перемещает входные символы в aстек до тех пор, пока не будет достигнут EOF. Затем он выводит элемент вверху aстека, используя.a .

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

EdgyNerd
источник
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.

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

Quantum64
источник
в вашем файле 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)

remoel
источник
1
Является 1необязательным?
TSH
не на втором коде. Спасибо :)
remoel
2

Python 3, 11 18 34 байта

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

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

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

Mrwerdo
источник
Это ничего не печатает и ничего не возвращает из функции - фрагменты запрещены, только функции или полные программы.
Стивен
Ах, я вижу, не думал об этом, когда я думал об ответе. Только думал о том, чтобы запустить его в переводчике.
Mrwerdo
38
только ASCII
1
14
только ASCII
2

IBM / Lotus Notes Formula, 11 байтов

@Right(i;1)

Формула вычисляемого поля, получающая данные из редактируемого поля i

введите описание изображения здесь

ElPedro
источник
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

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

SuperJedi224
источник
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]);}}

Arcanox
источник
Задача упоминает «результат», поэтому последнее решение, вероятно, правильное
Ven
Черт, ты намного превзошел мой консольный ответ. Как работает ^ 1?
Stackstuck
Это новый тип индекса. Индекс, начинающийся с каретки, указывает на то, что он с конца, то array[^n]есть такой же, какarray[array.Length - n]
Arcanox
Интересный! Я всегда стараюсь быть в курсе новых возможностей C #. У вас есть какая-либо ссылка / ссылка на это?
заклад