Я даже не ... я только странный!


36

Ваша задача проста: написать программу, которая получает целое число в качестве входных данных и выводит его, если оно было нечетным, и ничего не делает иначе (не допускается остановка). Проблема в том, что вы можете использовать только нечетные байты.

При желании вы можете добавить завершающий символ новой строки к выводу.

Это код-гольф, самый короткий ответ в (нечетных) байтах выигрывает.

Стандартные лазейки запрещены. Кроме того, вы не можете использовать версии языков, которые являются более новыми, чем публикация этой задачи.

Пример ввода> вывод:

13 > 13

42 >


10
Я отказался от этой задачи, потому что это задача «Сделай Х без Y».
Утренняя монахиня

4
Что именно does nothing otherwiseзначит? В Haskell функция с типом Int -> Int либо возвращает целое число, либо не останавливается, либо выдает некоторую ошибку. Если вход даже четный, его, очевидно, не следует возвращать, поэтому не будет ли приемлемым останов или ошибка в этом случае?
Лайкони

2
Если вы хотите знать, можете ли вы использовать свой исходный код, попробуйте эти сценарии в консоли браузера. Создание правильного кодовую: alphabet=new Set(Array(256).fill(0).map((v,i)=>i).filter(v=>v%2).map(String.fromCharCode));. Проверьте источник действует: [..."SOURCE CODE"].every(v=>alphabet.has(v)). См недопустимых символов в источнике: [...new Set("SOURCE CODE")].filter(v=>!alphabet.has(v)). Не забудьте избежать цитаты, "=> \";)
kamoroso94

14
@LeakyNun «делать X без Y» не относится к общим задачам с ограниченным источником , но к проблемам, которые запрещают вам использовать определенные функции языка. Эта проблема не такова, и при этом у нее нет проблем, из-за которых проблемы «делай Х без Y» проблематичны.
Мартин Эндер

1
@ Laikoni Поскольку уже есть некоторые ответы, которые входят в бесконечный цикл, я бы сказал, что это нормально, чтобы показать такое поведение. Не возвращение может быть истолковано как ничего не делать.
М.Херцкамп,

Ответы:



67

Lenguage , 645529908926937253684695788965635909332404360034079 9394157991500940492270727190763049448735 1174269748937617561533841898064735499551 229338293752006975899311592859961592895993115928599615928

Это примерно равно 2 duodecillion байтов.

Файл переводится в следующую программу brainfuck:

,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]

Принимает ввод в виде кода ASCII с максимальным значением 256. Использует перенос.


@Okx Моя ошибка. Но почему бы тебе просто не использовать ,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]?
user202729

1
Как насчет ,[[>]++[-<]<+>>]>[<<<.<]только 3452857532394791089951 байт?
Джо Кинг

На самом деле, поскольку допускаются бесконечные циклы, ,-[-->++<]>+.работает также
Джо Кинг

20

Машинный код x86-64, 8 байт

Вдохновленный решением Брюса Форте , но немного под пар. :-)

8D 07          lea      eax, [rdi]    ; put copy of input parameter in EAX
D1 EF          shr      edi, 1        ; shift LSB into CF
             InfiniteLoop:
F3 73 FD       rep jnc  InfiniteLoop  ; test CF; infinite loop back here if input was even
C3             ret                    ; return with original input in EAX if it was odd

В EDIрегистр берется единственный целочисленный параметр в соответствии с соглашением о вызовах System V AMD64.

Изначально создается копия этого значения и помещается в EAXнее, чтобы при необходимости ее можно было вернуть. ( LEAиспользуется вместо обычного, MOVпотому что нам нужна инструкция с нечетными байтами.)

Затем значение in EDIсдвигается вправо на 1, что помещает сдвинутый бит в флаг переноса (CF). Этот бит будет 0, если число было четным, или 1, если оно было нечетным.

