BUT fonksiyonunu farklı bir dilde yazan bir program yaz!


30

Bir girişi (n) STDIN'den (veya eşdeğeri) alan en kısa programı yazın ve x + n döndüren tek bir argümanla (x) basit bir artış işlevi çıktı ancak işlev farklı bir dilde olmalıdır. Oldukça basit!

Bu kod golf, normal kurallar uygulanır, en kısa program kazanır.

Örnek:> <> to Python (Ungolfed)

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

Giriş:

3

Çıktı:

def i(x):
    return x+3

EDIT: Anonim işlevler ve lambda ifadeleri izin verilir!


Girdi ne kadar büyük olabilir? Söyleyebileceğim kadarıyla, örneğin>>>> yarısı için yalnızca tek haneli sayılarla çalışır.
— Sp3000

Teoride herhangi (makul) bir girdiyi kullanabilmeli, ancak sadece 1 rakamı tutabilecek bir girdi kullanan cevaplar tamamen kabul edilebilir, bunu göndermeden önce düzeltmek için örneği yeniden çalışmayı düşündüm ama basitlik hissi için hastadan ayrıldığını düşündüm. .
— Blake Lockley

4
Bunun için bir tanım göremiyoruz function BUT.. -_-
— Optimizer

1
Bir fonksiyon başka bir fonksiyona döndüğünde, buna kapatma denir . Bununla birlikte, bunun diller arası olup olmadığını bilmiyorum ...
— ETHproductions 9:15

@ETHproductions Amaç, bir işlev nesnesini değil, diğer bir dildeki bir işlevin kaynak kodunu döndürmektir.
— Paŭlo Ebermann 9:15

Yanıtlar:


23

GS2 → K, 2 bayt

•+

Bu, sade, monadik bir işlev basar. Kaynak kod CP437 kodlamasını kullanır . Çevrimiçi deneyin!

Test sürüşü

$ 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

Nasıl çalışır

GS2

  • GS2 otomatik olarak STDIN'den okur ve girişi yığına iter.

  • • bir sonraki baytın bir singleton string değişmezi olduğunu gösterir.

  • Çıkmadan önce GS2 tüm yığın öğelerini yazdırır.

K

Sol argüman kurutma işlemi K'da otomatik

Burada, n+ikili +argümanını sol argümanını ayarlayarak monadik bir işleve dönüştürür n.


1
Hangi kodlamayı kullanıyorsunuz?
— Conor O'Brien,

2
@ CᴏɴᴏʀO'Bʀɪᴇɴ "Kaynak kodu CP437 kodlamasını kullanır ."
— ETHProductions

16

ShapeScript → J, 4 bayt

"&+"

Bu, sade, monadik bir fiili basar. Çevrimiçi deneyin: ShapeScript , J

Test sürüşü

$ 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

Nasıl çalışır

ShapeScript

  • ShapeScript otomatik olarak STDIN'den okur ve girişi yığına iter.

  • "&+" bu dizgiyi yığına iter.

  • Çıkmadan önce, ShapeScript tüm yığın öğelerini yazdırır.

J

& Argümanları köretmeyi gerçekleştirir.

Burada dyadik fiili, sol argümanını ayarlayarak monadik bir fiile n&+çevirir .+n


Yakın teklife ihtiyacınız olmayan bir dil olduğundan eminim.
— lirtosiast

Haklı olmanızın iyi bir şansı var ama örtülü girdi ve örtülü çıktı olan birini hatırlayamıyorum.
— Dennis

13

GolfScript → CJam, 4 bayt

{+}+

Bu bir kod bloğu yazdırır (anonim işlev). Çevrimiçi deneyin: GolfScript , CJam

Test sürüşü

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

Nasıl çalışır

GolfScript

  • GolfScript otomatik olarak STDIN'den okur ve girişi yığına iter.

  • {+} bu bloğu yığına iter.

  • + mutlu bir şekilde bir dize ve bir blok birleştiren birleştirme gerçekleştirir.

  • Çıkmadan önce GolfScript tüm yığın öğelerini yazdırır.

CJam

{n +}yürütüldüğü zaman, önce nyığına iterek , sonra yığından +iki tam sayı çıkartan ve toplamlarını iten bir kod bloğudur .


