はい、もちろん私は大人です!


44

私たちは皆これを子供の頃にやったと思います:一部のウェブサイトは18歳以上を必要とするため、生年月日から数年を差し引くだけで、18歳以上です。
さらに、遊園地でのほとんどの乗り物では、入る最小の高さは1.40メートルです(少なくともオランダではここ)。もちろん、これは年齢よりも簡単にだまされる可能性がありますが、太いヒールの靴を履いたり、髪をかぶったり、帽子をかぶったり、つま先に立ったりすることができます。

入力:

プログラム/関数は正の整数または小数を受け入れます。

出力:

  • 入力は整数>= 18ですか?入力を印刷するだけです。
  • 入力は整数0-17ですか?印刷18
  • 入力は小数>= 1.4ですか?入力を印刷するだけです。
  • 入力は小数0.0-1.4ですか?印刷1.4

チャレンジルール:

  • 入力は常に0-122(これまでで最も古い女性が122だった)または0.0-2.72(これまでで最も高い男性が2.72だった)の範囲にあると仮定します。
  • 入力を文字列、オブジェクト、またはその他の任意のものとして受け取ることができます。
  • 小数点の入力は、小数点の後に小数点以下3桁を超えることはありません。
  • 2または2.両方がの有効な出力ではありません2.0。出力は自由ですが2.002.000代わりに行うこともでき2.0ます。
    入力と同様に、出力の小数点以下が小数点以下3桁を超えることはありません。

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、非コードゴルフ言語で回答を投稿しないようにしてください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 回答には標準の規則が適用されるため、STDIN / STDOUT、適切なパラメーターを持つ関数/メソッド、完全なプログラムを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンクを追加してください。
  • また、必要に応じて説明を追加してください。

テストケース:

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

入力に先行ゼロがないと仮定できますか?
トビースパイト

@TobySpeightはい、先行ゼロはありません。
ケビンCruijssen

2
0.0-2.72 (tallest man ever was 2.72).-あなたはそうではありません0.0、あなたが生まれているときに...
ヨハン・カールソン

1
@JohanKarlsson私は知っている、最小値を追加することを考えたが、私はそれをから開始することに0した0.0。:)追加されtallest man ever was 2.72oldest woman ever was 122興味のある人のための情報として追加されました。
ケビンCruijssen

9
「[...]だから、私たちは生年に数年を追加するだけです[...]」あなたは生年から数年を差し引くべきではありませんか?
ウィタゴラス

回答:



45

Python 2.7、34バイト

lambda x:max(x,[18,1.4]['.'in`x`])

2.0ではこれは何を返しますか?
アダム

2
@アダムmax(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
リン

3
いいえ、そうではありません。自分で試してみませんか?:)
リン

5
@アダムI使用repl.itideone.com Python用。私がこれまでに投稿したPythonの回答をご覧ください。おそらく、これら2つのいずれかへのリンクがあります。
mbomb007

1
気にしないで、わかった。したがって、基本的にtrueまたはfalseはその配列の0または1インデックスにマップされ、2つの数値にmaxを適用します。
アレクサンドルププサ

15

JavaScript(ES6)、27 31

文字列として取得される入力。入力値に小数があるかどうかを確認するために、入力値自体に追加されます。小数点がない場合、結果はまだ有効な数値ですが、そうでない場合は無効です。有効な数値(0を含む)を認識するには、javascript 1/nが数値ではなく数値であるためn (最終的には値がであるInfinityためn==0)、除算を使用します。それ以外の場合はNaN

x=>x<(y=1/(x+x)?18:1.4)?y:x

テスト

f=    
x=>x<(y=1/(x+x)?18:1.4)?y:x

;[
 ['0', '18' ],['1', '18' ],['2', '18' ],['12', '18' ],['18', '18' ],['43', '43' ],['115', '115'], ['122', '122' ]
,['0.0', '1.4'],['1.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']
].forEach(t=>{
  var i=t[0],k=t[1],r=f(i)
  console.log(i,k,r,k==r?'OK':'KO')
})

私の前の(間違った)解決策:

入力を数値として、剰余演算子%を使用して、数値が整数かどうかを確認できます。

x=>x<(y=x%1?1.4:18)?y:x

または

x=>Math.max(x,x%1?1.4:18)

