Безумие: делать одно и то же снова и снова и ожидать разных результатов.
Напишите программу, которая просто выдает исключение (ошибка времени выполнения) при каждом запуске. Задача состоит в том, чтобы иметь возможность генерировать более одного сбоя, без непосредственного вызова исключений (без throw
операторов) и не использовать встроенные функции подсчета случайных чисел или тиков.
- 10 баллов за каждую возможную ошибку.
- 25 бонусных баллов, если ошибка / сбой происходит в другом процессе или системе.
правила
- Ответы должны указывать, какие ошибки возможны и как они генерируются.
- Невозможно использовать системный (встроенный) генератор случайных чисел, если он не засевается одинаковым номером при каждом запуске программы.
- Невозможно использовать количество тактов или тактов процессора, если они не подсчитаны относительно начала основного потока программы.
- Многопоточность разрешена (если не поощрена).
Редактировать 1
Генерация GUID подпадает под встроенный генератор случайных чисел. Пользовательская генерация GUID "доморощенного" разрешена.
Доступ к файловой системе разрешен для ввода / вывода файлов, за исключением случаев, когда это делается для обхода правил (чтение файла со случайными битами или отметка времени).
Редактировать 2
- Вызов
abort()
илиassert()
нарушение духа задачи создания безумного программного обеспечения, и, таким образом, за этот способ отказа не будет начисляться 10 баллов.
Удачи!
code-challenge
ja72
источник
источник
Ответы:
Ява, 400
Ява благословлена (?) Многими
Exception
s иError
s. Есть многоException
s, которые являются специфическими для работы одного класса. В качестве примера одного из наиболее экстремальных случаев выделено более 10Exception
секунд (все они являются подклассамиIllegalFormatException
) дляFormatter
одному классу, и я потратил время на то, чтобы код перебросил (почти) все из них.Мой текущий ответ содержит 40 различных
Exception
с /Error
х, и они выполняются случайным образом в зависимости от модуляSystem.nanoTime()
с некоторым целым числом.Вышеуказанный метод должен быть разрешен, так как он попадает в случай «3. Невозможно использовать количество тактов или тактов процессора, если они не подсчитаны относительно начала основного потока программы» .
Инструкция по компиляции
Для запуска кода настоятельно рекомендуется использовать Oracle JRE / JDK или OpenJDK . В противном случае некоторые исключения могут быть не выданы, поскольку некоторые из них основаны на внутренних деталях эталонной реализации, и у меня нет надежного запасного варианта.
Приведенный ниже код успешно компилируется
javac 1.7.0_11
и создает все исключенияjava 1.7.0_51
.Чтобы запустить этот код, вам нужно скопировать и вставить приведенный ниже код в редактор с поддержкой Unicode (например, Notepad ++), сохранить его в UTF-16 (Big-Endian или Little-Endian не имеет значения, пока записана спецификация) ,
Измените рабочий каталог (
cd
) на место, где сохранен исходный код ( это важно ).Скомпилируйте код с помощью следующей команды:
И запустите код:
В моем коде нет ничего деструктивного, поскольку я также хочу протестировать его на своем компьютере. Самый «опасный» код - это удаление
ToBeRemoved.class
файла в текущей папке. Кроме этого, остальное не касается файловой системы или сети.Список исключений и ошибок
В порядке, указанном в заявлении о переключении. Всего 37
Exception
с и 3Error
с.Pattern
скучном случае в качестве резервной копии)Pattern
скучном случае в качестве резервной копии)Pattern
скучном случае в качестве резервной копии)Pattern
, с скучным регистром в качестве резервной копии)$
вPattern
могут соответствовать до окончательного конца строки)Matcher
без сопоставления)split(String regex)
)Exception
во время инициализации класса)java.nio.*
-специфичныйException
)java.nio.*
-специфичныйException
)java.nio.*
-специфичныйException
)java.util.Stack
-специфическийException
)Charset.isSupported(String name)
возвращает false или бросаетException
)java.util.Scanner
-специфическийException
)java.util.Formatter
-специфичныхException
с)SecurityManager
можно использовать)Class
класса)Exception
не может быть выброшено в реализации Oracle, нет резервного копирования)источник
nanoTime
и работу, проделанную с этим ответом.Java
это-1 % 40 == -1
или-1 % 40 = 39
?-1
. Вы получили отрицательное число? (Отредактировано, чтобы убедиться, что все не отрицательно).C (Windows 7) - 80 + 25 = 105 баллов
Следующая программа опирается на ASLR
Следующее исключение будет происходить случайно
Vector Subscript Out of Range
)Infinite Recursion
Dividing by Zero
Allocating Huge Memory
By Accessing NULL
By overwriting stack
источник
<iostream>
необходимо?assert()
эквивалентен выбрасыванию исключения.abort
иassert
._crtMessageBoxW
и делает вид, что вызываетraise(SIGABRT)
, что заканчивается черезexit(3)
Perl
Ниже приведен фрагмент кода Perl, который умирает с любым количеством сообщений Perl во время компиляции. Он использует самодельный генератор псевдослучайных чисел для генерации печатных символов ASCII и затем пытается выполнить их как perl. Я не знаю точного количества предупреждений о времени компиляции, которые может дать perl, но таких ошибок, по крайней мере, 30, и они могут появляться в различных комбинациях. Так что, если он не будет считаться недействительным, я бы сказал, что этот код получает на порядок больше очков, чем другие решения =)
Пример вывода из нескольких разных прогонов (с добавлением новых строк):
источник
C # (85) (без прерывания или подтверждения)
Это решение использует текущий идентификатор процесса, чтобы определить, как происходит сбой.
Процесс может прекратиться из-за:
10х6 + 25 = 85
редактировать
После того, как OP запретил Assert и Abort, я удалил их из своего решения, следовательно, он снизился до 85 со всеми допустимыми допустимыми методами.
источник
Abort()
иAssert()
. Посмотрите, можете ли вы по-прежнему генерировать эти исключения, не вызывая их напрямую.Process.GetCurrentProcess().Id / 4 % actions.Count
?Не уверен, что это подходит ...
С
Оба
i
и элементыp
неинициализированы, поэтому это может привести к:i
<0i
как-то доходит до 0c
после многократных приращений становится больше, чемi
Кроме того, это может или не может убить существующее приложение (в зависимости от значения
p[c]
) с SIGSEGV.Обратите внимание, что я не проверял это ... поэтому, пожалуйста, прокомментируйте, если это не работает
источник
Игристые .
Отказ от ответственности: похоже на замечательное решение Абхиджита, но:
основной источник безумия - то, что управляемый код получает нативную деталь реализации через кучу уродливых хаков;
этот не требует ASLR, только динамическое распределение памяти.
Что это делает:
программа вызывает свой собственный интерпретатор (
spn
команду) и выводит описание пустого массива в файл. Массив распределяется динамически, и описание включает его адрес памяти.Затем программа открывает файл, анализирует описание и получает адрес в виде целого числа. Затем он выполняет какое-то хеширование полученного значения и выполняет одно из следующих ошибочных действий:
..
, и добавление строк является исключением времени выполнения)nil
соответствовать спецификации языка (это связано с деталями реализации - ее невозможно отличить от несуществующей глобальной). Когда встречается такой символ, выдается ошибка времени выполнения.источник
Python Code - избиение компьютера битой (образно говоря)
Я слишком ленив, чтобы закончить это, но кто-то, пожалуйста, возьмите мою идею и бегите с этим! Цель здесь - удалить один важный компонент вашего компьютера и использовать исключения для этой части, пока вы, наконец, просто не запустите все / etc или / usr / bin или что-то важное в этом роде и не увидите, как все это рухнет и сгорит. Я уверен, что вы можете набрать много «25 баллов», когда все падает. :)
Я нацелился на машины с Linux. Это, конечно, должно быть выполнено с правами суперпользователя для максимального урона, и если вы запустите его несколько раз, это сделает вашу систему полностью заблокированной!
Исключения:
bat.py:
источник
TI-BASIC, 130
Для вашего калькулятора TI-84
Фатальные ошибки (по порядку):
источник
PHP-код: 38 (+2) символов, 5 ошибок, неуловимо
Список возможных ошибок:
Неустранимая ошибка: максимальное время выполнения 'n' секунд, превышенное в строке 1,
for(;;)
представляет бесконечный циклНеустранимая ошибка: допустимый объем памяти в 2097152 байта исчерпан (попытка выделить 884737 байтов) в строке 1 В
PHP есть
php.ini
файл, и есть строка с сообщением,memory_limit=
и здесь указывается максимальное использование оперативной памяти в байтах.Часть, где говорится,
$e.=$e++
означает, что$e
будет результатом конкатенации самого себя, увеличенной на 1 в каждой итерации.Неустранимая ошибка: имя класса должно быть допустимым объектом или строкой в строке 1.
Классы в PHP могут вызываться либо по имени класса, либо по сохранению имени класса в качестве строки в var, либо путем назначения нового экземпляра класса и вызова его ,
Пример:
$b='PDO';$a=new $b();$a::connect();$b::connect()
-> это правильный код PHP.Эта ошибка происходит потому, что
$e
находитсяnull
в первой итерацииfor(;;)
цикла.Неустранимая ошибка: имя функции должно быть строкой в строке 1.
То же, что и классы, но функции должны быть строкой (и
$e
этоnull
) или имя функции непосредственно (пример:a()
)Неустранимая ошибка: Невозможно создать ссылки на элементы выражения временного массива в строке 1.
PHP имеет
foreach
цикл, который проходит через каждый элемент массива.as
Ключевое слово используется для указания имени новой переменной , используемой для хранения Скопируйте значение текущего индекса массива.При использовании
foreach($array as &$v)
PHP создает ссылку, когда она имеет&
перед именем переменной.Это слабая оценка (5 ошибок и не поддается обнаружению) = 50 баллов
PHP не позволяет ловить фатальные ошибки.
На линукс, добавив
shutdown -P +0
между обратными галочками запустит эту команду (в этом случае система внезапно завершит работу).Это приводит к тому, что все процессы останавливаются.
Не уверен, действительно ли это для бонуса или нет.
источник
В Actionscript
Функции вызываются в бесконечном цикле, вызывающем сбой интерпретатора.
источник
insane
программой.