pengantar
Menara lonceng akan membunyikan bel setiap jam, n
kali, dengan n
menjadi jam saat ini pada jam 12 jam.
Misalnya, bel akan berdering 5 kali pada jam 5 sore, dan 10 kali pada jam 10 pagi.
Tugas
Diberikan dua kali dalam format yang sesuai, menampilkan berapa kali bel akan berdering, termasuk waktu mulai dan akhir
Contohnya
"10am-12pm"
10+11+12= 33
[01:00, 05:00]
1+2+3+4+5 = 15
[11, 15]
11+12+1+2+3 = 29
[10:00pm, 10:00am]
10+11+12+1+2+3+4+5+6+7+8+9+10 = 88
Jika awal sama dengan akhir maka Anda hanya cukup jumlah lonceng untuk jam itu:
[5pm, 5pm]
5 = 5
Seperti yang Anda lihat, Anda dapat memilih metode input tetapi output harus berupa bilangan bulat sendiri (atau alternatif yang dapat diterima) mengikuti / memimpin baris baru dan spasi diizinkan.
catatan:
- input dapat berkisar dari sore hari sampai pagi hari berikutnya.
- perbedaan antara dua kali tidak akan pernah lebih dari 24 jam.
- input fleksibel selama Anda jelas menyatakan apa format input Anda.
- input Anda harus memiliki perbedaan yang jelas antara AM dan PM.
pm
keam
, sehingga beralih ke hari ke-2.Jawaban:
JavaScript (ES6),
3835 byteSecara rekursif menambahkan jumlah bel berbunyi saat ini ke total. Disebut seperti
f(11,15)
; tengah malam direpresentasikan sebagai24
. Saya mendapat bagian dari~-
trik dari jawaban Python @ xnor .Cuplikan tes
Tampilkan cuplikan kode
Versi non-rekursif (Firefox 30+), 56 byte
Setara dengan fungsi ES6 berikut:
sumber
Python 2, 46 byte
Berdasarkan jawaban JS saya. Rumus rekursif f untuk solusi didefinisikan sebagai:
sumber
Python 2,
Setara dengan5954 bytesumber
a=
bagian itu.a=
. Itu diizinkan menjadi lambda murni.y%24
.05AB1E , 13 byte
Dengan banyak bantuan dari Emigna .
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
Python, 42 byte
Sebuah fungsi rekursif yang mengambil dua angka 0 sampai 23. Memperluas
~x
's untuk-x-1
memberikanEkspresi
(a+1)%12+1
mengubah waktu ke jumlah dering1
ke12
. Kemudian, batas bawah ditambah modulo 24 dan fungsi untuk hasil rekursif ditambahkan. Yaitu, kecuali jam saat ini adalah jam akhir, dalam hal ini kita berhenti.Saya telah mencoba untuk menulis solusi aritmatika murni, tetapi sejauh ini saya hanya menemukan ekspresi yang panjang dan berantakan.
sumber
or
. Yang bagus!Haskell,
4843 bytePenggunaannya adalah
startHour % endHour
, dengan kedua input diberikan dalam format 24 jam.sunting: menambahkan peningkatan @ xnor, menghemat 5 byte
sumber
e
waktue<s
, Anda bisa memfilter rentangs%e=sum[mod(x-1)12+1|x<-[s..e+24],x<=e||s>e]
. Ini kemudian menyimpan byte untuk pergeseran x turun 1:s%e=sum[mod x 12+1|x<-[s-1..e+23],x<e||s>e]
.C #, 73 byte
Input yang dapat diterima: bilangan bulat dalam kisaran [0,23].
Solusi ini tidak menggunakan LINQ.
Program lengkap dengan uji kasus:
sumber
Jelly ,
17 16 1514 byteTryItOnline
Bagaimana?
sumber
MATL , 14 byte
Format input seperti pada contoh ketiga dalam tantangan, yaitu dua angka dalam format 24 jam.
Cobalah online!
Penjelasan
Ambil input
22
,10
sebagai contoh.sumber
PHP, 90 Bytes
Masukkan format '[1,24]' antara 1 dan 24
Dalam tantangan ini saya benci mengapa PHP kalah terhadap bahasa lain. Saya lebih suka menunjukkan semua ide saya. Mungkin PHP Crack lain menemukan solusi yang lebih pendek.
99 Bytes
113 Bytes dengan min dan maks
oke ide gila ini bekerja dengan array 149 Bytes mengisi array
$y[0]
dan$y[1]
jika$_GET["b"][0]<=$_GET["b"][1]
jika$y[1]
adalahnull
kita dapat meringkas array iniarray_diff_key($y[0],array_slice($y[0],$b[1],$b[0]-$b[1]-1,1))
Ini bisa diturunkan 124 Bytes
Sekarang pada titik ini kita dapat mengurangi array dengan hanya dua ints, 101 Bytes, buat 2 jumlah
$x[0]
dan$x[1]
list($f,$g)=$_GET[b];
jika
$v=($f>$g
kemudian menambahkan nilai ke nilai tambah yang$x[$i<$f&$i>$g]
lain untuk$x[$i>=$f&$i<=$g]
output akan ditemukan oleh kasusecho$x[!$v];
Setelah itu saya menemukan cara untuk menghitung hasilnya secara langsung 112 Bytes
rekursif 103 Bytes
sumber
PHP, 69 byte
Ekstraksi daftar diilhami oleh jawaban Jörg Hülsermann tetapi kesamaan lainnya adalah hasil dari evolusi konvergen dan karena itu jauh lebih pendek dan persyaratan dalam loop cukup berbeda, saya mempostingnya sebagai jawaban terpisah.
Dimasukkan input sebagai 24 jam kali (baik dengan 0 atau 24). Jalankan seperti:
sumber
$i>$a?24:0
memiliki panjang yang sama dengan($i>$a)*24
wiki.php.net/rfc/short_list_syntax Mungkin Anda ingin menggunakan sintaks daftar pendek yang baru dalam 7,1[$x,$i,$a]=$argv;
-2 Bytes Sebelum saya belum menguji bahwa saya tidak akan menggunakannya. NIce cara sekarang aku lebih membenciku yang aku temukan tidak dengan cara ini.Java,
72717876 byteEdit :
e
/clock
diinisialisasi.Tidak Disatukan:
sumber
a
, dand
, danb
? Metode lengkapnya masuk akal, tapi kecuali saya kehilangan sesuatu, saya pikir Anda perlu melihat lambda golf Anda lagi dan benar-benar mencoba untuk mengeksekusinya. Untuk bermain golf lebih lanjut:(time+1)
bisa menjadi++time
.a+=a?
seharusnyab+=a?
. Juga, Anda dapat golf dengan 2 byte dengan mengubahwhile
menjadi tanpa tubuhfor
seperti ini:(a,b,c,d)->{int e;b+=a?12:0;d+=c?12:0;for(;b!=d;e+=b%12,b=++b%24);return e;}
QBIC ,
9047 byteJadi, inilah jawaban yang hanya mencetak jumlah bel-dering:
Input dalam jangkauan
1-24
;a
danb
input (::
dalam kode),c
melacak am / pm,d
adalah jumlah total dering. Ketika kami telah menghitung mundur semua jam,_Xd
menghentikan program, mencetakd
dalam proses.OK, saya salah paham pertanyaan dan menganggap
1+2+3...=
teks itu bagian dari output, jadi saya menulis bahwa:Sekarang, saya akan menuliskan kode jawaban yang tepat ...
sumber
Pyth - 11 byte
Test Suite .
sumber
23, 1
output144
kapan harus output24
. (Kasus seperti itu seharusnya, tentu saja, dalam ujian!)C #, 76 byte
sumber
a=23
danb=0
tampaknya menjadi contoh paling jelas.Perl, 36 byte
Termasuk +1 untuk
-p
Berikan waktu mulai dan berakhir dalam format 24 jam pada setiap baris di STDIN:
toll.pl
:sumber
Java 7, 64 byte
Metode rekursif berdasarkan pada @ETHproductions jawaban Python 2 . Menggunakan input jam 24 jam.
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
Batch,
16891 byteSunting: Disimpan 77 byte dengan beralih ke formulir tertutup untuk jawabannya.
%1
dan%2
merupakan dua parameter baris perintah@
Nonaktifkan Batch's default yaitu untuk mengulang perintahcmd/c
Menipu Batch ke segera mencetak hasil perhitunganset/a
Lakukan perhitungan numerikx=(%1+23)%%24,
Normalisasi jam awal menjadi jumlah jam sejak 01:00 (13:00 juga akan bekerja, tetapi 11 tidak lebih pendek dari 23)y=x+(%2+24-%1)%%24,
Normalisasi jam berakhir lebih cepat dari jam awal, naik ke hari berikutnya jika perluz=y%%12+1,
Jumlah bel terdengar pada jam terakhir(y/12-x/12)*78+
Jumlah lonceng karena tambahan setengah hariz*~-z/2-
Jumlah bel mulai dari jam 1 hingga jam berakhir termasuk(x%%=12)
Satu kurang dari jumlah bel yang terdengar pada jam awal*-~x/2
Jumlah lonceng yang akan dipukul dari jam 1 ke jam mulai, tetapi tidak termasuk jam awalsumber
C, 56 Bytes
sumber
> <> , 48 + 2 = 50 byte
Input diharapkan ada pada stack saat program dimulai, jadi +2 byte untuk
-v
flag. Input adalah dua bilangan bulat yang menentukan jam pada jam 24 jam, jadi10am - 10pm
akan diberikan sebagai10 22
.Cobalah online!
sumber
Cubix ,
4544 byteDisimpan 1 byte, terima kasih kepada @ETHproductions
Terjun pertama saya ke Cubix ...
Atau, kubus:
Anda dapat mencobanya di juru bahasa online . Input dalam format 24 jam, dengan waktu akhir pertama. Misalnya, mulai jam 17:00 hingga 01:00 input seharusnya
1 17
.Versi sebelumnya, 45 byte:
sumber
)$424tU4OI0Iuq;;-!^;^%&21u+rr;ss!;sqU>&%r$@;
Qbasic, 112 byte
sumber
Python, 73 byte
Ini akan jauh lebih pendek jika kita tidak harus mendukung
pm
untukam
. Saya menggunakan rekursi untuk mendukungnya.Cobalah online
Tanpa mendukung
pm
keam
(45 byte):sumber