수레를 개조하십시오!


19

3D 모델링 소프트웨어는 주로 UV 매핑 을 사용 하여 텍스처를 3D 객체에 매핑 합니다. U와 V의 유효한 값은 일반적으로 포함 [0..1]범위에 있습니다.

도전

사용하기 매우 쉬운 새로운 3D 모델링 소프트웨어를 구입했습니다. 그러나 UV 값에서 임의의 정수를 더하거나 뺍니다. 태스크는 입력 값을 수정하여 포함 [0..1]범위 의 부동 소수점 값을 얻는 프로그램 또는 함수를 작성하는 것 입니다.

결과 플로트는 원본과 동일한 소수 부분을 가져야하며 가능한 한 원본에 가깝습니다. 0및 모두 1출력 범위에 있으므로 0 이하의 정수는 0으로 변경되고 1 이상의 정수는 1로 변경되어야합니다.

JavaScript의 알고리즘 예 :

function modFloat(input) {
    while (input < 0 || input > 1) {
        if (input < 0) input += 1;
        if (input > 1) input -= 1;
    }
    return input;
}

규칙

  • 입력은 단일 정수 또는 부동 소수점 값입니다. 귀하의 답변에 명시된 한 모든 합리적인 형식이 허용됩니다.
  • 출력은 부동 소수점 값의 10 진수 표현이어야합니다.
  • 출력 정밀도는 입력과 소수점 이하 자릿수 이상이어야합니다.
  • 후행 0이 허용됩니다.
  • 코드가 정수 입력에 대해 출력 할 0 또는 1을 올바르게 선택했는지 확인하십시오.

테스트 사례

Input       | Output
------------+---------
         -4 | 0
         -1 | 0
          0 | 0
          1 | 1
          2 | 1
     1.0001 | 0.000100
 678.123456 | 0.123456
-678.123456 | 0.876544
        4.5 | 0.5

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!


4
1을 1로 매핑 하시겠습니까? 일반적으로 반 개방 범위가 사용됩니다. 당신의 의사를 바탕으로, 나는 모든 정수> 1-1는 가서 모든 정수를 <0 이동 0> 이해해야합니다
XNOR

4
입력이 1이면 모든 % 1 솔루션이 실패합니다!
seshoumara

9
사실, 나는 1-> 1을 좋아하는데, 그것은 많은 언어에서 사소한 내장 문제가되지 않도록합니다.
xnor

2
이것을 위해 sed를 사용할 수 있습니까? sed에는 데이터 유형이 없으며 입력은 텍스트 스트림이어야합니다.
seshoumara

1
@seshoumara any reasonable input format is allowed이므로 "왜 안돼?"라고 말하고 싶습니다.
lolbas

답변:


1

젤리 , 6 바이트

%1o>0$

온라인으로 사용해보십시오!

젤리는 더 없다 True거나 False,하지만 사용을 1하고 0자신을 대신합니다.

%1o>0$ - Main link: float v
%1     - v mod 1
     $ - last two links as a monad
   >0  -     v greater than zero?
  o    - or - replace the 0 result of the mod with 1 when v is greater than 0.

9

파이썬 , 20 바이트

lambda x:x%1or+(x>0)

온라인으로 사용해보십시오!

입력 모듈로 1을 취한 다음 양의 입력에 대해 출력을 0에서 1로 변환하여 경계 경우를 처리합니다. 부울 출력은 2 바이트를 절약합니다.

lambda x:x%1or x>0

1or구문 형광펜을 깨고 있다고 생각 합니다. (나는 그것이로 해석된다고 가정한다 1 or)
12Me21

@ 12Me21 네, 제대로 처리하는 형광펜을 보지 못했습니다.
xnor


6

Brachylog , 14 11 바이트

3 바이트 골프를위한 Fatalize에게 감사드립니다.

∧≜:?+.≥0∧1≥

변경 사항에 대해서는이 답변은 mod를 사용하지 않습니다 :)

온라인으로 사용해보십시오!

설명

∧≜                Label an integer variable. This will start trying different
                  values for this variable, the ones closest to 0 first.
   :?+.           This variable summed to the input is equal to the output
      .≥0∧1≥      which is >= 0 and <= 1

온라인에서 시도했을 때 양의 정수에 대해 0을 출력합니다.
Neil

1
@ Neil이 수정했습니다. 감사합니다. 왜 그리웠는지 모르겠어요
Leo

2
다음과 같이 3 바이트를 저장할 수 있습니다 ∧≜:?+.≥0∧1≥..
Fatalize

4

자바 스크립트 (ES6), 19 바이트

n=>(n%1+1)%1||n>0|0

JavaScript에서 n%x음수 인 경우 음수를 반환합니다 n. 즉, 양의 잔류 물을 얻으려면 음수 인 x경우 추가해야합니다 n. (n%x+x)%x모든 경우를 다룹니다 :

n     n%1   n%1+1 (n%1+1)%1
0     0     1     0
1     0     1     0
2.4   0.4   1.4   0.4
-1    0     1     0
-2.4  -0.4  0.6   0.6

20 바이트의 또 다른 작동 솔루션으로 패턴을 조금 더 보여줍니다.

n=>n%1+(n%1?n<0:n>0)

3

MATL , 9 바이트

1&\0>yg>+

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

입력 예 678.123456

1      % Push 1
       % STACK: 1
&\     % Implicit input. Divmod with 1
       % STACK: 0.123456, 678
0>     % Is it positive?
       % STACK: 0.123456, 1
y      % Duplicate from below
       % STACK: 0.123456, 1, 0.123456
g      % Convert to logical: nonzero becomes 1
       % STACK: 0.123456, 1, 1
