Ваша задача - если вы ее принимаете - написать программу, которая поможет понять мое предложение по мета-методу путем расчета победителя соревнования кода . Конечно, ответы на этот вопрос будут рассматриваться как предложенные, поэтому ваша программа (если она правильная) может рассчитать, станет ли ваш ответ принятым.
правила
- Программа читает файл с несколькими строками следующего формата (см. Пример ниже): [Язык] TAB [NumberOfCharacters] TAB [LinkToAnswer]
- Имя файла передается в качестве аргумента вашей программе, или файл перенаправляется на стандартный ввод вашей программы. Это ваш выбор, пожалуйста, укажите метод при ответе
- Ожидается, что формат ввода правильный. Там нет необходимости для обработки ошибок.
- Количество символов положительное. Ваша программа должна обрабатывать длину до 65535. 64 КБ должно хватить всем :-)
- Программа выводит те строки на стандартный вывод, которые соответствуют идее метапроекта, то есть
- выигрывает самый короткий код конкретного языка программирования (фаза сокращения)
- выигрывает самый длинный код среди всех языков программирования (фаза сортировки)
- в случае розыгрыша должны быть напечатаны все ответы одинаковой длины
- Порядок вывода не важен
- Хотя выигрывает самый длинный код, это не боулинг . Ваш код должен быть максимально коротким для вашего языка программирования.
- Ответы на редко встречающиеся языки программирования, которые не пытаются сократить код, заслуживают отрицательного ответа, потому что они пытаются обойти намерение такого рода вопроса. Если есть только один ответ для конкретного языка программирования, он будет рассматриваться как кандидат-победитель, так что вы можете начать использовать его код.
Пример входного файла (разделенного одиночными вкладками, если возникает проблема с форматированием):
GolfScript 34 http://short.url/answer/ags
GolfScript 42 http://short.url/answer/gsq
C# 210 http://short.url/answer/cs2
Java 208 http://short.url/answer/jav
C# 208 http://short.url/answer/poi
J 23 http://short.url/answer/jsh
Ruby 67 http://short.url/answer/rub
C# 208 http://short.url/answer/yac
GolfScript 210 http://short.url/answer/210
Ожидаемый результат (порядок не важен):
C# 208 http://short.url/answer/poi
C# 208 http://short.url/answer/yac
Java 208 http://short.url/answer/jav
Обновить
Некоторые программы полагаются на тот факт, что существует один максимум (например, символьная программа C # 210). Полученный из реальности, кто-то может также написать программу GolfScript с 210 символами. Выход останется прежним. Я добавил такой GolfScript для ввода.
Обновление 2
Как и предполагалось, я пометил (все еще код-гольф), и крайний срок - 2014-03-06 (что выглядит как произвольная дата, но я вернусь в Германию из поездки тогда).
Окончательные результаты
Я решил проголосовать так:
- Ответы, в которых количество символов не может быть подтверждено, получают комментарий для объяснения количества.
- Ответы, которые можно легко уменьшить, получают комментарий, редактируют предложение и переходят к результату с меньшим значением счетчика. (Надеюсь, я видел это заранее).
- Ответы, которые не компилируются, получают отрицательный ответ. (Как оказалось, довольно сложная задача).
- Ответы, которые не являются игрой в гольф, получают отрицательную оценку (как уже описано в правилах).
- Ответы, которые дают ожидаемый результат, получают положительный ответ. Из-за некоторых ответов, которые не работают должным образом, я использую 4 разных входных файла и проверяю ожидаемый результат.
Наконец, победитель определяется путем предоставления таблицы квалификационных ответов в качестве входных данных для моей справочной программы (плюс двойная проверка результата вручную). Если бы мой собственный ответ был победным, я бы исключил его из списка. В случае нескольких победителей я бы выбрал только одного. Поэтому некоторые бонусы можно заработать:
- ответы, которые принимают больше информации, чем ожидалось (например, за пределами определенных диапазонов)
- ответы, которые используют умную идею сделать его коротким
Я сделал снимок ответов 6 марта 2014 года, 19:45 UTC + 1. Анализ продолжается. Проверка всех ответов сложнее, чем ожидалось ...
источник
Ответы:
Ява - 556
Программа будет читать из STDIN.
ArrayIndexOutOfBoundsException
когда встречается пустая строка, либоNoSuchElementException
если ввод заканчивается без завершающей новой строки). Каждая прочитанная строка добавляется кTreeMap m
, который мог быть определен какTreeMap<String, TreeMap<Long, TreeMap<String,String[]>>>
(слева направо: язык, размер кода, URL, ввод).TreeSet<Long, TreeSet<String, String[]>> n
(слева направо: размер кода, URL, ввод), в которомfirstEntry()
агрегируется содержимое всех языков .lastEntry()
из агрегированногоTreeMap
содержит наш результат - нам нужно только распечатать его.Попробуйте на ideone.com (переключил две последние строки ввода, чтобы показать, что все строки прочитаны)
источник
Perl, 195 байт
Ввод ожидается в STDIN, результат записывается в STDOUT:
Неуправляемая версия
источник
GolfScript 210 http://short.url/answer/210
строку к входу и посмотрите, останется ли вывод таким же. На самом деле, я думаю, что на вас это не влияет, потому что вы используете [0] максимум, но у меня нет Perl, доступного в данный момент, чтобы попробовать.%l
/%language
содержит языки и их минимальные значения. Структура данных%a
/%array
содержит только те пары язык / URL, значение которых является минимальным для этого языка. Затем минимальные значения сортируются в порядке убывания, а первое используется как глобальный максимум и как условие фильтра для%a
/%array
.Python
378377372Вход на стандартный ввод:
И это то, что у меня было до того, как я начал сжимать его на 551 символе:
источник
C # - 628
Вот более длинная ваша альтернатива, которая использует
DataTable
:Первоначально я думал, что, возможно, получил небольшое сокращение кода при использовании max / min с
DataTable
, но типы, необходимые для построенияDataTable
(rows / columns / view), к сожалению, добавляют большую длину. Я новичок в коде игры в гольф, так что, возможно, кто-то сможет уменьшить его дальше. Все еще веселый вызов.источник
дг -
286281260251218 байтПример:
Безголовая версия:
Q: Какого черта dg?
A: Язык программирования, который компилируется в байт-код CPython, так же, как Scala компилируется в JVM. По сути это означает, что dg является альтернативным синтаксисом для Python 3. Он также позволяет использовать все существующие библиотеки.
Больше информации здесь (даже учебник!): Https://pyos.github.io/dg
источник
cat langs.dg | wc -c
я получаю 218!Реболь - 314
ун-golfed
Пример использования:
источник
C # - 515
Ожидает имя файла в качестве аргумента
Сначала я разработал свою C # -программу, чтобы быть прямой, потому что я хотел иметь своего рода справочную программу. Но потом я решил сам участвовать в конкурсе и сыграть в гольф. Это одна из более ранних версий кода + некоторые комментарии:
источник
C # -
460359Поняв, насколько громоздким было мое
DataTable
решение, я создал следующий пример с использованием Linq. Он использует ту же методологию, что и мое предыдущее решение.Golfed
Ungolfed
Я все еще довольно новичок в Linq, поэтому я почти уверен, что эти выражения могут быть сокращены дальше.
Из вашего вопроса не ясно, существует ли единственное решение максимальной длины. В своих ответах я использовал предположение о том, что существует одна максимальная точка (т. Е. Если был также максимум в GolfScript, равный 210, он может потерпеть неудачу в зависимости от возвращенной записи «Максимальный максимум»). Решение Хейко будет иметь ту же проблему. Чтобы исправить это, мы должны были бы добавить еще один шаг, который содержал список связанных максимумов, чтобы проверить минимумы для каждого языка.
источник
namespace System{using Linq;using IO;class p{static void Main(string[]i){var l=(from f in File.ReadAllLines(i[0])let s=f.Split('\t') select new Tuple<string, int, string>(s[0],Convert.ToInt16(s[1]),f)).ToList();foreach(var f in l.Where(a=>a.Item2==l.Where(b=>b.Item1==l.Single(c=>c.Item2==l.Max(d=>d.Item2)).Item1).Min(e=>e.Item2)))Console.WriteLine(f.Item3);}}}
Golfscript 100 ...
,C# 1 ...
,C# 200 ...
. Это, вероятно, нуждается в доработкеС ++ - 535
Выводятся только ответы, связанные с самой длинной позицией, после выбора только самых коротких ответов каждого языка в качестве потенциальных победителей.
Гольф (не такой нечитаемый, как некоторые языки):
источник