Apakah angka ini berbentuk segitiga?

33

Tantangan

Diberikan bilangan bulat positif, tentukan apakah itu bilangan segitiga, dan dengan demikian mengeluarkan salah satu dari dua nilai konstan dan berbeda.

Definisi

Angka segitiga adalah angka yang dapat dinyatakan sebagai jumlah dari bilangan bulat positif berturut-turut, dimulai dari 1. Mereka juga dapat dinyatakan dengan rumus n(n + 1) / 2, di mana nada bilangan bulat positif.

Uji kasus

Benar:

1
3
6
10
15
21
55
276
1540
2701
5050
7626
18915
71253
173166
222111
303031
307720
500500
998991

Falsy:

2
4
5
7
8
9
11
16
32
50
290
555
4576
31988
187394
501500
999999

Aturan

  • Entri Anda mungkin fungsi atau program.
  • Anda dapat berasumsi bahwa inputnya adalah bilangan bulat positif di bawah 10 6 .
  • Anda harus memilih dua output konstan dan berbeda untuk membedakan kedua kategori.

Ini adalah , jadi kode terpendek dalam byte di setiap bahasa menang.

Produksi ETH
sumber
1
Terkait , terkait .
ETHproduksi
Terkait
Shaggy
Mengapa Anda tidak memasukkan nol?
Neil
1
@Neil Saya ingin meminimalkan jumlah kemungkinan tepi, dan menangani nol adalah salah satunya yang saya rasa tidak terlalu penting. Apakah Anda pikir akan lebih baik jika nol perlu ditangani? (Jawaban Jelly saat ini gagal pada nol, misalnya)
ETHproduksi

Jawaban:

21

Haskell , 23 byte

EDIT:

  • -1 byte: @xnor menyingkirkan tanda kurung dengan a $.

Fungsi anonim mengambil Intdan mengembalikan a Char.

Output '1'untuk angka segitiga dan '0'untuk yang lain.

(!!)$show.(10^)=<<[0..]

Cobalah online!

  • Gunakan sebagai ((!!)$show.(10^)=<<[0..]) 998991.
  • Menghasilkan angka 1, 10, 100, 1000, ..., mengonversinya menjadi string, dan menggabungkannya. Kemudian indeks ke dalam string tak terbatas yang dihasilkan

    "1101001000100001000001000000...
Ørjan Johansen
sumber
6
Metode imajinatif! Anda dapat menyimpan byte dengan (!!)$show.(10^)=<<[0..].
xnor
20

Python , 24 byte

lambda n:(8*n+1)**.5%1>0

Cobalah online!

Output Falseuntuk angka segitiga, Truesisanya. Cek apakah 8*n+1kuadrat sempurna. Python akan mengambil kuadrat sempurna untuk mengapung float integer tidak peduli seberapa besar, jadi tidak ada masalah floating-point.

Tidak
sumber
3
(1<<10000)**.5: OverflowError: int terlalu besar untuk dikonversi menjadi float
isaacg
@isaacg Tantangan tidak membutuhkan input sebesar itu: "Anda dapat berasumsi bahwa input tersebut adalah bilangan bulat positif di bawah 10 ^ 6"
trichoplax
1
@trichoplax Saya pikir saya membantah klaim xnor dalam teks. Pengajuan itu baik-baik saja, saya setuju.
isaacg
13

Jelly , 4 byte

R+\ċ

Cobalah online!

Bagaimana?

R+\ċ - Main link: n
R    - range(n)   -> [1,2,3,...,N]
  \  - cumulative reduce by:
 +   -   addition -> [1,3,6,...,T(N)]
   ċ - count occurrences of right (n) in left -> 1 if triangular, 0 otherwise