>      % Greater than? This is true if fractional part of input was zero
       % and non-fractional part was positive
       % STACK: 0.123456, 0
+      % Add. Implicitly display
       % STACK: 0.123456

3

자바 스크립트, 28 바이트

m=f=>f<0?m(f+1):f>1?m(f-1):f

결과가 [0,1]이 될 때까지 값을 1 씩 재귀 적으로 감소 / 증가시킵니다


PPCG에 오신 것을 환영합니다.
ETHproductions

2

Japt , 8 바이트

u1 ªUbV1

온라인으로 테스트하십시오!

나는 이것이 내가 처음 사용한 것 같아 b...

설명

 u1 ªUbV1  // Implicit: U = input, V = 0
Uu1        // Take U%1, but add 1 if U is negative. This is equivalent to %1 in Python.
    ª      // If the result is falsy (0), instead take
     UbV1  //   U bound between 0 and 1.
           // This converts positive integers to 1, zero/negative integers to 0.
           // Implicit: output result of last expression

2

Mathematica, 20 바이트

#~Mod~1/. 0/;#>0->1&

설명

이것은 패턴과 관련이없는 조건 /;&&있기 때문에 내가 그것을 더 많이 사용하는 곳 의 다소 특이한 사용입니다 .

#~Mod~1...

x % 1양의 정수를 제외한 모든 경우에 맞는 Compute

.../. 0/;...

이전 표현하는 경우에 0을 교체 ...

...#>0...

... 입력은 긍정 ...

...->1...

1.


2

PHP, 37 바이트

<?=($m=fmod($argn,1))+(!!$m^$argn>0);

으로 실행합니다 echo <number> | php -R '<code>'.

이 작업을 수행하는 많은 방법이 있습니다. 이것은 PHP에서 가장 짧은 방법 중 하나 여야합니다.

fmod결과가 부정적 수레와 마이너스 0양의 정수에 대한; 그것들은 조정이 필요합니다 : float의 경우 true, 양의 float 및 negative int의 경우 false !!$m$n>0결과를 xoring , 음의 float 및 positive int의 경우 true; +캐스트는 것을 10- 다.


2

57 56 73 바이트

b;f(float n){b=n;printf("%f",((!(n-b)&&n<=0)?0:n<0?1.+n-b:(n-b)?n-b:1));}

@ 지적 pinkfloydx33 감사!

Ungolfed 버전 :

f(float n)
{
  int b=n;
  printf("%f",( (!(n-b)&&n<=0)?0:n<0?1.+n-b:(n-b)?n-b:1) );
}

온라인으로 사용해보십시오!


당신이 할 수있는 1.대신에 1.0?
Kritixi Lithos

@KritixiLithos 나는 그 표기법에 익숙하지 않지만 작동하는 것 같습니다.
아벨 톰

당신은 모든 것을 불러야 f합니까? 😂 또한 괄호 (f<0)가 필요 하다고 생각하지 않습니다 .
kennytm

그것은 뺄셈을 복제하지 않을 것이라고 생각합니다. 그러나 어느 쪽이든 그것은 작동하지 않습니다 f(1)(1을 반환해야 함)
pinkfloydx33

@ pinkfloydx33 덕분에 너무 그것을 지적, 그 코드는 지금까지 지금 잘 실행해야합니다 :). 수행을 고정에서!
Abel Tom

1

SmileBASIC, 28 바이트

INPUT N?N-FLOOR(N)+(N<<0==N)

1

자바 스크립트 (ES6), 19 바이트

n=>(n>0==!(n%=1))+n

설명 : %1모든 경우에 정확한 결과를 제공하지 않습니다

input       %1          output
-ve int     -0
-ve frac    -ve frac    +ve frac
0           0
+ve frac    +ve frac
+ve int     0           1

여분의 1 개의 요구는 음의 정수가 아닌과 양의 정수의 것이며 잘못되는 경우에 추가 할 수 있습니다. 이것이 표현식이 (n>0==!(n%1))계산하는 것입니다.


가이 여러 다른 장치가 있지만 아직 짧다 하나 ... 발견하지 않았습니다
ETHproductions

1

> <> , 26 바이트

:1%:?vr1(?v1n;
     >n;n0<

온라인으로 사용해보십시오!

솔루션 때문에 좋은 골프 언어의 은 거의 항상 즉시 제공 가지를 섞기로 결정했습니다. 첫 번째 <> <답변!

설명

:1%:?vr1(?v1n;    Assume input i in stack
     >n;n0<

:                 Duplicate i (need it if i%1 != 0)
 1                Push 1
  %               Pop i and 1, push i%1
   :              Duplicate top of stack because  we need one for the if     
    ?v            If i%1 != 0 ------------------------,
      r           Reverse stack so that i is TOS      | 
       1(?v       If i > 0 (not < 1)                  |
           1n;      Print 1 and Exit                  |
                  Else                                |                   
        n0<         Print 0 and --,                   |
     >n           Print n <-------|-------------------'
       ;          Exit <----------'

재미있는 사실 : 설명은 유효한 <> <프로그램입니다!


0

자바 스크립트, 41 28 바이트

n=>n-Math.floor(n)+(n<<0==n)

Math.floor() 너무 길다 ...


n|0보다 짧은 Math.floor(나는 그것이 작동하는 생각)
Kritixi LITHOS

|0와 다른 floor()음의 숫자.
12Me21

0

Pyth, 7 바이트

|%Q1s<0

설명

|%Q1s<0
|%Q1s<0Q      Implicitly add input
 %Q1          Input mod 1
|             Short-circuting or
    s<0Q      1 if input is positive, 0 otherwise

True와 False를 1과 0으로 사용하지 않으려면 s6 바이트 를 사용할 수 있습니다 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.