Bisakah Anda mengalahkan saya? (Bagian perampok)


43

Bagian perampok

Bagian polisi dapat ditemukan di sini .

Tantangan

Tugas Anda adalah untuk mengalahkan pengajuan polisi dalam bahasa yang sama dan versi yang sama (misalnya, Python 3.5Python 3.4 , sehingga tidak diperbolehkan). Kiriman dikalahkan ketika panjang dalam byte lebih pendek dari kiriman asli. Anda hanya perlu melepas setidaknya 1 byte untuk memecahkan kiriman. Misal jika tugasnya adalah menjalankan 2 × n , dan pengirimannya adalah sebagai berikut:

print(2*input())

Anda bisa mengalahkan polisi dengan melakukan hal berikut:

print 2*input()

Atau bahkan ini (karena lambda diperbolehkan):

lambda x:2*x

Posting ini dengan tajuk berikut:

##{language name}, <s>{prev byte count}</s> {byte count}, {cop's submission + link}

Sebagai contoh:

Python 2, 16 12 byte, Adnan (+ tautan ke kiriman)

lambda x:2*x

Menghitung A005843 , (offset = 0).

Jika demikian, Anda telah memecahkan kiriman.

Mencetak gol

Orang dengan siapa yang paling banyak mengirimkan kiriman adalah pemenangnya.

Aturan

  • Pengajuan crack harus dalam bahasa yang sama dengan pengajuan polisi.
  • Input yang sama harus menghasilkan output yang sama (jadi a (2) = 4 harus tetap 4).
  • Untuk bahasa seperti Python, Anda bisa mengimpor pustaka yang termasuk dalam bahasa standar. (Jadi, tidak ada numpy / sympy dll.)
  • Input dan output keduanya dalam desimal (basis 10).

Catatan

Tantangan ini selesai. Pemenang bagian Perampok adalah feersum . Skor akhir untuk CnR ditunjukkan di bawah ini:

  • feersum : 16 celah
  • Dennis : 12 retak
  • Leaky Nun : 6 celah
  • Lynn : 4 retakan
  • miles : 3 celah
  • Martin Ender : 2 celah
  • Emigna : 2 retak
  • jimmy23013 : 1 retak
  • Sp3000 : 1 retak
  • randomra : 1 retak
  • alephalpha : 1 retak
  • nimi : 1 retak
  • Semangka Destructible : 1 retak
  • Dom Hastings : 1 crack

Jawaban:


8

Cheddar, 7 6 byte, Downgoat

(<<)&1

Ini sepertinya berhasil, tetapi selalu mungkin bahwa saya tidak mengerti bahasanya dengan benar.