Jonathan Allan
sumber
Saya terkejut pengurangan kumulatif tidak secara otomatis membuat rentang. Apakah ada pilihan desain di balik ini?
ETHproduksi
Saya tidak 100% yakin, tapi saya pikir itu akan (setidaknya saat ini) perlu dikurangi dengan operasi diad yang akan menyebabkan kisaran harus dibuat.
Jonathan Allan
... sebenarnya bahkan itu tampaknya tidak berlaku (misalnya ini vs ini . Tampaknya implementasi quicklink menimpa sedemikian rupa sehingga iterable tidak membuat rentang bahkan jika operasi diad mendefinisikannya untuk melakukannya untuk sebuah argumen. Pinged Dennis to field yang ini :)
Jonathan Allan
@ ETHproductions /dan \mungkin di antara lima quicks pertama yang akan diterapkan, mendahului ide untuk melemparkan argumen integer ke range.
Dennis
13

Retina , 10 byte

(^1|1\1)+$

Masukan dalam bentuk unary. Output adalah 0atau 1.

Cobalah online! (Sebagai rangkaian uji coba yang melakukan konversi desimal ke unary untuk kenyamanan.)

Penjelasan

Ini adalah latihan paling mendasar dalam referensi ke depan. Kebanyakan orang terbiasa dengan referensi-ulang di regex, misalnya (.)\1untuk mencocokkan karakter yang diulang. Namun, beberapa dari rasa yang lebih maju memungkinkan Anda untuk menggunakan referensi balik sebelum atau di dalam grup yang dimaksud. Dalam hal ini, biasanya disebut referensi-maju. Ini masuk akal jika referensi diulang. Ini mungkin tidak didefinisikan dengan baik pada iterasi pertama, tetapi pada iterasi berikutnya, kelompok yang lebih baru atau sekitarnya telah menangkap sesuatu dan dapat digunakan kembali.

Ini paling sering digunakan untuk menerapkan pola berulang pada string unary. Dalam hal ini, kami mencoba mencocokkan input sebagai jumlah dari bilangan bulat berturut-turut:

(        # This is group 1, which we'll repeat 1 or more times.
  ^1     #   Group 1 either matches a single 1 at the beginning of the string.
|        # or
  1\1    #   It matches whatever the previous iteration matched, plus another
         #   1, thereby incrementing our counter.
         # Note that the first alternative only works on the first iteration
         # due to the anchor, and the second alternative only works *after*
         # the first iteration, because only then the reference is valid.
)+
$        # Finally, we make sure that we can exactly hit the end of the
         # string with this process.
Martin Ender
sumber
1
Kenapa tidak (^|1\1)+$berhasil?
Leaky Nun
3
@LeakyNun mesin regex memiliki optimasi bahwa mereka berhenti mengulangi grup jika kosong n kali di mana n adalah minimum dari kuantifier yang Anda gunakan (dalam kasus Anda 1; jika minimum adalah 0, itu akan dicoba sekali lagi) . Jika Anda mengubah +ke {2,}, itu harus berfungsi. Optimasi ini mencegah loop tak terbatas tetapi juga satu-satunya hal yang membuat .NET regex menjadi Turing-selesai sendiri.
Martin Ender
Ini baru saja menyelamatkan saya 70 byte: codegolf.stackexchange.com/a/118387
Neil
Buat 74 byte, terima kasih \G!
Neil
8

Mathematica, 16 byte