Затем мы проверяем CF, используя JNCинструкцию, которая будет разветвляться, только если CF равен 0 (т. Е. Число было четным). Это означает, что мы войдем в бесконечный цикл для четных значений. Для нечетных значений мы проваливаемся и EAXвозвращаем исходное значение (in ).

Однако с JNCинструкцией есть небольшая хитрость - у нее есть REPпрефикс! Обычно REPпрефиксы используются только со строковыми инструкциями, но поскольку оба руководства Intel и AMD согласны с тем, что нерелевантные / лишние / избыточные REPпрефиксы игнорируются, мы добавляем один из них в инструкцию перехода, чтобы сделать ее длиной 3 байта. Таким образом, относительное смещение, которое кодируется в инструкции перехода, также является нечетным. (И, конечно, REPсам по себе префикс нечетного байта.)

Слава Богу RET, кодируется нечетным байтом!

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


В случае, если вы не думаете, возвращать ли значение, если оно нечетное, или входить в бесконечный цикл, если оно четное (чтобы вы никогда не возвращали), удовлетворяет требованиям «вывода» задачи, или вы просто хотите что-то более интересное, вот функция который выводит значение на последовательный порт (но, конечно, только если он нечетный).

Машинный код x86-64 (вывод на последовательный порт), 17 байт

8D 07         lea   eax, [rdi]   ; put copy of input parameter (EDI) in EAX

B1 F7         mov   cl, 0xf7     ; put 0xF7 into low-order bits of CX
B5 03         mov   ch, 0x03     ; put 0x03 into high-order bits of CX
FE C1         inc   cl           ; increment low-order bits of CX to 0xF8 (so all together it's now 0x3F8)
0F B7 D1      movzx edx, cx      ; move CX to DX ("MOV DX, CX" would have a 16-bit prefix of 0x66)

D1 EF         shr   edi, 1       ; shift LSB of input parameter into CF
73 01         jnc   IsEven       ; test CF: branch if 0 (even), fall through if 1 (odd)
EF            out   dx, eax      ; output EAX (original input) to I/O port 0x3F8 (in DX)
            IsEven:
C3            ret                ; return

Что делает это немного более интересным, так это то, что код делает больше , а это значит, что было сложнее сделать все это, используя инструкции, которые кодируются с использованием нечетных байтов. Конечно, это также означает, что в коде гольф это терпит неудачу, так что это своего рода компромисс: хотите интересного и сложного или короткого?

В любом случае, для записи в порт ввода-вывода 0x3F8, который является стандартным последовательным портом COM1 на ПК , используется OUTинструкция x86 . Самое интересное, конечно, в том, что все стандартные порты ввода / вывода (последовательные и параллельные) имеют четные адреса, поэтому их нельзя просто закодировать как непосредственные для инструкции или перенести непосредственно в регистр. Вы должны инициализировать на единицу меньше действительного значения, а затем увеличить значение в регистре. Вы также ограничены использованием определенных регистров для манипуляции, потому что вам нужны регистры, которые кодируются с использованием нечетных байтов в инструкции, когда используются в качестве операндов.OUT

Кроме того, мне пришлось инициализировать DXрегистр (через CXрегистр) в верхней части цикла, хотя это необходимо только в том случае, если значение нечетное, чтобы JNCкоманда имела нечетное смещение. Тем не менее, поскольку мы пропускаем OUTинструкцию, все, что делает этот код - это пустые циклы и пустые регистры; на самом деле ничего не выводится , поэтому не нарушает правила.

Наконец, эта функция вернет (после того, как вы сделали или не сделали вывод на последовательный порт) с оставленным входным значением EAX. Но это на самом деле не нарушает никаких правил; все функции на ассемблере будут возвращаться со значением в EAX- вопрос только в том, является ли это значительным значением или значением мусора . Это определяется документацией функции (по сути, возвращает ли она значение или возвращает void), и в этом случае я документирую ее как не возвращающую значение. :-)

Нет ссылки TIO для этого, поскольку он не реализует вывод на последовательные порты. Вам понадобится настоящее железо или воображение.