Atau (**)&2,. Saya mencoba 2&(**)dan gagal. :(
Dennis

@ Dennis (**)&2bekerja dengan baik untuk saya: / tapi ini juga berfungsi.
Downgoat

14

Jelly ,54 byte , George V. Williams

RÆḊḞ

Coba di sini.

Fitur tersembunyi!

Jika saya ingat dengan benar, ÆḊ(A) = sqrt (det (AA T )) adalah n! kali pengukuran Lebesgue dimensi n dari simpleks yang dibentuk oleh titik input n dan asal dalam ruang dimensi m. Ketika n = 1 itu merosot ke jarak Euclidean. Tidak aneh setelah semua ...


1
Benar, saya melakukan sesuatu yang aneh dengan faktor-faktor penentu ... Sangat tersembunyi sehingga saya tidak dapat menemukannya sendiri!
Dennis

@ Dennis Saya tahu ini karena suatu hari saya mencoba untuk memperluas determinan juga, dan itulah yang Anda dapatkan jika Anda ingin itu berfungsi sebagai produk silang. Tapi saya butuh waktu lama karena saya pikir itu mungkin aneh juga dan tidak berharap seseorang datang dengan hal yang sama ...
jimmy23013

Bisakah ini benar-benar dianggap "byte?" Poin kode untuk dan berada dalam kisaran UTF-16. Itu akan membuat solusi ini 6 byte dengan asumsi pengkodean heterogen, dan 8 byte dengan asumsi pengkodean homogen. Bertanya jujur ​​di sini.
Jules


11

Hexagony , 91 33 byte, Biru

1""?{\>{+/</+'+./_'..@'~&/!}'+=($

Dibuka:

    1 " " ?
   { \ > { +
  / < / + ' +
 . / _ ' . . @
  ' ~ & / ! }
   ' + = ( $
    . . . .

Cobalah online!

Masih terlihat agak golf, tetapi saya pikir saya akan mempostingnya sebelum FryAmTheEggman mengalahkan saya untuk itu. ;)

Penjelasan

Berikut adalah beberapa jalur eksekusi kode warna:

masukkan deskripsi gambar di sini

Namun, ini tidak perlu berbelit-belit karena bermain golf. Berikut adalah kode yang sama persis dengan tata letak yang lebih waras:

masukkan deskripsi gambar di sini

Itu lebih baik. Dan akhirnya, di sini adalah diagram memori, di mana panah merah menunjukkan posisi awal dan orientasi penunjuk memori (MP):

masukkan deskripsi gambar di sini

Intinya adalah bahwa saya iteratif komputasi angka Fibonacci pada tiga tepi berlabel f (i) , f (i + 1) dan f (i + 2) sementara melacak iterator di tepi A , B dan C . Sambil melakukan itu, peran dari tepi ini ditukar secara siklis setelah setiap iterasi. Mari kita lihat bagaimana ini terjadi ...

Kode dimulai pada jalur abu-abu yang melakukan beberapa pengaturan awal. Perhatikan bahwa f (i) sudah memiliki nilai awal yang benar sebesar 0.

1   Set edge f(i+1) to 1.
""  Move the MP to edge A.
?   Read input n into edge A.
)   Increment n.

Sekarang jalur hijau adalah loop utama. _dan >hanya cermin.

(     Decrement n.
<     If the result is zero or less, continue on the red path, otherwise
      perform another iteration of the main loop.
{     Move the MP to edge f(i+2).
+     Add edges f(i) and f(i+1) into this edge, computing the next Fibonacci number.
'     Move the MP to the edge opposite A.
~     Multiply by -1 to ensure that it's non-positive (the edge may have a positive
      value after a few iterations).
&     Copy the current value of n from A.
'     Move back and to the right again.
+     Copy n by adding it to zero. Since we know that the other adjacent edge
      is always zero, we no longer need to use ~&.
'+'+  Repeat the process twice, moving n all the way from A to B.
=     Reverse the orientation of the MP so that it points at f(i) which now
      becomes f(i+2) for the next iteration.

Dengan cara ini, MP bergerak di sekitar triplet sisi dalam, menghitung angka Fibonacci berturut-turut hingga nmencapai nol. Kemudian akhirnya jalur merah dijalankan:

{}    Move the MP to f(i).
!     Print it.
@     Terminate the program.

Diagram yang dihasilkan dengan HexagonyColorer dan EsotericIDE Timwi .


Astaga! Saya berharap untuk dikalahkan oleh Anda tetapi tidak saya banyak! 0.o
Biru

@Biru Apakah Anda berencana untuk menambahkan penjelasan kepada Anda? Saya tertarik dengan cara kerjanya. :) Saya akan menambahkan penjelasan untuk ini juga cepat atau lambat, tetapi saya tidak yakin saya akan menemukan waktu hari ini.
Martin Ender

Ya, saya menggunakan metode perhitungan yang lebih tradisional. Saya benar-benar lupa tentang &, yang bisa menyelamatkan beberapa byte
Biru


7

Stack Cats, 14 13 byte, feersum

^]T{_+:}_

dengan -nmbendera untuk +4 byte. Cobalah online!

Oke, loop itu gila. Aku mencoba beberapa pendekatan, seperti kasar memaksa lebih dari satu alfabet berkurang dan kasar memaksa 3x+2atau 5x+4dan mencoba untuk memperpanjang itu, tapi aku tidak pernah berharap solusi untuk benar-benar mengandung satu lingkaran.

Cara terbaik untuk melihat bagaimana ini bekerja adalah dengan menambahkan Dflag untuk debugging (jadi jalankan dengan -nmD) dan nyalakan debug untuk tautan TIO di atas. Sebuah {}loop mengingat bagian atas stack di awal loop, dan keluar ketika bagian atas stack adalah nilai itu lagi. Bagian dalam loop melakukan pengurangan yang menyenangkan dan bersepeda dari tiga elemen teratas stack, yang merupakan cara loop dijalankan untuk banyak iterasi.


6

Sesos, 14 11 byte, Leaky Nun

Menghitung n 2 . Coba di sini.

Hex dump:

0000000: 16c0f7 959d9b 26e83e ce3d                         ......&.>.=

Dari perakitan:

set numin
set numout
get
jmp
  jmp, sub 1, fwd 1, add 1, fwd 1, add 2, rwd 2, jnz
  fwd 2, sub 1
  rwd 1, sub 1
  jmp, sub 1, rwd 1, add 1, fwd 1, jnz
  rwd 1
jnz
fwd 2
put

Bagus, Anda bahkan lebih pendek daripada versi golf asli saya.
Leaky Nun

Ini menghitung 1 + 3 + … + (2n–1)bukannya n × n:)
Lynn

Saya juga menggunakan pendekatan Anda
Leaky Nun

6

Sayangnya, 776 759 byte, Semangka Destructible

| |||||||| | |
|| |||||| |
||| |||| |
|||| || |
||||| || |
|||| |||| |
||| |||||| |
|| |||||||| |
| |||||||||| |
|| |||||||| |
||| ||||||| |
||||||||||| |
||||||||||| |
||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
||||||||| |
||||||||| |
||||||||| |
|||||||||| |
||||||||||| |
|||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
|||||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| |
| |
| |
|| |
|| |
|| |
|| |
|| |
| |
| |
| |
|| |
||| |
|||| |
||||| |
|||||| |
||||||| |
|||||| |
||||||| |
|||||||| |
||||||||| |
|||||||||| |
||||||||||| |
|||||||||||| |
||||||||||| |
|||||||||| |
||||||||| |
|||||||| |
||||||| |
|||||| |
||||| |
|||| |
||| |
|| |
| |
| |
| |
| |
|| |
| |
|| |
||| |
||| |
|||| |
||| |
|| |
| |
| |
| |
|| |
|| |
|| |
|| |

Saya mencoba membaca kode sumber untuk bahasa ini tetapi terlalu membingungkan. Untuk satu hal, ip[1]adalah nomor baris sedangkan ip[0]nomor kolom, sedangkan cpkoordinat digunakan sebaliknya. Namun, terkadang nilai cpditugaskan untuk ip. Saya menyerah untuk mencoba memahami apa yang sedang dilakukan program dan menemukan cara untuk menyandikan urutan instruksi yang sama menggunakan lebih sedikit bilah.



5

J, 17 12 byte, mil

+/@(]!2*-)i:

Sama seperti aslinya hanya lebih golf. :)

