Напишите программу, которая пишет функцию НО на другом языке!


30

Напишите самую короткую программу, которая берет один вход (n) из STDIN (или эквивалентный) и выводит простую инкрементную функцию с одним аргументом (x), которая возвращает x + n, но функция должна быть на другом языке. Довольно просто!

Это код-гольф, применяются нормальные правила, выигрывает самая короткая программа.

Пример:> <> в Python (Ungolfed)

!v"def i(x):"a"    return x+"ir!
 >l?!;o

Входные данные:

3

Выход:

def i(x):
    return x+3

РЕДАКТИРОВАТЬ: анонимные функции и лямбда-выражения допускаются!


Насколько большой может быть вход? Насколько я могу судить, ваш пример работает только с однозначными числами для> <> его половины.
Sp3000

Теоретически, у меня должна быть возможность использовать любой (разумный) ввод, но ответы, в которых используется только ввод, который может содержать 1 цифру, полностью приемлемы, я подумал переделать пример, чтобы исправить это перед публикацией, но я решил оставить его для простоты. ,
Блейк Локли

4
Я не вижу никакого определения для того, function BUTчто мы должны написать .. -_-
Оптимизатор

1
Когда функция возвращает другую функцию, она называется замыканием . Я не знаю, если это применимо кросс-языка, хотя ...
ETHproductions

@ETHproductions Я предполагаю, что цель не в том, чтобы вернуть объект функции, а в исходном коде функции на этом другом языке.
Paŭlo Ebermann

Ответы:


23

GS2 → K, 2 байта

•+

Это печатает молчаливую, монадическую функцию. Исходный код использует кодировку CP437 . Попробуйте онлайн!

Тестовый забег

$ xxd -c 2 -g 1 sum-func.gs2
00000000: 07 2b  .+
$ printf 42 | gs2 sum-func.gs2
42+
$ kona
K Console - Enter \ for help

  (42+) 69
111
  f : 42+
42+
  f 69
111

Как это работает

GS2

  • GS2 автоматически читает из STDIN и помещает данные в стек.

  • указывает, что следующий байт является строковым литералом-одиночкой.

  • Перед выходом GS2 печатает все элементы стека.

К

Каррирование левого аргумента в K. происходит автоматически

Здесь, n+превращает двоичную функцию +в монадическую функцию, устанавливая ее левый аргумент в n.


1
Какую кодировку вы используете?
Конор О'Брайен

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ "Исходный код использует кодировку CP437 ."
ETHproductions

16

ShapeScript → J, 4 байта

"&+"

Это печатает молчаливый, монадический глагол. Попробуйте онлайн: ShapeScript , J

Тестовый забег

$ cat sum-func.shape; echo
"&+"
$ printf 42 | shapescript sum-func.shape; echo
42&+
$ j64-804/jconsole.sh 
   42&+ 69
111
   f =: 42&+
   f 69
111

Как это работает

ShapeScript

  • ShapeScript автоматически читает из STDIN и помещает ввод в стек.

  • "&+" толкает эту строку в стеке.

  • Перед выходом ShapeScript печатает все элементы стека.

J

& выполняет аргумент карри.

Здесь, n&+превращает двоичный глагол +в монадический глагол, устанавливая его левый аргумент в n.


Я почти уверен, что есть язык, где вам не нужно закрывать цитаты.
lirtosiast

Есть большая вероятность, что вы правы, но я не могу вспомнить ни одного с неявным вводом и неявным выводом.
Деннис

13

GolfScript → CJam, 4 байта

{+}+

Это печатает блок кода (анонимная функция). Попробуйте онлайн: GolfScript , CJam

Тестовый забег

$ cat sum-func.gs; echo
{+}+
$ printf 42 | golfscript sum-func.gs
{42 +}
$ cjam
> 69 {42 +} ~
111
> {42 +}:F; 69F    
111

Как это работает

GolfScript

  • GolfScript автоматически считывает данные из STDIN и помещает данные в стек.

  • {+} толкает этот блок в стеке.

  • + выполняет конкатенацию, которая успешно объединяет строку и блок.

  • Перед выходом GolfScript печатает все элементы стека.

CJam

{n +}это блок кода, который при выполнении сначала помещает nв стек, а затем выполняет +, который извлекает два целых числа из стека и помещает их сумму.


2
Я просто собирался опубликовать это!
Loovjo

Вау, это впечатляет. {n +}толкает 42, затем выполняет +. (Наверное должно быть {42 +}или "толкает n")
Джастин

@ Justin Действительно. Благодарность!
Денис

12

BrainF *** для JavaScript ES6, 57 байт

----[-->+++<]>--.[-->+<]>+.+.--[->++<]>.[--->+<]>+++.[,.]

(Предполагается, что вход состоит из цифровых символов)

Скажите 1337, ваш вклад. Затем это будет компилироваться в:

x=>x+1337


10

От 0 до 5 байт

я '++ о

Благодаря @ kirbyfan64sos

Другая версия, использующая функции, добавленные после создания конкурса.

я '+
  • Получает ввод, толкает в стек
  • Толкает '+' как строку
  • Выводит содержимое стека

K имеет автоматическое карри, так что вы можете просто сделать i'++p.
kirbyfan64sos

Расстояние между K и O равно 4. Вам нужно сократить его на один байт.
mbomb007

@ mbomb007 Вт. Код длиной 5 байтов
фаза

2
Письма. В алфавите. Возьми?
mbomb007

1
@ mbomb007, это было слишком сложно для меня
фаза

9

R до Юлии, 19 байт

cat("x->x+",scan())

Это читает целое число из STDIN, используя scan()и записывает безымянную функцию Джулии в STDOUT, используя cat(). Функция Джулия просто x->x+n, откуда nисходит от программы R.



8

Minecraft 1.8.7 к K, 7 6 + 33 + 27 + 62 = 129 128 байт

Это использует эту версию подсчета байтов .

система

Командные блоки (идущие слева направо):

Табло целей добавить К манекен
Табло игроков установило JK <input>
Tellraw @a {счет: {имя: "J", цель: "K"}, дополнительно: [{text: "+"}]}

Скорее всего, это немного сложнее, но это довольно просто: сгенерируйте переменную Jс целью Kи установите ее значение для этой цели на входе (нет STDIN - я подумал, что это было достаточно близко). Затем, после отметки, выведите оценку переменной Jдля цели, Kза которой следует a +. Очень просто.


Обратите внимание, что .dat bytecounting не подходит для этой системы, так как указанная версия Minecraft не поддерживает файлы структуры.
Эддисон Крамп

Во-вторых, не могли бы вы удалить extra, поместить JSON партитуры в массив и поместить строку после? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
Программы

@RedwolfPrograms Не на момент представления, четыре года назад.
Эддисон Крамп

8

Серьезно для Python, 15 байт

,"lambda n:n+"+

Ожидается, что ввод будет в строковой форме, т.е. "3"

Объяснение:

,: read value from input
"lambda n:n+": push this literal string
+: concatenate top two values on stack

Попробуйте онлайн (вам нужно будет вручную ввести ввод, потому что постоянные ссылки не любят кавычки)


Эй, кто-то действительно прошел с серьёзно! : D
ETHпродукция

2
Шутки в сторону? Вы закончили серьезно до Симплекс? D:
Конор О'Брайен

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Он еще не полностью закончен (см. Систему отслеживания проблем), но он работает достаточно хорошо, чтобы использовать его в некоторых играх.
Мего



6

Pyth to APL, 7 5 байт

+z"--

Код Pyth просто объединяет input ( z) со строкой "--". Это создает неназванный монадический поезд в APL с формойn-- , откуда nприбывает Pyth. При вызове его в APL (n--)xдля некоторого аргумента xвычисляетn--x = n-(-x) = n+x .

Пытаться: Pyth , APL

Сохранено 2 байта благодаря Денису!


5

> <> в Python, 25 + 3 = 28 байт

