Há algo de errado com o seu teclado. A Shiftchave tem uma mente própria. Toda vez que você digita um personagem, você não tem idéia se ele sairá alterado ou não (embora seja 50-50). Além das teclas de caracteres padrão, nada no teclado é funcional. Não há mouse ou outro meio de entrada.
De alguma forma, você sabe que a única maneira de consertar as coisas é escrever um programa que produza Dear Computer, please stop giving me shift!
stdout. Felizmente, seu IDE está aberto e você é capaz de executar um programa, mas é claro que, ao digitar, você não saberá quais caracteres serão alterados.
Que sequência de pressionamentos de teclas você usaria para escrever um programa com a melhor chance possível de trabalhar na primeira tentativa?
Detalhes
Você está usando um teclado QWERTY padrão ; portanto, você pode pressionar 50 teclas de caracteres.
Versões não deslocadas (apenas 47):
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Versões deslocadas (apenas 47):
~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
Os últimos 3 teclas são Enter, Tabe Space, que são os mesmos mudou e unshifted.
Uma sequência de N desses caracteres possui 2 N - (contagem de caracteres de espaço em branco), como poderia ter sido impressa se você os tivesse digitado com o teclado defeituoso. Por exemplo, a digitação A Space mpode ter gerado
a m
ou A m
ou a M
ou A M
.
Escreva esses caracteres em um programa e observe todas as suas combinações possíveis de 2 N - (contagem de caracteres em espaço em branco) . Quanto mais combinações produzir, Dear Computer, please stop giving me shift!
melhor. Sua pontuação é o número de combinações de trabalho (programas válidos) dividido pelo número total de combinações. A pontuação mais alta vence.
Notas
- Para programas válidos, imprimir com precisão
Dear Computer, please stop giving me shift!
e mais nada a destacar deve ser o único efeito colateral. - Programas válidos não devem receber entrada.
- Programas inválidos podem fazer qualquer coisa.
- Comentários podem ser usados em qualquer lugar.
- As respostas em espaço em branco não podem vencer porque obter uma pontuação de 100% é (relativamente) trivial. Você ainda pode enviar uma solução de espaço em branco por diversão.
- Seu programa deve ter no máximo 1024 caracteres.
Atualização: alterado Stop giving me shift!
para Dear Computer, please stop giving me shift!
permitir respostas mais complexas. As respostas existentes podem permanecer como estão, se desejado.
fonte
Respostas:
Applescript, 2 0 (100%)
Acredito que posso reivindicar uma pontuação perfeita aqui:
myFunc
é definido, então o IDE irá converter automaticamenteMYFUNC
,myfunc
,MyFuNc
, etc referências amyFunc
Aqui está é:
Graças à ajuda de @kernigh e @paradigmsort, agora são 1020 bytes, chegando apenas abaixo do limite de 1024 bytes!
Explicação:
string id <n>
, que retorna o caractere correspondente ao valor asciin
n
deve ser gerado por meios mais fundamentais. Especificamente, geramos cadan
um contando uma lista e adicionando outro item a essa lista. Orepeat with q in system info
que nos permite fazer isso 16 vezes, comosystem info
sempre retorna uma lista de 16 itens.text
e impressa.Saída:
Usando o
osascript
intérprete, mas o Editor de Maçãs funciona da mesma maneira:fonte
end name
. Como é, devo usarsed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -c
para contar. Além disso, você pode descer de 1044 para 1037 alterandocount of a
paracount a
e excluindolog
delog f as text
. Eu testo com um sistema OS X 10.4 antigo, em que olog
comando tem resultado vazio;osascript
apenas imprime o resultado, não o log de eventos, portanto, não recebo saída a menos que exclualog
.# Interpret all upper case: $ tr A-Z a-z
- Os argumentos estão ao contrário, certo?PHP, 2 ^ -12
PHP sendo PHP, capitalização de
echo
,ucwords
estrtolower
não importam. As chamadasucwords
estrtolower
garantem que o caso das cadeias não altere a saída.Portanto, os únicos caracteres que não podem ser alterados são
((,)).(!);
(10 caracteres).Cada par de citações também tem uma probabilidade de 50% de ser válida (
''
e""
são válidos, mas'"
e"'
não são), por conseguinte, cada adição de uma outra potência de dois.fonte
ucwords
maiúscula a primeira letra de cada palavra''
ou""
, assim como os parênteses de fechamento, portanto, embora você ainda tenha 50% de chance(
, isso)
deve ser automático.strtolower("Dear Computer, '"0)
...<?
no início do programa?Nota: na verdade, são 3 respostas em uma. Eu não vi o ponto de dividi-lo em várias respostas quando elas são traduções literais uma da outra. Se eles devem ser divididos, me avise e eu cuidarei disso.
Depois de reler as especificações, percebo que isso é realmente inválido. Cada resposta tem mais de 4000 caracteres. Mas vou deixar isso aqui de qualquer maneira, por causa do método diferente.
Python 2, 2 ** - 41
Apenas para fornecer um estilo diferente de solução. Ele codifica o valor ascii de cada caractere em guias, divididas em espaços. O número de guias é o número do valor ascii.
Esta é uma solução idêntica em
Pitão, 2 ** - 11
Outra solução idêntica - exceto espaços substituídos por novas linhas - em
Golfscript, 2 ** - 8
fonte
CJam,
2 -72 -12 oportunidadeTem uma idéia semelhante à primeira resposta de Quincunx , mas em CJam.
fonte
K
vez deC
?Espaço em branco (645 bytes, probabilidade 2 ^ 0)
Como este programa usa apenas guias, espaços e novas linhas (que não são afetadas pela mudança), ele fornece uma taxa de sucesso de 100%.
Execução do programa
fonte
CJam, chance de 2 a 9 , 739 bytes
base64:
Baseado na idéia da resposta do Optimizer e Quincunx.
fonte
Possibilidade de Python 2, 2-20
print
,S
,+
,!
, E.lower()
todos devem ser a versão correta; isso é 18 caracteres. As duas aspas para as strings também devem estar alinhadas, o que gera mais duas potências de duas.Para qualquer um dos
top giving me shift
, se for convertida para a versão maiúscula, a converteremos em minúsculas e funcionará corretamente.Infelizmente, não posso usar o bacana de Python
capitalize()
, porque isso requer mais um caractere.fonte
VisualBasic.net 2 ^ -18
Caracteres críticos:. ("DearC" + ",!". ())
Testado no LINQPad, Idioma = "Programa VB"
fonte
>
vez de.
mudarConsole.Write(string)
paraWrite(string)
e trocar(string).ToLower()
porLCase(string)
.Pitão, 2 ** - 15
Parece que não consigo encontrar a versão do Pyth
lower()
, então vou emprestar do Python. Os caracteres que não podem ser permutadas e são+"S"$
,!
, e.lower()
, para um total de 14 caracteres. As aspas após o$
devem corresponder, adicionando outra potência de 2.fonte
lower()
- não estava se acostumando o suficiente. Eu provavelmente deveria adicioná-lo de volta.Rant, 2 -21
Uma série de metapadrões e
caps
chamadas força a formatação adequada. Os nomes e argumentos das funções não diferenciam maiúsculas de minúsculas.Versão online
fonte
CJam, chance de 2 -13
Conforme a sequência atualizada ( 696 bytes).
Só
""N/:,2/Kfb:c
estão em risco agora.Experimente online aqui e, como esse editor de texto está consumindo todos os espaços, aqui está a essência do código correto.
fonte
VB.NET,
2 ^ -122 ^ -112 -12
2 -11
fonte
Pensei na minha resposta antes de chegar aos '50 caracteres, incluindo apenas a regra Enter, Tab, Space '. Então o meu não é válido.
Parece ter linguagens de programação que não diferenciam maiúsculas de minúsculas é a chave aqui. Como alternativa, se você pudesse usar um teclado QWERTY padrão Real (incluindo Caps Lock, o outro Shift, Backspace e o Numpad Period), haveria apenas 2 chances de 50% necessárias, o que resultaria em apenas 2 pressionamentos de tecla adicionais por falha. Minha resposta inválida para um aplicativo de console C # apontando as teclas pressionadas:
76 prensas mínimas com apenas 2 chances necessárias de 50%
fonte
Excel, 2-11
Caso
PROPER
eLOWER
não importa. É necessário inserir uma fórmula começando com+
inserções automáticas=
. Assim, apenas(
,"
,,
,)
,&
,!
pode quebrar.fonte