Ваш босс просит вас написать программу «Привет, мир!». Поскольку вам платят за строки кода, вы хотите сделать его как можно более сложным. Однако, если вы просто добавите бессмысленные строки, или, очевидно, бесполезные или запутывающие вещи, вы никогда не получите это через обзор кода. Поэтому проблема заключается в следующем:
Напишите программу «hello world», которая настолько сложна, насколько это возможно, при условии, что вы можете дать «обоснование» для каждой сложности в коде.
Требуемое поведение программы - просто вывести единственную строку «Hello world» (без кавычек, но с новой строкой в конце) и затем успешно завершиться.
«Оправдания» включают в себя:
- Совместимость модного слова («Современное программное обеспечение является объектно-ориентированным!»)
- общепринятые хорошие практики программирования («Все знают, что вы должны разделить модель и представление»)
- ремонтопригодность («Если мы сделаем это таким образом, мы можем легче сделать XXX позже»)
- и, конечно, любое другое оправдание, которое вы можете себе представить, используя (в других ситуациях) для реального кода.
Очевидно, глупые оправдания не будут приняты.
Кроме того, вы должны «обосновать» свой выбор языка (поэтому, если вы выбираете по своей сути многословный язык, вы должны будете обосновать, почему это «правильный» выбор). Забавные языки, такие как Unlambda или Intercal, неприемлемы (если только вы не можете дать очень хорошее обоснование их использования).
Оценка квалификационных заявок рассчитывается следующим образом:
- 1 балл за каждое утверждение (или любой другой эквивалент утверждения на выбранном вами языке).
- 1 балл за каждое определение функции, типа, переменной и т. Д. (За исключением основной функции, где это применимо).
- 1 балл за каждый оператор использования модуля, директива включения файла, оператор использования пространства имен или аналогичный.
- 1 балл за каждый исходный файл.
- 1 балл за каждое необходимое предварительное объявление (если вы можете избавиться от него путем перестановки кода, вы должны «обосновать», почему выбранное вами соглашение является «правильным»).
- 1 балл за каждую контрольную структуру (если, пока, для и т. Д.)
Помните, что вы должны «оправдать» каждую строку.
Если выбранный язык отличается настолько, что эта схема не может быть применена (и вы можете дать хорошее «обоснование» для его использования), пожалуйста, предложите метод оценки, который наиболее похож на приведенный выше для вашего языка по вашему выбору.
Участников просят подсчитать балл за участие и записать его в ответ.
источник
Ответы:
C ++, троллпост
Мой мозг не может оправдать написание более длинного :)
источник
Здесь я продемонстрирую мощь и удобство использования языка сценариев под названием Python , решая довольно сложную задачу изящным и эффективным способом с помощью операторов и генераторов структур данных, таких как списки и словари, в вышеупомянутом языке сценариев .
Тем не менее, я боюсь, что я не полностью понимаю использование фраз «сложный, насколько это возможно» и «оправдание». Тем не менее, вот краткое изложение моей обычной, достаточно понятной и понятной стратегии, за которой следует фактическая реализация в Python, которая, как вы найдете, вполне соответствует игровой природе языка высокого порядка:
Определить алфавит - очевидный первый шаг. Для расширяемости мы выбираем весь диапазон ASCII. Обратите внимание на использование встроенного генератора списков, который может сэкономить нам часы утомительной инициализации списка.
скажите, сколько из каждой буквы в алфавите мы будем использовать. Это просто представлено в виде другого списка!
Объедините эти два списка в один удобный словарь, где ключи - это точки ascii, а значения - желаемое количество.
Теперь мы готовы начать создавать персонажей! Начните с создания строки символов из словаря. Это будет содержать все символы, которые нам нужны в нашем конечном выводе, и правильное количество каждого из них!
Объявите желаемый порядок символов и создайте новый список, который будет содержать наш окончательный результат. С помощью простой итерации мы поместим сгенерированные символы в их конечную позицию и напечатаем результат!
Вот фактическая реализация
Хорошо, просто пошел на короткий, но глупый и добавил кучу текста, а не решение кода TL; DR
источник
n
здесь считается как 1 строка или 11?Hello World от Dart скомпилирован в JS (2 936 012)
http://code.google.com/p/dart/issues/detail?id=14686
(Я позволю Google оправдать это, хотя)
источник
Скала, оценка: 62
Хорошо, я бросаю свою шляпу в кольцо.
ContentProvider.scala:
HWCChain.scala:
HHWCChain.scala:
eHWCChain.scala:
theLThing.scala:
indexedLHWCChain.scala:
theOThing.scala:
indexedOHWCChain.scala:
BlankHWCChain.scala:
WHWCChain.scala:
rHWCChain.scala:
dHWCChain.scala:
TermHWCChain.scala:
HelloWorldCharChainChecker.scala:
Конечно, для чисто функционального подхода, 0 вонючих переменных. Все выложено в системе типов и прямо вперед. Умный компилятор может оптимизировать его до нуля.
Программа понятна, проста и понятна. Это легко тестируемый и универсальный инструмент, позволяющий избежать ловушек чрезмерного повышения квалификации (моя команда хотела перекодировать indexedOHWCChain и indexedLHWCChain в общую вторичную черту, которая имеет массив целей и поле длины, но это было бы просто глупо!).
источник
complex
как первоначальные запросы вопросов. Это просто оченьverbose
. Есть разница.Pure Bash без вилки (некоторые считают, кажется, около 85 ...)
Особенности :
gzip
иuuencode
черезperl
(чаще устанавливается, чемuudecode
)Полное переписывание (исправление ошибок, рисование ascii-art и два уровня):
(Используемый ключ тоже
V922/G/,2:
основанHelloWorld
, но это неважно;)Результат (по запросу):
Есть другая версия:
Используя тот же ключ и может сделать что-то вроде:
источник
Всем известно, что закон Мура принял новый оборот и что все реальные достижения в области вычислительной мощности в следующем десятилетии придут в ГПУ. Имея это в виду, я использовал LWJGL для написания невероятно быстрой программы Hello World, которая полностью использует преимущества GPU для генерации строки «Hello World».
Поскольку я пишу Java, идиоматично начинать с копирования и вставки чужого кода, я использовал http://lwjgl.org/wiki/index.php?title=Sum_Example
источник
Сборка (x86, Linux / Elf32): 55 баллов
Все знают, что когда вам нужна быстрая программа, вам нужно писать на ассемблере.
Иногда мы не можем полагаться на то, что
ld
выполняем свою работу должным образом. Для оптимальной производительности предпочтительнее создать собственный заголовок Elf для нашего исполняемого файла hello world. Этот код требуется толькоnasm
для сборки, поэтому он очень переносим. Он не зависит от внешних библиотек или сред выполнения.Каждая строка и утверждение абсолютно необходимы для правильного функционирования программы - здесь нет ничего плохого, ничего нельзя пропустить.
Более того, это действительно самый короткий способ сделать это без использования компоновщика - нет ненужных циклов или объявлений, чтобы разложить ответ.
счет
org
,db
,dw
,dd
,equ
,global _start
): 37dd _start
,dd filesize
,dw ehdrsize
,dw phdrsize
: 4ehdr:
,phdr:
,section .data,
,section .text
,_start:
): 5источник
PHP / HTML / CSS (88pts)
Весь код доступен здесь: https://github.com/martin-damien/code-golf_hello-world
index.php
autoload.php
классы / page.php
классы / Title.php
классы / XMLElement.php
дизайн / таблицы стилей / hello_world.css
дизайн / шаблоны / макеты / pagelayout.twig
дизайн / шаблоны / страницы / hello_world.twig
источник
Brainfuck
369 выражений, 29 в то время как петли = 398
Вывод из K & R Пример языка программирования C:
источник
Ti-Basic 84, 1 балл
Ti-Basic довольно простой. Но если вы действительно хотите обоснованное объяснение, вот оно:
:
запускает каждую команду, функцию, инструкцию, структуру, подпрограмму, вы называете ееDisp
предопределенная функция, которая отображает параметр на экранеaka
whitespace
Позволяет функцииDisp
знать, что она была вызвана и что параметр должен следовать за единственным символом пробела, который фактически вставляется вместе сDisp
"
Начинает определять строковый литералHELLO WORLD
Часть текста в строковом литерале!
Хотя это факториальный математический оператор, он не оценивается, поскольку находится внутри строкового литерала."
Заканчивает определение строкового литералаисточник
Итак, у меня очень ... ... ... своеобразный менеджер. У него странная идея, что чем проще программа, тем она красивее и художественнее. Поскольку
Hello World
это, пожалуй, одна из самых простых программ для написания, он попросил что-то такое замечательное, что мог бы повесить на стену. Проведя некоторое исследование, он настоял, чтобы вещь была написана на Пиете.Теперь я не из тех, кто ставит под сомнение достоинства самого умного человека, когда-либо существовавшего в высшем руководстве, поэтому мне было поручено «написать» эту программу, которую можно запустить на этом онлайн-переводчике. Может быть, пришло время искать более вменяемого менеджера ...
источник
Липограмма в C:
Th ky btwn 'w' и 'r' на моем компьютере не работает. Это вызывает проблемы с сомами. Почти все pr-compilr dirctivs в C используют этот lttr. Эта кодировка выдает предупреждения о неявном объявлении printf (), так как я не могу использовать #includ (stdio.h), но он запускает fin.
источник
Я поставлю это для справки в качестве сообщества вики. Это C # с плохой практикой. Я определяю свою собственную структуру данных ascii. Я не хочу, чтобы это было конкурентом, а скорее "Малыш, ты видишь этого человека там ... если ты не будешь есть овощи, ты станешь как он" своего рода примером.
ЕСЛИ ВЫ ЛЕГКО БЕСПОКОЙСТВУЕТЕ ПЛОХИМ КОДОМ, СМОТРИТЕ СЕЙЧАС
Я обычно использую это, чтобы напугать детей на Хэллоуин. Вы также должны заметить, что я не смог уместить здесь все свои 256 символов ascii, потому что общее число символов достигает 40 000. Не пытайтесь воспроизвести это по двум причинам:
Так что ... да "наслаждайся!" Кроме того, если вы любите очистки и улучшение кода кашель код обзор кашля это может держать вас заняты на некоторое время , если вы ищете неприбыльную оккупацию.
источник
Я добавлю некоторые комментарии позже.
источник
main
классаMain
:ConsoleDisplay
не имеет члена с именемgetInstance
. Вы имели в видуConsoleDisplayFactory
? Кстати, пожалуйста, прямо укажите язык (Java, я думаю) и пункты.Очки: 183
System
? Ну, так или иначе, скажем, 0.MustOverride
, который я буду считать.Всего: 62 + 43 + 0 + 1 + 1 + 76 = 183
запись
Документация
OptimizedStringFactory
Имеет оптимизированные строки. Имеет кеш, который позволяет ссылки на эффективныеIEnumerable(Of Char)
s, избегая при этом проблем с ссылками. До моего сведения дошло, что в .NET есть какой-то пул строк. Однако встроенное кэширование недостаточно знает об объектах, которые мы используем - это ненадежно, поэтому я создал собственное решение.ConcurrentOutputCharacter
Класс позволяет легко синхронизации многопоточный, выхода односимвольного. Это мешает выводу искажаться. В лучших практиках объектно-ориентированного программирования оно объявляется,MustInherit
и каждый символ или строка для вывода выводятся из него, а также объявляютсяNotInheritable
. Он содержит несколько утверждений, чтобы обеспечить передачу правильных данных.*Character
содержит один символ для нашего конкретного случая вывода строки.Красиво, нет?
Это даже расширяемо, благодаря вышеупомянутым циклам и наследованию, плюс динамическая, основанная на отражении загрузка классов. Это также предотвращает чрезмерное запутывание, поэтому никто не может претендовать на наш код, запутывая его. Чтобы изменить строки, просто создайте словарь, который отображает входные символы в различные классы выходных символов, прежде чем код отражения загружает их динамически.
источник
Javascript, много очков
Вот так:
источник
Программа C для Hello World: 9 (?)
Комбинация символов ASCII и массива символов, содержащего целое число! В основном, печать каждой цифры в символьном формате.
источник
Python с использованием операторов if-else
объяснение
Это создает словарь значений ASCII и связанных с ними символов, поскольку это позволит коду использовать только эти значения и ничего больше. Мы гарантируем, что мы ссылаемся на гласные в отдельном списке, а затем даем знать, что второй последний символ повторяется в обеих строках.
Сделав это, мы создаем список словарей с установленными правилами, определяющими длину слова, его первый, последний и повторяющиеся символы, а затем также устанавливаем утверждение true / false для проверки повторений.
Как только это будет сделано, скрипт перебирает список словарей и передает его через функцию, которая создает все возможные перестановки символов из справочного словаря, стараясь при необходимости добавлять любые повторяющиеся символы.
Затем он передается через вторую функцию, которая создает еще больше перестановок для каждой перестановки, но устанавливает максимальную длину. Это сделано для того, чтобы мы нашли слова, которые хотим прожевать. Во время этого процесса он затем передает его через функцию, которая использует комбинацию операторов if-else, которая определяет, стоит ли его выплевывать. Если перестановка совпадает с тем, для чего вызываются операторы, то она выплевывает операторы true / false и вызывающая ее функция добавляет ее в список.
Как только это будет сделано, сценарий затем берет первый элемент из каждого списка и объединяет их в состояние «Привет, мир».
Я также добавил некоторые функции отладки, чтобы вы знали, насколько медленно это происходит. Я решил сделать это, так как вам не нужно писать «hello world», чтобы он выплевывал «hello world», если вы знаете, как составить предложение.
источник
Ну, это хорошо.
источник
Golf-Basic 84, 9 очков
объяснение
Спросите пользователя, хотят ли они выйти
Запишите их ответ
Если они действительно хотят закончить, это прекращается
Если они не закончились, то печатается Hello World.
источник
Хеширует, а затем грубой силой де-хэширует символы «Hello, World!», Добавляет их в a
StringBuilder
и записывает их в Logger.источник
C # - 158
Я говорю вам, что, разработчики в наши дни, не обращая внимания на принципы SOLID. В наши дни люди пренебрегают, насколько важно правильно выполнять даже простые задачи.
Во-первых, нам нужно начать с требований:
Сначала начнем с локализации. Чтобы правильно локализовать строки, нам нужен псевдоним для строки, используемой в программе, и локаль, в которой мы хотим строку. Нам, очевидно, нужно хранить эти данные в легко совместимом формате, XML. И чтобы сделать XML правильно, нам нужна схема.
StringDictionary.xsd
Это определяет нашу структуру XML и дает нам хорошее начало. Далее нам нужен сам файл XML, содержащий строки. Сделайте этот файл встроенным ресурсом в вашем проекте.
Учитывая это, мы абсолютно не хотим, чтобы в нашей программе были жестко закодированные строки. Используйте Visual Studio для создания ресурсов в вашем проекте, которые мы будем использовать для наших строк. Убедитесь, что изменились,
XmlDictionaryName
чтобы соответствовать имени вашего файла XML-строк, определенного ранее.Поскольку мы являемся инверсией зависимостей, нам нужен контейнер зависимостей для регистрации и создания наших объектов.
IDependencyRegister.cs
IDependencyResolver.cs
Мы можем обеспечить простую реализацию обоих этих интерфейсов вместе в одном классе.
DependencyProvider.cs
Начиная с самого низкого уровня и продвигаясь вверх, нам нужен способ читать XML. После
S
иI
в SOLID мы определяем интерфейс, который использует наш код строкового словаря XML:Думая о правильном дизайне для производительности. Получение этих строк будет на критическом пути в нашей программе. И мы хотим быть уверены, что мы всегда получаем правильную строку. Для этого мы будем использовать словарь, в котором ключом является хеш имени строки и локали, а значение содержит нашу переведенную строку. Еще раз, следуя принципу единой ответственности, наш словарь строк не должен заботиться о том, как хэшируются строки, поэтому мы создаем интерфейс и предоставляем базовую реализацию
IStringHasher.cs
Sha512StringHasher.cs
С помощью этого мы можем определить наше хранилище строк XML, которое читает файл XML из встроенного ресурса и создает словарь, содержащий определения строк
EmbeddedXmlStringStore.cs
И связанный
StringInfo
структура для хранения строковой информации:StringInfo.cs
Поскольку у нас может быть несколько способов поиска строк, нам нужно изолировать остальную часть программы от того, как именно извлекаются строки, для этого мы определяем
IStringProvider
, который будет использоваться в остальной части программы для разрешения строк:ILocaleStringProvider.cs
С реализацией:
StringDictionaryStoreLocaleStringProvider.cs
Теперь, чтобы обработать локали. Мы определяем интерфейс для получения текущей локали пользователя. Это важно, поскольку программа, работающая на компьютере пользователя, может считывать языковой стандарт процесса, но на веб-сайте языковой стандарт пользователя может исходить из поля базы данных, связанного с его пользователем.
ILocaleProvider.cs
И реализация по умолчанию, которая использует текущую культуру процесса, так как этот пример является консольным приложением:
Остальная часть нашей программы на самом деле не заботится, обслуживаем ли мы локализованные строки или нет, поэтому мы можем скрыть поиск локализации за интерфейсом:
IStringProvider.cs
Наша реализация StringProvider отвечает за использование предоставленных реализаций
ILocaleStringProvider
иILocaleProvider
за возврат локализованной строки.DefaultStringProvider.cs
Наконец, у нас есть точка входа в программу, которая предоставляет корень композиции и получает строку, выводя ее на консоль:
Program.cs
И именно так вы пишете готовую для предприятия микросервисную программу Hello World.
Результаты: Файлы: 17 Пространство имен Включает в себя: 11 Классы: 14 Переменные: 26 Методы: 17 Операции: 60 Поток управления: 2 Перенаправленные объявления (члены интерфейса, xsd complexTypes): 11 Всего: 158
источник
iX2Web
источник