Programando com uma tecla Shift esporádica

39

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 mou A mou a Mou 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.

Passatempos de Calvin
fonte
2
+1, é um grande desafio, mas eu gostaria que você nos desse uma string de saída mais longa. Pensei em vários truques inteligentes, mas todos eles têm mais de 18 caracteres em todos os idiomas que conheço.
Nathaniel
2
@ Calvin'sHobbies, mas ... e as respostas atuais?
John Dvorak
1
@ Calvin'sHobbies Não é! E a limitação de 1024 evita isso muito bem também. dado tudo isso, estou votando para que isso seja encerrado, pois não está claro o que você está pedindo. Por favor, não altere as especificações, o que prejudica a maioria das respostas
Otimizador
1
@ Calvin'sHobbies Pena que existe o limite de 1024 caracteres. Vou necessidade de repensar a minha resposta ...
Justin
1
@ Otimizador Pelo menos eles não vão ganhar.
jimmy23013

Respostas:

46

Applescript, 2 0 (100%)

Acredito que posso reivindicar uma pontuação perfeita aqui:

  • O Editor de Maçãs (meu IDE) converte automaticamente todas as palavras-chave em minúsculas ao compilar / executar
  • Além disso, nomes de variáveis e manipulador definidos são maiúsculas e minúsculas - Por exemplo, se um manipulador myFuncé definido, então o IDE irá converter automaticamente MYFUNC, myfunc, MyFuNc, etc referências amyFunc
  • Eu usei apenas caracteres alfabéticos, espaços e novas linhas, portanto, não preciso me preocupar com números alterados e caracteres de pontuação.

Aqui está é:

global f
on j at a
set end of a to j
end
on c at a
j at a
j at a
end
on k at a
repeat with q in system info
j at a
end
end
on w at a
set d to count a
j at a
return string id d
end
on z at a
set end of f to a
end
set h to space
set y to h as list
k at y
k at y
set x to w at y
c at y
c at y
c at y
c at y
c at y
set q to w at y
k at y
c at y
c at y
copy y to b
c at y
set s to w at y
set d to w at y
set f to d as list
k at b
k at b
set a to w at b
c at b
j at b
set e to w at b
set y to w at b
set g to w at b
set d to w at b
set i to w at b
c at b
set l to w at b
set m to w at b
set n to w at b
set o to w at b
set p to w at b
j at b
set r to w at b
z at e
z at a
z at r
z at h
z at s
set s to w at b
set t to w at b
set u to w at b
set v to w at b
z at o
z at m
z at p
z at u
z at t
z at e
z at r
z at q
z at h
z at p
z at l
z at e
z at a
z at s
z at e
z at h
z at s
z at t
z at o
z at p
z at h
z at g
z at i
z at v
z at i
z at n
z at g
z at h
z at m
z at e
z at h
z at s
z at d
z at i
z at y
z at t
z at x
f as text

Graças à ajuda de @kernigh e @paradigmsort, agora são 1020 bytes, chegando apenas abaixo do limite de 1024 bytes!

Explicação:

  • Os caracteres para a sequência de saída são gerados usando string id <n>, que retorna o caractere correspondente ao valor asciin
  • Como estamos evitando dígitos, cada um deles ndeve ser gerado por meios mais fundamentais. Especificamente, geramos cada num contando uma lista e adicionando outro item a essa lista. O repeat with q in system infoque nos permite fazer isso 16 vezes, como system infosempre retorna uma lista de 16 itens.
  • Usando uma técnica semelhante, adicionamos cada caractere da sequência final a uma lista.
  • Finalmente, essa última lista é coagida texte impressa.

Saída:

Usando o osascriptintérprete, mas o Editor de Maçãs funciona da mesma maneira:

