Eşliği değiştir


22

Görev

Pozitif bir tamsayı verildiğinde , tek ise nçıktı , çift ise çıktı .n+1nn-1n

Giriş

Olumlu bir tamsayı. Tamsayının dilin kullanım kapasitesi içinde olduğunu varsayabilirsiniz.

Çıktı

Yukarıda belirtilen pozitif bir tamsayı.

testcases

input output
    1      2
    2      1
    3      4
    4      3
    5      6
    6      5
    7      8
    8      7
  313    314
  314    313

puanlama

Bu , bayt cinsinden en kısa cevap kazanır.

Standart boşluklar uygulanır.

Referanslar


Birlik olarak girdi alabilir miyiz?
Kritixi Lithos

2
Bazı dillerde
tersi

3
@MistahFiggins OP'nin bilerek böyle yaptığından emin olduğum için yeterince iyi biliniyor.
Ørjan Johansen

Yanıtlar:


24

C, 20 bayt

f(x){return-(-x^1);}

Çevrimiçi deneyin .


7
@ LeakyNun Bir return ifadesi olmayan bir işlev yazmıyorum.
feersum

18
@EriktheOutgolfer No. Hayır. Nuh-uh. Hayır
feersum

10
@Sisyphus Ama bu kod golf , ve TIO bağlantımda çalışıyor, bu yüzden geçerli.
Outgolfer Erik,

7
@EriktheOutgolfer Söylediğim şey, ifadenizin ("ilk argümana atama bir return ifadesine eşdeğerdir") aslında yanlış olduğu. Bu tür bir kodun belirli koşullar altında çalışan bir cevap üretip üretemeyeceği başka bir sorudur (ilk yorumumda böyle bir kodu göndermemeyi planladığımı belirterek ele aldım).
feersum

8
@EriktheOutgolfer Bir cevap, uygulamaya özel davranışa dayanıyorsa, bir uygulama belirtmelidir. Bu cevap vermez, bu yüzden bu kod geçersiz olur.
Sisyphus

17

Yığın Kedileri , 3 + 3 ( -n) = 6 bayt

-*-

Çevrimiçi deneyin!

İhtiyaç -nsayısal giriş ve çıkışı ile işe bayrağı.

açıklama

Yığın Kediler, sınırlı komut dizisi nedeniyle (tümü enjeksiyon olan ve çoğu dahil olan) ve her programın ayna simetrisine sahip olması gerektiğinden genellikle rekabetçi olmaktan uzaktır. Bununla birlikte, söz konusu ilişkilerden biri, sayının en az anlamlı bitini değiştirmek ve değeri de, aynı zamanda var olan olağandışı olumsuzlama ile dengeleyebiliriz. Neyse ki, bu bize simetrik bir program sunuyor, bu yüzden başka bir şey için endişelenmemize gerek yok:

-   Multiply the input by -1.
*   Toggle the least significant bit of the value (i.e. take it XOR 1).
-   Multiply the result by -1.

Girdi ve çıktı, programın başında ve sonunda örtülüdür, çünkü girdi almak ve çıktı üretmek tersinir bir işlem değildir, bu nedenle komutlar olamaz.


1
Bayraklar her zaman ek boşlukla sayılır mı, bayrak kullanarak başka cevaplar görmedim sanırım (Perl gibi), öyle mi? EDIT: Tamam nvm, ilgili meta yazıyı buldu . “ Bunları karakter sayımında farksızlık olarak görüyorum, onlarsız en kısa eşdeğer çağırmada. ” ... " perl -nle 'stuff'2 karakterden fazla perl -e 'stuff', bu yüzden 2 karakter daha sayılıyor ". Yani (space)-nbayraksız 3 bayt daha.
Kevin Cruijssen

@KevinCruijssen Bu normal bir çağrıya ne kadar bayt eklemeniz gerektiğine bağlıdır. Perl'de ve diğer birçok üretim dilinde, kodu çağırabilir -e "code"ve ardından eörneğin eklerinden önce ek bayraklar ekleyebilirsiniz -pe "code". O zaman -pbayrak sadece bir bayttır. Ancak, Stack Cats böyle bir -eargümana sahip değildir , bu yüzden her zaman <sp>-nkomuta tam eklemeniz gerekir ve bu nedenle üç bayttır.
Martin Ender

12

x86 Meclisi, 9 bayt (yarışmaya katılmak için)