2
Sadece bunu gönderecektim!
— Loovjo

Vay bu etkileyici. {n +}iter 42, sonra yürütür +. (Muhtemelen olmalı {42 +}veya "iter n" olmalıdır)
— Justin

@Justin Indeed. Teşekkürler!
— Dennis

12

BrainF *** - JavaScript ES6, 57 bayt

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

(Girişin sayısal karakterlerden oluştuğunu varsayar)

Diyelim ki 1337girişiniz. Sonra, bu derlemek için olurdu:

x=>x+1337


10

O ila K, 5 bayt

i ++ o

@ Kirbyfan64sos teşekkürler

Mücadeleden sonra eklenen özellikleri kullanan başka bir sürüm oluşturuldu.

i +
  • Girdiyi alır, istiflemeye zorlar
  • Bir dizge olarak '+' işaretini basar
  • Yığın içeriğini çıkarır

K'nin otomatik olarak kıvrılması var, sadece yapabilirsiniz i'++p.
— kirbyfan64sos 9:15

K ve O arasındaki mesafe 4'tür. Bir bayt kısaltmanız gerekir.
— mbomb007

@ mbomb007 wat. Kod uzunluğunda 5 bayt
— faz

2
Harfler. Alfabede. Anla?
— mbomb007

1
@ mbomb007 bu benim için çok karmaşıktı
— faz

9

Julia'ya R, 19 bayt

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

Bu, kullanarak STDIN'dan bir tamsayı okur scan()ve adlandırılmamış bir Julia işlevini kullanarak STDOUT'a yazar cat(). Julia fonksiyonu basitçe x->x+n, nR programından geliyor.


9

Malbolge JavaScript ES6 için, 71 bayt

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

Malbolge kodunu oluşturmak her zaman eğlencelidir.


8

Minecraft 1.8.7 ila K, 7 6 + 33 + 27 + 62 = 129 128 Bayt

Bu bayt sayma sürümünü kullanıyor .

sistem

Komut blokları (soldan sağa doğru):

puan tahtası hedefleri K kukla ekleyin
çetele oyuncuları JK ayarladı <giriş>
tellraw @a {score: {name: "J", amaç: "K"}, ek: [{text: "+"}]}

Bu muhtemelen biraz daha golf oynayabilir, ancak oldukça basit: JAmaç ile bir değişken oluşturun Kve bu amaç için puanını girdi olarak ayarlayın (STDIN yok - bunun yeterince yakın olduğunu düşündüm). Sonra, bir onay işaretinden sonra, değişkenin puanını, ardından Jgelen hedef için çıktı alın . Basit.K+


.Dat bytecounting olduğunu Not değil yapı dosyalarını desteklemez listelenmiş Minecraft versiyonu olarak, bu sistem için geçerli.
— Addison Crump

İkincisi için extra, the , JSON skorunu bir diziye yerleştirip dizgiyi yerleştiremez miydiniz ? tellraw @a [{score:{name:"J",objective:"K"}},"+"]
— Redwolf Programları

@RedwolfProgramlar Dört yıl önce, başvuru anında değil.
— Addison Crump,

8

Ciddiyetle Python, 15 bayt

,"lambda n:n+"+

Girdiyi dize biçiminde, yani "3"

Açıklama:

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