+1 за объяснение! Почему вы можете использовать mov во второй строке, а не в первой?
М.Херцкамп,

В дополнение к кодированию, что это MOVинструкция, ее операнды также должны быть закодированы в байтах. В этом случае это будут регистры источника и назначения (хотя операнды также могут быть непосредственными значениями, которые похожи на константы). Различные регистры отображаются на разные байты, и некоторые из этих байтов являются четными. Так, например, то, что я хотел бы использовать, было бы mov eax, edi, но это 89 F8в байтах. Смотрите путь больше , чем вы когда - либо хотели знать о кодировках здесь, в разделе «код» . @ M.Herzkamp
Коди Грей,


9

05AB1E , 3 байта

Éi=

Код соответствует байтовым значениям C9,69,3Dили 201,105,61которые являются нечетными.

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

объяснение

É     # input % 2 == 1
 i    # if true
  =   # print without popping

= # print without newlineэто на самом деле печатать с новой строки без всплывающих
окон

@EriktheOutgolfer: правда. Я исправлю объяснение.
Эминья

К сожалению, É×похоже, не работает):
kalsowerus

@kalsowerus: Да, я тоже это заметил. Работает правильно с Dпередней, но это даже не короче. Причина, по которой это не работает, состоит в том, что повторный неявный ввод принимается как второй аргумент.
Эминья

@Emigna, но странно то, что, дважды поменяв два верхних значения в стеке, он тоже работает ...
kalsowerus

5

MATL , 3 байта

o?G

MATL использует ASCII - символов, так что o?Gсоответствует байт (в десятичной системе ) 111, 63, 71.

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

объяснение

o     % Push (implicit) input modulo 2
?     % If nonzero
  G   %   Push input
      % End (implicit)
      % Display stack contents (implicit)

5

Haskell , 36 33 байта

c[1]=1;c[m]=1+1+c[m-1-1];o	m=c[m]

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

Использование: o 7yiedls 7, o 8входит в бесконечный цикл.

Фактический алгоритм

o 1 = 1
o m = 2 + o(m-2)

Первая проблема, с которой я столкнулся, была нехватка места и (, потому что функция, oкоторая принимает аргумент m, обычно определяется как o m=...или o(m)=.... Однако я обнаружил, что встроенный комментарий также {- some comment -}работает как разделитель токенов, поэтому определение o{--}m=...возможно по заданным правилам. Редактировать: Орджан Йохансен отметил, что вместо пробела можно использовать символ табуляции, сохраняя три байта: o m=...

Второй проблемой был рекурсивный вызов o(m-2). -2это просто -1-1, но здесь трюк с комментариями не работает, потому что скобки обязательны. Я исправил это, позволив функции работать с одноэлементным списком, содержащим число: o[m-2]однако, поскольку это не стандартный способ ввода данных, я передал вычисление вспомогательной функции, cкоторая работает со списками, и вызов cиз oкоторой имеет правильный формат. ,


Вы можете использовать вкладку вместо пробела.
Орджан Йохансен

@ ØrjanJohansen Я могу убедиться, что он работает \tвместо {--}.
Esolanging Fruit

@ ØrjanJohansen Спасибо, это приятно знать.
Лайкони

5

Python REPL, 38 байт

Принимает ввод как значение предыдущего выражения, используя _. Выходными данными будет строка (строковое представление целого числа для нечетного или пустая строка для четного).

'%s'%[['']+[_]][-1][[_%[1+1][-1]][-1]]

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

Чтобы запустить его в реальной оболочке, вы можете попробовать это здесь . Введите ввод, нажмите ввод. Вставьте код, нажмите Enter.

Объяснение:

Это заняло некоторое время, чтобы выяснить. Там нет ни умножения, ни разветвления, ни среза, ни запятых, ни точек, ни импорта, ни скобок, ни execнет eval, ни нетprint , ни функций. Я получил одно решение, работающее с этим выводом, используя stderr, но потом я понял, что нам нужно вывести фактическое целое число, а не просто значение truey / falsey.

Я использую скобки вместо скобок с [expression][-1]. Упрощение превращает приведенный выше код в '%s'%(['']+[_])[_%(1+1)].

Поскольку не может быть запятых, я использовал добавление списка для создания ['',_]. Используя форматирование строки, вы получите желаемый результат.


Престижность. В качестве бонуса, это также работает для Ruby IRB :) Nitpick: нормально ли возвращать строку для нечетных чисел, нормально ли возвращать пустую строку для четных чисел?
Эрик