i:memiliki +1jangkauan dibandingkan dengan i.berguna (dan aneh). Jika Anda menggunakan di i.sini n=0akan salah tetapi untungnya i:menyelesaikannya.

Cobalah online di sini.


Trik rapi dengan i:menjadi nol untuk nilai negatif. Versi saya adalah +/@(]!2*-)i.,].
mil

5

M, 10 6 byte, Dennis

R×\³¡Ṫ

Mengingat n , itu menghitung n th -tingkat faktorial dari n . Ini adalah latihan yang menyenangkan!

Kode ini mampu berjalan sebagai Jelly sehingga Anda dapat mencobanya online .

Penjelasan

R×\³¡Ṫ  Input: n
R       Create the range [1, 2, ..., n]
   ³¡   Repeat n times starting with that range
 ×\       Find the cumulative products
     Ṫ  Get the last value in the list
        Return implicitly


5

Haskell, 15 14 byte, xnor

until odd succ

Saya menghabiskan beberapa jam tanpa hasil belajar menguraikan sintaks "sia-sia" ... untilSaya malah menemukan ini.

Atau untuk 13 byte yang tidak terlalu lembut until odd(+1),.


Bagus sekali, inilah yang ada dalam pikiran saya. Saya suka tiga kata.
xnor

4

Python 2, 43 40, xsot

g=lambda n:n<2or-~sum(map(g,range(n)))/3

Menarik, ini berbeda dari yang saya miliki semula.
xsot

4

Pyke, 11 9 byte, ikan lumpur

hVoeX*oe+

Coba di sini!

Bagaimana itu bekerja

          Implicit input: n (accumulator), n (iterations)
h         Increment the number of iterations.
 V        Do the following n + 1 times.
  o         Iterator. Pushes its value (initially 0) and increments it.
   e        Perform integer division by 2.
            This pushes 0 the first time, then 1, then 2, etc.
    X       Square the result.
     *      Multiply the accumulator and the result.
      oe    As before.
        +   Add the result to the accumulator.
            This sets the accumulator to a(0) = 0 in the first iteration and
            applies the recursive formula in all subsequent ones.

Dengan menggunakan metode itu Anda bisa mendapatkan 8 dengan hV~oX*o+. Jawaban 5 byte saya adalahSDmX^
Biru

Ah, ~orapi. Saya tidak tahu apa yang SDmX^terjadi.
Dennis

Ini pada dasarnya menggunakan percakapan basis campuran pada kisaran 1-diindeks terhadap kuadrat itu. Bukan sesuatu di OEIS
Biru

Oh, apakah mhanya memengaruhi Xdan bukan ^? Itu sangat menjelaskan.
Dennis

Ya, mdan sejenisnya hanya menggunakan node berikutnya. Ada komentar di dokumen saya dll?
Biru

4

05AB1E , 7 4, Emigna

LnOx

Dari rumus untuk jumlah kuadrat dari bilangan bulat positif 1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2 = n (n + 1) (2 * n + 1) / 6, jika kita mengalikan kedua sisi dengan 2 kita mendapatkan Sum_ {k = 0..n} 2 * k ^ 2 = n (n + 1) (2 * n + 1) / 3, yang merupakan formula alternatif untuk urutan ini. - Mike Warburton (mikewarb (AT) gmail.com), 08 Sep 2007


Saya senang Anda memecahkannya di 4 karena ada modifikasi sepele dari publik saya yang saya lewatkan. Bagus!
Emigna

4

Jelly, 22 21 byte, Dennis

