Привіт Світ! без повторення


27

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

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

Переможець - це той, хто має найбільше голосів через 14 днів і дотримується шести правил.

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


Відмова: Це питання було розміщене з припущенням, що Hello world! з обмеженим повторенням не завдало шкоди ні вашому комп’ютеру, ні мозку в процесі пошуку відповідей.


якщо ми уникаємо символьних кодів, чи може символ "\" використовуватись не один раз?
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). У цьому випадку може бути розміщений будь-який роздільник (або пара) []. У цьому випадку я використовую це для лапок, мені не потрібна поведінка суворого рядка.

  • ~|

    Це послідовний ( ~) побітовий або ( |) оператор.

  • <HeLhg>

    <>- це літеральний список, який займає простір розділений списком елементів. У цьому випадку він має один елемент, і використовується як скаляр, він дає рядок.


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

4
Уа ... мій розум роздутий: O +1
Дверна ручка

12

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

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

Спробуйте в Інтернеті!

Я здобув багато знань з моєї першої спроби. Ще не така коротка, як інші відповіді, але найкраще, що я можу придумати!


Виклик має малі регістри w.
Ørjan Johansen

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

11

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

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

Гаразд, я думаю, що це так коротко, як це стає в Perl.

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


Серйозно вражений! Я витратив віки, намагаючись обійти ll...
Дом Гастінгс,

9

Гольфскрипт 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, закреслить його поточним знаком 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"Привіт". Ми gзаписуємо символ із клітинки 5,0 ( l), а потім дублюємо її. 'Використовується для вилучення літери e. Помножте 9 на 8, щоб отримати 72, значення ASCII H. Потім ми друкуємо все, використовуючи ck,, і перевертаємо напрямок, >щоб повторно використовувати ,для друку нового рядка ( a).


Дуже добре, але це завдання без коми.
Ørjan Johansen

О, хай, це полегшує ... Дякую @ ØrjanJohansen
Джо Кінг,

У вас є два +і d.
Ørjan Johansen

@ ØrjanJohansen на жаль. має бути виправлено зараз
Jo King

3

Еліксир , 37 байт

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

Спробуйте в Інтернеті!

Я не можу гарантувати, що це спрацювало б у 2014 році, коли цей виклик був опублікований, а Elixir все ще був попереднім (і, таким чином, формально він "конкурує", але, дивлячись на їх нотатки до випуску, я думаю, що це повинно бути ДОБРЕ). У всякому разі, я щасливий, що нарешті знайшов дійсне рішення цього завдання, використовуючи звичайну мову загального призначення, відмінну від 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.