Extensión del juego de sietes


8

Introducción

Salida de todos los números en una base específica que aparecería en una versión adaptada del juego de siete.

Desafío

Su tarea es generar todos los números en una base dada en un rango dado, omitiendo los que coinciden con ciertas condiciones.

Se le darán cuatro entradas: base elim starty end. Los roles de las cuatro variables son los siguientes:

  • baseespecifica qué base estamos usando para las otras tres variables, y también para la salida. Una forma de expresarlo es usando un solo carácter que es '8', '9' o una letra mayúscula de 'A' a 'Z', usando 'A' para el sistema decimal y 'G' para el sistema hexadecimal. Las bases que se espera que sean compatibles son de 8 a 35 (inclusive). Esta es solo mi forma sugerida de expresarlo basey lo usaré en la sección Ejemplo de entrada y salida , pero también está bien usar tu propia forma de expresarlo. Por ejemplo, puede elegir formatear basecomo su representación decimal habitual.

  • starty endson dos cadenas que especifican el rango de números que se emitirán, expresados ​​en el dado base. Si basees Gy startes 10y endes 1F, necesita salida 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F, pero también debe eliminar algunos de ellos en función de lo que elimes, que se explicará pronto.

  • elimes un solo carácter y debe ser un dígito válido en el dado base. Todos los números que contienen el dígito elimo son múltiplos de elimdeben eliminarse de la lista para generar el resultado final.

En el caso anterior, si elimes así 7, entonces 17debe eliminarse porque contiene el dígito 7. 15y 1Ctambién necesitan ser eliminados porque son múltiplos de 7. Entonces el resultado final sería10 11 12 13 14 16 18 19 1A 1B 1D 1E 1F

Casos de prueba

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

El tercer caso de prueba se agrega después de la publicación original. Todas las respuestas publicadas antes de la edición se probaron y pasaron la tercera prueba.

Especificaciones

  • La entrada siempre será válida, así que no se preocupe por el manejo de excepciones.

  • Este es el , gana el menor número de bytes.

  • Puede tomar entrada y proporcionar salida a través de cualquier formulario estándar , y puede elegir el formato.

  • Como de costumbre, las lagunas predeterminadas se aplican aquí.

  • Esto se basa en la (versión de la vida real) del juego de sietes .

  • Debo basetener al menos 8 años exclusivamente por gusto personal. Simplemente no quiero ver que el número de dígitos en la secuencia crezca demasiado rápido.

Marcador

Fragmento tomado de esta pregunta . Ejecute el fragmento para obtener el marcador.


11
Bienvenido a PPCG! Este es un buen primer post, pero tengo algunas recomendaciones: Evitar muy estricto formatos de entrada / salida ( base,elim,start,end, 'A' para el sistema decimal , 'G' para el sistema hexadecimal ), trata de dar formato a los casos de prueba de una manera que es fácil use y considere usar el Sandbox para recibir comentarios antes de publicar en el sitio principal. En general, este es un buen primer desafío!
Sr. Xcoder

1
@WeijunZhou Claro, intentaré echarle un vistazo más tarde. No dude en comunicarse con nosotros en el chat si encuentra dificultades durante la edición y / o desea consejos.
Sr. Xcoder

1
@ Mr.Xcoder He terminado la edición. También puede editar directamente la pregunta para mejorarla e intentaré aprender de su edición.
Weijun Zhou

1
@WeijunZhou me había también sugieren hacer los formatos de entrada para start, endy elimmás indulgente.
Erik the Outgolfer

55
Para la "G,7,10,1F"entrada, un enfoque totalmente flexible permitiría, por ejemplo, [16,7,16,31]como entrada y [[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]]como salida. (Tenga en cuenta que la primera respuesta suponía que algo de esto ya se había permitido, ya que es bastante estándar, pero depende totalmente de usted).
Jonathan Allan

Respuestas:


10

Emojicode , 141 116 bytes

¡Gracias a @NieDzejkob por 25 bytes!

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

Pruébalo en línea!

🍇				
  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 para elegir el idioma ಠ_ಠ
Rod

3
Simplemente puede publicar un cierre, que es el equivalente emojicode de una lambda. Esto debería ahorrarte algunos bytes.
NieDzejkob

5

Jalea ,  12  11 bytes

-1 gracias a Erik the Outgolfer (uso de "orden" en lugar de divisible con argumentos intercambiados ḍ@)