Çevrimiçi deneyin (girişin elle girmesi gerekir, çünkü permalink'ler tırnaklardan hoşlanmaz)


Hey, biri gerçekten Cidden ile yaşadı! : D
— ETHProductions

2
Ciddi anlamda? Simplex'ten önce cidden mi bitirdin? D:
— Conor O'Brien

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Henüz tamamlanmadı (sorun izleyiciye bakın), ancak bazı golf sahalarında kullanmak için yeterince iyi çalışıyor.
— Mego



6

APL'ye Pyth, 7 5 bayt

+z"--

Pyth kodu, input ( z) komutunu dizeyle birleştirir "--". Bu form ile APL içinde isimsiz bir monadic treni yaratır n--, nPyth geliyor. APL'de çağırırken, (n--)xbazı argümanlar için xhesaplar n--x = n-(-x) = n+x.

Deneyin: Pyth , APL

Dennis sayesinde 2 bayt kaydedildi!


5

> <> to Python, 25 + 3 = 28 bayt

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

-vBayrakla giriş yapar , örneğin

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

ve bir Python lambda çıkarır, örn lambda x:x+27.

Bonus için 30 baytlık bir STDIN giriş sürümü:

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

5

Fare Ruby, 19 bayt

?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

Bu formun ismi açıklanmayan Yakut işlevi oluşturur Fare geliyor.->x{x+n}n


Güzel iş, bu yazıyı beğendim.
— faz


5

Java'ya brainfuck, 273

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

Böyle bir yöntemin Çıkışlar int d(int i){return i+42;}(gelmez bak ... Java Java yöntemine gibi ama!)


1
Bilirsin, çünkü Java.
— Conor O'Brien,

1
Ne demek, bir Java yöntemine benzemiyor mu? Bu tür bir yöntem başka nasıl görünmelidir?
— Paŭlo Ebermann 11:15

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

1
Hmm tamam. (Sadece programlama public staticyapıyor olsanız da, gerçekten Java yapmıyorsunuz. argumentAyrıca ismini summand;-). )
— Paŭlo Ebermann 11:15

@ PaŭloEbermann Sadece modelleme oldupublic static void main(String[] arguments){}
— faz

4

PHP → JavaScript (ES6), 20 24 bayt

STDIN'den okumak PHP'de her zaman pahalıdır. Biraz garip görünüyor:

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

x=>x+Dizeyi tamamlamak için kullanıcı girişini yazdırır ve bekler, isimsiz JavaScript işlevinin tamamı ile sona erer, örn x=>x+2.

İlk sürüm (24 bayt )

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

Neden sadece değil x=>x+<?=$x;? Bu PHP4.1 için geçerlidir ve değerleri POST, GET, SESSION, COOKIE, ... üzerinden geçirebilirsiniz ve kusursuz çalışacaktır. Veya PHP5.3'te register_globals=on( php.inidosyanızda).
— Ismael Miguel

@IsmaelMiguel Mücadelenin gerekleri bir sayı aldığını söylüyor STDIN. Her zaman eleştirildiği görmezden geldim. Bu yüzden şimdi gereksinimleri ciddiye alıyorum. :)
— insertusernamehere

Bence bunun GETgeçildiğini düşünüyorum STDIN. Bir süre sonra test edebilirim.
— Ismael Miguel

1
serverfault.com/questions/187025/… <- Talebime dair kanıt. Sadece verdiğim kodu kullanın, bu bağlantıyı tıklayın ve kimse şikayet edemez
— Ismael Miguel

1
Ho, anladım! Bu gerçekten zekice!
— Karadelik


4

Python 2 ila CJam, 18 20 bayt

İşlevselliğin düzeltilmesi için LegionMammal978'e teşekkürler.

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

Python, basit bir dize formatı yapar. %ffloat kodudur ve float işlemlerinde bayt kaybetmediğim için devam ettim ve yaptım.

CJam, Golfscript-> CJam'ın cevabıyla aynı. Bu gibi bir şey görünüyor:

{7.4+}

veya:

{23+}

Bu, yığındaki en yüksek değeri alan, özel sayıyı iten, sonra da ekleyen bir bloktur.


@ LegionMammal978 Sorunun sonunda adsız işlevlere ve lambda ifadelerine izin verildiğini söylüyor. Yine de cevabımı alternatif bir programla düzenleyeceğim.
— bkul

1
OP, çıkışın bir fonksiyon olabileceği anlamına gelir.
— LegionMammal978

3

Haskell'e POSIX kabuğu, 19 bayt

read n;echo "($n+)"

Anonim işlevlere izin veriliyor, Haskell operatör bölümleri ile iyi bir çıktı seçimi.


3

Retina için Pip , 4 bayt

Bu satırların her biri için bir dosya kullanır + 1 penaltı bayt; veya her iki satırı da tek bir dosyaya yerleştirin ve -sbayrağı kullanın .

$
+_

Girişin bitişini ile $eşleştirir ve koyar +_. Bu 3+_, Pip'deki isimsiz bir fonksiyon olan formda bir şeyle sonuçlanır .


3

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

