На любом языке программирования, существовавшем до того, как был задан этот вопрос, напишите программу (не функцию), которая выводит символы, Hello world!
за которыми следует символ новой строки. Ваша программа:
- не следует использовать какой-либо символ более одного раза (включая пробелы)
- следует использовать только символы ASCII
- не следует использовать какие-либо встроенные библиотеки
- не должен получать ввод (пользователь, файл, имя файла, системная переменная, интернет, что угодно)
- не должен ничего выводить
Победителем считается тот, кто наберет наибольшее количество голосов через 14 дней и соблюдает шесть правил.
Шестое правило: нельзя использовать H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + или Fugue. Кроме того, все ответы, которые требуют реализации, более новой, чем эта задача, должны быть помечены как неконкурентные.
Отказ от ответственности: Этот вопрос был размещен с предположением, что Привет, мир! с ограниченным повторением не нанесло никакого ущерба вашему компьютеру или вашему мозгу в процессе выработки ответов.
Ответы:
Perl 6 (
2928 символов)Это несколько раздражало, но мне наконец-то удалось составить программу для этой задачи. Спасибо большое сообществу # perl6 за помощь в решении этой задачи. У меня ушло два часа, надеюсь, вам понравится. Вывод полностью соответствует спецификации, включая перевод строки.
Есть четыре жетона интереса.
say
Это выводит аргумент с новой строкой в конце. Новая строка после самой команды необходима для замены пробела.
Q[@A`DO world!]
Это первая строка.
Q[]
для необработанных строк (какr""
в Python). В этом случае может использоваться любой разделитель (или пара из них)[]
. В этом случае я использую это для кавычек, мне не нужно необработанное поведение строки.~|
Это stringwise (
~
) побитовый или (|
) оператор.<HeLhg>
<>
является литералом списка, который занимает разделенный пробелами список элементов. В этом случае он имеет один элемент и используется как скаляр, он дает строку.источник
Perl 5 с
-M5.010
, 29 байтПопробуйте онлайн!
Я получил много знаний с тех пор, как впервые попытался это сделать. Все еще не так коротко, как другие ответы, но лучшее, что я могу придумать!
источник
w
.Perl 5.10+: 24 символа
Хорошо, я думаю, что это так же мало, как в Perl.
Запустите
perl -M5.010
(или простоperl -E
), чтобы включить функцию Perl 5.10+say
.источник
ll
с ...Golfscript
4233Я мог бы также сыграть в эту игру, учитывая, что мне пришлось разместить часть кода и все данные в одном блоке без возможности их разграничения, я думаю, что это довольно короткий результат. В отличие от моего первого представления, блочный код теперь является полностью интегрированной частью данных, поэтому
{1
не только начинается блок и помещается1
в стек, но и данные, которые определяютH
, и так далее. Создание массива теперь включает в себя пустую строку ввода, что означает, что мне не нужно обрезать начало, так как между пустой строкой и тем есть только один символH
, этот символ обрезается, когда я беру каждый второй символ, и пустой Строка в конце концов выводится как ничего.Демо-версия в Интернете: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r
Определяет блок кода. Делает копию блока кода и преобразует его в строку. Использует блок кода для перебора строки. Для каждой итерации код будет делать копию предыдущего значения char, xor его с текущим значением char и вычитать 1. В результате полученная строка удаляет первые 6 символов и удаляет каждый второй символ. Наконец добавляется перевод строки.
«r iFNGDJUHv98oIMgtplbh4m» - это просто две необъявленные переменные, они ничего не делают, но они тщательно сконструированы для получения желаемого результата.
Демоверсия в Интернете: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4rисточник
Vim 7.3, 18 нажатий клавиш
Копирует строку
Hello world
из этого файла справки , который, к сожалению, был удален в никогда не версии Vim.источник
<Esc>
и комбинации, включающиеBefunge-98 ,
3431 байтПопробуйте онлайн!
Использует несколько различных методов, чтобы избежать дублирования символов.
Во-первых, мы используем перенос строки, чтобы избежать использования двух символов
"
s. Это добавляет "мир!" в стек.Идя налево на второй строке, мы добавляем 9 к дополнительному,
f
чтобы сделатьo
из "Hello". Мыg
добавляем символ из ячейки 5,0 (l
) и затем дублируем его.'
Используется для извлечения буквыe
. Умножьте 9 на 8, чтобы получить 72, значение ASCIIH
. Затем мы печатаем все, используяck,
, и меняем направление с помощью>
кнопки, чтобы повторно использовать,
для печати новой строки (a
).источник
+
иd
.Эликсир , 37 байт
Попробуйте онлайн!
Я не могу гарантировать, что это сработало бы еще в 2014 году, когда эта проблема была опубликована, а Elixir был все еще до версии 1.0 (и, таким образом, формально «конкурирует», но, глядя на их заметки о выпуске, я думаю, что это должно быть ХОРОШО). В любом случае, я рад, что наконец нашел правильное решение этой задачи, используя обычный язык общего назначения, отличный от Perl!
Прохождение
источник
Stax (неконкурентный), 8 байт
Попробуйте онлайн!
Просто сжатый строковый литерал. К счастью, Стакс отпускает меня без заключительной пометки.
источник