Tantangan
Mengingat string seperti Hello World!
, memecahnya menjadi nilai-nilai karakter: 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33
.
Kemudian menghitung perbedaan antara masing-masing pasangan berturut-turut karakter: 29, 7, 0, 3, -79, 55, 24, 3, -6, -8, -67
.
Akhirnya, jumlah mereka dan mencetak hasil akhir: -39
.
Aturan
- Celah standar berlaku
- Tidak menggunakan fungsi yang dibuat sebelumnya yang melakukan tugas yang tepat ini
- Solusi kreatif didorong
- Selamat bersenang-senang
- Ini ditandai sebagai kode-golf , jawaban terpendek dalam byte menang tetapi tidak akan dipilih.
code-golf
string
number
arithmetic
array-manipulation
dkudriavtsev
sumber
sumber
Jawaban:
Python, 29 byte
Jumlah perbedaan membentuk deret teleskopik, sehingga sebagian besar puncak membatalkan dan
(s 1 - s 0 ) + (s 2 - s 1 ) + ... + (s n-1 - s n-2 ) + (s n - s n-1 ) = s n - s 0 .
Jika mengambil string byte sebagai input diperbolehkan
akan bekerja dengan baik selama 19 byte .
Uji keduanya pada Ideone .
sumber
MATL , 2 byte
Cobalah online!
Penjelasan:
d
dapatkan perbedaan antara karakter berturut-turut dans
jumlah array yang dihasilkan. Kemudian, nilai di atas tumpukan dicetak secara implisit. Tidak banyak lagi yang bisa dikatakan tentang itu.Cukup menarik, meskipun Dennis menemukan jalan pintas yang mengagumkan, menggunakannya akan jauh lebih lama di MATL.
sumber
Jelly , 3 byte
Cobalah online!
Ambil
O
rdinals karakter input string, makaI
ncrements dari daftar itu, makaS
um dari yang daftar.sumber
MATLAB, 16 byte
Hal ini menciptakan fungsi anonim bernama
ans
yang dapat disebut seperti:ans('Hello world!')
.Berikut ini adalah demo online dalam Oktaf yang membutuhkan byte tambahan
+
untuk secara eksplisit mengkonversi string input ke array numerik sebelum menghitung perbedaan elemen-ke-elemen.sumber
Python, 63 byte
Ide itu!
sumber
Cubix , 13 byte
Cubix adalah bahasa 2 dimensi yang melilit kubus.
Uji secara online! Ini memetakan ke jaring kubus berikut:
Di mana IP (penunjuk instruksi) dimulai di kiri atas wajah paling kiri.
Bagaimana itu bekerja
Pertama, IP menyentuh cermin
/
yang mengarahkannya kei
bagian atas. Wajah atas adalah loop yang terus-menerus memasukkan kode-kode hingga EOF tercapai. Ketika input kosong, hasilnyai
-1; IP berbelok ke kiri dari?
, memukul/
sisi paling kanan dan melalui perintah berikut:;
- Pop item teratas (-1).#
- Dorong panjang tumpukan.t
- Pop item teratas dan dapatkan item di indeks itu di stack. Ini menarik item bawah.-
- Kurangi.O
- Output sebagai integer./
- Mengalihkan IP ke@
, yang mengakhiri program.sumber
C #, 22 byte
Kode sumber lengkap dengan test case:
C # dengan LINQ, 17 byte
Versi yang lebih pendek, menggunakan LINQ, terima kasih kepada hstde :
Namun, impor tambahan diperlukan:
sumber
s=>s.Last()-s[0];
akan hanya 17 byteRuby, 23 byte
Tetapkan ke variabel like
f=->s{s[-1].ord-s[0].ord}
dan call likef["Hello World!"]
Menggunakan pengamatan Dennis tentang seri teleskopik.
sumber
$><<
.reticular, 12 byte
Cobalah online!
Menggunakan pengamatan Dennis , kita dapat mempersingkat proses berulang menjadi lebih sederhana.
sumber
Brain-Flak , 51 byte
48 byte kode ditambah tiga byte untuk
-a
flag, yang memungkinkan input ASCII (tetapi output desimal. Seberapa nyaman.: D)Cobalah online!
Yang ini sedikit menggigit lebih keras dari jawaban saya yang lain, haha. Mari kita berjalan melewatinya.
sumber
05AB1E , 3 byte
Cobalah secara Online!
Menggunakan pengodean CP-1252.
Penjelasan
sumber
Brachylog , 7 byte
Cobalah online!
Penjelasan
Karena kurangi hanya berfungsi untuk input dua bilangan bulat, itu akan berhasil setelah awalan yang dipilih
[33, 72]
.sumber
Haskell, 32 byte
sumber
R,
69 4332 byteJawaban yang sangat tidak bersaing meskipun saya pikir akan menyenangkan untuk menampilkan solusi yang mungkin di R.
Satu-satunya aspek yang menarik dari jawaban ini adalah penggunaan
sapply
dancharToRaw
. Pertama-tama saya membagi string menjadi vektor karakter yang ingin saya konversi menjadi representasi integer ASCII-nya. ThecharToRaw
fungsi tidak Vectorized di R dan bukan perulangan lebih setiap nilai dalam tersebut saya gunakan vektorsapply
yang efektif vectorizes fungsi. Selanjutnya ambil perbedaan pertama dan jumlahkan.Sunting: Ternyata
charToRaw
mengubah string menjadi vektor di mana setiap elemen adalah representasi mentah dari setiap karakter, karenanya tidak perlu menggunakanstrsplit
dansapply
Sunting2: Ternyata ada cara yang lebih baik lagi, fungsinya
utf8ToInt(x)
melakukan persis apastrtoi(charToRaw(x),16)
artinya kita dapat menyimpan beberapa byte lagi (Ide diambil dari jawaban @ rturnbull untuk pertanyaan lain):sumber
Perl, 19 byte
Termasuk +1 untuk
-p
Berikan masukan pada STDIN tanpa garis akhir final
slope.pl
:Jika Anda yakin string input memiliki setidaknya 2 karakter, versi 17 byte ini juga berfungsi:
sumber
NodeJS, 82 byte
Penjelasan:
JavaScript, 79 byte
Ide yang sama seperti di atas dengan input fungsi, bukan argumen.
sumber
x
sebagai input. Anda harus benar-benar mendapatkan input.f=x=>{...;return t}
untuk menyimpan 2 byte;)JavaScript ES6,
4239 BytesMenggunakan observasi @ Dennis tentang jumlah teleskop.
Saya pikir dalam hal ini solusi sepele adalah yang terpendek.Disimpan 3 byte dengan menghilangkan
charCodeAt
pengulangan seperti yang disarankan oleh @Neil.sumber
s=>s.slice(-1).charCodeAt()-s.charCodeAt()
yang ternyata memiliki panjang yang sama.charCodeAt
cukup panjang, mungkin ada cara untuk menghemat byte dengan menghindari pengulangan.f=s=>(s[1]?-f(s.slice(-1)):0)-s.charCodeAt()
Keempat, 28 byte
Mengambil daftar karakter pada stack (Metode standar Forth untuk mengambil parameter.) Karakter diambil sedemikian rupa sehingga bagian atas stack adalah karakter pertama dari string. Saya memindahkan bagian bawah tumpukan ke atas, bertukar, lalu kurangi dan cetak. Sampah ditinggalkan di tumpukan, dan hasilnya dicetak ke stdout.
Jika setiap karakter didorong ke tumpukan agar bukan urutan terbalik, program akan lebih pendek 2 byte. Namun, tidak yakin apakah itu diizinkan, karena biasanya Anda mendorong argumen dengan urutan terbalik.
Cobalah online
Disebut seperti ini:
sumber
Jawa, 42
Tidak Disatukan:
Penjelasan:
Ini menggunakan prinsip yang sama dengan telescoping:
Generalisasi untuk setiap urutan karakter dengan panjang
n
, jawabannya adalahc[n-1] - c[0]
karena semua hal di tengah dibatalkan.sumber
PHP 7.1,
3331 byteMenggunakan offset string negatif yang diterapkan dalam PHP 7.1.
Jalankan seperti ini:
Tweaks
$argn
sumber
RProgN , 142 Bytes, Tidak bersaing
Non-bersaing, karena perintah 'tostack' ditambahkan setelah penemuan tantangan ini (meskipun memiliki jumlah byte yang mengerikan)
Uji Kasus
Penjelasan
RProgN adalah bahasa esoterik yang telah saya kerjakan dengan Notasi Polandia Terbalik dalam pikiran. Saat ini cukup verbose, dengan penugasan variabel menjadi 4 karakter, dan semacamnya, namun saya berencana di masa depan menambahkan sedikit gula sintaksis.
Juga, RProgN secara implisit mengakses argumen dari stack, dan mengembalikannya dengan cara yang sama. Setiap data string yang tersisa di tumpukan setelah program selesai, dicetak secara implisit.
sumber
~{bid☼[+
dan itu sedikit menggemaskan.PHP, 36 byte
→ jumlah perbedaan == perbedaan antara karakter pertama dan terakhir
ord()
di PHP beroperasi pada karakter pertama dari string→ tidak perlu menguranginya secara eksplisit menjadi satu karakter
sumber
Brain-Flak ,
3432 + 3 = 35 byte+3 karena
-a
flag diperlukan untuk mode ascii.Cobalah online
Anehnya lebih efisien menggunakan definisi yang digunakan dalam spesifikasi daripada "trik" pengurangan pertama dari yang terakhir.
Ini berfungsi dengan melakukan hal itu.
sumber
CJam ,
85 byteTerima kasih banyak untuk Dennis untuk dua saran yang menghapus 3 byte
Cobalah online!
Penjelasan
Menghitung nilai terakhir dikurangi nilai pertama.
sumber
)
alih-alihW=
, Anda tidak perlu_
. Juga,c
sebagai jalan pintas untuk0=
.Haskell, 36 byte
pemakaian:
Haskell (Lambdabot), 31 byte
sumber
sum.(tail>>=zipWith(-)).map fromEnum
misalnya adalah fungsi.Zsh , 22 byte
Cobalah online!
Dalam mode aritmatika,
#name
dapatkan kode karakter dari karakter pertama diname
. Kami menetapkanc
ke karakter terakhir, dan mengambil perbedaan antara kode pertama dan terakhir.sumber
Haskell , 30 byte
Cobalah online!
Kurangi nilai ordinal karakter terakhir dari yang pertama.
sumber
Haskell, 61 byte
sumber
Java 7,
10096 byteTidak digabungkan & kode uji:
Coba di sini.
Keluaran:
-39
sumber
Clojure, 31 byte
Seseorang telah mengurangi tugas menjadi satu operasi.
sumber