Perpanjangan Game of Sevens


8

pengantar

Keluarkan semua angka dalam basis tertentu yang akan muncul dalam versi tujuh game yang diadaptasi.

Tantangan

Tugas Anda adalah menampilkan semua angka dalam basis tertentu dalam rentang tertentu, melewatkan yang cocok dengan kondisi tertentu.

Anda akan diberikan empat input: base elim startdan end. Peran keempat variabel tersebut adalah sebagai berikut:

  • basemenentukan basis apa yang kami gunakan untuk tiga variabel lainnya, dan juga untuk output. Salah satu cara untuk mengekspresikannya adalah menggunakan karakter tunggal yaitu '8', '9' atau huruf kapital dari 'A' ke 'Z', menggunakan 'A' untuk sistem desimal, dan 'G' untuk sistem heksadesimal. Basis yang diharapkan akan didukung adalah 8 hingga 35 (inklusif). Ini hanya cara saya yang disarankan untuk mengekspresikan basedan saya akan menggunakannya di bagian Input dan Output Contoh , tetapi juga baik untuk menggunakan cara Anda sendiri untuk mengekspresikannya. Misalnya, Anda dapat memilih untuk memformat basesebagai representasi desimal seperti biasanya.

  • startdan enddua string yang menentukan kisaran angka yang akan dikeluarkan, dinyatakan dalam yang diberikan base. Jika baseada Gdan startada 10dan endsedang 1F, Anda perlu output 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F, tetapi Anda juga perlu menghilangkan beberapa berdasarkan apa yang elimada, yang akan dijelaskan segera.

  • elimadalah karakter tunggal dan harus merupakan digit yang valid dalam yang diberikan base. Semua angka yang mengandung digit elimatau kelipatannya elimharus dihilangkan dari daftar untuk menghasilkan hasil akhir.

Dalam kasus di atas, jika elimada 7, maka 17perlu dihilangkan karena mengandung digit 7. 15dan 1Cjuga perlu dihilangkan karena mereka adalah kelipatan 7. Jadi hasil akhirnya10 11 12 13 14 16 18 19 1A 1B 1D 1E 1F

Uji Kasus

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

Kasing tes ketiga ditambahkan setelah posting asli. Semua jawaban yang diposting sebelum suntingan telah diuji dan lulus tes ketiga.

Spesifikasi

  • Masukan akan selalu valid jadi jangan khawatir tentang penanganan pengecualian.

  • Ini adalah , jumlah byte terendah yang menang.

  • Anda dapat mengambil input dan memberikan output melalui formulir standar apa pun , dan Anda bebas memilih format.

  • Seperti biasa, celah default berlaku di sini.

  • Ini didasarkan pada (versi kehidupan nyata) permainan tujuh .

  • Saya baseharus setidaknya 8 murni karena selera pribadi. Saya hanya tidak ingin melihat jumlah digit dalam urutan tumbuh terlalu cepat.

Papan angka

Cuplikan diambil dari pertanyaan ini . Jalankan cuplikan untuk mendapatkan papan skor.


11
Selamat datang di PPCG! Ini adalah posting pertama yang bagus, tapi saya punya beberapa rekomendasi: Hindari format Input / Output yang sangat ketat ( base,elim,start,end, 'A' untuk sistem desimal , 'G' untuk sistem heksadesimal ), cobalah memformat kasus pengujian Anda dengan cara yang mudah dilakukan. gunakan dan pertimbangkan untuk menggunakan Kotak Pasir untuk menerima umpan balik sebelum memposting ke situs utama. Secara keseluruhan, ini adalah tantangan pertama yang bagus!
Tn. Xcoder

1
@ WeijunZhou Tentu, saya akan mencoba untuk melihatnya nanti. Juga merasa bebas untuk menghubungi kami dalam obrolan jika Anda menemui kesulitan saat mengedit dan / atau ingin kiat.
Tn. Xcoder

1
@ Mr.Xcoder, saya sudah selesai mengedit. Anda juga dapat langsung mengedit pertanyaan untuk membuatnya lebih baik dan saya akan mencoba belajar dari hasil edit Anda.
Weijun Zhou

1
@ WeijunZhou Saya juga menyarankan untuk membuat format input start, enddan elimlebih lunak.
Erik the Outgolfer

5
Untuk "G,7,10,1F"input, pendekatan yang sepenuhnya fleksibel akan memungkinkan, misalnya, [16,7,16,31]sebagai input dan [[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]]sebagai output. (Perhatikan bahwa jawaban pertama menganggap sebagian dari ini sudah diizinkan, karena cukup standar - tetapi sepenuhnya terserah Anda).
Jonathan Allan

Jawaban:


10

Emojicode , 141 116 byte

terima kasih kepada @NieDzejkob selama 25 byte!

๐Ÿ‡a๐Ÿš‚b๐Ÿš‚c๐Ÿš‚d๐Ÿš‚๐Ÿ”‚iโฉcโž•1d๐Ÿ‡๐ŸŠ๐ŸŽŠโŽ๐Ÿ˜›0๐Ÿšฎi bโ˜๏ธ๐Ÿ”๐Ÿ”กi a๐Ÿ”กb a๐Ÿ‡๐Ÿ˜€๐Ÿ”กi a๐Ÿ‰๐Ÿ‰๐Ÿ‰

Cobalah online!

