예, 물론 성인입니다!


44

나는 우리 모두 이것을 어렸을 때 그렇게했다고 생각합니다. 일부 웹 사이트는 최소 18 세가 필요합니다. 따라서 우리는 출생 연도에서 몇 년을 뺀 것입니다.
또한 유원지에서 대부분의 놀이기구의 경우 입력 할 수있는 최소 높이는 1.40 미터입니다 (네덜란드에서는 최소 높이). 물론 이것은 나이보다 쉽게 ​​속일 수는 없지만 두꺼운 발 뒤꿈치가있는 신발을 신고 머리카락을 올리고 모자를 쓰고 발가락에서는 등을 할 수 있습니다.

입력:

프로그램 / 함수는 양의 정수 또는 소수를 허용합니다.

산출:

  • 입력 값이 정수 >= 18입니까? 입력을 간단히 인쇄하십시오.
  • 입력 값이 정수 0-17입니까? 인쇄 18.
  • 입력 값이 10 진수 >= 1.4입니까? 입력을 간단히 인쇄하십시오.
  • 입력 값이 10 진수 0.0-1.4입니까? 인쇄 1.4.

도전 규칙 :

  • 입력 값이 항상 0-122(가장 오래된 여자는 122 명) 또는 0.0-2.72(가장 큰 남자는 2.72) 범위에 있다고 가정하십시오 .
  • 입력을 문자열, 객체 또는 원하는 다른 것으로 취할 수 있습니다.
  • 소수점 입력은 소수점 다음에 소수점 이하 3 자리를 넘지 않습니다.
  • 2또는 2.둘 다에 대한 유효한 출력이 아닙니다 2.0. 그러나 자유롭게 2.00또는 2.000대신 출력 할 수 있습니다 2.0.
    입력과 마찬가지로 출력은 소수점 다음에 소수점 이하 세 자리를 넘지 않습니다.

일반적인 규칙:

  • 이것은 이므로 바이트 단위의 최단 답변이 이깁니다.
    코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. '모든'프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오.
  • 표준 규칙이 답변에 적용 되므로 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

입력에 선행 0이 없다고 가정 할 수 있습니까?
Toby Speight

@TobySpeight 예, 선행 0이 없습니다.
Kevin Cruijssen

2
0.0-2.72 (tallest man ever was 2.72).-당신은 0.0태어날 때가 아닙니다 ...
Johan Karlsson

1
내가 아는 @JohanKarlsson, 최소를 추가하는 방법에 대한 생각,하지만 난 그냥 시작하자하기로 결정 0하고 0.0. :) 추가 tallest man ever was 2.72되고 oldest woman ever was 122방금 관심있는 사람들을위한 정보 정보로 추가되었습니다.
Kevin Cruijssen

9
"[...] 그래서 우리는 생년월일에 몇 년을 더합니다 [...]"생년월일 에서 몇 년 을 빼지 않겠습니까?
wythagoras

답변:



45

파이썬 2.7, 34 바이트

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

이것이 2.0으로 무엇을 반환합니까?
Adám

2
@ Adámmax(2.0,[18,1.4][True]) == max(2.0,1.4) == 2.0
Lynn

3
아뇨. 직접 해보지 않겠습니까? :)
Lynn

5
@ Adám 파이썬 에는 repl.it 또는 ideone.com 을 사용 합니다. 내가 게시 한 Python 답변을 보면 아마도이 두 가지 중 하나에 대한 링크가 있습니다.
mbomb007

1
신경 쓰지 마 따라서 기본적으로 true 또는 false는 해당 배열의 0 또는 1 인덱스에 매핑 된 다음 두 숫자에 max를 적용합니다.
Alexandru Pupsa

15

자바 스크립트 (ES6), 27 31

문자열로 입력을받습니다. 입력 값에 소수점이 있는지 확인하기 위해 자체에 추가됩니다. 소수점이 없으면 결과는 여전히 유효한 숫자입니다. 그렇지 않으면 그렇지 않습니다. 유효한 숫자 (0 포함)를 인식하기 위해 자바 스크립트 1/n에서 숫자를 나누는 숫자를 사용하고 숫자가 0이 아닌 숫자를 사용합니다 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.018
Neil

과연. 2.0%11.0%10 발생합니다
aross

4
'javascript (es6)는 장황하다', 당신은 codegolf에서
dwana

@Neil은 두 번째로 당신이 옳다고 생각했습니다
edc65

3
1/(x+x)-이제 상상력이 넘칩니다!
Neil

13

05AB1E , 13 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 (읽기 : 젠장, 정말 빨랐습니다.) 물론 간단합니다.
Kevin Cruijssen

