Напишіть програму, яка пише функцію АЛЕ іншою мовою!


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

EDIT: анонімні функції та лямбда-вирази дозволені!


Наскільки великий може отримати вхід? Наскільки я можу сказати, ваш приклад працює лише з одноцифровими числами для <<> його половини.
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 друкує всі елементи стеку.

К

Ліва аргументація викривлення автоматична в К.

Тут n+перетворюється діадійна функція +в монадичну функцію, встановлюючи її лівий аргумент на n.


1
Яке кодування ви використовуєте?
Conor O'Brien

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

& виконує аргумент currying.

Тут 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

O до K, 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()та записує неназвану функцію Julia в STDOUT з використанням cat(). Функція Julia проста x->x+n, де nпоходить від програми R.



8

Minecraft 1,8,7 до К, 7 6 + 33 + 27 + 62 = 129 128 байт

Для цього використовується ця версія підрахунку байтів .

система

Командні блоки (йдуть зліва направо):

Цілі табло додають K манекен
табло гравців встановлюють JK <input>
Tellraw @a {оцінка: {ім'я: "J", мета: "K"}, додатково: [{текст: "+"}]}

Можливо, це може бути трохи більше в гольфі, але це досить просто: створити змінну Jз ціллю Kі встановити її рахунок для цієї мети на вхід (немає STDIN - я вважав, що це досить близько). Потім після галочки виведіть результат змінної Jдля цілі, Kа потім a +. Простенька.


Зауважте, що .dat облік рахунків не застосовується для цієї системи, оскільки перелічена версія Minecraft не підтримує структурні файли.
Аддісон Кримп

Для другого не вдалося вийняти extra, помістити результат JSON в масив і розмістити рядок після? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
Програми Redwolf

@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
ETHproductions

2
Серйозно? Ви закінчили серйозно перед Simplex? D:
Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Це ще не повністю закінчено (див. Трекер випуску), але він працює досить добре, щоб використовувати його в деяких гольфах.
Мего



6

Pyth в APL, 7 5 байт

+z"--

Код Pyth просто з'єднує вхід ( 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.!"}"$

Безголівки:

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

Це створює неназвану функцію Ruby форми, ->x{x+n}звідки nпоходить від Миші.


Гарна робота, мені подобається цей пост.
фаза


5

Brainfuck до Яви, 273

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

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


1
Знаєте, тому що Java.
Conor O'Brien

1
Що означає, що він не схожий на метод Java? Як інакше повинен виглядати такий метод?
Paŭlo Ebermann

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

1
Хм, добре. (Хоча якщо ви програмуєте лише в public static, ви не дуже працюєте на 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. Кожного разу я ігнорував, що його критикують. Тому я зараз серйозно сприймаю вимоги. :)
вставтекористувач

Ну, я думаю, що GETце передано STDIN. Я можу це перевірити через деякий час.
Ісмаїл Мігель

1
serverfault.com/questions/187025/… <- Докази щодо моєї претензії. Просто скористайтеся наданим мною кодом, ляпніть це посилання, і ніхто не може скаржитися
Ісмаель Мігель

1
Хо, зрозумів! Це розумно, справді!
Blackhole


4

Python 2 до CJam, 18 20 байт

Завдяки LegionMammal978 за корекцію функціоналу.

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

Python має основний формат рядків. %fце код для float, і оскільки я не втратив би жодного байта для обробки поплавців, я пішов вперед і зробив це.

CJam - це так само, як відповідь Golfscript-> CJam. Це виглядає приблизно так:

{7.4+}

або:

{23+}

Це блок, який знімає верхнє значення зі стека, висуває спеціальне число, а потім додає їх.


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

1
OP означає, що вихід може бути функцією.
LegionMammal978

3

Оболонка POSIX в Haskell, 19 байт

read n;echo "($n+)"

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


3

Сітківка в Піп , 4 байти

Використовує один файл для кожного з цих рядків + 1 штрафний байт; або, покладіть обидва рядки в один файл і використовуйте -sпрапор.

$
+_

Збігає кінець вводу з $і ставить +_туди. Це призводить до чогось форми 3+_, яка є анонімною функцією в Pip.



3

Віци до К, 5 байт

\ o / K буде використовуватися дуже скоро, якщо він зможе це зробити.

N '+' Z

або можливо...

N '+' O

Якщо введення приймається як рядок (лише для введення 0-9) ...

i '+' Z

Все це, для введення 2, виведе:

2+

3

Крихітний Лисп на Цейлон , 68 61

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

Tiny Lisp не має реального вводу та виводу - він просто має оцінку вираження. Цей код вище створює функцію та пов'язує її 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 Перевір посилання. Я не впевнений, чи існує перекладач, але мені сказали, що я можу подати цією мовою.
Conor O'Brien

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 to ((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.