Sıfırdan uzak dur


41

Görev

Negatif olmayan bir tamsayı verilirse n, çıktı 1ise n, aksi takdirde 0değerini çıktılar n.

Giriş

Negatif olmayan bir tam sayı.

  • Dizeyi girdi olarak kabul etmek isterseniz, dizge aşağıdaki regex ile eşleşir: /^(0|[1-9][0-9]*)$/yani, ne zaman olduğu dışında baştaki sıfırlara sahip olmamalıdır 0.
  • Girdi olarak gerçek bir tamsayı kabul ederseniz, tamsayı dilinin işleme yeteneği içinde olduğunu varsayabilirsiniz.

Çıktı

Yukarıda belirtilen pozitif bir tamsayı. Önde gelen sıfırlara izin verilmez. Çıktınız regex ile eşleşmelidir /^[1-9][0-9]*$/.

testcases

input output
    0      1
    1      1
    2      2
    3      3
    4      4
    5      5
    6      6
    7      7

puanlama

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

Standart boşluklar uygulanır.


1
Muhtemelen TNB CMC'ye bir link vermelisiniz , çünkü bu zorluğun geldiği yer burasıdır.
mbomb007

Cevap tam bir fonksiyona mı ihtiyaç duyuyor yoksa beden mi?
Caleb Kleveter

1
@CalebKleveter PPCG'deki varsayılan kural, cevabın bir işlev veya tam bir program olduğu, ancak snippet'ler olmadığıdır.
Sızdıran Rahibe

Çıktıyı baştaki sıfır ile basabilir miyiz?
MD XF

@ MDXF evet, yapabilirsiniz.
Sızdıran Rahibe

Yanıtlar:


18

C (gcc), 14 13 bayt

f(n){n=n?:1;}

n?:1Diğer C cevabının yorumunda bana numarayı hatırlattığın için @ betseg'e teşekkürler !

Çevrimiçi deneyin!

C, 17 bayt

f(n){return!n+n;}

Çevrimiçi deneyin!

C, 16 bayt

#define f(n)!n+n

Çevrimiçi deneyin!



1
@ betseg Çünkü bu bir makro. Derleyici onu 3*!n+neşit olarak görür 3*0+5.
Steadybox

1
Biliyorum, ancak aritmetik operatörleri doğrudan "dönüş" değerlerine uygulayabilmeniz gerektiğini düşünüyorum, bu yüzden makroların etrafına parantez koymak yaygın bir uygulamadır. Sadece makronun geçerli olduğunu sanmıyorum.
17'de

4
@ betseg Kod golf için bir gereklilik olduğunu sanmıyorum. Daha önce hiç C kodları ile bir golf kodunu görmedim.
Steadybox

1
@hucancode TIO bağlantılarına bakın. mainFonksiyon / makro fdenilen bir eklemek gerekir . Bir çözümün varsayılan olarak tam bir program olması gerekmez. Gcc'ye özgü sürüm başka bir derleyicide derlenebilir veya çalışmayabilir ve başka bir derleyicide derlendiğinde düzgün çalışmayabilir.
Steadybox

17

Japt , 2 bayt

ª1

Çevrimiçi deneyin!

açıklama

ªJS'nin ||operatörü için bir kısayol . Japt örtük girdilere sahip, bu yüzden bu program hesaplar input||1ve sonuç örtük olarak STDOUT'a gönderilir.

w1ve giriş maksimum alarak, hem de çalışacak 1.


16

Alice , 7 bayt

1/s
o@i

Çevrimiçi deneyin!

açıklama

1   Push 1. Irrelevant.
/   Reflect to SE. Switch to Ordinal.
i   Read all input as a string.
    Reflect off bottom right corner. Move back NW.
/   Reflect to W. Switch to Cardinal.
1   Push 1.
    IP wraps around to last column.
s   Sort swap: implicitly convert the input to an integer. Then, if the top stack 
    element is less than the one below, the two are swapped. It basically computes
    min and max of two values at the same time, with max on top.
/   Reflect to NW. Switch to Ordinal.
    Immediately reflect off the top boundary. Move SW.
o   Implicitly convert the result to a string and print it.
    Reflect off bottom left corner. Move back NE.
/   Reflect to S. Switch to Cardinal.
@   Terminate the program.

15

JavaScript (ES6), 7 bayt

n=>n||1

5
Alternatif: n=>n+!n(En azından sanırım)
Matthew Roh

