Su tarea es enfrentar cada lado del teclado uno contra el otro y construir dos programas, en el mismo idioma, uno usando solo las teclas del lado izquierdo de un teclado estándar que sale Pollinium milk; plump pumpkin; lollipop?
y otro usando las teclas del lado derecho que sale Weatherheaded sweetheart haberdasheress!
.
Reglas
Las claves exactas permitidas para el programa de la izquierda son:
123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB
y para el programa de la derecha:
7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?
Hay cuatro teclas libres Esc
( \x1b
), Tab
( \x09
), Space
( \x20
) y Enter
( \x0a
y / o \x0d
) que se pueden usar en cualquiera, ninguna o ambas soluciones.
Su puntaje será el recuento total de bytes para ambos programas. Si bien he usado el término program
, sus envíos pueden ser programas completos o funciones como de costumbre, y ambos pueden ser de diferentes tipos (por ejemplo, un programa completo y una función).
Su resultado debe incluir el texto deseado, cualquier cantidad de espacios en blanco iniciales y finales está bien, siempre que el texto exacto aparezca dentro de él.
Las lagunas estándar están prohibidas .
Las soluciones más cortas en cada idioma ganan.
fuente
Respuestas:
Perl 5 , 261 = 88 + 173 bytes
Este es un ejemplo donde "las opciones de idioma no cuentan" es un problema. La solución del lado rigt usa
-p
, el lado izquierdo no. Entonces, ¿cuenta como el mismo idioma o no? ¿Y las opciones deben provenir del conjunto de caracteres izquierdo / derecho?Izquierda 88
use
-M5.10.0
(o-E
desde la línea de comandos) para activarsay
De nuevo discutible si esta opción debe contar como código y debe venir del lado izquierdo o si se encuentra en "opciones para configurar la versión del idioma no cuenta"Pruébalo en línea!
Derecha 173
Ejecutar con la
-p
opción (que también consta de caracteres correctos)Es casi seguro que esto se puede mejorar, pero por ahora fue bastante difícil hacer que algo funcione. No tener acceso a
print
,say
,$_
ysub{}
hace que la producción complicadoPruébalo en línea!
fuente
eval
través de&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}
!Espacio en blanco ,
11751143655645638632639578 (293 + 285) bytesTenía que hacerse ..; p
Definitivamente se puede jugar al golf llenando la pila al revés e imprimiéndolo todo al final en algún tipo de bucle, pero este es solo mi segundo programa de espacios en blanco, así que todavía tengo que resolverlo ..EDITAR: Golf.+7 bytes porque escribí mal
pumpkin
comopumkin
... (Gracias por notarlo, @ fəˈnɛtɪk .)Las letras
S
(espacio),T
(tabulación) yN
(nueva línea) se agregan solo como resaltado.[..._some_action]
agregado solo como explicación.Lado izquierdo
Pollinium milk; plump pumpkin; lollipop?
:Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Lado derecho
Weatherheaded sweetheart haberdasheress!
:Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Explicación:
Primero construye la pila invertida. Empujar un número se realiza de la siguiente manera:
S
al principio: Habilite la manipulación de la pilaS
: Empuje lo que sigue como número a la pilaS
/T
: Bit de signo dondeS
es positivo yT
negativoT
yS
seguidos de unN
: Ponga el número como binario en la pila (T=1
yS=0
).Luego recorrerá la pila invertida e imprimirá todo como caracteres. Hace esto de la siguiente manera:
SSSN
)Label_0
(NSSN
)SNS
)Label_1
(NTSTN
)TNSS
)Label_0
(NSNN
)Label_1
(NSSTN
)Este es el diseño predeterminado para ambos programas. Aquí está el registro de cambios para este diseño predeterminado que redujo aún más el recuento de bytes:
Todos los números se reducen en la misma cantidad ( en el primer programa y en el segundo) para disminuir los dígitos binarios utilizados para los números ahora más bajos, y entre los pasos 3.2 y 3.3 se agregan los siguientes dos subpasos:
100
110
102
101
SSSTTSTTTSN
) en el programa 1 o 101 (SSSTTSSTSTN
) en el programa 2TSSS
)También he utilizado
SNS
en algunos casos para duplicar la parte superior de la pila, que se utiliza para el campoll
,ll
,ee
yss
.Además, el paso 4 (crear
Label_1
) se eliminó por completo. Saldrá con un error, pero aún generará todo correctamente (lo cual está permitido según el meta ).Es posible copiar un
n
valor 'th desde la parte superior de la pila (conSTS
+ 0 indexadon
), que en algunos casos es más corto que crear un nuevo número.En el primer programa para el que hice esto: el segundo
p
enpop
(STSSTN
(copia 1) es más corto queSSSTTSSN
(crear número para 'p')), el segundol
enlol
(STSSTN
(copia 1) es más corto queSSSTSSSN
(crear número para 'l' )), el segundop
enp p
(STSSTN
(copia 1er) es más corto queSSSTTSSN
(crear número para 'p')), el segundop
enpumlp
(STSSTTN
(copia 3ro) es más corto queSSSTTSSN
(crear número para 'p')), el segundop
enpmup
(STSSTSN
( copia 2) es más corto queSSSTTSSN
(cree el número para 'p')), el segundom
enm m
(STSSTN
(copia 1) es más corto queSSSTSSTN
(cree el número para 'm')), el segundoi
enini
(STSSTN
(copia 1) es más corto queSSSTSTN
(cree el número para 'i') )En el segundo programa esto no se hace para ninguno. La distancia entre algunos es bastante corta, como
ere
oded
, pero crear el número para 'e' (SSTTN
) o 'd' (SSTTSN
) es más corto o de la misma longitud que la copia 1st (STSSTN
), por lo que no pude aplicar este truco en el segundo programa para guardar bytes. NOTA: Después del paso de golf 7, ya no se aplican todos estos.En ambos programas, cambié el paso 1 del bucle de
SSSN
(Push 0) aSSN
(Push error_value), y eliminé los pasos 3.1 (SNS
Duplicar) y 3.2 (NTSTN
Si 0: Salir). Ahora simplemente saldrá con un error queSSN
es un valor desconocido tan pronto como intente acceder a él.Se eliminó el
SSN
(error_value) completamente en ambos programas. Ahora se detendrá con el error " No se puede hacer Infix Plus " cuando intenta hacer la función Agregar sin dejar nada en la pila.Cambió los valores constantes de
100
y102
hacia110
y101
respectivamente. Aquí el programa Java solía generar la110
constante; y aquí el programa Java solía generar la101
constante. Tenga en cuenta que ahora se usa menos Copia que la descrita en el punto 4 anterior, porque los nuevos valores son en muchos casos más cortos que las copias, por lo que volver a empujarlos es más corto.fuente
Lenguage, esta cantidad de bytes
El lado izquierdo es 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 repeticiones del
a
carácter, que es equivalente al siguiente programa Brainfuck:Pruébalo en línea!
El lado derecho es 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 repeticiones del
p
carácter, que es equivalente al siguiente programa Brainfuck:Pruébalo en línea!
fuente
CJam , 128 + 192 = 320 bytes
Pruébalo en línea!
Pruébalo en línea!
fuente
Fisión , 958 + 752 = 1710 bytes
._.
Izquierda
Pruébalo en línea!
Correcto
Pruébalo en línea!
OK, aquí estamos con suerte, en realidad ._.
La primera característica interesante de Fission es que tiene 4 comandos para crear punteros de comando, átomos de AKA:
RLDU
así que tengo dos comandos para los grupos izquierdo y derecho.El segundo amuleto de la suerte es de 2 comandos para la salida
!
yO
, que se produce en diferentes grupos.Tercera vez el encanto. Ambos comandos de salida generan el equivalente ASCII de la masa de los átomos. Entonces necesito cambiarlo de alguna manera. ¡Suerte la mía! Tanto
+ (+1 mass)
y_ (-1 mass)
están en un grupo y los tres necesarios$ (+1 energy)
,~ (-1 energy)
,@ (swap mass and energy)
están en otro grupo.Así que no hay nada que me detenga, pero no puede ser compacto, estableciendo masas paso a paso.
Primer programa
El primer programa consiste solo en
Dz^@$~!V
El inicio puede ser más simple (solo
R
), pero el uso de dividir guarda algunos bytes para la primera letra.Atom, eso va a la izquierda, se envuelve y se encuentra
V
, lo que lo hace bajar y envolverse indefinidamente, sin hacer nada.El segundo átomo va derecho y encontrará un montón de patrones repetidos
@...@!
para cada letra que salga.Eventualmente se encontrará
V
y compartirá el destino del primer átomo. No hay forma de destruirlos o detenerlos con la parte izquierda del teclado.Segundo programa
El segundo viene con sus altibajos. Tengo comandos para cambiar la masa directamente, pero el comando de salida
O
destruye los átomos, así que necesito preservarlos de alguna manera.El programa comienza a la derecha desde el
L
átomo hacia la izquierda.Patrón repetido:
'
pone el siguiente código ASCII de char en la masa de los átomos, por lo que el código de algunosX
se almacena primero, que la masa se cambia por_
y+
al valor exacto.A veces
X'
se omite, si es más corto de usar solo_
y+
.El átomo viene de la izquierda, refleja dos veces y golpea
}
desde la izquierda. En este caso}
funciona como clonador, enviando dos átomos idénticos hacia arriba y hacia abajo. El átomo de abajo se refleja en el espejo y se va hacia la izquierda. Envolturas de átomos, golpea el mismo espejo pero desde abajo y así se refleja bien, encuentroO
e impresión.Al final, el último átomo se encuentra con el final
O
para ser destruido.fuente