OddQ@Sqrt[1+8#]&

Pada dasarnya port dari solusi Python xnor . Output Trueuntuk angka segitiga, Falsejika tidak.

ngenisis
sumber
7

JavaScript (ES6), 30 27 byte

Disimpan 2 byte berkat kamoroso94

f=(n,k)=>n>0?f(n+~k,-~k):!n

Uji kasus

Versi non-rekursif (ES7), 19 byte

Jawaban Port of Adnan .

x=>(8*x+1)**.5%1==0
Arnauld
sumber
Hanya melihat sekarang bahwa Anda mengedit solusi 19 byte ke dalam jawaban Anda beberapa menit sebelum saya memposting milik saya . Haruskah saya menghapus milik saya? Apa etiket yang diterima secara umum tentang itu?
Shaggy
1
@ Shaggy Saya tidak berpikir itu masalah nyata di sini. Jawaban 'utama' saya benar-benar adalah jawaban rekursif.
Arnauld
Kurangi menjadi 28 byte dengan f=(n,k=1)=>n>0?f(n-k,k+1):!n?
kamoroso94
1
@ kamoroso94 Terima kasih! Diperbarui. Dan byte ketiga disimpan dengan menghilangkan inisialisasi k.
Arnauld
Penggunaan bitwise TIDAK secara elegan sebagai incrementor untuk undefinednilai awalnya ; hasil edit Anda adalah kesenangan untuk dibaca setelah saya secara mandiri tiba di solusi Anda sebelumnya.
apsillers
6

CJam , 11 byte

ri2*_mQ_)*=

Output 1untuk segitiga, 0jika tidak.

Cobalah online!

Penjelasan

Pertimbangkan input 21.

ri               e# Input integer.             STACK: 21
  2*             e# Multiply by 2.             STACK: 42
    _            e# Duplicate.                 STACK: 42, 42
     mQ          e# Integer square root.       STACK: 42, 6
       _)        e# Duplicate, increment.      STACK: 42, 6, 7
         *       e# Multiply.                  STACK: 42, 42
          =      e# Equal?                     STACK: 1
Luis Mendo
sumber
6

Brain-Flak , 40 byte

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

Wheat Wizard dan saya berduel atas pertanyaan ini. Ketika kami memutuskan untuk memposting solusi kami, kami terikat pada 42 byte, tetapi saya menemukan 2 byte golf solusinya. Kami memutuskan bahwa akan dihitung sebagai pemutus dasi (solusi saya di bawah).

Cobalah online!

Penjelasan:

# Set up the stacks like this:  -input
                                     1     -input
                                     1          1
(([{}](((()))<>))<>)                 ^

# Output 1 for triangular and 0 for non-triangular 
{<>({}({}({})))}{}{}

Untuk penjelasan lengkap silakan lihat jawaban Wheat Wizard .


Brain-Flak , 42 byte

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

Keluaran 0\n(baris baru literal) untuk truey, dan string kosong untuk falsy.

Idenya adalah untuk mengurangi 1 lalu 2 kemudian 3 sampai input. Jika Anda menekan 0, maka Anda tahu ini adalah angka segitiga, sehingga Anda bisa berhenti di situ.

Cobalah online! (jujur)
Cobalah online! (palsu)

# Push -input on both stacks. One is a counter and the other is a running total
(([({})])<>)

# Count up from -input to 0
{
  # Push the new total which is: (counter += 1) + total (popped) + input (not popped)
  # This effectively adds 1, then 2, then 3 and so on to the running total
  (({}())<>{}({}))
  # If not 0
  {
    # Push to 0s and switch stacks to "protect" the other values
    ((<>))
  # End if
  }
  # Pop the two 0s, or empty the stack if we hit 0
  {}{}
# End loop
}

Inilah solusi 46 byte yang menurut saya menarik.

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

Outputs 0\n(baris baru literal) untuk truey, string kosong untuk falsy.

Idenya adalah menghitung mundur dari input dengan angka berurutan, 1 pada satu waktu. Misalnya input - (1) - (1,1) - (1,1,1). Setiap kali kita mengurangi, jika kita belum mencapai 0, kita meninggalkan nilai ekstra di stack. Dengan begitu, jika kita berada di 0 dan masih mengurangi ketika kita pop kita menghapus nilai terakhir pada stack. Jika inputnya berupa angka segitiga, kita akan berakhir tepat pada 0, dan tidak akan memunculkan 0.

Cobalah online! jujur
Cobalah secara online! palsu

# Implicit input (call it I)

