최적의 슬라이딩 도어 너비 찾기


13

슬라이딩 도어는 도어 너비에 따라 가격이 다릅니다. 다른 가격은 다음과 같습니다.

  • 60-80 cm : ¤150
  • 81-100 cm : ¤200
  • 101-120 cm : ¤220

옷장을 구입할 때 분명히 비용을 최소화하고 싶기 때문에 옷장의 전체 너비를 기준으로 총 비용을 최소화하는 문 너비를 찾는 것이 좋습니다.

규칙 :

  • 총 너비가 입력으로 사용됩니다
  • 모든 문의 너비는 동일합니다
  • 두 유형의 문에 동일한 비용이 드는 경우 가장 작은 문을 선택하십시오.
  • 너비는 센티미터이며 소수는 정수가 아닙니다.
    • 소수를 반올림
  • 가격은 정수로 표시되어야합니다 (통화 부호 필요 없음).
  • 입력 및 출력 형식은 선택 사항이지만 출력 순서는 다음과 같아야합니다 Number of doors, Width, Price.
  • 입력 범위 내에 [120 1000)있습니다.

이것은 코드 골프입니다. 바이트 단위의 최단 코드가 이깁니다.

예 :

Input: 156
Output: 2, 78, 300

Input: 331
Output: 3, 111, 660

Input: 420
Output: 4, 105, 880

너비 201는 흥미로운 테스트 사례입니다.
AdmBorkBork

8
미닫이 문? 분명히 모든 문에는 @Doorknob이 필요합니다.
Alex A.

답변:


2

05AB1E , 47 바이트

암호:

D120/ó>DU=/ó>=D101›iX220*=q}D80›iX200*=q}X150*=

최고의 제출물은 아니지만 적어도 :)

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


333을 TIO에 넣으면 3 * 111이 333과 완벽하게 일치하므로 (afaik) 출력이 [3, 111, 660]이어야 할 때 [3, 112, 660]의 출력을 제공합니다.
Helen

201과 비슷한 문제로 [2, 101, 440] 대신 [2, 101, 400]을주는 문제
Helen

4

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

t=>[[80,150],[100,200],[120,220]].map(([w,p])=>[n=-~(~-t/w),-~(~-t/n),n*p]).sort((a,b)=>a[2]-b[2])[0]

-~(~-a/b) 31 비트 정수에서 Math.ceil (a / b)와 동일합니다.


4

190 180 154 133 128 117 바이트

+1 포함 -p

use POSIX;$m=1E4;for$q(80,100,120){($m,@z)=($p,$n,ceil$_/$n)if$m>($p=(150,200,220)[$x++]*($n=ceil$_/$q))}$_="@z $m"

댓글 :

use POSIX;                                  # for ceil()
$m = 1E4;                                   # init min price to 10k
for $q (80,100,120) {                       # iterate widths
    ($m,@z) = ($p,$n, ceil $_/$n)           # update min, output
    if $m > (                               #
       $p = (150,200,220)[$x++]             # grab price
          * ( $n = ceil $_/$q )             # times nr of doors needed
    )
}
$_="@z $m"

  • 해시를 두 배열로 인라인 및 분할하여 11 바이트 절약

  • -p(@ dev-null 덕분에)을 사용하여 5 바이트를 절약하십시오.

  • POSIX :: ceil을 사용하여 18 바이트를 절약하고 해시의 목록 구문을 사용하여 3 바이트를 더 절약하십시오 (@ msh210 덕분에)


보다 짧은 sub r{$a=$_[0];~~$a==$a?$a:1+~~$a}IS sub r{use POSIX;ceil pop}.
msh210

보다 짧은 (80=>150,100=>200,120=>220)IS (80,150,100,200,120,220).
msh210

이것은 매우 넓은 문 (가격이 10_000 이상인 경우)에서 작동합니까?
msh210

@ msh210 팁을 주셔서 감사합니다. 통합하겠습니다! 아니, 그것은 질문에 지정된 범위에서만 작동 [120-1000)하지만 하나는 항상 ...로 변경할 1E4수 있습니다 1E9.
Kenney

오, 나는 그 질문이 범위를 지정했음을 알지 못했다.
msh210

3

PowerShell, 137135 바이트