Bu zorluğa üst düzey dilde giriş yapan herkes, çiğ bitleri işlemenin gerçek eğlencesini kaçırıyor . Bunu yapmanın yollarında çok ince varyasyonlar var, bu çılgınca ve düşünmesi çok eğlenceli. İşte 32-bit x86 assembly dilinde geliştirdiğim birkaç çözüm.

Bunun tipik kod golfü cevabı olmadığı için şimdiden özür dilerim. Yinelemeli optimizasyonun düşünce süreci (büyüklük için) hakkında çok şey değiştireceğim. Umarım, bu daha geniş bir kitleye ilginç ve eğiticidir, ancak TL; DR tipi iseniz, sonuna kadar atlarsanız kırılmayacağım.

Açık ve verimli çözüm, değerin tek mi yoksa çift mi olduğunu (en az anlamlı bite bakarak verimli bir şekilde yapılabilir) test etmek ve sonra buna göre n + 1 veya n − 1 arasında seçim yapmaktır. Girişin ECXkayıt defterinde bir parametre olarak iletildiğini ve sonucun EAXkayıt defterine döndürüldüğünü varsayarak , aşağıdaki işlevi elde ederiz:

F6 C1 01  |  test  cl, 1                      ; test last bit to see if odd or even
8D 41 01  |  lea   eax, DWORD PTR [ecx + 1]   ; set EAX to n+1 (without clobbering flags)
8D 49 FF  |  lea   ecx, DWORD PTR [ecx - 1]   ; set ECX to n-1 (without clobbering flags)
0F 44 C1  |  cmovz eax, ecx                   ; move in different result if input was even
C3        |  ret

(13 bayt)

Ancak kod-golf amaçlı bu LEAkodlar mükemmel değildir, çünkü kodlamaları 3 byte alırlar. Basit bir DECrement ECXdaha kısa olacaktır (sadece bir bayt), fakat bu bayrakları etkiler, bu yüzden kodu nasıl düzenlediğimiz konusunda biraz akıllı olmamız gerekir. Biz azalmada yapabiliriz ilk ve tek / çift deney ikinci , ama sonra tek / çift testin çevirmek zorunda.

Ayrıca, koşullu taşıma komutunu bir kod olarak değiştirebiliriz, bu kodun daha yavaş çalışmasını sağlayabilir (dalın ne kadar öngörülebilir olduğuna bağlı olarak - giriş tek veya çift arasında tutarsız bir şekilde değişiyorsa, bir dal yavaş olacaktır; desen, daha hızlı olacak), ve bizi başka bir bayttan kurtaracak.

Aslında, bu revizyon ile, tüm işlem yerinde, sadece tek bir kayıt kullanılarak yapılabilir. Eğer bu kodu bir yere yazıyorsanız, bu harika bir şey (ve olasılıklar çok kısa olduğu için olabilirsiniz).

    48     |  dec  eax          ; decrement first
    A8 01  |  test al, 1        ; test last bit to see if odd or even
    75 02  |  jnz  InputWasEven ; (decrement means test result is inverted)
    40     |  inc  eax          ; undo the decrement...
    40     |  inc  eax          ; ...and add 1
  InputWasEven:                 ; (two 1-byte INCs are shorter than one 3-byte ADD with 2)

(satır içi: 7 bayt; işlev olarak: 10 bayt)

Ama ya onu bir işlev yapmak istersen? Hiçbir standart çağrı kuralı, dönüş değeri için olduğu gibi parametreleri iletmek için aynı kaydı kullanmaz; bu nedenle MOV, işlevin başına veya sonuna bir kayıt yazma talimatı eklemeniz gerekir . Bu hemen hemen hiçbir hızda maliyeti yoktur, ancak 2 bayt ekler. ( RETTalimat aynı zamanda bir bayt ekler ve bunun anlamı bir işlev çağrısı, gelen yapmaya gerek ve iade tarafından tanıtılan bir ek yük vardır inlining bir hız hem üreten bir örnektir ve sadece klasik bir hız olmaktan ziyade boyutu yararı, -for-space tradeoff için.) Sonuç olarak, bir işlev olarak yazılmış bu kod 10 baytlık bir süredir.

