Cree un programa cat, también conocido como un programa que toma una entrada y la imprime.
... Excepto, el programa alejará aleatoriamente los caracteres de su entrada e imprimirá eso en su lugar.
Sin embargo, cada personaje en la entrada debe tener probabilidades generalmente iguales para eliminarse con el programa, ya que es difícil hacerlo, las probabilidades para cada personaje pueden variar en un 10% como máximo.
Su programa debe tomar la entrada, luego eliminar aleatoriamente los caracteres de la entrada, luego imprimir esa versión nuevamente. (Puede imprimir con líneas nuevas u otros caracteres en caso de que su idioma tenga que imprimir líneas nuevas).
Si la entrada fue BOOOWL
, no debería eliminar todos los Os con la misma posibilidad: se debe considerar cada carácter (no único), por lo que en lugar de que cada O combinado tenga una probabilidad de 1/5 (por ejemplo), cada O debería tener un 1 / 5 oportunidad, así que, en lugar de haber una posibilidad de 1/5 BWL
, debe haber una posibilidad de 1/5 BOWL
, BOOWL
.
La entrada está restringida a STDIN o equivalente más cercano.
Cada personaje debe tener un mínimo de 10% y un máximo de 30% de probabilidad de ser eliminado.
Las probabilidades de cada personaje deben calcularse individualmente.
Puede usar cualquier componente de su lenguaje que admita acciones aleatorias, ya sean funciones u otra.
La salida debe ser a través de STDOUT o el equivalente más cercano. Si su idioma tiene STDOUT, no lo envíe de ninguna otra manera. Si su idioma no puede generar cadenas como texto, use el equivalente más cercano (la salida de la matriz de caracteres de C está bien aquí).
Este es el código de golf. El programa más corto gana.
BOWL OF SOUP
podríanO
eliminarse todas de una sola vez?Output must be through STDOUT, as a text. Do not output a character array.
<- Tengo un lenguaje que le permite generar una matriz de caracteres (se aplana antes de la salida). ¿Eso no está permitido? ¿Qué hay de lenguajes como C, donde una cadena es básicamente una matriz de caracteres?Respuestas:
Japt
-f
, 2 bytesLa
-f
bandera "ejecuta el programa en cada elemento en la primera entrada, generando una matriz de aquellos que devuelven un valor verdadero".5ö
devuelve un número aleatorio entre 0 (inclusive) y 5 (exclusivo). Al igual que JavaScript, 0 es falso en Japt.Intentalo
fuente
-f
, en el título.Python 3 , 63 bytes
Pruébalo en línea!
Python 2 ,
6765 bytesPruébalo en línea!
Cada personaje tiene un 20% de probabilidad de ser eliminado.
Enfoque diferente, misma longitud:
Pruébalo en línea!
fuente
Create a cat program, a.k.a a program that takes an input and prints it.
Carbón de leña , 4 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Puede usar cualquier número de
4
a10
para obtener posibilidades de25%
a10%
respectivamente.fuente
Befunge-98 (PyFunge) , 11 bytes
Pruébalo en línea!
Cada personaje tiene un 25% de posibilidades de ser eliminado. Esta decisión se toma según las tres
?
instrucciones.?
establece el contador del programa en una de las cuatro direcciones, con la misma probabilidad. En este caso, arriba y abajo vuelven a la misma instrucción, por lo que podemos ignorarlos como opciones.Hay dos formas de salir del bosque dep2=1/2 oportunidad de dar salida. La posibilidad de dar salida si se parte de la derecha p3=1/2∗1+1/2∗p2=3/4 . Por lo tanto, después de leer un carácter, saltamos a la derecha
?
s: a la derecha (salida) y a la izquierda (sin salida). Esta situación es simétrica, por lo que si a partir de la media?
, hay una?
es?
para determinar si se debe generar o no.fuente
Octava , 23 bytes
Genera una matriz del mismo tamaño que la entrada (las cadenas en Octave son matrices de caracteres), comprueba cada uno de los números aleatorios si es mayor que
0.2
y luego usa la indexación lógica para extraer los caracteres en las posiciones correspondientes.Pruébalo en línea!
fuente
Jalea ,
95 bytesPruébalo en línea!
Una mónada que toma una cadena Jelly como argumento y devuelve la cadena Jelly procesada. Cuando se usa como un programa completo, imprime implícitamente la salida. Cada personaje tiene un 20% de posibilidades de ser eliminado.
Explicación
fuente
Japt , 3 bytes
Cada personaje tiene una probabilidad de 1 en 5 de ser eliminado. Se
5
puede cambiar a cualquier cosa entre4
&9
, inclusive, oA
para10
cambiar las probabilidades.Intentalo
fuente
Wolfram Language (Mathematica) , 24 bytes
Pruébalo en línea!
Toma una lista de caracteres como entrada. Cada personaje tiene la
.2
posibilidad de ser eliminado.fuente
05AB1E ,
54 bytes-1 byte gracias a @Grimy .
Pruébelo en línea o ejecute el mismo programa 10 veces .
Cada personaje tiene un cambio del 25% de ser soltado.
Explicación:
≠
también podría ser_
(==0
).fuente
5L
puede ser₄
para -1 (cambia la probabilidad del 20% al 25%, lo que aún es aceptable).MATL , 9 bytes
Explicación
Pruébalo en línea!
fuente
Pyth ,
85 bytesPruébalo en línea!
Versión anterior, 8 bytes:
Pruébalo en línea!
fuente
Q
arrojará un error si la entrada no es python-esque. Errores por ejemplo de[1
oa/b
.Q
,w
yz
solo funcionará para la entrada de una sola línea, por lo que la mejor opción probablemente seríaj.z
Cubix , 20 bytes
Pruébalo en línea!
Más tiempo de lo que esperaba, ya que tenía una serie de no-ops de las que parecía que no podía deshacerme. La posibilidad de soltar un personaje es del 25%. Supongo que esto está bien.
Míralo correr
Breve explicacion:
A|A
esto inicializa la pila, ingresa todo, refleja hacia atrás, ingresa todo (solo un EOI -1);?
pop to de stack, prueba para EOI (-1)._?@
si es negativo, reflexione de nuevo en la prueba y finalice al detenerse$D
saltar\
al colocador de dirección aleatorio.o
salida for y luego de vuelta al bucle, uno pierde elo
camino y va directamente al bucle.fuente
APL (dzaima / APL) ,
109 bytes SBCSFunción de prefijo tácito anónimo. Cada personaje tiene exactamente un 20% de posibilidades de ser eliminado.
Pruébalo en línea!
5¨
cero para cada personaje?
rango entero aleatorio 1-5 para cada personaje4≥
Máscara booleana para aquellos enteros que son menores o iguales a 4⊢⌿⍨
filtrar el argumento usando esa máscarafuente
Retina , 15 bytes
Pruébalo en línea! Explicación:
Procesar cada personaje individualmente.
Realizar una sustitución al azar. La primera sustitución elimina el personaje, mientras que los otros tres lo dejan sin cambios, dando así la
25%
posibilidad de eliminar el personaje. Esto se puede disminuir según sea necesario agregando pares adicionales de nuevas líneas.fuente
R ,
3223 bytesPruébalo en línea!
Una función que toma un vector de caracteres como entrada y devuelve un vector de caracteres procesado. Cada personaje tiene un 20% de posibilidades de ser eliminado.
¡Gracias a @Roland y @Giueseppe por ayudar a ahorrar 7 bytes, y @JDL por otros 2!
fuente
function(x)x[!rbinom(x,1,0.2)]
function(x)x[rf(x,1,1)>1]
,;df(1,1,1)
es sobre0.16
cual hace el truco.rt(x,3)>1
(alrededor del 20% de probabilidad)<1
, pero gracias! Otros 2 guardados.T-SQL 2012, 83 bytes
Recorriendo la entrada de derecha a izquierda eliminando 0 o 1 carácter.
25% de probabilidad de que cada personaje sea eliminado.
Explicación:
Pruébalo en línea
fuente
STR
, tendré que recordar eso. No estoy seguro de que sea justo aprovecharDECLARE
su (no contado) en su código (contado); pero cambiar eso solo le costaría 1 byte, ya que puede eliminar el extraSET
conDECLARE @ INT=len(@i)
J , 10 bytes
Pruébalo en línea!
Similar a la respuesta APL de Adam, aunque en realidad la escribí antes de mirar la suya.
6.. $~ #
Tome la longitud de la entrada#
y forme$~
el número 6 en una lista tan larga.?@
Trate a cada seis en esa lista como un dado y rodéelo?
.>5
¿El dado es menor que 5 (los valores posibles son 0..5)? Use ese resultado booleano para crear una máscara de bits.#~
Filtra la entrada con esa máscara.fuente
Perl 5
-p
, 18 bytesPruébalo en línea!
Cada personaje tiene un 20% de posibilidades de ser eliminado.
fuente
Javascript,
464451 bytes+7 bytes debido al requisito STDOUT agregado
-2 bytes gracias a Birjolaxew
respuesta original: 44 bytes sin el requisito STDOUT
fuente
f=
te lleva a 44 bytes. También puede ingresar / emitir como una matriz, lo que debería ahorrarle bastante.join``
significa No puedo encontrarlo en la especificación (porque realmente no sé qué es)join("")
mdn revelent page
Scala ,
514630 bytesPruébalo en línea!
PD. Como en muchas otras soluciones, la probabilidad de dejar caer el carbón es del 20%.
Actualizar:
-5 bytes utilizando String en lugar de la Opción [String] en flatMap
30 bytes usando filtro
fuente
scala.math.random
amath.random
y0.2
para.2
. Buen truco usando ^ así.C # (compilador interactivo de Visual C #) , 71 bytes
Pruébalo en línea!
fuente
new Random().Next(5)
directamente posible?new Random().Next(5)
, todo lo que obtendrá es la entrada completa o nada.new Random()
, el valor inicial predeterminado es Environment.TickCount, que aumenta cada milisegundo. Si todos se crean en la misma marca de milisegundos, todos tendrán la misma semilla. La respuesta solo está usando una sola instancia de Aleatorio, y cuando se llama actualiza el valor de semilla interno, por lo que cada vez que se llama a Next (), crea un valor de salida diferente. Sin embargo, .Net Core usa un RNG singleton para generar la semilla, por lo que no tiene este problemaSTDIN
, perorestricted to STDIN or closest equivalent
, y los argumentos de la función pueden ser el equivalente más cercano, pero no voy a hacer esoPHP ,
4342 bytesPruébalo en línea!
Cada personaje tiene un 20% de posibilidades de ser eliminado.
fuente
C (gcc) , 50 bytes
Este programa tiene una probabilidad del 20% de dejar caer una carta. Desafortunadamente, el generador de números aleatorios no está sembrado, por lo que obtienes la misma secuencia en cada ejecución. Básicamente, el único truco es invertir el carácter de entrada para detener el bucle en EOF.
Pruébalo en línea!
C (gcc) ,
6459 bytesGracias a ceilingcat por los -5 bytes.
Si quieres el RNG sembrado en cada carrera.
Pruébalo en línea!
fuente
main()
para envíos de Code Golf, también puede definir una función arbitraria que haga lo que se requiere. Entonces puedes escribirf(c){...}
.Lua ,
6968 bytesPruébalo en línea!
Un poco sencillo, pero parece ser la versión más corta: iterar sobre stdin char por char (con
io.lines
... ese nombre es engañoso), luego, basándose en un valor aleatorio, imprima una o una cadena vacía (por ejemplo, nada).fuente
Java
Sin terminación: 82 bytes
Terminación (TIO): 105 bytes
fuente
s->s.filter(c->Math.random()<.2)
también lo es.Input is restricted to STDIN or closest equivalent.
yOutput must be through STDOUT or the closest equivalent. If your language does have STDOUT, do not output in any other way.
entonces no, esa respuesta no es válidaZsh ,
5341 bytes-12 , gracias a GammaFunction
41 bytes: ¡ pruébalo en línea!
Convierte la entrada en una matriz de caracteres, luego intenta imprimir cada elemento
c
, ¡a menos que la((RANDOM%4))
evaluación lo coma como falso!53 bytes: ¡ pruébelo en línea!
Una iteración más directa, pero detallada, sobre la longitud de la cadena.
fuente
\c
, ¡no lo habría recordado! Todavía hay algunas optimizaciones por hacer ...RANDOM
conversión de matrizZsh , 50 bytes
Pruébalo en línea!
Similar a la respuesta de RobLogic, pero siguiendo los requisitos de entrada más de cerca, y funciona para entradas con barras invertidas.
"$(<&0)"
en lugar de"<&0"
o$(<&0)
porque el primero no funciona en sustituciones, y el segundo come nuevas líneas. Las-nE
banderas son necesarias para evitar que las barras invertidas se analicen como secuencias de escape y para evitar que se inserten nuevas líneas.echo -nE
fuente
MathGolf , 5 bytes
Pruébalo en línea!
Explicación
Cada carácter se repetirá 0 o 1 veces, según el valor aleatorio. Dado que el valor esperado después de la raíz cuadrada se desplaza, hay un 25% de probabilidad de que se elimine cada carácter.
Alternativa de 5 bytes
Filtre los caracteres por un número aleatorio en [0, 4]. Debido a cómo funciona el filtrado, tengo que descartar el carácter real dentro del bucle de filtro, que agrega 1 byte.
fuente
GFortran , 120 bytes
No está mal, si usamos la
RAN()
función obsoleta , que es pseudoaleatoria , es decir, obtienes la misma secuencia cada vez. La forma correcta de generar números aleatorios en GFortran es conCALL RANDOM_SEED()
y ¡CALL RANDOM_NUMBER(R)
pero eso es una gran cantidad de bytes!Pruébalo en línea!
fuente
Oracle SQL, 133 bytes
Funciona suponiendo que los datos de entrada se almacenan en una tabla t (x), por ejemplo
fuente