しかし、これは、たとえば、2とを区別するためのチャレンジリクエストとしては機能せず2.0、それは同じ数字です。したがって、入力を数値として取得することはできません


2
の結果はである2.0必要が2.0あり18ます。
ニール

確かに。2.0%1そして、1.0%10になります
aross

4
'javascript(es6)is verbose'、codegolf
dwana

@Neilは2番目にあなたがおそらく正しいと思った
edc65

3
1/(x+x)-今、それは想像力です!
ニール

13

05AB1E13 11バイト

CP-1252エンコードを使用します。

ÐîQ18*14T/M

説明

Ð             # triplicate input
 î            # round up
  Q           # check for equality
   18*        # multiply 18 by this (18 if input is int, else 0)
      14T/    # push 14 / 10
          M   # take max of stack (input and 1.4 or 18)

オンラインで試す


2
あなたはちょっと遅いです。まだ1.5分かかりました。; P(読む:くそー、それは速かった。)もちろんそれはかなり簡単だ。
ケビンクルイッセン

2
@KevinCruijssen:ええ、多くのキーを押す必要のない言語での実装は非常に高速です:P
Emigna

@EriktheGolfer:より良いですか?自由に編集してください。私はフォーマットのいくつかの異なる方法で実験してきましたが、厳密に最良の方法を決定していません。提案を歓迎します。
エミグナ

@Emigna不足している2つの重要なスペースを追加しました。
エリックアウトゴルファー

2
@FrancescoCasula:TIOで動作する短いソリューションを見つけました:)
Emigna

8

Java 8、90 61 57バイト

i->(i+"").contains(".")?(float)i<1.4?1.4:i:(int)i<18?18:i

Object代わりに-4バイトが返されStringます。および8へのJava 7を変換するいくつかの追加のバイト
として入力をとる-4バイトObjectの代わりにStringも。

説明:

ここで試してみてください。

i->                      // Method with Object as both parameter and return-type
  (i+"").contains(".")?  //  If the input as String contains a dot:
   (float)i<1.4?         //   If the input is a float below 1.4:
    1.4                  //    Return double 1.4
   :                     //   Else:
    i                    //    Return the input-float as is
  :(int)i<18?            //  Else if the input is an integer below 18:
   18                    //   Return integer 18
  :                      //  Else:
   i                     //   Return the input-integer as is

if / else演算子をブラケットで囲む必要がありますか?
ローマングラフ

1
@RomanGräfはい。三項の優先順位はの優先順位よりも低くなり+ます。つまり、括弧を削除すると、次のようになります(""+i.contains(...)) ?
Nic Hartley


7

PHP、40バイト

修正@ user59178ありがとう

<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);

PHP、42バイトの最初のバージョン

<?=max(strpos($i=$argv[1],".")?1.4:18,$i);

is_int($i=$argv[1]+0)を2バイト短くし、strpos($i=$argv[1],".")をスワップする1.4と同じ目的を果たすことができます18
-user59178

@ user59178 is_numeric文字列で使用できましたが、できませんでしたis_int
ヨルグヒュルサーマン

+0それが数値型に変換するためのがある理由です。
user59178

1
私にとっては正しく動作します(Windowsでphp 5.5と7.0の両方を試しました)。strpos($i=$argv[1],".")バージョンに反対の真/偽の条件があることに注意してください、三値の出力を交換することを覚えていましたか?
user59178

1
実際には、近い読みでは、2.0が与えられたときに2を出力することを避ける<?=max(is_int(0+$i=$argv[1])?18:1.4,$i);よりも、その必要があります<?=max(is_int($i=$argv[1]+0)?18:1.4,$i);
user59178

6

EXCEL:26 31 29バイト

=MAX(A1;IF(MOD(A1;1);1,4;18))

数式は、入力セルであるA1以外の任意の場所に移動できます。

エラーを修正し、エミグナの提案に置き換えられました。

真実を使ってバイトを節約してくれたAlexandruに感謝します


1
また、n入力セルの名前を定義する方が良いでしょうか?文書内のどこにでも配置でき、2バイト短くなります。
エミグナ

@Emignaはできましたが、その時点で少しずるいです。名前ごとに1バイトは探し回る必要はありません。この形式を維持すれば、人々は簡単にコピーアンドペーストできます。

たとえば、Pythonのラムダで1文字の入力変数を使用することと、それがどのように異なるかはわかりません。しかし、それはあなたの電話です:)
エミグナ