@ SIGSEGV Evet, gerçekten işe yarayacak. (Bu n|!n, bunun 31 bitlik bir miktarla sınırlı olmasına rağmen, olabilir .)
Arnauld

bu n || 1 ile basitleştirilebilir. Yanlış olarak değerlendiren tek şey 0'dır.
ansiart

1
@ansiart Amacınız n=>n||1basitleştirildiyse n||1, hayır. Kabul edilebilir cevaplar tam programlar veya fonksiyonlardır. ES6 sözdiziminde n=>do_something_with(n)bir ok işlevidir .
Arnauld

1
@StanStrum nSıfır değilse , orijinal değerini döndürmemiz gerekiyor . Bitsel bir OR, nen az anlamlı bit ayarlanmadığında değişebilir (örn. (4|1) === 5).
Arnauld,


12

Retina , 4 bayt

^0
1

Çevrimiçi deneyin!

Girdi sıfırla başlıyorsa, 1 ile değiştirin. (Girdinin sıfır olmayan değerler için baştaki sıfırları olmadığından emin olduğu için çalışır.)


12

V , 4 bayt

é0À

Çevrimiçi deneyin!

Tercih edilmeyen ancak beklenen bir davranışı kötüye kullanır , bu yüzden buna gerçekten hata diyemem. Açıklama:

Vim'de komutlar bir sayımı kabul eder. Örneğin, <C-a>bir sayı 7<C-a>artacak , ancak 7 sayısını artıracak. Ancak, sayı 0olarak kullanamazsınız , çünkü

  • 0 zaten bir komuttur (ilk sütuna git) ve

  • Bir metin editörü bağlamında, bir komutun 0 kez çalıştırılmasını istemek nadiren mantıklı olur.

Bu, bir metin editörü için gayet iyi, ancak genellikle bir golf dili için iğrenç, bu nedenle V, bazı komutların üzerine yazar, bu sayede 0geçerli bir sayıdır. Örneğin, é, ñ, Ä, ve diğerleri. Bununla birlikte, <C-a>yerleşik bir vim komutu olduğundan, üzerine yazılmaz, bu nedenle bunu pozitif bir girdiyle çalıştırmak şunları verir:

N       " N times:
 <C-a>  "   Increment

Ancak girdi olarak 0 ile çalışmak şunları verir:

0       " Go to column one
 <C-a>  " Increment

Tam açıklama:

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment

1
0Bir sayı olmamak bir kez faydalıdır. İlk başta bile düşünmedim, çünkü birçok kez
onlardan kaçındım


12

Haskell, 5 bayt

max 1

Kullanım örneği: (max 1) 0-> 1.

Açıklayacak çok bir şey yok.



10

R, 13 bayt

max(1,scan())

nstdin'den okur . İle pmax, bir listede okuyabilir ve +1 baytlık listedeki her öğe için uygun değeri döndürür.

çevrimiçi deneyin!

Ben tarafından 13 bayt başka ince R çözüm olduğunu unutmamalıdır Sven Hohenstein'daki henüz sağlayan başka 13 bayt çözümü

(n=scan())+!n

Bu da beni R için alt sınır olup olmadığını merak ediyor.


Başka bir 13 kullanarak çözüm bayt pryr: pryr::f(n+!n). Daha küçük bir şey bulamıyorum ...
JayCe 17:18

9

Cubix , 6 bayt

OI!1L@

Her nasılsa bir birim küpte sığdırmayı başardı ... Çevrimiçi test edin!

açıklama

Çalıştırılmadan önce, kod küp net olarak düzenlenir:

  O
I ! 1 L
  @

IP (talimat işaretçisi) daha sonra sol Itarafa ( ) sağa bakacak şekilde yerleştirilir. Oradan çalıştırılan talimatlar:

I  Input a number from STDIN and push it to the stack.
!  If the top number is non-zero, skip the next instruction.
1  Push a 1 (only if the input was zero).
L  Turn left. The IP is now on the top face facing the !.
O  Output the top item as a number.

IP daha sonra !tekrar vurur @ve alt yüze atlar . Bu, @programın sona ermesi gereken noktaya gelmemiz gerektiğinden yardımcı olmuyor . IP Ltekrar vurur ve orta çizgiyi tersten ( L1!I) Lbir kez daha sonlandırmadan önce geriye doğru iter , bu da nihayet IP'yi açar @.







5

Brachylog , 3 bayt

