Mở rộng trò chơi Sevens


8

Giới thiệu

Xuất ra tất cả các số trong cơ sở cụ thể sẽ xuất hiện trong phiên bản trò chơi bảy.

Thử thách

Nhiệm vụ của bạn là xuất tất cả các số trong một cơ sở nhất định trong một phạm vi nhất định, bỏ qua các số phù hợp với các điều kiện nhất định.

Bạn sẽ được cung cấp bốn đầu vào: base elim startend. Vai trò của bốn biến như sau:

  • basechỉ định cơ sở nào chúng ta đang sử dụng cho ba biến còn lại và cho đầu ra. Một cách để thể hiện nó là sử dụng một ký tự duy nhất là '8', '9' hoặc chữ in hoa từ 'A' đến 'Z', sử dụng 'A' cho hệ thập phân và 'G' cho hệ thập lục phân. Các cơ sở dự kiến ​​sẽ được hỗ trợ là 8 đến 35 (bao gồm). Đây chỉ là cách được đề xuất của tôi để thể hiện basevà tôi sẽ sử dụng nó trong phần Ví dụ đầu vào và đầu ra , nhưng cũng tốt khi sử dụng cách riêng của bạn để diễn đạt nó. Ví dụ: bạn có thể chọn định dạng basenhư biểu diễn thập phân thông thường của nó.

  • startendlà hai chuỗi xác định phạm vi số được xuất ra, được biểu thị trong số đã cho base. Nếu baseGstartđang 10end1F, bạn cần xuất ra 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F, nhưng bạn cũng cần loại bỏ một số chúng dựa trên những gì elimđược, sẽ được giải thích sớm.

  • elimlà một ký tự đơn và phải là một chữ số hợp lệ trong số đã cho base. Tất cả các số có chứa chữ số elimhoặc là bội số của elimnên được loại bỏ khỏi danh sách để tạo đầu ra cuối cùng.

Trong trường hợp trên, nếu elim7, thì 17cần phải loại bỏ vì nó chứa chữ số 7. 151Ccũng cần phải được loại bỏ bởi vì chúng là bội số của 7. Vì vậy, đầu ra cuối cùng sẽ là10 11 12 13 14 16 18 19 1A 1B 1D 1E 1F

Các trường hợp thử nghiệm

Input -> Output

G,7,10,1F -> 10 11 12 13 14 16 18 19 1A 1B 1D 1E 1F
A,3,1,100 -> 1 2 4 5 7 8 10 11 14 16 17 19 20 22 25 26 28 29 40 41 44 46 47 49 50 52 55 56 58 59 61 62 64 65 67 68 70 71 74 76 77 79 80 82 85 86 88 89 91 92 94 95 97 98 100
G,A,96,C0 -> 97 98 99 9B 9C 9D 9E 9F B0 B1 B2 B3 B5 B6 B7 B8 B9 BB BC BD BF C0

Trường hợp thử nghiệm thứ ba được thêm vào sau bài viết gốc. Tất cả các câu trả lời được đăng trước khi chỉnh sửa đã được kiểm tra và vượt qua bài kiểm tra thứ ba.

Thông số kỹ thuật

  • Đầu vào sẽ luôn hợp lệ, vì vậy đừng lo lắng về việc xử lý ngoại lệ.

  • Đây là , số byte thấp nhất sẽ thắng.

  • Bạn có thể nhận đầu vào và cung cấp đầu ra thông qua bất kỳ hình thức tiêu chuẩn nào và bạn có thể tự do chọn định dạng.

  • Như thường lệ, sơ hở mặc định áp dụng ở đây.

  • Điều này dựa trên (phiên bản đời thực) của trò chơi bảy mươi .

  • Tôi yêu cầu basephải có ít nhất 8 hoàn toàn do sở thích cá nhân. Tôi chỉ không muốn thấy số chữ số trong chuỗi tăng quá nhanh.

Bảng điểm

Đoạn trích lấy từ câu hỏi này . Chạy đoạn trích để lấy bảng điểm.


11
Chào mừng đến với PPCG! Đây là một bài đăng đầu tiên hay, nhưng tôi có một vài đề xuất: Tránh các định dạng Đầu vào / Đầu ra rất nghiêm ngặt ( base,elim,start,end, 'A' cho hệ thập phân , 'G' cho hệ thập lục phân ), hãy thử định dạng các trường hợp thử nghiệm của bạn theo cách dễ dàng sử dụng và xem xét sử dụng Hộp cát để nhận phản hồi trước khi đăng lên trang web chính. Nhìn chung, đây là một thử thách đầu tiên tốt!
Ông Xcoder

1
@ WeijunZhou Chắc chắn, tôi sẽ thử xem lại sau. Ngoài ra, vui lòng liên hệ với chúng tôi trong trò chuyện nếu bạn gặp khó khăn trong khi chỉnh sửa và / hoặc muốn có mẹo.
Ông Xcoder

1
@ Mr.Xcoder Tôi đã hoàn thành việc chỉnh sửa. Bạn cũng có thể trực tiếp chỉnh sửa câu hỏi để làm cho nó tốt hơn và tôi sẽ cố gắng học hỏi từ chỉnh sửa của bạn.
Weijun Zhou