10 baytta başka ne yapabiliriz? Performansı hiç değilse (en azından tahmin edilebilir performans) önemsersek, bu daldan kurtulmak iyi olurdu. İşte bayt olarak aynı boyutta bir dalsız, bit bükme çözümü. Temel öncül basittir: son biti çevirmek için bitsel bir XOR kullanırız, tek bir değeri çift bire dönüştürür ve tam tersi olur. Ancak tek girişler var - garip girişler için, bize n-1 veren , hatta girişler için n + 1 veriyor - tam olarak istediklerimizin tam tersi. Bu yüzden, bunu düzeltmek için, işlemi negatif bir değer üzerinde yapıyoruz ve işareti etkin bir şekilde çeviriyoruz.

8B C1     |  mov eax, ecx   ; copy parameter (ECX) to return register (EAX)
          |
F7 D8     |  neg eax        ; two's-complement negation
83 F0 01  |  xor eax, 1     ; XOR last bit to invert odd/even
F7 D8     |  neg eax        ; two's-complement negation
          |
C3        |  ret            ; return from function

(satır içi: 7 bayt; işlev olarak: 10 bayt)

Oldukça kaygan; Bunun nasıl geliştirilebileceğini görmek zor. Yine de bir şey gözüme çarpıyor: bu iki baytlık NEGtalimatlar. Açıkçası, iki bayt, basit bir olumsuzlamayı kodlamak için çok fazla bir bayt gibi görünüyor, ancak bu bizim birlikte çalışmamız gereken komut seti. Herhangi bir geçici çözüm var mı? Emin! Eğer XOR-2'ye kadar çıkarsak , ikinci NEGationu bir INCrement ile değiştirebiliriz :

8B C1     |  mov eax, ecx
          |
F7 D8     |  neg eax
83 F0 FE  |  xor eax, -2
40        |  inc eax
          |
C3        |  ret

(satır içi: 6 bayt; işlev olarak: 9 bayt)

X86 komut setinin tuhaflıklar başka biri çok amaçlı LEAtalimat bir kayıt-kayıt taşımak, bir kayıt-kayıt eklenmesini yapabilir, bir sabiti tarafından mahsup ve hepsi tek talimatında ölçekleme!

8B C1        |  mov eax, ecx
83 E0 01     |  and eax, 1        ; set EAX to 1 if even, or 0 if odd
8D 44 41 FF  |  lea eax, DWORD PTR [ecx + eax*2 - 1]
C3           |  ret

(10 bayt)

ANDTalimat gibidir TESTde o doğrultuda bir bitdüzeyi-AND ve seti bayrakları yapmak içinde, daha önce kullanılan talimat ama ANDaslında işlenen hedef günceller. Daha LEAsonra komut bunu 2'ye ölçeklendirir, orijinal giriş değerini ekler ve 1 değerini azaltır. Giriş değeri tek ise, bu değer 1'i (2 × 0 - 1 = −1) çıkarır; eğer giriş değeri eşitse, buna 1 (2 × 1 - 1 = 1) eklenir.

Bu, kodu yazmak için çok hızlı ve etkili bir yoldur, çünkü yürütmenin çoğu ön uçta yapılabilir, ancak karmaşık bir kodun kodlanması çok zaman aldığından bizi bayt şeklinde satın almaz. LEAtalimat. Bu sürüm ayrıca orijinal giriş değerinin LEAtalimat girişi olarak korunmasını gerektirdiğinden, satır içi amaçlarla da çalışmaz . Dolayısıyla, bu son optimizasyon girişimi ile gerçekte geriye doğru gittik, durmanın zamanı gelebileceğini öne sürdük.