$ # Interpret as-is:
$ osascript dearcase.scpt
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all lower case:
$ tr A-Z a-z < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$ 
$ # Interpret all upper case:
$ tr a-z A-Z < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$
$ # Interpret random case for each letter:
$ while read; do for ((i=0;i<${#REPLY};i++)); do c="${REPLY:i:1}"; if ((RANDOM%2)); then printf "%s" "$(tr a-z A-Z <<< "$c")"; else printf "%s" "$(tr A-Z a-z <<< "$c")"; fi; done; echo; done < dearcase.scpt | osascript
Dear Computer, please stop giving me shift!
$ 
Trauma Digital
fonte
2
Muito muito legal! Espero que você consiga chegar a 1024. Importa-se de explicar um pouco o código?
Hobbies de Calvin
2
@ Calvin'sHobbies O Applescript é uma das linguagens mais legíveis - você realmente não entende isso? ;-) Vou tentar adicionar uma explicação daqui a pouco ...
Digital Trauma
2
Poste a versão em golf, sem recuo e sem nome end name. Como é, devo usar sed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -cpara contar. Além disso, você pode descer de 1044 para 1037 alterando count of apara count ae excluindo logde log f as text. Eu testo com um sistema OS X 10.4 antigo, em que o logcomando tem resultado vazio; osascriptapenas imprime o resultado, não o log de eventos, portanto, não recebo saída a menos que exclua log.
kernigh
3
Alterar c para chamar j duas vezes em vez de três e atualizar os sites de chamada conforme necessário salva 7 caracteres e você fica abaixo do limite.
Paradigmsort
3
# Interpret all upper case: $ tr A-Z a-z - Os argumentos estão ao contrário, certo?
Izkata
16

PHP, 2 ^ -12

echo ucwords(strtolower('Dear Computer, ')).strtolower('please stop giving me shift!');

PHP sendo PHP, capitalização de echo, ucwordse strtolowernão importam. As chamadas ucwordse strtolowergarantem 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.

es1024
fonte
2
@ edc65 coloca em ucwordsmaiúscula a primeira letra de cada palavra
es1024
1
um bom IDE adicionará as aspas de fechamento corretas para você (você só terminará com ''ou "", assim como os parênteses de fechamento, portanto, embora você ainda tenha 50% de chance (, isso )deve ser automático.
WOUNDEDStevenJones
atirar, você não pode usar nenhum tipo de tecla de navegação (setas); mesmo que o seu IDE tenha sido preenchido corretamente corretamente, você precisará digitar o mesmo caractere novamente, caso contrário ele inserirá o novo (incorreto), assim: strtolower("Dear Computer, '"0)...
WOUNDEDStevenJones
1
@WOUNDEDStevenJones Eu acredito que confiar nos recursos do IDE seria considerado trapaça.
Ingo Bürk
1
E <?no início do programa?
Michael Mior
5

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

print''.join(map(chr,map(len,'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              '.split(' '))))

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

j""mCldc"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "d

Outra solução idêntica - exceto espaços substituídos por novas linhas - em

Golfscript, 2 ** - 8

'                                                                                                                                                                                                                                                                               









































                                                                                                                                    'n/{,}%+
Justin
fonte
Talvez a codificação em binário funcione para o GolfScript. TAB como 1, ESPAÇO como 0 ou vice-versa.
Justin
3
Não sou o único que vê a maior parte da resposta do GolfScript como espaço em branco, sou?
Pharap
1
@ Sharap Esse é o truque. É um monte de guias separadas por novas linhas. Se você descer e rolar para a direita, verá onde a string termina e faz a mágica para convertê-la em ascii.
Justin
4

CJam, 2 -7 2 -12 oportunidade

'D"ear Komputer, please stop giving me shift!"el4'Ct

Tem uma idéia semelhante à primeira resposta de Quincunx , mas em CJam.

jimmy23013
fonte
Isso é intencionalmente um em Kvez de C?
Paŭlo Ebermann
@ PaŭloEbermann Esse personagem é independente. Também pode ser um espaço ou outra coisa.
jimmy23013
4

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

Frxstrem
fonte
1
Mas observe que isso está fora da competição de acordo com as regras.
Ingo Bürk
3

CJam, chance de 2 a 9 , 739 bytes

"                         
(lines of space characters)
                                        "N/2fb:c

base64:

IiAJICAgIAkgCQkgICAJICAKICAgCSAJCSAgIAkJCQkgCQoJCQkJIAkgIAkJIAkJICAJCiAJICAg
IAkgCQkgICAgCSAKICAgCSAJCSAgCSAgICAgIAogCQkJCSAJICAJCSAJIAkJCgkJCSAJICAJCSAJ
CSAJCQkKIAkgCQkgIAkgICAgIAkgCQoJIAkJICAJICAgIAkgICAgCgkgIAkJIAkJCQkgIAkJIAkK
CQkgCSAgCQkgCQkJIAkgIAogICAJIAkJICAgCQkJCSAJCiAJICAgIAkgCQkgICAgCSAKIAkJCQkg
CSAgCQkgCQkgIAogICAJIAkJICAJICAgICAgCgkgCQkgIAkgICAgCSAgICAKCSAgCSAgICAJIAkg
CQkgIAogICAJIAkJICAgCQkJCSAJCgkJCQkgCSAgCQkgCQkgIAkKICAgIAkgCQkgICAJCSAJCQog
ICAJIAkJICAgCQkJCSAJCiAgIAkgCQkgIAkgICAgICAKICAgIAkgCQkgICAJCSAJCQoJCSAJICAJ
CSAJCQkgCSAgCgkJCSAJICAJCSAJCSAJCQkKCSAJCSAgCSAgICAJICAgIAogICAJIAkJICAJICAg
ICAgCgkgCSAgCQkgCQkJIAkJCQkKICAJCSAJCQkJIAkgICAgCQogCQkgIAkgICAgCSAgCQkgCiAg
CQkgCQkJCSAJICAgIAkKICAJICAgIAkgCSAJCQkJIAoJIAkgIAkJIAkJCSAJCQkJCiAgIAkgCQkg
IAkgICAgICAKIAkgCQkgIAkgICAgIAkgCQogICAJIAkJICAgCQkJCSAJCiAgIAkgCQkgIAkgICAg
ICAKICAgIAkgCQkgICAJCSAJCQogCQkgCQkJCSAJICAJICAgCiAgCQkgCQkJCSAJICAgIAkKCQkg
CQkJCSAJICAJIAkJIAoJCSAJICAJCSAJCQkgCSAgCgkJIAkJCQkgCSAgCQkgIAkiTi8yZmI6Yw==

Baseado na idéia da resposta do Optimizer e Quincunx.

jimmy23013
fonte
3

Possibilidade de Python 2, 2-20

print'S'+'top giving me shift!'.lower()

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.

Justin
fonte
Se ajudar, a frase agora é mais longa (mas não em maiúscula normalmente).
Hobbies de Calvin
@ Calvin'sHobbies Eu vi isso. Isso não ajuda; isso prejudica.
Justin
2

VisualBasic.net 2 ^ -18

Caracteres críticos:. ("DearC" + ",!". ())

Sub Main
  console.write("Dear C"+"omputer, please stop giving me shift!".tolower())
End Sub

Testado no LINQPad, Idioma = "Programa VB"

edc65
fonte
Eu acho que o visual studio corrige automaticamente a caixa para você.
Pharap
@Pharap, mas as aspas externas da caixa não são o problema ... O VS não corrigia um '(' mudou para '9' '
edc65
1
Nesse caso, algo mais útil: você pode se livrar do caso potencial de obter em >vez de .mudar Console.Write(string)para Write(string)e trocar (string).ToLower()por LCase(string).
Pharap
1

Pitão, 2 ** - 15

+"S"$"top giving me shift!".lower()

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.

Justin
fonte
Pyth não tem um lower()- não estava se acostumando o suficiente. Eu provavelmente deveria adicioná-lo de volta.
isaacg
1

Rant, 2 -21

[caps:first][?[caps:word][?[caps:lower]Dear Computer][caps:lower], please stop giving me shift!]

Uma série de metapadrões e capschamadas força a formatação adequada. Os nomes e argumentos das funções não diferenciam maiúsculas de minúsculas.

Versão online

Berkin
fonte
1

CJam, chance de 2 -13

Conforme a sequência atualizada ( 696 bytes).

"   




















































































             "N/:,2/Kfb:c

""N/:,2/Kfb:cestã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.

Optimizer
fonte
1

VB.NET, 2 ^ -12 2 ^ -11

2 -12

Module All
  Sub Main 
    Console.WriteLine StrConv("Dear Computer, ", vbTuesday) & "please stop giving me shift!".ToLower
  End Sub
End Module

2 -11

Imports System.Console

Module All
  Sub Main 
    Write StrConv("Dear Computer, ", vbTuesday)
    WriteLine "please stop giving me shift!".ToLower
  End Sub
End Module
Qwertiy
fonte
0

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:

HoldShift(C CpsLockOn onsole)

NumPadPeriod

HoldShift(
CpsLockOff W CpsLockOn rite(" 
CpsLockOff D CpsLockOn ear space
CpsLockOff C CpsLockOn omputer
)

, (repeat with Backspace until correct)

HoldShift( please stop giving me shift!"))

; (repeat with Backspace until correct)

76 prensas mínimas com apenas 2 chances necessárias de 50%

Mike
fonte
0

Excel, 2-11

=PROPER("Dear Computer, ")&LOWER("please stop giving me shift!")

Caso PROPERe LOWERnão importa. É necessário inserir uma fórmula começando com +inserções automáticas =. Assim, apenas (, ", ,, ), &, !pode quebrar.

Wernisch
fonte