r/ọÐḟ⁵bċÐḟ⁵

Un programa completo que toma tres entradas como argumentos de línea de comando, todos los cuales emplean la notación decimal: una lista [start, end]y dos números, basey elimque imprime la representación Jelly de una lista de listas, donde cada uno representa los dígitos de un número en basecada dígito es un número decimal (por ejemplo, 1043 en base 20 sería [2,12,3], es decir, 2 × 20 2 + 12 × 20 1 + 3 × 20 0 ).

Pruébalo en línea!

Una pequeña nota: esto no funcionará para rangos que incluyen valores negativos, pero el desafío vinculado comienza desde 1 y cuenta hacia arriba.

¿Cómo?

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)

ḍ@puede ser ;) (por cierto, habría publicado rọÐḟ⁶b⁵ċÐḟ⁶...)
Erik the Outgolfer

Ah sí, ¡nunca usé el sexto argumento!
Jonathan Allan el

1
Como de costumbre, ¿le importaría expandirlo y elaborar cómo funciona?
Weijun Zhou

Una alternativa para ọÐḟpodría ser%Ðf
Sr. Xcoder

2

Julia 0.6 , 69 bytes

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

Las entradas son base, elim, start:enddonde start:endestá a UnitRange. como base 10 enteros. Emite una lista de cadenas de los números en la base dada. Filtra la divisibilidad en forma entera, utiliza la base.conversión de elementos en cadenas y luego filtra la contención de dígitos. Ejemplo llamado:f(10,3,1:100)

Pruébalo en línea!


1
No había pensado en usar valores predeterminados en una firma para subrutinas de alias, tendré que recordar eso para futuras publicaciones de Perl 6.
Brad Gilbert b2gills

1

Python 2 , 102 94 bytes

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)

Pruébalo en línea!

La entrada y salida está en la base 10.


1

Perl 6 ,  94  57 bytes

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

Pruébalo (94)

Como las reglas han cambiado:

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

Probarlo (Int, Int, Range) La
salida es una lista de cadenas en la base

Expandido

->
  \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」
}

Gracias por su interés y esfuerzo, también por escribir un examen. Aprendió mucho.
Weijun Zhou

1

JavaScript, 82 bytes

¡Un polvo rápido antes de golpear el alcohol! Toma de entrada en base 10 en el orden base, elim, starty endy da salida a una cadena delimitada espacio de base 10 números con un solo espacio final.

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

Pruébalo en línea


Este tiene el problema como el de Japt. ¿Te importaría modificarlo un poco?
Weijun Zhou

@WeijunZhou: actualizado.
Shaggy

Muchas gracias. Puede actualizar la parte de "explicación" de la otra respuesta cuando lo desee. No hay prisa
Weijun Zhou

@WeijunZhou: ¿Asumo que te refieres a mi solución Japt, en lugar de esta? Estaré actualizando cuando regrese a mi computadora mañana.
Shaggy

Si, mi mal. Edité el comentario de inmediato, pero aún viste el original ... Lo siento.
Weijun Zhou

1

Japt , 16 bytes

Reescrito rápidamente después de cambiar la especificación para permitir la entrada decimal, por lo que probablemente pueda mejorarse.

Toma de entrada en el orden start, end, base, elimy da salida a una serie de números en la base dada.

òV kvX msW køXsW

Intentalo


Explicación

                   :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

Para valores de elim que son mayores que 10, pero más pequeños que la base, esto no eliminará los elementos que contienen el dígito. Por ejemplo, para 0,35,12,11 la salida contiene erróneamente 23 = (1,11) base12
gggg

@gggg, parece que la especificación ha cambiado desde que publiqué esto; originalmente, elimse especificaba como un solo dígito (es decir, 0-9) en lugar de un solo carácter en la base de entrada.
Shaggy

Justo, encontré que la especificación es súper confusa.
gggg

Por "solo dígito" me refiero a un dígito en la base correspondiente. Por lo tanto, "A" (o si prefiere expresarlo como un 10) es un dígito en una base hexadecimal. Perdón por la confusión.
Weijun Zhou

1
@WeijunZhou: Hecho
Shaggy

0

Java 8, 92 bytes

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

Ingresar como Integer (base), String (elem), int (start), int (end).

Explicación:

Pruébalo en línea.

(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

Los tres casos de prueba se ingresan así:

16,"7",16,31
10,"3",1,100
16,"A",151,192
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.