samplemaker_weibull <- function(n=130,shape=4,scale=1,end=1.5 ){
  x <- rweibull(n,shape,scale)
  t <- runif(n,0,end)
  
  observedx <- x[which(x>t)]
  
  return(observedx)
}

## 設定以下起始值

# 假設需要n_conditioned個observedx
n_conditioned <- 100000
# n_batch: samplemaker_weibull(n = n_batch)
n_batch <- n_conditioned
# pass_ratio: samplemaker_weibull內條件的通過率
pass_ratio <- NULL
# result: 所有生成的樣本
result <- NULL
# len: result的長度, 等於n_conditioned時停止迴圈
len <- 0


## 樣本生成

while(len < n_conditioned) {
  N <- samplemaker_weibull(n = n_batch)
  
  # 每次迴圈會計算1次pass_ratio, 並從中找出min
  pass_ratio <- c(pass_ratio, length(N)/n_batch)
  pr_min <- min(pass_ratio)
  
  # 修改下次迴圈輸入的n_batch: 依據不足樣本數及pass_ratio計算期望值*2
  n_batch <- (n_conditioned - length(N))/pr_min*2
  
  # 產生結果並計算結果長度
  result <- c(result, N)
  len <- length(result)
}

## 得到n_conditioned樣本
result_n_conditioned <- sample(result, n_conditioned, replace = FALSE)