¡El gato se comió tu aporte nuevamente!


30

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.


44
¿Debería haber siempre entre un 10% y un 30% de posibilidades de que un personaje específico sea eliminado? ¿O es solo para el propósito del ejemplo?
attinat

2
¿Qué quieres decir con "conjuntos de un personaje"? si la entrada es, ¿ BOWL OF SOUPpodrían Oeliminarse todas de una sola vez?
Roblogic

1
Todas las respuestas hasta ahora utilizan una probabilidad fija del 20% para que un personaje sea eliminado. No estoy seguro de que la intención de la pregunta sea que todos los personajes tengan las mismas probabilidades.
Nzall

3
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?
Ismael Miguel

1
Usa el equivalente más cercano. Las cadenas de matriz de caracteres de C están bien, ya que son el equivalente más cercano al texto.
Andrew

Respuestas:


10

Japt -f , 2 bytes

La -fbandera "ejecuta el programa en cada elemento en la primera entrada, generando una matriz de aquellos que devuelven un valor verdadero". devuelve un número aleatorio entre 0 (inclusive) y 5 (exclusivo). Al igual que JavaScript, 0 es falso en Japt.

Intentalo


2
Estoy retrocediendo en el tiempo, haciendo un lenguaje donde o es este desafío y luego retrocediendo y presentando mi respuesta, o tal vez hago la cadena vacía que: p
Andrew

¿No se supone que las banderas de línea de comandos cuentan para bytecount?
Daniel Vestøl

1
@ DanielVestøl Haga clic en -f, en el título.
Ismael Miguel


1
fue broma pero está bien
Andrew

8

Python 3 , 63 bytes

from random import*
for c in input():print(end=c[random()<.2:])

Pruébalo en línea!

Python 2 , 67 65 bytes

from random import*
print''.join(c for c in input()if.8>random())

Pruébalo en línea!

Cada personaje tiene un 20% de probabilidad de ser eliminado.

Enfoque diferente, misma longitud:

from random import*
print''.join(c[random()<.2:]for c in input())

Pruébalo en línea!


63 bytes en python 2 con una función
attinat

Las reglas indican explícitamente escribir un programa completo:Create a cat program, a.k.a a program that takes an input and prints it.
movatica

Esto solo lee la primera línea de entrada.
AKX

El problema no indica que tuvo que leer varias líneas.
movatica

8

Carbón de leña , 4 bytes

ΦS‽⁵

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

 S      Input a string
Φ       Filter where nonzero
  ‽⁵    Random number 0..4
        Implicitly print

Puede usar cualquier número de 4a 10para obtener posibilidades de 25%a 10%respectivamente.


7

Befunge-98 (PyFunge) , 11 bytes

>#@~3j4???,

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 de ?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 p2=1/2 oportunidad de dar salida. La posibilidad de dar salida si se parte de la derecha ?es p3=1/21+1/2p2=3/4 . Por lo tanto, después de leer un carácter, saltamos a la derecha ?para determinar si se debe generar o no.


5

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.2y luego usa la indexación lógica para extraer los caracteres en las posiciones correspondientes.

@(s)s(rand(size(s))>.2)

Pruébalo en línea!


5

Jalea , 9 5 bytes

5X’µƇ

Prué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

   µƇ | Filter using the following as a monad for each character:
5X    | - Random number between 1 and 5
  ’   | - Decreased by 1

5

Japt , 3 bytes

Cada personaje tiene una probabilidad de 1 en 5 de ser eliminado. Se 5puede cambiar a cualquier cosa entre 4& 9, inclusive, o Apara 10cambiar las probabilidades.

Æ5ö

Intentalo

Æ5ö     :Implicit input of string
Æ       :Filter by
 5ö     :  Random integer in the range [0,5), with 0 being falsey


5

05AB1E , 5 4 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:

ʒ     # Filter the characters of the (implicit) input-string by:
     #  Push 1000
  Ω   #  Pop and push a random digit from it
     #  And check that it's NOT 1 (!=1)
      # (after which the result is output implicitly)

también podría ser _( ==0).


2
5Lpuede ser para -1 (cambia la probabilidad del 20% al 25%, lo que aún es aceptable).
Grimmy

@ Grimy Nice one, gracias! :)
Kevin Cruijssen

4

MATL , 9 bytes

t&n&r.2>)

Explicación

t         implicitly take input and duplicate it
 &n       compute the size of the input and...
   &r     generate a random array of that size
     .2>  check which entries of that array are greater than 0.2
        ) and use the result using logical indices to extract certain characters of the input

Pruébalo en línea!


4

Pyth , 8 5 bytes

sfO4Q

Pruébalo en línea!

sfO4Q   Implicit: Q=eval(input())
 f  Q   Filter characters of Q where the following is truthy:
  O4      Random number in the range [0-4)
          Any non-zero value is truthy, so this will drop characters 25% of the time