_²×c×Ḥc¥@÷⁸÷’{S
‘µR+ç

Saya menghabiskan beberapa jam membaca kode sumber Jelly untuk yang terakhir, jadi saya mungkin juga menggunakan "skill" ini untuk digunakan. Saya harap @Dennis akan berbagi dengan kami penemuan matematikanya yang memungkinkan formula yang lebih pendek (dengan asumsi ada sesuatu dan tidak hanya trik Jelly yang aneh!).


Sebagai perbandingan, saya punya: `'_c_ × c @ + ¥ \ nr0ç @ €:' + \ S
Sp3000

@ Sp3000 Oh, kenapa kamu tidak mempostingnya?
feersum

Lebih banyak waktu untuk memikirkan 6 sebelum Dennis memposting ulang dalam M: P
Sp3000

4

J, 20 19 byte, mil

[:+/2^~+/@(!|.)\@i.

Ini menghitung produk sebagai jumlah angka Fibonacci kuadrat, yang dihitung sebagai jumlah koefisien binomial.

Untungnya, @miles sendiri memposting kode untuk menghasilkan angka Fibonacci dalam komentar ini .


4

Acc !! , 526 525 byte, DLosc

N
Count x while _%60-46 {
(_+_%60*5-288)*10+N
}
_/60
Count i while _/27^i {
_+27^i*(_/27^i*26-18)
}
_*3+93
Count i while _/27^i/27%3 {
_-i%2*2+1
Count j while _/3^(3*j+2-i%2)%3 {
_+3^(1+i%2)
Count k while _/3^(3*k+1+i%2)%3-1 {
_+3^(3*k+1+i%2)*26
}
}
}
Count i while _/27^i/3 {
_-_/27^i/3%27*27^i*3+_/3^(3*i+1+_%3)%3*3
}
_/3
Count i while _/100^i {
_*10-(_%100^i)*9
}
Count i while _/100^i/10 {
_+_/100^i/10%10
Count j while i+1-j {
_+(_%10-_/100^(j+1)%10)*(100^(j+1)-1)
}
}
_/100
Count j while _/100^j {
Write _/100^j%10+48
}

Saya tidak tahu bagaimana ini bekerja, tetapi saya bisa melihat perbaikan kecil.

24c24
< _+_/100^i*100^i*9
---
> _*10-(_%100^i)*9

Ah, tembak. Saya berharap tidak ada yang akan menangkap golf matematika yang saya lewatkan. +1
DLosc

4

Haskell, 10 byte, xnor

gcd=<<(2^)

Contoh penggunaan: map ( gcd=<<(2^) ) [1..17]-> [1,2,1,4,1,2,1,8,1,2,1,4,1,2,1,16,1].

Cara kerjanya: Dari halaman Oei kita melihat bahwa a(n) = gcd(2^n, n)atau ditulis dalam sintaks Haskell: a n = gcd (2^n) n. Fungsi dengan pola f x = g (h x) xdapat berubah ke titik-gratis melalui fungsi =<<: f = g =<< h, maka gcd=<<(2^)yang diterjemahkan kembali ke gcd (2^x) x.


............... Bagaimana
TuxCrafting





3

MATL, 11 10 byte, Luis Mendo

YftdAwg_p*

Alih-alih melakukan -1 ^ panjang (array) itu mengkonversi elemen ke nilai Boolean (yang selalu 1), meniadakan mereka, dan mengambil produk dari elemen.




3

Brachylog, 11 10 bytes, Fatalkan

yb:AcLrLc.

Cobalah online!

Penjelasan

Brachylog adalah bahasa yang diturunkan dari Prolog, yang kemampuan terbesarnya adalah untuk membuktikan banyak hal.

Di sini, kami membuktikan pernyataan ini:

yb:AcLrLc.
yb:AcL       Inclusive range from 1 to input, concatenated with A, gives L
     LrL     L reversed is still L
       Lc.   L concatenated is output

Inilah jawaban tepat yang ada dalam pikiran saya, bagus sekali!
Fatalkan

3

Jelly, 9 8 byte, Dennis

œċr0$L€Ḅ

Maaf! Saya tidak dapat menemukan solusi yang Anda maksudkan.

Ini bergantung pada fakta bahwa C(n+k-1, k)ada sejumlah cara untuk memilih knilai dari ndengan penggantian.

Catatan: Ini tidak efisien karena menghasilkan set yang mungkin untuk menghitungnya, jadi cobalah untuk menghindari menggunakan nilai besar n online.

Cobalah online atau Verifikasi hingga n .

Saya kemudian menemukan versi 8 byte lain yang cukup efisien untuk menghitung n = 1000. Ini menghitung nilai menggunakan koefisien binomial dan menghindari menghasilkan daftar.

Ḷ+c’Ṛ;1Ḅ

Cobalah online atau Verifikasi hingga n .

Penjelasan

œċr0$L€Ḅ  Input: n
  r0$     Create a range [n, n-1, ..., 0]
œċ        Create all combinations with replacement for
          (n, n), (n, n-1), ..., (n, 0)
     L€   Find the length of each
       Ḅ  Convert it from binary to decimal and return

Ḷ+c’Ṛ;1Ḅ  Input: n
Ḷ         Creates the range [0, 1, ..., n-1]
 +        Add n to each in that range
   ’      Get n-1
  c       Compute the binomial coefficients between each
    Ṛ     Reverse the values
     ;1   Append 1 to it
       Ḅ  Convert it from binary to decimal and return


3

QBasic, 30 29 byte, DLosc

INPUT n:?(n MOD 2)*(n+.5)+n/2

Bagus! (Meskipun tidak sesuai dengan yang saya miliki.)
DLosc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.