"v+x:x adbmal
o/?(3l
;>~n

Вводит через -vфлаг, например

py -3 fish.py add.fish -v 27

и выводит лямбду Python, например lambda x:x+27 .

Для бонуса вот версия ввода STDIN для 30 байтов:

i:0(?v
x+"r~/"lambda x:
o;!?l<

5

Мышь Руби, 19 байт

?N:"->x{x+"N.!"}"$

Ungolfed:

? N:       ~ Read an integer from STDIN, store in N
"->x{x+"   ~ Write that string to STOUT
N. !       ~ Write N
"}"$       ~ Close bracket, end of program

Это создает безымянную функцию Рубиновых форм , ->x{x+n}где nпроисходит от мыши.


Хорошая работа, мне нравится этот пост.
этап


5

Brainfuck to Java, 273

+ [-----> +++++ +++++ ++++++ [----> ++++ + [-....> ++++ .- [- > +++ -.----- [-...> +++ +++++ ++++++ [----> ++++ .- [---> ++ -. [-----> ++ -. [-..> +++ --------- .------------- [---> + --- + --- ---- .- [-...> +++++ -.- [---> ++ -.. [-----> +++, [. ,] + [---------> +++ .- [---> +++.

Результаты метода , как int d(int i){return i+42;}(что не выглядеть как метод Java, но ... Java!)


1
Вы знаете, потому что Java.
Конор О'Брайен

1
Что значит, это не похоже на метод Java? Как еще должен выглядеть такой метод?
Paŭlo Ebermann

@ PaŭloEbermannpublic static int method(int argument){return argument+42;}
фаза

1
Хм, хорошо. (Хотя, если вы программируете только на public staticязыке Java, вы на самом деле не занимаетесь Java. argumentЛучше бы его тоже назвали summand;-) )
Paŭlo Ebermann

@ PaŭloEbermann Я просто моделировалpublic static void main(String[] arguments){}
фаза

4

PHP → JavaScript (ES6), 20 24 байта

Чтение из STDIN всегда дорого в PHP. Это выглядит немного странно:

x=>x+<?fgets(STDIN);

Он печатает x=>x+и ждет пользовательского ввода для завершения строки, завершается полной анонимной функцией JavaScript, например x=>x+2.

Первая версия (24 байта )

<?='x=>x+'.fgets(STDIN);

Почему не просто x=>x+<?=$x;? Это действительный PHP4.1, и вы можете передавать значения через POST, GET, SESSION, COOKIE, ... и он будет работать без нареканий. Или на PHP5.3 с register_globals=on(в вашем php.iniфайле).
Исмаэль Мигель

@IsmaelMiguel В требованиях к заданию сказано, что для этого требуется число STDIN. Каждый раз я игнорировал то, что критиковали. Поэтому сейчас я серьезно отношусь к требованиям. :)
insertusername здесь

Ну, я думаю, что GETэто прошло STDIN. Я могу проверить это через некоторое время.
Исмаэль Мигель

1
serverfault.com/questions/187025/… <- доказательства по моей претензии. Просто используйте код, который я предоставил, шлепните по этой ссылке, и никто не может пожаловаться
Исмаэль Мигель

1
Хо, понял! Это действительно умно!
Blackhole


4

Питон 2 до CJam, 18 20 байт

Спасибо LegionMammal978 за исправление функциональности.

print"{%f+}"%input()

Python делает основной формат строки. %fэто код для float, и поскольку я не потерял ни одного байта для обработки float, я пошел вперед и сделал это.

CJam во многом совпадает с ответом Golfscript-> CJam. Это выглядит примерно так:

{7.4+}

или:

{23+}

Это блок, который снимает верхнее значение со стека, выталкивает специальное число и добавляет их.


@ LegionMammal978 В конце вопроса говорится, что разрешены анонимные функции и лямбда-выражения. Тем не менее, я отредактирую свой ответ с помощью альтернативной полной программы.
bkul

1
OP означает, что выход может быть функцией.
LegionMammal978

3

POSIX оболочка для Haskell, 19 байт

read n;echo "($n+)"

Разрешенные анонимные функции, Haskell - хороший выбор вывода с разделами оператора.


3

Retina to Pip , 4 байта

Использует один файл для каждой из этих строк + 1 штрафной байт; или поместите обе строки в один файл и используйте -sфлаг.

$
+_

Соответствует концу ввода с $и помещает +_туда. Это приводит к чему-то в форме 3+_, которая является анонимной функцией в Pip.


3

Bash → C / C ++ / C # / Java, 33 байта

и, возможно, другие

echo "int f(int a){return a+$1;}"

3

Витси к К, 5 байт

\ o / K будет использоваться очень скоро, если он сможет это сделать.

N '+' Z

или, может быть...

N '+' О

Если входные данные взяты в виде строки (только для ввода 0-9) ...

я '+' Z

Все это для ввода 2 будет выводить:

2+

3

Крошечный Лисп на Цейлон , 68 61

(d u(q((n)(c(q(Integer x))(c(q =>)(c(c(q x+)(c n()))()))))))

Крошечный Лисп не имеет реального ввода и вывода - он просто имеет оценку выражения. Этот код выше создает функцию и связывает ее сu . Затем вы можете вызвать uс аргументом, nподобным следующему:, (u 7)который оценивает это значение Tiny Lisp:

((Integer x) => (x+ 7))

Это допустимое выражение Цейлона для анонимной функции, которая добавляет 7 к произвольному целому числу.

Спасибо DLosc за улучшение 7 байтов.


Отличная работа с очень ограниченными выходными возможностями!
DLosc

3

JavaScript для лямбда-исчисления , 39 байт

(Это использует связанный документ в качестве основы.)

alert((x=>`λa(${x}(add a))`)(prompt()))

Скажи вход есть 5. Тогда это становится:

"λa(5(add a))"

1
Где переводчик для лямбда-исчисления?
Feersum

@feersum Проверьте ссылку. Я не уверен, существует ли реальный переводчик, но мне сказали, что я мог представить на этом языке.
Конор О'Брайен

1
Что вы имеете в виду "вам сказали"? Ответы, которые не запускаются ни в одной языковой реализации, являются недействительными.
Feersum


1
Лямбда-исчисление довольно хорошо известно, я предполагаю, что где-то должен быть действительный интерпретатор. Дело в том, что вам нужно идентифицировать такого интерпретатора и написать код в формате, принятом этим интерпретатором.
Feersum



2

Цейлон к Малому Лиспу , 76

shared void run(){print("(q((x)(s ``process.readLine()else""``(s 0 x))))");}

Это производит (после прочтения строки ввода) вывод, подобный (q((x)(s 5(s 0 x)))), который оценивает в Tiny Lisp ((x) (s 5 (s 0 x)))функцию, которая принимает аргумент x, вычитает его из 0 и вычитает результат из 5. (Да, это то, как вы добавляете в Tiny Lisp , есть только встроенная функция вычитания. Конечно, сначала можно определить функцию сложения, но это будет дольше.)

Вы можете использовать это как анонимную функцию:

((q((x)(s 5(s 0 x)))) 7)

(Это оценит до 12.)

Или вы можете дать ему имя:

(d p5 (q((x)(s 5(s 0 x)))))
(p5 7)

Исправления и советы по игре в гольф от DLosc, автора Tiny Lisp.


2

Javascript (ES6)> PHP / Javascript, 38 48 47 байт

Этот код является анонимной функцией, которая создает VALID PHP и вызываемую функцию Javascript anonymous.

P=prompt;P(Function('$x',`return $x+${P()};`));

На момент написания этого кода только Firefox реализовал ES6 изначально (без флагов и тому подобного).

Этот код использует prompt()функцию для запроса ввода и для вывода. Firefox поддерживает копирование вывода prompt(), что делает этот метод легитимным для Javascript.


Соображения:

  • В ;конце требуется для PHP
  • return $xТребуется пространство в Javascript
    • Игнорирование этого скажет, что return$xне определено
  • Название функции автоматическое: у меня нет выбора
  • Выбор только PHP или только Javascript уменьшит код только на 1 байт и уменьшит веселье на половину
  • Может работать с другими языками

Старый ответ (48 байт):

alert(Function('$x',`return $x+${prompt()};`));

Старый неверный ответ:

y=>''+Function('$x',`return $x+${y};`)

@ LegionMammal978 Готово. Починил это.
Исмаэль Мигель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.