Я думаю, что ничего не делать, печатать или возвращать ничего не одно и то же. В некотором смысле, пустая строка - ничто.
mbomb007

Да, я был действительно придирчив. Он по-прежнему возвращает строку вместо ничего. В Python REPL я бы сказал, что Noneэто будет даже лучше, чем ''. Во всяком случае, это все еще в 10000 раз лучше, чем я мог придумать.
Эрик

@EricDuminil Я мог бы вернуться False. ИДК, как вы могли бы получить None, хотя.
mbomb007

4

CJam, 6 байтов

q_iY%%

113 95 105 89 37 37

Эта программа принимает мод 2 ввода (назовем его r ) и печатает каждый r- й символ во входной строке. Если введенный номер нечетный, он печатает всю строку, но если его попросят напечатать каждый 0-й символ, программа выдает ошибку.

Попробуй здесь


Ницца! Я собирался опубликовать, qi_Y%]W%{}/M?а затем я увидел это.
Esolanging Fruit

4

Cubix , 23 19 17 байт

;;u!I1)%/;O=!;;/;

Попытайся!

@, которая завершает программу Cubix, является ascii 64, так что, к сожалению, это фактически просто входит в бесконечный цикл после проверки на странность. Нет ссылки TIO, поскольку время ожидания истекло.

= (ASCII 61) не является опцией в Cubix.

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

Куб версия:

    ; ;
    u !
I 1 ) % / ; O =
! ; ; / ; . . .
    . .
    . .

Алгоритм:

  • I (73) : читать на входе как число
  • 1 (49) : нажать 1
  • ) (41) : приращение
  • % (37) : возьми мод
  • / (47) : повернуть налево
  • ! (33) : пропустить следующую инструкцию, если нечетный
    • 1;;/; ;is (59): готовит стек к выводу
    • O (79) : Вывод в виде числа.
    • Затем он повторно вводит алгоритм, но Iчитает 0для конца ввода, поэтому мы гарантированно войдем в четную ветвь
  • u (117) : разворот с правой стороны
  • ;;;!I : loop, эффективно ничего не делая.

@MickyT, который не подходит для отрицательного ввода, поэтому я избегал использовать?
Джузеппе

Извините, я не проверил это должным образом
MickyT

3

Древесный уголь , 9 байт

¿﹪Iθ÷χ⁵→θ

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

По сути, он печатает ввод справа, если он не кратен 10/5 ( ²символ даже на кодовой странице древесного угля ). Используемые символы:

  • ¿: Код BF.
  • : Код A5.
  • : Код C9.
  • θ: Код F1.
  • ÷: Код AF.
  • χ: Код E3.
  • : Код B5.
  • : Код 13.

На самом деле ближний конец избыточен, но потом я увидел, что ответ должен был иметь нечетную длину ...

Объяснение:

¿      if (
 ﹪      Modulo (
  Iθ      the input as number,
  ÷χ⁵      χ (predefined value: 10) divided by 5 = 2 ) [is 1])
 →θ      then print rightwards the input as string

Вы печатаете, а затем двигаетесь направо; печать вправо будет на самом деле →θ.
Нил

@ Нил ой, исправлено. По крайней мере, это не
Чарли

3

машинный код x86_64 (Linux), 12 11 байт

К сожалению 0x80, даже, но это все-таки сработало (предполагая, что «ничего не делает» означает не возвращаться):

0000000000000000 <odd>:
   0:   8d 07                   lea  (%rdi), %eax
   2:   83 e7 01                and    $0x1, %edi
   5:   83 ff 01                cmp    $0x1, %edi
   8:   75 fb                   jne       5  <odd+0x5>
   a:   c3                      retq

-1 байт, спасибо @CodyGray!

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


1
Поскольку это x86-64, lea (%edi),%eaxтребуется префикс переопределения размера адреса ( 0x67), когда источником является 32-битный регистр. Вы можете устранить это, делая lea (%rdi),%eax. Это экономит байт и фактически делает код немного более эффективным (префиксы замедляют декодирование и заполняют i-cache). Есть некоторые другие вещи, которые вы можете сделать, чтобы сократить это еще больше, но это, по сути, представляет собой полное переписывание, поэтому я опубликую свой собственный ответ. :-) Я тоже за это проголосовал, конечно! (О, только что понял, что вы, возможно, использовали префикс, чтобы сделать смещение при прыжке странным. Ну, вам понадобится больше магии.)
Коди Грей,

Кроме того, действительно умное решение для TIO! Я пропускал его в большинстве моих ответов asm, потому что я не хотел писать весь шаблон в «нижнем колонтитуле» для вывода вывода в asm. Я наконец сломался и сделал это на днях, но это намного лучшая идея, позволяющая вам использовать C для всего остального. Я буду красть это с этого момента! :-)
Коди Грей,

Приветствую вас, я полный нуб на сборке, но это казалось достаточно простым! Любопытно ваше решение. О, кредит идет на @ceilingcat - я сам его украл;)
მოიმო

На самом деле я не сохранил вам байт ... У того, что у вас есть, есть четный байт ( F6) для JNEинструкции, потому что он имеет четное смещение. Это то, что я имел в виду под последней скобкой, которую я отредактировал в своем первом комментарии. Вам действительно нужен этот префикс для создания нечетного выравнивания. Или вы должны переписать код другим способом. Я играл с кучей разных вариаций. Я на самом деле смотрел на это прошлой ночью и пытался найти хороший способ использовать OUTдля вывода нечетных значений, но никаких хороших решений мне не пришло. Понимание здесь для меня состоит в том, чтобы войти в бесконечный цикл для четных значений.
Коди Грей

На самом деле это довольно глупая задача, потому что ни одно из разумных решений не работает. Это действительно просто проверяет, насколько хорошо вы знаете непонятные углы набора команд x86. Я даже попробовал BTсемейство инструкций, которое никто никогда не использует (к сожалению, все регистровые кодировки являются даже байтами). Я подумал, что было бы более интересно писать код, который выводит на последовательный порт, а не просто возвращать значение или что-то еще, но это увеличивает количество байтов (особенно если адреса последовательных портов в шестнадцатеричном формате четны!), Поэтому я отказался от этого.
Коди Грей

3

Mathematica, 20 байтов

Похоже, что это первое решение на неигровом языке.

a=1+1;g[i_/;!a\[Divides]i]=i

В MacintoshChineseTraditionalкодировке символов. \[Divides]есть {161, 253}(2 байта)

Альтернативная версия (23 байта)

\[CapitalAlpha]=1+1;\[CapitalGamma][\[CapitalChi]_/;\[CapitalAlpha]\[LeftFloor]\[CapitalChi]/\[CapitalAlpha]\[RightFloor]\[NotEqual]\[CapitalChi]]=\[CapitalChi]

или (показано в Юникоде)

Α=1+1;Γ[Χ_/;Α⌊Χ/Α⌋≠Χ]=Χ

в Symbolкодировке символов. (используйте только 1-байтовые символы)

Решение определяет функцию g(или Γ), которая оценивает ввод, когда ввод нечетный, и буквально «ничего не делает» (не оценивает), когда ввод четный.


+1 байт ( ;в конце), если число байтов должно быть четным; а \[Divides]также иметь нечетный код Unicode.
user202729