2
@KevinCruijssen : 예, 많은 키 누르기를 요구하지 않는 언어에서는 구현이 매우 빠릅니다. : P
Emigna

@EriktheGolfer : 더 좋습니까? 부담없이 편집하십시오. 나는 몇 가지 다른 형식 지정 방법을 실험 해 왔으며 엄격하게 가장 좋은 방법을 결정하지 않았습니다. 제안을 환영합니다.
Emigna

@Emigna 방금 중요한 공간 두 개를 추가했습니다.
Outgolfer Erik

2
@FrancescoCasula : TIO에서 작동하는 더 짧은 솔루션을 찾았습니다 :)
Emigna

8

자바 8, 90 61 57 바이트

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

Object대신에 -4 바이트 반환 String; Java 7을 8로 변환하는 일부 추가 바이트.
-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 연산자를 대괄호로 묶어야합니까?
Roman Gräf

1
@ RomanGräf 예; 삼항는보다 낮은 우선 순위가 +당신이 괄호를 제거하는 경우, 그것은로 전환한다고하는 수단(""+i.contains(...)) ?
닉 하틀리


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.418
user59178

@ user59178 내가 사용할 수있는 is_numeric문자열에 아니지만is_int
요 르그 Hülsermann

이것이 +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

엑셀 : 26 31 29 바이트

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

수식은 입력 셀인 A1을 제외한 다른 곳으로 갈 수 있습니다.

오류를 수정하고 Emigna의 제안으로 대체되었습니다.

진리를 사용하여 바이트를 절약 해 준 Alexandru에게 감사드립니다.


1
또한 n입력 셀 의 이름을 정의하는 것이 좋지 않습니까? 문서의 어느 위치 에나있을 수 있으며 2 바이트 더 짧습니다.
Emigna

@Emigna 할 수 는 있지만 그 시점에서 약간의 속임수를 느낍니다. 이름 당 1 바이트는 문제가되지 않으며이 형식을 유지하면 사람들이 쉽게 복사하여 붙여 넣을 수 있습니다.

예를 들어 파이썬에서 람다에 1 문자 입력 변수를 사용하는 것과 다른 점을 보지 못했습니다. 그러나 그것은 당신의 전화입니다 :)
Emigna

안녕하세요! 바이트를 어떻게 계산합니까? 기본 이름을 가진 공식으로 파일을 저장합니까?
Vityata

1
'= 0'을 제거하고 결과를 전환 할 수 있습니다. 1.4 첫째, 18 초 또한 소수점 구분 기호로 쉼표가 있으므로 대부분의 사람들에게이 기능이 작동하지 않을 수 있습니다.
Alexandru Pupsa


5

펄, 29 27 바이트

에 +2 포함 -lp

STDIN에 입력하십시오

adult.pl <<< 1.24

adult.pl:

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

만약 당신이 정말로 완전한 성인이라면 여분의 줄 바꿈이 마음에 들지 않는다면 l26 바이트에 대한 옵션을 생략 해도 효과가 있습니다.


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'이 표시 될 때 문자열의 시작을 테스트 할 필요가 없습니다. -소수점 앞에 한 자리 만 있다는 것을 알고 있습니다.

검사 결과:

$ ./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

하스켈, 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는 read, maxshow다형성이며, 모든 숫자 유형을 처리합니다.


