Artı veya eksi poliglotlar!


14

Gönderiminiz bir sayı listesi (dilinizin desteklediği liste biçiminde veya birden fazla işlev / komut satırı parametresi kullanarak) veya olmayan bir karakterle ayrılmış bir sayı dizisi almalıdır 0123456789. Bir dilde, hepsini eklemeli ve toplamı çıkarmalıdır. Başka bir dilde, sırayla birbirlerinden çıkarılarak çıktı alınmalıdır . Misal:

12
5
7
2

Bir dilde çıktı almalı 26ve diğer dilde çıktı vermelidir -2. Girilen tüm sayıların, pozitif tam sayılardan küçük olacağını unutmayın 100. Asla 20verilen sayıdan daha fazla olmayacak, bu nedenle asla daha büyük 2000veya daha küçük çıktı vermeyeceksiniz -1899. Sorusu olan? Aşağıdaki yorum!


Çıktının sonundaki boşluklara izin veriliyor mu?
Business Cat

Aynı dilin iki farklı sürümüne izin veriliyor mu? Bkz. Python 2/3 Cevap. Üye HyperNeutrino
Mr.

@ Mr.Xcoder'a izin var.
programmer5000

2
@BetaDecay bunun bir sorun olduğunu düşünüyorsun, kod golfünü kontrol et!
programmer5000

1
@ programmer5000 Bunu [code-golf] -[polyglot]mu demek istediniz ?
Outgolfer Erik

Yanıtlar:


14

Jelly / 05AB1E , 3 bayt

00000000: c6 71 53                                         .qS

Bu gönderilen programın bir hexdump (xxd).

Çevrimiçi deneyin!

Jöle: Toplam

Jelly, Jelly kodu sayfasını kullanır , bu nedenle aşağıdaki karakterleri görür.

İqS

Çevrimiçi deneyin!

Nasıl çalışır

İqS  Main link. Argument: A (array)

İ    (ignored)
 q   Unrecognized token. This breaks the link; nothing to the left is executed.
  S  Take the sum of A.

05AB1E: Fark

05AB1E, Windows-1252 kullanır , bu nedenle aşağıdaki karakterleri görür.

ÆqS

Çevrimiçi deneyin!

Nasıl çalışır

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)

22

Python 2/3, 52 bayt

lambda l:sum(l[:1]+[x*int(1-(1/2)*4)for x in l[1:]])

int(1-(1/2)*4)1Python 2'de döner , çünkü 1/2önce 0ve sonra değerlendirir 0 * 4 = 0.

int(1-(1/2)*4)-1Python 3'e döner , çünkü 1/2önce 0.5ve sonra değerlendirir int(0.5 * 4) = int(2.0) = 2.


1
Diğer dillerle aynı dili kullanmaya izin veriliyor mu?
Bay Xcoder

3
@ Mr.Xcoder Neden olmasın, C, Java, Python ve Befunge'nin farklı sürümlerini kullanan başka diller gördüm. Yine de meta ile ilgili soru soracağım veya ilgili bir meta yayın bulabileceğimi göreceğim.
HyperNeutrino

Yine de sürüm değişiklikleri nedeniyle matematik hileleri iyi kullanmak.
Bay Xcoder

1
@ Mr.Xcoder Teşekkürler! Burada meta ile ilgili soruyu sordum ; Umarım yakında bir cevap almalıyım.
HyperNeutrino

1
@ programmer5000 Tamsayı bölümü.
HyperNeutrino

14

