関数を別の言語で作成するプログラムを作成してください!


30

STDIN(または同等のもの)から1つの入力(n)を受け取り、x + nを返す1つの引数(x)を持つ単純なインクリメント関数を出力する最短のプログラムを作成しますが、関数は異なる言語である必要があります。ものすごく単純!

これはコードゴルフであり、通常のルールが適用され、最短のプログラムが勝ちます。

例:> <> to Python(Ungolfed)

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

入力:

3

出力:

def i(x):
    return x+3

編集:匿名関数とラムダ式が許可されています!


入力はどれくらい大きくできますか?私の知る限り、あなたの例は、その半分以上の1桁の数字でのみ機能します。
Sp3000

理論的には(合理的な)入力を使用できるはずですが、1桁を維持できる入力のみを使用する回答は完全に受け入れられます。投稿する前にこれを修正するために例を修正することを検討しましたが、簡単にするためにそれを残しました。
ブレイクロックリー

4
私がfunction BUT書くことになっている定義はありません。
オプティマイザー

1
関数が別の関数を返すとき、それはClosureと呼ばます。ただし、これがクロスランゲージに適用されるかどうかはわかりません
...-ETHproductions

@ETHproductions目標は関数オブジェクトを返すことではなく、他の言語の関数のソースコードを返すことだと思います。
パエロエベルマン

回答:


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

左引数のカリー化はKで自動です。

ここで、左引数をに設定することによりn+、ダイアディック関数+をモナド関数に変換しますn


1
どのエンコーディングを使用していますか?
コナーオブライエン

2
@CᴏɴᴏʀO'Bʀɪᴇɴ「ソースコードはCP437エンコーディングを使用してます。」
-ETHproductions

16

ShapeScript →J、4バイト

"&+"

これは暗黙の単項動詞を表示します。オンラインで試す:ShapeScriptJ

試運転

$ 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


引用符を必要としない言語があると確信しています。
リルトシアスト

あなたが正しい可能性は十分にありますが、暗黙的な入力と暗黙的な出力を持つものは思い出せません。
デニス

13

GolfScript→CJam、4バイト

{+}+

これにより、コードブロック(匿名関数)が出力されます。オンラインで試す:GolfScriptCJam

試運転

$ 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つの整数をポップし、それらの合計をプッシュするコードブロックです。


2
これを投稿するだけでした!
Loovjo

すごいですね。{n +}プッシュし42、実行し+ます。(おそらく{42 +}「プッシュn」する必要があります)
ジャスティン

@ジャスティン確かに。ありがとう!
デニス

12

BrainF ***からJavaScript ES6、57バイト

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

(入力が数字で構成されていると仮定します)

セイは、1337あなたの入力です。次に、これは次のようにコンパイルされます。

x=>x+1337


10

OからK、5バイト

i '++ o

おかげで@ kirbyfan64sos

チャレンジの作成後に追加された機能を使用する別のバージョン。

i '+
  • 入力を取得し、スタックにプッシュします
  • 「+」を文字列としてプッシュします
  • スタックの内容を出力します

Kには自動カレー機能がありますi'++p
kirbyfan64sos

KとOの間の距離は4です。1バイト短くする必要があります。
mbomb007

@ mbomb007ワット。コードの長さは5バイトです
フェーズ

2
手紙。アルファベットで。それを得る?
mbomb007

1
@ mbomb007それは私には複雑すぎました
フェーズ

9

RからJulia、19バイト

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

これはを使用scan()してSTDINから整数を読み取り、を使用して無名のジュリア関数をSTDOUTに書き込みますcat()。ジュリア機能は単純であるx->x+n場合には、nRプログラムから来ています。



8

Kにマインクラフト1.8.7、7 6 + 33 + 27 + 62 = 129 128バイト

これは、このバージョンのバイトカウントを使用しています

システム

コマンドブロック(左から右へ):

スコアボードの目標はK個のダミーを追加します
スコアボードプレーヤーセットJK <input>
tellraw @a {score:{name: "J"、objective: "K"}、extra:[{text: "+"}]}

これはおそらくもう少しゴルフすることができますが、それはかなり簡単です:J目的Kを持つ変数を生成し、その目的のスコアを入力に設定します(STDINはありません-これは十分近いと思いました)。次いで、ダニ後、出力変数のスコアをJ客観ためK続きます+。簡単です。


リストされているMinecraftのバージョンは構造ファイルをサポートしていないため、.datバイトカウントはこのシステムに適用されないことに注意してください。
アディソンクランプ

2番目の場合、を削除してextra、スコアJSONを配列に配置し、その後に文字列を配置できませんでしたか?tellraw @a [{score:{name:"J",objective:"K"}},"+"]
Redwolfプログラム

@RedwolfPrograms提出時ではなく、4年前。
アディソンクランプ

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
マジ?シンプレックスの前に真剣に終わったのですか?D:
コナーオブライエン

1
@CᴏɴᴏʀO'Bʀɪᴇɴまだ完全には完成していませんが(課題トラッカーを参照)、一部のゴルフで使用するには十分に機能します。
メゴ



6

PythからAPL、7 5バイト

+z"--

Pythコードは、入力(z)と文字列を単純に連結します"--"。これは、フォームとAPLで無名のモナド電車作成しn--nPythから来ています。APLで呼び出す場合、(n--)xいくつかの引数はをx計算しn--x = n-(-x) = n+xます。

試してください:PythAPL

デニスのおかげで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

ボーナスとして、30バイトのSTDIN入力バージョンを次に示します。

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

5

マウスからRuby、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

