Я повертаю вихідний код, ви заперечуєте вихід!


39

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

Правила

  • Ви повинні створити повну програму . Тобто, ваш вихід повинен бути надрукований в STDOUT.

  • Обидва числа повинні бути в базі 10 (виведення їх у будь-яку іншу базу або з науковими позначеннями заборонено).

  • Допускається виведення цифр з проміжними / провідними пробілами.

  • Це код-гольф, тому найкоротший (оригінальний) код на кожній мові виграє!

  • Застосовуються лазівки за замовчуванням.

Приклад

Скажімо, ваш вихідний код є ABCі відповідний його вихід 4. Якщо я напишу CBAзамість цього і запускаю його, вихід повинен бути -4.


6
Якщо ми могли би змінити на рівні бітів, а не на рівні байтів, то один байт -(0x45 = 0b00101101) працює в Jelly - отримує --1, оскільки він визначає буквальний -1, а (0xB4 = 0b10110100) дає 1, оскільки він виконує логічну не неявного введення нуля. (Звичайно, працює так само добре: p)
Джонатан Аллан

@TwilightSparkle Чи означає "невикористаний, порожній вхід" означає, що ми можемо розраховувати на функції введення, які негайно досягають EOF?
Borka223

1
@ Borka223 Ні, ви не можете.
HighlyRadioactive

@JoKing Копіювання. Я зніму це.
HighlyRadioactive

Відповіді:



28

JavaScript (V8) , 19 байт

print(1)//)1-(tnirp

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


майже ідентичний ...

C # (Visual C # Interactive Compiler) , 19 байт

Print(1)//)1-(tnirP

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

(спасибі @someone за вказівку на це)


все ще майже те саме в ...

Луа , 19 байт

