Sekarang kita tahu bagaimana cara membuat kuadrat dan segitiga dengan benar, kita akan belajar bagaimana cara jajar genjang satu. Untuk jajaran genjang suatu angka, pertama-tama kita mengaturnya sebagai jajaran genjang dengan menumpuknya di atasnya sendiri beberapa kali sama dengan jumlah digit yang dimilikinya, dan menambahkan spasi untuk menjadikannya jajaran genjang. Jadi 123
akan membentuk:
123
123
123
Sekarang kita ambil setiap angka horisontal dan vertikal dan menambahkannya 123+123+123+1+12+123+23+3
, yang sama dengan 531
, yang merupakan jajaran genjang 123
.
Tugas Anda:
Tulis program atau fungsi yang, ketika diberi nomor sebagai input, mengembalikan jajaran genjang nomor tersebut.
Memasukkan:
Integer non-negatif, atau integer non-negatif yang diwakili oleh string.
Keluaran:
Paragraf bilangan bulat.
Kasus uji:
1234567 -> 10288049
123 -> 531
101 -> 417
12 -> 39
Mencetak:
Ini adalah kode-golf , skor terendah dalam bytes menang!
Jawaban:
MATL , 12 byte
Input adalah sebuah string. Cobalah online!
Penjelasan
Pertimbangkan input
'123'
sebagai contoh.Kode menduplikasi input (
t
) dan membangun matriks identitas (Xy
) berukuran dua kali panjang input (nE
):lalu membaliknya terbalik (
P
):String input, ditafsirkan sebagai kode ASCII dari digit, setara dengan vektor baris numerik
Konvolusi dua dimensi ukuran penuh (
Y+
) dari vektor dan matriks di atas memberiMenafsirkan angka-angka itu kembali sebagai kode ASCII (
c
) memberikan matriks char berikut, dengan char 0 direpresentasikan sebagai spasi:Transposisi (
!
) mentransformasikannya menjadiMenafsirkan setiap baris sebagai angka (
U
) memberikan vektor kolom angkadan menjumlahkannya (
s
) memberikan hasil akhir531
,.sumber
Retina , 22 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan: Tahap pertama membagi nomor input pada setiap digit dan mencakup semua awalan eksklusif dan akhiran inklusif, memberikan nomor vertikal, ditambah juga nomor input asli yang diulang untuk setiap digit, memberikan angka horizontal. Tahap-tahap selanjutnya hanya menjumlahkan angka yang dihasilkan.
sumber
05AB1E ,
12 118 byteAku
'm yakintahu inibisabisa golfed lanjut - kiat menyambut!-1 byte terima kasih kepada Erik the Outgolfer (hindari wraps tetapi gunakan concatenation)
dan kemudian ...
-3 byte lebih banyak berkat Adnan (hindari perkalian dengan panjang-1 dengan menambahkan vektorisasi dan mengurangi input pada akhirnya)
Cobalah online!
Bagaimana?
sumber
«
untuk menyatukan sufiks dan awalan:g<*¹.s¹η«O+
.s¹η++Oα
seharusnya bekerja selama 8 byteHaskell ,
9078767164635957 byteCobalah online!
sumber
g x=sum[x+div x a+mod x a|(a,_)<-zip((10^)<$>[1..])$show x]
.g x=sum[x+div x(10^a)+mod x(10^a)|(a,_)<-zip[1..]$show x]
adalah rambut yang lebih pendek lagi.g x=sum[x+x`div`10^a+x`mod`10^a|(a,_)<-zip[1..]$show x]
.Sekam ,
1312 byteCobalah online!
Penjelasan
sumber
Neim , 7 byte
Waspadalah. Berisi ular:
S𝐬𝕤
Cobalah online!
sumber
S𝐬𝕤
" Lol ..𝐗𝔻
Python 3 ,
8570 BytesUntuk input 12345:
Ringkas irisan input 1 + 2345 + 12345, 12 + 345 + 12345, 123 + 45 + 12345, 1234 + 5 + 12345, dengan menggunakan pengindeksan string ke indeks (r) = 1,2,3,4 sebelum casting ke integer , dan menambah 12345 * 2
Terima kasih khusus kepada:
-14 Bytes @ Jonathan Allen
-1 Byte @ovs
Cobalah online!
sumber
(len(n)+1)
dapat di-golf ke-~len(n)
(~x
is-1-x
), dan kemudian itu dapat menyimpan byte lain dengan menggunakan-i(n)*~len(n)
. Kemudian Anda dapat menjadikan semuanya sebagai fungsi anonim:lambda n,i=int:sum(i(n[:r])+i(n[r:])for r in range(1,len(n)))-i(n)*~len(n)
(74 byte)f=lambda n,r=1,i=int:n[r:]and i(n[r:])+i(n[:r])+f(n,r+1)or-i(n)*~len(n)
Japt ,
1511 byte-4 byte terima kasih kepada @Shaggy.
Mengambil input sebagai string.
Cobalah online!
Penjelasan
Membagi array input ke digit (
¬
) dan memetakan dengan (£
) fungsi berikut, di mana Y adalah indeks.["1", "2", "3"]
Nilai input (implisit) dengan
Y
spasi (ç
) dimasukkan (i
) di awal. Ini ditugaskan untukU
.["123", " 123", " 123"]
Menggabungkannya dengan itu sendiri diputar 90 ° kanan (
1
waktu). Lalu jumlah (x
).["123", " 123", " 123", " 1", " 12", "123", "23 ", "1 "]
->531
.sumber
Japt ,
3118 byte-13 byte terima kasih kepada @ETHproductions
Pendekatan ini tidak berfungsi dengan baik menggunakan Japt. Solusi Justin jauh lebih baik.
Penjelasan:
Cobalah online!
sumber
Ul
: PU
s di fungsi, dan item tengah dalam array dapat diringkasUå+ x
, yang saya pikir membuat Anda turun ke 23 byte.mx x
kexx
? :-)Ruby ,
6155 + 1 = 56 byteMenggunakan
-n
bendera. Masukan dari STDIN.Cobalah online!
sumber
102033
program Anda mencetak728714
ketika nilai yang benar adalah729702
.02033
adalah masalahnya)JavaScript,
7774 byteDisimpan 3 byte berkat Value Ink
sumber
Pyth ,
2019 bytePendekatan awalan saya saat ini (semoga akan golf lebih lanjut).
Test Suite atau coba pendekatan alternatif dengan jumlah byte yang sama .
Penjelasan
Untuk memahami konsep dengan lebih baik, kita akan mengambil contoh, katakanlah
"123"
.Kami pertama-tama mendapatkan awalan input. Yaitu
['1', '12', '123']
.Kemudian, kita mendapatkan awalan dari input terbalik, yaitu:
['3', '32', '321']
dan membalikkan masing-masing, maka kita dapatkan['3', '23', '123']
.Kami menggabungkan dua daftar dan mengonversikan setiap elemen ke integer, jadi kami memperolehnya
[3, 23, 123, 1, 12, 123]
.Dengan menjumlahkan daftar, hasilnya adalah
285
.Produk
P
adalah panjang input - 1 (yaitu2
) dikalikan dengan representasi integer-nya (2 * 123 = 246
).Pada akhirnya, kami menjumlahkan dua hasil
285 + 246
:, maka kami memperoleh531
, yang merupakan hasil yang benar.Pyth , 20 byte
Test Suite.
Penjelasan
Penjelasan yang akan datang setelah bermain golf lebih lanjut.Saya tidak berhasil bermain golf lebih jauh untuk saat ini (saya punya ide).sumber
q / kdb +, 34 byte
Larutan:
Contoh:
Penjelasan:
sumber
Jelly , 18 byte
Cobalah online!
sumber
Swift 3 , 213 byte
Tidak dapat diuji secara online, karena lambat dan waktu habis. Anda dapat mencobanya di Swift Playgrounds jika Anda ingin mengujinya.
Contoh dijalankan
Memasukkan:
Keluaran:
sumber
Jelly , 12 byte
Cobalah online!
Mengambil input sebagai string. Membuat "jajaran genjang" sebagai matriks karakter, lalu mengevaluasi setiap baris dan kolom untuk mendapatkan jumlah penjumlahan.
Penjelasan
sumber
C (gcc) ,
958481 byte (78 +-lm
flag compiler)Hai! Ini adalah pengiriman pertama saya, saya harap saya tidak melanggar aturan apa pun.
Cobalah online!
Tidak disatukan, tanpa peringatan:
sumber
-lm
untuk fungsi matematika hanya diperlukan untuk beberapa runtime C seperti misalnyaglibc
. Kompilasi misalnya dengan MinGW (menggunakan Microsoftmsvcrt.dll
), itu tidak diperlukan. Jadi tidak yakin harus menambahkan di sini? Bagaimanapun, jika Anda menambahkannya, itu akan menghasilkan 3 byte;)-lm
diperlukan untukpow()
fungsi dengan gcc. Saya mencoba untuk bekerja tanpa itu tetapi tidak dapat menemukan solusi menggunakan kurang dari 6 byte (pow + flag compiler). Saya tidak dapat menemukan aturan tentang cara memasukkan bendera ke dalam bytecount, dan saya tahu menyadari bahwa saya membuat asumsi yang salah tentang-
karakter yang tidak dihitung. Saya menambahkan +1 byte sekarang.-lm
tidak diperlukan olehgcc
tetapi oleh fakta yangglibc
tidak termasuk fungsi matematika di perpustakaan utama.msvcrt.dll
tidak, jadi kompilasi pada windows dengangcc
karya tanpa-lm
. Ini adalah nitpicking dan saya tidak sepenuhnya yakin apa aturan tentang ini sebenarnya katakan.Java 8,
147137126116114 bytes-13 byte (137 → 126 dan 116 → 114) terima kasih kepada @ OlivierGrégoire .
Penjelasan:
Coba di sini.
sumber
n->{Integer l=(n+"").length(),s=n*l,i=0;for(;++i<l*2;)s+=l.valueOf((n+"").substring(l<i?i-l:0,i<l?i:l));return s;}
. Ini adalah jendela geser dengan min-max untuk mengurangi jumlah panggilan ke yang mahalnew Integer(....substring(...))
Math.max(0,i-l)
ke0>i-l?0:i-l
danMath.min(i,l)
kei>l?l:i
. Memodifikasi sekarang. Ah, saya melihat Anda telah mengedit komentar Anda setelah saya menyalin jawaban 126 byte. ;)R ,
168162103 byte-6 byte dengan tidak menggunakan c ()
-59 byte terima kasih kepada @Giuseppe
Cobalah online!
Mengambil input sebagai string.
Saya benar-benar yakin ada perbaikan yang harus dilakukan, terutama dalam memanfaatkan salah satu kekuatan R ... tetapi dalam sebuah tantangan yang pada dasarnya memanipulasi string, saya berjuang untuk melihat bagaimana.
Sunting: Jauh lebih baik sekarang karena saya tidak mengulangi ide yang buruk!
sumber
substr
secara eksplisit, bukan perulangan, yang akan menghemat beberapa byte.Perl 5 , 53 + 1 (-n) = 54 byte
Cobalah online!
sumber
Mathematica, 77 byte
sumber