こんにちは!バイトをどのように計算しますか?既定の名前または他の方法で数式を使用してファイルを保存しますか?
ビチャータ

1
「= 0」を削除して、結果を切り替えることができます:1.4最初、18秒また、小数点区切りとしてコマがあるため、ほとんどの人にはこれが機能しない可能性があります。
アレクサンドルププサ


5

Perl、29 27バイト

+2を含む -lp

STDINに入力する

adult.pl <<< 1.24

adult.pl

#!/usr/bin/perl -lp
$_>($a=/\./?1.4:18)or*_=a

あなたが本当に完全な大人だった場合、余分な改行を気にしないならl、26バイトのオプションを省くこともできます


5

GNU sed、40 + 1 = 41バイト

-rインタープリターにフラグを使用する場合はスコア+1 )

s/^.$|^1[^9]$/18/
/^0|1\.[0-3]/s/.*/1.4/

注釈付き:

#!/bin/sed -rf

# First, anything that's a single digit or is '1' followed by a
# digit other than '9' is replaced with '18'.
s/^.$|^1[^9]$/18/

# Now, any line beginning with '0' or containing '1.0' to '1.3' is
# replaced with '1.4'.
/^0|1\.[0-3]/s/.*/1.4/

入力の制約を利用するため、「1」が表示されたときに文字列の開始をテストする必要はありません。-小数点の前に1桁しかないことを知っています。

テスト結果:

$ ./94832.sed <<END
> 0
> 1
> 2
> 12
> 18
> 43
> 122
> 
> 0.0
> 1.04
> 1.225
> 1.399
> 1.4
> 1.74
> 2.0
> 2.72
> END
18
18
18
18
18
43
122

1.4
1.4
1.4
1.4
1.4
1.74
2.0
2.72

5

Haskell、50バイト

x#y=show$max x$read y 
f s|elem '.'s=1.4#s|1<2=18#s

使用例:f "1.0"-> "1.6"

Haskellの厳密な型では、文字列を入力および出力として使用する必要があります。Howevers、 readmaxおよびshow多型であり、すべての数値型を扱います。


私は賢く、ガードなしでそれをやると思ったが、それは代わりに少し長くなってしまいました:(私のバージョン:(#)x=map(show.max x.fst).reads;f s=head$18#s++1.4#s
キュービック

@Cubic:のいい使い方reads。わずかな変更を加えると、私のものより1バイト短くなります。別の回答として投稿してください。x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s
nimi

インフィックスfmapで括弧を保存する本当にクールなアイデア!
キュービック

5

Java、79 70バイト

int f(int x){return x<18?18:x;}
float f(float x){return x<1.4?1.4f:x;}

条件付き演算子を使用するオーバーロードを伴う2つのメソッドを定義します。

f(5)またはのように呼び出しf(1.4f)ます。


1
こんにちは。x<18?18:xそしてx<1.4f?1.4f:xより短いですMath.maxJavaでゴルフをするためのヒントをお読みになると面白いかもしれません。:)
ケビンクルーイッセン16年

はい、もちろんそうです。どうすればそれらを忘れることができました...
corvus_192

これ大好き!なぜロジックをコンパイラにオフロードできるのに、自分でロジックをコーディングするのでしょうか!
corsiKa


4

C#、69バイト

s=>s.Contains(".")?float.Parse(s)<1.4?"1.4":s:int.Parse(s)<18?"18":s;

オンラインでお試しください!

テストケースを含む完全なプログラム:

using System;

namespace YesImAnAdult
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<string,string>f= s=>s.Contains(".")?float.Parse(s)<1.4?"1.4":s:int.Parse(s)<18?"18":s;

            Console.WriteLine(f("0"));  //18
            Console.WriteLine(f("1"));  //18
            Console.WriteLine(f("2"));  //18
            Console.WriteLine(f("12")); //18
            Console.WriteLine(f("18")); //18
            Console.WriteLine(f("43")); //43
            Console.WriteLine(f("122"));    //122

            Console.WriteLine(f("0.0"));    //1.4
            Console.WriteLine(f("1.04"));   //1.4
            Console.WriteLine(f("1.225"));  //1.4
            Console.WriteLine(f("1.399"));  //1.4
            Console.WriteLine(f("1.4"));    //1.4
            Console.WriteLine(f("1.74"));   //1.74
            Console.WriteLine(f("2.0"));    //2.0
            Console.WriteLine(f("2.72"));   //2.72
        }
    }
}

