Napisz program, który napisze funkcję ALE w innym języku!

30

Napisz najkrótszy program, który pobiera jedno wejście (n) ze STDIN (lub równoważnego) i wyprowadza prostą funkcję inkrementacyjną z jednym argumentem (x), który zwraca x + n, ale funkcja musi być w innym języku. Dość proste!

To jest golf golfowy, obowiązują normalne zasady, wygrywa najkrótszy program.

Przykład:> <> do Pythona (Ungolfed)

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

Wkład:

3

Wydajność:

def i(x):
    return x+3

EDYCJA: Funkcje anonimowe i wyrażenia lambda są dozwolone!

Blake Lockley
źródło
Jak duży może być wkład? O ile wiem, twój przykład działa tylko z cyframi jednocyfrowymi dla połowy> <>.
Sp3000,
Teoretycznie powinien być w stanie użyć dowolnego (rozsądnego) wejścia, ale odpowiedzi, które używają tylko wejścia, które mogłyby utrzymać 1 cyfrę, są w pełni akceptowalne, rozważałem przerobienie przykładu, aby to poprawić przed wysłaniem, ale pomyślałem, że źle zostawię to dla uproszczenia stawki .
Blake Lockley,
4
Nie widzę żadnej definicji function BUTtego, co mamy napisać .. -_-
Optymalizator
1
Gdy funkcja zwraca inną funkcję, nazywa się to zamknięciem . Nie wiem jednak, czy dotyczy to wielu języków ...
ETHprodukcje
@ETHproductions Wydaje mi się, że celem nie jest zwrócenie obiektu funkcji, ale kod źródłowy funkcji w tym innym języku.
Paŭlo Ebermann

Odpowiedzi:

23

GS2 → K, 2 bajty

•+

Wyświetla milczącą, monadyczną funkcję. Kod źródłowy używa kodowania CP437 . Wypróbuj online!

Testowe uruchomienie

$ 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

Jak to działa

GS2

  • GS2 automatycznie odczytuje ze STDIN i wypycha dane wejściowe na stos.

  • wskazuje, że następny bajt jest literałem ciągu singletonowego.

  • Przed wyjściem GS2 drukuje wszystkie elementy stosu.

K.

Curry z lewym argumentem jest automatyczne w K.

W tym n+przypadku funkcja dyadyczna +staje się funkcją monadyczną, ustawiając lewy argument na n.

Dennis
źródło
1
Jakiego kodowania używasz?
Conor O'Brien,
2
@ CᴏɴᴏʀO'Bʀɪᴇɴ „Kod źródłowy używa kodowania CP437 .”
ETHprodukcje
16

ShapeScript → J, 4 bajty

"&+"

To drukuje milczący, monadyczny czasownik. Wypróbuj online: ShapeScript , J

Testowe uruchomienie

$ 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

Jak to działa

ShapeScript

  • ShapeScript automatycznie odczytuje ze STDIN i wypycha dane wejściowe na stos.

  • "&+" wypycha ten ciąg na stos.

  • Przed wyjściem ShapeScript drukuje wszystkie elementy stosu.

jot

& wykonuje curry argumentowania.

Tutaj n&+zamienia dynastyczny czasownik +w czasownik monadyczny, ustawiając jego lewy argument na n.

Dennis
źródło
Jestem prawie pewien, że istnieje język, w którym nie potrzebujesz dokładnego cytatu.
lirtosiast
Istnieje duża szansa, że ​​masz rację, ale nie mogę sobie przypomnieć takiego z niejawnym wkładem i niejawnym wyjściem.
Dennis,
13

GolfScript → CJam, 4 bajty

{+}+

Spowoduje to wydrukowanie bloku kodu (funkcja anonimowa). Wypróbuj online: GolfScript , CJam

Testowe uruchomienie

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

Jak to działa

GolfScript

  • GolfScript automatycznie odczytuje ze STDIN i wypycha dane wejściowe na stos.

  • {+} wypycha ten blok na stos.

  • + wykonuje konkatenację, która szczęśliwie łączy łańcuch i blok.

  • Przed wyjściem GolfScript drukuje wszystkie elementy stosu.

CJam

{n +}to blok kodu , który npo uruchomieniu najpierw wypycha stos, a następnie wykonuje +, co wyskakuje ze stosu dwóch liczb całkowitych i wypycha ich sumę.

Dennis
źródło
2
Właśnie zamierzałem to opublikować!
Loovjo,
Wow, to imponujące. {n +}popycha 42, a następnie wykonuje +. (Prawdopodobnie powinno być {42 +}lub „naciska n”)
Justin
@Justin Rzeczywiście. Dzięki!
Dennis
12

BrainF *** do JavaScript ES6, 57 bajtów

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

(Zakłada się, że dane wejściowe składają się ze znaków numerycznych)

Powiedz, że 1337to twój wkład. Wtedy to skompiluje się do:

x=>x+1337
Conor O'Brien
źródło
10

Wirnik do K, 2 bajty

'+

Równie dobrze może wskoczyć na modę K.

spaghetto
źródło
10

O do K, 5 bajtów

i '++ o

Dzięki @ kirbyfan64sos

Kolejna wersja wykorzystująca funkcje dodane po utworzeniu wyzwania.

i '+
  • Pobiera dane wejściowe, wypycha na stos
  • Przesuwa „+” jako ciąg
  • Wysyła zawartość stosu
faza
źródło
K ma automatyczne curry, więc możesz to zrobić i'++p.
kirbyfan64sos
Odległość między K i O wynosi 4. Musisz skrócić go o jeden bajt.
mbomb007
@ mbomb007 wat. Kod ma 5 bajtów
faza
2
Listy. W alfabecie. Zdobyć?
mbomb007,
1
@ mbomb007, który był dla mnie zbyt skomplikowany
faza
9

R do Julii, 19 bajtów

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

Odczytuje liczbę całkowitą z STDIN przy użyciu scan()i zapisuje nienazwaną funkcję Julii do STDOUT przy użyciu cat(). Funkcja Julia jest po prostu x->x+n, gdzie npochodzi z programu R.

Alex A.
źródło
9

Malbolge do JavaScript ES6, 71 bajtów

