Источник С Ограниченным Доступом — Код Выхода, Игра В Гольф

  • Автор темы Светуль4ик
  • Обновлено
  • 22, Oct 2024
  • #1

Вдохновлено это значение по умолчанию для ввода-вывода.

Задача

Напишите программу, которая по входному целому числу main between 0 and 255, crashes with exit code System.exit(x) .

Ограничения

  • Вы не можете вызывать ничего, что предназначено непосредственно для вывода кода выхода ( x , returning from x , и т. д.). Вместо этого ваша программа должна вызвать ошибку или сбой, что приведет с вероятностью 1 к завершению программы с входным целым числом.
    • В этом случае слова «ошибка» и «сбой» означают, что программа вызвала какое-то фатальное непреднамеренное исключение, при котором метод, операция или иное было использовано неправильно, что привело к необратимому сбою.
    • Вы не можете напрямую вызвать ошибку, выдав ее напрямую. Вы должны вызвать это, используя метод, функцию или иное средство, цель которого служит другой функции (т. е. попытка выполнить запись файла в каталог, доступный только для чтения).
  • В вашей программе должно быть учтено как минимум два кода выхода.
  • Завершение процесса с использованием сигналов запрещено. (Аргументацию можно найти в этом обсуждении)

Подсчет очков

Оценка вашей программы определяется количеством поддерживаемых кодов выхода, где точность кода является решающим фактором. Побеждает наибольшее количество поддерживаемых кодов выхода!

#code-challenge #ограниченный источник #сообщение об ошибке

Светуль4ик


Рег
02 Nov, 2011

Тем
80

Постов
187

Баллов
607
  • 26, Oct 2024
  • #2

Unix Shell (+ncurses +BSD-утилиты), 36, 26 байт, 256 кодов выхода

играл в гольф

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 IF/ELSE 

Если используется опция -S, tput проверяет наличие ошибок в каждой строке и, если ошибки обнаружены, устанавливает код завершения равным 4 плюс количество строк с ошибками. Если ошибок не обнаружено, код выхода равен 0. Невозможно указать, какая строка дала сбой, поэтому код выхода 1 никогда не появится. Коды выхода 2, 3 и 4 сохраняют свою обычную интерпретацию.

Как только tput код выхода превышает 255, он просто переполняется, поэтому 253 (ошибки при вводе) приведет к коду выхода 1 и т. д., что дает желаемый статус выхода для всего диапазона входных данных.

Примечание: ли tput не произойдет сбой при настройке/получении определенной возможности, зависит от типа терминала, который я использовал: IF N>0 AND N <=255 THEN GOTO 3: ELSE GOTO 1

записка это БСД утилита, которая

печатает последовательные или случайные данные, и (AFAIK) также доступен «из коробки» в системах OSX. N available, you can use a slightly longer (29 bytes) version:

1 INPUT N 2 GOTO 1+(2*(N>0 AND N <=255)) 3 PRINT "EXIT CODE ";N 4 RAND USR N

Если в вашей системе нет Попробуйте онлайн!

(версия 29 байт)

 

Shance


Рег
15 Dec, 2011

Тем
64

Постов
203

Баллов
563
  • 26, Oct 2024
  • #3