# Until we reach 0, or the stack is empty
{
  # Add 1 to the other stack and push it twice. This is our counter.
  <>(({}()))
  # While counter != 0
  {
    # counter -= 1
    ({}[()]
    # if I != 0 
    <>{
      # I -= 1, and push 0 to escape the if
      (<({}[()])>)
    # End if
    }
    # Pop from the stack with I. This is either the 0 from the if, or I
    {}
    # Get ready for next loop End while
    <>)
  # End While
  }
  # Pop the counter that we were subtracting from
  {}<>
# End Until we reach 0, or the stack is empty.
}
Riley
sumber
6

Jelly , 5 byte

×8‘Ʋ

Cobalah online!

Latar Belakang

Biarkan n menjadi input. Jika n adalah bilangan segitiga k , kita miliki

n=k(k+1)2k2+k-2n=0k=12(-1±1+8n),

yang berarti akan ada solusi alami jika dan hanya jika 1 + 8n adalah kuadrat yang aneh dan sempurna. Jelas, memeriksa paritas 1 + 8n tidak diperlukan.

Bagaimana itu bekerja

×8‘Ʋ  Main link. Argument: n

×8     Yield 8n.
  ‘    Increment, yielding 8n + 1.
   Ʋ  Test if the result is a perfect square.
Dennis
sumber
5

PowerShell , 31 30 byte

"$args"-in(1..1e6|%{($s+=$_)})

Cobalah online!

Metode brute force yang bagus dan lambat. Buatlah array dari setiap jumlah 1 hingga 10 6 , dan lihat apakah argumennya ada di sana.

briantis
sumber
5

Brain-Flak , 42 byte

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

Cobalah online!

Penjelasan

Tujuan dari program ini adalah untuk membuat keadaan pada dua tumpukan dan melakukan operasi konstan pada kedua tumpukan sampai salah satu dari mereka nol, kita kemudian dapat output tergantung pada tumpukan kita berada. Ini mirip dengan program yang menentukan tanda angka. Program-program ini memakai nsatu tumpukan dan -nyang lain dan menambahkan satu dan beralih tumpukan sampai salah satu tumpukan adalah nol. Jika nomor itu negatif di tempat pertama tumpukan pertama akan mencapai nol, jika nomor itu positif tumpukan lainnya akan mencapai nol.

Di sini kita membuat dua tumpukan yang mengurangi angka berurutan dari input dan satu yang hanya mengurangi satu. Yang mengurangkan angka berurutan hanya akan berakhir jika angkanya segitiga, (selain itu akan melewati nol dan terus ke negatif). Yang lain akan selalu berakhir untuk setiap angka positif, tetapi akan selalu melakukannya lebih lambat dari yang pertama, sehingga angka-angka non-segitiga akan berakhir pada tumpukan itu.

Jadi bagaimana kita mengatur tumpukan sehingga operasi yang sama mengurangi angka berturut-turut pada satu dan mengurangi satu di yang lain? Pada setiap tumpukan kita memiliki input di atas sehingga dalam dapat diperiksa, di bawah kita memiliki perbedaan dan di bawah itu kita memiliki perbedaan perbedaan. Setiap kali kita menjalankan, kita menambahkan "selisih perbedaan" ke "selisih" reguler dan kurangi dari input. Untuk stack yang memeriksa triangularity, kita atur double difference menjadi 1sehingga kita mendapatkan integer berurutan setiap kali kita jalankan, untuk stack lain kita atur 0sehingga kita tidak pernah mengubah perbedaan, yang selalu tetap 1. Berikut ini adalah bagaimana tumpukan diatur di awal, di mana ninput:

-n  -n
 0   1
 1   0

Ketika kita akhirnya berhenti, kita dapat menggunakan perbedaan ini untuk memeriksa tumpukan mana kita berada, kita pop dua nilai teratas dan kita dapatkan 1untuk nomor segitiga dan 0untuk nomor non-segitiga.


