Escreva um programa que grave uma função, mas em um idioma diferente!


30

Escreva o programa mais curto que recebe uma entrada (n) de STDIN (ou equivalente) e gera uma função de incremento simples com um argumento (x) que retorna x + n, mas a função deve estar em um idioma diferente. Bem simples!

Isso é código-golfe, aplicam-se regras normais, o menor programa vence.

Exemplo:> <> para Python (Ungolfed)

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

Entrada:

3

Saída:

def i(x):
    return x+3

EDIT: Funções anônimas e expressões lambda são permitidas!


Qual o tamanho da entrada? Até onde eu sei, seu exemplo funciona apenas com números de um dígito para a metade dele.
— Sp3000 9/11/2015

Em teoria, o deveria ser capaz de usar qualquer entrada (razoável), mas as respostas que usam apenas uma entrada que poderia manter 1 dígito são totalmente aceitáveis, considerei refazer o exemplo para corrigir isso antes de postar, mas achei que não seria mais fácil. .
— Blake Lockley #

4
Não vejo qualquer definição para function BUTque devemos para escrever .. -_-
— Optimizer

1
Quando uma função retorna outra função, é chamada de fechamento . Eu não sei se isso se aplica entre linguagens, embora ...
— ETHproductions

@ETHproductions Acho que o objetivo não é retornar um objeto de função, mas o código fonte de uma função nesse outro idioma.
— Paŭlo Ebermann 9/11

Respostas:


23

GS2 → K, 2 bytes

•+

Isso imprime uma função tácita e monádica. O código fonte usa a codificação CP437 . Experimente online!

Execução de teste

$ 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

Como funciona

GS2

  • O GS2 lê automaticamente de STDIN e empurra a entrada na pilha.

  • • indica que o próximo byte é uma literal de string singleton.

  • Antes de sair, o GS2 imprime todos os itens da pilha.

K

Currying à esquerda do argumento é automático em K.

Aqui, n+transforma a função diádica +em uma função monádica, definindo o argumento esquerdo para n.


1
Qual codificação você está usando?
— Conor O'Brien

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ "O código fonte utiliza a codificação CP437 ."
— ETHproductions

16

ShapeScript → J, 4 bytes

"&+"

Isso imprime um verbo tácito e monádico. Experimente online: ShapeScript , J

Execução de teste

$ 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

Como funciona

ShapeScript

  • O ShapeScript lê automaticamente do STDIN e empurra a entrada na pilha.

  • "&+" coloca essa string na pilha.

  • Antes de sair, o ShapeScript imprime todos os itens da pilha.

J

& executa currying de argumento.

Aqui, n&+transforma o verbo díádico +em um verbo monádico, definindo o argumento esquerdo para n.


Tenho certeza de que existe um idioma em que você não precisa de aspas.
— lirtosiast

Há uma boa chance de você estar certo, mas não consigo me lembrar de uma com entrada e saída implícitas.
— Dennis

13

GolfScript → CJam, 4 bytes

{+}+

Isso imprime um bloco de código (função anônima). Experimente online: GolfScript , CJam

Execução de teste

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

Como funciona

GolfScript

  • O GolfScript lê automaticamente do STDIN e empurra a entrada na pilha.

  • {+} empurra esse bloco na pilha.

  • + executa concatenação, que felizmente concatena uma string e um bloco.

  • Antes de sair, o GolfScript imprime todos os itens da pilha.

CJam

{n +}é um bloco de código que, quando executado, primeiro empurra na pilha e, em seguida +, é executado , que exibe dois números inteiros da pilha e empurra sua soma.


2
Eu estava indo apenas para postar isso!
— Loovjo 9/11

Uau, isso é impressionante. {n +}empurra 42e depois executa +. (Provavelmente deve ser {42 +}ou "empurra n")
— Justin

@ Justin De fato. Obrigado!
— 1111 Dennis

12

BrainF *** para JavaScript ES6, 57 bytes

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

(Supõe que a entrada seja composta de caracteres numéricos)

Diga 1337é a sua entrada. Em seguida, isso seria compilado para:

x=>x+1337


10

O a K, 5 bytes

eu ++ o

Obrigado a @ kirbyfan64sos

Outra versão usando os recursos adicionados após a criação do desafio.

i '+
  • Obtém entrada, empurra para empilhar
  • Empurra '+' como uma string
  • Conteúdo da pilha de saídas

K tem currying automático, então você pode fazer isso i'++p.
— kirbyfan64sos

A distância entre K e O é 4. Você precisa encurtar um byte.
— mbomb007

@ mbomb007 wat. O código tem 5 bytes
— fase

2
As cartas. No alfabeto Pegue?
— mbomb007

1
@ mbomb007 que era muito complicado para mim
— fase

9

R para Julia, 19 bytes

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

Isso lê um número inteiro de STDIN usando scan()e grava uma função Julia sem nome em STDOUT usando cat(). A função Julia é simples x->x+n, de onde nvem o programa R.


