¿Por qué tenía 6 miedo de 7? Porque 7 8 9!
Dada una cadena, aplique las siguientes transformaciones:
- Si hay un 6 al lado de un 7, elimine el 6 (6 tiene miedo de 7)
- Si aparece la secuencia "789", elimine el 8 y el 9 (7 ate 9)
(Si no me equivoco, no importa en qué orden realice las transformaciones)
Siga aplicando estas transformaciones hasta que ya no pueda.
Ejemplo:
78966
Primero vemos "789", por lo que la cadena se convierte en "766". Luego vemos "76", por lo que sacamos el 6 y la cadena se convierte en "76". Luego vemos "76" nuevamente, así que nos quedamos con "7".
Casos de prueba:
987
=>987
(No en el orden correcto. No hace nada)6 7
=>6 7
(El espacio en blanco actúa como un buffer entre 6 y 7. No pasa nada)676
=>7
7896789
=>77
7689
=>7
abcd
=>abcd
68978966897896
=>68977
Respuestas:
Retina , 12
Traducción de la respuesta sed:
Pruébalo en línea
fuente
Javascript ES6, 29 bytes
Prueba:
fuente
Java,
126816658 bytes¡Gracias a @GamrCorps por proporcionar la versión lambda de este código!
¡Gracias a @ user902383 por señalar un truco de autoboxing!
...Sip.
En realidad, es más largo de lo que esperaba: Java reemplaza los elementos en cadenas con
replaceAll()
una vez por partido, no repetidamente hasta que deja de cambiar. Así que tuve que usar un elegante bucle for.Forma lambda:
Forma de la función:
Código no comprobado comprobable:
fuente
.equals
a!=
, que no hace lo mismo.==
(o!=
) compara por ubicación hexadecimal de objeto, no por valor. Es la misma longitud de lo contrario.while()
es de 7 bytes,for(;;)
es de 7 bytes.GNU Sed, 17
La puntuación incluye +1 para la
-r
opción.fuente
67789
debería regresar,77
sino que regresa677
s/67|7(6|89)/7/
lugar des/6?7(6|89)/7/
s///g
.Perl 6 ,
1918 bytes(Tenga en cuenta que
[6|89]
la versión sin captura de la(6|89)
cual se escribe como(?:6|89)
en Perl 5.<[6|89]>
es cómo escribiría lo que se escribe como[6|89]
en Perl 5)uso:
fuente
6*
y el[6|89]*
no coinciden con nada, ¿qué impide que7
se sustituya7
ad infinitum?7
con y7
luego comienza de nuevo en la siguiente posición, trabajando hasta el final.:g
es la abreviatura de:global
norepeat until it doesn't match anymore
.s/67|76|789/7/
a trabajar667
, tendría que escribirlo como algo en el sentido de: lowhile s/67|76|789/7/ {}
que, por supuesto, nunca se detendría si lo escribieras comowhile s/6*7[6|89]*/7/ {}
esperabas. Además, el final del comentario anterior puede parecer malhumorado, no es así como se pretendía[]
debería cambiarse a()
? No quieres hacer coincidir las tuberías o79999
.[]
es la versión no capturadora de Perl 6()
, lo que estás pensando se deletrea como<[6|89]>
en Perl 6.Pyth, 17 bytes
Pruébalo aquí
Leaky Nun ha superado esto por un byte en los comentarios.
fuente
Perl 5 , 17 bytes
uso:
fuente
Mathematica, 52 bytes
Explicación:
fuente
Óxido, 96 bytes
Desesperadamente largo, como de costumbre para Rust ...
Sin golf:
fuente
Emacs Lisp, 59 bytes
Se vuelve un poco más claro con los espacios:
fuente
Rubí, 27 bytes
Esta solución es de comentarios, crédito a Brad Gilbert b2gills .
Ruby, 37 bytes
(antigua solución)
Esta solución utiliza el hecho de que nunca necesitará reemplazar más veces que los caracteres en la cadena.
fuente
chars
lugar desize.times
guardar algunos bytes.sub()
ygsub()
para reemplazar primero o todos. Entonces global es solo un personaje más.->s{s.gsub /6*7(6|89)*/,'7'}
, y dejaríagsub
hacer todo el trabajo de bucle.gsub /6*7(6|89)*/,?7
con un usoruby -pe "gsub /6*7(6|89)*/,?7"
de un total de 20 + 1 bytesJapt , 15 bytes
Solución RegEx simple
Pruébalo en línea
fuente
PowerShell, 27 bytes
Haciendo uso de:
-replace
que un reemplazo global por defecto en PowerShell-regex
operador a la matriz$args
aplicándolo a todos los elementos individualmente, y aquí solo hay un elemento porque solo hay un parámetro de script, por lo que funciona bien y podemos evitar tener que indexar el elemento[0]
.Un intento previo de novedad antes de realizar un reemplazo global lo haría; 74 bytes de construcción de una cadena de "-replace -replace -replace" usando la multiplicación de cadenas, tantas veces como la longitud de la cadena, luego evalúela ()
(Con un poco de sustitución de cadenas para acortar el número de reemplazos).
fuente
CJam,
7064 bytesGracias a Peter Taylor por cortar
{"789":I}{"76:":I}?
a"789""76"?:I
"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I={"789":I}{"76":I}?];}?}/A"67":Iq:A{AI#:B){AB<7+A{BI,+}~>+s:A];}{"76"I="789""76"?:I];}?}/A
Sé que esto probablemente podría jugar mucho más y tu ayuda sería muy apreciada, pero, francamente, estoy feliz de haber logrado obtener la respuesta. Este fue mi primer intento de escribir CJam.
Explicación:
fuente
/
y*
. También tenga en cuenta que pensar en términos de pilas cuando está acostumbrado a lenguajes tipo C requiere cierta adaptación. Por ejemplo,{"789":I}{"76":I}?
puede sacar la tarea para convertirse"789""76"?:I
, que se puede seguir jugando78976`3/?:I
.78976`3/
da una matriz["789" "76"]
; entonces, en lugar de usar?
, necesitaría usar=
para indexar; pero es al revés, por lo que necesitaría invertir el índice, perdiendo la ventaja.MATL , 17 bytes
Ejemplo
EDITAR : ¡ Pruébelo en línea!
Explicación
Esto funciona aplicando un reemplazo de expresión regular tantas veces como haya caracteres en la cadena original . Esto es suficiente, ya que cada sustitución reduce el número de caracteres.
fuente
En serio, 29 bytes
Toma la entrada como una cadena entre comillas dobles, como
"6789"
. Pruébelo en línea (deberá citar manualmente la entrada).Explicación:
fuente
Jue , 26 bytes
incluyendo una nueva línea final.
La entrada se agrega al programa antes de iniciarlo.
La salida se lee del estado del programa cuando termina, de manera similar a una máquina de Turing.
(Thue hace tener un flujo de salida, pero es difícil de usar correctamente, así que no estoy seguro de si se trata de un método de salida aceptable)
fuente
Bash,
1028267 (+7)? bytesversión extglob
Esto está destinado a ser puesto en un archivo y llamada con, por ejemplo
bash -O extglob 789.sh 6567678989689789656
. El (+7)? bytes es para si la opción extglob cuenta para bytes.¡Gracias a @BinaryZebra por señalar las características de extglob!
Versión no extglob (82 bytes)
Esto está destinado a ser puesto en un archivo y llamada con, por ejemplo
./789.sh 65678989656
.Utiliza la expansión de parámetros para buscar y reemplazar en un bucle. Involucré una serie de expansiones para hacer el reemplazo, ya que no conozco una forma de encadenar expansiones de manera más efectiva.
fuente
@()
sintaxis. Sabía que tenía que haber una manera de combinarlos. Y @Mego, gracias por la bienvenida!R, 35 bytes
No sabía que podía usar de
gsub
esta manera, muchas gracias por cada respuesta aquí que me hizo aprender algo nuevo.fuente
PHP 51 caracteres
Caso de prueba escrito a mano
Esto hace la comparación de la cadena y la cadena reemplaza ambas en la condición while. Si mientras se cumple la condición, actualiza la mano izquierda de la comparación con el resultado. Déjame saber de cualquier mejora.
fuente
Jolf , 15 bytes
Pruébalo aquí! ¿Realmente tengo que explicar?
fuente
PHP, 36 bytes
solución de expresiones regulares, toma $ una cadena y reemplaza a través de la expresión.
fuente
$argv
o STDIN.Clojure, 71 bytes
Clojure es menos que ideal para jugar golf debido a su naturaleza detallada, pero no obstante es un ejercicio interesante:
Versión de golf, utilizando interoperabilidad Java:
Versión sin golf, utilizando interoperabilidad Java:
Versión "pura Clojure" sin golf:
fuente
/// , 19 bytes (no competitivos)
En realidad, no puede proporcionar información en este idioma, por lo que la supuesta entrada va a la derecha del código.
fuente
Python 3, 46 bytes
fuente
Japt v2.0a0, 12 bytes
Pruébalo en línea!
Cómo funciona
String.e
Es una función de reemplazo recursiva. Japt 2 tiene una nueva sintaxis de expresiones regulares y autocompletado de paréntesis dentro de expresiones regulares, lo que ahorra un byte aquí. (En Japt 1.x, tuvimos que pasar cadenas en lugar de expresiones regulares, que era un poco torpe).fuente
Dyalog APL , 17 bytes
'6*
cualquier número de seises7
seguido de un siete(
...)*'
seguido de cero o más secuencias de ...6|89
un seis u ocho y nueve⎕R
R EColoque que con'7'
un sietefuente
05AB1E , 12 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente