Dalam xkcd 1047 , Randall Munroe daftar perkiraan "sedikit salah" dari berbagai macam jumlah dan angka dengan berbagai presisi dan kompleksitas, seperti bahwa jumlah liter dalam satu galon sangat dekat dengan 3 + π ⁄ 4 . Di tengah-tengah komik, ia memberikan jeda: cara untuk memperkirakan populasi dunia (dan Amerika Serikat) berdasarkan tahun tertentu.
(Dipotong dari xkcd: Perkiraan oleh Randall Munroe)
Tugas Anda adalah menulis program yang mengimplementasikan formula ini untuk memperkirakan populasi dunia dan AS saat ini, direplikasi sebagai berikut.
Populasi dunia
- Ambil dua digit terakhir tahun ini.
- Kurangi jumlah tahun kabisat (termasuk tahun ini) sejak Badai Katrina (2005). Untuk tujuan ini, setiap tahun yang dapat habis dibagi 4 dianggap sebagai tahun kabisat.
- Tambahkan titik desimal antara dua angka (sama dengan membagi dengan 10).
- Tambahkan 6. Ini memberikan hasil dalam miliaran orang.
Populasi AS
- Ambil dua digit terakhir tahun ini.
- Kurangi 10.
- Kalikan dengan 3.
- Tambahkan 10.
- Tambahkan 3 ke awal (untuk tantangan ini, beberapa angka akan negatif, jadi tambahkan 300 sebagai gantinya). Entah bagaimana saya tidak menyadari bahwa hanya menggabungkan tidak akan berhasil karena program yang saya gunakan untuk menghasilkan hasil hanya menambahkan 300.
- Ini memberikan hasil dalam jutaan orang.
Detail
Formula ini "harus tetap berlaku selama satu atau dua dekade," tetapi Anda harus dapat secara teoritis menangani tahun 2000-2039 inklusif. Untuk beberapa kasus, tahun kabisat sejak Katrina akan memiliki nilai negatif atau nol.
Anda bebas untuk menyederhanakan formula dengan cara apa pun, selama semua output cocok dengan yang di bawah ini.
Untuk tahun ini, gunakan tahun sesuai dengan jam komputer. Ini harus bekerja tahun depan dan tahun lainnya di abad ini, jadi Anda tidak bisa hanya dengan hardcode 2015. Untuk kenyamanan, Anda mungkin ingin memasukkan cara untuk menentukan tahun sebagai variabel atau input untuk menguji tahun lain.
Outputnya haruslah populasi dunia yang diperkirakan (dalam miliaran orang), diikuti oleh beberapa pembatas (misalnya ruang atau koma), diikuti oleh populasi AS (dalam jutaan orang). Anda juga dapat menulis fungsi yang mengembalikan atau mencetak string atau array angka atau string.
Ini adalah kode golf, jadi kode terpendek dalam byte menang. Tiebreaker adalah posting paling awal.
Uji kasus
Ini adalah daftar semua tahun yang mungkin, diikuti oleh dua keluaran.
Year World U.S.
2000 6.1 280
2001 6.2 283
2002 6.3 286
2003 6.4 289
2004 6.4 292
2005 6.5 295
2006 6.6 298
2007 6.7 301
2008 6.7 304
2009 6.8 307
2010 6.9 310
2011 7 313
2012 7 316
2013 7.1 319
2014 7.2 322
2015 7.3 325
2016 7.3 328
2017 7.4 331
2018 7.5 334
2019 7.6 337
2020 7.6 340
2021 7.7 343
2022 7.8 346
2023 7.9 349
2024 7.9 352
2025 8 355
2026 8.1 358
2027 8.2 361
2028 8.2 364
2029 8.3 367
2030 8.4 370
2031 8.5 373
2032 8.5 376
2033 8.6 379
2034 8.7 382
2035 8.8 385
2036 8.8 388
2037 8.9 391
2038 9 394
2039 9.1 397
sumber
3
, bukankah seharusnya2040
memberi populasi3100
?40 - 10 = 30
,30 * 3 = 90
,90 + 10 = 100
, Yang akan memberikan"3" + "100" = 3100
280
sebagai hasil dari-20+300=280
dan tidak3 . -20= "3-20"
)Jawaban:
Pyth,
2120 byte-1 byte oleh Dennis
Ini memiliki jumlah byte yang sama tetapi hanya ASCII:
Saya tidak tahu Pyth, jadi
mungkinmasih bisa golf. Menggunakan algoritma yang sama:TI-BASIC, 23 byte
getDate
mengembalikan daftar tiga float{YYYY,MM,DD}
dalam beberapa urutan tergantung pada pengaturan format tanggal (TI-84 tidak memiliki datatype int sebenarnya); yangmax(
akan menjadi tahun. Mengalikan dan mengurangi di dalammax(
menghemat jarak dekat.sumber
Javascript (ES6),
555448 byteBekerja di Firefox 33; secara teoritis mendukung semua tahun dari 2000 hingga 2099. Jika program yang membuang hasilnya ke konsol tidak diizinkan, gunakan fungsi 51-byte ini:
Program lengkap, 55 byte:
Mendapatkan tahun itu cukup mahal, tetapi setelah menggunakan yang sudahEDIT: Berkat trik eeevil, saya melewatkangetYear()
tidak digunakan lagigetFullYear()
, semua angka dalam persamaan menjadi lebih kecil, menghemat banyak byte.new
dangetYear()
sekaligus. >: DSaran diterima!
sumber
Pyth, 30 byte
Program Pyth pertama saya!
Terima kasih @ Jakube untuk beberapa petunjuk (saya tidak akan pernah memikirkan itu!)
sumber
+*3Z280
bukan+*Z3 280
sebagai contoh).C\d
bukannya100
(menghemat spasi). GunakanJ
alih-alihZ
(menyimpan=
). Sebariskan tugas. TautanPython 2, 80 byte
Sekarang bulat!
sumber
CJam, 28 byte
Cobalah online
Untuk mencoba tahun selain yang sekarang, ganti
et0=
di awal dengan nilai literal tahun.sumber
40%
untuk menyimpan satu byte.Python 3, 134 byte
Bekerja dengan baik tetapi agak lama
sumber
from time import*
,y=strftime('%Y')
. Atau salin jawaban python lainnya: PAutoIt -
605856 bytePembulatan memakan byte(tidak lagi). Saya sekarang telah men-tweak kedua formula. Beberapa output sampel:Mereka semua tampaknya akurat.
Kiat: Urutan eksekusi menyimpan byte pada tanda kurung. Misalnya:
(a-4)/4 = a/4-1
:-).sumber
PowerShell,
5345 BytesMenggunakan trik pembulatan serupa dengan jawaban Python 2 muddyfish untuk menyederhanakan perhitungan populasi dunia, karena PowerShell secara implisit
Round()
adalah ketika Anda melakukan cast dari a[double]
ke a[int]
, alih-alih memotong.Untuk output, kami menganggap bahwa "diikuti oleh beberapa pembatas (misalnya spasi atau koma)" juga bisa berarti "baris baru", jadi kami menjalankan satu hasil dan kemudian yang kedua. PowerShell secara implisit menuliskan hasil, jadi kita tidak perlu secara eksplisit memanggil perintah pencetakan.
sumber
Mathematica, 50 byte
Perhatikan bahwa ini tergantung pada memiliki Mesin Wolfram dengan Versi nomor 10+ (dirilis 2014) karena ketergantungan pada
DateObjects
.R, 64 byte
Port langsung kode Mathematica, berpikir saya punya solusi yang lebih pendek tetapi tergantung pada paket sedangkan ini bekerja dengan basis R.
sumber
(1/10)
->.1
?.1
.Java,
180177166152143 byteTerima kasih Thomas telah membantu noob :)
Versi tidak disatukan:
Membutuhkan Java 8.
sumber
import java.time.*
?3.0
->3.
? Anda juga tidak perlu mencetak tahun dengan hasilnya.JavaScript (ES6) 52
Fungsi yang mengembalikan output sebagai array.
Hanya untuk tujuan pengujian, fungsi menerima input yang sama dengan tahun berjalan - 1900 (mis. 105 untuk 2015)
Itu sesuai dengan jawaban ETHproductions '(matematika adalah matematika) tetapi menghindari trik jahat itu lebih portabel di berbagai daerah. Dan sebagai fungsi itu 1 byte lebih pendek.
Cuplikan uji:
sumber
Ruby, 57 byte
Sayangnya,
Time.now.year
benar-benar menghabiskan beberapa karakter.sumber
Desmos , 140 Bytes
Saya menghitung baris baru untuk menjadi sinyal untuk persamaan baru. Folder pada tautan hanya untuk organisasi.
Golf , 140 Bytes
Klik
add slider
saat diminta.Tidak Digubah , 261 Bytes
sumber
Glava, 77 byte
Terjemahan dari jawaban Java saya.
sumber
PHP, 45 byte
Kode:
Karena
y
(argumendate()
) adalah konstanta yang tidak terdefinisi, PHP memicu pemberitahuan (yang dapat diredam) dan mengubahnya menjadi string (seperti yang kita butuhkan); kesopanan PHP ini memungkinkan penghematan 2 byte.Untuk menekan pemberitahuan, program harus dijalankan menggunakan
error_reporting=0
arahan runtime, seperti ini:Untuk pengujian
Dengan mengganti panggilan ke
date(y)
dengan$argv[1]
(argumen baris perintah pertama), panjang program meningkat dengan 1 byte tetapi bisa mendapatkan tahun dari baris perintah.Argumen yang diharapkan adalah tahun minus 2000; ini juga berfungsi untuk nilai negatif (tahun sebelum 2000) atau nilai lebih besar dari 40 (setelah tahun 2040).
sumber
APL,
252329 byteTryAPL
Ya, ini 29 byte .
sumber