9

Malbolge para JavaScript ES6, 71 bytes

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

É sempre divertido gerar código Malbolge.


8

Minecraft 1.8.7 a K, 7 6 + 33 + 27 + 62 = 129 128 bytes

Isso está usando esta versão da contagem de bytes .

o sistema

Blocos de comando (da esquerda para a direita):

objetivos do placar adicionar K manequim
jogadores do placar definem JK <input>
tellraw @a {score: {name: "J", objetivo: "K"}, extra: [{text: "+"}]}

Provavelmente isso poderia ser um pouco mais complicado, mas é bastante simples: gere uma variável Jcom o objetivo Ke defina sua pontuação para esse objetivo como entrada (não há STDIN - imaginei que isso era próximo o suficiente). Depois de um tick, produza a pontuação da variável Jpara o objetivo, Kseguida de a +. Mole-mole.


Observe que o .dat bytecounting não é aplicável a este sistema, pois a versão do Minecraft listada não suporta arquivos de estrutura.
— Addison Crump

Para o segundo, você não pode remover o extra, colocar a pontuação JSON em uma matriz e colocar uma sequência depois? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
— Programas Redwolf

@RedwolfPrograms Não no momento da submissão, há quatro anos.
— Addison Crump

8

Sério para Python, 15 bytes

,"lambda n:n+"+

Espera que a entrada esteja na forma de sequência, ou seja, "3"

Explicação:

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

Experimente on-line (você precisará inserir manualmente a entrada, porque os links permanentes não gostam de aspas)


Ei, alguém realmente passou por sério! : D
— ETHproductions

2
A sério? Você terminou Seriamente antes do Simplex? D:
— Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Ainda não está totalmente concluído (consulte o rastreador de problemas), mas funciona bem o suficiente para ser usado em alguns campos de golfe.
— Mego

7

Mathematica para C #, 22 bytes

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

Gera um C # Func<int, int>do formulário

x=>x+n

1
A saída também é Javascript válido (ES6 / 7).
— Ismael Miguel


6

Pitão para APL, 7 5 bytes

+z"--

O código Pyth simplesmente concatena a entrada ( z) com a string "--". Isso cria um trem monádico sem nome no APL com o formulário n--, de onde nvem Pyth. Ao chamá-lo no APL, (n--)xalguns argumentos são xcomputados n--x = n-(-x) = n+x.

Experimente: Pyth , APL

Economizou 2 bytes graças a Dennis!


5

> <> para Python, 25 + 3 = 28 bytes

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

Recebe entrada através da -vbandeira, por exemplo

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

e gera um lambda Python, por exemplo lambda x:x+27.

Para um bônus, aqui está uma versão de entrada STDIN para 30 bytes:

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

5

Mouse para Ruby, 19 bytes

?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

Isso cria uma função Ruby sem nome do formulário de ->x{x+n}onde nvem o Mouse.


Bom trabalho, eu gosto deste post.
— fase


5

Brainfuck para Java, 273

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

Produz um método como int d(int i){return i+42;}(que não se parece com um método Java, mas ... Java!)


1
Você sabe, porque Java.
— Conor O'Brien

1
O que significa, não se parece com um método Java? De que outra forma esse tipo de método deve parecer?
— Paŭlo Ebermann 11/11/2015

@ PaŭloEbermannpublic static int method(int argument){return argument+42;}
— fase

1
Hmm OK. (Embora se você estiver programando apenas em public static, você realmente não está executando Java. argumentTambém seria melhor nomeado summand;-). )
— Pa Elo Ebermann 11/11

@ PaŭloEbermann eu estava apenas modelandopublic static void main(String[] arguments){}
— fase

4

PHP → JavaScript (ES6), 20 24 bytes

Ler do STDIN é sempre caro em PHP. Parece um pouco estranho:

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

Ele imprime x=>x+e aguarda a entrada do usuário para completar a sequência, termina com a função JavaScript anônima completa, por exemplo x=>x+2.

Primeira versão (24 bytes )

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

Por que não apenas x=>x+<?=$x;? É PHP4.1 válido e você pode passar os valores por POST, GET, SESSION, COOKIE, ... e funcionará perfeitamente. Ou no PHP5.3 com register_globals=on(no seu php.iniarquivo).
— Ismael Miguel

@IsmaelMiguel Os requisitos do desafio dizem que é necessário um número STDIN. Toda vez que eu ignorei que era criticado. Então, levo os requisitos a sério agora. :)
— insertusernamehere

Bem, acho que isso GETjá passou STDIN. Eu posso testá-lo em um tempo.
— Ismael Miguel

1
serverfault.com/questions/187025/… <- Evidências sobre minha reivindicação. Basta usar o código que eu forneci, tapa este link e ninguém pode reclamar
— Ismael Miguel