非常に簡単なソリューション。一部のシステムでは、float.Parse()が誤った結果を返す場合があることに注意してください。この回答に従って、CultureInfo.InvariantCultureを2番目の引数として渡します


私はあなたが交換して逃げることができると思う制約を考えるs.Contains(".")s[1]=='.'
復活モニカ- JustinM

うーんnvm、0テストケースを忘れました。あまりにも近い:(
ジャスティンM-モニカの復活

1
@Phaeze:はい、1桁の入力でIndexOutOfRangeExceptionが発生して失敗します。それ以外の場合、s[1]==46( '。'はASCIIコード46を使用)またはさらに積極的なアプローチ(インデックス1に数字と '。'文字のみがあると仮定)でバイトを削ることができますs[1]<47
アドリアンプ

1
ああ、私はそれが好きで、覚えようとします。私の愚かさを学習の機会に変えてくれてありがとう:)
JustinM-モニカの復活

4

IBM / Lotus Notes式言語、58 49バイト

@If(@Like(@Text(a);"%.%");@If(a<1.4;1.4;a);@If(a<18;18;a))

aが編集可能な数値フィールドである計算フィールド式。

編集

@If(@Like(@Text(a);"%.%");@Max(1.4;a);@Max(18;a))

@Megoに触発された代替


4

ゼリー16 15 13 バイト

ŒṘċ”.ị1.4,18»

TryItOnline
または、 TryItOnlineですべてのテストケースを見る

どうやって?

ŒṘċ”.ị1.4,18» - Main link: n
      1.4,18 - pair literals 1.4 and 18:   [1.4,18]
     ị       - index (1-based & modular ie:^  1, 0^)
  ċ          -     count (occurrences of)
   ”.        -         string "." (present in)
ŒṘ           -         string representation of n
           » - maximum (of this and n)

2
これを返す18ため2.0:(悲しいことに、
リン

ああ、ゼリーの複雑さは優れています。
エリックアウトゴルファー

@Lynnに感謝します。これよりも短い方法があるかもしれません。
ジョナサンアラン

4

C ++、68バイト

int A(int a){return a<18?18:a;}float A(float h){return h<1.4?1.4:h;}

この答えは実際には同じ名前の2つの関数であり、コンパイラーはどちらを呼び出すかを決定します。したがって、1つの入力を受け取ってどちらを決定する必要なく、1つの関数として機能します。浮動小数点の入力は出力と同じ精度であることが保証されているため、切り捨てを行うことなく安全に返すことができます。

Ungolfed +テスト

#include <iostream>

int A(int a)
{
   return a < 18 ? 18 : a;
}

float A(float h)
{
   return h < 1.4 ? 1.4 : h;
}

int main()
{
  std::cout << 0 << " " << A(0) << "\n";
  std::cout << 19 << " " << A(19) << "\n";
  std::cout << 1.1 << " " << A(1.1f) << "\n";
  std::cout << 2.2 << " " << A(2.2f) << "\n";
}

ユーザーSzali Szaliは、floatsをautosに変えることで2バイトを節約することを提案しました。ポリシーに従って編集を拒否しましたが、機能することを確認したら、ご自身で編集してください。
マーティンエンダー

そのすべてのテキストの複製!マクロを使用して2つの定義を生成することにより、複数の文字を保存できます。

@MartinEnderに感謝します。それらの編集はすべてのC ++コンパイラでコンパイルされるわけではなく、他の型が突然渡される可能性がある、あらゆる種類の奇妙なケースを導入するため、答えをもう少し移植性を保つために2バイトを受け入れます。
コーディ

@Codyそれはあなたの呼び出しですが、PPCGに関する限り、言語は実装によって定義されているため、回答は移植性がなく、特に安全である必要はありません。プログラムが動作するコンパイラがあれば(そして、無効な入力が動作するかどうかに関係なく、必要な入力が動作する)、それはまったく問題ありません。
マーティンエンダー

4

C#、58バイト

x=>x is int?(int)x>17?x:18:(float)x<1.4?"1.4":$"{x:.0##}";

C#には、クレイジーな文字列解析は必要ありません。入力があると予想されるintfloat(残念ながらC#をキャストすることができないdoublefloat場合doubleですobject)。出力は、intまたはのいずれかstringになりますobject

(少なくとも1つの10進数の要件をほぼ逃しましたが、今では追加されています)

ゴルフをしていない:

/*Func<object, object> Lambda = */ x =>
    x is int // if parameter is an int
        ? (int)x > 17 // check if x is at least 18
            ? x // at least 18 so return x
            : 18 // less than 18 so return 18
        : (float)x < 1.4 // x is float, check if at least 1.4
            ? "1.4" // less than 1.4 so return 1.4
            : $"{x:.0##"} // at least 1.4 so return x and ensure at least 1 decimal place