SPSET.,0INPUT C$GOTO"@"+C$@0 STOP@3 A @4 CLS.@5@A GOSUB@A@7?1/A@8 X$=3@9 A%=POW(2,31)@10 BEEP-1@11 DIM B[#ZL*#R]@13 READ A @15 V"OPTION STRICT?X @16 CALL@D@17 V@A*2 @18 V"VAR A,A @19 V"DEF A:END:DEF A @20 V"FOR I=0TO @21 V"NEXT @22 V"REPEAT @23 V"UNTIL @24 V"WHILE. @25 V"WEND @26 V"IF.THEN @27 V"IF.THEN"+CHR$(10)+"ELSE @28 V"ENDIF @29 V"DEF X @30 RETURN@31 DIM E[-1]@32 V"DEF A:DEF @34 GOTO"| @36 XOFF MIC MICSTOP @37 XOFF MOTION GYROSYNC @38 PRGDEL @39 DIM F[66]SPANIM.,1,F @40 DIM G[2]SPANIM.,1,G @42 MPSTART 2,@A@L MPSEND"A"GOTO@L@44 PROJECT @46 USE"PRG1:A @47 BGMPLAY"` @48 X= @51 DLCOPEN" DEF V C PRGEDIT 1PRGDEL-1PRGSET C EXEC 1 END

Bash 4.2 + дополнения, 24 кода выхода

Спасибо @KenY-N за 3 кода выхода. Спасибо @el.pescado за 1 код выхода.

Проверка

RÇĿỌḊ?R Main link. Argument: n (integer) R Range; yield [1, ..., n] if n > 1 or [] if n = 0. Ḋ? If the dequeued range, i.e., [2, ..., n] is non-empty: Ç Call the third helper link. Ŀ Execute the k-th helper link, where k is the the integer returned by Ç. Else, i.e., if n is 0 or 1: Ọ Unordinal; yield [] for n = 0 and "\x01" for n = 1. R Range. This maps [] to [] and causes and error (exit code 1) for "\x01". Ṁ¹Ŀ Third helper link. Argument: r (range) Ṁ Maximum; retrieve n from r = [1, ..., n]. ¹Ŀ Call the n-th helper link (modular). When n = 139, since 139 % 3 = 1, this calls the first helper link. When n = 137, since 137 % 3 = 2, this calls the second helper link. 2* Second helper link. Argument: k 2* Return 2**k. Since 2**137 % 3 = 174224571863520493293247799005065324265472 % 3 = 2, ÇĿ in the main link will once again call the second helper link. Trying to compute 2**2**137, a 174224571863520493293247799005065324265472- bit number, will get the program killed for excessive memory usage. ߀ First helper link. Argument: k ߀ Recursively map the first helper link over [1, ..., k]. This creates infinite recursion. Due to Jelly's high recursion limit, a segmentation fault will be triggered. ||answer||

Все тесты проводились на openSUSE 13.2.

߀ 2* Ṁ¹Ŀ RÇĿỌḊ?R

ИНТЕРКАЛ (C-INTERCAL), 15 кодов, 313+2=315 байт

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

пробелы здесь не имеют значения. (Исходная программа содержала табуляции, но я преобразовал их в пробелы, чтобы они правильно выстраивались в SE; для INTERCAL принято использовать ширину табуляции 8. Я тестировал версию программы со всеми табуляциями и пробелами. , а новые строки удалены, и все работает нормально.) require('readline').createInterface({input:process.stdin}).prompt("",i=>i&&x) (2 byte penalty, because 0<0 Скомпилировать с

требуется, чтобы компилятор был детерминированным). 0<input()<x for 0**-input() .

Как обычно для INTERCAL, это требует числового ввода в формате, например,

Объяснение

Когда программа C-INTERCAL выдает ошибку, статусом выхода является код ошибки по модулю 256. В результате мы можем попытаться написать программу, способную выдавать как можно больше ошибок во время выполнения. В этой программе отсутствуют только две ошибки времени выполнения, которые не указывают на внутренние проблемы компилятора: ICL200I, поскольку для ее воспроизведения требуется использование внешних библиотек, совместимых только с однопоточной программой (а в многопоточных программах доступно больше ошибок); и ICL533I, потому что 533 имеет то же значение по модулю 256, что и 277, и программа способна выдавать ICL277I. 1/-1 ) a value for the variable input()-1 Программа всегда запускается одинаково. Сначала мы вводим ( ~-input() statement to create new syntax (here, 1/~-input() . Затем мы используем вычисленный 1>>-input() . Finally, in most cases we run our new 1>>-input() 1/~-input() 0<input()<x ); но поскольку он вычисляется, определение синтаксиса варьируется в зависимости от значения

оператор, который был определен как вызывающий ошибку; имеющаяся у нас таблица возможных определений содержит определения для каждой возможной ошибки времени выполнения (кроме исключений, перечисленных выше). ArrayIndexOutOfBoundsException is not a valid line number, so if the user inputs '0' Во-первых, из этой общей схемы есть два исключения. '1' ) to the fourth line by means of a computed '0' , прыгаем со второй строки (с номером i->1/(i-1) , which produces error interface I{static void main(String[]a){a[a[0].charAt(0)-48]="";}} заявление. Затем это приводит к синтаксической ошибке 1 / 0 statement also has a side effect, even if no actual 1 . (В INTERCAL синтаксические ошибки случаются во время выполнения из-за тенденции отключения команд, переопределения синтаксиса под вас и т. д.). 0 to 1/(input()<'1') происходит, создавая перегрузку операнда из

всякий раз, когда выполняется строка с номером строки; это используется позже при создании результата 21. (Случайные глобальные побочные эффекты довольно идиоматичны в INTERCAL.) eval . There's no line number 1/-1 Другое исключение связано с вводом 1/0 . So I didn't have to write any code to cover that case at all.

в программе, поэтому мы получаем ошибку из-за отсутствующего номера строки, что

  • 123 Вот другие ошибки и их причины: 1 stack overflow ( 1/0 это System.exit statement needs other modifiers ( 1/(args(0).toInt-1) ). if(args(0)=="1")1/0 ) in order to retroactively determine what sort of control statement it was. Not having those causes error ICL123I once there are 80 unresolved `NEXT statements.
  • 222 или use Test; # bring in 「plan」 and 「ok」 plan $_ = @*ARGS[0]; # plan on having the input number of tests # only actually needed for the 255 case # if the plan is greater than the number of tests # it fails with exitcode 255 ok # increment the failure counter if the following is False try { # don't let this kill the whole program open "" # fails to open a file } for # repeatedly do that ^( # upto Range $_ % 255 # either the input number of times, or 0 times for 255 ) in a use Test;plan $_=@*ARGS[0];ok try {open ""} for ^($_%255) это переполнение тайника (
  • 240 петля). Тайники ограничены только доступной памятью, но со временем она закончится, что приведет к ошибке ICL222I. && means, and it causes error ICL240I.
  • 241 измеряет массив до нулевого размера. Это именно то, что && hasn't been allocated ( && вызвано присвоением за пределами массива. В этом случае,
  • 19 используется для переменных типа массива в INTERCAL), поэтому его индексирование вызывает ошибку ICL241I. + ) to a 16-bit variable "0" присваивает 65536 (
  • 21 . Он не подходит, вызывая ошибку ICL275I. "1" to process.argv назначает f=i=>i&&f(i) to mean +process.argv[2]&&a . Это может показаться достаточно простым заданием, но мы перегрузили ?;(* option on the command line causes error ICL277I.
  • 148 ранее и пытаясь изменить значение 1 без . ), which doesn't exist at this point in the program (we haven't run any commands to manipulate the choicepoint stack, so it's still empty). That causes error ICL404I.
  • 180 пытается вернуться к верхней записи стека точек выбора ( ! from a nonexistent stash (because we didn't stash anything there in this branch of the program), causing error ICL436I.
  • 50 попытки !.(0 ) forever in a ; запрашивает ввод (
  • 109 петля. В конце концов мы закончим чтение после EOF, что приведет к ошибке ICL562I. ? , which is meaningless and specifically documented as causing an error (ICL621I).
  • 120 запускает оператор '[space] . We haven't run that many ' ?; запускает оператор
  • 223 операторов еще нет, и поэтому мы получаем ошибку ICL120I. (Интересно, что эта конкретная ошибка определяется в документации INTERCAL как обычный выход из программы с последующей причиной ошибки, а не как выход из программы с ошибкой. Однако я не верю, что эти два случая заметно различаются.)
  • 121 По сути, это сложная путаница примитивов многопоточности, все из которых указывают на строку 223, вызывая бесконечный цикл, который приводит к взрыву памяти. В конечном итоге в подсистеме многопоточности возникает нехватка памяти, что приводит к ошибке ICL991I.

на самом деле это допустимый оператор (это комментарий), но он появляется в конце программы. Таким образом, выполнение прерывается в конце программы сразу после ее выполнения, что приводит к ошибке ICL633I.

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

?;(*

А вот результат (номера строк и сообщения «ПОЖАЛУЙСТА ИСПРАВИТЕ ИСТОЧНИК» удалены для экономии места), который я добавил отчасти для того, чтобы продемонстрировать работу программы, но в основном для того, чтобы продемонстрировать глупые сообщения об ошибках INTERCAL:

!.(0 ||answer||

C90 (gcc), 256 кодов выхода, 28 27 18 байт

' ?;

Я не уверен, умно это или обманчиво, но я не думаю, что это нарушает написанные правила: технически это не использует 5 , 3 или любой другой механизм выдачи ошибок, а просто полагается на неопределенное поведение и тот факт, что gcc делает что-то довольно удобное в этой задаче.

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

Как это работает

Это просто использует 1 to read one byte from STDIN. By itself, this does nothing.

Однако программа, совместимая с C90, должна заканчиваться 0 statement or something equivalent; everything else is undefined behavior. gcc ends the generated assembly with a 3 5 6 7 9 10 11 13 14 20 28 35 92 94 в любом случае, любое значение, случайно находившееся в регистре EAX, будет возвращено программой. К счастью, glibc n= stores the byte it reads from STDIN in EAX, so the value of that byte is the exit code of our program.

 

Oxana84


Рег
27 Jan, 2011

Тем
69

Постов
200

Баллов
545
  • 26, Oct 2024
  • #4

Perl, 108 байт, 256 кодов выхода

Эта программа (ab) использует модуль Test::More. Он пытается открыть файл с именем n=[Value] н времена, когда н передается как аргумент командной строки. Каждый раз он терпит неудачу, и каждый вызов рассматривается как проверка. Test::More возвращает количество неудачных тестов в качестве кода выхода. Sub e() Dim a As Application, b As Byte, s As String, v(), x Set a=Application #If n=3 Then Return #ElseIf n=5 Then b=a.CommandBars("") #ElseIf n=6 Then b=2^8 #ElseIf n=7 Then ReDim v(9^9) #ElseIf n=9 Then v=Sheets("") #ElseIf n=10 Then v=Array(1) For Each x In v ReDim v(9) Next #ElseIf n=11 Then b=1/0 #ElseIf n=13 Then Debug.?Int("X") #ElseIf n=14 Then Debug.?String(9E8,1) #ElseIf n=20 Then Resume #ElseIf n=28 Then f 256 #ElseIf n=35 Then Call c #ElseIf n=92 Then For Each x In v ReDim v(9) Next #ElseIf n=94 Then b=Null #End If End Sub Sub f(n):DoEvents:f n-1:End Sub is needed to get exit code 255.

n=[input value] ||answer||

C (gcc) под оболочкой bash на x86, 230 байт, 8 кодов выхода

Добавлены новые строки для удобства чтения. Комментарии игнорируются в рейтинге.

Conditional Compilation Argument

Особенность оболочки bash:

Когда команда завершается фатальным сигналом N, bash использует значение 128+N в качестве статуса выхода.

Итак, все, что нам нужно сделать, это вызвать различные сигналы из программы на языке C. На данный момент я предполагаю, что просто делаю -r is banned. So instead we execute code that triggers various signals, which causes the corresponding error codes to be made available at the calling shell.

Коды выхода: 0, 130, 133, 134, 136, 139, 141, 142.

Попробуйте онлайн. Разверните раздел «Отладка», чтобы увидеть код возврата.

Это, конечно, можно играть глубже. Но мне было бы больше интересно добавить больше сигналов.

 

AtrottTream100


Рег
25 Oct, 2024

Тем
64

Постов
196

Баллов
586
  • 26, Oct 2024
  • #5

Python 2, 13 байт, 2 кода выхода

<b>Fatal error</b>: Uncaught Error: Call to undefined function p()

Если вы введете 0, он попытается напечатать 0 which is -1 which is perfectly fine thus exit code 0. If you enter 1, you get 1 что вызывает !$argv[1]?:p(); in which there is an exit code of 1. With my IDE, there is only 0 and 1 for the exit codes...

Выходы:



 

Oracroedy62


Рег
02 Sep, 2014

Тем
84

Постов
196

Баллов
656
  • 26, Oct 2024
  • #6

PHP, 15 байт, 2 кода выхода

Без ~1 / 255 , PHP не может вернуть ничего, кроме 0 или exit (афаик; наверное die ), so ...

ZeroDivisionError

Если аргумент командной строки является ложным, он оценивается как 1/0 and exits with 1/-1 . Если нет, он пытается вызвать функцию и завершает работу с 1/(input()-1) .

Беги с kill(n-128); .

 

HoMo


Рег
23 Dec, 2008

Тем
74

Постов
195

Баллов
575
  • 26, Oct 2024
  • #7

Эксель ВБА, 414 514 533 + 3 байта, 14 кодов выхода

Принимает входные данные как main(int c, char **v){ int p[2]; switch(atoi(v[1])-128){ case 2:__asm("UD2"); /* SIGILL: x86 undefined instruction */ case 5:__asm("int $3"); /* SIGTRAP: x86 breakpoint instruction */ case 6:abort(); /* SIGABRT: raise() is called under the covers */ case 8:c/=c-2; /* SIGFPE: divide by 0 (c-2) */ case 11:c=*(int *)c; /* SIGSEGV: dereference of invalid pointer */ /* SIGPIPE: write() to a pipe closed at the other end */ case 13:socketpair(1,1,0,p);close(p[1]);write(p[0],v,1); case 14:alarm(1);sleep(2); /* SIGALRM: kernel will send alarm signal after 1 sec */ } } , #!/usr/bin/perl use Test::More; plan tests => $ARGV[0]%255 if($ARGV[0]>0); ok(open(F,"")) for (1..$ARGV[0]) и выдает код ошибки, связанный с этим номером.

plan tests => $ARGV[0]%255

+3 за "" conditional compilation call

Обрабатывает входные данные, где getchar

ret

Примечание: VBA не имеет кодов выхода return or getchar . Я включил решения для return and exit , которые представляют собой два кода выхода с наименьшим номером, доступные для VBA вместо них.

 

LowNoise1


Рег
06 Jun, 2016

Тем
77

Постов
202

Баллов
627
  • 26, Oct 2024
  • #8

Черепаха, 4 байта, 2 кода выхода

Я не знаю, есть ли какие-нибудь способы получить больше кодов выхода... есть ли еще способы на языке интерпретатора

Я нашел несколько четырехкратных ответов

main(){getchar();}

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

ZERO ICL000I PLEASEWRITEIN.1(8)PLEASECREATE.1APLEASEAPLEASECOMEFROM#2$!1/#1'DOX(123)DO(123)NEXTDOCOMEFROM(222)(222)DOSTASH.2(240)DO,1<-#0(241)DO,1SUB#0<-#1(19)DO.2<-#256$#0(21)DO.1<-#2(148)DOGOBACK(180)DORETRIEVE.2DOCOMEFROM(50)(50)DOWRITEIN.2(109)DORESUME#0(120)DORESUME#9MAYBECOMEFROM(223)(223)DOCOMEFROM(223)(121)PLEASENOTX 0 ONE NINE ICL275I DON'T BYTE OFF MORE THAN YOU CAN CHEW 19 TWO ONE ICL277I YOU CAN ONLY DISTORT THE LAWS OF MATHEMATICS SO FAR 21 FIVE ZERO ICL562I I DO NOT COMPUTE 50 ONE ZERO NINE ICL621I ERROR TYPE 621 ENCOUNTERED 109 ONE TWO ZERO ICL632I THE NEXT STACK RUPTURES. ALL DIE. OH, THE EMBARRASSMENT! 120 ONE TWO ONE ICL633I PROGRAM FELL OFF THE EDGE 121 ONE TWO THREE ICL123I PROGRAM HAS DISAPPEARED INTO THE BLACK LAGOON 123 ONE TWO NINE ICL129I PROGRAM HAS GOTTEN LOST 129 ONE FOUR EIGHT ICL404I I'M ALL OUT OF CHOICES! 148 ONE EIGHT ZERO ICL436I THROW STICK BEFORE RETRIEVING! 180 TWO TWO TWO ICL222I BUMMER, DUDE! 222 TWO TWO THREE ICL991I YOU HAVE TOO MUCH ROPE TO HANG YOURSELF 223 TWO FOUR ZERO ICL240I ERROR HANDLER PRINTED SNIDE REMARK 240 TWO FOUR ONE ICL241I VARIABLES MAY NOT BE STORED IN WEST HYPERSPACE 241

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

for x in "ZERO" "ONE NINE" "TWO ONE" "FIVE ZERO" "ONE ZERO NINE" "ONE TWO ZERO" "ONE TWO ONE" "ONE TWO THREE" "ONE TWO NINE" "ONE FOUR EIGHT" "ONE EIGHT ZERO" "TWO TWO TWO" "TWO TWO THREE" "TWO FOUR ZERO" "TWO FOUR ONE"; do echo; echo $x; echo $x | (ulimit -Sd 40000; ulimit -Sv 40000; ulimit -Ss 40000; ./errors; echo $?); done

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

Как это работает:

NEXT

в моем интерпретаторе есть функция ошибки, которая вызывает ошибки, когда сетка в памяти имеет более одной строки и не содержит символов, отличных от пробелов. эта программа стирает * в исходной ячейке DO RESUME #9 , takes non-negative integer input DO RESUME #0 (на самом деле 0 или 1) и перемещается вниз на столько же COME FROM , if it is zero, the grid will only have one line and not error, otherwise it will move down and the error will occur

WRITE IN

круглые скобки и прочее не анализируются, они просто выполняются во время выполнения, что означает: «перейти к соответствующей скобке, если символ ячейки неправильный». в этой программе, вводя ( RETRIEVE .2 ) one causes the program to write it to the cell ( GO BACK ), выполнить скобку, которая проверяет, равен ли символ ячейки 0, попытаться перейти к соответствующей скобке, но вместо этого выдать ошибку, поскольку ее нет. если он равен нулю, он записывает его, проверяет скобки, находит 0, а затем игнорирует его и программа завершает работу.

-v

имеет элементы предыдущего ответа и первого. он принимает неотрицательное целое число, перемещается вниз на это число и проверяет, является ли ячейка «*», ища несуществующую дополнительную скобку, если это не так. если входной сигнал равен 1, он переместится за пределы начального пробела и обнаружит, что ячейка представляет собой пробел и ошибку, если он равен нулю, он останется в начальном пространстве и проигнорирует скобку.

 

Ua3pkv


Рег
31 Mar, 2020

Тем
83

Постов
201

Баллов
626
  • 26, Oct 2024
  • #9

Javascript (узел), 19 байт, 2 кода выхода

Полная программа:

#1

Функция:

.1

.1 is an array that contains the path to the node executable, the path to the javascript file executed and the command line arguments. In this case, this will be either #2 or .2 . The string is converted to a number with the unary #256 $ #0 оператор. Если число равно нулю, ленивый , operator won't evaluate the right hand side, if the number is truthy (not zero), the right hand side of ,1 оценивается и выдается ошибка, поскольку она ссылается на неопределенную переменную, а программа существует с кодом завершения 1.

Функция ожидает ввода в виде числа. Если входные данные правдивы, функция вызывает саму себя и приводит к сбою среды выполнения узла из-за переполнения стека. Если входной сигнал равен 0, ленивый DO ,1 <- #0 operator returns 0 without evaluating the right hand side.

 

TotoS


Рег
08 Apr, 2020

Тем
72

Постов
222

Баллов
612
  • 26, Oct 2024
  • #10

Perl 6, 57 байт, 256 кодов выхода

COME FROM

Попробуйте это
Это перевод примера Perl 5.

Расширенный

DO STASH .2 ||answer||

Scala, 19 байт, 2 кода выхода

RESUME

FORGET

JVM поддерживает только 1 и 0 в качестве кодов выхода, если вы не вызываете NEXT .

Первая программа пытается вычислить DO (123) NEXT if the first argument is NEXT , что приведет к сбою JVM с кодом завершения 1. Если аргумент равен 0, произойдет успешный выход.

Вторая программа преобразует аргумент в целое число, вычитает единицу и пытается разделить 1 на это число. Если аргумент равен 1, он вычисляет ICL129I , so the JVM will crash; if the argument is 0, it calculates (129) и выходит.

 

Xusan


Рег
11 Apr, 2014

Тем
80

Постов
209

Баллов
609
  • 26, Oct 2024
  • #11

Питон 3, 15 байт, 2 кода выхода

Очевидно, это дольше, чем Решение Python 2, потому что в Python 3 мы не можем принять буквальный ввод без вызова ONE TWO NINE . However, we can use string comparison techniques interestingly...

#1

Ввод будет либо строкой .1 or COME FROM - если оно равно 1, условие оценивается как 0 (ложь), что приводит к попытке вычислить COME FROM which obviously crashes (exit code 1). Otherwise, nothing happens, and Python exits with the regular exit code 0.

Насколько мне известно, Python не способен аварийно завершить работу с другими кодами выхода.

 

Arvis1


Рег
01 Oct, 2005

Тем
72

Постов
214

Баллов
624
  • 26, Oct 2024
  • #12

Java, 71 66 байт, 2 кода выхода

4 байта сэкономлены благодаря Хольгеру

Полная программа:

ICL000I

Функция, принимающая int в качестве аргумента:

DO X

Программа принимает первый символ первого аргумента (либо COME FROM or (8) и вычитает 48 (значение ascii ZERO ) to get an integer (0 or 1). It then tries to set the argument at the position of that integer to the empty string. If the input is 1, the program crashes with an (0) , поскольку массив аргументов имеет только один элемент в позиции 0 (с нулевым индексом).

 

Robertsib


Рег
03 Aug, 2014

Тем
83

Постов
207

Баллов
622
  • 26, Oct 2024
  • #13

Python 2, 11 байт, 2 кода выхода

A

Три разных 11-байтовых решения для трех разных ошибок! (Просто ради интереса, это не дает очков.) По умолчанию Python имеет только коды выхода 0 для успешного выхода и 1 для ошибки. Успешные запуски ничего не выводят.

.1

На входе 1 выдается «ValueError: счетчик отрицательного сдвига». На входе 0 подсчет нулевого сдвига завершается успешно и дает 1.

A

На входе 1 выдает «ZeroDivisionError: целочисленное деление или по модулю на ноль» из-за CREATE , aka .1 равно 0. На входе 1 WRITE IN gives -1. 123 тоже будет работать.

ONE TWO THREE

На входе 1 выдает «NameError: имя 'x' не определено». На входе 0 это первое неравенство -b is evaluated to False, so the rest is not evaluated and the result is just False.

 

Bekshaev1984


Рег
02 Apr, 2020

Тем
75

Постов
192

Баллов
577
  • 26, Oct 2024
  • #14

Node.js (ES6), 77 байт, 2 кода выхода

-abm ||answer||

Желе, 4 кода выхода, 18 байт

PLEASE WRITE IN .1 (8) PLEASE CREATE .1 A PLEASE A PLEASE COME FROM #2$!1/#1' DO X (123) DO (123) NEXT DO COME FROM (222) (222) DO STASH .2 (240) DO ,1 <- #0 (241) DO ,1 SUB #0 <- #1 (19) DO .2 <- #256 $ #0 (21) DO .1 <- #2 (148) DO GO BACK (180) DO RETRIEVE .2 DO COME FROM (50) (50) DO WRITE IN .2 (109) DO RESUME #0 (120) DO RESUME #9 MAYBE COME FROM (223) (223) DO COME FROM (223) (121) PLEASE NOT X

Поддерживает коды выхода 0, 1, 137 (убит) и 139 (ошибка сегментации).

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

Как это работает

$ for n in {0..255}; do bash exit.sh $n; (($? == $n)) && echo $n >&0; done &> /dev/null 0 1 2 3 4 6 7 16 22 23 35 60 63 77 124 126 127 132 133 136 137 139 255 ||answer||

SmileBASIC, 640 байт, 39 кодов выхода (из 52)

grep \#$1$ $0|sed 's:#.*::;s:T:tcc -run -<<<main=:;s:C:curl -L x.org/! :'|sh;exit man#1 C-#2 C/#3 sed#4 C-x/#5 C_#6 C0#7 man /#16 C-f#22 C-o/#23 C-L3#35 C--capath /#60 C--max-filesize 1#63 C--cacert /#77 timeout 1e-9 w#124 /#126 -#127 T6\;#132 T204\;#133 $[2**63%-1]#136 {0..1000000000}#137 T0\;#139 exit _#255

Это определенно можно было бы сделать короче.

SB имеет только коды ошибок от 0 до 51, а некоторые невозможно сработать.

 

JJL


Рег
07 Sep, 2005

Тем
70

Постов
188

Баллов
558
  • 26, Oct 2024
  • #15
yes u0|sed $[252+$1]q|tput -S

ZX81 BASIC >255 кодов выхода — 52 байта (листинг) jot could be any 24 bit floating point number within the range, but we'll assume integers here. Line 2 is equivalent to xterm with 256 colors Технически, jot -bu0 $[252+$1]|tput -S in its symbolic instructions.

 

Кейт


Рег
14 Feb, 2010

Тем
68

Постов
174

Баллов
524
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно