Я навіть не знаю ... Я тільки дивний!


36

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

Ви можете додатково додати до виводу тривалу нову лінію.

Це кодовий гольф, найкоротша відповідь у (непарних) байтах.

Стандартні лазівки заборонені. Крім того, ви не можете використовувати версії мов, які новіші, ніж публікація цього виклику.

Приклад введення> вихід:

13 > 13

42 >


10
Я відмовився від цього виклику, оскільки це завдання "Зробити X без Y".
Leaky Nun

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" не відноситься до загальних викликів з обмеженим джерелом , але до проблем, які забороняють використовувати певні функції мови. Цей виклик не є таким, і він не має жодної з проблем, які роблять проблематичні проблеми "зробити X без Y".
Мартін Ендер

1
@Laikoni Оскільки вже є деякі відповіді, які йдуть у нескінченний цикл, я б сказав, що добре проявляти таку поведінку. Повернення не може трактуватися як нічого не робити.
М.Герцкам

Відповіді:



67

Lenguage , 645529908926937253684695788965635909332404360034079 9394157991500940492270727190763049448735 1174269748937617561533841898064735499551 2293382937520069758100171517157001127181301301301301301301301301301301301301301302

Це приблизно дорівнює 2 дуодециллионам байт.

Файл перекладається на таку програму "мозговий ебан":

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

Вводиться як ASCII-код з максимальним значенням 256. Використовує обгортку.


@Okx Моя помилка. Але чому ви просто не використовуєте ,[<<+>+>-]<[>>+<<-]+>>[-[->]<]<[<[<]>.<]?
користувач202729

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повертаємо початкове значення (в ).

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

Що робить це трохи цікавіше, це те, що код робить більше , а це означає, що зробити це все складніше, використовуючи інструкції, кодовані за допомогою лише непарних байтів. Звичайно, це також означає, що він не спрацьовує при коді гольфу, тож це свого роду компроміс - хочеш цікавого та складного, чи хочеш короткого?

У будь-якому випадку для цього використовується OUTінструкція x86 для запису на порт вводу / виводу 0x3F8, який є стандартним послідовним портом COM1 на ПК. Забавна частина, звичайно, полягає в тому, що всі стандартні порти вводу / виводу (послідовний і паралельний) мають рівні адреси, тому їх не можна просто закодувати як безпосередні для 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, але дивна річ у тому, що двічі
поміняючи

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 7виходить 7, o 8входить у нескінченну петлю.

Фактичний алгоритм є

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

Перша проблема, з якою я зіткнулася, - це брак місця і (, оскільки функція, oяка бере аргумент m, зазвичай визначається як o m=...або o(m)=.... Однак я виявив, що вбудований коментар також {- some comment -}працює як роздільник маркерів, тому визначення o{--}m=...можливо за даними правилами. Редагувати: Ørjan Johansen зазначив, що замість пробілу можна використовувати символ вкладки, економлячи три байти: o m=...

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


Ви можете використовувати вкладку замість пробілу.
Ørjan Johansen

@ ØrjanJohansen Я можу переконатися, що він працює \tзамість цього {--}.
Esolanging Fruit

@ ØrjanJohansen Спасибі, це добре знати.
Лайконі

5

Python REPL, 38 байт

Приймає введення як значення попереднього виразу за допомогою _. Виведенням буде рядок (рядкове представлення цілого числа для непарного чи порожній рядок для парного).

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

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

Щоб запустити його у фактичній оболонці, ви можете спробувати тут . Введіть вхід і натисніть клавішу Enter. Вставте код і натисніть клавішу Enter.

Пояснення:

На це знадобився певний час. Ні множення, ні розгалуження, ні нарізки, ні коми, ні періоди, ні імпорт, ні круглі дужки, ніexec , ні eval, ніprint і ніякі функції. Я отримав одне рішення, що працює на цьому виводі за допомогою stderr, але тоді я зрозумів, що нам потрібно вивести фактичне ціле число, а не лише значення truthy / 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) - неоперативний в Кубіксі.

