Привет, мир! без повторений


27

На любом языке программирования, существовавшем до того, как был задан этот вопрос, напишите программу (не функцию), которая выводит символы, Hello world!за которыми следует символ новой строки. Ваша программа:

  • не следует использовать какой-либо символ более одного раза (включая пробелы)
  • следует использовать только символы ASCII
  • не следует использовать какие-либо встроенные библиотеки
  • не должен получать ввод (пользователь, файл, имя файла, системная переменная, интернет, что угодно)
  • не должен ничего выводить

Победителем считается тот, кто наберет наибольшее количество голосов через 14 дней и соблюдает шесть правил.

Шестое правило: нельзя использовать H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + или Fugue. Кроме того, все ответы, которые требуют реализации, более новой, чем эта задача, должны быть помечены как неконкурентные.


Отказ от ответственности: Этот вопрос был размещен с предположением, что Привет, мир! с ограниченным повторением не нанесло никакого ущерба вашему компьютеру или вашему мозгу в процессе выработки ответов.


если мы экранируем коды символов, можно ли использовать символ "\" более одного раза?
WallyWest

4
А как насчет пит?
Виктор Стафуса

@Victor "должен использовать только символы ASCII"
Timtech

3
Это была отличная головоломка, и мне понравилось это делать :-).
Конрад Боровски

9
«Следует использовать только символы ASCII» - какое суровое ограничение. Это удаляет целый класс языков, которые не используют ASCII.
Тимви

Ответы:


33

Perl 6 (29 28 символов)

Это несколько раздражало, но мне наконец-то удалось составить программу для этой задачи. Спасибо большое сообществу # perl6 за помощь в решении этой задачи. У меня ушло два часа, надеюсь, вам понравится. Вывод полностью соответствует спецификации, включая перевод строки.

say
Q[@A`DO world!]~|<HeLhg>

Есть четыре жетона интереса.

  • say

    Это выводит аргумент с новой строкой в ​​конце. Новая строка после самой команды необходима для замены пробела.

  • Q[@A`DO world!]

    Это первая строка. Q[]для необработанных строк (как r""в Python). В этом случае может использоваться любой разделитель (или пара из них) []. В этом случае я использую это для кавычек, мне не нужно необработанное поведение строки.

  • ~|

    Это stringwise ( ~) побитовый или ( |) оператор.

  • <HeLhg>

    <>является литералом списка, который занимает разделенный пробелами список элементов. В этом случае он имеет один элемент и используется как скаляр, он дает строку.


3
Удивительно! Мне нужно учиться. Какой-то синтаксис Perl 6! Я согласен с вашим комментарием тоже, безусловно, была веселая проблема!
Дом Гастингс

4
Вау ... мой ум взорван: O +1
дверная ручка

12

Perl 5 с -M5.010, 29 байт

say+He.v108
x2,q(O world!)^$"

Попробуйте онлайн!

Я получил много знаний с тех пор, как впервые попытался это сделать. Все еще не так коротко, как другие ответы, но лучшее, что я могу придумать!


Задача имеет нижний регистр w.
Орджан Йохансен

@ ØrjanJohansen Спасибо, я забыл!
Дом Гастингс

11

Perl 5.10+: 24 символа

say+He,YZX^q(567 world!)

Хорошо, я думаю, что это так же мало, как в Perl.

Запустите perl -M5.010(или просто perl -E), чтобы включить функцию Perl 5.10+ say.


Серьезно впечатлен! Я провел целую вечность, пытаясь обойти llс ...
Дом Гастингс

9

Golfscript 42 33

Я мог бы также сыграть в эту игру, учитывая, что мне пришлось разместить часть кода и все данные в одном блоке без возможности их разграничения, я думаю, что это довольно короткий результат. В отличие от моего первого представления, блочный код теперь является полностью интегрированной частью данных, поэтому {1не только начинается блок и помещается 1в стек, но и данные, которые определяют H, и так далее. Создание массива теперь включает в себя пустую строку ввода, что означает, что мне не нужно обрезать начало, так как между пустой строкой и тем есть только один символ H, этот символ обрезается, когда я беру каждый второй символ, и пустой Строка в конце концов выводится как ничего.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Демо-версия в Интернете: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Определяет блок кода. Делает копию блока кода и преобразует его в строку. Использует блок кода для перебора строки. Для каждой итерации код будет делать копию предыдущего значения char, xor его с текущим значением char и вычитать 1. В результате полученная строка удаляет первые 6 символов и удаляет каждый второй символ. Наконец добавляется перевод строки.

«r iFNGDJUHv98oIMgtplbh4m» - это просто две необъявленные переменные, они ничего не делают, но они тщательно сконструированы для получения желаемого результата.

Демоверсия в Интернете: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r



6

Befunge-98 , 34 31 байт

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Попробуйте онлайн!

Использует несколько различных методов, чтобы избежать дублирования символов.

Во-первых, мы используем перенос строки, чтобы избежать использования двух символов "s. Это добавляет "мир!" в стек.

Идя налево на второй строке, мы добавляем 9 к дополнительному, fчтобы сделать oиз "Hello". Мы gдобавляем символ из ячейки 5,0 ( l) и затем дублируем его. 'Используется для извлечения буквы e. Умножьте 9 на 8, чтобы получить 72, значение ASCII H. Затем мы печатаем все, используя ck,, и меняем направление с помощью >кнопки, чтобы повторно использовать ,для печати новой строки ( a).


Очень хорошо, но этот вызов без запятой.
Орджан Йохансен,

О, боже, это облегчает ... Спасибо @ ØrjanJohansen
Джо Кинг,

У вас есть два +и d.
Орджан Йохансен

@ ØrjanJohansen упс. должно быть исправлено сейчас
Джо Кинг

3

Эликсир , 37 байт

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Попробуйте онлайн!

Я не могу гарантировать, что это сработало бы еще в 2014 году, когда эта проблема была опубликована, а Elixir был все еще до версии 1.0 (и, таким образом, формально «конкурирует», но, глядя на их заметки о выпуске, я думаю, что это должно быть ХОРОШО). В любом случае, я рад, что наконец нашел правильное решение этой задачи, используя обычный язык общего назначения, отличный от Perl!

Прохождение

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.