๐Ÿ‡				
  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 untuk pilihan bahasa เฒ _เฒ 
Rod

3
Anda cukup memposting penutupan, yang merupakan setara dengan emojicode dari lambda. Ini akan menghemat beberapa byte.
NieDzejkob

5

Jelly , ย 12ย  11 byte

-1 terima kasih kepada Erik the Outgolfer (penggunaan "order" แปdi tempat yang dapat dibagi dengan argumen yang dipertukarkan, แธ@)

r/แปรแธŸโตbฤ‹รแธŸโต

Program lengkap yang mengambil tiga input sebagai argumen baris perintah, yang semuanya menggunakan notasi desimal - daftar [start, end], dan dua angka, basedan elim- yang mencetak representasi Jelly dari daftar daftar, di mana masing-masing mewakili digit angka di basedan setiap digit adalah angka desimal (misalnya 1043 dalam basis 20 akan menjadi [2,12,3], yaitu 2 ร— 20 2 + 12 ร— 20 1 + 3 ร— 20 0 ).

Cobalah online!

Catatan kecil: ini tidak akan berfungsi untuk rentang yang menyertakan nilai negatif, tetapi tantangan tertaut dimulai dari 1 dan dihitung.

Bagaimana?

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)

แธ@bisa แป;) (btw saya akan memposting rแปรแธŸโถbโตฤ‹รแธŸโถ...)
Erik the Outgolfer

Ah ya, tidak pernah menggunakan arg keenam!
Jonathan Allan

1
Seperti biasa, maukah Anda memperluasnya dan menguraikan cara kerjanya?
Weijun Zhou

Alternatif untuk แปรแธŸbisa adalah%รf
Tn. 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)))

Input adalah di base, elim, start:endmana start:enda UnitRange. sebagai basis 10 integer. Menghasilkan daftar string angka-angka di dasar yang diberikan. Filter untuk dapat dibagi dalam bentuk bilangan bulat, digunakan base.untuk konversi elemen ke string, lalu filter pada penahanan angka. Contoh yang dipanggil:f(10,3,1:100)

Cobalah online!


1
Saya tidak berpikir untuk menggunakan default dalam tanda tangan ke alias subrutin, saya harus ingat bahwa untuk posting Perl 6 di masa depan.
Brad Gilbert b2gills

1

Python 2 , 102 94 byte

lambda b,e,l,u:[i for i in range(l,u+1)if i%e*x(i,b,e)]
x=lambda n,b,e:n<1or(e-n%b)*x(n/b,b,e)

Cobalah online!

Input dan output di basis 10.


1

Perl 6 , ย 94ย  57 byte

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

Uji itu (94)

Karena aturan telah berubah:

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

Mengujinya (Int, Int, Range)
Output adalah daftar string di pangkalan

Diperluas

->
  \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๏ฝฃ
}

Terima kasih atas minat dan usaha Anda, juga untuk menulis ujian. Belajar banyak.
Weijun Zhou

1

JavaScript, 82 byte

Quickie sebelum saya memukul boozer! Mengambil input dalam basis-10 dalam urutan base, elim, start& enddan output ruang delimited string basis 10-angka dengan ruang tambahan tunggal.

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

Cobalah online


Yang ini memiliki masalah sebagai yang Japt satu. Maukah Anda sedikit memodifikasinya?
Weijun Zhou

@ WeijunZhou: Diperbarui.
Shaggy

Terima kasih banyak. Anda dapat memperbarui bagian "penjelasan" dari jawaban lain kapan pun Anda mau. Tidak perlu terburu-buru.
Weijun Zhou

@ WeijunZhou: Saya menganggap Anda maksud pada solusi Japt saya, daripada yang ini? Saya akan memperbarui ketika saya kembali ke komputer saya besok.
Shaggy

Ya, salahku. Saya langsung mengedit komentarnya tetapi Anda masih melihat yang asli ... Maaf.
Weijun Zhou

1

Japt , 16 byte

Segera ditulis ulang setelah spesifikasi diubah untuk memungkinkan input desimal sehingga mungkin dapat ditingkatkan.

Mengambil input dalam urutan start, end, base, elimdan output array angka dalam basis yang diberikan.

รฒV kvX msW kรธXsW

Cobalah


Penjelasan

                   :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

Untuk nilai elim yang lebih besar dari 10, namun lebih kecil dari basis, ini akan gagal menghapus elemen yang mengandung digit. Misalnya untuk 0,35,12,11 output keliru mengandung 23 = (1,11) base12
gggg

@gggg, sepertinya spek telah diubah sejak saya memposting ini; awalnya, elimditetapkan sebagai satu digit (yaitu, 0-9) daripada karakter tunggal di basis input.
Shaggy

Cukup adil, saya menemukan spec menjadi sangat membingungkan.
gggg

Dengan "digit tunggal" yang saya maksud adalah digit di basis yang sesuai. Karenanya "A" (atau jika Anda lebih suka menyatakannya sebagai 10) adalah digit dalam basis heksadesimal. Maaf tentang kebingungannya.
Weijun Zhou

1
@ WeijunZhou: Selesai
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;}

Masukkan sebagai Integer (base), String (elem), int (start), int (end).

Penjelasan:

Cobalah online.

(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

Tiga kasus uji dimasukkan seperti ini:

16,"7",16,31
10,"3",1,100
16,"A",151,192
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.