Kode beranotasi

(([{}](<((())<>)>))<>) Set up the stack
{                      While
 <>                    Switch stacks
 ({}({}({})))          Add bottom to second to bottom, add second to bottom to top
}                      End while
{}{}                   Pop the top two values

Berikut adalah solusi 50 byte yang saya suka juga.

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

Cobalah online!

Wisaya Gandum
sumber
5

Cubix , 23 24 25 byte

I1Wq/)s.;0..s;p-?\.+O@u

0 untuk kebenaran dan tidak ada 0 untuk falsey. Brute pasukan dengan menambah counter, menambah jumlah kumulatif dan membandingkan input. Sekarang untuk mencoba dan memasangnya di kubus 2x2x2. Melakukannya!

    I 1
    W q
/ ) s . ; 0 . .
s ; p - ? \ . +
    O @
    u .

Cobalah online!

  • / Refleksikan ke wajah.
  • I10\ dapatkan input integer, tekan 1 (penghitung), tekan 0 (jumlah) dan refleksikan
  • +s;p-lingkaran tubuh. Tambahkan penjumlahan dan penghitung, jatuhkan jumlah sebelumnya, tambah input dan kurangi
  • ? Uji hasil pengurangan tersebut
    • Untuk hasil 0 membawa lurus ke depan \.uO@mencerminkan ke bawah, no-op, putar balik, output dan berhenti.
    • Untuk hasil positif, belok kanan ke wajah bagian bawah dan @berhenti
    • Untuk hasil negatif ;qWs)/su, kurangi pengurangan drop kiri , masukkan input ke bawah, geser ke kiri, penghitung dan penjumlahan swap, penghitung kenaikan, pantulan, penukaran jumlah dan penghitung, putar-U ke badan loop utama.
MickyT
sumber
Jadi sangat menggoda ... byte terakhir akan membutuhkan banyak usaha dan kepintaran.
ETHproduksi
Yap, mengira saya memilikinya tetapi sulit dipahami
MickyT
1
@ ETHproductions menemukan byte
MickyT
Kode Anda dan kubus yang tidak dilipat tampaknya berbeda, sudut kanan bawah adalah .pada kubus tetapi 1dalam kode Anda.
Wheat Wizard
@WheatWizard Terima kasih untuk itu, pengeditan buruk di pihak saya
MickyT
4

05AB1E , 7 6 byte

EDIT : Terima kasih kepada @ Dennis: Menyimpan satu byte karena saya lupa tentang operator kenaikan

8*>t.ï

Cobalah online!

nadalah segitiga jika sqrt(8n + 1)bilangan bulat

Bagaimana itu bekerja

8* # multiply implicit input by 8
  > # add one
   t # sqrt
    .ï # is integer
Neil A.
sumber
Mungkin belum tersedia pada saat itu, tetapi t.ïbisa jadi Ųhari ini, yang merupakan builtin untuk memeriksa apakah angka adalah persegi.
Kevin Cruijssen
4

Perl 6 , 17 byte

{$_∈[\+] 1..$_}

Hanya memeriksa apakah $_, input ke fungsi, sama dengan salah satu elemen pengurangan penambahan segitiga (1, 1+2, ..., 1+2+...+$_).

Sean
sumber
4

Alice , 38 22 byte

Banyak byte yang disimpan berkat Martin dan Leo

/ i \ 2 * .2RE.h * -n / o @

Ada baris baru yang tertinggal. Output 1untuk segitiga, 0jika tidak.

Cobalah online!

Penjelasan

Ini menggunakan pendekatan yang sama dengan jawaban CJam saya , hanya clumsier. Dalam bentuk linier, program menjadi

i2*.2RE.h*-no@

di mana idan osebenarnya dalam mode ordinal.

Pertimbangkan input 21sebagai contoh.

