Quelque chose ne va pas avec votre clavier. La Shiftclé a son propre esprit. Chaque fois que vous tapez un caractère, vous ne savez pas s'il sortira décalé ou non (bien que ce soit 50-50). Outre les touches de caractères standard, rien sur le clavier n'est fonctionnel. Il n'y a pas de souris ou d'autres moyens de saisie.
D'une manière ou d'une autre, vous savez que le seul moyen de remédier à la situation est d'écrire un programme qui Dear Computer, please stop giving me shift!
génère des sorties vers stdout. Heureusement, votre IDE est ouvert et vous êtes capable de lancer un programme, mais vous ne saurez évidemment pas quels caractères seront déplacés.
Quelle séquence d'appuis au clavier utiliseriez-vous pour écrire un programme qui a la meilleure chance possible de travailler du premier coup?
Détails
Vous utilisez un clavier QWERTY standard . Vous pouvez donc appuyer sur une touche de 50 caractères.
Versions non modifiées (47 uniquement):
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Versions décalées (47 uniquement):
~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
Les 3 dernières touches sont Enter, Tabet Space, qui sont les mêmes décalées et non décalées.
Une séquence de N de ces caractères a 2 N - (nombre de caractères d’espacement des blancs) ainsi qu’elle aurait été sortie si vous les aviez tapés avec votre clavier défectueux. Par exemple, taper A Space mpeut avoir cédé
a m
ou A m
ou a M
ou A M
.
Écrivez un programme pour ces caractères et examinez toutes ses combinaisons de décalage possibles de 2 N - (nombre d'espaces) . Plus il y a de combinaisons, Dear Computer, please stop giving me shift!
mieux c'est. Votre score est le nombre de combinaisons de travail (programmes valides) divisé par le nombre total de combinaisons. Le score le plus élevé gagne.
Remarques
- Pour les programmes valides, imprimer avec précision
Dear Computer, please stop giving me shift!
et rien d’autre sur stdout ne devrait être le seul effet secondaire. - Les programmes valides ne doivent pas prendre d’entrée.
- Les programmes non valides peuvent faire quoi que ce soit.
- Les commentaires peuvent être utilisés n'importe où.
- Les réponses en blanc ne peuvent pas gagner, car obtenir un score de 100% est (relativement) trivial. Vous pouvez toujours soumettre une solution Whitespace pour vous amuser.
- Votre programme doit comporter au plus 1024 caractères.
Mise à jour: modifié Stop giving me shift!
pour Dear Computer, please stop giving me shift!
permettre des réponses plus complexes. Les réponses existantes peuvent rester telles quelles, si vous le souhaitez.
la source
Réponses:
Applescript, 2 0 (100%)
Je crois pouvoir revendiquer un score parfait ici:
myFunc
est défini, l'IDE convertira automatiquementMYFUNC
,myfunc
,MyFuNc
, références etc àmyFunc
Voici est:
Grâce à l'aide de @kernigh et @paradigmsort, cela fait maintenant 1020 octets, juste sous la limite de 1024 octets!
Explication:
string id <n>
, qui retourne le caractère correspondant à la valeur asciin
n
doit être généré par des moyens plus fondamentaux. Plus précisément, nous générons chacunn
en comptant une liste, puis en ajoutant un autre élément à cette liste. Lerepeat with q in system info
nous permet de le faire 16 fois, commesystem info
retourne toujours une liste de 16 items.text
et imprimée.Sortie:
Utiliser l'
osascript
interprète, mais l'éditeur Applescript fonctionne aussi bien:la source
end name
. Telsed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -c
quel , je dois utiliser pour le compter. Aussi, vous pouvez descendre 1044-1037 en changeantcount of a
àcount a
, et la suppressionlog
delog f as text
. Je teste avec un ancien système OS X 10.4, où lalog
commande a un résultat vide;osascript
imprime seulement le résultat, pas le journal des événements, donc je n’obtiens pas de sortie sauf si je l’effacelog
.# Interpret all upper case: $ tr A-Z a-z
- Les arguments sont à l'envers, non?PHP, 2 ^ -12
PHP étant PHP, la capitalisation des
echo
,ucwords
etstrtolower
ne comptent pas. Les appels àucwords
etstrtolower
s'assurent que la casse des chaînes ne changera pas la sortie.Par conséquent, les seuls caractères qui ne peuvent pas être modifiés sont
((,)).(!);
(10 caractères).Chaque paire de citations a également une chance de 50% d'être valide (
''
et""
sont valides, mais'"
et"'
ne sont pas), donc chacun ajoutant une autre puissance de deux.la source
ucwords
majuscule la première lettre de chaque mot''
ou""
, ainsi que les parenthèses de fermeture, donc si vous avez encore une chance de 50% pour(
le)
devrait être automatique.strtolower("Dear Computer, '"0)
...<?
au début du programme?Note: Ceci est en fait 3 réponses en une. Je ne voyais pas l'intérêt de le scinder en plusieurs réponses lorsqu'elles sont de telles traductions littérales. Si elles doivent être divisées, faites-le-moi savoir et je m'occuperai de cela.
Après avoir relu les spécifications, je me rends compte que cela n’est pas valide. Chaque réponse contient plus de 4000 caractères. Mais je vais laisser ça ici de toute façon, à cause de la méthode différente.
Python 2, 2 ** - 41
Juste pour fournir un style différent de solution. Il code la valeur ascii de chaque caractère dans des tabulations, séparées par des espaces. Le nombre d'onglets est le nombre correspondant à la valeur ascii.
C'est une solution identique dans
Pyth, 2 ** - 11
Une autre solution identique - à l’exception des espaces remplacés par des nouvelles lignes - en
Golfscript, 2 ** - 8
la source
CJam,
2 -72 -12 chanceIl a une idée similaire à celle de la première réponse de Quincunx , mais dans CJam.
la source
K
au lieu deC
?Espace blanc (645 octets, probabilité 2 ^ 0)
Comme ce programme utilise uniquement des tabulations, des espaces et des nouvelles lignes (qui ne sont pas affectées par le décalage), il donne un taux de réussite de 100%.
Programme exécuté
la source
CJam, 2 -9 chance, 739 octets
base64:
Basé sur l'idée de l'optimiseur et de la réponse de Quincunx.
la source
Python 2, 2 -20 chance
print
,S
,+
,!
Et.lower()
doivent tous être la version correcte; c'est 18 caractères. Les deux guillemets pour les chaînes doivent également s'aligner, ce qui donne deux pouvoirs supplémentaires de deux.Dans tous les
top giving me shift
cas, si elle est convertie en version capitale, nous la convertissons en minuscules et cela fonctionne correctement.Malheureusement, je ne peux pas utiliser l'astuce de Python
capitalize()
, car cela prend un caractère de plus.la source
VisualBasic.net 2 ^ -18
Caractères critiques:. ("DearC" + ",!". ())
Testé dans LINQPad, Language = "Programme VB"
la source
>
lieu de.
en changeantConsole.Write(string)
deWrite(string)
et échange(string).ToLower()
pourLCase(string)
.Pyth, 2 ** - 15
Je n'arrive pas à trouver la version de Pyth
lower()
, je vais donc emprunter à Python. Les caractères qui ne peuvent pas être échangés sont+"S"$
,!
et.lower()
, pour un total de 14 caractères. Les guillemets après le$
match doivent correspondre, en ajoutant une autre puissance de 2.la source
lower()
- il ne s'usait pas assez. Je devrais probablement le rajouter.Rant, 2 -21
Une série de métapatternes et d'
caps
appels force le formatage correct. Les noms de fonction et les arguments ne sont pas sensibles à la casse.Version en ligne
la source
CJam, 2 -13 chance
Selon la chaîne mise à jour ( 696 octets).
Seuls
""N/:,2/Kfb:c
sont à risque en ce moment.Essayez-le en ligne ici et comme cet éditeur de texte dévore de tous les espaces, voici l' essentiel avec le code correct.
la source
VB.NET,
2 ^ -122 ^ -112 -12
2 -11
la source
Je réfléchissais à ma réponse avant d’arriver aux 50 caractères, y compris uniquement la règle Entrée, Tabulation, Espace. Donc le mien n'est pas valide.
Semble avoir des langages de programmation insensibles à la casse est la clé ici. Alternativement, si vous pouviez utiliser un clavier QWERTY standard réel (y compris le verrouillage des majuscules, l’autre décalage, la touche de retour arrière et la période du pavé numérique), il n’y aurait que 2 chances nécessaires à 50%, ce qui entraînerait seulement 2 appuis de touche supplémentaires par échec. Ma réponse non valide pour une application console C # indiquant les touches utilisées:
76 presses minimum avec seulement 2 nécessaires 50% de chances
la source
Excel, 2 -11
Cas de
PROPER
etLOWER
n'a pas d'importance. La saisie d'une formule commençant par+
des insertions automatiques est requise=
. Alors seulement(
,"
,,
,)
,&
,!
peut briser.la source