В печатаемых символов ASCII (шестнадцатеричные коды 20 7Е) в порядке являются:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Обратите внимание, что там есть место.)
Эта строка явно содержит все печатаемые символы ASCII, по крайней мере, один раз в порядке возрастания при чтении слева направо, но не в порядке убывания.
Струна
REVERSED:~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! NORMAL: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
содержит все печатные символы ASCII, по крайней мере, один раз, в порядке возрастания и убывания. Другими словами, когда символы оцениваются с помощью их числового кода, самые длинные увеличивающиеся и самые длинные убывающие подпоследовательности имеют длину 95 (количество печатаемых символов ASCII).
Вызов
Выберите непрерывное подмножество из N печатаемых символов ASCII, например LMNOP
(N = 5). Напишите программу, используя только те N символов, чьи выходные данные содержат все 95 символов ASCII в возрастающем и убывающем порядке, как в примере выше.
Победителем считается представление с наименьшим N. В случае связи выигрывает самый короткий код в байтах.
Заметки
- Непрерывное подмножество означает набор печатаемых ASCII, которые все отображаются в непрерывной строке, например,
LMNOP
или89:;<=>
. - Ваше смежное подмножество может «зацикливаться»
~
на пространстве, но это влечет за собой штраф +3 к N. Так что{|}~
имеет N = 4, но{|}~ !
имеет N = 6 + 3 = 9. - Ваша программа может содержать только N печатаемых символов ASCII из выбранного вами смежного подмножества. Они не все должны появляться и могут появляться несколько раз в любом порядке. (Все недопечатаемые ASCII и все не-ASCII недопустимы. Это означает, что вкладки и новые строки не допускаются.)
- Ваш вывод может содержать только печатные символы ASCII и должен быть длиной не более 10000 символов.
- Самая длинная увеличивающаяся и уменьшающаяся подпоследовательность вашего выхода должна иметь длину 95 (как объяснено выше).
- Вывод на стандартный вывод. Там нет ввода.
- N является положительным целым числом менее 96.
источник
Ответы:
Одинарный, N = 1
14680262330376163203871465704220787333741951071 байт
Использует только байт '0' (ASCII 49).
Гольф около 4.13253e + 60 байт из решения @ Comintern. Отдайте еще ему :)
В оригинальном Brainfuck:
источник
Одинарный , N = 1
4132527913354820031118363262102424570092493175835499123283719 (4.1325279e + 60) байтов
Исходный код в унарном коде явно слишком велик для размещения здесь. Его можно легко воспроизвести, напечатав (или сгенерировав) файл, заполненный "0" такой же длины, что и количество байтов выше.
Вот двоичное представление:
И эквивалентный код Brainf ** k (разрывы строк для ясности):
Выход:
РЕДАКТИРОВАТЬ: Golff out 9.097887e + 87 ненужных персонажей.
источник
Brainfuck, N = 2
24 383 байта. Использует только - и. (ASCII 45 и 46). Попробуйте это здесь: http://esoteric.sange.fi/brainfuck/impl/interp/i.html . Возможно, может быть проанализирован как азбука Морзе с правильными пробелами.
Требуется интерпретатор, придерживающийся традиционного определения Brainfuck, в котором используется массив (не менее) 30000 байтовых ячеек, все инициализированы нулем.
источник
-
, затем нисходящая часть,.-.-.etc
затем восходящая часть (группы по 255,-
за которыми следует a.
). Насколько я могу судить, все это есть. Также см. Редактирование моего ответа для объяснения.-
с одним.
в конце :). Виноват.CJam - N = 3; 7659 байт
Попробуйте это на http://cjam.aditsu.net/
источник
Brainf ** k, N = 4
Моя первая программа для ума Использует 3 символа из блока
+,-.
(Ascii 43 до 46.)410 байт (один
.
может быть удален из программы, если двойной~~
можно уменьшить до одного~
).Вот список команд в этой области таблицы ASCII (мне не нужна команда ввода):
К счастью, остальные команды
<>[]
(перемещение указателя данных и выполнение условных переходов) не требуются!Для ясности разбить на 3 строки: 1: Увеличивать до тех пор, пока данные не достигнут 32. 2: Выводить и увеличивать до тех пор, пока данные не достигнут 126. 3: Вывести и уменьшить до тех пор, пока данные не достигнут 32.
Выход
Изменить N = 2
В ответе @ nneonneo можно заменить каждый
+
из 255-
знаков для N = 2. некоторая перестановка кода и вывода (отображение вниз, затем вверх) означает, что первая строка может быть уменьшена до 256-126 = 130-
знаков. Это произошло со мной после того, как я пошла спать, и nneoneo избил меня до этого. https://codegolf.stackexchange.com/a/35801/15599источник
~
вместо,~~
так как увеличивающиеся и уменьшающиеся подпоследовательности все еще будут там.C; N = 43 = 40 + 3
Здесь я избегаю таких распространенных символов, как
+
-
*
/
цифры0-9
, запятая,
и точка с запятой;
.Поэтому я был вынужден выразить различные числа, используя только операции
&
%
~
.Дальнейшая игра в гольф может быть возможной (поиск самых маленьких представлений для чисел 63 и 95 - упражнение для читателя).
Подмножество ascii составляет 32 ... 41 и 97 ... 126.
Я не уверен, разрешены ли символы новой строки в коде; если нет, просто удалите их.
источник
Вихрь , N = 2, 6486 байт
Используя только 2 символа
01
.Выход :
Я думаю, что я могу играть больше, используя петли, но кодирование с 0 и 1 было ужасным, поэтому я не буду этого делать.
комментарии
Обратите внимание, что есть
O
иl
как0
и1
.источник
Python 2.7 N = 45 = 42 + 3
Это использует
string.printable
, сортирует и выплевываетstdout
. Я сэкономить несколько символов путем вставки.
вstdout.write
с помощьюeval
и строки форматирования , используяord
значения символов я мог бы использовать.Долой старое - N = 49 = 46 + 3
К сожалению, хотя python включает в себяstring.printable
список, он не в порядке ascii, и нет возможности использовать его без a*
или a.
, поэтому требуется меньше символов, чтобы сделать это вручную.Используя диапазон символов:
Очевидная версия: N = 63 = 60 + 3
Это очевидная версия с использованием диапазона символов:
источник
len('x')
спасает меня еще 2 символа.import
решение будет работать, только если у вас есть;
, что добавляет значительное количество символов.C; N = 61 = 58 + 3
Чтобы компенсировать использование такого большого подмножества, я использовал свой код.
Подмножество ASCII составляет 32 ... 59 и 97 ... 126.
Это было забавное испытание - избежать
=
персонажа!источник
;
. Вы можете использовать это, чтобы расширить свой ответ, не превращая его в копию другого.Python 2.7 N = 28 + 12 + 3 = 43
Используя символы,
cdefghijklmnopqrstuvwxyz{|}~
а затем оборачиваясь!"#$%&'()*+
Чтобы избежать использования,
,.-
мне пришлось использовать некоторые хитрости. Я использовал,exec
чтобы я мог превратить код в строки, которые позволили мне использоватьchr(ord('+') + len('xxx'))
для.
иchr(ord('+') + len('x'))
для,
. В любом месте, где мне нужно было -1, я использовал ~ 0 в форме~len('')
. Чтобы избежатьa
, я использовалchr(ord('c') + ~len('x'))
(99 - 2).Составляемая строка имеет N = 48, использует символы
abcdefghijklmnopqrstuvwxyz{|}~
и затем переносится в!"#$%&'()*+,-.
Обратите внимание, что переводы строк и комментарии предназначены только для удобства чтения.
источник
Рубин - N = 48
Пусть Ruby будет Ruby и использует штраф за повторное использование.
N = 48 <- 15 ('' - '.') + 30 ('a' - '~') + 3
или
Старый:
N = 72 {прямолинейный счет} <- 72 ('.'-' u ') + недопустимые переводы строки
Здесь есть некоторые колебания, чтобы избежать «v» в «обратном направлении». Я оставил это, потому что мне нравится хакерская стая ("C *").
источник
x86_64 Машинный код, формат Mach-O
N = 2, 32768 символов (слишком большой, чтобы соответствовать пределу сообщения)
Изменить: Pastebin не работает, поэтому вы можете найти полный текст по адресу: http://www.ionoclast.com/random/golf.bin.txt
источник
#include <unistd.h> int main() { char const s[] = "~}|{zyxwvutsrqponmlkjihgfedcba`_^]\\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#\"! !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; write( 1, s, sizeof s ); }
сборка должна работать намного лучше.Рубин, N = 27
Использует до
$
конца>
.источник
Скала, N = 69
Использует символы
01246789\bdefu
(Unicode Escape) в качестве причудливого способа написания(' 'to'~')++('~'to' ')map print
.источник