1
Ho, entendido! Isso é inteligente, de fato!
— Blackhole


4

Python 2 a CJam, 18 20 bytes

Obrigado a LegionMammal978 por corrigir a funcionalidade.

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

O Python cria um formato básico de string. %fé o código para um float e, como não perderia bytes por manipular floats, fui adiante e o fiz.

O CJam é praticamente o mesmo que a resposta Golfscript-> CJam. Parece algo como isto:

{7.4+}

ou:

{23+}

É um bloco que retira o valor máximo da pilha, pressiona o número especial e os adiciona.


@ LegionMammal978 No final da pergunta, diz que funções anônimas e expressões lambda são permitidas. Ainda assim, editarei minha resposta com um programa completo alternativo.
— bkul

1
O OP significa que a saída pode ser uma função.
— precisa

3

Shell POSIX para Haskell, 19 bytes

read n;echo "($n+)"

Sendo permitidas funções anônimas, o Haskell é uma boa opção de saída nas seções do operador.


3

Retina para Pip , 4 bytes

Usa um arquivo para cada uma dessas linhas + 1 byte de penalidade; ou, coloque as duas linhas em um único arquivo e use o -ssinalizador.

$
+_

Corresponde ao final da entrada com $e coloca +_lá. Isso resulta em algo do formulário 3+_, que é uma função anônima no Pip.


3

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

e talvez outros

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

3

Vitsy para K, 5 bytes

\ o / K estará sendo usado muito em breve, se puder fazer isso.

N '+' Z

ou talvez...

N '+' O

Se a entrada for tomada como uma sequência (apenas para a entrada 0-9) ...

i '+' Z

Tudo isso, para a entrada 2, produzirá:

2+

3

Lisp pequeno para Ceilão , 68 61

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

O Lisp minúsculo não possui entrada e saída reais - apenas possui avaliação de expressão. Este código acima cria uma função e a vincula u. Você pode chamar ucom o argumento ncomo este:, (u 7)que avaliará esse valor Tiny Lisp:

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

Esta é uma expressão válida do Ceilão, para uma função anônima que adiciona 7 a um número inteiro arbitrário.

Obrigado ao DLosc por uma melhoria de 7 bytes.


Bom trabalho trabalhando com recursos de saída muito limitados!
— DLosc

3

JavaScript para Lambda Calculus , 39 bytes

(Isso usa o documento vinculado como base.)

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

Digamos que a entrada seja 5. Então isso se torna:

"λa(5(add a))"

1
Onde está um intérprete para o Lambda Calculus?
— feersum

@feersum Verifique o link. Não tenho certeza se existe um intérprete real, mas disseram-me que consegui enviar nesse idioma.
— Conor O'Brien

1
Como assim "lhe disseram"? As respostas que não são executadas em nenhuma implementação de idioma são inválidas.
— feersum


1
Como o cálculo lambda é bastante conhecido, suponho que deve haver um intérprete válido em algum lugar. O ponto é que você precisa identificar esse intérprete e escrever o código no formato aceito por esse intérprete.
— feersum


2

GNU sed para C, 46 bytes

sed -r 's/^([0-9]+)$/f(int x){return x+\1;}/'

2

Ceilão em Lisp minúsculo , 76

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

Isso produz (depois de ler uma linha de entrada) uma saída como (q((x)(s 5(s 0 x)))), que avalia em Tiny Lisp para ((x) (s 5 (s 0 x))), uma função que pega um argumento x, subtrai de 0 e subtrai o resultado de 5. (Sim, é assim que se adiciona Tiny Lisp , existe apenas uma função de subtração integrada. Obviamente, é possível definir uma função de adição primeiro, mas isso seria mais longo.)

Você pode usá-lo assim como uma função anônima:

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

(Isso será avaliado como 12.)

Ou você pode dar um nome a ele:

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

Correções e dicas de golfe de DLosc, o autor de Tiny Lisp.


2

Javascript (ES6)> PHP / Javascript, 38. 48. 47 bytes

Este código é uma função anônima que cria uma função VALID PHP e Javascript chamada anonymous.

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

No momento da criação deste código, apenas o Firefox implementou o ES6 nativamente (sem sinalizadores e afins).

Este código usa a prompt()função para solicitar entrada e saída. O Firefox suporta copiar a saída de prompt(), tornando este um método legítimo de saída para Javascript.


Considerações:

  • O ;no final é necessário para PHP
  • O espaço return $xé exigido por Javascript
    • Ignorá-lo dirá que return$xé indefinido
  • O nome da função é automático: não tenho escolha sobre ele
  • Escolher apenas PHP ou Javascript reduzirá apenas o código em 1 byte e reduzirá o fator divertido pela metade
  • Pode funcionar com outros idiomas

Resposta antiga (48 bytes):

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

Resposta antiga inválida:

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

@ LegionMammal978 Feito. Corrigido.
— Ismael Miguel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.