Resumen
¡Se ha creado un nuevo lenguaje de manipulación de cadenas, utilizando solo los caracteres $+#-!*|@>
! Su tarea es implementar un intérprete en el menor número de bytes posible.
Entrada
Una cadena, que es una sola línea de este lenguaje. Esto se puede tomar de cualquier manera razonable (stdin, parámetro de función, argumento de línea de comando, etc.), o como una variable predefinida. Si el programa solicita la entrada del usuario, acepte toda la entrada del usuario que solicita de stdin y nada más, consulte a continuación. Puede suponer que es un programa válido.
Salida
Cualquiera que sea el idioma que salga, especificaciones a continuación. Debe generar una cadena de cualquier manera razonable (stdout, salida de función, etc.) o un valor variable. Cuando el lenguaje sale explícitamente, esto debe ir a stdout. Las lagunas estándar están prohibidas.
Especificaciones de idioma
Procesamiento y sintaxis
El lenguaje tiene una forma muy simple de procesamiento, ya que solo manipula cadenas: comienza con una cadena vacía ( ""
) y la cambia con cada término. Un término se compone de una o dos partes: una función (abajo) seguida posiblemente de un parámetro (abajo), que edita su comportamiento. Los términos están separados por tuberías ( |
). Puede suponer que no será un programa vacío y que ningún término estará vacío. Debe generar el valor al final del programa.
Las funciones
El lenguaje tiene solo 6 funciones, como se muestra a continuación. Cada función acepta uno o cero parámetros.
+
concatenar cadenas (toma un parámetro de cadena, lo concatena al valor actual)!
invertir el orden de los caracteres del valor actual (sin parámetro)*
repite la cadena (toma un parámetro entero, repite el valor actual muchas veces)-
elimina todas las ocurrencias de un valor (toma un parámetro de cadena, elimina todas las ocurrencias del valor actual)$
[pseudo-] baraja aleatoriamente el valor actual (sin parámetro)<
enviar el valor actual astdout
(sin parámetros)
Valores
Estos son los valores que se pueden pasar a las funciones, representados por expresiones regulares que los emparejarían:
@[^|]*
un literal de cadena, que incluye cualquier carácter que no sean tuberías. Puede estar vacio.#[0-9]+
un literal entero>
la proxima linea destdin
. Si se usa con*
, convertir a entero.
Casos de prueba
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Tenga en cuenta que el caso de prueba 2 es aleatorio, por lo que cualquier permutación de los caracteres es válida. Además, los resultados de la tabla están separados por nuevas líneas, pero su programa no tiene que hacer lo mismo. El último valor en cada caso es la salida final.
Ejemplo de intérprete de Python (sin golf)
Pruébalo en línea! OMI mejor si lo ejecutas a través de IDLE o lo que sea que uses. (Después lo bajé a 424 bytes, pero estoy seguro de que muchos pueden hacerlo mejor).
<
se encuentra. ¿Es esto obligatorio?
+@>#
? Yo solía #
también.