Ваша цель : написать фрагмент кода, который приведет к классическому результату «Привет, мир!» распечатывается на STDOUT или эквивалентный.
Правила : Код должен быть полностью напечатан ASCII. Весь код должен быть функциональным - удаление любого символа подсчета должно изменить результат или привести к тому, что код не будет работать. Все переменные должны использоваться после присваивания. Символьные и строковые литералы должны быть необходимы для вывода - то есть замена любого символьного литерала или любого символа в строковом литерале другим символом должна быть способна изменить результат (а не посредством эффекта escape-последовательности - замена символа обратной косой чертой или эквивалент)
(ПРИМЕЧАНИЕ: окончательное правило было отредактировано в)
Скоринг : это то, где это становится интересным. Наивысший балл выигрывается в зависимости от количества символов в соответствии с типичными правилами боулинга. Но повторное использование символов приведет к вычету очков. В частности ...
- Повторное использование любого буквенно-цифрового символа (az, AZ, 0-9) приведет к вычету 3 балла за повтор (первое использование не приводит к вычету).
- Повторное использование базовой пунктуации ([!? .-, ": ';]) - включая скобки - приведет к вычету 2 баллов за повтор.
- Повторное использование других символов ASCII {`~ @ # $% ^ & * _ + = | \ /> <} - включая фигурные скобки - приведет к вычету 4 баллов за повтор.
- Повторное использование пробелов, табуляции и переносов приведет к вычету 1 балла за повтор. Таким образом, только первое использование пробела, табуляции или новой строки будет засчитываться в общую сумму.
Примечание: комментарии не учитываются в общем количестве, хотя символы, отмечающие начало / конец комментария, учитываются. Например, в C / C ++, если у вас есть /* This is a comment */
, то он будет считать две косые черты и две звездочки, но ничего между ними.
Некоторые примеры (примечание: использование Julia в качестве примера языка) ...
print("Hello, world!");
Всего видимых символов: 22
Содержит пробел: +1
Повторные буквенно-цифровые цифры: -12 для ллора
Повторная пунктуация: -2 для "
Окончательного результата: 22 + 1-12-2 = 9
print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII
Всего символов: 43 (не считается ни одного символа после #, который является символом комментария).
Содержит пробел: +1
Повторные буквенно-цифровые цифры: -18 для rr1008
Повторная пунктуация: -24 для () "" "" ",,,,,
Final оценка: 43 + 1-24-18 = 2
xy=STDOUT
m="Hello, world!"
print(xy,m);
Всего видимых символов: 37
Содержит символ
новой строки : +1
Содержит пробел: +1
Повторные буквенно-цифровые цифры: -18 для ксиллора
Повторная пунктуация: -4 для ",
Повторные другие ASCII: -4 для =
Окончательный счет: 37 + 1 + 1-18-4 -4 = 13
Пара недействительных кусков кода ...
x=2;print("Hello,world!")
Проблема: x
назначена, но не используется.
print("Hello,"*" world!")
Проблема: *
не нужна, результат будет без нее.
k=1
if k>0
print("Hello, world!")
else
print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end
Проблема: вторая print
команда не будет запущена. Кроме того, удаление символов в кавычках во второй print
команде не изменит вывод.
x="Hello, world!";
print(x)
Проблема: удаление новой строки не изменит результат и не приведет к ошибке (в Julia точка с запятой необходима, только если несколько команд находятся в одной строке, в противном случае просто подавляется возвращаемое значение).
print("Hellos\b, world!")
Проблема: s
персонаж не влияет на результат, так как он стирается \b
. Это допустимо, если выполняется с помощью code ( "Hello",char(100),"\b, world!"
), но не может быть выполнено с помощью строковых литералов или символьных литералов.
Удобный счет-калькулятор - http://jsfiddle.net/4t7qG/2/ - благодаря Doorknob