Bana yardım et, bana yardım et


23

Bir giriş Verilen nen küçük pozitif tam sayı program veya fonksiyon zorunluluk çıkışı, köyle nen yakın katına yuvarlanmış kdaha büyüktür n.

Örnek.

Bir giriş verildiğinde 20, çıkış değeri şöyle olmalıdır 3:

  • Yakın çoklu 1DİR 20olduğunu değil daha büyük 20.

  • Yakın çoklu 2DİR 20olduğunu değil daha büyük 20.

  • Yakın çoklu 3IS 21, olduğu daha büyük 20çıkış olacak şekilde.

Test Kılıfları

#Input  #Output
2       3
4       5
6       4
8       3
10      4
12      7
14      3
16      6
18      4
20      3
22      4
24      5
26      3
28      5
30      4
32      3
34      4
36      8
38      3
40      6
42      4
44      3
46      4
48      5
50      3
52      6
54      4
56      3
58      4
60      7
62      3
64      5
66      4
68      3
70      4
72      11
74      3
76      6
78      4
80      3
82      4
84      5
86      3
88      5
90      4
92      3
94      4
96      7
98      3
1000    6

Herhangi bir tek giriş verilen çıkış 2 olmalıdır.

kurallar

  • n daha küçük bir pozitif tamsayı 2^32
  • yuvarlama, eğer iki katı keşit derecede uzak ise n, daha büyük olanı seçilir ( "yarı yarıya yukarı" ). Bu şekilde, her garip nbir çıktı verir 2.
  • Bu , her dilde en kısa kod kazanır.

Okumayı kolaylaştırmak ve daha özlü hale getirmek için test senaryolarınızın formatını düzenledim. Bununla ilgili herhangi bir sorun yaşarsanız veya yeni örneklerden herhangi biri kapalıysa bana bildirin. :)
DJMcMayhem

@Shaggy Yapıldı! Listeden 500 ihtimal ve 450 tane bileği çıkardım.
fireflame241

Bu dizi için bir oeis bağlantısı var mı?
James K

@JamesK Daha önce aradığımda bir tane bulamadım. Muhtemelen bir OEIS hesabı olan biri bir tane yapabilir?
fireflame241

Yanıtlar:



9

Japt , 6 bayt

@<rX}a

Çevrimiçi deneyin!

Açıklama:

@    <r X}a
XYZ{U<UrX}a
X              // X = 0; Increments when the condition in between {...} fails
   {     }a    // Return the first integer X where:
    U          //   The input
     <U        //   is less than the input
       rX      //     rounded to the nearest multiple of X

2
ryerleşik mi? o_o
Erik Outgolfer

@EriktheOutgolfer: Japt ayrıca yukarı veya aşağı yuvarlamak için yerleşik yapıya sahiptir :)
Shaggy

5
Ben biliyordum D: Bu özellik kullanışlı birgün gelirdi
ETHproductions

@Shaggy bu fındık! o_o_o
Erik

@Oliver: Bu beni daha çok fonksiyon metotlarıyla başa çıkmaya ikna etti, şimdi - bu benim kendi versiyonum 7 byte idi:o æ@<rX
Shaggy

7

MATL , 13 bayt

tQ:yy/Yo*<fX<

Çevrimiçi deneyin! Veya tüm girişleri doğrulamak 1için1000 .

açıklama

Girişi düşünün 6.

t      % Implicit input. Duplicate
       % STACK: 6, 6
Q:     % Add 1, range
       % STACK: 6, [1 2 3 4 5 6 7]
yy     % Duplicate top two elements
       % STACK: 6, [1 2 3 4 5 6 7], 6, [1 2 3 4 5 6 7]
/      % Divide, element-wise
       % STACK: 6, [1 2 3 4 5 6 7], [6 3 2 1.5 1.2 1 0.8571]
Yo     % Round to closest integer. Halves are rounded up
       % STACK: 6, [1 2 3 4 5 6 7], [6 3 2 2 1 1 1]
*      % Multiply, element-wise
       % STACK: 6, [6 6 6 8 5 6 7]
<      % Less than, element-wise
       % STACK: [0 0 0 1 0 0 1]
f      % Find: indices of nonzeros (1-based)
       % STACK: [4 7]
X<     % Minimum of vector. Implicit display
       % STACK: 4


5

JavaScript (ES6), 28 25 bayt