('&%@9]!~}43Wyxwvutsr)Mon+HGi4~fBBdR->=_]:[875t4rT}0/Pf,d*((II%GEE!Y}Az

Generowanie kodu Malbolge zawsze sprawia przyjemność.

Conor O'Brien
źródło
8

Minecraft 1.8.7 do K, 7 6 + 33 + 27 + 62 = 129 128 bajtów

Korzysta z tej wersji liczenia bajtów .

system

Bloki poleceń (od lewej do prawej):

cele tablicy wyników dodać manekina K.
gracze tabeli wyników ustawiają JK <wejście>
tellraw @a {score: {name: "J", cel: "K"}, extra: [{text: "+"}]}

Prawdopodobnie można by to nieco pograć w golfa, ale jest to dość proste: wygeneruj zmienną Jz celem Ki ustaw jej wynik dla tego celu na dane wejściowe (nie ma STDIN - pomyślałem, że to było wystarczająco blisko). Następnie, po zaznaczeniu, wypisz wynik zmiennej Jdla celu, Ka następnie a +. Bułka z masłem.

Addison Crump
źródło
Pamiętaj, że liczenie bajtów .dat nie ma zastosowania w tym systemie, ponieważ wymieniona wersja Minecraft nie obsługuje plików struktury.
Addison Crump
Po drugie, czy nie możesz usunąć extra, umieścić wyniku JSON w tablicy, a następnie umieścić ciąg znaków? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
Programy Redwolf
@RedwolfPrograms Nie w momencie składania, cztery lata temu.
Addison Crump
8

Poważnie dla Pythona, 15 bajtów

,"lambda n:n+"+

Oczekuje, że dane wejściowe będą miały postać ciągów, tj "3"

Wyjaśnienie:

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

Wypróbuj online (będziesz musiał ręcznie wprowadzić dane wejściowe, ponieważ permalinki nie lubią cudzysłowów)

Mego
źródło
Hej, ktoś tak naprawdę przeszedł z Poważnie! : D
ETHprodukcje
2
Poważnie? Skończyłeś poważnie przed Simplex? D:
Conor O'Brien,
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Nie jest jeszcze w pełni ukończony (patrz narzędzie do śledzenia problemów), ale działa wystarczająco dobrze, aby używać go w niektórych polach golfowych.
Mego
7

Matematyka na C #, 22 bajty

"x=>x+"<>InputString[]

Zwraca C # Func<int, int>formularza

x=>x+n
LegionMammal978
źródło
1
Dane wyjściowe są również poprawne JavaScript (ES6 / 7).
Ismael Miguel,
6

Pyth do APL, 7 5 bajtów

+z"--

Kod Pyth po prostu łączy input ( z) z łańcuchem "--". To tworzy nienazwany pociąg monadyczny w APL o formie n--, skąd npochodzi Pyth. Podczas wywoływania go w APL, (n--)xdla niektórych argumentów jest xobliczany n--x = n-(-x) = n+x.

Spróbuj: Pyth , APL

Zaoszczędzono 2 bajty dzięki Dennisowi!

Alex A.
źródło
5

> <> do Pythona, 25 + 3 = 28 bajtów

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

Pobiera dane wejściowe za pośrednictwem -vflagi, np

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

i wyprowadza lambda Python, np lambda x:x+27.

Jako bonus, oto wersja wejściowa STDIN na 30 bajtów:

i:0(?v
x+"r~/"lambda x:
o;!?l<
Sp3000
źródło
5

Mysz do Ruby, 19 bajtów

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

Nie golfowany:

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

Tworzy to nienazwaną funkcję Ruby postaci, ->x{x+n}która npochodzi od Myszy.

Alex A.
źródło
Dobra robota, podoba mi się ten post.
faza
5

Haskell do Mathematica, 14 bajtów

(++"+#&").show
alephalpha
źródło
5

Brainfuck to Java, 273

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

Wypisuje metodę podobną int d(int i){return i+42;}(która nie wygląda jak metoda Java, ale ... Java!)

faza
źródło
1
Wiesz, ponieważ Java.
Conor O'Brien
1
Co oznacza, że ​​nie wygląda na metodę Java? Jak inaczej powinna wyglądać taka metoda?
Paŭlo Ebermann
@ PaŭloEbermannpublic static int method(int argument){return argument+42;}
faza
1
Hmm, okej. (Chociaż programujesz tylko w public staticjęzyku Java, tak naprawdę nie używasz Javy. argumentLepiej byś też nazwał summand;-). )
Paŭlo Ebermann,
@ PaŭloEbermann Właśnie modelowałempublic static void main(String[] arguments){}
faza
4

PHP → JavaScript (ES6), 20 24 bajtów

Czytanie ze STDIN jest zawsze drogie w PHP. To wygląda trochę dziwnie:

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

Drukuje x=>x+i czeka na wprowadzenie danych przez użytkownika, aby zakończyć ciąg, kończy się pełną anonimową funkcją JavaScript, np x=>x+2.

Pierwsza wersja (24 bajty )

<?='x=>x+'.fgets(STDIN);
wstawić nazwę tutaj
źródło
Dlaczego nie tylko x=>x+<?=$x;? Jest prawidłowy PHP4.1 i możesz przekazywać wartości przez POST, GET, SESSION, COOKIE ... i będzie działał bezbłędnie. Lub na PHP5.3 z register_globals=on(w twoim php.inipliku).
Ismael Miguel,
@IsmaelMiguel Wymagania wyzwania mówią, że bierze on liczbę od STDIN. Za każdym razem, gdy ignorowałem, było to krytykowane. Więc teraz traktuję wymagania poważnie. :)
inserttusernamehere
Myślę, że GETto zostało pominięte STDIN. Za chwilę mogę to przetestować.
Ismael Miguel,
1
serverfault.com/questions/187025/… <- Dowody na moje roszczenie. Wystarczy użyć kodu, który podałem, uderzyć w ten link i nikt nie może narzekać
Ismael Miguel
1
Ho, rozumiem! To naprawdę sprytne!
Blackhole
4

Python 2 do CJam, 18 20 bajtów

Dzięki LegionMammal978 za poprawienie funkcjonalności.

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

Python ma podstawowy format ciągu. %fjest kodem dla liczby zmiennoprzecinkowej, a ponieważ nie straciłbym żadnych bajtów na obsługę wartości zmiennoprzecinkowych, zrobiłem to.

CJam jest bardzo podobny do odpowiedzi Golfscript-> CJam. Wygląda to mniej więcej tak:

{7.4+}

lub:

{23+}

Jest to blok, który usuwa najwyższą wartość ze stosu, wypycha specjalną liczbę, a następnie dodaje ją.

bkul
źródło
@ LegionMammal978 Na końcu pytania jest napisane, że anonimowe funkcje i wyrażenia lambda są dozwolone. Nadal będę edytować swoją odpowiedź za pomocą alternatywnego pełnego programu.
bkul
1
OP oznacza, że ​​wyjście może być funkcją.
LegionMammal978,
3

Powłoka POSIX do Haskell, 19 bajtów

read n;echo "($n+)"

Dozwolone są funkcje anonimowe, Haskell jest dobrym wyborem wydajności z sekcjami operatora.

arjanen
źródło
3

Retina do Pip , 4 bajty

Używa jednego pliku dla każdej z tych linii + 1 bajt kary; lub umieść obie linie w jednym pliku i użyj -sflagi.

$
+_

Dopasowuje koniec wejścia $i wstawia +_tam. Powoduje to coś w formie 3+_, która jest anonimową funkcją w Pip.

