Напишите программу, которая производит вывод, такой что:
- По крайней мере три разных символа появляются.
- Количество вхождений каждого символа кратно 3.
Например, A TEA AT TEE
действительный выходной сигнал , так как каждый из 4 -х различных символов, A
, E
, T
и (space)
, происходит в 3 раза.
Конечно, проблема с номером 3 должна иметь третье требование. Так:
- Сама программа также должна соответствовать первым двум требованиям. (Это означает, что ваша программа будет иметь длину не менее 9 байт.)
Вы должны написать полную программу, а не функцию. Не забудьте показать вывод вашей программы в своем ответе.
Кроме того, чтобы все было интересно, мы настоятельно рекомендуем:
- не использовать комментарии для удовлетворения требования 3, если вы можете помочь
- производить вывод, который не просто строка повторяется 3 раза
- чтобы выходные данные отличались от самой программы (для языков, которые могут автоматически выводить содержимое своей собственной программы, вы можете внести свой вклад в это вики сообщества ).
Это код-гольф . Самый короткий код в байтах побеждает.
code-golf
restricted-source
darrylyeo
источник
источник
123123123
будет работать, как написано в настоящее время.)abcabcabc
с завершающим переводом строки?Ответы:
Brain-Flak , Flakcats , Brain-Flueue , Brain-Flak Classic , Miniflak и Fλak 18 байтов
Доказано, что оптимально!
Попробуйте онлайн!
объяснение
Brain-Flak, Brain-Flueue, Miniflak и Fλak
Это печатает:
(Есть завершающий символ новой строки)
Brain-Flak Classic
Brain-Flak Classic является оригинальной версией Brain-Flak и имеет некоторые важные отличия от современных Brain-Flak. В BFC
[...]
печатает его содержимое, а не отрицает его.В конце выполнения содержимое стека (
3 3 3
) печатается.Это печатает:
(Есть завершающий символ новой строки)
Flakcats
Flakcats довольно сильно отличается от других 4-х типов, и я удивлен, что это работает в Flakcats. Три оператора здесь почти такие же, как те, что использует Brain-Flak.
Основным отличием этой конкретной программы от Flakcats является
(...)
оператор, который в Flakcats эквивалентен([{}]...)
Brain-Flak. Это, однако, не имеет значения для нас, потому что он собирает нули и, следовательно, работает так же, как Brain-Flak.Вот эта программа, скомпилированная в Brian-Flak:
Это печатает:
(Есть завершающий символ новой строки)
Доказательство оптимальности в Brain-Flak и Miniflak
Это не формальное доказательство, а скорее неформальное доказательство, которое необходимо расширить, чтобы сделать его более строгим
Из-за ограничений, что программы Brain-Flak должны быть сбалансированной строкой, а длина программы должна быть кратна 3, любая действительная отправка должна быть кратна 6 в длину. Это означает, что любое решение меньше 18 должно иметь длину 12.
Из-за выходных данных, заканчивающихся символом новой строки, конечная высота стека должна быть кратна трем, иначе мы нарушим ограничения на вывод.
Любое допустимое представление длиной 12 должно иметь 2 типа скобок (при меньшем значении нарушается ограничение на количество отдельных символов, а при большем значении должно быть более 12 символов). Поскольку программа производит вывод, она должна иметь толчок.
Это оставляет нам выбрать другой набор скобок. Варианты:
<...>/<>
Это терпит неудачу, потому что нам нужно сгенерировать «значение», чтобы создать любое число, отличное от нуля, мы должны отказаться от a,
()
чтобы создать число, которое делает невозможным нажатие более двух раз.[...]/[]
Это терпит неудачу по той же причине, по которой последний потерпел неудачу. Квадратные скобки действительно плохо делают ценность.
[]
Монада может создать ценность , но нам нужно нажать номера первыми и мы тогда не хватает круглых скобок остались нажать три раза.{...}/{}
Этот многообещающий, мы могли бы создать цикл и использовать его
()
для многократного нажатия, но, увы, это невозможно.Чтобы завершить цикл, в какой-то момент в стеке должен быть ноль, а для того, чтобы у нас был правильный вывод, в конце программы должно быть что-то отличное от нуля в стеке. Поскольку у нас нет
[]
ни<>
ноля в конце цикла, это должен быть неявный ноль в нижней части стека. Это означает, что цикл не может добавлять новые числа в стек, делая его бесполезным.Поскольку ни один из вариантов фигурной скобки не может создать программу длиной 12, ни один из них не может существовать.
Поскольку Miniflak является подмножеством Brain-Flak, любая более короткая программа Miniflak также будет более короткой программой Brain-Flak и, следовательно, не существует.
Доказательство оптимальности в мозге
Brain-Flueue - это язык шуток, основанный на Brain-Flak. Они настолько похожи, что их интерпретаторы везде одинаковы, кроме двух строк. Различие между ними заключается в том, что, как следует из их названий, Brain-Flueue хранит свои данные в очередях, а Brain-Flak хранит свои данные в стеках.
Для начала у нас есть те же ограничения на размер программы, созданный Brain-Flak, поэтому мы ищем программу размером 12. Кроме того, нам понадобится a
(...)
для создания любого вывода и другой пары.<>
и[]
пары не работают в Brain-Flueue для той же самой причине , что они не работают в Brain-Flak.Теперь мы знаем, что наша программа должна состоять из символов
((())){{{}}}
.С помощью тех же методов, которые использовались в предыдущем доказательстве, мы можем продемонстрировать, что в конечной программе должен быть цикл.
Теперь вот где доказательства отличаются, потому что Brain-Flueue работает через очереди, а не стеки, программа может выйти из цикла со значениями в очереди.
Чтобы выйти из цикла, нам понадобится ноль в очереди (или пустая очередь, но если очередь пуста, мы получим ту же проблему, что и Brain-Flak), это будет означать, что нам придется открыть нашу программу,
({})
чтобы создать нуль. Нам понадобится нажать внутри цикла, чтобы поместить необходимое количество элементов в очередь. Нам также нужно вставить ненулевое число перед циклом, чтобы мы могли вообще войти в цикл; это будет стоить нам в абсолютном минимуме(())
. Теперь мы использовали больше паренов, чем у нас.Таким образом, нет программы Brain-Flueue для выполнения задачи размером 12 байт, и, кроме того, наша программа является оптимальной.
Оптимальное решение в Flakcats и Brain-Flak Classic
Следующее решение является оптимальным в Flakcats и Brain-Flak Classic.
объяснение
Альтернативные 24-байтовые решения Brain-Flak
Попробуйте онлайн!
Попробуйте онлайн!
Попробуйте онлайн!
источник
Желе , 9 байт
Полная программа, которая печатает 700227072 , что составляет 888 кубов.
TryItOnline!
Как?
источник
888^3
есть700227072
? Это очень умно, возможно, другие языки могут использовать этот трюк.Полиглот чисто буквальных ответов, 9 байт
Это вики-публикация сообщества для сбора ответов, которые являются буквальным буквальным обозначением, которое язык автоматически распечатывает. Поскольку это вики сообщества, не стесняйтесь редактировать ее, чтобы добавить больше языков, на которых она работает.
Эта программа работает в:
3
печатает данные, остальная часть программы - бесполезное управление стеками)2\n2\n2\n1\n1\n1\n3\n3\n3\n
)Не обращая внимания на последний перевод строки, он действителен еще на нескольких языках:
Большинство ссылок идут на пробную версию онлайн!
источник
2\n2\n2\n1\n1\n1\n3\n3\n3\n
на самом деле, что совершенно правильно. Это должно быть добавлено к посту?echo '333111222';
(в PHP), но это работает.C #,
114111118102 байтЕсли мы не заботимся об использовании правильных слов: (102 байта)
Если мы заботимся о правильных словах: (120 байт)
Мое первоначальное представление - без учета регистра: (113 байт)
Я знаю, что комментарий на самом деле не в духе CG, но это все, что я мог придумать за ограниченное количество времени, я посмотрю, смогу ли я улучшить его в течение дня. Конечно, я должен получить по крайней мере несколько бонусных баллов за авантюрность.
Редактировать: Спасибо roberto06 за ловлю пропущенных букв!
источник
V
из своего комментария и добавитьvyt
, такV
как присутствует только там, в то времяv
как присутствует дважды (опечатка, я думаю),y
также присутствует дважды, иt
присутствует 5 раз. Смотрите здесь . Тем не менее, отличная работа!JavaScript,
3633 байтаОповещения
333111222
. Это работает, потому что|
преобразует оба его операнда в 32-разрядные целые числа, и любое значение, которое не выглядит как целое число (например, функцияalert
), преобразуется в0
.0|0
есть0
, поэтому||
оператор возвращает свой правый операнд, или333111222
Еще несколько интересных версий:
Выходы
(trelalert)\"(trelalert)\"(trelalert)\"
.Использование решения
.repeat
будет такой же длины, благодаря общемуaert
:какие выводы
(trpp.all)\"(trpp.all)\"(trpp.all)\"
.Воспользовавшись дополнительными обратными слешами, чтобы избавиться от них
l
иp
почти все работает:Этот вывод
(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"(trax.cc)"
.источник
CJam , 9 байт
Выходы
012345678901234567890123456789
Попробуйте онлайн!
объяснение
источник
99,99,99,
, потому что почему бы и нет?брейкфук , 12 байт
Никто не сказал, что выход должен быть коротким. Это выведет 3 копии каждого символа ascii, кроме первых 2.
Вы можете доказать, что это настолько коротко, насколько это возможно. Вам нужно вывести, поэтому вам нужно 3 '.' должны быть разные выходные данные, поэтому вам нужно 3 [+ -], теперь мы до 6. Необходимо напечатать 9 символов, что означает либо добавление еще 6 символов '.' или добавление цикла, который добавит еще 6 символов.
Попробуйте онлайн!
источник
Python 2,
3630 байтПоскольку завершающий символ новой строки не разрешен, он, вероятно, настолько короткий, насколько это возможно:
Попробуйте онлайн
Выводится
\"
три раза, после чего следуют три символа новой строки.Приведенные ниже программы не учитывают завершающий символ новой строки, поэтому они недействительны.
27 байт :
Печатает 54 каждого символа в
print
.Попробуйте онлайн
Та же самая длина, более короткая продукция:
Выходы
printprint*3*3printprint*3*3printprint*3*3
24 байта:
источник
print"""printprint*3*3"""*3
для гораздо более короткого вывода ;-)print 123;print 123;print 123;
для наивного решения?print~9;print~9;print~9;
Perl 6 , 15 байт
Печатает шесть отдельных символов, по три раза каждый:
Попробуйте онлайн!
Как это устроено
$_
.$_
начинается как объект типа typeAny
, которыйsay
печатается как(Any)
.источник
C 66 байт
Выход
Старая версия 72 байта
источник
JavaScript (ES6), 30 байт
Выходы
[object Object][object Object][object Object]
.Работает, создавая три объекта:
первые два имеют форму
{ "alert" : alert }
с использованием обозначения ES6{alert}
третий простой пустой объект
Затем он
+
объединяет их вместе, и все три имеют идентичное выражение в виде строки[object Object]
.Ведущий
+
бесполезен, присутствует только для заполнения количества+
символов, но безвреден для вывода программы.источник
(ES6)
к названию.ПКод , 9 байт
Выходы: 111222333
Объяснение:
o имеет ASCII-код символа "111" в десятичном виде. Таким образом, s добавляет 111 к переменной, а затем печатает число. Первый «сын» делает это 111 и печатает 111. Затем делает это 222 и печатает 222, наконец делает 333 и печатает 333
источник
Рубин , 12 байт
выходы
Попробуйте онлайн!
Чтобы выполнить второй «поощренный» критерий, мне нужно 15 символов:
производит
Попробуйте тоже онлайн!
источник
Microscript II, 9 байт
Объяснение: Создает блок кода, но не вызывает его. Когда выполнение заканчивается, содержимое основного регистра (т.е. этот блок кода) неявно печатается.
источник
{}
технически был бы квин, но я не думаю, что он соответствует нашему определению «правильной квин». Однако, программа"q"q
(которую я отправил на вызов Куайна) делает.Гексагония , 9 байт
Попробуйте онлайн!
Печать
120120120
.x
можно заменить наf-m
(102-109)объяснение
Это
xx@@
только наполнитель для соблюдения правил. Основной поток сохраняетсяx
в памяти (со значением ASCII 120), а затем печатает его как число 3 раза.источник
C 111 байтов
(Обратите внимание, что количество байтов равно трем одинаковым числам. Ничего себе. Вы не можете сделать больше мета, чем это.)
Печать:
источник
PHP , 33 байта
Выбрал что-то более интересное, чем 9-байтовая программа без тега PHP.
Выходы
<?;<?=;'"<?;<?=;'"<?;<?=;'"
Попробуйте онлайн!
источник
99 , 15 байт
Это девять девяток, три пробела и три перевода строки, выходное значение равно -1110-1110-1110 .
Попробуйте онлайн!
Как?
Два пробела рассматриваются как одно, это третье пространство может быть также пробелом на любой строке.
источник
Bash + coreutils,
159 байтПопробуйте онлайн!
Пример вывода:
(Если вы попробуете это, он напечатает ваш uid, gid и т. Д. 3 раза.)
Если вы хотите избежать повторения одной и той же строки 3 раза (а также иметь одинаковый вывод для всех, в отличие от моего первого ответа), лучшее, что я нашел для утилит bash + Unix, составляет 15 байт:
Попробуйте эту вторую версию онлайн!
Выход:
(Нет новых строк в программе, 12 новых строк в выходных данных.)
Объяснение программы DC в этом ответе:
источник
LOLCODE ,
273240 (360286) байтовОбратите внимание на новую строку и попробуйте онлайн . Вторая строка была более или менее произвольной и, возможно, могла быть заменена более короткой командой, но я только что узнал LOLCODE для этой головоломки. Так как номер версии требуется в первой строке, я использовал числа для добавления циклов длиной 1, 2 и 0 mod 3, чтобы гарантировать, что будет напечатано правильное количество символов. Из этого я просто посчитал каждого персонажа (с помощью этого инструмента ). Если он появился 0 мод 3 раза, никаких действий не потребовалось. Если он появлялся 1 мод 3 раза, он добавлялся к 1- и 2-петлям, поэтому он появлялся трижды на выходе. Если оно появилось 2 мода 3 раза, персонаж был добавлен в 12-й цикл. РЕДАКТИРОВАТЬ: путем замены первого
VISIBLE
с назначением (все еще бесполезным, но требующим иметь 12 вместо 11 новых строк), я смог сократить 33 байта.Выход (60 байт):
Обратите внимание на завершающую новую строку.
Хорошая особенность этого решения по сравнению с другими ответами заключается в том, что с помощью Output можно легко манипулировать, чтобы вывести несколько значимый текст. Пример (286 байт с новой строкой):
Попробуйте онлайн. Вывод (222 байта с новой строкой):
К сожалению, я не так хорош с анаграммами, как думал: ')
источник
РАКУШКА
шутить :) ( 9 байт )
или более серьезно ( 24 байта )
Результат:
источник
PHP, 24 байта
источник
<?
вместе с немедленнымecho
оператором<?=
для вывода 123 3 раза.<= ?>
символы не появляются кратные 3 раза.Пакетный,
3621 байтВыходы
Изменить: 15 байтов сохранены благодаря @ P. Ktinos.
источник
Japt, 9 байт
Печать
undefinedundefinedundefined
.Проверьте это онлайн!объяснение
Этот код переносится в следующий JavaScript:
O.o
это функция, которая выводит что-то без завершающей строки. Если аргумент не указан, он печатаетundefined
, что можно считать ошибкой, но здесь это пригодится. Он также возвращаетundefined
, так что все три звонка печатаетundefined
.Я уверен, что есть много других способов сделать это ...
источник
05AB1E , 9 байт (я думаю, вы могли бы сказать, что это был кусок PI)
-0 байт благодаря Emigna / ETHProductions, сделало решение более правильным.
Альтернативные версии:
[g-Q]
- Здесь можно поставить любую букву aQ, если все они совпадают (см. Ниже).Попробуйте онлайн!
Разъяснение:
PI,PI,PI,SORT,JOIN,SORT,JOIN,SORT,JOIN.
Результат:
...111111222333333333444555555555666777888999999999
Это всего лишь 9 байтов, потому что вам не нужны сортировки, я просто вставил их, чтобы проиллюстрировать.
Результат без
{
кода в коде:3.1415926535897933.1415926535897933.141592653589793
Альтернативные версии:
Следующие команды могут использоваться вместо PI:
источник
žv
,žw
илиžx
действителен, хотя, поскольку у каждого есть только 2 отличных цифры.at least 3
, сначала был просто PI, когда я это написал. Что вы имеете в виду назад классы персонажей?JJJ
с???
хотя.Cubix , 12 байт
Немного скучный ответ на самом деле. Выходит три
10
с последующими символами новой строкиПопробуйте онлайн! Карты к кубу
N
Выкладывает 10 в стекOo
x3 Выходы 10 и новая строка@
останавливает программуНачальное
N@N@
не ударил.источник
N@N@NOoOoOo@
не содержит пробелов.Пепе , 24 байта
Попробуйте онлайн!
Программа содержит 6 R, 6 E и 12 E.
Объяснение:
Выход:
источник
V , 9 байт
Попробуйте онлайн!
Выходы
12i
24 раза:Vim, 12 байт
Выводит так же, как ответ V
источник
сложено , 24 байта
Попробуйте онлайн! Выводит
54
каждый изp
u
иt
.источник
Befunge 93 , 9 байт
TIO
Prints
0 0 0
(завершающий пробел, за которым следуют 3 нулевых байта)Поскольку стек Befunge дополняется
0
символом s, мы можем напечатать как символ ASCII с этим значением, так и само целое число. Поскольку Befunge автоматически печатает пробел после целого числа, у нас остается 3 разных символа..
печатает0
(завершающий пробел),,
печатает нулевой байт и@
завершает программуисточник