Publicado desde aquí .
Este desafío está altamente "destilado" de esta pregunta. Un agradecimiento especial a @Akababa!
En esta tarea, debe insertar un signo de exclamación al comienzo de la cadena y después de cada carácter.
Reglas
- Siempre habrá una entrada de cadena no vacía. La entrada tampoco contendrá pestañas. Puede suponer que la entrada solo contiene caracteres imprimibles ASCII no extendidos y líneas nuevas.
- La entrada no contendrá nuevas líneas finales siempre que su idioma no pueda detectar una nueva línea.
- Este es un concurso de código de golf ; la respuesta más corta debería ganar.
Ejemplos
- 4 líneas nuevas dan como resultado 5 signos de exclamación delimitados por líneas nuevas. Es muy difícil poner esto como un texto de Markdown, por lo que se indica en su lugar.
1 2 3 4 5 6 129591 129012 129127 129582 0 0
Salidas
! 1! ! 2! ! 3! ! 4! ! 5! ! 6! ! 1! 2! 9! 5! 9! 1! ! 1! 2! 9! 0! 1! 2! ! 1! 2! 9! 1! 2! 7! ! 1! 2! 9! 5! 8! 2! ! ! 0!
asd afjoK ak: e kPrLd fOJOE; KFO KFkepjgop sgpaoj faj
Salidas
! a! s! d! ! a! f! j! o! K! ! a! k!:! e! ! k! P! r! L! d! ! ! ! ! ! f! O! J! O! E!;! ! ! ! ! ! K! F! O! ! K! F! K! E! P! J! G! O! P! ! s! g! p! a! o! j! ! ! ! f! a! j!
Un caso de prueba base con un solo personaje:
una
Salidas
!¡una!
(¡Autocompletado! Es broma, no existe tal cosa). Contiene signos de exclamación:
!! !! !! !! !!
Salidas:
!!!!! !!!!! !!!!! !!!!! !!!!!
a\n
ya
, ¿podemos exigir que no haya nuevas líneas finales?Respuestas:
QuadR , 1 byte
¡Gracias a A__ por reducir a la mitad el recuento de bytes!
Pruébalo en línea!
No reemplaza nada con
!
fuente
Python 3 , 27 bytes
Pruébalo en línea!
Honestamente, espero que alguien pueda mostrarme una forma genial de hacer esto con un recuento de bytes más pequeño.
fuente
!!
en ese caso, eso es lo que tiene sentido para mí). Si te refieres a la cadena\n
: lo hace, ya que la salida correcta es!\n!
.!\n!\n!
,. Buen trabajo.Python 3 , 26 bytes
Pruébalo en línea!
fuente
Retina 0.8.2 , 2 bytes
Pruébalo en línea! ¡Por fin, un desafío donde Retina tiene incorporado!
fuente
Haskell, 18 bytes
-1 byte gracias a @nimi
Pruébalo en línea!
fuente
('!':).
Guarda un byte.Python 2 , 27 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 19 bytes
Toma la entrada como una matriz de caracteres.
Pruébalo en línea!
JavaScript (ES6),
2320 bytesGuardado 3 bytes gracias a @ShieruAsakoto
Toma la entrada como una cadena.
Pruébalo en línea!
JavaScript (ES6), 22 bytes
Sugerido por @tjjfvi
Toma la entrada como una cadena.
Pruébalo en línea!
fuente
.replace
22 bytess=>[,...s,,].join`!`
R , 25 bytes
Pruébalo en línea!
Una función que acepta y devuelve un vector de caracteres.
fuente
scan(,'')
, tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…scan
(pero que la solución de Nick maneja, al menos si muestra la salida concat
).Código de máquina 8086, formato .COM (MS-DOS 2+), 32 bytes
(-1 dependiendo del emulador: ver abajo)
Para obtener los mejores resultados, redirija la entrada estándar de un archivo, ya que escribir da una salida de aspecto extraño debido a que no hay almacenamiento en búfer; Además, las líneas nuevas se ven un poco raras porque están almacenadas como
CR LF
, yCR
parte desordena la salida.Este programa se comporta bien en una emulación real de MS-DOS (por ejemplo, PCjs), pero DOSBox parecía tener problemas con Ctrl + Z EOF (vea los comentarios en la lista de ensamblaje), por lo que NO intente ingresar la entrada usando la consola en DOSBox a menos que agregue el cheque extra!
Algunas partes interesantes:
Ahorré algo de espacio de datos reutilizando la memoria que ya se había ejecutado (el
21H
inINT 21H
resulta ser!
)Yo era casi capaz de utilizar un truco interesante que he encontrado en la página de "El poder oculto de Instrucciones de BCD" que habría permitido que la utilice
AAA
en lugar de un estándarTEST
para compararAL
a 0, el ahorro de un byte. Desafortunadamente, esto no está completamente documentado, por lo que no pude confiar en él: por ejemplo, PCjs no ajusta nada más que las banderas de transporte y transporte auxiliar. :-(Código de ensamblaje (modo ideal TASM):
fuente
brainfuck ,
2422 bytes-2 bytes gracias a JoKing.
Pruébalo en línea!
fuente
Pepe , 47 bytes
Pruébalo en línea!
Explicación:
fuente
Laberinto ,
19 11 109 bytesPruébalo en línea!
¿Cómo?
Entramos en el Laberinto en la esquina superior izquierda mirando hacia la derecha con una pila infinita de ceros ...
Afortunadamente, no necesitamos manejar elementos no imprimibles, de lo contrario, el primer byte cero nos daría la vuelta y causaría
,
estragos.fuente
sed , 12 bytes
Pruébalo en línea!
-3 bytes gracias a Cows Quack
fuente
s/\b\|\B/!/g
también funciona para 12 bytesZsh , 32 bytes
Pruébalo en línea!
(s::)
se divide en caracteres,''
agrega un elemento vacío al inicio y luegoecho -nE $c!
hace eco de cada uno seguido de un!
.fuente
Perl 5 -p0,
176 bytesPruébalo en línea!
Mi respuesta original fue
-p
y$_='!'.s,.,$&!,gr
. Gracias a @Nahuel Fouilleul por cortar 11 bytes y a @Grimy por la-p0
sugerencia.fuente
-lp
proporciona resultados incorrectos para el\n\n\n\n
caso de prueba (devuelve 4 separados por nueva línea en!
lugar de los 5 especificados).-p0
funciona correctamente6502, 12 bytes (13 bytes si Apple II)
6502
El código de máquina supone que un par de ubicaciones de página cero están conectadas al hardware de entrada de caracteres ($ FE) y de salida (FF). Muchos sistemas basados en 6502 facilitan la E / S de esta manera, aunque la dirección de E / S generalmente no está en la página cero.
Para simplificar, usé Py65 , un simulador de sistema de microordenador 6502 escrito en Python.
Aquí hay un volcado de memoria de Py65. Puede cargar el siguiente código en cualquier lugar de la página cero para que no se superponga $ FE y $ FF.
Al ejecutarse en una ventana de comandos de Windows, puede pegar (Ctrl + V) cualquier texto que desee, o simplemente puede escribir. Si escribe, presione Ctrl + J para una nueva línea (mismo carácter ASCII). Presione Ctrl + C para interrumpir el procesador y volver al símbolo del sistema Py65.
Naturalmente, el código de ensamblaje es más fácil de leer.
Para mayor claridad, aquí está el código de ensamblaje en formato CBA65 .
Manzana II
El código anterior supone que un valor nulo indica que no hay entrada, por lo que continúa sondeando hasta que se devuelve un valor no nulo.
A modo de comparación, Apple I y Apple II señalan la disponibilidad de un nuevo carácter al configurar el bit 7 de la dirección de E / S del teclado, que luego debe borrarse después de recuperar el carácter. En esos sistemas, la E / S de caracteres generalmente se realiza llamando a rutinas de monitoreo del sistema en lugar de acceder directamente al hardware.
Al llamar a RDKEY ($ FD0C) y COUT ($ FDED), el equivalente de Apple II de lo anterior se puede codificar en 13 bytes y se puede ejecutar en cualquier lugar de la RAM. Aquí está el código que ejecuté en un emulador Apple // e, a2ix en Android 9.
Presionar Retorno tiene el mismo efecto que una nueva línea.
¿Notó que en lugar del valor ASCII normal # $ 21 para el signo de exclamación, en su lugar se usa # $ A1? Esto se debe a que enviar valores ASCII estándar a COUT hace que se muestren en "modo inverso", negro sobre blanco. Mostrar ASCII en blanco normal sobre negro requiere agregar # $ 80 al valor de caracteres en el acumulador antes de llamar a COUT. Debido a que RDKEY devuelve caracteres con el conjunto hi-bit, los programas de ensamblaje generalmente borran el bit del carácter para obtener su valor ASCII antes de usarlo.
fuente
Bash , 36 bytes
Pruébalo en línea!
¡Esto cuenta con que la nueva línea termine la entrada para el final! marca.
fuente
!
al final de la entrada.MarioLANG ,
9594908969 bytesPruébalo en línea!
La primera vez que probé MarioLANG, ¡fue muy divertido!
Gracias a Jo King por -20 bytes
Explicación:
Entonces, como su nombre lo indica, MarioLANG está hecho para ejecutarse como un juego de Super Mario Bros. Funciona de manera similar a BF, con memoria dispuesta en una cinta de celdas. Hay operadores para incrementar, disminuir, imprimir (como ascii o numérico) y leer en la celda de memoria actual, y operadores para moverse hacia la izquierda o hacia la derecha a lo largo de la cinta.
Mario (el puntero de instrucciones) siempre comienza en la celda superior izquierda del programa, con su dirección de movimiento prevista establecida a la derecha. Si Mario no tiene un objeto similar a un piso debajo de él (=, "o #), caerá hasta llegar a un objeto similar a un piso. Si Mario deja el espacio del programa, el programa finaliza debido a Game Over :(
Este programa específico básicamente se puede dividir en dos mitades: la configuración y el bucle.
En la sección Configuración, simplemente estamos incrementando la primera celda de memoria hasta llegar a 33, el valor ASCII para "!". Suficientemente fácil; Si esto se puede jugar al golf, es pura cuestión de forma. Mario comienza desde la esquina superior izquierda, recoge 10 monedas, comienza a caer al recoger el 11, cambia de dirección y luego repite. Recoge las últimas 11 monedas sin cambiar de dirección; finaliza la sección de configuración en la esquina inferior derecha "+".
En la sección de bucle, Mario comienza alcanzando un elevador. Los "!" El operador hace que deje de moverse para que permanezca en el elevador. En el camino hacia arriba, imprime el carácter ASCII correspondiente al valor de la celda de memoria actual (este siempre es 33, "!"), Luego cambia a la siguiente celda en la memoria. Mario llega a la cima y establece su dirección a la derecha. Se cae y lee un carácter de la entrada como su valor ASCII (o -1 si no hay ningún carácter). Incrementamos porque la única medida de control en MarioLANG es omitir una instrucción si la celda de memoria actual tiene un valor de 0. Si lo hace, omitimos cambiar la dirección de Mario, por lo que caminará directamente desde el siguiente piso hasta su destino. Si no es así, establecemos la dirección a la izquierda; caminar a la izquierda del piso inferior disminuye la celda actual a su valor anterior,
Versión anterior (89 bytes):
fuente
Perl 6 ,
1611 bytesPruébalo en línea!
Reemplaza todas las coincidencias de ancho cero con signos de exclamación. No se permiten expresiones regulares nulas, por lo que utilizamos un marcador de captura para no capturar nada
fuente
C # (compilador interactivo de Visual C #) , 28 bytes
Pruébalo en línea!
fuente
05AB1E , 4 bytes
E / S como una lista de caracteres.
Pruébalo en línea.
Explicación:
fuente
Befunge-98 (PyFunge) , 7 bytes
Pruébalo en línea!
fuente
Triangular ,
1513 bytesPruébalo en línea!
-2 bytes después de recordar que Triangular tiene un operador de detención condicional.
Creo que esto es lo más breve posible. Hace triangular que los operadores de cambio de dirección condicionales, pero por desgracia funcionar de forma diferente que los otros condicionales. Mientras que todos los demás verifican si ToS <= 0, los condicionales de cambio de dirección verifican ToS! = 0. Si este no fuera el caso, tendríamos 10 bytes en forma de
Bq3~#*/@<<
.Sin golf:
Versión anterior (15 bytes):
fuente
SimpleTemplate , 23 bytes
Este es un lenguaje que escribí, y se suponía que era para plantillas, pero bueno.
Debería ser casi autoexplicativo, una vez que vea el código no protegido:
Y una explicación:
!
- Imprime el literal!
carácter{@each argv.0 as char}
- Recorre cada carácter, con el valor establecido en la variablechar
( opcional , la variable predeterminada es_
).argv.0
es el primer parámetro pasado arender()
método del compilador.{@echo char}!
- genera lachar
variable y un!
carácter literal .Para la versión de golf, la variable predeterminada
_
se usa la su lugar.{@/}
- cierra el ciclo ( opcional )Solución pura SimpleTemplate :
Crea una función
x
que genera el mismo resultado.Puedes usarlo así:
Puedes probar todo esto en: http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa
En la línea 908, puede utilizar las variables
$golfed
,$ungolfed
y$fn
para poner a prueba todas las versiones.Sin embargo, si se le permite usar una matriz de caracteres, el código se simplifica (20 bytes):
Y sin golfos:
Básicamente, genera todos los elementos en la matriz, unidos por
"!"
, rodeados por literal!
.Debido a limitaciones en la clase del compilador, el espacio es obligatorio (en la versión golfizada).
Este código también es extremadamente difícil de usar en SimpleTemplate puro (usando la función como ejemplo):
El
@call
puede llamar a una función que existe en PHP, lo que significa que no es una pura SimpleTemplate solución.fuente
Ruby ,
1716 bytesPruébalo en línea!
Gracias Value Ink por -1 byte
fuente
gsub
.Gema , 11 personajes
Lamentablemente
!
comienza un comentario en Gema, por lo que debe ser escapado.Ejecución de muestra:
Pruébalo en línea!
fuente
Jalea , 5 bytes
Un programa completo que acepta una cadena, que imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
Japt , 4 bytes
Intentalo
fuente
'
si el reemplazo fuera un número.Japt , 4 bytes
Intentalo
Japt
-P
, 7 bytesLamentablemente
!
es un personaje reservado, que necesita las comillas.Intentalo
No hay mucho que explicar:
ï
es producto cartesiano yi
antecede.fuente
Perl 5 +
-p
, 11 bytesPruébalo en línea!
fuente