ve belki başkaları

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

3

Vitsy to K, 5 Bayt

Bunu yapabiliyorsa \ o / K çok yakında kullanılacaktır.

N '+', Z

ya da belki...

N '+' O

Giriş bir dizge olarak alınırsa (sadece 0-9 giriş için) ...

i '+', Z

Bunların tümü, giriş 2 için, çıktısı:

2+

3

Minik Lisp a Seylan , 68 61

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

Tiny Lisp'in gerçek girdi ve çıktısı yok - sadece ifade değerlendirmesi var. Yukarıdaki kod bir fonksiyon yaratır ve onu bağlar u. Daha sonra şöyle bir uargümanla arayabilirsiniz n: (u 7)ki bu, Tiny Lisp değerini şöyle değerlendirecek:

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

Bu, isteğe bağlı bir tam sayıya 7 ekleyen adsız bir işlev için geçerli bir Ceylon ifadesidir.

7 baytlık bir gelişme için DLosc sayesinde.


Çok sınırlı bir çıktı kapasitesiyle çalışmak güzel iş!
— DLosc

3

Lambda Matematik , 39 bayt için JavaScript

(Bu bağlantılı belgeyi temel olarak kullanır.)

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

Diyelim ki giriş 5. Sonra bu olur:

"λa(5(add a))"

1
Lambda Matematik için tercüman nerede?
— feersum

@feersum Bağlantıyı kontrol et. Gerçek bir tercüman olup olmadığından emin değilim, ancak bu dilde gönderebileceğim söylendi.
— Conor O'Brien,

1
"Sana söylenen" derken ne demek istiyorsun? Herhangi bir dil uygulamasında çalışmayan cevaplar geçersiz.
— feersum 10:15


1
Lambda matematiği oldukça iyi biliniyor, bir yerlerde geçerli bir tercüman olması gerektiğini düşünüyorum. Mesele şu ki, böyle bir tercümanı tanımlamanız ve kodu bu tercüman tarafından kabul edilen formatta yazmanız gerekir.
— feersum



2

Seylan için Minik lisp , 76

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

Bu gibi çıkış (giriş hattı okuduktan sonra) üretir (q((x)(s 5(s 0 x))))olduğu küçük Lisp'te değerlendirir, ((x) (s 5 (s 0 x)))bir argüman alan bir fonksiyon x0 ila çıkarır bunu, ve 5 sonucunu çıkarır bir küçük Lisp'te ekler ne Evet, bu ( , yalnızca yerleşik bir çıkarma işlevi vardır. Tabii ki, önce bir ekleme işlevi tanımlanabilir, ancak bu daha uzun olur.)

Bunu anonim bir işlev olarak kullanabilirsiniz:

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

(Bu 12'ye göre değerlendirilecektir.)

Ya da bir isim verebilirsin:

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

Tiny Lisp’in yazarı olan DLosc’tan yapılan Düzeltmeler ve Golf İpuçları.


2

Javascript (ES6)> PHP / Javascript, 38 48 47 bayt

Bu kod adı verilen bir VALID PHP ve Javascript fonksiyonu yaratan isimsiz bir fonksiyondur anonymous.

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

Bu kodun yazılmasından itibaren, yalnızca Firefox ES6 yerelini (bayraklar ve benzeri şeyler olmadan) uygulamıştır.

Bu kod prompt()girdi istemek ve çıktı almak için işlevi kullanır . Firefox çıktısının kopyalanmasını destekler prompt(), bunu Javascript için yasal bir çıktı yöntemi yapar.


hususlar:

  • ;Sonunda PHP için gereklidir
  • Boşluk return $xJavascript tarafından isteniyor
    • Görmezden gelmek return$x, tanımsız olduğunu söyleyecektir.
  • İşlev adı otomatiktir: Üzerinde başka seçeneğim yok
  • Yalnızca PHP veya yalnızca Javascript seçmek, kodu yalnızca 1 baytta azaltır ve eğlence faktörünü yarıya indirir
  • Diğer dillerle çalışabilir

Eski cevap (48 bayt):

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

Eski geçersiz cevap:

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

@ LegionMammal978 Tamamlandı. Onu düzeltti.
— Ismael Miguel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.