Bu nedenle, son yarışmaya giriş için, ECXkayıttaki giriş değerini alan ( 32-bit x86'da yarı standart kayıt tabanlı bir çağrı kuralı) giriş yapan 9 baytlık bir fonksiyona sahibiz ve sonucu EAXkayıtta döndürür. tüm x86 arama kuralları):

           SwapParity PROC
8B C1         mov eax, ecx
F7 D8         neg eax
83 F0 FE      xor eax, -2
40            inc eax
C3            ret
           SwapParity ENDP

MASM ile montaja hazır; C’den şu şekilde arama yapın:

extern int __fastcall SwapParity(int value);                 // MSVC
extern int __attribute__((fastcall)) SwapParity(int value);  // GNU   

Sadece dec eax; xor eax, 1; inc eaxçalışmak ve bir bayt daha fazla tasarruf olmaz mıydı ?
Ilmari Karonen


11

Python3, 20 18 bayt

lambda n:n-1+n%2*2

Oldukça basit. İlk önce n-1'i hesaplar ve buna 2 ekleyip eklememeye karar veririz .

N bile ise -> n mod 2 böylece biz ekleyeceğiz, 0 olacak 2 * 0 ile n-1 sonuçlanan n-1 .

N tekse -> n mod 2 böylece biz ekleyeceğiz, 1 olacak 2 * 1 ile n-1 sonuçlanan + 1'e n .

MS boya ve bir dizüstü bilgisayar touchpad ile yaptığım bir açıklamayı tercih ederim ... Visual explanation


10

Python, 16 bayt

lambda x:-(-x^1)

Çevrimiçi deneyin!


3
Brute zorlama, karakterleri kullanarak daha kısa bir çözüm bulamaz "x+-012~|&^()*/%".
xnor

@xnor İyi bir şey o zaman anladım!
sagiksp

1
Ve önemsiz yeniden düzenleme dışında başka hiçbir uzunlukta çözüm bulunmuyor gibi görünüyor -(1^-x).
xnor

8

MATL , 7 bayt

Q:HePG)

Bu herhangi bir aritmetik işlemden kaçınır. Çevrimiçi deneyin!

açıklama

4Bir örnek olarak girişi düşünün .

Q    % Implicit input. Add 1
     % STACK: 5
:    % Range
     % STACK: [1 2 3 4 5]
He   % Reshape with 2 rows in column-major order. Pads with a zero if needed
     % STACK: [1 3 5;
               2 4 0]
P    % Flip vertically
     % STACK: [2 4 0;
               1 3 5]
G    % Push input again
     % STACK: [2 4 0;
               1 3 5], 4
)    % Index, 1-based, in column major order. Implicitly display
     % STACK: 3

1
Güzel! Beğen
Stewie Griffin,

6

Braingolf v0.1 , 11 10 bayt

.1>2,%?+:-

Çevrimiçi deneyin! (İkinci argüman Braingolf kodu, üçüncü argüman girdidir)

Neil sayesinde bir bayt kaydedildi

İlk yarışan braingolf cevabı: D

Açıklama:

.            Duplicate the top of the stack
 1>          Push 1 to the bottom of the stack
   2         Push 2 to stack
    ,%       Pop last 2 items, mod them and push result
      ?      If last item > 0
       +     Add the 1 to the input
        :    Else
         -   Subtract the 1 from the input

             No semicolon in code so print last item

Braingolf v0.2 , 9 bayt [rekabet etmeyen]

.2%?1+:1-

Çevrimiçi deneyin! (İkinci argüman Braingolf kodu, üçüncü argüman girdidir)

Açıklama için yukarıya bakın. Yalnızca fark Braingolf v0.2'de, diadic operatörlerinin varsayılan davranışı ve ,değiştiricinin işlevi ters çevrilir, yani v0.1 yanıtındaki 2 virgül artık gerekli değildir.

Ancak v0.2 mücadeleden sonra serbest bırakıldı.


5
Yeni diliniz için tebrikler!
Leaky Rahibe

Mu .1<2,%?+:-ben öyle ne düşünüyorsunuz?
Neil

Tam olarak -, işlemin doğru şekilde yapılmasını sağlamak için önce bir virgül gerekir , bu durumda hala cevabımın uzunluğu aynı olur
Skidsdev

@ Mayube , girişin altındaki değeri <döndürmeyi bekliyordum 1, böylece doğru yerde olacaktı.
Neil,

@ Girilen değer bir sayı ise -, yığına ulaştığında şu şekilde görünür: [n,1]braingolf operatörleri tersine çevrilir, böylece 1 - nsonuçta ortaya çıkar -(n-1), istenen sonucun basitçe gerçekleşmesini sağlarn-1
Skidsdev

5

Cubix , 10 9 bayt

cO1)I(//@

Çevrimiçi deneyin

açıklama

Net versiyon

    c O
    1 )