i         Input integer                       STACK: 21
2*        Multiply by 2                       STACK: 42
.         Duplicate                           STACK: 42, 42
2RE       Integer square root                 STACK: 42, 6
.         Duplicate                           STACK: 42, 6, 6
h         Increment                           STACK: 42, 6, 7
*         Multiply                            STACK: 42, 42
-         Subtract                            STACK: 0
n         Logical negation                    STACK: 1
o         Output integer                      STACK:
@         End program
Luis Mendo
sumber
Jawaban Alice pertamaku
Luis Mendo
1
Saya punya perasaan ini bisa dibelah dua dengan salah satu struktur kontrol mewah Martin ...
ETHproduksi
Saya juga ... :-)
Luis Mendo
Golf Alice pertama saya: Kode yang sama, 23 byte
Nitrodon
Layout yang lebih "standar" untuk program semacam ini adalah ini . Yang mengatakan, Anda bisa menyingkirkan 1 pada tumpukan, dan hanya mengeluarkan negasi logis pengurangan (yaitu ...h*-no@)
Leo
4

Japt , 10 7 byte

Disimpan 3 byte berkat @Luke dan @ETHproduksi

*8Ä ¬v1

Cobalah online!

Penjelasan:

*8Ä ¬v1
    ¬    // Square root of:
*8       //   Input * 8
  Ä      //   +1
     v1  // Return 1 if divisible by 1; Else, return 0

õ å+ øU

Penjelasan:

õ å+ øU
õ           // Create a range from [1...Input]
  å+        // Cumulative reduce by addition
     øU     // Does it contain the input?

Cobalah online!

Oliver
sumber
Pertanyaannya meminta dua ouput berbeda konstan.
xnor
*8Ä ¬u1 cuntuk 9B (menghasilkan 0 jika input berbentuk segitiga, 1 jika tidak)
Luke
@ Lukas Anda bisa berubah u1 cmenjadi v1, saya percaya (mengganti output)
ETHproduksi
7 byte? Bagus! Entah bagaimana melewatkan ini saat memposting saya sendiri, solusi serupa mungkin terakhir terakhir. Beri tahu saya jika Anda ingin saya menghapusnya.
Shaggy
4

R , 23 19 byte

Pendekatan serupa dengan jawaban lain. Cek untuk melihat apakah 8x+1kotak yang sempurna.
-4 byte terima kasih Giuseppe dan MickyT.

!(8*scan()+1)^.5%%1

Cobalah online!

Robert S.
sumber
2
Anda dapat menggunakannya !sebagai ganti==0
Giuseppe
Ini ekstra bagus karena ini juga vektor!
Giuseppe
1
Saya pikir Anda dapat menyingkirkan tanda kurung eksterior juga!(8*scan()+1)^.5%%1
MickyT
3

MATL , 5 byte

t:Ysm

Cobalah online!

Penjelasan:

t       % Duplicate input
 :      % Range(1, input)
  Ys    % Cumulative sum. This will push the first *n* triangular numbers
    m   % ismember. Pushes true if the input is contained within the array we just pushed
DJMcMayhem
sumber
Saya akan memposting t:Ys=a. Lupa tentang m:-)
Luis Mendo
1
@LuisMendo saya tidak tahu tentang msampai saya melihat jawaban ini . Lucu bagaimana kedua jawaban itu hampir identik: D
DJMcMayhem
3

Batch, 72 byte

@set/aj=i=0
:l
@if %1% gtr %j% set/aj+=i+=1&goto l
@if %1==%j% echo 1

Keluaran 1 pada kesuksesan, tidak ada pada kegagalan. Berfungsi untuk nol juga, meskipun tidak diminta oleh pertanyaan karena beberapa alasan.

Neil
sumber
3

JavaScript (ES7), 19 18 byte

Dari jawaban saya untuk pertanyaan terkait .

Output falseuntuk angka segitiga atau truenon-segitiga, seperti yang diizinkan oleh OP.

n=>(8*n+1)**.5%1>0