1
@WeijunZhou Tôi cũng muốn đề nghị làm cho các định dạng đầu vào cho start, endelimkhoan dung hơn.
Erik the Outgolfer

5
Đối với "G,7,10,1F"đầu vào, một cách tiếp cận hoàn toàn linh hoạt sẽ cho phép, ví dụ, [16,7,16,31]như đầu vào và [[1,0],[1,1],[1,2],[1,3],[1,4],[1,6],[1,8],[1,9],[1,10],[1,11],[1,13],[1,14],[1,15]]đầu ra. (Lưu ý rằng câu trả lời đầu tiên cho rằng một số điều này đã được cho phép, vì nó khá chuẩn - nhưng nó hoàn toàn phụ thuộc vào bạn).
Jonathan Allan

Câu trả lời:


10

Biểu tượng cảm xúc , 141 116 byte

cảm ơn @NieDzejkob cho 25 byte!

🍇a🚂b🚂c🚂d🚂🔂i⏩c➕1d🍇🍊🎊❎😛0🚮i b☁️🔍🔡i a🔡b a🍇😀🔡i a🍉🍉🍉

Hãy thử trực tuyến!

🍇				
  a🚂 b🚂 c🚂 d🚂		👴 4 arguments of type 🚂 (integer)
  🔂 i  ⏩ c  ➕ 1 d 🍇		👴 for i in range(c, d+1)
    🍊 🎊 			👴   if cond_a and cond_b
      ❎ 😛 0  🚮 i b		👴     cond_a: i%b != 0
      ☁️ 🔍 🔡 i a  🔡 b a	👴     cond_b: i in base-a doesnt have b in base-a
    🍇				👴   then
      😀 🔡 i a			👴     print i in base-a
    🍉
  🍉
🍉


3
-1 cho lựa chọn ngôn ngữ _ಠ
Rod

3
Bạn chỉ có thể đăng một bao đóng, đó là biểu tượng cảm xúc tương đương với lambda. Điều này sẽ giúp bạn tiết kiệm một số byte.
NieDzejkob

5

Thạch ,  12  11 byte

-1 nhờ Erik the Outgolfer (sử dụng "trật tự" thay cho số chia với các đối số được hoán đổi, ḍ@)

r/ọÐḟ⁵bċÐḟ⁵

Một chương trình đầy đủ lấy ba đầu vào làm đối số dòng lệnh, tất cả đều sử dụng ký hiệu thập phân - một danh sách [start, end]và hai số baseelim- in đại diện Jelly của danh sách các danh sách, trong đó mỗi đại diện cho các chữ số của một số basevà mỗi chữ số là một số thập phân (ví dụ 1043 trong cơ sở 20 sẽ [2,12,3]là 2 × 20 2 + 12 × 20 1 + 3 × 20 0 ).

Hãy thử trực tuyến!

Một lưu ý nhỏ: điều này sẽ không hoạt động đối với các phạm vi bao gồm các giá trị âm, nhưng thử thách được liên kết bắt đầu từ 1 và được tính lên.

Làm sao?

r/ọÐḟ⁵bċÐḟ⁵ - Main link: list, [start, end]; number, base
 /          - reduce [start, end] with:
r           - inclusive range => [start, start+1, ..., end]
   Ðḟ       - filter discard if:
     ⁵      -   program's 5th argument (the 3rd input), elim
  ọ         -   order (how many times the element is divisible by elim, or 0 if not)
      b     - convert to base "base"
        Ðḟ  - filter discard if:
          ⁵ -   program's 5th argument (the 3rd input), elim
       ċ    -   count (0 if elim is not a digit)

ḍ@có thể ;) (btw tôi đã đăng rọÐḟ⁶b⁵ċÐḟ⁶...)
Erik the Outgolfer 26/1/18

Ah yeah, không bao giờ sử dụng arg thứ sáu!
Jonathan Allan

1
Như thường lệ, bạn có phiền mở rộng nó và xây dựng cách thức hoạt động không?
Weijun Zhou

Một giải pháp thay thế ọÐḟcó thể là%Ðf
Ông Xcoder

2

Julia 0,6 , 69 byte

f(b,e,r,g=filter)=g(z->!contains(z,base(b,e)),base.(b,g(x->x%e>0,r)))

Đầu vào là base, elim, start:endnơi start:enda UnitRange. làm số nguyên cơ sở 10. Xuất ra một danh sách các chuỗi của các số trong cơ sở đã cho. Các bộ lọc cho tính phân chia ở dạng số nguyên, sử dụng base.để chuyển đổi thành phần tử thành chuỗi, sau đó lọc trên ngăn chứa chữ số. Ví dụ được gọi là:f(10,3,1:100)

Hãy thử trực tuyến!


1
Tôi đã không nghĩ đến việc sử dụng mặc định trong một chữ ký cho các chương trình con bí danh, tôi sẽ phải nhớ điều đó cho các bài đăng Perl 6 trong tương lai.
Brad Gilbert b2gills