I ( / / @ . . .
. . . . . . . .
    . .
    . .

Yürütülen karakterler

I(1c)O@
I          Input
 (         Decrement
  1c       XOR with 1
    )      Increment
     O@    Output and exit

4

Python, 68 bayt

lambda x:[m.floor(x-m.cos(m.pi*x)) for m in [__import__('math')]][0]

Eşsiz bir yaklaşım ruhu içinde. Aşağıdaki grafik, işlevi göstermektedir (ilk 10 vakayı temsil eden mor noktalar ile). Teoride, çoğu (hepsi?) Periyodik fonksiyonlara (örneğin, günah, tan, sn) dayalı olarak bu soru için bir çözüm oluşturmak mümkün olmalıdır. Aslında, kodda sec yerine cos kullanılmalıdır.

Grafik gösteren işlev


3

PHP, 15 bayt

<?=-(-$argn^1);

2
Bunu nasıl çalıştırırım? Gerekip gerekmediğini test etmeye çalışıyorum ;ve bir .phpdosya kullanmayı denedim ve ayrıca doğrudan php (php7 cli.) 'Ye yankılandı $argn.
Andrakis

2
İle @Andrakis Fbayrak ve bir boru hattı: echo 42 | php -F script.php.
user63956

3

Javascript, 17 12 bayt

x=>x-(-1)**x

f=x=>x-(-1)**x;
<input id=i oninput=o.innerText=f(this.value) type=number><pre id=o>

Başka bir yaklaşım, C cevabından çalınan 10 bayt (sssshhh)

x=>-(-x^1)

f=x=>-(-x^1)
<input id=i oninput=o.innerText=f(this.value) type=number><pre id=o>


1. noktalı virgül eklemeniz gerekmez; 2.x=>x-(-1)**x
Sızdıran Rahibe

Neden |0? Her iki çözüm de dizeleri otomatik olarak sayılara dönüştürecek gibi görünüyor. (İlk çözüm için, onluklardan kaçınmak istiyorsanız, kullanın <input type=number>.)
Neil

@Neil Beni haberdar ettiğiniz için teşekkürler!
Matthew Roh

3

JavaScript (ES6), 14 13 12 10 bayt

n=>-(-n^1)

Dene

f=
n=>-(-n^1)
i.addEventListener("input",_=>o.innerText=f(+i.value))
<input id=i type=number><pre id=o>


Orijinal, 12 bayt

n=>n-1+n%2*2

2

Python, 20 bayt

lambda n:n+(n%2or-1)

n%2or-1garipse 1 döndürür, ancak eşitse n%2"false" (0) olur, bu nedenle -1 döndürür. O zaman bunu basitçe ekleriz n.

Önceki çözüm, 23 bayt

lambda n:[n-1,n+1][n%2]

n%2n2'ye bölündüğünde kalanı hesaplar. Eşitse , bu 0 döndürür ve bu listedeki öğe 0 olur n-1. Tuhafsa, bu 1 döndürür ve bu listedeki öğe 1 olur n+1.


1
Bir lambda kullanın:lambda n:[n-1,n+1][n%2]
Leaky Nun

Ah evet, bu durumda daha kısa oldu. Tamamlandı, teşekkürler!
numbermaniac,

2

Retina , 21 bayt

.+
$*
^11(?=(11)*$)


Çevrimiçi deneyin! İlk Retina cevabım sonunda iki yeni hat var! Açıklama: İlk iki satır ondalıktan birliğe dönüyor. Üçüncü ve dördüncü satırlar iki sayıyı çiftlerden çıkarır. Son satır tekrar ondalık basamağa dönüşür, ancak bir tane de ekler.



2

Cubix , 11 bayt

u%2!I(/+@O<

Çevrimiçi deneyin!

açıklama

Net versiyon:

    u %
    2 !
I ( / + @ O < .
. . . . . . . .
    . .
    . .

Karakterler aşağıdaki sırayla gerçekleştirilir:

I(2%!+O@
I        # Take a number as input
 (       # Decrement it
  2%     # Take the parity of the decremented number
         # (0 if the input is odd, 1 if it's even)
    !    # If that number is zero:
     +   #   Add 2
      O  # Output the number
       @ # Terminate the program

2

Brain-Flak , 36 bayt

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

Çevrimiçi deneyin!

Şahsen bu cevabımdan gerçekten çok memnunum çünkü bu problemi çözmek için geleneksel bir yöntem olarak düşündüğümden çok daha kısa.

açıklama

İlk kod biti

(({})(()))

az önce yığın dönüştürür niçin

n + 1
  1
  n

Sonra yığının üstü sıfır olmasa da onu azaltır ve altındaki sayının işaretini çeviririz

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

Sıfırı kaldırır ve kalan iki sayıyı ekleriz

{}({}{})

2

Mathematica, 22 19 bayt

Greg Martin sayesinde 3 bayt kurtarıldı!

#-1[-1][[#~Mod~2]]&

Önceki cevap, 22 bayt

#+{-1,1}[[#~Mod~2+1]]&

Açıklama (önceki cevap için)

Mathematica, aritmetik gibi işlemlerin listelerde otomatik olarak ilerlediği hoş bir özelliğe sahiptir.

Bu durumda, Mod[#,2]0 veya 1 değerini döndürecek olanı alırız , ancak 1 eklememiz gerekir, çünkü Mathematica listeleri 1 dizinlidir. E? Er bile , bu 1'e çıkar, böylece #-1döndürülür. E? Er garip , bu 2'ye çıkıyor, bu yüzden #+1döndürülür.


2
Sen Mathematica adlı kötüye kullanarak üç bayt kaydedebilirsiniz [[0]]yeteneği: #-1[-1][[#~Mod~2]]&.
Greg Martin,

Bu delilik, bunu asla düşünmezdim. Tamamlandı, teşekkürler!
numbermaniac

2

Bilge , 8 bayt

-::^~-^-

Çevrimiçi deneyin!

açıklama

Etrafında başka bir şey olsaydı (eğer tekse azalır, çifte çıkarsa azalır), bunu yapmak oldukça kolay olurdu.

Sadece son parçayı çevirirdik.

::^~-^

Buradaki düzelti, negatif olan son parçayı çevirmemiz. Negatif sayılar, sayıların reddedilmesinden 1 puan uzakta~ bu da sorunu çözen bir kayma yaratır.

Bu yüzden sadece programı alıp içeri sardık -.

-::^~-^-

1

Java 8, 16 10 bayt

n->-(-n^1)

Java 7, 34 28 bayt

int c(int n){return-(-n^1);}

Limanlarını Sıkıcı @feersum 'ın inanılmaz C cevap .
Burada dene.


Eski cevaplar:

Java 8, 16 bayt

n->n%2<1?n-1:n+1

Java 7, 34 bayt

int c(int n){return--n%2>0?n:n+2;}

Açıklama (eski Java 7 cevabından):

Burada dene.

Yukarıdaki cevap int c(int n){return n%2<1?n-1:n+1;}, uzaydan kurtulmanın daha kısa bir çeşididir .

int c(int n){     // Method with integer parameter and integer return-type
  return--n%2>0?  //  If n-1 mod-2 is 1:
    n             //   Return n-1
   :              //  Else:
    n+2;          //   Return n+1
}                 // End of method



1

Befunge 93 , 18 bayt

&:2%#v_1+.@
@.-1 <

Bunu henüz golf bitirmedim (umarım).


İpuçları Golf: Befunge 98 kullanma yeteneği vardır kv(ya jvda kesinlikle 1 veya 0 ise) yerine #v_. Ayrıca, Çevrimiçi olarak kullanıyorsanız (ve bunu öneririm) kullanıyorsanız, programı başka bir programla sonlandırabilirsiniz &(60 saniye sürecek olmasına rağmen), böylece kullanırsanız @ilk satırdan kurtulabilirsiniz . Befunge-98 için komutların tam listesi, bunların hepsi TIO'da doğru bir şekilde uygulanamamış olsalar da &, programı EOF'a tersine çevirmek yerine bitirmek gibi.
MildlyMilquetoast

Ayrıca, daha az komut içeren 98 yerine befunge 93 kullanıyormuşsunuz gibi görünüyor. Bağlantı adınızı gerçekten 93 ise ve 98 değilse düzeltmek isteyebilirsiniz
MildlyMilquetoast

@MistahFiggins, ah evet haklısın ben 93 kullanıyordum.
Daniel


1

R, 17 bayt

(n=scan())-(-1)^n

nerede n=scan()haneli değerini alır.


Sana ihtiyacım var -(-1)^nziyade +(-1)^ndönmek gerekir çünkü n-1eğer nbile olduğunu
Giuseppe

@Giuseppe oh, evet, elbette, aptalca hata
Nutle

1

Casio-Basic, 27 bayt

piecewise(mod(n,2),1,-1)+n

İşlev için 26 bayt n, parametre kutusuna girmek için +1 tuşunu kullanın .




0

Toplu iş, 20 bayt

@cmd/cset/a"-(1^-%1)

Bağımsız olarak @ feersum algoritmasını yeniden keşfetti, dürüst!

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.