나는 영리하고 경비원없이 그것을 할 것이라고 생각했지만 결국 약간 길어졌습니다 : (내 버전 :(#)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으로 parens를 저장하는 정말 멋진 아이디어!
큐빅

5

자바, 79 70 바이트

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

조건부 연산자를 사용하는 오버로드로 두 가지 방법을 정의합니다.

f(5)또는 처럼 부르십시오 f(1.4f).


1
안녕하세요. x<18?18:x그리고 x<1.4f?1.4f:x댄 짧다 Math.max. Java에서 골프를 즐기기위한 팁 을 읽는 것이 흥미로울 것이라고 생각합니다 . :)
Kevin Cruijssen

예, 물론입니다. 내가 어떻게 잊었
을까

나는 이것을 좋아한다! 컴파일러로 로직을 오프로드 할 수있을 때 로직을 직접 코딩해야하는 이유!
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를 따라 두 번째 인수로 이 답변 .


난 당신이 교체 넘어갈 수 있다고 생각 제약을 감안할 s.Contains(".")s[1]=='.'
Phaeze

흠 nvm, 0 테스트 사례를 잊어 버렸습니다. 너무 가까이 :(
Phaeze

1
@Phaeze : 예. IndexOutOfRangeException이있는 1 자리 입력에서 실패합니다. 그렇지 않으면 s[1]==46( '.'에 ASCII 코드 46이 있음) 또는 더 적극적인 접근법 (인덱스 1에 숫자와 '.'문자가 있다고 가정) 으로 바이트를 줄일 수 있습니다 s[1]<47.
adrianmp

1
Oo 마음에 들었습니다. 기억하려고합니다. 내
관용구를

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:( 슬프게도,

아, 젤리의 복잡성은 우수하다.
Erik the Outgolfer

@Lynn 감사, 무려 비용으로 고정; 아마도 이것보다 짧은 방법이있을 것입니다.
Jonathan Allan

4

C ++, 68 바이트

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

이 대답은 실제로 같은 이름을 가진 2 개의 함수이며 컴파일러는 호출 할 함수를 해결하므로 하나의 입력을 취하여 어떤 함수인지 결정하지 않고도 하나의 함수로 작동합니다. 부동 소수점의 입력은 출력과 동일한 정밀도를 보장하므로 잘리지 않아도 안전하게 반환 할 수 있습니다.

언 골프 + 테스트

#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 Szalifloats를 autos 로 전환하여 2 바이트를 절약 할 것을 제안했습니다 . 정책에 따라 수정을 거부 했지만 작동 여부를 확인한 경우 자유롭게 수정하십시오.
Martin Ender

그 모든 텍스트 복제! 매크로를 통해 두 가지 정의를 생성하여 여러 문자를 저장할 수 있습니다.

@MartinEnder에게 감사합니다. 그들의 편집은 모든 C ++ 컴파일러에서 컴파일되지 않으며 갑자기 다른 유형이 전달 될 수있는 모든 종류의 이상한 경우를 소개하므로 대답을 좀 더 이식 가능하게 유지하기 위해 2 바이트를 허용합니다.
Cody

@Cody 그것은 당신의 전화이지만, PPCG에 관한 한 언어는 그들의 구현에 의해 정의되므로 답변은 휴대 가능하거나 특히 안전 할 필요가 없습니다. 프로그램이 작동하는 컴파일러가 있고 유효하지 않은 입력이 작동하는지 여부에 관계없이 필요한 입력이 작동하는 컴파일러는 완전히 괜찮습니다.
Martin Ender

4

C #, 58 바이트

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

C #에는 미친 문자열 파싱이 필요하지 않습니다. 입력가 될 것으로 예상된다 int또는 float(불행하게도 C 번호는 캐스팅 할 수 없습니다 doublefloat(가) 경우 double에있다 object). 출력은 int또는 string입니다 object.

(최소 1 자리 이상의 요구 사항을 놓쳤으며 지금 추가했습니다)

언 골프 드 :

/*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 

나는 실제로 전에 프로그래밍 한 적이 없지만 왜 대신에 18? 바이트 수가 동일하므로 실제로 중요하지 않지만 18더 읽기 쉬운 것처럼 보입니다. 아니면 현재 구현 / 프로그래밍 언어에서 작동하지 않는 이유가 있습니까?
Kevin Cruijssen

3
@KevinCruijssen 18은 a 1와 a를 푸시 합니다 8. 리터럴을 푸시하려면 보다 긴을 18사용 합니다. :18
Mego

물론 스택 기반 언어. 설명 주셔서 감사합니다! +1
Kevin Cruijssen

4

이맥스 리스프, 37 바이트

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

정수 또는 부동 버전 중 어느 것을 사용해야하는지 "데이터 유형"을 사용합니다. ( floatp반환 t에 대한 1.0,하지만하지 않는 1.) 매개 변수는 정수 또는 float로 숫자이며, 그것이 만족해야 즉 numberp.


4

하스켈, 49 바이트

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

기본적으로 이것은 먼저 입력을 정수로 읽은 다음 실패하면 이중으로 읽습니다. 그런 다음 해당 비교 기준과 비교합니다.


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 #을에 흥미를 통해 읽어 다시, 환영합니다 :).!
케빈 Cruijssen

안녕하세요, 유용한 의견에 감사드립니다! 나는 Ternary-Ternary 연산자로부터 트랙을 잃는 것을 막기 위해 여분의 브래킷을 잊어 버렸습니다! 전체적으로 5 바이트를 절약했습니다.
Pete Arden

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;
Phaeze

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 #, 71 바이트

object A(object i){return i is int?(int)i>18?i:18:(double)i>1.4?i:1.4;}

그것을 시도 여기


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을 출력해야합니다
Beta Decay

@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%

먼저 모든 삭제 .가 문자열에 영향을 미치는지 확인하여 입력이 정수인지 여부를 판별합니다 . 이 경우 값은 18과 쉽게 비교되고, 그렇지 않으면 첫 번째와 세 번째 문자는 14와 비교되는 숫자로 결합됩니다.


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, 함수 인수 또는 전체 프로그램 인수를 통해 이루어져야합니다.
aross
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.