Вам не нужно I[1+1], вы можете просто использовать {1+1}. Кроме того, вы проверили, действительны ли байты скобок пола? Если это так, вы можете получить 2от \[LeftFloor]E\[RightFloor].
Мартин Эндер

@MartinEnder Только Symbolсделать пол действительным, но у него нет ни того, Eни другого \[ExponentialE].
user202729

Боюсь, вам не разрешено использовать персонажей D; v; ни d, поскольку у них есть четное значение байта .. :(
Кевин Круйссен

1
@KevinCruijssen \[Divides]- это один единственный символ в Mathematica, который представлен 2 байтами {161, 253}.
user202729

3

Perl, 54 байта

Требуется -E.

Мне действительно очень понравился этот вызов, я думаю, что хотел бы попытаться улучшить этот ответ, но я думаю, что это может быть самый короткий, который я могу сделать на данный момент. Я уже несколько дней играю с этими ответами, но чувствую, что доволен 54-байтовым решением!

s//A_=Y[;A_=A_%O?A_W''/;y/#A-_/#-A/;s/[#-}]+/uc/ee;say

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

объяснение

По умолчанию большинство строковых функций Perl работают $_, что пусто для запуска.

Сначала s//A_=Y[;A_=A_%O?A_W''/заменяет пустую строку на $_with A_=Y[;A_=A_%O?A_W'', затем y/#A-_/#-A/заменяет символы на основе следующего списка (char выше становится char ниже):

#ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
#$%&'()*+,-./0123456789:;<=>?@A

какие обновления $_содержать $_=<>;$_=$_%2?$_:''. Далее s/[#-}]+/uc/eeзаменяет все символы [#-}]+с uc. Без этого /eeэто будет просто строка uc, но она /eeоценивает содержимое строки дважды. Первая оценка возвращает результат uc, который является заглавной версией, $_но так как не $_содержит буквенных символов, он просто возвращает всю строку, а затем вторая /eснова оценивает строку, которая устанавливает $_либо $_(входное число), либо в ''зависимости от того, или не число нечетное или четное.

Наконец, так как $_теперь содержит то, что мы хотим, мы называем say(что требуется, -Eа не -e), который печатает $_после новой строки.


Альтернативный Perl, 93 байта

Код 92 байта + 1 для -p, который, я чувствую, сделал бы его неконкурентным.

s//_/g;s//uc/e;y/\x09-\x0b/_/;s/____/}[/;s/___/%C]/;s/_/{''H/;y/'{}1CDGH/'-)1-3+--/;s/[#-}]+/uc/ee

Содержит вкладку и вертикальную вкладку в y///, обозначенную как \x09и \x0b.

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


2

LOGO , 390 46 52 50 байт

[ask    1   se[make]iseq    1-3 cos ?/ask   1[1/sum 1   179]?]

Это список шаблонов, который возвращает входные данные, если входные данные нечетные, и вызывает ошибку, если входные данные четные.

Использование:

show invoke [ask ... (paste code here) ... ] 5

выход

5

так как 5 странно, и

invoke [ask ... (paste code here) ... ] 6

вызовет ошибку, потому что 6 четное.



2

TI-BASIC, 14 байтов

Input Q
sinֿ¹(gcd(Q²,int(e
Q

Это приводит к ошибке домена (ничего не печатая на домашний экран) на четном числе.

Input Q             Q is a variable with an odd code. We cannot use "Ans" as it's even.

            int(e   floor(e) = 2; "2" is even.
         Q²         Q may be negative, so we square it which preserves parity.
     gcd(Q²,int(e   1 if Q is odd; 2 if Q is even.
sinֿ¹(gcd(Q²,int(e   Error iff Q is even.

Q                   If there was no error, print Q.

1

Pyth , 14 11 10 9 байт

I + Q_ + K / Q + 3_1KQ 
I! SIcQ + 3_1Q 
I! U + 1_GQ1Q
? И + 1_GQ1k

Тестовый пакет .


Это умный способ, но не должно ли что-то подобное I%Qy1Qработать?
Якуб

@ Якуб Я явно не понял y1... Однако %, к сожалению , это не разрешено.
Дрянная Монахиня

Почему бы нет? %имеет значение ASCII 37 и является нечетным.
Якуб

3
@Jakube, потому что, по-видимому, я доверял этому списку предоставленной ОП (что неверно)
Лаки Монахиня

1

Japt , 4 байта

u)çU

Japt использует ISO / IEC 8859-1 , так что это соответствует (в десятичном формате ) 117 41 231 85.

Проверьте это онлайн!

объяснение

Uu)çU   Implicit: U = input integer
Uu)     Return Python-style U % (missing argument = 2). This gives 1 if U is odd, 0 if even.
   çU   Implicitly convert U to a string and repeat it that many times.
        Implicit: output result of last expression

Сначала я попробовал использовать решения p, в основном çс обратными аргументами. Однако, pвыполняет возведение в степень, если его левый аргумент является числом, поэтому нам нужно явно преобразовать его в строку. Это решение оказывается на самом деле короче байта, в дополнение к отсутствию каких-либо нечетных байтов.


1

постоянный ток , 21 байт

[c]sa?kKKCI-1;1k%1!=a

Десятичный: 91 99 93 115 97 63 107 75 75 67 73 45 49 59 49 107 37 49 33 61 97

Согласно этому стандартному вводу-выводу, эта программа оставляет ввод в главном стеке, если он нечетный, и в противном случае очищает стек. Это можно подтвердить, добавив команду fотладки в конец программы, как на странице TIO.

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

объяснение

[    # Begin macro definition.
 c   # Clear the main stack.
]sa  # End macro definition and push the macro into register "a".
?k   # Prompt for input and store it into precision parameter "k".
KK   # Push two copies of the input to the main stack.
CI-  # Push C-I = 12-10 = 2 to the main stack  
1;1  # Push the value stored in the first index of array "1" (0 by default) 
     # to the main stack. 
k    # Push 0 into parameter "k" to reset the precision (otherwise the modulus 
     # function will not work correctly).
%    # Push the input (mod 2) to the main stack.
1!=a # If the input (mod 2) does not equal 1, execute the macro in register "a".
f    # OPTIONAL: Output the contents of the main stack.

1

TI-Basic, 18 байтов

Сохранено 2 байта благодаря lirtosiast

:Prompt Q
:While 5Q/ᴇ1-int(5Q/ᴇ1
:Q

в байтах (+2 новых строки = 3F)

:Prompt Q
 DD     51
:While 5Q/ᴇ1-int(5Q/ᴇ1
 D1    35 3B B1  35 3B  
        51 31     51 31
         83 71     83
:Q
 51

Смотрите http://tibasicdev.wikidot.com/one-byte-tokens


1
Почему бы не использовать fPart (?
lirtosiast

@lirtosiast, кажется, является четным байтом (BA = 186) согласно tibasicdev.wikidot.com/one-byte-tokens
Оки

О, я неправильно прочитал, какие записи были строками, а какие столбцами.
lirtosiast

1
Я нашел Input Q[newline]sinֿ¹(gcd(Q²,int(e[newline]Q(14 байт). Могу ли я опубликовать отдельный ответ?
lirtosiast

@lirtosiast Ух ты! Это определенно отличается достаточно для отдельного ответа. Люблю это
Оки


0

Баш , 31 байт

read a
[ $[a%2] = 0 ] ||echo $a

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

Объяснение:

read a                   reading the input and define it on the variable a
[ $[a%2] = 0 ]      outputs exit status 0 when a/2 is 0 and exit status 1 if not.
||                           evaluates only when the exit status left of it is 1
echo $a                displays the variable a

Похоже, вы пропустили, что это ограниченный исходный вызов - вы используете запрещенные байты. ( rd $20|hи
Орджан Йохансен

@ ØrjanJohansen исправил, я думаю
ADDB

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