DLosc
źródło
3

Bash → C / C ++ / C # / Java, 33 bajty

a może inni

echo "int f(int a){return a+$1;}"
Zereges
źródło
3

Vitsy do K, 5 bajtów

\ o / K zostanie wkrótce wykorzystane, jeśli będzie to możliwe.

N '+' Z

albo może...

N '+' O

Jeśli dane wejściowe są traktowane jako ciąg znaków (tylko dla danych wejściowych 0–9) ...

i „+” Z

Wszystkie te dane wejściowe 2 wygenerują:

2+
Addison Crump
źródło
3

Tiny Lisp to Ceylon , 68 61

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

Tiny Lisp nie ma rzeczywistych danych wejściowych i wyjściowych - po prostu ma ocenę wyrażeń. Powyższy kod tworzy funkcję i wiąże ją u. Następnie możesz wywołać utaki argument n:, (u 7)który będzie obliczał tę wartość Tiny Lisp:

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

Jest to prawidłowe wyrażenie Cejlonu dla anonimowej funkcji, która dodaje 7 do dowolnej liczby całkowitej.

Dzięki DLosc za ulepszenie 7 bajtów.

Paŭlo Ebermann
źródło
Dobra robota przy bardzo ograniczonych możliwościach wyjściowych!
DLosc
3

JavaScript do Lambda Calculus , 39 bajtów

(Wykorzystuje połączony dokument jako podstawę.)

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

Powiedz, że wejście to 5. Wtedy to staje się:

"λa(5(add a))"
Conor O'Brien
źródło
1
Gdzie jest tłumacz dla Lambda Calculus?
feersum
@feersum Sprawdź link. Nie jestem pewien, czy rzeczywiście istnieje tłumacz ustny, ale powiedziano mi, że mogłem złożyć oświadczenie w tym języku.
Conor O'Brien,
1
Co masz na myśli mówiąc „powiedziano ci”? Odpowiedzi, które nie działają w żadnej implementacji języka, są nieprawidłowe.
feersum
1
Rachunek lambda jest dość dobrze znany, zakładam, że musi być gdzieś ważny tłumacz. Chodzi o to, że musisz zidentyfikować takiego tłumacza i napisać kod w formacie akceptowanym przez tego tłumacza.
feersum
2

GNU sed do C, 46 bajtów

sed -r 's/^([0-9]+)$/f(int x){return x+\1;}/'
user2064000
źródło
2

Ceylon do Tiny lisp , 76

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

Daje to (po odczytaniu wiersza wejściowego) dane wyjściowe typu (q((x)(s 5(s 0 x)))), który ocenia w Tiny Lisp do ((x) (s 5 (s 0 x))), funkcję, która pobiera argument x, odejmuje go od 0 i odejmuje wynik od 5. (Tak, tak dodaje się w Tiny Lisp , wbudowana jest tylko funkcja odejmowania. Oczywiście najpierw można zdefiniować funkcję dodawania, ale byłoby to dłuższe.)

Możesz użyć tego w ten sposób jako funkcji anonimowej:

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

(To będzie oceniać do 12.)

Lub możesz nadać mu nazwę:

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

Korekty i wskazówki do gry w golfa od DLosc, autora Tiny Lisp.

Paŭlo Ebermann
źródło
2

JavaScript (ES6)> PHP / JavaScript, 38 48 47 bajtów

Ten kod jest anonimową funkcją, która tworzy WAŻNĄ funkcję PHP i JavaScript o nazwie anonymous.

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

W chwili pisania tego kodu tylko Firefox zaimplementował natywnie ES6 (bez flag i tym podobnych).

Ten kod używa prompt()funkcji do żądania danych wejściowych i wyjściowych. Firefox obsługuje kopiowanie danych wyjściowych prompt(), dzięki czemu jest to legalna metoda wyjściowa dla Javascript.


Uwagi:

  • Na ;końcu jest wymagana dla PHP
  • Spacja return $xjest wymagana przez Javascript
    • Zignorowanie tego powie, że return$xjest niezdefiniowane
  • Nazwa funkcji jest automatyczna: nie mam wyboru
  • Wybór tylko PHP lub tylko Javascript zmniejszy kod tylko o 1 bajt i zmniejszy współczynnik zabawy o połowę
  • Może współpracować z innymi językami

Stara odpowiedź (48 bajtów):

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

Stara nieprawidłowa odpowiedź:

y=>''+Function('$x',`return $x+${y};`)
Ismael Miguel
źródło
@ LegionMammal978 Gotowe. Naprawione.
Ismael Miguel,