C ve C ++ (her ikisi de GCC'den), 81 75 73 bayt

int c;int f(int*a,int l){auto d=.5;c=*a++;for(;--l;a++)c+=*a-4*d**a;c=c;}

Diziye ve uzunluğa bir işaretçi alır.

Açıklama: hala @Steadybox 'ifadesini kullanıyor: p C olarak, auto d=.5otomatik depolama sınıfıyla (varsayılan olan) bir tamsayı değişkeni bildirir; bu değer daha sonra 0 olarak başlatılırken, C ++ 11'de başlatılan bir çift olduğunu bildirir. 0.5'e kadar.

C - artı dil: Çevrimiçi deneyin!

Eksi dil: Çevrimiçi deneyin!


11

05AB1E / Jelly , 5 bayt

00000000: 4f71 7f5f 2f                             Oq._/

Çevrimiçi deneyin! (05AB1E)
Çevrimiçi deneyin! (Jöle)

05AB1E şunları görür :

Oq? _ /
Açıklama:

Oq? _ / 1 örtük argüman.
İlk giriş öğesinin toplamını alın.
 q Çıkın.
  ?_/ İşlevsel değil.

Jöle görür :

Oq
_ /
Açıklama:

_ / Ana bağlantı. Bağımsız Değişkenler: z
_ / Z öğelerini sırayla çıkarın.

Oq Yardımcı bağlantısı. İşlevsel değil.

Bu Jelly kod sayfasını kullanıyor mu?
programmer5000

@ programmer5000 Bu, 05AB1E için CP-1252 ve Jelly için JELLY kullanan bir ham bytestream. Dolayısıyla 7f.
Erik the Outgolfer

Oh, bunun farkında değildim!
programmer5000

8

Aslında / Jelly , 4 bayt

00000000: e4 81 5f 2f                                      .._/

Bu gönderilen programın bir hexdump (xxd). Online ham formda test edilemez; TIO, CP437 kodlamasını desteklemez.

Aslında: Toplam

Aslında CP 437 kullanır , bu yüzden aşağıdaki karakterleri görür.

Σü_/

Çevrimiçi deneyin!

Nasıl çalışır

Σ     Take the sum on the input.
 ü    Print and empty the stack.
  _   Natural logarithm. Ignored since the stack is empty.
   /  Float division. Ignored since the stack is empty.

Jelly: Fark

Jelly, Jelly kodu sayfasını kullanır , bu nedenle aşağıdaki karakterleri görür.

ỵ¹_/

Çevrimiçi deneyin!

Nasıl çalışır

ỵ¹_/  Main link. Argument: A (array)

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).

Bunu okudum actually, Jelly.:)
programmer5000

Tanımlanmamış bir karakterin
şu şekilde davrandığı

1
@EriktheOutgolfer Aşağı yukarı. Dürüst olmak gerekirse, tanınmayan simgelerin ne yapacağından emin değilim.
Dennis

İkinci düşüncede, sadece seçtiğini düşünüyorum çünkü aslında sadece ümükemmel işleve atandı> _>
Outgolfer Erik

@ programmer5000 Bu jelly, actually.
Arjun


7

CJam / Jelly , 6 bayt

q~:-
S

CJam

q~    e# Read a list from input
:-    e# Reduce by subtraction
S     e# Push a space
      e# Implicit output

Çevrimiçi deneyin!

Jöle

(Jelly kodu sayfasını değil, UTF-8 kullanarak)

q~:-yardımcı bağlantıdır. Çağrılmadığından, gerçekten ne yaptığı önemli değil. Sbir dizinin toplamını hesaplar.

Çevrimiçi deneyin!


5
Reçel ve Jöle. İki benzer şeyi birlikte kullanmak mantıklıdır.
mbomb007

1
Bu geçersiz. Jelly'de yeni satır için 0x7f, yeni satır için 0x0a vardır. Jelly'de bu aslında aynıdır q~:-½S. Ne yazık ki, fix ( q~:-e#\x7fS) daha büyük. Çevrimiçi deneyin! (CJam) ve çevrimiçi deneyin! , her biri kendi kodlaması ile kendiniz test edin.
Outgolfer Erik

2
Alternatif olarak, Jelly için UTF-8 kodlamasını kullanabilirsiniz, bu da şu anda olduğu gibi geçerli olmasını sağlar, ancak lütfen belirtin.
Outgolfer Erik

5

JavaScript / Cubix, 36 bayt

//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

Dene!

JavaScript işlevi aşağıdaki snippet kullanılarak test edilebilir, Cubix programı burada test edilebilir .

Bu nasıl çalışıyor?

JavaScript

İlk satır, JavaScript'e bir satır açıklamasıdır, çünkü iki eğik çizgi ile başlar, bu nedenle JavaScript yalnızca a=>eval(a.join`-`)bir diziyi giriş olarak alır, aradaki eksi işaretleri ile birleştirir ve ardından kod olarak çalıştırır. dizideki tüm öğelerin çıkarılması.

let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))

