Sua tarefa é posicionar cada lado do teclado um contra o outro e criar dois programas, no mesmo idioma, um usando apenas as teclas do lado esquerdo de um teclado padrão que sai Pollinium milk; plump pumpkin; lollipop?
e outro usando as teclas do lado direito que sai Weatherheaded sweetheart haberdasheress!
.
Regras
As chaves exatas permitidas para o programa do lado esquerdo são:
123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB
e para o programa da direita:
7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?
Existem quatro chaves livres Esc
( \x1b
), Tab
( \x09
), Space
( \x20
) e Enter
( \x0a
e / ou \x0d
) que podem ser usadas em uma, nenhuma ou em ambas as soluções.
Sua pontuação será a contagem total de bytes para os dois programas. Embora eu tenha usado o termo program
, seus envios podem ser programas completos ou funcionar normalmente, e ambos podem ser de tipos diferentes (por exemplo, um programa completo e uma função).
Seu resultado deve incluir o texto desejado, qualquer quantidade de espaço em branco à esquerda e à direita é boa, desde que o texto exato apareça nele.
As brechas padrão são proibidas .
As soluções mais curtas em cada idioma ganham.
fonte
Respostas:
Perl 5 , 261 = 88 + 173 bytes
Este é um exemplo em que "as opções de idioma não contam" é um problema. A solução do lado rígido usa
-p
, o lado esquerdo não. Então, conta como o mesmo idioma ou não? E as opções devem vir do conjunto de caracteres esquerdo / direito?Esquerda 88
use
-M5.10.0
(ou a-E
partir da linha de comando) para ativarsay
Novamente discutível se essa opção deve contar como código e deve vir do lado esquerdo ou se estiver em "opções para definir a versão do idioma, não conta"Experimente online!
Direita 173
Execute com a
-p
opção (que também consiste em caracteres corretos)Isso quase certamente pode ser melhorado, mas por enquanto já era difícil o suficiente para fazer algo funcionar. Não ter acesso a
print
,say
,$_
esub{}
faz com que a saída complicadaExperimente online!
fonte
eval
via&{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}
!Espaço em branco ,
11751143655645638632639578 (293 + 285) bytesTinha que ser feito ..; p
Definitivamente, você pode jogar golfe enchendo a pilha invertida e imprimindo tudo no final em algum tipo de loop, mas este é apenas o meu segundo programa de espaço em branco de todos os tempos, então ainda estou para descobrir ..Edição: Golfed.+7 bytes porque eu escrevi incorretamente
pumpkin
comopumkin
.. (Obrigado por perceber, @ fəˈnɛtɪk .)Letras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Lado esquerdo
Pollinium milk; plump pumpkin; lollipop?
:Experimente online (apenas com espaços brutos, guias e novas linhas).
Lado direito
Weatherheaded sweetheart haberdasheress!
:Experimente online (apenas com espaços brutos, guias e novas linhas).
Explicação:
Primeiro constrói a pilha invertida. O envio de um número é feito da seguinte maneira:
S
no início: ativar manipulação de pilhaS
: Empurre o que segue como número para a pilhaS
/T
: Bit de sinal ondeS
é positivo eT
é negativoT
eS
seguidos deN
: Coloque o número como binário na pilha (T=1
eS=0
).Em seguida, ele fará um loop sobre a pilha invertida e imprimirá tudo como caracteres. Faz o seguinte:
SSSN
)Label_0
(NSSN
)SNS
)Label_1
(NTSTN
)TNSS
)Label_0
(NSNN
)Label_1
(NSSTN
)Isso acima é o layout padrão para os dois programas. Aqui está o log de alterações para esse layout padrão que reduziu ainda mais a contagem de bytes:
Todos os números são reduzidos na mesma quantidade ( no primeiro programa e no segundo) para diminuir os dígitos binários usados para os números agora mais baixos e, entre as etapas 3.2 e 3.3, as duas sub-etapas a seguir são adicionadas:
100
110
102
101
SSSTTSTTTSN
) no programa 1 ou 101 (SSSTTSSTSTN
) no programa 2TSSS
)Eu também usado
SNS
em alguns casos para duplicar o topo da pilha, que é usado para golf oll
,ll
,ee
ess
.Além disso, a etapa 4 (criar
Label_1
) foi removida completamente. Ele sairá com um erro, mas ainda produzirá tudo corretamente (o que é permitido de acordo com a meta ).É possível copiar um
n
valor da parte superior da pilha (com oSTS
índice 0n
), que é mais curto do que criar um novo número em alguns casos.No primeiro programa em que fiz isso: o segundo
p
empop
(STSSTN
(cópia 1º) é mais curto queSSSTTSSN
(crie o número para 'p')), o segundol
emlol
(STSSTN
(cópia 1º) é mais curto queSSSTSSSN
(crie o número para 'l' )), o segundop
emp p
(STSSTN
(cópia 1) é menor queSSSTTSSN
(criar número para 'p')), o segundop
empumlp
(STSSTTN
(cópia 3) é menor queSSSTTSSN
(criar número para 'p')), o segundop
empmup
(STSSTSN
( cópia 2º) é menor queSSSTTSSN
(criar número para 'p')), o segundom
emm m
(STSSTN
(cópia 1º) é menor queSSSTSSTN
(criar número para 'm')), o segundoi
emini
(STSSTN
(cópia 1º) é menor queSSSTSTN
(crie número para 'i') )No segundo programa, isso não é feito para nenhum. A distância entre alguns é bem curta, como
ere
ouded
, mas criar o número para 'e' (SSTTN
) ou 'd' (SSTTSN
) é menor ou igual ao da cópia 1st (STSSTN
), portanto, não pude aplicar esse truque no segundo programa para salvar bytes. NOTA: Após o passo 7 do golfe, nem todos eles se aplicam mais.Nos dois programas, alterei a etapa 1 do loop de
SSSN
(Push 0) paraSSN
(Push error_value) e removi as etapas 3.1 (SNS
Duplicate) e 3.2 (NTSTN
If 0: Exit). Agora, ele simplesmente sairá com um erro queSSN
é um valor desconhecido assim que tentar acessá-lo.Removido
SSN
completamente (error_value) nos dois programas. Agora ele será interrompido com o erro " Impossível executar o Infix Plus " quando tentar executar a função Adicionar sem mais nada na pilha.Alterados os valores constantes de
100
e102
para110
e101
respectivamente. Aqui o programa Java costumava gerar a110
constante; e aqui o programa Java usado para gerar a101
constante. Observe que agora há menos cópias usadas do que as descritas no ponto 4 acima, porque os novos valores são, em muitos casos, mais curtos que as cópias, portanto, empurrá-los novamente é mais curto.fonte
Linguagem, esses muitos bytes
O lado esquerdo é 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 repetições do
a
personagem, que é equivalente ao seguinte programa Brainfuck:Experimente online!
O lado direito é 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 repetições do
p
personagem, que é equivalente ao seguinte programa Brainfuck:Experimente online!
fonte
CJam , 128 + 192 = 320 bytes
Experimente online!
Experimente online!
fonte
Fissão , 958 + 752 = 1710 bytes
._.
Esquerda
Experimente online!
Direita
Experimente online!
OK, aqui estamos com pura sorte, na verdade ._.
O primeiro recurso interessante do Fission é que ele possui 4 comandos para criar ponteiros de comando, átomos AKA:,
RLDU
então eu tenho dois comandos para grupos esquerdo e direito.O segundo amuleto da sorte são 2 comandos de saída
!
eO
, o que ocorre em diferentes grupos.Terceira vez o charme. Ambos os comandos de saída emitem o equivalente ASCII da massa dos átomos. Então, eu preciso mudar de alguma forma. Sorte minha! Ambos
+ (+1 mass)
e_ (-1 mass)
estão em um grupo e todos os necessários três$ (+1 energy)
,~ (-1 energy)
,@ (swap mass and energy)
estão em outro grupo.Portanto, não há nada para me impedir, mas não pode ser compacto, definindo massas passo a passo.
Primeiro programa
O primeiro programa consiste em apenas
Dz^@$~!V
O início pode ser mais simples (apenas
R
), mas o uso da divisão salva alguns bytes para a primeira letra.Atom, que vai para a esquerda, envolve e encontra
V
, o que o faz cair e se enrolar indefinidamente, sem fazer nada.O segundo átomo vai bem e encontrará vários padrões repetidos
@...@!
para cada letra a ser impressa.Eventualmente, ele encontrará
V
e compartilhará o destino do primeiro átomo. Não há como destruí-los ou parar com a parte esquerda do teclado.Segundo programa
O segundo vem com seus altos e baixos. Eu tenho comandos para alterar a massa diretamente, mas o comando de saída
O
destrói átomos, então preciso preservá-los de alguma forma.O programa inicia à direita
L
com o átomo indo para a esquerda.Padrão repetido:
'
puts próxima encoutered código ASCII do caractere em massa átomos, para que o código de algumX
é armazenado em primeiro lugar, que a massa é alterado pelo_
e+
para o valor exato.Às vezes
X'
é ignorado, se for mais curto para usar apenas_
e+
.Atom vem da esquerda, espelha duas vezes e acerta
}
da esquerda. Nesse caso,}
funciona como clonador, enviando dois átomos idênticos para cima e para baixo. O átomo abaixo reflete pelo espelho e vai para a esquerda. O átomo se envolve, atinge o mesmo espelho, mas por baixo e, portanto, reflete direito, encontroO
e impressão.No final, o último átomo encontra o final
O
a ser destruído.fonte