Cobalah

f=
n=>(8*n+1)**.5%1>0
oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>

Shaggy
sumber
Saya pikir Anda bisa menyimpan byte dengan n=>(8*n+1)**.5%1>0(yang akan membalikkan output)
ETHproduksi
@ ETHproductions: OK, selama Anda mengizinkannya. Apakah melakukannya dengan normal?
Shaggy
1
Itu memenuhi syarat sebagai "dua output konstan, berbeda", jadi ya. Tantangan masalah keputusan lain mungkin membutuhkan kebenaran / kepalsuan.
ETHproduksi
3

PHP, 30 Bytes

Mencetak 1 untuk benar dan tidak ada untuk salah

<?=fmod(sqrt(8*$argn+1),2)==1;

Cobalah online!

fmod

PHP, 37 Bytes

Mencetak 1 untuk benar dan tidak ada untuk salah

<?=($x=sqrt($q=2*$argn)^0)*$x+$x==$q;

Cobalah online!

Jörg Hülsermann
sumber
3

Mathematica, 28 byte

!Accumulate@Range@#~FreeQ~#&
J42161217
sumber
Saya sarankan mengganti 7!dengan #. Pertama, lebih pendek; lebih penting lagi, solusi saat ini tidak benar, karena secara artifisial menetapkan batas pada ukuran input yang bekerja.
Greg Martin
1
OP mengatakan: "Anda dapat berasumsi bahwa inputnya adalah bilangan bulat positif di bawah 10 ^ 6". Tapi saya suka ide Anda dan saya akan menerimanya, meskipun saya memberikan hasil yang tepat untuk setiap kasus menggunakan daftar 5040 elemen tetapi kasus terburuk Anda membutuhkan daftar 999999 elemen. Terima kasih atas tipnya!
J42161217
1
Ups maaf, tidak melihat komentar OP! Ya, ada beberapa insentif "jahat" dalam kode golf: penghematan 1 byte lebih penting dalam pertanyaan kode-golf daripada semua efisiensi di dunia :)
Greg Martin
3

Excel, 31 22 byte

9 byte disimpan berkat Octopus

Output TRUEuntuk angka segitiga. Lain FALSE. Cek apakah 8*n+1kuadrat sempurna.

=MOD(SQRT(8*B1+1),1)=0
Wernisch
sumber
1
=MOD(SQRT(8*A1+1),1)=0menghemat beberapa byte
Octopus
2

Brachylog , 5 byte

≥ℕ⟦+?

Cobalah online!

Penjelasan

≥ℕ⟦+?
≥ℕ     There is a number from 0 to {the input} inclusive
  ⟦    such that the range from 0 to that number
   +   has a sum
    ?  that equals the input

sumber
2

Python - 52 byte

Catatan: Saya tahu bahwa dua jawaban Python lainnya jauh lebih pendek, tapi ini adalah cara jadul, lebih merupakan algoritma dengan tangan

n=input();i=s=0
while s<n:s=(i*i+i)/2;i+=1
print s>n
Tuan Xcoder
sumber
2

APL (Dyalog) , 6 byte

⊢∊+\∘

Cobalah online!

Penjelasan

⊢∊+\∘
                       Creates a range from 1 to the right_argument
  +\                    Cumulative sum of this range; 1 1+2 1+2+3 .. 1+2+..+n. These are the triangular numbers
⊢∊                      Does the right argument belong to this list of integers in this cumulative sum

Output 0untuk false dan 1true.

Kritixi Lithos
sumber
2

TI-BASIC, 10 7 byte

-3 terima kasih kepada @ lirtosiast

:not(fPart(√(8Ans+1

Mengambil input aktif X. Cek apakah √(8X+1)bilangan bulat

Scott Milner
sumber
Mengapa tidak not(fPart(√(8Ans+1?
lirtosiast
@ lirtosiast Itu akan berhasil, terima kasih!
Scott Milner