n=>g=x=>n%x>=x/2?x:g(-~x)
  • Arnauld sayesinde 3 bayt kurtarıldı.

Dene

o.innerText=(f=

n=>g=x=>n%x>=x/2?x:g(-~x)

)(i.value=64)();oninput=_=>o.innerText=f(+i.value)()
<input id=i type=number><pre id=o>

Veya tüm numaraları 1-1000'den test edin (Çalışması için bir dakika verin):


5

Proton , 33 bayt

n=>[x for x:2..n+2if n%x>=x/2][0]

Çevrimiçi deneyin!


Proton hakkında hiçbir şey bilmiyorum, ama 3 bayttan tasarruf edersiniz: Çevrimiçi deneyin!
17:17

Belki tesadüf ama bu ... totallyhuman solüsyonu gibi tamamen aynıdır: p
Erik Outgolfer

@EriktheOutgolfer Onu aynı anda (biz onu birkaç saniye ninja'ledim) 37-byter'la yayınladık, çünkü Hyper operatörleri çağırdı ve o onları düzelttik.
Bay Xcoder

Uhh, sana IIRC ninja yaptım. : P
Ağustos'ta

@totallyhuman Beni 41 bayt ile ninjaladın. İlk önce 37 baytlık yazı gönderdim ve birkaç saniye sonra bununla seni ninja ettim.
Bay Xcoder



3

Jöle , 11 bayt

÷R%1<.¬;1TṂ

Pozitif tamsayı alıp geri dönen monadik bir bağlantı.

Çevrimiçi deneyin! veya bir test odasına bakın .

Nasıl?

÷R%1<.¬;1TṂ - Link: number, n       e.g. 10
 R          - range(n)               [ 1,2,3     ,4  ,5,6     ,7     ,8   ,9     ,10]
÷           - n divided by           [10,5,3.33..,2.5,2,1.66..,1.42..,1.25,1.11..,1 ]
  %1        - modulo by 1            [ 0,0,0.33..,0.5,0,0.66..,0.42..,0.25,0.11..,0 ]
    <.      - less than 0.5?         [ 1,1,1     ,0  ,1,0     ,1     ,1   ,1     ,1 ]
      ¬     - not                    [ 0,0,0     ,1  ,0,1     ,0     ,0   ,0     ,0 ]
       ;1   - concatenate a 1        [ 0,0,0     ,1  ,0,1     ,0     ,0   ,0     ,0 , 1]
         T  - truthy indices         [            4    ,6                           ,11]
          Ṃ - minimum                4

Not: birleştirilmesi 1davalarına bakacak adildir nbiridir 1, 2ya da 4sonucu olduğu gerektiğinde n+1( ‘R÷@%1<.¬TṂolur da işi).




2

Pyth, 5 bayt

fgy%Q

Test odası

Hiçbir yuvarlama yapısı yoktur, sadece T girişinin iki katından büyük veya T'ye eşit olan ilk pozitif tamsayı T'yi kontrol eder.

Açıklama:

fgy%Q
fgy%QTT    Implicit variable introduction.
f          Find the first positive integer T such that the following is truthy:
   %QT     Input % T
  y        Doubled
 g    T    Is greater than or equal to T

2

x86 Makine Kodu, 17 bayt

Bu kod, tekrar kullanılabilir bir işlev biçiminde temel, yinelemeli bir çözüm uygular:

31 F6                   xor    esi, esi
46                      inc    esi         ; set ESI (our temp register) to 1

                     Loop:
89 C8                   mov    eax, ecx    ; copy 'n' to EAX for division
46                      inc    esi         ; eagerly increment temp
99                      cdq                ; extend EAX into EDX:EAX
F7 F6                   div    esi         ; divide EDX:EAX by ESI
01 D2                   add    edx, edx    ; multiply remainder by 2
39 F2                   cmp    edx, esi    ; compare remainder*2 to temp
7C F4                   jb     Loop        ; keep looping if remainder*2 < temp

96                      xchg   eax, esi    ; put result into EAX (1 byte shorter than MOV)
C3                      ret

İşlev, hızlı arama çağrısını düzenler , böylece tek parametre ( n) ECXkayıt defterine iletilir . Dönüş değeri ( k), normalde EAXkayıt defterinde döndürülür .

Çevrimiçi deneyin!


2

Java 8, 42 bayt

Lambda Integeriçin Integer.

n->{for(int f=1;;)if(n%++f*2>=f)return f;}

Çevrimiçi Deneyin

Teşekkür

  • Kevin Cruijssen sayesinde -1 bayt

4
İlk başta başlatarak f=1ve kullanarak bir bayttan tasarruf edebilirsiniz , bunun gibi:++ffn->{for(int f=1;;)if(n%++f*2>=f)return f;}
Kevin Cruijssen


1

İleri (gforth) , 45 bayt

: f 1 begin 1+ 2dup mod over 1+ 2/ >= until ;

Çevrimiçi deneyin!

Kod Açıklaması

: f             \ start a new word definition
  1             \ start a counter at 1
  begin         \ start an indefinite loop
    1+          \ add 1 to counter
    2dup mod    \ duplicate input value and counter, get remainder of input/counter
    over 1+ 2/  \ get counter/2 (add 1 to force rounding up)
    >=          \ check if remainder is greater than counter/2
  until         \ end loop if true, otherwise go back to beginning
;               \ end word definition

1

05AB1E , 9 bayt

∞.ΔIs/Dò‹

Çevrimiçi deneyin!

açıklama

∞.ΔIs/Dò‹ Full code
∞.Δ       Returns the first number for which the following code returns true
             -> stack is [n]
   Is     Push the input and swap the stack -> stack is [input, n]
     /    Divide both of them -> stack is [input/n]
      Dò  Duplicate and round the second -> stack is [input/n, rounded(input/n)]
        ‹ Check if input/n got larger by rounding -> stack is [bool]
             -> if bool is true, abort and return the current number

1

Rockstar , 681 bayt

Thought takes Patience and Control
While Patience is as high as Control
Let Patience be without Control

Give back Patience

Rock takes Art
Love is neverending
Sex is bottomless
Put Thought taking Art & Love into your head
If your head is Sex
Give back Art
Else
Limits are inspiration
Put Art with Limits without your head into the rubbish
Give back the rubbish


Listen to Chance
Questions are unstoppable
Until Questions is Chance
Build Questions up
Put Thought taking Chance, Questions into your mind
Answers are independence (but)
Put Questions over Answers into the world
Put Rock taking the world into the world
If your mind is as big as the world
Say Questions
Break it down

Şunları yapabilirsiniz çevrimiçi rockstar deneyin ama kopyalayıp karşısında kodu yapıştırın gerekir. Sizden bir giriş numarası isteyecektir.

En düşük bayt sayısı için gitmedim, çünkü Rockstar açık bir şekilde golf oynamak için yapılmadı, bu yüzden Rock 'n' Roll şarkı sözleri için gitmeye çalıştım.

Açıklama:

Bu diğerleri ile aynı çözüme dayanmaktadır (python, java):

Iterate up from 2:
if n % iterator >= ceil(n/2)
    return iterator

Öncelikle şiir uğruna Düşünce ve Kaya diye adlandırılan modül ve tavan fonksiyonlarını tanımlamam gerekiyor.

Aşağıda farklı değişken isimleri ile daha az şiirsel bir versiyon ve sözdiziminin belirsiz olduğu açıklamalar yer almaktadır. Parantezler yorumları belirtir.

Modulus takes Number and Divisor
While Number is as high as Divisor
Put Number minus Divisor into Number
    (blank line ending While block)
Give back Number (return Number)
    (blank line ending function declaration)
Ceil takes Decimal
Put Modulus taking Decimal, 1 into Remainder
If Remainder is 0
Give back Decimal (return Decimal)
Else
Put Decimal with 1 minus Remainder into Result
Give back Result (return Result)
    (blank line ending if block)
    (blank line ending function declaration)
Listen to Input (Read from STDIN to Input)
Index is 1
Until Index is Input
Build Index up (Increment by 1)
Put Modulus taking Input, Index into LHS
Put Index over 2 into RHS
Put Ceil taking RHS into RHS
If LHS is as big as RHS
Say Index
Break it down (Break from loop)


0

Swift 3 , 51 bayt

{n in(2..<n+2).filter{Float(n%$0)>=Float($0)/2}[0]}

Bazıları için son derece tuhaf nedenlerle, [0]çevrimiçi çalışmaz. İşte online derleyici uyumlu versiyon (bunun .first!yerine kullananlar ):

{n in(2..<n+2).filter{Float(n%$0)>=Float($0)/2}.first!}

Test Suite (çevrimiçi uyumlu).



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.