Целью Rosetta Stone Challenge является написание решений на максимально возможном количестве языков. Покажите свое программирование многоязычия!
Соревнование
Когда люди используют термин «среднее», они обычно означают среднее арифметическое, которое представляет собой сумму чисел, деленную на число чисел. Есть, однако, гораздо больше значения к слову «среднее» , включая гармоническое среднее , в среднем геометрическом , на среднем арифметическом , в среднем квадратичном , и contraharmonic среднего .
Ваша задача - написать программу, которая вводит список чисел и выводит эти 5 различных средств. Кроме того, вы пытаетесь писать программы на максимально возможном количестве языков . Вам разрешается использовать любую стандартную библиотечную функцию, имеющуюся в вашем языке, поскольку это в основном демонстрация языка.
вход
На входе будет список положительных чисел.
1,2,3,4,5
1.7,17.3,3.14,24,2.718,1.618
8.6
3,123456
10.1381,29.8481,14.7754,9.3796,44.3052,22.2936,49.5572,4.5940,39.6013,0.9602
3,4,4,6.2,6.2,6.2
Выход
Выходными данными будут пять средних в указанном выше порядке (гармоническое, геометрическое, арифметическое, квадратичное, контрагармоническое). Удобно, это то же самое, что и увеличение порядка.
2.18978,2.6052,3,3.31662,3.66667
3.01183,4.62179,8.41267,12.2341,17.7915
8.6,8.6,8.6,8.6,8.6
5.99985,608.579,61729.5,87296.6,123453.
5.95799,14.3041,22.5453,27.9395,34.6243
4.5551,4.74682,4.93333,5.10425,5.28108
Будет некоторое разумное снисхождение в формате ввода / вывода, но я действительно хочу несколько десятичных знаков точности. Поскольку я хочу вывод с плавающей запятой, вы можете предполагать ввод с плавающей запятой.
Объективный критерий победы
Что касается объективного критерия выигрыша, то вот он: каждый язык - это отдельное соревнование в отношении того, кто может написать самую короткую запись, но общим победителем будет тот, кто выиграет большинство из этих субконкурсов. Это означает, что человек, который отвечает на многих необычных языках, может получить преимущество. Code-golf - это, в основном, тай-брейк, когда на языке существует более одного решения: человек с самой короткой программой получает кредит на этом языке.
Если будет ничья, победителем станет тот, у кого больше всего постов (и т. Д.).
Правила, ограничения и примечания
Ваша программа может быть написана на любом языке, существовавшем до 2 сентября 2014 года. Мне также придется полагаться на сообщество для проверки некоторых ответов, написанных на некоторых из более необычных / эзотерических языков, поскольку я вряд ли смогу протестировать их.
Пожалуйста, сохраняйте все ваши различные материалы, содержащиеся в одном ответе.
Кроме того, нет махинаций с в основном одинаковым ответом на несколько разных языковых диалектах. Я буду судить о том, какие представления достаточно разные.
Текущий список лидеров
Этот раздел будет периодически обновляться, чтобы показать количество языков и лидирующих в каждом.
- Алгоид (337) - бета-распад
- APL (42) - алгоритм
- Авк (78) - Денис
- BBC BASIC (155) - бета-распад
- С (136) - Деннис
- С ++ (195) - дзета
- C # (197) - Мартин Бюттнер
- CJam (43) - Деннис
- Clojure (324) - Майкл Пасха
- Кобра (132)
- CoffeeScript (155) - Мартин Бюттнер
- Коммодор Бейсик (104) - Марк
- Common Lisp (183) - DLosc
- Эрланг (401) - Марк
- Фортран (242) - Кайл Канос
- Фортран 77 (286) - бета-распад
- GNU bc (78) - Денис
- GolfScript (83) - Деннис
- Groovy (157) - Майкл Пасха
- Хаскелл (140) - Зета
- J (28) - алгоритм
- Ява (235) - Майкл Пасха
- JavaScript (ES6) (112) - Денис
- JRuby (538) - Майкл Пасха
- Юлия (79) - Мартин Бюттнер
- Луа (113) - AndoDaan
- Математика (65) - Мартин Бюттнер
- Матлаб (63) - Мартин Бюттнер
- Октава (68) - Деннис
- Openscript (849?) - COTO
- Паскаль (172) - Марк
- Perl (76) - Grimy
- PHP (135) - Деннис
- POV-Ray 3,7 (304) - Марк
- Пролог (235) - DLosc
- Пиф (52) - Денис
- Питон 2 (96) - Денис
- Питон 3 (103) - DLosc
- Q (53) - алгоритм
- Q'Nial (68) - алгоритм
- QBasic (96) - DLosc
- R (91) - планапус
- Рубин (118) - Мартин Бюттнер
- Руст (469) - Vi.
- Скала (230) - Майкл Пасха
- T-SQL (122) - MickyT
- TI-Basic (85) - Ипныпн
- TypeScript (393) - rink.attendant.6
- VBA (Excel) (387) - эластичный маньяк
- wxMaxima (134) - Кайл Канос
Рейтинг текущих пользователей
- Деннис (10)
- Мартин Бюттнер (6)
- Майкл Пасха (5)
- Марк, DLosc, алгоритм алгоритма (4)
- Бета-распад (3)
- Зета, Кайл Канос (2)
- Ourous, AndoDaan, COTO, Grimy, plannapus, Vi., MickyT, Ypnypn, rink.attendant.6, Stretch Maniac (1)
(Если я допустил ошибку в приведенном выше рейтинге, дайте мне знать, и я исправлю это. Кроме того, тай-брейк еще не применен.)
источник
(a-b)/ln(a/b)
. Я признаю, что только сегодня я узнал, как это обобщается на выборочный набор из более чем двух :-) en.wikipedia.org/wiki/Logarithmic_meanbc
иawk
т. Д. «Языками» или «командами», - можно ли считать разные способы реализации этого из оболочки на разных языках?Ответы:
Языки: 1
Openscript (много сотен)
(Мой любимый малоизвестный и печально не существующий язык программирования, потому что я научился программировать на нем много лет назад.;)
источник
put the length of the inputs into n
? О_О Я уже люблю этот язык.Языки: 13
Я думаю, что этот список должен теперь содержать каждый язык программирования, который я знаю достаточно хорошо, чтобы решить хотя бы простые проблемы. Я постараюсь, чтобы этот список оставался полным с течением времени, когда я буду искать некоторые новые языки. (Я использовал знал немного Smalltalk и Delphi, но мне пришлось бы искать много, чтобы добавить их, чтобы чувствовать себя хорошо.)
C
196190171165 байтовСчитывает ввод как отдельные аргументы командной строки и записывает разделенный запятыми список средств в STDOUT.
Спасибо за некоторые улучшения для Квентина.
C ++, 200 байт
Это то же самое, что и приведенный выше код C, плюс два включает. Я включил это, потому что это длиннее, чем выигрышная публикация на C ++, поэтому я думаю, что никакого вреда это не причинит, и я хотел бы, чтобы этот пост фактически содержал все языки, которые я знаю. :)
C #,
220197 байтОпределяет функцию в классе, которая принимает значение
List
типа double и возвращает массив значений типа double с помощью пяти средних.Спасибо за некоторые улучшения в Visual Melon и Bob.
CJam, 52 байта
Принимает входные данные в качестве аргументов командной строки и печатает список с пятью значениями в STDOUT.
CoffeeScript, 155 байт
Это почти то же самое, что и решение JavaScript ниже (и изначально я не посчитал его по этой причине), но OP все равно включил его в табло, поэтому я предложил его для полного представления. В конце концов, это технически разные языки.
JavaScript (ES6),
155153 байтаОпределяет функцию, принимающую массив чисел и возвращающую массив с помощью пяти средних.
Спасибо за некоторые улучшения Уильяму Барбозе.
Юлия, 79 байт
Определяет функцию, принимающую список чисел и возвращающую список с помощью пяти средних.
Луа, 120 байт
Определяет функцию, принимающую список чисел и возвращающую 5 отдельных значений для средних.
Mathematica,
736765 байтОпределяет функцию, принимающую список чисел с плавающей запятой и возвращающую список с пятью средними значениями.
Интересный факт: Mathematica имеет все 5 встроенных средств (и это было мое первоначальное представление), но три из них могут быть реализованы в меньшем количестве символов, чем их имена функций.
Matlab,
6563 байтаЗапрашивает ввод как массив чисел от пользователя и выводит пять средних по отдельности.
Спасибо за некоторые улучшения Денниса Джаруддина.
PHP ≥ 5,4,
152149143 байтаТакая же функциональная реализация, как и у предыдущих.
Спасибо за некоторые улучшения Исмаила Мигеля.
Python 2, 127 байт
Такая же функциональная реализация, как и у предыдущих.
Рубин,
129118 байтТакая же функциональная реализация, как и у предыдущих.
источник
norm(l)/n^.5
вместоnorm(l)/sqrt(n)
.4 языка
J -
3228 чар!Функция, принимающая список чисел в качестве единственного аргумента.
a
здесь наречие, которое J принимает на функции второго порядка.+/ % #
является поездом в J, что означает сумму, разделенную на граф, определение среднего арифметического.&.:
является соединением, называемым Under, гдеu&.:v(y)
эквивалентноvi(u(v(y)))
иvi
является функциональной инверсиейv
. Да, J может принимать функциональные противоположности .Таким образом,
a
берется функция слева и возвращается среднее значение, которое «корректирует» значения с помощью функции, принимает среднее арифметическое и затем переворачивает настройку впоследствии.%a
является гармоническим средним, потому что%
означает Взаимное, и является его собственным обратным.^.a
это среднее геометрическое, потому что^.
является натуральным логарифмом, а его обратное является экспоненциальным.(Π x)^(1/n) = exp(Σ log(x)/n)
[a
среднее арифметическое, потому что[
это тождественная функция.*:a
является квадратичным средним, потому что*:
это квадрат, а его обратный корень квадратный.*:a
делим на ([a
делим на*:a
)). Это выглядит так[a(]%%)*:a
. Пока мы на этом, мы добавляем каждое из средств,[a(,,]*%~)*:a
.Наконец, мы используем запятые, чтобы добавить остальные результаты вместе. Мы не требуем дополнительных паренов, потому что конкатенация (в данном случае, по крайней мере) ассоциативна.
Используется в J REPL:
Q - 53 символа
Функция с одним аргументом. Мы просто составляем список всех средств, которые мы хотим.
То же самое в других версиях k ниже.
{s:(a:avg)x*x;(%a@%x;exp a log x;a x;sqrt s;s%a x)}
{s:(a:{(+/x)%#x})x*x;(%a@%x;(*/x)^%#x;a x;s^.5;s%a x)}
APL - 42 символа
Функция принимает список в качестве аргумента.
Объяснил взрывом:
Q'Nial - 68 символов
Тебе понравится этот.
Q'Nial - это еще один ориентированный на массивы язык, реализация Nial , основанная на малоизвестной теории массивов, аналогично тому, как Haskell основан на теории категорий. (Получите это здесь .) Он сильно отличается от любых других трех - он разбирает слева направо, прежде всего! - но он все же больше связан с ними, чем с любыми другими языками.
источник
/⍨
). Вероятно, он предназначен для переноса действительно старого кода. Что ты используешь? Dyalog? NARS2000? Я думаю, что очень жаль, что J применил подход ASCII к шуму. В противном случае реализация этого языка - гениальная работа. Но я не могу потрудиться, мысленно разобрать]a(,,]*%~)*:a
[0.5]
? Ew.) С практикой, вы привыкли молчать J, хотя. Это становится намного хуже, чем это.12 языков
CJam,
454443 байтаЧитает массив чисел с плавающей точкой (например,
[1.0 2.0 3.0 4.0 5.0]
) из STDIN. Попробуйте онлайн.APL,
6761535250 байтПопробуйте онлайн.
Pyth,
5552 байтаЧитает разделенные пробелом числа (например,
1 2 3 4 5
) из STDIN.Октава, 68 байт
Не считая Шебанга. Читает массив (например,
[1 2 3 4 5]
) из STDIN.GNU bc, 78 байт
Считая Шебанг как 1 байт (
-l
переключатель). Читает пробелы, разделенные пробелами от STDIN, за которыми следует ноль.Awk, 78 байт
Не считая Шебанга. Читает одно число в строке из STDIN.
GolfScript,
8683 байтаВ GolfScript нет встроенной поддержки чисел с плавающей точкой, поэтому код выполняет их синтаксический анализ. Поэтому формат ввода довольно ограничен: вы должны вводить
1.0
и0.1
вместо1
,1.
или.1
.Читает float (как объяснено выше) по одной от STDIN. Попробуйте онлайн.
Perl,
9085 байтСчитая Шебанг как 1 байт (
-n
переключатель). Читает одно число в строке из STDIN.Python 2,
10296 байтНе считая Шебанга. Читает список с плавающей точкой (например,
1.0,2.0,3.0,4.0,5.0
) из STDIN.ECMAScript 6 (JavaScript),
114112 байтНе считая LF. Ожидает массив (например,
[1,2,3,4,5]
) в качестве аргумента.PHP, 135 (или 108?) Байтов
Не считая Шебанга или НЧ. Читает float как аргументы командной строки.
У меня есть более короткое решение, но я не знаю, как считать байты:
Считая байты в каждой строке кода и добавляя два для
-R
и-E
, этот подход получит 108.C
172140139137136 байтНе считая LF. Компилировать с
gcc -lm
. Читает пробелы, разделенные пробелами от STDIN.источник
while(cond)...,n++;
vsfor(;cond;n++)...;
interpreter switches script
для каждой отправки. Соглашение состоит в том, что линии shebang не учитываются, если только они не содержат переключатели по умолчанию. Как указано в моем ответе, я считал#!/usr/bin/awk -f
ноль байтов (-f
означает чтение программы из файла), но#!/usr/bin/perl -n
как один байт (-n
означает итерацию по входным строкам).-q
на октаву и-lm
C?-q
это просто для тихого вывода.-lm
нужен GCC. Другие компиляторы могут этого не требовать.J (50):
Это то, что J хорошо умеет:
Как всегда: взрыв на фабрике смайликов. Тем не менее, некоторые из смайликов на этот раз остались нетронутыми:
:)
и:*:
(это парень с четырьмя глазами и драгоценным камнем на его лице) Мой интерактивный сеанс, который использовался для создания этого: http://pastebin.com/gk0ksn2bВ бою:
Объяснение:
Как и следовало ожидать, на самом деле есть 5 функций, которые объединены в список с набором вилок и хуков. (Не беспокойтесь, это просто удобный способ вывода нескольких функций в один список).
Строки, которые я использовал, чтобы J генерировал этот ответ, могли бы быть немного яснее:
Давайте посмотрим на них отдельно.
гармоника
#
- длина (массива)%
- Деленное на+/@:%
- Сумма (+/
или сгиб+
в массиве (+/1 2 3 4
==1+2+3+4
)) поверх деления, но на этот раз в монадическом случае. Это означает, что J автоматически «угадывает», что 1 будет наиболее полезным значением.геометрический
#
- длина (массива)%:
- рут (4 %: 7
будет означать «четвертый (или тессеракт) корень из семи)*/
- Продукт (*/
аналогичен по значению+/
, см. Предыдущую функцию для этого)арифметика
+/
- сумма, должна быть знакома сейчас%
- деленное на#
- длинаСреднеквадратичное значение
Эмм, да ...
%:
- корень%@#
- обратная длина*
- раз+/@:*:
- Сумма квадратов (*:
возводится в квадрат, хотя*~
тоже.)Contraharmonic
+/@:*:
- сумма квадратов%
- деленное на+/
- сумма.Если бы J был настолько хорош в обработке струн, мы бы выиграли намного больше соревнований по гольфу ...
источник
Языки: 5
POV-Ray 3.7 Язык описания сцены: 304 байта
(POV-Ray SDL не имеет функций ввода с консоли, поэтому я заменил ввод файла. Вывод на консоль, но он окружен большим количеством вывода статуса программы.)
Коммодор бейсик:
111104 байта(Не все символы в этой программе могут быть представлены в Юникоде.
|
Используется для представленияSHIFT+H
,┌
представляетSHIFT+O
,┐
представляетSHIFT+P
,/
представляетSHIFT+N
. Из-за ограничений в вводе / выводе Commodore Basic ввод вводится по одному разу с вводом -1 для обозначения конца ввода. Выходные данные разделены табуляцией.)QBasic: 96 байт
Использует ту же схему ввода / вывода, что и запись DLosc; Я сыграл в гольф 15 байтов, используя тот факт, что
INPUT V
возвращает 0 (что дает ложь), когда вводится пустая строка (по крайней мере, в MS-DOS QBasic 1.1 - я не знаю, работает ли это также в QB64).Паскаль (компилятор FPC): 172 байта
Ввод разделяется пробелами, а не запятыми, и перевод строки завершается. Выход разделен пробелом.
Erlang: 401 байт
Обработка струн в Эрланге - королевская боль. Следовательно, все числа с плавающей запятой должны вводиться как минимум с одной цифрой после десятичной запятой -
string:to_float/1
не будут преобразованы1
, но будут преобразованы1.0
.(Вперед, особенно если я пойму, как это сделать в RoboTalk, языке без операций с плавающей запятой или операций ввода-вывода)
источник
(Q/N)^.5
к моемуSQR(q/n)
, но это не влияет на длину. Может быть, мы могли бы разделить лидерство? (Я делаю количество байтов 96, не включая завершающийwc
) включает в себя завершающий символ новой строки, который, я полагаю, дает нам оба преимущества - по крайней мере, пока я не выясню, как избавиться от этого дубликатаINPUT V
.GOTO
s вместо цикла, но не смог добиться дальнейшего сокращения.Языки: 3
Если не указано иное, числа должны быть разделены пробелом.
C:
181163Принимает числа до конца ввода.
(ISO) C ++: 195
Принимает числа до конца ввода.
Haskell:
185180164159149140Занимает произвольно много списков номеров, разделенных символом новой строки.
Реализация
5041 (спасибо Шион) байтов только для ввода-вывода: /.пример
(Пауэрскелла
echo
акаWrite-Output
печатает каждый параметр на одной строке)источник
;c=t/a
в предложении let пишите[h,g,a/z,r,t/a]
послеin
.s$m(1/)x
короче, чемs.m(1/)$x
, как естьs$m(^2)x
.fromIntegral.length$x
наfoldr(\_ x->x+1)0x
.s$m(const 1)x
.Языки - 4
Я всегда люблю оправдание, чтобы вытащить старое доброе
QBasic,
11296 байтQBasic плохо работает с переменным числом входов, поэтому программе требуется один номер на строку, заканчивающийся 0 или пустой строкой. Выход разделен пробелами.
(Сокращенный, как только я понял, что 0 не является допустимым числом и может использоваться для завершения ввода.)
Протестировано с использованием QB64 :
Common Lisp, 183 байта
По какой-то причине я ожидал, что это будет короче. Я не специалист по Лиспу, поэтому советы приветствуются. Безголовая версия:
Вероятно, лучший способ проверить это - вставить функцию в
clisp
REPL, например так:Мне нравится, как Лисп использует точные дроби вместо плавающих при делении двух целых чисел.
Пролог, 235 байт
Пролог не очень хорош в математике, но мы все равно будем его использовать. Протестировано с SWI-Прологом. Я думаю, что
sumlist
предикат не может быть стандартным Прологом, но как бы то ни было, я его использую.Ungolfed:
В Linux, с кодом в файле с именем
means.pro
, протестируйте так:Дает правильный, но довольно забавный результат, когда есть только одно число:
Python 3, 103 байта
Та же стратегия, что и в версии Денниса Python 2. Принимает разделенный запятыми список чисел; обрабатывает как целые и плавающие. Ввод одного числа должен быть заключен в квадратные скобки (и список чисел всегда может быть); исправление будет стоить 4 байта.
источник
8 языков
Фортран 77 - 286
BBC BASIC - 131
Выход:
С ++ - 292
Питон 3 - 151
Выход:
Ява - 421
Javascript - 231
Я не Javascripter, поэтому любые советы будут с благодарностью
Альгоид - 337
Найдите его в магазине Google Play или в магазине Raspberry Pi.
var'aQ - 376
Это синтаксически правильно и все, но все текущие интерпретаторы просто не работают ...
источник
sqrt(b4/l)
вместо того , чтобы(b4/l)**0.5
и многое другое, используяa
,b
,c
,d
вместоb1-4
. Вы также заставляете меня плакать, используя 77 вместо более современного F90 +.var
:var l=readline(),b=0,d=1,e=0,f=0;
. Не уверен, чтоreadline
функция, хотя.Length of sequence?
или, по крайней мере, делая их короче.Языки: 3
CJam, 58
TI-Basic, 85
Ява, 457
источник
{dim(Ans)/sum(Ansֿ¹),dim(Ans)√(prod(Ans)),mean(Ans),√(mean(Ans²)),mean(Ans²)/mean(Ans
Языки - 2
Кобра - 132
Питон - 129
источник
1 язык
R
9291Берет вектор значения и выдает вектор средних.
источник
d=s(x^2)
и заменить два последних использования вs(x^2)
сd
.1 язык
Гольфскрипт, 162
Да, это огромно. И это определенно можно сделать меньше. Что я и сделаю чуть позже. Попробуйте это здесь .
Ожидается, что ввод будет разделен новой строкой. Если это не разрешено, я исправлю это (+2 символа). Он выводит список разделенных строк.
Вот немного более читаемая версия:
источник
l*l
разы выше, гдеl
число поплавков.Языки 2
Фортран: 242
Я разобрал это для ясности, но игра в гольф - это то, что считается. сначала нужно ввести количество добавляемых значений, затем значения.
wxMaxima 134
Скопируйте это в редактор,
ctrl+enter
а затем вызовите через,m([1,2,3,4,5]),numer
чтобы получить вывод с плавающей запятой (в противном случае вы получите символьный вывод).источник
Perl,
8676Ввод: одно число в строке.
EDIT: this is one character longer, but since apparently shebang lines aren’t counted toward the total, it ends up being better:
источник
T-SQL,
136122With the number lists stored in table S with I (integer) identifying the list and V (float) the value.
SQLFiddle
Saved 14 thanks to Alchymist
источник
Languages: 5
Some entries strive to avoid rounding errors (to 4 decimal places), using Java's BigDecimal instead of float/double, and accept IO rules per OP.
Newer entries relax both IO rules and BigDecimal.
Groovy -
409400164157 charssample run:
Java -
900235 charssample run:
Clojure -
524324 charssample run (it does have a trailing comma at the end):
Scala -
841663230 charssample run:
JRuby - 538 chars
It is unclear if JRuby differs from Ruby: this must run on the JVM. Yet it is Ruby syntax. Either way, I'm including it in the spirit of a Rosetta Stone.
sample run (does print a warning to stderr):
источник
Languages 1
lua - 113
источник
Languages - 1
Groovy:
источник
2 Languages
Java - 243 bytes
expanded:
vba - excel, 387 bytes
Fill in values in the first column, then press the button (that triggers this code) and it outputs the values in the second column.
источник
1 language
Rust - 469
(
rustc 0.11.0-pre (3851d68 2014-06-13 22:46:35 +0000)
)Ungolfed version:
Compacted 430-byte version without loop or input, for testing in playrust:
Updated for newer Rust:
Ungolfed:
Golfed (402 bytes):
источник
Languages: 4
CoffeeScript, 193
Takes a comma-separated string of input:
JavaScript (ES5), 256
Again, takes a comma-separated string of input:
PHP, 252
Same concept:
TypeScript, 393*
Since TypeScript is a superset of JavaScript, I could have just submitted the same code but that wouldn't really be fair now. Here's a minified TypeScript code with all functions, variables, and parameters fully typed:
Could have cheated and used the type
any
as well... but, you know.источник
Excel - 120
Not sure if this counts as a "programming" language, but thought people may actually use a spreadsheet for this type of thing
With the numbers in A2:J2
источник
A:A
to target the entire columnA
.VBA (Excel) - 105
Ungolfed :
This code has to be run in the immediate window, and the array must be called i. Since there is no error collection, no cleaning, no variable dropping/releasing, if you want to test this code you can use the following piece of code (just paste in the immediate window and run the lines in order) :
Nothing very special, just the choice to use the immediate window with : to replace line breaks, which saves a few bytes vs setting up a sub or function and closing it; using ? to print rather than debug.print (only in the immediate window); and relying on how vba determines implicit values (adding a value to an un-set variable returns the value) and implicit operations (anything involving a string is implicitly concatenation).
источник