Це незначна модифікація попереднього алгоритму (той же # байт), який фактично працює для негативних цілих чисел.

Версія куба:

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

Алгоритм:

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

@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

Ви друкуєте, а потім рухаєтесь праворуч; друк направо насправді був би →θ.
Ніл

@ Ніл ой, виправлено. Принаймні, це не визнало мою відповідь ... :-D
Чарлі

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-кеш). Є ще деякі речі, які ви можете зробити, щоб скоротити це ще більше, але це по суті становить повне переписування, тому я опублікую власну відповідь. :-) Я теж це, звичайно, підтримав! (О, щойно зрозумів, що, можливо, ви використовували префікс, щоб зробити стрибок стрибним. Не знадобиться більше магії.)
Коді Грей,

Також справді розумне рішення для TIO! Я пропускаю це у більшості своїх відповідей на ASM, тому що я не хотів писати всю коробку у "нижній колонтитул", щоб надрукувати вихід у ASM. Нарешті я зламався і зробив це днями, але це набагато краща ідея, що дозволяє використовувати C для всього іншого. Я буду красти це відтепер! :-)
Коді Грей

Вітаю за ваші вклади, я є повноцінним нобілом при складанні, але це здалося досить простим! Цікаве ваше рішення. О, кредит йде на @ceilingcat - я сам його вкрав;)
1717

Я насправді не врятував вам байт ... У вас тепер є рівний байт ( F6) для JNEінструкції, оскільки він має рівне зміщення. Ось що я мав на увазі під останнім дужкою, який я змінив у своєму першому коментарі. Цей префікс фактично потрібен для створення непарного вирівнювання. Або вам доведеться переписати код іншим способом. Я грав з купою різних варіацій. Я насправді дивився на це вчора ввечері і намагався з'ясувати хороший спосіб використовувати OUTдля виведення непарних значень, але жодного хорошого рішення мені не вдалося. Розуміння тут для мене полягає в тому, щоб перейти в нескінченний цикл для рівних цінностей.
Коді Грей

Це насправді дуже нерозумно, адже жодне з розумних рішень не працює. Це насправді просто тестує, наскільки добре ви знаєте незрозумілі кути набору інструкцій x86. Я навіть спробував BTсімейство інструкцій, якими ніхто ніколи не користується (на жаль, всі кодування реєстру є навіть байтами). Я подумав, що може бути цікавіше написати код, який виводить на послідовний порт, а не просто повертати значення чи будь-що інше, але це змушує байк рахувати там (тим більше, що адреси послідовних портів у шістнадцятковому рівні!), Так що я відмовився від цього.
Коді Грей

3

Математика, 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]

або (показано в Unicode)

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

в Symbolкодуванні символів. (використовувати лише 1-байтові символи)

Рішення визначає функцію g(або Γ), яку оцінюють для введення, коли вхід непарний, і буквально "нічого не робити" (не оцінює), коли вхід є парним.


+1 байт ( ;наприкінці), якщо кількість байтів має бути парним; а \[Divides]також мають непарну кодову точку Unicode.
користувач202729

Вам не потрібно I[1+1], ви можете просто використовувати {1+1}. Також ви перевірили, чи дійсні байти кронштейнів для підлоги? Якщо так, ви можете отримати 2від \[LeftFloor]E\[RightFloor].
Мартін Ендер

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

Боюся, вам заборонено використовувати символи D; v; ні d, оскільки вони мають рівне
байтне

1
@KevinCruijssen \[Divides]- це один єдиний символ у Mathematica, який представлений двома байтами {161, 253}.
користувач202729

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''/замінює порожній рядок в $_с A_=Y[;A_=A_%O?A_W'', тоy/#A-_/#-A/ замінює символи , засновані на наступному списку (символ вище стає напівкоксу нижче):

#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

ЛОГО , 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
? u + 1_GQ1k

Тестовий набір .


Це розумний спосіб, але чи не має щось подібне I%Qy1Qтакож працювати?
Якубе

@Jakube Я чітко не зрозумів y1... Однак, %це не дозволяють, на жаль.
Leaky Nun

Чому ні? %має значення ascii 37 і непарне.
Якубе

3
@Jakube, тому що, мабуть, я довіряв цьому списку ОП, що надається (що неправильно)
Leaky Nun

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

Згідно з цим замовчуванням IO, ця програма залишає вхід в основний стек, якщо він непарний, і вилучає стек в іншому випадку. Це можна підтвердити, додавши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
Гм ні. Існує не обмеження тривалості програми, а кожного персонажа у ній повинен мати непарне байтове значення.
Ørjan Johansen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.