print(1)--)1-(tnirp

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


але коротше в ...

Python 2 , 15 байт

print 1#1-tnirp

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


Ще коротше в PHP, оскільки він має цей чарівний інструмент друку: <?=...

PHP , 12 байт

<?=1;#;1-=?<

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


Навіть коротший у Ruby, тому що ти можеш inspectшвидше друкувати

Рубін , 8 байт

p 1#1- p

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


Крім того, C # Interactive, Print(1)//)-1(tnirP. ( Спробуйте в Інтернеті! )
мій займенник monicareinstate

Для C # найкоротша програма, ймовірно, також тривіальна:class A{static void Main(){System.Console.Write(1);}}//}};)1-(etirW.elosnoC.metsyS{)(niaM diov citats{A ssalc
LegionMammal978

Не мова програмування, але ви можете зробити 1<!--!<1-(9 байт) за допомогою HTML, що буде, -1<!--!<1коли буде перевернуто. Це робить точно так само, як і ваша відповідь.
Ісмаїл Мігель

Здебільшого те ж саме в Луа:print(1)--)1-(tnirp
Валь каже: Відновити Моніку



12

/// , 4 байти

9/9-

Виходи 9 .

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

Відмінено:

-9/9

Виходи -9 .

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

Перед /друком все, а решта ігнорується (насправді не використовуються косої риски, тому я не знаю точно, що відбувається, але нічого не виводиться).


2
+1 за використання косої риски. /Починається процес шаблону читання, і , таким чином, символи після того , як прочитаний в шаблон, що не виводиться.
HighlyRadioactive

2
Я підійшов /\-//1-і подумав, що я розумний. : D
Таннер Світт


10

Пробіл , 21 байт

S S S T N
T   N
S T N
N
N
T   S N
T   N
T   T   S S 

Букви S(пробіл), T(вкладка) таN (новий рядок) додаються лише як підкреслення.

Виходи 1/-1 .

Спробуйте в Інтернеті або спробуйте перевернути в Інтернеті (лише із пробілами, вкладками та новими рядками).

Пояснення:

Використовуючи програму виходу, побудовану як короткий паліндром NNN.
Звичайна програма:

SSSTN  # Push 1 to the stack
TNST   # Pop and print the top of the stack as number
NNN    # Exit the program, making everything after it no-ops

Зворотна програма:

SSTTN  # Push -1 to the stack
TNST   # Pop and print the top of the stack as number
NNN    # Exit the program, making everything after it no-ops

Невелике додаткове пояснення натискання числа:

  • Перший S: Увімкнути маніпуляцію зі стеком
  • Друге S: натисніть число до стеку
  • S або T : Позитивний / негативний відповідно
  • Деякі S/ з Tподальшим прослуховуванням N: число у двійковому, де S=0таT=1

Тобто SSTTSTSNштовхає -10.



7

Japt , 2 байти

Будь-яке ціле число , одна цифра >0може бути використана замість , 2як може A-G, H, I, Jабо L( 10-16, 32, 64, -1і 100, відповідно).

n2

Перевірте | Зворотний

nМетод при нанесенні на ціле число, віднімання , що ціле число від аргументу , переданого до нього, який по замовчуванням0 . При запуску вперед nметод запускається на неявному першому вході, який також за замовчуванням0 .

Крім того, gметод може бути використаний замість n, який дає знак результату віднімання його аргументу з цілого числа, до якого він застосовується.


7

Хаскелл без коментарів, 41 байт

Відбитки вперед 1 + новий рядок:

main=print$!1
niam=main
"1-"!$rtStup=niam

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

Зворотні відбитки -1без нового рядка (який можна додати вартістю 2 байти):

main=putStr$!"-1"
niam=main
1!$tnirp=niam

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

  • Перший рядок кожної програми друкує число.
    • Для -1 виведення рядків використовується для уникнення дужок.
    • Використання $!(суворе застосування) замість пробілу дозволяє перевернутий рядок бути дійсним визначенням оператора !$(просто $не зробить це, оскільки перевизначення порушить використання).
  • Середня лінія забезпечує це niam визначено для останнього рядка.
  • Останній рядок - це визначення оператора !$, яке не використовується, але його потрібно правильно проаналізувати та встановити перевірку.

7

PHP , 15 13 байт

Версія PHP без зловживань щодо коментарів. ohceє невизначеною константою, тому вона буде дорівнює рядковому значенню її імені. Як результат, це спробується надрукувати +1-'ohce'або -1+'ohce'при переверненні. Оскільки 'ohce'це нечислове значення, замість 0 буде використано арифметичні операції і буде надруковано лише 1або -1.

;echo+1-ohce;

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

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


Це розумно. Приємно!
AdmBorkBork

1
Людина, це сумно, що я дійшов до тієї самої відповіді, що і ти, 3 години пізніше :( Запроси мою пропозицію.
Ісмаїл Мігель,




6

Cubix , 7 6 5 байт

@)O(@

Спробуйте це
перевернуто

Пояснення

Кубіфіковано:

  @
) O ( @
  .

Розгортаючи потік управління, ми виконуємо )O(@, який збільшується, виводиться, зменшується та виходить.

Зворотний і кубізований:

  @
( O ) @
  .

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

Попередня версія

@O(.)O@

Спробуйте це
перевернуто

Не такий короткий, але естетично приємний.


приємно, спосіб розмістити його на кубі розміром 1!
Джузеппе

3
@)O(@на 5 байт та відновлення симетрії :)
MickyT

5

Рунічні чари , 4 байти

1@Z1

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

Я не міг знайти спосіб повторного використання 1команди, навіть за рахунок байта чи двох.

1@ɩ також працює, але однакова кількість байтів.


Чому вхід? У запитанні сказано, що ваша програма не повинна брати участь.
HighlyRadioactive

@TwilightSparkle я неправильно прочитав і вже виправив це
Draco18s

Так, я бачу. Розумний.
HighlyRadioactive


5

Стек котів -mn , 4 байти

:-:_

Спробуйте в Інтернеті! У колонтитулі я включив усі інші 4-байтові рішення. (Стек Cats ігнорує все після першого передачі рядків.)

Спробуйте навпаки!

Пояснення

В -nпрапор черзі на цифровий вихід (і вхід, але ми не маємо який - або), і -mпрапор , як правило , тільки для зручності гри в гольф , який дозволяє уникнути надлишкової частини вихідного коду. Це тому, що кожна програма Stack Cats повинна мати дзеркальну симетрію. За допомогою -mпрапора ви надаєте йому лише першу половину (плюс центральний символ). Отже, власне програма тут:

:-:_:-:

Як ви бачите в першому посиланні TIO, є тонна 4-байтових рішень, але я вибрав це для простоти. Stack Cats базується на стеці, і ця програма використовує лише початковий стек. Оскільки ми не маємо жодного вводу, він містить один -1(маркер EOF) поверх нескінченного колодязя нулів. Три команди в програмі мають таке значення:

:   Swap the top two stack elements.
-   Negate the top stack element (i.e. multiply by -1).
_   Pop a. Peek b. Push b-a.

Отже, ось як програма модифікує стек (стани і команди розміщуються в шахматному порядку, щоб вказати, як кожна команда змінює стек з одного стану в інший):

   :   -   :   _   :   -   :

-1   0   0  -1   1   0   0   1
 0  -1  -1   0   0   1   1   0
 0   0   0   0   0   0   0   0
 …   …   …   …   …   …   …   …

Як виявляється, єдина команда, яка насправді робить що-небудь тут, - _це перетворює наш маркер EOF в a 1. Вихід у кінці програми неявний, і маркер EOF необов’язковий, тому це просто роздруковує отримане 1нами.

Тепер, якщо ми повернемо вихідний код, через неявне дзеркальне відображення, фактична програма стає:

_:-:-:_

Це робить щось зовсім інше:

   _   :   -   :   -   :   _

-1   1   0   0   1  -1   0  -1
 0   0   1   1   0   0  -1  -1
 0   0   0   0   0   0   0   0
 …   …   …   …   …   …   …   …

Цього разу нижня частина стека - це все-таки -1так, що вона діє як маркер EOF і -1друкується лише верхня частина.

...

Тепер, маючи на увазі все, оскільки у Stack Cats є така унікальна взаємозв'язок із кодом, що повертається назад, я відчуваю, що використання -m- це трохи обман. Зазвичай це призначено лише для збереження байтів, опускаючи зайву частину вихідного коду, але тут це фактично робить виклик набагато простішим і навіть повну програму коротшою. Це тому, що повернення повної програми змінить програму лише у тому випадку, якщо вона містить якусь <>[], що також означає, що програма в кінцевому рахунку використовує кілька стеків (у Stack Cats насправді є стрічка стеків, де всі, крім початкової, заповнені лише з нулями для початку). Крім того, реверсування його потім просто змінює місцями <>і []парами, що все ще робить виконання симетричним. Єдиний спосіб порушити цю симетрію - це використовуватиI що робить-] або-[або нічого, залежно від знака верхньої частини стека. Так...


Стек котів -n , 11 байт

*|]I*:*I[|*

Спробуйте в Інтернеті! Нижній колонтитул знову включає всі інші альтернативи при тому ж рахунку байтів. Деякі з них виводять 1 / -1, а деякі виводять 2 / -2, як зазначено після кожної програми. Я вибрав це, щоб щось пояснити випадковим чином, як одне з тих, що виводять 2.

Спробуйте навпаки!

Пояснення

Як я вже говорив, ця трохи довша. Навіть якби ми використали -mдля цього позначення, воно буде важити в 6 байт замість вище 4.

Команди, які використовуються цього разу:

*   Toggle the least significant bit of the top of the stack.
|   Reverse the longest non-zero of prefix on this stack.
[]  Move one stack to the left/right and take the top of the current stack with you.
I   If the top of the stack is positive, -], if it's negative, -[, otherwise do nothing.
:   Swap the top two stack elements.

