Друкувати останній введений байт


12

Виклик

У вас є один рядок вхідних байтів, виведіть в ньому останній байт.

Правила

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

  • або аргументи рядка, stdin або командного рядка, і
  • не порожній.

Я намагався вирішити це з мозком, але всі мови дозволені до участі. Це .

Приклади

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

Каталог

Фрагмент стека внизу цієї публікації генерує каталог з відповідей а) як список найкоротших варіантів для кожної мови та б) як загальний таблиця лідерів.

Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон 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
@ ბიმო У нас є консенсус щодо того, щоб не редагувати поза тематичні запитання, щоб вони ставали на тему, яку, на мою думку, тут би застосували.
Лайконі

2
Яка струна? Чи гарантовано це лише ASCII? Або, наприклад, ми маємо поводитися з UTF-8 (і як?)?
FireCubez

Відповіді:


11

Attache , 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
Conor O'Brien

Друкувати 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 байти), і ми б це зробили. Звичайно, такий підхід був би не таким, як ви це зробите, якби ви кодували ефективність, а не розмір. Ваша думка дуже добре сприйнята, хоча я викладу це також як функцію, яка виконує м'ясо роботи.
640

7

Brainf ***, 7 байт

,[>,]<.

ideone.com/XoJLD0 Це все ще не працює; (
jean

Спробуйте тут . (Чесно кажучи, я навіть не знав, що ідеон зробив BF).
SuperJedi224

Так, у вашому посиланні все працює добре. Але онлайн поміркуйте цю проблему використовує ideone , де вона не працює; (
джинсовий

@jean ideone, здається, використовується -1як EOF. +[>,+]<-.повинен працювати
Джо Кінг

@Jo King Вибачте, але вхід виглядає так: 29845812674 [enter] [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)...
Санчіз


5

Javascript, 14 байт

a=>a.slice(-1)

Я намагався знайти кращий шлях, але, на мій подив, я не думаю, що це можна покращити, якщо тільки не існує прикольного способу повернути рядок у віці менше 8 байт, перш ніж дзвонити [0]. А може, якщо існує короткий спосіб отримати довжину масиву. Різний підхід: a=>[...a].pop()(15 байт)
Мацюр

4

Я почуваюсь німим, як ти називаєш це, не оголошуючи його змінною?
Натан Діммер

Я подивився на ваш TIO, але це не має особливого сенсу ... Що ви робите в своєму заголовку?
Натан Діммер

1
@Bobawob На ваше перше запитання для анонімних лямбдів дозволено відповіді (я називаю це за допомогою присвоєння лямбда змінної eв заголовку). Що стосується вашого другого запитання, заголовок є e=\ , що в основному означаєe=lambda x:x[-1]
MilkyWay90,

Зауважте, що в моєму вище коментарі не повинно бути пробілу, e=\ але Маркдаун уникає символу коду, тому я повинен додати пробіл
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слід працювати без попередження на однакову кількість байтів
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 байт

Спробуйте в Інтернеті!

Не найскладніший виклик в Jelly ...

Зверніть увагу, це приймає введення як рядок; якщо введення можна інтерпретувати інакше (наприклад, число, список), то його аргумент потрібно буде цитувати (наприклад, "123456" або "[123,197]"). Крім того, це може розглядатися як посилання, яке займає байтовий масив і повертає останнього члена цього масиву, відповідно до стандартних правил PPCG.

Дякуємо @ MilkyWay90 та @ ბიმო за те, що вказали на це.


-1 Збій для будь-якого числа ( tio.run/##y0rNyan8///hzlX///83MTY1NjE1MQYA )
MilkyWay90,

@ MilkyWay90: Не потрібно бути повноцінною програмою, ймовірно, це буде працювати як функція Jelly, що приймає рядок. Але знову ж таки я не знаю Джеллі, тому я можу помилитися.
ბიმო

Гаразд, я спробую побачити, чи буде це працювати як посилання
MilkyWay90,

@ ბიმო Здається, працює (ОП, ви можете відредагувати відповідь, щоб я міг відмінити свій голос?)
MilkyWay90

Ви можете просто визначити Т як посилання та змусити його вводити рядок, усуваючи необхідність "" у вашому введенні.
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.

Спробуйте в Інтернеті!


у вашому читанні, 1. я думаю, що "для емоджи" має бути "від емоджи" 2. якщо це має бути "від емоджи", то емотиномікон і емоджикода - це вже річ
лише ASCII

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

Чи не кожен емоджі більше одного байта? Я думаю, що вони будуть принаймні на два байти.
Кайл Делані

Емоція використовує користувацьку кодову сторінку. Дивіться Quantum64.github.io/EmotionBuilds/1.1.0//…
JPeroutek

2

VBA (Excel), 14 12 байт

за допомогою негайного вікна та комірки A1 як вхід

Дякую @tsh

?[RIGHT(A1)] або ?Right([A1],1)


1
Не 1обов’язково?
TSH

не за другим кодом. Дякую :)
remoel

2

Пітон 3, 11 18 34 байт

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

Використання через запуск програми у вигляді сценарію python у командному рядку. Введення подається як останній аргумент програми.

Спробуйте в Інтернеті!


Це нічого не друкує і не повертає нічого з функції - фрагменти заборонені, лише функції або повні програми.
Стівен

А я бачу, не думав про це, коли мені хотілося відповіді. Думав лише про те, щоб запустити його у перекладача.
Mrwerdo




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

oi pls відповідь: ||
Лише ASCII

як би не працювало? Я перевірив це в Інтернеті
лише для ASCII

@ ASCII-тільки Виявляється, ви правильно, і я просто неправильно трактував те, як насправді працювала ваша програма. Я думаю, що це досить різне, що ви можете опублікувати його як іншу відповідь, якщо хочете.
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]);}}


У виклику згадується "вихід", тому останнє рішення, мабуть, правильне
Вен

Данг, ти багато перевершив мою відповідь консолі. Як працює ^ 1?
Стек

Це новий тип індексу. Початок індексу каретою вказує, що це з кінця, тобтоarray[^n] такий самий, якarray[array.Length - n]
Арканокс

Цікаво! Я завжди намагаюся бути в курсі нових функцій C #. Чи є у вас якесь посилання / посилання на це?
mortb

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.