;

58バイトの代替実装。

x=>x is int?(int)x>17?x:18:$"{((float)x<1.4?1.4:x):.0##}";

4

実際には、16バイト

;:.7τ9τ($'.íuIkM

オンラインでお試しください!

説明:

;:.7τ9τ($'.íuIkM
;                 dupe input
 :.7τ             1.4 (.7*2) - note that :1.4 is the same length, but an additional delimiter would be needed to separate it from the following 1
     9τ           18 (9*2)
       ($'.íu     1-based index of "." in string representation of input, 0 if not found
             I    1.4 if input contains a "." else 18
              kM  maximum of remaining values on stack 

Actuallyでプログラミングしたことはありませんが、なぜ代わりに使用するの18ですか?私はそれが同じバイト数であることを知っているので、それは本当に重要ではありませんが、18より読みやすいようです。それとも、現在の実装/プログラミング言語で動作しない理由はありますか?
ケビンCruijssen

3
@KevinCruijssenは181とをプッシュし8ます。リテラルをプッシュするに18は、使用したい:18よりも長くなっています、
メゴ

ああ、もちろん、スタックベースの言語。説明ありがとう!+1
ケビンクルーッセン

4

Emacs Lisp、37バイト

(lambda(x)(max(if(floatp x)1.4 18)x))

整数バージョンと浮動小数点バージョンのどちらを使用すべきかを「データ型」から推測します。(floatptを返しますが1.0、を返しません1.)パラメータは整数または浮動小数点数numberpです。つまり、を満たす必要があります。


4

Haskell、49バイト

x#y=show.max x.fst<$>reads y;f s=head$18#s++1.4#s

基本的に、これは最初に入力を整数として読み取り、それが失敗した場合はdoubleを読み取ろうとします。次に、それをそれぞれの比較ベースラインと比較します。


3

Dyalog APL、14 バイトさらなる仕様により無効にレンダリング

⎕IO←0これは多くのシステムでデフォルトです。引数として文字列を取ります。

⍎⌈18 1.4⊃⍨'.'∘∊

⍎⌈ 評価された引数の最大値

18 1.4⊃⍨ {18,1.4}による選択

'.'∘∊ 引数にピリオドが含まれるかどうか


3

C#、95バイト

ゴルフ:

string y(string p){int a;return int.TryParse(p,out a)?a>17?p:"18":double.Parse(p)<1.4?"1.4":p;}

ゴルフをしていない:

class YesOfCourseImAnAdult
  {
    public string y(string p)
    {
      int a;
      return int.TryParse(p, out a) ? a > 17 ? p : "18"
       : double.Parse(p) < 1.4 ? "1.4" : p;
    }
  }

テストケース:

var codeGolf = new YesOfCourseImAnAdult();
Console.WriteLine(codeGolf.y("0"));
Console.WriteLine(codeGolf.y("1"));
Console.WriteLine(codeGolf.y("2"));
Console.WriteLine(codeGolf.y("12"));
Console.WriteLine(codeGolf.y("18"));
Console.WriteLine(codeGolf.y("43"));
Console.WriteLine(codeGolf.y("122"));

Console.WriteLine(codeGolf.y("0.0"));
Console.WriteLine(codeGolf.y("1.04"));
Console.WriteLine(codeGolf.y("1.225"));
Console.WriteLine(codeGolf.y("1.399"));
Console.WriteLine(codeGolf.y("1.4"));
Console.WriteLine(codeGolf.y("1.74"));
Console.WriteLine(codeGolf.y("2.0"));
Console.WriteLine(codeGolf.y("2.72"));

出力:

18
18
18
18
18
43
122

1.4
1.4
1.4
1.4
1.4
1.74
2.0
2.72

1
こんにちは、PPCGへようこそ!:あなたの現在のアプローチは、このようなビットに短縮することができるstring y(string p){int a;return int.TryParse(p,out a)?a<1?"18":p:double.Parse(p)<1.4?"1.4":p;}。(削除括弧の>=1.4<1.4交換することにより、"1.4"及びp、変更decimaldoubleなるMなくなっても、他の誰かがちょうど掲示した。C#で異なるアプローチ少し短いですあなたが見つけるかもしれない。ゴルフのためのヒントC#で
読み通すのが

こんにちは、有益なコメントをありがとう!私は、Ternary-Ternaryオペレーターからトラックを失うのを止めるために持っていた余分なブラケットを完全に忘れていました!全体で5バイト節約しました。
ピートアーデン

float.Parse代わりにを使用して1バイトを保存できますdouble.Parse。また、aの宣言をデフォルト値を使用してメソッドの引数に移動した場合、式本体メンバーを使用してreturnステートメントを削除できます。例:string f(string s,int a=0)=>int.TryParse(s,out a)?a>17?s:"18":float.Parse(s)<1.4?"1.4":s;
JustinM-モニカの復活

3

AWK-29バイト

($0<c=$0~/\./?1.4:18){$0=c}1

使用法:

awk '{c=$0~/\./?1.4:18}($0<c){$0=c}1' <<< number

テストはgawkRHEL 6で実行されました。残念ながらAWK、インターネットにアクセスできるマシンにはないので、コピーアンドペーストはできません。

これを行うよりコンパクトな方法はありAWKますか?


3

C、50バイト:

#define A(x)(x/2+(x+1)/2-x?x<1.4?1.4:x:x<18?18:x)

バイト数には、マクロ定義の最後の改行が含まれます。

テスト

#define A(x)(x/2+(x+1)/2-x?x<1.4?1.4:x:x<18?18:x)
#include <assert.h>
int main() {
  assert(A(0) == 18);
  assert(A(1) == 18);
  assert(A(2) == 18);
  assert(A(12) == 18);
  assert(A(18) == 18);
  assert(A(43) == 43);
  assert(A(115) == 115);
  assert(A(122) == 122);
  assert(A(0.0) == 1.4);
  assert(A(1.04) == 1.4);
  assert(A(1.225) == 1.4);
  assert(A(1.399) == 1.4);
  assert(A(1.4) == 1.4);
  assert(A(1.74) == 1.74);
  assert(A(2.0) == 2.0);
  assert(A(2.72) == 2.72);
}


3

C、119 111 105 100

m;f(char*s){float atof(),l=atof(s);for(m=s;*s&&*s++!=46;);puts(*s?l<1.4?"1.4":m:atoi(m)>18?m:"18");}

でテスト済み

main(c,v)char**v;{
    f("0");
    f("1");
    f("2");
    f("12");
    f("18");
    f("44");
    f("115");
    f("122");
    f("0.0");
    f("1.04");
    f("1.225");
    f("1.339");
    f("1.4");
    f("1.74");
    f("2.0");
    f("2.72");
}

出力

18
18
18
12
18
44
115
122
1.4
1.4
1.4
1.4
1.4
1.74
2.0
2.72

これは無効です... 12の入力を出力すべき18
ベータ崩壊

@BetaDecayあなたは正しい。追加の&キャラクターを追加する必要があります。それを指摘してくれてありがとう。
cleblanc

2

バッチ、102バイト

@set/ps=
@if %s:.=%==%s% (if %s% lss 18 set s=18)else if %s:~0,1%%s:~2,1% lss 14 set s=1.4
@echo %s%

最初に、すべて.のsを削除しても文字列に影響があるかどうかを確認することにより、入力が整数かどうかを判断します。そうである場合、値は18と簡単に比較されます。


2

PHP:40バイト

$i=is_int($i)?$i>17?$i:18:$i>1.4?$i:1.4;

psuedocode、(入れ子になったターナリー):

if (i is an integer) then 
  if (i is bigger than 17) then i=18 else i=i  
otherwise (its a decimal)   
  if (i is bigger than 1.4) then i=i else i=1.4 
end if 

1
PPCGへようこそ!入力は(デフォルトで)STDIN、関数引数、または完全なプログラム引数を介して行われる必要があることに注意してください。
アロス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.