Programmation avec une touche de décalage sporadique


39

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


2
+1, c'est un grand défi, mais j'aurais aimé que vous nous donniez une chaîne de sortie plus longue. J'ai pensé à plusieurs astuces astucieuses, mais toutes nécessitent plus de 18 caractères dans toutes les langues que je connais.
Nathaniel

2
@ Calvin'sHobbies mais ... qu'en est-il des réponses actuelles?
John Dvorak

1
@ Calvin'sHobbies Ce n'est pas! Et la limitation de 1024 empêche cela aussi très bien. Compte tenu de tout cela, je vote pour que cela se termine car il est difficile de savoir ce que vous demandez. S'il vous plaît ne changez pas la spécification qui désavantage la plupart des réponses
Optimiseur

1
@ Calvin'sHobbies Dommage, il y a la limite de 1024 caractères. Je vais devoir repenser ma réponse ...
Justin

1
@Optimizer Au moins, ils ne gagneront pas.
Jimmy23013

Réponses:


46

Applescript, 2 0 (100%)

Je crois pouvoir revendiquer un score parfait ici:

  • L’éditeur Applescript (mon IDE) convertit automatiquement tous les mots-clés en minuscules lors de la compilation / exécution
  • En outre, défini les noms de variables et gestionnaire sont insensibles à la casse - Par exemple , si un gestionnaire myFuncest défini, l'IDE convertira automatiquement MYFUNC, myfunc, MyFuNc, références etc àmyFunc
  • Je n'ai utilisé que des caractères alphabétiques, des espaces et des nouvelles lignes. Je n'ai donc pas à m'inquiéter des chiffres décalés et des caractères de ponctuation.

Voici 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

Grâce à l'aide de @kernigh et @paradigmsort, cela fait maintenant 1020 octets, juste sous la limite de 1024 octets!

Explication:

  • Les caractères de la chaîne de sortie sont générés à l'aide de string id <n>, qui retourne le caractère correspondant à la valeur asciin
  • Parce que nous évitons les chiffres, chacun ndoit être généré par des moyens plus fondamentaux. Plus précisément, nous générons chacun nen comptant une liste, puis en ajoutant un autre élément à cette liste. Le repeat with q in system infonous permet de le faire 16 fois, comme system inforetourne toujours une liste de 16 items.
  • En utilisant une technique similaire, nous ajoutons chaque caractère de la chaîne finale à une liste.
  • Enfin, cette dernière liste est contrainte textet imprimée.

Sortie:

Utiliser l' osascriptinterprète, mais l'éditeur Applescript fonctionne aussi bien:

$ # 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!
$ 

2
Très cool! J'espère que vous pourrez l'obtenir à 1024. Ça vous dit d'expliquer un peu le code?
Les passe-temps de Calvin

2
@ Calvin'sHobbies Applescript est censé être l'un des langages les plus lisibles - vous ne comprenez vraiment pas cela? ;-) Je vais essayer d'ajouter une explication dans un instant ...
Digital Trauma

2
S'il vous plaît poster la version golfée, sans indentation et sans nom end name. Tel sed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -cquel , je dois utiliser pour le compter. Aussi, vous pouvez descendre 1044-1037 en changeant count of aà count a, et la suppression logde log f as text. Je teste avec un ancien système OS X 10.4, où la logcommande a un résultat vide; osascriptimprime seulement le résultat, pas le journal des événements, donc je n’obtiens pas de sortie sauf si je l’efface log.
Kernigh

3
Changer c pour appeler j deux fois au lieu de trois fois et mettre à jour les sites d’appel selon les besoins enregistre 7 caractères et vous permet de ne pas dépasser la limite.
paradigmsort

3
# Interpret all upper case: $ tr A-Z a-z- Les arguments sont à l'envers, non?
Izkata

16

PHP, 2 ^ -12

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

