Saya pikir kita semua telah melakukan ini sebagai anak-anak: beberapa situs web memerlukan usia minimum 18 tahun, jadi kita kurangi beberapa tahun dari tahun kelahiran dan voa, kita 18+.
Selain itu, untuk sebagian besar wahana di taman hiburan, ketinggian minimum untuk masuk adalah 1,40 meter (setidaknya di sini di Belanda). Tentu saja ini tidak mudah ditipu daripada usia, tetapi Anda bisa mengenakan sepatu dengan sepatu tebal, menjepit rambut, mengenakan topi, berdiri di atas jari kaki, dll.
Memasukkan:
Program / fungsi Anda menerima bilangan bulat positif atau desimal.
Keluaran:
- Apakah input bilangan bulat
>= 18
? Cukup cetak inputnya. - Apakah input bilangan bulat
0-17
? Cetak18
. - Apakah inputnya desimal
>= 1.4
? Cukup cetak inputnya. - Apakah inputnya desimal
0.0-1.4
? Cetak1.4
.
Aturan tantangan:
- Asumsikan input akan selalu berada dalam kisaran
0-122
(wanita tertua 122) atau0.0-2.72
(pria tertinggi 2,72). - Anda diizinkan mengambil input sebagai String, objek, atau apa pun yang Anda inginkan.
- Input desimal tidak akan pernah memiliki lebih dari tiga tempat desimal setelah titik desimal.
2
atau2.
keduanya bukan output yang valid untuk2.0
. Anda bebas untuk menghasilkan2.00
atau2.000
sebaliknya2.0
.
Sama seperti input, output tidak akan pernah memiliki lebih dari tiga tempat desimal setelah titik.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat, program lengkap. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Kasus uji:
0 -> 18
1 -> 18
2 -> 18
12 -> 18
18 -> 18
43 -> 43
115 -> 115
122 -> 122
0.0 -> 1.4
1.04 -> 1.4
1.225 -> 1.4
1.399 -> 1.4
1.4 -> 1.4
1.74 -> 1.74
2.0 -> 2.0
2.72 -> 2.72
code-golf
arithmetic
Kevin Cruijssen
sumber
sumber
0.0-2.72 (tallest man ever was 2.72).
- Anda tidak0.0
ketika Anda dilahirkan ...0
dan0.0
. :) Yang ditambahkantallest man ever was 2.72
danoldest woman ever was 122
baru saja ditambahkan sebagai fakta informasi untuk mereka yang tertarik.Jawaban:
Cembung , 9 byte
Cobalah online!
sumber
Python 2.7, 34 byte
sumber
max(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
JavaScript (ES6), 27
31Input diambil sebagai string. Untuk memeriksa apakah nilai input memiliki desimal, ditambahkan ke dirinya sendiri: jika tidak ada titik desimal, hasilnya masih berupa angka yang valid, kalau tidak, tidak. Untuk mengenali angka yang valid (termasuk 0), saya menggunakan pembagian seperti dalam javascript
1/n
adalah angka dan bukan 0 untuk angka apa punn
(akhirnya nilainya adalahInfinity
untukn==0
), selain itu nilainyaNaN
Uji
Solusi prev (salah) saya:
Mengambil input sebagai angka, Anda dapat menggunakan operator sisa
%
untuk memeriksa apakah nomornya bilangan bulat.atau
Tetapi ini tidak berfungsi sebagai permintaan tantangan untuk membedakan antara, katakanlah,
2
dan2.0
dan itu adalah angka yang sama. Jadi tidak mungkin untuk mendapatkan input sebagai angkasumber
2.0
seharusnya2.0
, bukan18
.2.0%1
dan1.0%1
akan menghasilkan 01/(x+x)
- sekarang itu imajinatif!05AB1E ,
1311 byteMenggunakan pengodean CP-1252 .
Penjelasan
Cobalah online
sumber
Java 8,
906157 byte-4 byte yang dikembalikan,
Object
bukanString
; dan beberapa byte tambahan mengkonversi Java 7 sampai 8.-4 byte mengambil input sebagai
Object
bukanString
juga.Penjelasan:
Coba di sini.
sumber
+
, yang berarti bahwa jika Anda menghapus tanda kurung, itu akan berubah menjadi(""+i.contains(...)) ?
Pyth, 14 byte
Cobalah online.
sumber
PHP, 40 Bytes
dimodifikasi oleh @ user59178 Terima Kasih
PHP, 42 Bytes Versi pertama
sumber
is_int($i=$argv[1]+0)
2 byte lebih pendek daripadastrpos($i=$argv[1],".")
dan dapat melayani tujuan yang sama jika Anda menukar1.4
dan18
is_numeric
string tetapi tidakis_int
+0
, untuk mengubahnya menjadi tipe numerik.strpos($i=$argv[1],".")
versi, apakah Anda ingat untuk menukar output dari ternary?<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);
daripada<?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
menghindari keluaran 2 ketika diberikan 2.0.EXCEL:
263129 BytesFormula dapat pergi ke mana pun kecuali A1, sel input.
Memperbaiki kesalahan, dan diganti dengan saran Emigna.
Terima kasih kepada Alexandru karena telah menyelamatkan saya beberapa byte menggunakan kebenaran
sumber
n
untuk sel input? Itu bisa di mana saja dalam dokumen itu dan juga 2 byte lebih pendek.Brachylog , 14 byte
Cobalah online!
Penjelasan
sumber
Perl,
2927 byteTermasuk +2 untuk
-lp
Berikan masukan pada STDIN
adult.pl
:Jika Anda tidak keberatan dengan baris baru tambahan jika Anda benar-benar sudah dewasa, maka meninggalkan
l
opsi untuk 26 byte juga berfungsisumber
GNU sed, 40 + 1 = 41 byte
(skor +1 untuk penggunaan
-r
flag to interpreter)Beranotasi:
Kami memanfaatkan kendala pada input, jadi tidak perlu menguji awal string ketika kita melihat '1.' - kita tahu hanya ada satu digit sebelum titik desimal.
Hasil tes:
sumber
Haskell, 50 byte
Contoh penggunaan:
f "1.0"
->"1.6"
.Jenis Haskell yang ketat membutuhkan penggunaan string sebagai input dan output. Howevers,
read
,max
danshow
adalah polimorfik dan menangani semua jenis numerik.sumber
(#)x=map(show.max x.fst).reads;f s=head$18#s++1.4#s
reads
. Dengan sedikit modifikasi, itu satu byte lebih pendek dari saya. Silakan posting sebagai jawaban terpisah.x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
.Java,
7970 byteMenentukan dua metode dengan kelebihan beban, yang menggunakan operator kondisional.
Sebut seperti
f(5)
atauf(1.4f)
.sumber
x<18?18:x
danx<1.4f?1.4f:x
lebih pendek dariMath.max
. Saya pikir Anda mungkin menemukan tips untuk bermain golf di Jawa yang menarik untuk dibaca. :)CJam,
1814 byteDisimpan 4 byte berkat Martin Ender.
Penerjemah online
sumber
C #, 69 byte
Cobalah online!
Program lengkap dengan kasus uji:
Solusi yang sangat mudah. Perhatikan bahwa pada beberapa sistem float.Parse () mungkin mengembalikan hasil yang salah. Lewati CultureInfo.InvariantCulture sebagai argumen kedua sesuai dengan jawaban ini .
sumber
s.Contains(".")
dengans[1]=='.'
s[1]==46
, atau pendekatan yang lebih agresif (menganggap Anda hanya memiliki angka dan karakter pada indeks 1 '') (memiliki kode ASCII dari 46 ''):s[1]<47
.Bahasa Formula IBM / Lotus Notes,
5849 byteRumus bidang terkomputasi di mana a adalah bidang numerik yang dapat diedit.
SUNTING
Alternatif terinspirasi oleh @Mego
sumber
Jelly ,
16 1513 byteTryItOnline
Atau lihat semua test case, juga di TryItOnline
Bagaimana?
sumber
18
untuk2.0
, sayangnya :(C ++, 68 byte
Jawaban ini sebenarnya 2 fungsi dengan nama yang sama, dan kompiler berfungsi untuk saya yang harus dihubungi, sehingga berfungsi sebagai satu fungsi tanpa saya harus mengambil satu input dan memutuskan yang mana. Karena input pada floating point dijamin memiliki presisi yang sama dengan output, saya dapat mengembalikannya dengan aman tanpa harus memotongnya juga.
Tes + tidak digabungkan
sumber
float
s menjadiauto
s. Saya telah menolak hasil edit sesuai kebijakan tetapi merasa bebas untuk mengeditnya sendiri jika Anda mengonfirmasi bahwa itu berhasil.C #, 58 byte
Tidak perlu penguraian string gila untuk C #. Input diharapkan menjadi
int
ataufloat
(sayangnya C # tidak bisa melemparkandouble
kefloat
jikadouble
berada dalamobject
). Output akan berupaint
ataustring
dalamobject
.(hampir melewatkan setidaknya 1 persyaratan desimal, menambahkan itu sekarang)
Tidak Disatukan:
Implementasi alternatif yang juga 58 byte.
sumber
Sebenarnya, 16 byte
Cobalah online!
Penjelasan:
sumber
9τ
bukan hanya18
? Saya tahu ini adalah byte-count yang sama sehingga tidak terlalu penting, tetapi18
tampaknya lebih mudah dibaca. Atau adakah alasan mengapa itu tidak akan berfungsi dalam bahasa implementasi / pemrograman saat ini?18
mendorong1
dan8
. Untuk mendorong literal18
, Anda akan menggunakan:18
, yang lebih panjang dari9τ
.Emacs Lisp, 37 byte
Menebak dari "datatype" apakah versi integer atau float harus digunakan. (
floatp
Kembalit
untuk1.0
, tetapi tidak untuk1.
) parameter adalah nomor sebagai integer atau float, yaitu harus memenuhinumberp
.sumber
Haskell, 49 byte
Pada dasarnya, ini pertama kali mencoba untuk membaca input sebagai integer dan kemudian sebagai double jika gagal. Kemudian hasil untuk membandingkannya dengan baseline perbandingan masing-masing.
sumber
Dyalog APL , 14 byteDiberikan tidak valid dengan spesifikasi lebih lanjut⎕IO←0
yang merupakan standar pada banyak sistem. Mengambil string sebagai argumen.⍎⌈
maks dari argumen yang dievaluasi dan18 1.4⊃⍨
{18,1.4} dipilih oleh'.'∘∊
apakah argumen berisi suatu periodesumber
C #, 95 Bytes
Golf:
Tidak Disatukan:
Kasus uji:
Keluaran:
sumber
string y(string p){int a;return int.TryParse(p,out a)?a<1?"18":p:double.Parse(p)<1.4?"1.4":p;}
(menghapus tanda kurung;>=1.4
dengan<1.4
dengan menukar"1.4"
danp
; berubahdecimal
menjadidouble
begituM
hilang. Juga, orang lain hanya memposting pendekatan yang berbeda dalam C # yang sedikit lebih pendek. Anda mungkin menemukan Tips untuk bermain golf dalam bahasa C # menarik untuk dibaca. Sekali lagi, selamat datang! :)float.Parse
alih-alihdouble.Parse
. Dan juga jika Anda memindahkan deklarasi a ke dalam argumen metode dengan nilai default, Anda dapat menjatuhkan pernyataan pengembalian dengan menggunakan anggota bertubuh ekspresi. misalnya:string f(string s,int a=0)=>int.TryParse(s,out a)?a>17?s:"18":float.Parse(s)<1.4?"1.4":s;
AWK - 29 byte
Pemakaian:
Pengujian dilakukan dengan
gawk
pada RHEL 6. Saya mencoba dengan semua kasus uji, sayangnya saya tidak memilikiAWK
pada mesin yang memiliki akses internet, jadi salin-tempel tidak mungkin.Apakah ada cara yang lebih ringkas untuk melakukan ini
AWK
?sumber
C, 50 byte:
Hitungan byte menyertakan baris baru di akhir definisi makro.
Tes :
sumber
C #, 71 byte
coba di sini
sumber
C,
119111105100Diuji dengan
Keluaran
sumber
Batch, 102 byte
Pertama menentukan apakah input bilangan bulat dengan memeriksa apakah menghapus semua
.
s memiliki efek pada string. Jika ya maka nilainya dengan mudah dibandingkan dengan 18, jika tidak, karakter pertama dan ketiga digabungkan menjadi angka yang dibandingkan dengan 14.sumber
PHP: 40 byte
psuedocode, (turnary bersarang):
sumber