Cubix

Cubix aşağıdaki küpü görüyor (Cubix'in tüm boşlukları yok saydığına dikkat edin):

      / / .
      ! v +
      u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
      . . .
      . . .
      . . .

Başlangıç

IP üçüncü hatta başlar ve doğuyu gösterir. 'I'Girişten bir sayı alan komuta vurur ve yığına iter. Ardından, '^'toplam döngüsüne yönlendirilir .

Toplam döngü

Toplam döngüsünün parçası olmayan tüm karakterleri kaldırdım ve onları no-ops ( '.') ile değiştirdim. IP başlangıçta doğuya bakacak şekilde ikinci hatta gelir.

      . . .
      ! v +
      u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

İlk olarak, '!'komut üst öğeyi kontrol eder. Eğer 0öyleyse (yani girişin sonuna ulaştık), 'v'IP'yi döngüden yansıtan bir sonraki talimat ( ) yürütülür. Henüz girdinin sonuna gelmediysek, ilk iki öğeyi birlikte ekleriz ( '+'ikinci öğe o noktaya kadar olan toplam, yeni girdinin üst öğesi). Daha sonra IP, küpün başka bir yüzüne 'u', IP'ye u dönüşü yapmasına ve bir 'I'komut yürütmesine (başka bir giriş tamsayısını oku) neden olan karaktere sarar . IP üst yüze geri sarılır '$', silme talimatını ( ';') atlar ( ) ve başladığımız noktaya geri döner.

Son

IP döngüden yansıtılırsa, aşağıdaki karakterler yürütülür:

      . . .
      . v .
      . ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Bu talimatlar üst öğeyi (sıfırdır) siler ve ardından üst öğeyi (toplamı) bir tamsayı olarak verir. Sonra '@'komuta ulaşılır, böylece program sona erer.


4

Python 2 ve 3, 33 bayt

lambda l,*r:l+sum(r)*(1/2>0 or-1)

Girişi ayrı parametreler olarak alır.


Python 2.
Python 3.


lambda l,*r:l+sum(r)*(1/2-.5)*231 bayt
ovs için

@ovs Bilerek bir şamandıra iade kaçındı. İzin verilirse, *(1/2*4-1)sizinkinden daha az bir bayttır.
Veedrac

Değer doğru olduğu sürece dönüş türü gerçekten önemli olmadığını düşünüyorum
ovs

4

JS (ES6), CGL (CGL Golf Dili) , 32 26 bayt

 x=>eval(x.join`-`)
//-⨥

JS çıkarma ve CGL toplama yapar.

JS:

x=>eval(x.join`-`)

Dizideki her öğeyi kullanarak çıkaran anonim işlev Array#reduce.

//-⨥

Bir yorum.

CGL

 x=>eval(x.join`-`)

İlk satırdaki bir boşluğa benzeyen şey aslında kırılmaz bir alan, CGL'de bir yorum. İlk satır dikkate alınmaz.

//-⨥

/Ler hiçbir şey. -Bu girişe bakacak şekilde geçerli yığın işaretçi azaltır. geçerli yığını (giriş) birlikte ekler, bunu bir sonraki yığına doğru iter ve geçerli yığını artırır. Örtük olarak çıkar.


1
JS sürümünü kullanarak x=>eval(x.join`-`)5B
Luke


@ Haklısın. Sabit.
programmer5000

4

JavaScript (ES6) / QBasic, 84 83 bayt

'';f=x=>eval(x.join`+`)/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/

Yorum hack ile başka bir çözüm!

JavaScript toplamı hesaplar. Girdi olarak sayı içeren bir dizi alır. Fonksiyon olarak çıktılar return. İşlevi şöyle çağırabilirsiniz alert(f([10,20,30])).

QBasic farkı hesaplar. Tekrar tekrar giriş ister. Bir değer girer girmez, vurduğunuz zamana kadar girdiğiniz tüm sayıların farkını verir Enterve tekrar giriş ister. Her şeyin sonuna kadar aynısını yapmaya devam eder.


O nasıl çalışır?

QBasic'te (yapılandırılmış BASIC ailesinin bir dili; satır numaraları gerektirmez), 'satırın sonuna kadar olan bir yorumun başlangıcını işaretler. Oysa JavaScript'te bir dizenin başlangıcını işaretler. Bu nedenle, ilk satırın tamamı QBasic'te bir yorum olarak işaretlenir, ancak JavaScript'te satır yürütülür (ve bu satır, sayıları ekleyen JavaScript bölümünü /*ve sonunda kalanını gizlemek için bir açıklama başlatan bir JavaScript yorumlayıcısından QBasic kodunu girin.)

İkinci satırdan ikinci son satıra kadar olan kod, tüm giriş numaralarının farkını hesaplamak için QBasic kodunu içerir (kod çok açıklayıcıdır).

Son satır içerir '*/. 'QBasic yorumlayıcısının aşağıdaki kodu yorum olarak yorumlamasına neden olurken, JavaScript'te yorumun bir parçası olduğu için (ilk satırın sonunda başlayan) herhangi bir etkisi yoktur. Aşağıdaki kod ( */), JavaScript'in ilk satırda başlayan yorumu sonlandırmasına neden olur, ancak QBasic bunun bir yorumun parçası olduğunu düşündüğü için QBasic'te yürütülmez.


Test Durumları

JavaScript (ekler):

'';f=x=>eval(x.join`+`);/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/
console.log(f([12,5,7,2]));

QBasic (çıkartma):

Git bu web sitesi . Aşağıdaki kodu kopyalayıp metin düzenleyicisine yapıştırın:

1 '';f=x=>eval(x.join`+`);/*
2 INPUT a
3 FOR i=1 TO 2
4 i=0
5 INPUT n
6 a=a-n
7 PRINT a
8 NEXT i
9 '*/

Satır numaralarının gerekli olmasının nedeni, bahsettiğim web sitesinin yalnızca yapılandırılmamış BASIC dillerini desteklemesi. Ve bu web sitesi bulabildiğim tek iyi çevrimiçi BASIC yorumlayıcı. Bununla birlikte, yazının üst kısmında bulunan kodu çalıştırmak (satır numaraları olmayan kod), yapılandırılmış BASIC'i destekleyen ve 'yorum başlatıcısı olarak iyi bir QBasic yorumlayıcısında iyi çalışmalıdır (az sayıda, çoğu yapmaz).


notlar

  • Bu benim ilk ! Umarım iyi bir şeydir!
  • Kodun QBasic kısmı gerektirmez, ENDçünkü yorumlayıcı asla ona ulaşmaz! (Sonsuza kadar sonsuz döngüde sıkışıp kalır; her zaman daha fazla giriş ister.)

3

Brain-Flak / Brain-Baca , 20 bayt

({}<([({{}})]){}>{})

Çevrimiçi deneyin! (Brain-Flak) (artı)

Çevrimiçi deneyin! (Beyin-Baca) (eksi)

açıklama

Brain-Flak ve Brain-Flueue arasındaki tek fark, Brain-Flakue'nun Brain-Flak'ta kullanılan iki yığını (ilk giren ilk çıkar) iki kuyrukla değiştirmesidir (ilk giren ilk çıkar). Doğal olarak bu program bu farkı kullanır.

Açıklamalı Kod

(                  ) Push the sum of...
 {}                   the first input,
   <            >     zero,
                 {}   the remaining sum (see below)
    ([      ])       Push the of below line
      ({{}})         Pop all the input sans first, push the sum
              {}     Pop (in Brain-Flak, this discards the negative sum,
                            in Brain-Flueue, the positive)
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.