param($a)$j=9e9;60..120|%{if((($c=[math]::ceiling($a/$_))*($p=(220,(200,150)[$_-le80])[$_-le100]))-lt$j){$j=($k=$c)*$p;$i=$_}}
$k;$i;$j

출력은 줄 바꿈으로 구분됩니다.

우리는 input을 취하고 $a비용 $j9000000000(우리가 필요로하는 것보다 더 큰 수)로 설정합니다. 다음으로 60..120로 시작 |%{...}합니다. 반복 할 때마다 의사 삼진 문$p 을 사용하여 현재 항목 의 가격 을 계산 한 다음의 상한 을 계산합니다 . 현재 총계가 본 가장 작은 총계 ( ) 보다 작은 경우 (총계), (필요한 문 수) 및 (문 너비) 변수를 모두 저장 하고 루프를 계속하십시오. 루프가 완료되면 최상의 값을 출력하십시오.$c$a/$_$j$j$k$i

편집- $c$p할당을 if조건부 로 이동하여 2 바이트를 저장했습니다.


2

Pyth, 65 바이트

ho+eNcehNTm[d*hd?>81ed150?<101ed220 200)f}eTr60 121m[d.EcQd)r2 17

여기 사용해보십시오!

설명

먼저 가능한 모든 문 개수 / 문 너비 조합의 목록을 생성하고 모든 조합에 대한 가격을 계산합니다. 그런 다음 가격과 문 너비로 주문하고 결과 목록의 첫 번째 요소를 가져와야합니다.

골프를 밟은 후에 코드 설명이 이어집니다 . 골프를 도와주세요. 너무 길어요.

ho + eNcehNTm [d * hd?> 81ed150? <101ed220 200) f} eTr60 121m [d.EcQd) r2 17 # Q = 입력

                                                   m r2 17 # 맵 범위 (2,17) ~
                                                    [d) # 문 개수가 먼저 인 목록
                                                      .EcQd # 및 너비 초
                                        f # T로 필터 맵 결과 필터링
                                         } r60 121 # 범위 (60,121)
                                          eT # 문 너비
          m # d를 사용한 맵 필터 결과
           [d) # 문 개수와 너비가 먼저있는 목록
             * hd # 복수 문 개수
                ?> 81ed150? <101ed220 200 # 문당 가격, 삼항으로 간단한 조회
 N을 사용한 주문 맵 결과
  + eNcehNT # 주문 키 = 가격 + 폭 / 10
h # 첫 번째 요소가 최고입니다

1

자바 스크립트 (ES6) 96

n=>[80,100,120].map((d,i)=>[d=-~(~-n/d),-~(~-n/d),d*[150,200,220][i]]).sort((a,b)=>a[2]-b[2])[0]

=-~(~-n/d)@Neil이 지적했듯이 32 비트 이하의 정수를 반올림하여 나누는 것과 같습니다.


1

R , 135 104 바이트

"!"=utf8ToInt;cbind(n<-16:1,w<-ceiling(scan()/n),p<-n*approx(!"<Qex",!"–ÈÜÜ",w,"c")$y)[order(p)[1],]

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

31 바이트 절약

  • 압축 해제 번호
  • 사용 utf8ToInt
  • "!"사용 함수 호출을 단축
  • 벡터화 된 함수 사용
  • 전체 길이를 정의하지 않음
  • cbind변수를 정의한 후가 아닌 직접 사용

작동 방식 :

  1. approx길이에 따라 단일 문의 가격을 반환합니다. NA범위를 벗어난 상태로 돌아갑니다 [60,120].
  2. 사양에 따라 총 문 수는 16을 초과 할 수 없습니다 (총 길이 1000). 16에서 1까지의 모든 문이 테스트되고 트리플렛 (number of doors, door width, total price)이 반환됩니다.
  3. order기능은 최저 가격을 찾는 데 사용됩니다. 이를 기반으로 올바른 삼중 항이 추출됩니다. 동점 인 경우, order 먼저 나오는 항목을 반환하고, 16에서 1로 반복하므로 가장 많은 수의 문 (가장 작은 문 너비)이 반환됩니다.

stepfun 너비를 벗어난 너비를 제거해야하므로 사용 시간 이 길어집니다[60,120] .
JayCe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.