PHP étant PHP, la capitalisation des echo, ucwordset strtolowerne comptent pas. Les appels à ucwordset strtolowers'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.


2
@ edc65 ucwordsmajuscule la première lettre de chaque mot
es1024

1
un bon IDE ajoutera les guillemets fermants corrects pour vous (vous ne finissent jamais avec ''ou "", ainsi que les parenthèses de fermeture, donc si vous avez encore une chance de 50% pour (le )devrait être automatique.
WOUNDEDStevenJones

shoot, vous ne pouvez utiliser aucune sorte de touches de navigation (flèches). Ainsi, même si votre IDE s'auto-complétait correctement, vous devrez taper à nouveau le même caractère, sinon il insérera le nouveau (mauvais), comme ceci: strtolower("Dear Computer, '"0)...
WOUNDEDStevenJones

1
@WOUNDEDStevenJones Je pense que compter sur les fonctionnalités de l'EDI serait considéré comme une fraude.
Ingo Bürk

1
Qu'en est-il <?au début du programme?
Michael Mior

5

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

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

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

j""mCldc"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "d

Une autre solution identique - à l’exception des espaces remplacés par des nouvelles lignes - en

Golfscript, 2 ** - 8

'                                                                                                                                                                                                                                                                               









































                                                                                                                                    'n/{,}%+

Peut-être que l'encodage en binaire fonctionnerait pour GolfScript. TAB comme 1, ESPACE comme 0, ou vice versa.
Justin

3
Je ne suis pas le seul à avoir vu la plupart des réponses de GolfScript sous forme d'espaces, n'est-ce pas?
Pharap

1
@Pharap C'est le truc. C'est tout un tas d'onglets séparés par des nouvelles lignes. Si vous allez tout en bas et faites défiler vers la droite, vous verrez où la chaîne se termine et fait la magie pour la convertir en ascii.
Justin


4

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é


1
Mais notez que ceci est hors compétition conformément aux règles.
Ingo Bürk

3

CJam, 2 -9 chance, 739 octets

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

base64:

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

Basé sur l'idée de l'optimiseur et de la réponse de Quincunx.


3

Python 2, 2 -20 chance

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

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 shiftcas, 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.


Si cela peut aider, la phrase est maintenant plus longue (mais n'est pas mise en majuscule normalement).
Hobbies de Calvin

@ Calvin'sHobbies, j'ai vu ça. Ça n'aide pas; cela nuit.
Justin

2

VisualBasic.net 2 ^ -18

Caractères critiques:. ("DearC" + ",!". ())

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

Testé dans LINQPad, Language = "Programme VB"


Je pense que Visual Studio corrige automatiquement le boîtier pour vous.
Pharap

@Pharap mais le casse en dehors des guillemets n'est pas le problème ... VS ne corrigerait pas un '(' déplacé à '9'
edc65

1
Dans ce cas, quelque chose de plus utile: on peut se débarrasser du cas potentiel d'obtenir au >lieu de .en changeant Console.Write(string)de Write(string)et échange (string).ToLower()pour LCase(string).
Pharap

1

Pyth, 2 ** - 15

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

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.


Pyth n'a pas lower()- il ne s'usait pas assez. Je devrais probablement le rajouter.
isaacg

1

Rant, 2 -21

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

Une série de métapatternes et d' capsappels force le formatage correct. Les noms de fonction et les arguments ne sont pas sensibles à la casse.

Version en ligne


1

CJam, 2 -13 chance

Selon la chaîne mise à jour ( 696 octets).

"   




















































































             "N/:,2/Kfb:c

Seuls ""N/:,2/Kfb:csont à 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.


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

0

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:

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 presses minimum avec seulement 2 nécessaires 50% de chances


0

Excel, 2 -11

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

Cas de PROPERet LOWERn'a pas d'importance. La saisie d'une formule commençant par +des insertions automatiques est requise =. Alors seulement (, ", ,, ), &, !peut briser.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.