Перша програма використовує лише два стеки. Це трохи безладно робити в мистецтві ASCII, але я постараюся зробити все можливе. Квадратні дужки вказують, на якій стеці розміщена головка стрічки, і я поставлю команди між кожною парою станів стека.

  [-1]
…   0   0   …
    0   0
    …   …

      *

  [-2]
…   0   0   …
    0   0
    …   …

      | (does nothing)
      ]

      [-2]
…   0   0   …
    0   0
    …   …

      I

   [2]
…   0   0   …
    0   0
    …   …

      *

   [3]
…   0   0   …
    0   0
    …   …

      :

   [0]
…   3   0   …
    0   0
    …   …

      *

   [1]
…   3   0   …
    0   0
    …   …

      I

      [-1]
…   3   0   …
    0   0
    …   …

      [

  [-1]
…   3   0   …
    0   0
    …   …

      |

  [ 3]
…  -1   0   …
    0   0
    …   …

      *

  [ 2]
…  -1   0   …
    0   0
    …   …

Тепер він -1виступає як маркер EOF і2 друкується.

Інша програма залишається тією самою, що й до [. Це все одно практично все так само до другого I. Ми технічно знаходимося на іншому стеку, але без значень на них, всі вони не відрізняються. Але тоді різниця між I[і I]закінчується важливою:

    *|[I*:*I

      [-1]
…   3   0   0   …
    0   0   0
    …   …   …

        ]

          [-1]
…   3   0   0   …
    0   0   0
    …   …   …

        | (does nothing)
        *

          [-2]
…   3   0   0   …
    0   0   0
    …   …   …

На цей раз у нас немає маркера EOF, але програма все одно виводить -2.


4

Zsh , 12 байт

<<<2 # 2-<<<

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

Основний метод вперед, коментар, зворотний зв'язок.


Якщо введення / виведення менш обмежувальне, то можливе більш цікаве 11-байтне рішення завдяки Zsh, що підтримує негативні повернення:

return -127

Зворотний, 721- nruterвиходить із кодом 127(команда не знайдена). exit -127не може бути використаний, він буде доданий до а u8. Спробуйте в Інтернеті!



4

MATL , 3 байти

Nqv

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

Як вони працюють

Звичайний:

N   % Push number of elements in the stack: 0
q   % Subtract 1: gives -1
v   % Concatenate stack contents vertically: leaves -1 as is
    % Implicit display stack contents

Відмінено:

v   % Concatenate stack contents vertically: gives the empty array, []
q   % Subtract 1: leaves [] as is
N   % Push number of elements in the stack: 1
    % Implicit display. [] is not displayed


4

Шестикутник , 5 байт

1!@!(

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

Будь-яка дійсна програма повинна:

  • Мати команду припинення ( @або: ). Останній відрізняється лише для першого, коли є команда руху вказівника пам’яті. Також ця команда не повинна бути на першому чи останньому байті.
  • Мати вихідну команду. ( !,; також можливо, але, ймовірно, займе більше байтів)
  • Майте команду маніпулювання пам'яттю.

Тому 2-байтну програму, очевидно, неможливо. 3-байтова програма неможлива, оскільки другий байт повинен бути командою завершення, а перший байт не повинен бути командою маніпулювання дзеркалом / IP, тому може виконуватися лише 1 байт.

Я думаю, що 4-байтова програма неможлива. Така програма повинна мати форму a@bcз шестикутною сіткою

 Forward:       | Backward:
                | 
  c b           |   a @
 @ a .          |  b c .
  . .           |   . .

Тому aповинна бути команда перенаправлення IP. Однак неможливо генерувати як позитивне, так і негативне число лише за допомогою однієї команди маніпулювання пам'яттю.


+1 для підтвердження оптимальності в інакші тривіальній відповіді
Jo King



3

Java 5 або 6, 127 67 байт

enum A{A;{System.out.print(9);}}//}};)9-(tnirp.tuo.metsyS{;A{A mune

Виходи 9/-9 .

Немає онлайн-компілятора, оскільки Java 5 або 6 недоступна ніде.

Однак ви можете спробувати цей 127 байт, еквівалент Java 8:
Спробуйте в Інтернеті або спробуйте перевернутий онлайн .

Пояснення:

enum A{                              // Create an enum
 A;                                  //  With a mandatory value
 {                                   //  And in a separate instance code-block:
  System.out.print(9);}}             //   Print 9 to STDOUT
//}};)9-(tnirp.tuo.metsyS{;A{A mune  // Comment and thus a no-op

У Java 5 та 6 виникла помилка, яка дозволила вам створити блок коду всередині enum, щоб щось зробити, незважаючи на відсутність обов'язкового основного методу програми. Це призведе до помилки:

java.lang.NoSuchMethodError: main
Виняток у потоці "main"

Але все одно виведемо те, що ми б хотіли СТАТУТИ спочатку, тому ми можемо це ігнорувати .


3

Голанг , 109 байт

package main;import "fmt";func main(){fmt.Println(1)}//})1(nltnirP.tmf{)(niam cnuf;"tmf" tropmi;niam egakcap

І його зворотний бік:

package main;import "fmt";func main(){fmt.Println(-1)}//})1(nltnirP.tmf{)(niam cnuf;"tmf" tropmi;niam egakcap

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


2
Я не знаю Перейти, але, здається, ви можете видалити кілька байт. PrintlnМоже бути Print, і import "fmt";не потрібно простір: import"fmt";. :)
Кевін Круїйсен

3

Perl 5 (-p), 12 байт

\$--{}}{++$\

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

! enilno ti yrT

}{Псевдо-оператор дійсно стане в нагоді.


Perl 5 (-M5.010), 9 байт

Надано Науелем Фуле у коментарі

say+1-yas

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

! enilno ti yrT


2
має бутиsay 1#1-yas
Nahuel Fouilleul

@NahuelFouilleul yas дійсно
Grimmy

1
9 байт: say+1-yasіsay-1+yas
Науель Фуле

3

Сітківка , 6 байт

-`<
-

Друкує 1.

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



-
<`-

Друкує -1.

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

Пояснення: 1

-`<
-

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


І цей другий етап відповідає порожньому регулярному вираженню проти порожнього вводу і підраховує кількість збігів, що рівно 1. Вихідний сигнал неявний.

Пояснення: -1


-

Цього разу замінимо порожній регулярний вираз -. Це дійсно перетворює порожній вхід в єдиний -.

<`-

Тут конфігурація насправді щось робить: <друкує вхід етапу перед виконанням етапу, тому ми друкуємо -. Потім -підраховує дефіси у вхідному етапі, який є знову 1. Через неявний вихід, він друкує a 1після -, даючи нам, -1як потрібно.


3

ТЕХ(MathJax), 4байт

1%1-

КодРезультатВперед:1% 1-1Відсталі:-1% 1-1


3

мозковий ебать , 156 байт

+++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++<+++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++

Спробуйте в Інтернеті! / Перевірка вперед / назад в Bash

Друкує -1вперед і \n1назад.

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

Доказ:

  • Програма не може мати [або ].

    Тому програма повинна мати форму <A> . <B> . <C>.

  • Кожен ,може бути замінений достатньою кількістю <без збільшення кількості +або -.

  • Кожен +корисний лише в програмі вперед або назад, ніколи і в обох.

    Доведення: +в частині A, очевидно, корисна лише програма вперед, а +в частині C, очевидно, корисна лише в відсталій програмі.

    Позначимо shift(P)= число <в P - кількість >в P. Розгляньте програму <B> = <D> + <E>, +посередині корисна програма вперед shift(E) = 0Аналогічно, це корисно і в відсталій програмі shift(D) = 0. Однак якщо shift(D) = shift(E) = 0тоді програма, Bвиконана вперед або назад, додала б фіксованому значенню поточній комірці перед друком вдруге, що не може бути так ord('1') - ord('\n') != ord('1') - ord('-').

Тому потреби програми щонайменше , ord('-')+ord('1')+ord('\n')+ord('1') = 153 +з, 2 .с, і , щонайменше, < >або ,з - за shift(B) != 0.

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