JavaにBrainfuck、273

+ [-----> +++++。+++++。++++++。[----> ++++。+ [-> ++++ .- [- > +++ -.----- [-> +++。+++++。++++++。[----> ++++ .- [---> ++ -。[-----> ++-。[-> +++ .---------.-------------。[---> + ---。+ .---.----.- [-> +++++ -.- [---> ++-。[-----> +++。、[。 、] + [---------> +++ .- [---> +++。

次のようなメソッドを出力しますint d(int i){return i+42;}(Javaメソッドのようには見えませんが、Java!)。


1
Javaのおかげです。
コナーオブライエン

1
つまり、Javaメソッドのように見えませんか?そのような方法は他にどのように見えるべきですか?
パエロエベルマン

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

1
うーん、いいよ。(でのみプログラミングしている場合でもpublic static、実際にはJavaを実行しているわけではありません。argument名前を付けた方がよいでしょうsummand;-)。)
パウロEbermann

@PaŭloEbermann私はちょうどモデリングでしたpublic static void main(String[] arguments){}
フェーズ

4

PHP→JavaScript(ES6)、20 24バイト

PHPでは、STDINからの読み取りは常に高価です。少し奇妙に見えます:

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

x=>x+文字列を完了するためのユーザー入力を出力して待機し、完全な匿名JavaScript関数(例:)で終了しますx=>x+2

最初のバージョン(24バイト

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

どうしてx=>x+<?=$x;?これは有効なPHP4.1であり、POST、GET、SESSION、COOKIEなどで値を渡すことができます。これで問題なく動作します。またはregister_globals=onphp.iniファイル上で)PHP5.3で。
イスマエルミゲル

@IsmaelMiguelチャレンジの要件は、から数をとると言いSTDINます。批判されることを無視するたびに。だから私は今、要件を真剣に受け止めています。:)
ここにユーザー名を挿入します

まあ、私はそれGETが渡されると思いますSTDIN。しばらくしてテストできます。
イスマエルミゲル

1
serverfault.com/questions/187025/…<-私の主張の証拠。ただ、私は提供されたコードを使用して、このリンクを平手打ちし、誰も文句を言うことはできません
イスマエル・ミゲル

1
ほ、わかった!それは実に賢いことです!
ブラックホール


4

Python 2からCJam、18 20バイト

機能を修正してくれたLegionMammal978に感謝します。

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

Pythonは基本的な文字列形式を実行します。 %fはフロートのコードであり、フロートを処理するためにバイトを失うことはないので、先に進んでそうしました。

CJamはGolfscript-> CJamの回答とほぼ同じです。次のようになります。

{7.4+}

または:

{23+}

スタックから一番上の値を取り出し、特別な番号をプッシュしてから追加するブロックです。


@ LegionMammal978質問の最後に、匿名関数とラムダ式が許可されていると書かれています。それでも、私は完全な代替プログラムで答えを編集します。
bkul

1
OPは、出力が関数であることを意味します。
LegionMammal978

3

HaskellへのPOSIXシェル、19バイト

read n;echo "($n+)"

匿名関数が許可されているため、Haskellは演算子セクションでの適切な出力選択です。


3

網膜からピップ、4バイト

これらの行ごとに1つのファイルを使用し、1ペナルティバイトを使用します。または、単一のファイルに両方の行を入れて-sフラグを使用します。

$
+_

入力の終わりと一致してそこに$置き+_ます。これ3+_は、Pipの匿名関数である形式の何かをもたらします。


3

Bash→C / C ++ / C#/ Java、33バイト

そして多分他

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

3

KにVitsy、5バイト

\ o / Kは、これを行うことができる場合、すぐに使用されます。

N '+' Z

または多分...

N '+' O

入力が文字列として取得される場合(0-9入力のみ)...

i '+' Z

入力2の場合、これらはすべて出力されます。

2+

3

Tiny LispからCeylon68 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を加算する匿名関数の有効なCeylon式です。

7バイト改善されたDLoscに感謝します。


非常に限られた出力機能を使用した素晴らしい仕事です!
DLosc

3

JavaScriptからLambda Calculus、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)))、引数を取り、x0からそれを減算し、5から結果を減算する関数です(そう、Tiny Lispで加算する方法です) 、減算関数のみが組み込まれています。もちろん、最初に加算関数を定義できますが、これは長くなります。)

このように匿名関数として使用できます:

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

(これは12に評価されます。)

または、名前を付けることができます:

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

Tiny Lispの著者であるDLoscの訂正とゴルフのヒント。


2

Javascript(ES6)> PHP / Javascript、 38 48 47バイト

このコードは、と呼ばれる有効な PHPおよびJavaScript関数を作成する匿名関数ですanonymous

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

このコードの作成時点では、ES6をネイティブに実装しているのはFirefoxのみです(フラグなどはありません)。

このコードは、prompt()関数を使用して入力を要求し、出力します。Firefoxは、の出力のコピーをサポートしておりprompt()、これをJavascriptの正当な出力方法にします。


考慮事項:

  • ;最後には、PHPのために必要とされます
  • return $xJavascriptに必要な スペース
    • それを無視すると、それreturn$xは未定義であると言うでしょう
  • 関数名は自動です:それ以上の選択肢はありません
  • PHPのみまたはJavascriptのみを選択すると、コードが1バイトだけ削減され、ファンファクターが半分に削減されます。
  • 他の言語で動作する場合があります

古い回答(48バイト):

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

古い無効な回答:

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

@ LegionMammal978完了。それを修正しました。
イスマエルミゲル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.