s       Concatenate into string, implicit print

Versión anterior, 8 bytes:

s*Vm!!O4

Pruébalo en línea!

s*Vm!!O4QQ   Implicit: Q=eval(input())
             Trailing QQ inferred
   m    Q    Map each character in Q using:
      O4       Choose random integer in [0-4)
    !!         Logical NOT twice - maps 0 to 0, anything else to 1
             The result is a list of 0s and 1s, with 0 having 25% chance to appear
 *V      Q   Vectorised multiplication of the above with Q
s            Concatenate into string, implicit print

Qarrojará un error si la entrada no es python-esque. Errores por ejemplo de [1o a/b. Q, wy zsolo funcionará para la entrada de una sola línea, por lo que la mejor opción probablemente seríaj.z
ar4093

4

Cubix , 20 bytes

u$w\A|UDw@?;...>o._U

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.

    u $
    w \
A | U D w @ ? ;
. . . > o . _ U
    . .
    . .

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
  • $Dsaltar \al colocador de dirección aleatorio.
    • desde el configurador de dirección, 3 direcciones conducen a la osalida for y luego de vuelta al bucle, uno pierde el ocamino y va directamente al bucle.

3

APL (dzaima / APL) , 10 9 bytes SBCS

Función de prefijo tácito anónimo. Cada personaje tiene exactamente un 20% de posibilidades de ser eliminado.

⊢⌿⍨4≥∘?5¨

Pruébalo en línea!

 cero para cada personaje

? rango entero aleatorio 1-5 para cada personaje

4≥ Máscara booleana para aquellos enteros que son menores o iguales a 4

⊢⌿⍨ filtrar el argumento usando esa máscara


3

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.


3

R , 32 23 bytes

function(x)x[rt(x,3)<1]

Prué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!


1
function(x)x[!rbinom(x,1,0.2)]
Roland

en la misma línea que @Roland function(x)x[rf(x,1,1)>1],; df(1,1,1)es sobre 0.16cual hace el truco.
Giuseppe

o rt(x,3)>1(alrededor del 20% de probabilidad)
JDL

2
@JDL es <1, pero gracias! Otros 2 guardados.
Nick Kennedy el

3

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.

DECLARE @i varchar(max)='The cat ate my homework'

DECLARE @ int=len(@i)WHILE @>0SELECT
@i=stuff(@i,@,str(rand()*2)/2,''),@-=1PRINT @i

Explicación:

rand()*2devuelve un flotador, que no se puede usar en el stuffcomando.

El strconvierte esto en un varchar después de redondear al número entero más cercano. El flotador se está convirtiendo en un varchar (que no está permitido como tercer parámetro enstuff ).

Este varchar tiene un 25% de posibilidades de ser '2', un 50% de posibilidades de ser '1', un 25% de posibilidades de ser '0'. Dividiendo por 2, hay un 25% de posibilidades de que el resultado sea 1. Esta división convierte el varchar en un número entero.

El entero es el tercer parámetro esperado en la stufffunción.

Pruébalo en línea


Muy buen truco STR, tendré que recordar eso. No estoy seguro de que sea justo aprovechar DECLAREsu (no contado) en su código (contado); pero cambiar eso solo le costaría 1 byte, ya que puede eliminar el extra SETconDECLARE @ INT=len(@i)
BradC

@BradC Estoy de acuerdo, y trataré de recordar que no me llevo a cuestas en el futuro
t-clausen.dk

2

J , 10 bytes

#~5>6?@$~#

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.


2

Javascript,  46   44  51 bytes

i=>alert([...i].filter(c=>Math.random()>.2).join``)

+7 bytes debido al requisito STDOUT agregado

-2 bytes gracias a Birjolaxew


respuesta original: 44 bytes sin el requisito STDOUT

i=>[...i].filter(c=>Math.random()>.2).join``

Como no utiliza el nombre de la función, solo puede proporcionar la función en sí . Eliminarlo f=te lleva a 44 bytes. También puede ingresar / emitir como una matriz, lo que debería ahorrarle bastante.
Birjolaxew

@Birjolaxew No estoy seguro, pero según tengo entendido, la pregunta no permite el uso de la matriz de caracteres si el idioma tiene una cadena
jonatjano

Sí, Andrew editó la pregunta con requisitos adicionales después de mi comentario. En general, esto está mal visto porque invalida las respuestas que anteriormente eran válidas (en este caso, incluso es discutible si su respuesta inicial se ajusta al requisito "La salida debe ser a través de STDOUT").
Birjolaxew

Que join``significa No puedo encontrarlo en la especificación (porque realmente no sé qué es)
nick zoum

1
@nickzoum en es6 es equivalente ajoin("") mdn revelent page
jonatjano

2

Scala , 51 46 30 bytes

s=>s.flatMap(x=>if(math.random>.2)Some(x)else None)

Prué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

s=>s.flatMap(x=>if(math.random>.2)x+""else "")

30 bytes usando filtro

s=>s.filter(x=>math.random>.2)

1
Puede reducir 7 bytes cambiando scala.math.randoma math.randomy 0.2para .2. Buen truco usando ^ así.
Kjetil S.

@KjetilS, gracias. También publiqué literales de funciones en lugar de definiciones de funciones como una solución. De acuerdo con esto, es aceptable: codegolf.stackexchange.com/questions/3885/…
Dr Y Wit

2

C # (compilador interactivo de Visual C #) , 71 bytes

var y=new Random();foreach(var k in ReadLine())if(y.Next(5)<4)Write(k);

Pruébalo en línea!


Creo que <1 está comiendo demasiado. Quizás <3 o <4 coinciden con los parámetros del problema. De todos modos, esto no cambia la longitud del código.
Luca

No he programado en C # desde hace tiempo, pero ¿por qué no es new Random().Next(5)directamente posible?
Kevin Cruijssen

1
@KevinCruijssen Porque entonces se usará la misma semilla para cada número, por lo que cada número será el mismo. Simplemente pruébelo new Random().Next(5), todo lo que obtendrá es la entrada completa o nada.
Encarnación de la ignorancia

1
@KevinCruijssen cuando se usa 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 problema
Zac Faragher

1
@BenjaminUrquhart Corregido, pero agregó 26 bytes. Además, uno puede argumentar que no dice que la entrada debe ser de STDIN, pero restricted to STDIN or closest equivalent, y los argumentos de la función pueden ser el equivalente más cercano, pero no voy a hacer eso
Encarnación de la ignorancia


1

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.

main(c){for(;c=~getchar();rand()%5&&putchar(~c));}

Pruébalo en línea!

C (gcc) , 64 59 bytes

Gracias a ceilingcat por los -5 bytes.

Si quieres el RNG sembrado en cada carrera.

main(c){for(srand(&c);c=~getchar();rand()%5&&putchar(~c));}

Pruébalo en línea!


No tiene que usar main()para envíos de Code Golf, también puede definir una función arbitraria que haga lo que se requiere. Entonces puedes escribir f(c){...}.
G. Sliepen

1

Lua , 69 68 bytes

for c in io.lines(nil,1)do io.write(math.random()>.2 and c or '')end

Prué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).


1

Java

Sin terminación: 82 bytes

v->{for(int i;;i=System.in.read(),System.out.print(Math.random()<.2?"":(char)i));}

Terminación (TIO): 105 bytes

v->{var n=System.in;for(int i;n.available()>0;i=n.read(),System.out.print(Math.random()<.2?"":(char)i));}

¿Es realmente necesario lidiar con stdout? Otras respuestas solo crean una función simplemente convirtiendo una cadena. Parece injusto hacia Java. Si esta solución de C # es válida, s->s.filter(c->Math.random()<.2)también lo es.
Holger

@Holger Input is restricted to STDIN or closest equivalent.y Output 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álida
Benjamin Urquhart

1

Zsh , 53 41 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!

for c (${(s::)1})((RANDOM%4))&&echo $c\\c

53 bytes: ¡ pruébelo en línea!

Una iteración más directa, pero detallada, sobre la longitud de la cadena.

for ((;i<$#1;i++)){((RANDOM%4>0))&&echo "${1[i]}\c";}

1
Uso inteligente de \c, ¡no lo habría recordado! Todavía hay algunas optimizaciones por hacer ...
GammaFunction

Uso agradable e inteligente de la RANDOMconversión de matriz
roblogic

1

Zsh , 50 bytes

for c (${(s::)"$(<&0)"})
((RANDOM%5))&&echo -nE $c

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 -nEbanderas 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


1

MathGolf , 5 bytes

æƒ√∞*

Pruébalo en línea!

Explicación

æ       foreach character...
 ƒ      random float in range [0,1)
  √     take square root (making P(x < 0.5) = 0.25)
   ∞    pop a, push 2*a
    *   repeat character int(x) times

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

gÉ;4w

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.


0

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 con CALL RANDOM_SEED()y ¡ CALL RANDOM_NUMBER(R)pero eso es una gran cantidad de bytes!

character(99)S;read(*,'(A)')S;do i=1,len_trim(S)
if(ran(0)*5.gt.1)then;write(*,'(A)',advance="no")S(i:i)
endif;enddo;end

Pruébalo en línea!


1
Se permite la pseudoaleatoriedad, si esa es la forma más cercana en que tiene que hacer que las acciones aleatorias se apoderen.
Andrew

0

Oracle SQL, 133 bytes

select listagg(decode(sign(dbms_random.value-0.2),1,substr(x,level,1)))within group(order by level)from t connect by level<=length(x)

Funciona suponiendo que los datos de entrada se almacenan en una tabla t (x), por ejemplo

with t(x) as (select 'The cat ate my homework' from dual)
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.