∅1|

Çevrimiçi deneyin!

açıklama

Örtülü ?(Girdi) ve .(Çıktı) eklersek , şunları yaparız:

?∅          Input is empty (that is, [] or "" or 0 or 0.0)
  1.        Output = 1
    |       Else
     ?.     Input = Output

5

MarioLANG , 12 bayt

;
=[
:<+
 =:

Çevrimiçi deneyin!

Nasıl çalışır

Mario sol üstte başlar, başlangıçta sağa doğru yürür. İnput ( ;) ' dan bir int okur ve mevcut bellek hücresinde saklar. Sonra yerden düşüyor ( =), isabet ediyor [, eğer mevcut hücre 0 ise bir sonraki komutu görmezden geliyor.

Hücre 0 değilse, sola yürümeye başlar ( <), mevcut hücreyi int ( :) olarak çıkarır ve ölüme düşer (programın sonu).

Hücre 0 ise, sola dönme komutunu yoksayar ve sağa devam eder. Mevcut hücreyi ( +) arttırır, çıkarır ve ölümüne düşer.


5

Beyin-Flak , 22 , 10 bayt

({{}}[]{})

Çevrimiçi deneyin!

Açıklama:

Giriş sıfır değilse, o {{}}zaman yığındaki her şeyi çıkarır ve girişi değerlendirir. Eğer sıfır ise, hiçbir şey atılmaz ve sıfıra göre değerlendirilir. Yani çalışan ({{}})verir

Sıfır dışı:

n

Sıfır:

0
0

Bu noktada, yığının yüksekliğini ekleriz (sıfır olmayanlar için 0, sıfırlar için 1) ve yığından bir değer daha alırız. (yığın sonsuz sayıda 0'la doldurulduğundan, bu ya üst 0 ya da ekstra 0 çıkar.)


Güzel iş, ancak en kısa çözüm değil: codegolf.stackexchange.com/a/118520/31203
MegaTom

4

TI-BASIC, 7 bayt

:Prompt X
:X+not(X

Alternatif olarak,

TI-BASIC, 7 bayt

:Prompt X
:max(X,1



4

Python, 15 bayt

lambda n:n or 1

Neden sadece n or 16 bayt değil?
DReispt

2
Çünkü bu sadece bir snippet, genellikle de tam program veya fonksiyonlarla cevap veriyoruz. Bunun bir yerde bazı kurallarda açıkça belirtildiğinden emin değilim, ama en azından bu fiili standart.
daniero

Trichoplax'dan alıntı : The rules are not terribly clear. I think we have a consensus on meta that REPLs count, but as a separate language, which would allow snippets in many cases, but snippets are not permitted according to this meta post-> codegolf.meta.stackexchange.com/questions/2419/…
daniero

@trichoplax 1or nher zaman geri dönerdi 1, değil mi?
daniero

1
Aynı 15 baytlık bayt sayısıyla alternatif:lambda n:n|1>>n
Kevin Cruijssen

4

dc, 11 bayt

[1]sf?d0=fp

[1]sfMakroyu f kaydında, 1'i yığının üstüne iten, ?girişi okuyan, d0=fmakroyu f çalıştıran giriş 0 pise, yığının üstünü basan bir makroyu saklar .

Ölçek:

$ dc -e "[1]sf?d0=fp" <<< 0
1
$ dc -e "[1]sf?d0=fp" <<< 1
1
$ dc -e "[1]sf?d0=fp" <<< 42
42

4

Excel, 10 Bayt

=A1+(A1=0)

Bu, belirgin 'IF' ifadesi çözümü üzerinden 4 Bayt kazandırır =IF(A1=0,1,A1),.


3
Ve daha az belirgin olandan daha az 1 bayt=A1+NOT(A1)
Engineer Toast


4

R, 13 bayt

n=scan();n+!n

Burada scangiriş değerini okumak için kullanılır n. Olumsuzluk n(yani, !n0 veya 1) eklenir n.


3

Mathematica, 9 8 bayt

Martin Ender Başına:

#~Max~1&

İlk fikir:

#/. 0->1&

Cümledeki ile Saf fonksiyon 0ile 1. Alan gerekli veya ayırdığımızı düşünüyor .0.


3

-L ve -p bayrakları için Perl 5, 6 + 2 bayt

$_||=1

Stdin'den ayrı hatlara girdi alır. Bayraklarla çalışır -lp.

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.