Рассмотрим квадрат печатных символов ASCII (кодовые точки от 0x20 до 0x7E) для длины стороны N , как показано ниже (здесь N = 6 ):
=\
g \
7
m+y "g
L ~
e> PHq
Мы также требуем, чтобы каждая строка и каждый столбец содержали как минимум 1 пробел и 1 непробельный символ. (Приведенный выше пример удовлетворяет этому.)
Мы определяем отрицание такого квадрата, чтобы быть квадратом того же самого размера, где каждое пространство заменено не-пробелом и наоборот. Например, следующее будет действительным отрицанием приведенного выше примера:
1234
a b cd
ZYXWV
!
{} [ ]
?
Выбор символов без пробелов не имеет значения (если они находятся в диапазоне ASCII для печати).
Соревнование
Вам нужно написать программу с квадратным исходным кодом с длиной стороны N> 1 , которая печатает свой отрицательный результат в STDOUT. Конечные пробелы должны быть напечатаны. Вы можете или не можете печатать один завершающий символ новой строки.
Также применяются обычные правила quine, поэтому вы не должны читать свой собственный исходный код, прямо или косвенно. Аналогично, вы не должны предполагать среду REPL, которая автоматически печатает значение каждого введенного выражения.
Победителем является программа с самой низкой длиной стороны N . В случае связывания выигрывает представление с наименьшим количеством непробельных символов в исходном коде. Если еще есть галстук, выигрывает самый ранний ответ.
источник
Ответы:
CJam, 4 x 4 (8 не пробелов)
Попробуйте онлайн в интерпретаторе CJam .
Выход
Как это устроено
L
толкает пустой массив и_
копирует его.Блок
толкает этот блок в стеке.
_
выдвигает копию блока кода иp
печатает ее, после чего следует перевод строки.Наконец, интерпретатор печатает все оставшиеся элементы в стеке: два пустых массива, которые не влияют на вывод, и исходный блок кода.
Альтернативная версия
Попробуйте онлайн в интерпретаторе CJam .
Выход
Как это устроено
L
толкает пустой массив и~
сбрасывает его. Стек снова пустБлок
толкает этот блок в стеке.
_
толкает копию блока и~
выполняет копию._
Внутри копии блока будет толкать копию исходного блока, которыйp
будет печататься, с последующим переводом строки.Наконец, интерпретатор печатает оставшийся элемент в стеке: оригинальный блок кода.
источник
Perl, 7 × 7 (42 без пробелов)
Выход:
источник
7
сделанный из7
. :)CJam, 4X4 (
1210 не пробелов)Выход:
Предыдущая версия с 12 без пробелов:
И вывод
Как указал Мартин, эта версия имеет
*
,4
,4
в качестве выхода;)
Попробуйте онлайн здесь
источник
Marbelous - 16x16
Проверьте это здесь! Пробелы в виде пробелов, цилиндрической доски и включаемых библиотек все должны быть проверены.
Выход
объяснение
Здесь есть две платы: основная плата (показанная ниже) и
ss
плата, которая не принимает входных данных и выводит два пробела (0x20) в STDOUT.Пустая ячейка эквивалентна a
..
, а все, что после a,#
является комментарием.Каждый тик
ss
выводит два пробела в STDOUT.Зеленый путь - это простой цикл, который выводит новую строку (0x0A) в конце каждого 7-го тика.
Синий путь выведет числа (
Hp
печатает мрамор в виде двух шестнадцатеричных цифр), присутствующих в выходных данных, в конце каждого 6-го тика.После того как мы напечатали
01
один раз, цикл заканчивается и движется по красной дорожке, которая дублирует этот мрамор.Один дубликат печатается (второй
01
), а другой отправляется по черному пути, который завершает доску в!!
ячейке. Из-за расположенияHp
используемого в этом последнем отпечатке, поведение перед каждым другим вызовом01
появляется перед двумя пробелами того же тика, а не после негоHp
.источник
Питон - 11х11
Выход
Это довольно грязное и скучное решение, но я просто подумал, что покажу это ...
Это решение использует тот факт, что, если вы находитесь в паре скобок в Python, вы можете разбить свой код на несколько строк и произвольно добавить пробелы, не получая
IndentationError
. Еще один способ сделать что-то подобное - завершить строку обратной косой чертой.источник
Python - 7x7 (37 не пробелов)
Выход
Использует старый
%
оператор форматирования строки Python для выполнения работы:+7
и-7
заботится о выравнивании вправо / влево и последнем пробеле, для которого,print
в частности, соответствует закрывающая скобка . При подготовке строки формата мы также имеемисточник
JavaScript (9x9)
Выход
Примечания
Я сделал и поиграл в гольф (в меру своих возможностей) для квадрата с диагональю любого размера n:
замена чисел *** asdf *** на константы в зависимости от длины стороны n, например, для n = 6:
Но, несмотря на то, что этот код имеет длину 46, я не мог заставить постоянный пробел совпадать с пробелом в диагонали кода, пока он не стал таким большим, как 9x9, с пропущенной линией (пятая)
Изменить: изменено, чтобы добавить предупреждение (). До:
источник
CJam, 5x5, 12 без пробелов
Не победитель, но я хотел добавить довольно маленькое и редкое представление, так как большинство ответов просто печатают диагональ.
печать
Проверьте это здесь.
Последние два символа кода ничего не делают, поэтому на самом деле он содержит всего 10 байтов реального кода. Для сетки меньшего размера я мог бы даже уменьшить ее еще на два байта до 8, но это не подходит для 3x3, и этот код не работает даже для размеров сетки.
Как это устроено:
источник
Befunge , 9x9
Я понятия не имею, почему я это сделал. Потребовалось путь слишком долго. У меня сейчас сильная головная боль.
Выход:
Некоторое объяснение
Код используется
g
для чтения@
символов из сетки «на лету» (а также последнего пробела, который есть@ / 2
), а такжеp
для изменения цикла для записи последней строки вывода.Каждый отдельный символ в коде используется в какой-то момент, либо как код, либо как данные (
9
и@
в двух последних строках).В основном мне пришлось сделать много обходных путей, чтобы код работал. Указатель инструкции делает несколько пересечений во время выполнения, некоторые из которых перепрыгивают. (Я не мог использовать там никакие инструкции для разных направлений, поскольку они мешали бы. Нет NOP.) В другом месте я либо использовал один и тот же символ, либо просто отменил его (см.
$:
В середине).Я также сделал некоторую творческую работу над стеком:
n,0
. Затем я должен уменьшитьn
. Очевидное решение было бы$1-
, но мне удалось сократить его с помощью!-
.0
. Затем я организовал Code Changer (20g46p7g46\p
), чтобы использовать его0
, вместо того, чтобы тратить 2 символа на$0
.источник
!-
; это то, что я бы сделал. Интересный факт: в Funge-98,z
это NOP.z
не был указан в вики, и я использовал это для кодирования, что означало, что любая некомандная команда изменяла направление IP. В значительной степени пришлось провести рефакторинг 70% кода из-за одного места, которое должно быть NOP.Python 3, 8x8
Есть 50 непробельных символов и 14 пробелов. В последней строке есть один бесполезный символ, но все остальное необходимо.
Выход:
источник
(a,*b,c)="12345"
...Рубин, 8х8
Выход:
источник
CJam, 5X5
И вывод
Я был так близко к решению 4X4.Смотрите мой другой ответ<sigh>
Попробуйте онлайн здесь
источник
C ++, 12x12
Редактировать: Итак, я стал немного одержим этим вызовом и сумел снизить его с 17x17 до 12x12. Мне потребовалось немного времени, чтобы понять, что я могу использовать
/**/
в качестве разделителя токенов. Этот код использует тот факт, что слияние строк все еще работает в Clang с пробелом после него, хотя он выдает предупреждения и разрушает раскраску кода Xcode.Выход:
источник
Befunge-98 , 8x8 (56 без пробелов [11 nops])
Примечание: в интересах хорошего спортивного человека, он читает свой собственный источник
'
, делая его чит-квинтом для некоторых. Прочитайте дебаты здесь .программа
Выход
объяснение
Версия без гольфа
(без пробела и пробела заменяются на 'n и' для удобства чтения.)
Это решение основано на том факте, что с помощью мода index [0, width ^ 2) ширина квадрата может сказать вам, находитесь ли вы в конце строки или на диагонали. Поскольку все пробелы расположены вдоль диагонали, легко определить, когда печатать не пробел!
В псевдокоде
обсуждение
Я очень горжусь этим, хотя хотел бы, чтобы каждое не-пространство также было не-нет. Я также горжусь тем, что не использовал стандартную форму Befunge get-increment-put! Он печатает разные символы для не пробелов, потому что у меня было место для этого и я не хотел быть скучным.
Попробуйте это на Windows с BefungeSharp !
источник
CJam, 4 x 4 (8 не пробелов)
Попробуйте онлайн в интерпретаторе CJam .
Выход
Как это устроено
N
выдвигает перевод строки как одиночную строку.a
оборачивает эту строку в массив.`
проверяет результат, т. е. выдвигает строковое представление массива.Это результат:
S*
объединяет результирующую строку (массив символов), разделяя ее элементы пробелами. Другими словами, он помещает пробел между всеми парами смежных символов строки.Это результат:
N
выдвигает другой перевод строки.X$
копирует элемент стека с индексом 1 (считая сверху), т.е. многострочной строкой.Наконец, интерпретатор печатает все элементы в стеке: исходную многострочную строку, перевод строки и копию многострочной строки.
источник
SOGL V0.12 , 2x2 (2 не пробела)
Попробуй здесь!
Выход
объяснение
В SOGL все строки, кроме последней, заменяют строки - везде в продолжающемся коде он заменяет последний символ строки всем, что находится перед ним. Так что 1-я строка здесь
replace space with 2 in the next line
.Затем выполняется следующая строка
2╚
:2
нажимает 2 и╚
создает диагональ размера 2.источник
CBM BASIC v2.0 (8 × 8)
Улучшение по сравнению с моим предыдущим ответом с использованием совершенно другого подхода:
Выход:
источник
Рубин,
8х87х7Выход:
Предыдущая версия, 8x8 с 20 пробелами:
Выход:
источник
Напористый , квадрат 4х4
Не конкурирует, так как язык ставит перед нами задачу:
Код:
Выходы:
Попробуйте онлайн!
Поскольку пробелы в Pushy не имеют значения, код легко упорядочить так, чтобы он соответствовал отрицательному результату его вывода. Фактическая программа выглядит так:
Обратная косая черта начинается с комментария, поэтому трейлинг
\o/
только для завершения негатива и выглядит круто.В качестве альтернативы, для того же результата мы можем предложить следующие решения:
источник
Хаскелл, 10 × 10
Определяет вспомогательную функцию,
a ! b
которая печатает строку формыbbbbbbbbba
, и рекурсивную функцию,n & c
которая печатаетn
строки формы,ccccccccc␣
за которыми следует одна строка формы␣␣␣␣␣␣␣␣␣c
.Использует
<$
(fmap const
опять же) диапазон для повторения символа. Обратите внимание, что<$
он доступен только без импорта, начиная с GHC 7.10, который датирует эту проблему.Я не совсем уверен, делает ли это представление неконкурентным.Ничего особенного в выборе макета или алгоритма здесь нет; У меня не было большого количества байтов, и мне просто повезло, что разрывы строк происходят
putStrLn
так, как они это делали.источник
05AB1E , 3x3 (6 непробельных байтов )
Выход:
Попробуйте онлайн.
Объяснение:
источник
Perl, 6x6 (26 не пробелов)
Я потратил много времени, просматривая их, и был уверен, что Perl-решение будет меньше, чем 7x7 ... Очень веселая задача! Это решение требует
-E
.Использование:
Выход:
источник
CBM BASIC v2.0 (9 × 9)
Выход:
источник
C (gcc) ,
7x78x8РЕДАКТИРОВАТЬ: предыдущая версия имела неправильное поведение.
Попробуйте онлайн!
источник
Желе , 4 х 4 (12 не пробелов)
Попробуйте онлайн!
Выход:
Это было довольно весело.
Как это устроено
Легкая часть: Jelly игнорирует пробелы (если используются только однобайтовые встроенные функции).
Сложная часть: каждая строка в Jelly представляет собой отдельную ссылку (или функцию), поэтому не так уж и быстро распределить константу в несколько строк. Использование строкового литерала является хорошим кандидатом, но не знаю, как генерировать негатив.
источник