Menurut komik XKCD ini , ada rumus untuk menentukan apakah kesenjangan usia dalam suatu hubungan "menyeramkan" atau tidak. Formula ini didefinisikan sebagai:
(Age/2) + 7
menjadi usia minimum orang yang bisa Anda kencani.
Karena itu suatu hubungan menyeramkan jika salah satu dari orang-orang dalam hubungan tersebut lebih muda dari usia minimum yang lain.
Mengingat usia dua orang, dapatkah Anda memberi tahu apakah hubungan itu menyeramkan atau tidak?
Aturan
Program Anda harus mengambil dua bilangan bulat sebagai input, usia kedua orang dalam hubungan. Ini dapat diambil dalam format apa pun yang wajar.
Program Anda kemudian harus menghasilkan nilai yang benar atau salah yang menggambarkan apakah hubungannya "menyeramkan" atau tidak (Truthy = Creepy).
- Tidak ada celah standar.
- Teka-teki ini adalah Code Golf, jadi jawabannya dengan kode sumber terpendek dalam byte akan menang
Uji Kasus
40, 40 - Not Creepy
18, 21 - Not Creepy
80, 32 - Creepy
15, 50 - Creepy
47, 10000 - Creepy
37, 38 - Not Creepy
22, 18 - Not Creepy
age/2
dibulatkan? Mungkin naik jika setengahnya seharusnya menjadi minimum?17,21
akan menjadi ujian yang bagus.13, 13 - Creepy
.Jawaban:
Jelly , 6 byte
Cobalah online!
Algoritma yang nampak berbeda dari milik Kamerad.
sumber
Python 3 , 26 byte
Cobalah online!
Input adalah daftar dengan kedua usia
sumber
05AB1E ,
86 byteCobalah online! atau Coba semua tes
sumber
2
tidak benar, lihat ini .Gerbang NAND, 551
Dibuat dengan Logisim
Prinsip yang sama dengan jawaban saya yang lain , tetapi membutuhkan input yang ditandatangani 2-byte, sehingga dapat ditangani
47, 10000
. Bekerja untuk SEMUA kasus uji!Ini tidak optimal untuk kasus uji yang diberikan, karena 10.000 dapat dinyatakan dengan hanya 15 dari 16 bit, tetapi bekerja untuk segala usia dalam kisaran [-32768, 32768). Perhatikan bahwa segala usia negatif akan kembali
1
.Input di sebelah kiri (tanpa urutan tertentu, 1-bit di atas). Output di kanan bawah.
sumber
Gerbang NAND,
274262Asli:
Lebih baik: Dibuat dengan Logisim
Ini mengambil dua input di sebelah kiri sebagai integer bertanda 1-byte, dengan 1-bit di bagian atas. Output ada di kiri bawah; kebenaran dan kepalsuan di sini harus jelas.
Berfungsi untuk semua kasus uji kecuali
47, 10000
, jadi saya kira ini secara teknis bukan jawaban yang valid. Namun, orang tertua pada catatan (dapat diandalkan) adalah 122, jadi 8 bit (maks 127) akan bekerja untuk setiap skenario yang pernah ada hingga saat ini. Saya akan memposting jawaban baru (atau saya harus mengedit yang ini?) Ketika saya menyelesaikan versi 16-bit.Versi 16-bit selesai!
Anda akan melihat beberapa bagian vertikal dari rangkaian. Yang pertama (dari kiri) menentukan input mana yang lebih besar. Dua berikutnya adalah multiplexer, mengurutkan input. Saya kemudian menambahkan
11111001
(-7) ke yang lebih rendah di bagian keempat, dan saya menyimpulkan dengan membandingkan dua kali ini dengan input yang lebih besar. Jika kurang, hubungan itu menyeramkan. Karena saya menggeser bit menjadi dua kali lipat, saya harus memperhitungkan bit yang tidak digunakanlesser-7
. Jika ini adalah1
, makalesser-7
negatif, dan yang lebih muda dari keduanya tidak lebih dari enam. Mengerikan. Saya selesai dengan gerbang OR, jadi jika tes creepiness kembali1
, seluruh rangkaian tidak.Jika Anda melihat dekat, Anda akan melihat bahwa saya menggunakan
tujuhsatu konstans(hardcoding11111011
dan trailing0
). Saya melakukan ini karena Logisim membutuhkan setidaknya satu nilai masuk untuk gerbang logika untuk menghasilkan output. Namun, setiap kali konstanta digunakan, dua gerbang NAND memastikan1
nilai terlepas dari konstanta.-12 gerbang berkat saya !
sumber
C #, 22 byte
sumber
C, 29 byte
Bagaimana itu bekerja:
#define f(a,b)
mendefinisikan fungsi makrof
yang mengambil dua argumen yang tidak diketik.a/2+7>b
memeriksa apakah usia pertama dibagi dua plus tujuh lebih besar dari usia kedua.b/2+7>a
memeriksa apakah usia kedua dibagi dua ditambah tujuh lebih besar dari usia pertama.Cobalah online!
sumber
>b
tidak<b
age >= min
, juga Anda perlu DAN bukannya ATAU, karena kedua belah pihak harus memuaskan agar tidak menyeramkan, test case "47, 10000 - Creepy"JavaScript (ES6), 21 byte
Mengembalikan 0 karena tidak menyeramkan, 1 untuk menyeramkan.
sumber
a=>b=>
alih-alih(a,b)=>
, panggil denganf(40)(40)
.R ,
2625 byte-1 byte terima kasih kepada @djhurio
Cobalah online!
sumber
Retina , 20 byte
Cobalah online!
Input tidak digunakan dengan umpan baris antara dua angka. Outputnya
0
(tidak menyeramkan) atau1
(menyeramkan).Penjelasan
Sortir kedua angka, jadi kita tahu bahwa yang lebih besar adalah yang kedua.
Sebut usia yang lebih kecil
a
dan usia yang lebih besarb
. Kami pertama-tama menangkapa-7
dalam grup1
. Kemudian kita mencoba untuk mencocokkan2*(a-7)+1
dib
, yang berartib >= 2*(a-7)+1
ataub >= 2*(a-7)
ataub/2+7 > a
yang merupakan kriteria untuk hubungan menyeramkan.sumber
TI-Basic,
20109 byte-10 byte dengan menggunakan daftar dan bagian dari saran Timtech
-1 byte menggunakan saran lirtosiast
Dibawa dalam daftar dua zaman, "{40,42}: prgmNAME"
Mengembalikan 1 untuk 'menyeramkan' dan 0 untuk 'tidak menyeramkan'.
sumber
<
<=
=
!=
>=
>
)?GNU APL 1.2, 23 byte
Menentukan fungsi yang mengambil dua argumen dan mencetak 1 jika menyeramkan, 0 jika tidak.
Penjelasan
∇
memulai dan mengakhiri fungsiA f B
adalah tajuk fungsi; fungsi dinamaif
dan mengambil dua argumen,A
danB
(fungsi dalam APL dapat bersifat monadik - mengambil satu argumen - atau diad - mengambil dua argumen)A⌊B
adalahmin(A,B)
danA⌈B
sedangmax(A,B)
APL dievaluasi dari kanan ke kiri, sehingga tanda kurung diperlukan untuk memastikan prioritas yang tepat.
Operator lain cukup jelas.
Kode mungkin bisa golf, saya masih baru untuk kode-golf.
sumber
f X
lalu(⌊/X)<7+.5×⌈/X
. IIRC Anda dapat menghapus baris baru antara baris kedua dan ketiga.Python 3,
7445 byteGolf Kode Pertama, mungkin mengerikan.
Pengurangan 29 byte oleh @Phoenix
sumber
lambda a,b:0 if(a/2)+7>b or(b/2)+7>a else 1
harus bekerja dan lebih pendek.lambda a,b:a/2+7>b or b/2+7>a
. Meninggalkan beban orang-orang sial1
dan0
s dan merangkul kekuatanTrue
/False
!JavaScript (ES6), 27 byte
Tanpa currying (suka panggilan
f(a,b)
alih - alihf(a)(b)
)Jika
b > a
, tukar parameter dan coba lagi. Kalau tidak, periksa. Currying tidak menyimpan byte karena panggilan rekursif.sumber
Java, 21 byte
Sama sekali tidak asli.
Pengujian
Cobalah online!
sumber
Python 3, 31 byte
lambda a,b:abs(a-b)>min(a,b)-14
Tidak jauh lebih pendek dari kiriman python lainnya, tetapi saya menemukan cara yang sedikit berbeda untuk memeriksa creepiness. Saya perhatikan bahwa perbedaan yang dapat diterima antara usia sama dengan min - 14. Ini mengikuti dari aljabar menyusun ulang rumus.
Ini biarkan saya menyelesaikan tanpa membutuhkan dua konstanta, dan juga tanpa perlu menggunakan max dan min, alih-alih menggunakan abs (ab). Dari perspektif golf saya hanya mendapat satu byte kurang dari solusi @ nocturama, tetapi saya menggunakan formula yang sedikit berbeda untuk melakukannya.
sumber
abs(37 - 53) > min(37, 53) - 14 = abs(-16) > 37 - 14 = 16 > 23 = False
Ini adalah jawaban yang benar, karena menurut (x / 2) + 7, usia minimum untuk 53 adalah53/2 + 7 = 26.5 + 7 = 33.5
Excel,
2624 BytesRumus sel yang mengambil input sebagai angka dari rentang sel
A1:B1
dan menghasilkan nilai boolean yang mewakili creepiness ke sel rumusVersi Lama, 26 Bytes
sumber
TI-Basic,
10910 byteDaftar input dari
Ans
, keluaran1
jika "menyeramkan" atau0
sebaliknya.sumber
Matematika , 16 byte
Cobalah online!
-2 byte terima kasih kepada @GregMartin
Benar untuk tidak menyeramkan, salah untuk menyeramkan.
sumber
2
byte dengan mengambil usia sebagai daftar:Max@#/2+7<Min@#&
SAS, 77 byte
sumber
Röda , 16 byte
Cobalah online!
Ini adalah fungsi anonim yang mengambil input sebagai dua literal (bukan array) dari aliran input.
Penjelasan
sumber
Perl 6 , 15 byte
Cobalah
Diperluas
sumber
Crystal ,
4427 byte-17 dari melihat jawaban daniero di Ruby.
Cobalah online!
sumber
Python 3 -
3227 byteTidak dapat berkomentar, tapi saya mendapat jawaban yang sedikit lebih pendek daripada solusi Python 3 lainnya:
-5 terima kasih kepada @Cyoce!
sumber
lambda *a
Fourier, 37 byte
Cobalah di FourIDE!
Mengambil dua angka sebagai input. Will golf nanti.
sumber
PHP, 29 Bytes
mencetak 1 untuk menyeramkan, tidak ada untuk Tidak menyeramkan
Cobalah online!
sumber
Japt , 11 byte
Pengembalian
true
untuk "menyeramkan" danfalse
untuk tidak.Cobalah online
Penjelasan
sumber
J, 10 byte
Output
1
untuk tidak menyeramkan,0
untuk menyeramkanPenjelasan
sumber
J-uby , 25 byte
Sebut seperti
f^[80,32]
. Memberitrue
untuk tidak menyeramkan,false
untuk menyeramkan.Penjelasan
sumber
method_missing
menyebabkan terlalu banyak kerumitan. Pendekatan ini bersih dan elegan. Selamat!AWK , 26 byte
Cobalah online!
Output 1 untuk "Creepy" dan 0 untuk "Not Creepy". Dapat menghemat 3 byte jika tidak ada output yang dapat dianggap sebagai nilai palsu, melalui:
sumber