Целью Rosetta Stone Challenge является написание решений на максимально возможном количестве языков. Покажите свое программирование многоязычия!
Соревнование
Ваша задача - реализовать программу, которая будет вводить список чисел и выводить правило, используемое для генерации каждого последующего числа в серии, на максимально возможном количестве языков программирования . Вам разрешается использовать любую стандартную библиотечную функцию, имеющуюся в вашем языке, поскольку это в основном демонстрация языка.
Что такое "серия"?
Серия - это упорядоченный список целых чисел. Каждое последующее число в серии можно сгенерировать, применив простое правило к предыдущему номеру в серии. В этой задаче правило состоит в умножении числа на константу и последующем добавлении второй константы. Обе константы могут быть любыми целыми числами. Цель этой задачи - вывести эти две константы.
Для серии 2 5 11
правило может быть записано как 2 1
. Это означает, что каждое число - это предыдущее число, умноженное на 2 плюс 1. Важным фактом является то, что большинство серий имеют ровно одно правило. В некоторых сериях есть либо бесконечное число, либо его вообще нет, но вам не придется с этим сталкиваться.
вход
Ввод будет список из трех различных целых чисел, которые являются числами в последовательности. Числа могут быть разделены пробелом, запятой или символом новой строки, но укажите, какие именно. Я собираюсь проявить гибкость в отношении этого ограничения, потому что некоторые языки могут иметь ограничения ввода. Вот четыре примера ввода:
0 7 14
2 5 11
2 0 -4
5 -19 77
Выход
Выходными данными будут два целых числа, которые представляют правило, используемое для генерации ряда. Первое число будет мультипликативной константой, а второе число будет аддитивной константой. Форматирование вывода может быть пробелом, запятой или символом новой строки. Я также гибок в этом ограничении. Вот соответствующие примеры вывода:
1 7
2 1
2 -4
-4 1
Объективный критерий победы
Что касается объективного критерия выигрыша, то здесь: каждый язык - это отдельное соревнование в отношении того, кто может написать самую короткую запись, но общим победителем будет тот, кто выиграет большинство из этих подконкурсов. Это означает, что человек, который отвечает на многих необычных языках, может получить преимущество. Code-golf - это, в основном, тай-брейк, когда на языке существует более одного решения: человек с самой короткой программой получает кредит на этот язык.
Правила, ограничения и примечания
Ваша программа может быть написана на любом языке, существовавшем до 9 апреля 2012 года. Мне также придется полагаться на сообщество для проверки некоторых ответов, написанных на некоторых из более необычных / эзотерических языков, поскольку я вряд ли смогу протестировать их.
Текущий список лидеров
Этот раздел будет периодически обновляться, чтобы показать количество языков и лидирующих в каждом.
- AWK (32) - мелламокб
- Баш (31) - Питер Тейлор
- Befunge (29) - Говард
- до н.э (39) - Kernigh
- Брейнфук (174) - CMP
- C (78) - l0n3_shArk
- C ++ (96)
- Common Lisp (88) - Kernigh
- Cray Chapel (59) - Кайл Канос
- csh (86) - керни
- Куда (301)
- DC (30) - Kernigh
- DOS BATCH (54) - мелламокб
- Элемент (27) - Говард
- es (95) - керни
- Коэффициент (138) - Керни
- Феликс (86) - kirbyfan64sos
- Фортран (44) - Кайл Канос
- Go (101) - Говард
- GolfScript (16) - Говард
- Golflua (44) - Кайл Канос
- Хаскелл (35)
- J (23) - Гарет
- Ява (141) - Говард
- JavaScript (47) - мелламокб
- Юлия (71) - ML
- Луа (51) - Говард
- Меркурий (319)
- MoonScript (48) - kirbyfan64sos
- Нимрод (146)
- Сова (22) - отдых
- Паскаль (88)
- Perl (57) - Гарет
- PHP (61) - мелламокб
- PicoLisp (72) - Kernigh
- Пит (56) - ML
- PostScript (61) - Говард
- Питон (40) - Говард
- Q (36) - tmartin
- QBasic (34) - mellamokb
- R (50) - рез
- Рубин (44) - Ховард
- Скала (102) - Гарет
- SQL (57) - Аман ЗееК Верма
- TI-83 BASIC (25) - мелламокб
- Неограниченная регистрация машины (285) - Paxinum
- VBA (57) - Гаффи
- Пробелы (123) - res
- зш (62) - керни
Рейтинг текущих пользователей
Равные ранги отсортированы по алфавиту.
Говард (9): Befunge (29), Элемент (27), Go (101), GolfScript (16), Java (141), Lua (51), PostScript, (61) Python, (40) Ruby (44)
Kernigh (8): BC (39), Common Lisp (88), CSH (86), DC (30), ES (95), Фактор (138), PicoLisp (72), Zsh (62)
вокруг (6): C ++ (96), Cuda (301), Haskell (35), Mercury (319), Nimrod (146), Pascal (88)
mellamokb (6): AWK (32), DOS BATCH (54), JavaScript (47), PHP (61), QBasic (34), TI-83 BASIC (41)
Гарет (3): J (23), Perl (57), Скала (102)
Кайл Канос (3): Cray Chapel (59), Фортран (44), Гольфлуа (44)
разрешение (3): сова (22), R (50), пробел (123)
kirbyfan64sos (2): Феликс (86), MoonScript (48)
ML (2): Юлия (71), Пит (56)
Aman Zeek verma (1): SQL (57)
CMP (1): мозговой трах (174)
Гаффи (1): VBA (57)
l0n3_shArk (1): C (78)
Paxinum (1): безлимитный регистратор (285)
Питер Тейлор (1): bash (31)
tmartin (1): Q (36)
источник
code-golf
иcode-challenge
тегов.Ответы:
GolfScript, 16 символов
Ввод дан как разделенный пробелами список.
JavaScript, 56 символов
Ввод дан по подсказке.
Рубин, 44 символа
Здесь вводится в виде списка через запятую.
Python, 40 символов
Ввод снова через запятую.
Java, 141 символов
Ввод разделен переводом строки.
Луа, 51 персонаж
Ввод разделен переводом строки.
Go, 101 символов
Ввод разделен переводом строки.
Фортран, 90 символов
Ввод разделен переводом строки.
Befunge, 29 символов
PostScript, 61 символ
Сова, 23 персонажа
Ввод разделен переводом строки.
Элемент , 27 символов
Ввод разделен переводом строки.
источник
Brainfuck - 174
Пит - 82?
Не уверен, как измерить конкурентоспособный гольф здесь. Я собираюсь пойти с общим размером изображения (в коде) Мой 41x2:
Befunge - 34
Английский - 278
Не уверен, что это имеет значение, но думал, что я попробую. Удивительно сложно точно описать даже простой алгоритм. Хотелось бы, чтобы английский поддержал какой-то символ группировки, чтобы установить приоритет.
источник
D:\Software\Programming\Piet\npiet-1.3a-win32>npiet series2.png
? 5
? -19
? 77
05
решение должно быть-4 1
QBasic, 42
Требуется ввод с запятыми, вывод с пробелами (это нормально?)
Меркурий, 319
Haskell,
8581Теперь вводы с пробелами, выходы с символами новой строки.
С, 80
С ++, 96
Нимрод, 146
Ввод с символами новой строки, вывод запятой.
Этот не будет считаться, но я чувствую, что он все еще в некотором роде:
Математическая теорема, 713 символов LaTeX
Пока мы пишем
:=
определения ...Паскаль,
9088Куда, 301
источник
m
и повторно используяc
, и еще два, используяc-=b;c/=b-a;
вместоc=(c-b)/(b-a);
.scanf()
строке формата.AWK, 35 символов
2 0 -4
до н.э., 39 символов
z=f(2, 0, -4)
bc
выражением. Послеbc
чтения исходного файла, он читает стандартный ввод. Вот почему ввод должен выглядеть как вызов функции.bc
, который требует новой строки после{
.Common Lisp, 88 символов
2 0 -4
csh, 86 символов
2 0 -4
csh
это единственный язык, для которого я считаю перевод строки в конце файла. Это потому, чтоcsh
никогда не запускается последняя команда, если там нет перевода строки.set i=($<)
не работает, потому что$<
не имеет разделения слов.30 символов
2 0 _4
где_
подчеркивание.эс, 95 символов
2 0 -4
es
это расширяемая оболочка Пола Хаара и Байрона Ракициса.Фактор, 138 символов
2 0 -4
PicoLisp,
7472 символа2 0 -4
a(read)b(read)c(read)
наr read a(r)b(r)c(r)
.TI-83 BASIC,
6361 знаков2
ENTER0
ENTER¯4
ENTER, где¯
унарный минус калькулятора.→
(стрелка вправо) считается как U + 2192. Например, калькулятор считаетсяInput A
как 2 символа, но я считаюInput A
как 7 символов. Я также считаю:
как 1 символ.зш, 62 символа
2 0 -4
источник
AWK (32)
Демо: http://ideone.com/kp0Dj
Баш (38)
Демо: http://ideone.com/tzFi8
DOS / BATCH (54
55)Принимает параметры как разделенный пробелами список аргументов.
Ява (143
185)JavaScript (48
6167)Демо: http://jsfiddle.net/BT8bB/6/
PHP (61
77)Демо: http://ideone.com/CEgke
QBasic (34)
ТИ-83 Базовый (25
41)Да, пропущена правильная скобка специально. Это хорошо известный метод оптимизации, заключающийся в том, что закрытие скобок перед операцией STO не требуется при программировании TI-83 Basic.
источник
p
не определена. Говорит ли спецификация JS, что аргументы функции должны быть оценены до ее разрешения?Пробел, 123
Ввод / вывод разделены переводом строки. (Чтобы получить исходный код, войдите в режим редактирования и скопируйте пробел между предварительно отформатированными тегами; или посмотрите онлайн- пример на Ideone .)
Пояснение, где S, T, L представляет пробел, табуляцию, перевод строки:
R, 50
Ввод / вывод разделен пробелом.
Сова
--- 22 ---
Ввод / вывод разделены переводом строки.
--- 19 --- (если эта версия разрешена; но я думаю, что она обманывает, поскольку \ - исполняемый код):
Ввод / вывод разделен пробелом. Использование командной строки:
owl prog 5 19\ 77
(\ действует как постфиксный унарный минус в Owl).источник
J, 23 символа
Использование:
Отрицательные числа представлены подчеркиванием в J.
PHP, 88 символов
Скала, 102 персонажа
Perl, 57 символов
Требуется опция '-p', для которой я добавил 2 символа. Предполагается, что ввод действителен для сохранения некоторых символов.
Все мои ответы занимают разделенные пробелами числа.
источник
1!:1]3
справа от выражения будет читать ввод из STDIN. Я думаю, что было обсуждение мета или в комментариях к некоторым J ответам о том, должно ли это быть разрешено или нет. Я немного амбивалентен - мне нравится выяснять, как заставить J делать то, что я хочу, в наименьшем пространстве, я возьму штраф в 6 символов за ввод из STDIN, если этого хотят все.(],1{x-0{x*])%~/2-/\x=:".1!:1]1
в режиме консоли , похоже, все в порядке.)($a=($_[1]-pop)/($_[0]-$_[1])).$/.($_[1]-$_[0]*$a)
PHP,
74,72, 69Когда ввод передается в качестве аргументов:Теперь, как предложил @mellamokb, используя $ n = $ argv:С,
77, 78^ не работает, вот что: [спасибо @ugoren за то, что он это заметил]источник
fscanf
иscanf
без пробелов. Потрясающие!$argv
, то есть$n=$argv
в начале?scanf
сначала делать, потомd=..
потомb-d*a
?VBA, 57 символов
( Это в основном то же самое, что и другие «ОСНОВНЫЕ» функции, но я уже не видел ни одного представления VBA. )
источник
Debug.?y;b-a*y
Баш (42 символа)
Чистая Баш:
Баш (31 символ)
Обстреливая что-то еще:
(На основе реализации Говарда OWL )
источник
Это (неоптимизированный) код для машины без регистрации, описанной здесь: http://www.proofwiki.org/wiki/Definition:Unlimited_Register_Machine
Вход должен быть в регистре 1,2 и 3, а выход будет в регистре 1, 2 после завершения программы. Неотрицательные и нецелые числа не обрабатываются, но входы 0,7,14 и 2,5,11 обрабатываются правильно.
Zero[8] Trans[2,11] Jump[3,11,7] Succ[11] Succ[8] Jump[11,11,3] Zero[5] Trans[1,12] Jump[2,12,13] Succ[12] Succ[5] Jump[12,12,9] Zero[17] Trans[8,13] Jump[13,17,25] Zero[16] Trans[5,14] Jump[13,14,22] Succ[14] Succ[16] Jump[14,14,18] Succ[9] Trans[16,13] Jump[17,17,15] Zero[6] Zero[20] Jump[9,6,40] Zero[7] Trans[1,21] Jump[20,7,36] Succ[21] Trans[21,19] Trans[19,21] Succ[7] Jump[7,7,30] Trans[21,18] Trans[18,20] Succ[6] Jump[6,6,27] Trans[20,4] Zero[10] Trans[4,15] Jump[2,15,47] Succ[15] Succ[10] Jump[15,15,43] Trans[9,1] Trans[10,2]
РЕДАКТИРОВАТЬ: путем удаления скобок и сокращения имен инструкций:
URM 285
Z8 T2,11 J3,11,7 S11 S8 J11,11,3 Z5 T1,12 J2,12,13 S12 S5 J12,12,9 Z17 T8,13 J13,17,25 Z16 T5,14 J13,14,22 S14 S16 J14,14,18 S9 T16,13 J17,17,15 Z6 Z20 J9,6,40 Z7 T1,21 J20,7,36 S21 T21,19 T19,21 S7 J7,7,30 T21,18 T18,20 S6 J6,6,27 T20,4 Z10 T4,15 J2,15,47 S15 S10 J15,15,43 T9,1 T10,2
источник
ДОС-БАТА, 98
Ввод в отдельных строках
Баш, 51
Пример :
sh prog.sh 2 0 -4
(разделенные пробелами аргументы)Perl, 84
Ява, 297
Разделенный пробелами ввод, разделенный пробелами вывод
SQL, 57
Это грустная запись, но «просто» решает цель. Запрос связывает ввод во время выполнения 1, 2, 3 - это переменные в порядке ввода.
источник
bash
решение, я просто хотел предложить, чтобы вы удалили все лишние пробелы и сохранили 6 символов.Q, 36
использование
источник
Фортран 44
Ввод будет в одной строке (через запятую или через пробел)
Cray Chapel 59
Ввод будет в одной строке, без новой строки (добавьте 2 символа для этого, используя
writeln
вместоwrite
).Golflua 44
Ввод с разделителями новой строки, вывод с разделителями-пробелами
источник
Юлия, 71 персонаж
Разделенный пробелами ввод и вывод.
i,j,k=int(split(readline(STDIN)));println("$(l=div(k-j,j-i)) $(j-i*l)")
Пример ввода и вывода:
Пита,
866056 кодеков (14x4), размер кодела 10 для лучшей видимостиЯ мог бы сократить количество кодов на целых 35%. Я не ожидал такого хорошего результата. Как я и ожидал, кодирование этой программы в обратном направлении было довольно успешным. Я сомневаюсь, что это может быть короче этого, но мне было бы действительно интересно, если бы кто-нибудь мог найти меньшее решение.
В задании не указывается, должна ли программа останавливаться после отображения результата, поэтому моя самая маленькая (56 кодов) программа должна быть действительной. После показа результата он просто возвращается к началу, запрашивая новый триплет целых чисел. Из-за плотной упаковки нет места для вывода двух символов новой строки, но это не проблема для интерпретатора npiet, потому что он всегда печатает '?' если он ожидает ввода.
Существует два возможных размера для создания зацикленной версии, но версия, которая запускается только один раз, возможна только в программе размером не менее 64 кодов (16x4). Версии ниже показывают причину. Может быть, это также интересно для тех, кто знаком с Питом.
Финальная, наиболее плотно упакованная версия 56 кода с циклом :
Вторая версия (60 кодов), с петлей
Если версия кодела 56 не соответствует правилам, вот последняя версия кодела 64, запускаемая только один раз :
Моя первая версия (86 кодов)
Вход и выход разделены новой строкой.
Пример ввода и вывода:
Для зацикленных версий, выглядит немного страшнее:
Я выбрал символ новой строки в качестве разделителя, потому что для кодирования ASCII 10 (\ n), очевидно, требуется всего 7 кодов, по сравнению с ASCII 32 (), который требует 8 кодов или даже ASCII 40 (,), который требует 9 кодов.
Кодирование в обратном направлении от результата к первому вводу - отличный способ сократить использование кодела для операций ROL. Порядок стека в начале и в конце известен, остальное легко сделать вручную.
Вот текстовая версия программы на 64 коде (со стеком), в моем готовом сокращении. Более короткие программы просто не завершаются, а возвращаются к началу.
источник
MoonScript (48 символов, ввод с разделителями новой строки, вывод с разделителями)
Феликс (86 символов, ввод с разделителями новой строки, вывод с разделителями запятыми)
Джулия (84 символа, разделенный пробелами ввод, разделенный пробелами вывод)
источник
julia file.jl
ту же ошибку?