1

Perl 6 ,  94  57 byte

->\a,$b,\c,\d {grep {!/$b/},grep({$_%$b.parse-base(a)},[...] (c,d)».parse-base(a))».base(a)}

Kiểm tra nó (94)

Vì các quy tắc đã thay đổi:

->\b,$e,\r{grep {!/"$e.base(b)"/},grep(*%$e,r)».base(b)}

Kiểm tra nó (Int, Int, Range)
Đầu ra là danh sách các chuỗi trong cơ sở

Mở rộng

->
  \b,  # base  (Int)
  $e,  # elim  (Int)
  \r   # range (Int Range)
{
  grep
    {!/"$e.base(b)"/},  # remove the values that contain the character

    grep(
      * % $e,           # remove values that are divisible by elim
      r                 # the input Range

    )».base(b)          # convert each into base 「b」
}

Cảm ơn bạn đã quan tâm và nỗ lực của bạn, cũng đã viết một bài kiểm tra. Đã học hỏi được rất nhiều.
Weijun Zhou

1

JavaScript, 82 byte

Một quickie trước khi tôi nhấn boozer! Đưa đầu vào trong cơ số 10 theo thứ tự base, elim, start& endvà kết quả đầu ra một không gian giới hạn chuỗi cơ số 10 số với một không gian dấu duy nhất.

(b,l,s,e)=>(g=o=>++s>e?o:g(s%l&&!~s[t=`toString`](b).search(l[t](b))?o+s+` `:o))``

Dùng thử trực tuyến


Cái này có vấn đề như cái Japt. Bạn có phiền sửa đổi nó một chút không?
Weijun Zhou

@ WeijunZhou: Đã cập nhật.
Xù xì

Cảm ơn rât nhiều. Bạn có thể cập nhật phần "giải thích" của câu trả lời khác bất cứ khi nào bạn muốn. Không vội.
Weijun Zhou

@ WeijunZhou: Tôi cho rằng bạn có ý nghĩa với giải pháp Japt của tôi, hơn là giải pháp này? Tôi sẽ cập nhật khi tôi quay lại máy tính vào ngày mai.
Xù xì

Vâng, xấu của tôi. Tôi đã chỉnh sửa nhận xét ngay lập tức nhưng bạn vẫn thấy bản gốc ... Xin lỗi về nó.
Weijun Zhou

1

Japt , 16 byte

Viết lại vội vàng sau khi thông số kỹ thuật được thay đổi để cho phép nhập số thập phân để có thể được cải thiện.

Đưa đầu vào theo thứ tự start, end, base, elimvà kết quả đầu ra một loạt các con số trong cơ sở nhất định.

òV kvX msW køXsW

Thử nó


Giải trình

                   :Implicit input of integers U=start, V=end, W=base & X=elim
òV                 :[U,V]
   k               :Remove
    vX             :  elements divisible by X
       m           :Map
        sW         :  Convert to base-W string
           kø      :Remove elements containing
             XsW   :  X converted to a base-W string
                   :Implicit output of resulting array

Đối với các giá trị loại bỏ lớn hơn 10, nhưng nhỏ hơn cơ sở, điều này sẽ không thể loại bỏ các phần tử có chứa chữ số. Ví dụ cho 0,35,12,11 đầu ra sai lầm chứa 23 = (1,11) base12
gggg

@gggg, có vẻ như thông số kỹ thuật đã được thay đổi kể từ khi tôi đăng bài này; ban đầu, elimđược chỉ định là một chữ số (nghĩa là 0-9) chứ không phải là một ký tự đơn trong cơ sở đầu vào.
Xù xì

Đủ công bằng, tôi thấy thông số kỹ thuật là siêu khó hiểu.
gggg

Theo "một chữ số" Tôi có nghĩa là một chữ số trong cơ sở tương ứng. Do đó "A" (hoặc nếu bạn muốn biểu thị nó dưới dạng 10) là một chữ số trong cơ sở thập lục phân. Xin lỗi về sự nhầm lẫn.
Weijun Zhou

1
@ WeijunZhou: Xong
Shaggy

0

Java 8, 92 byte

(b,k,s,e)->{String r="",t;for(;s<=e;r+=t.contains(k)?"":t+" ")t=b.toString(s++,b);return r;}

Đầu vào như Integer (base), String (elem), int (start), int (end).

Giải trình:

Hãy thử trực tuyến.

(b,k,s,e)->{              // Method with the four parameters, and String return-type
  String r="",            //  Result-String, starting empty
         t;               //  Temp-String
  for(;s<=e;              //  Loop from start to end (inclusive)
      r+=                 //    After every iteration: append the result-String with:
         t.contains(k)?   //     If the temp-String contains the elem we exclude
          ""              //      Don't append anything to the result-String
         :                //     Else:
          t+" ")          //      Append the temp-String + a space
    t=b.toString(s++,b);  //   Convert the number to the given base and set the temp-String
  return r;}              //  Return the result-String

Ba trường hợp thử nghiệm được nhập như thế này:

16,"7",16,31
10,"3",1,100
16,"A",151,192
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.