Mit Ihrer Tastatur stimmt etwas nicht. Der ShiftSchlüssel hat einen eigenen Verstand. Jedes Mal, wenn Sie ein Zeichen eingeben, haben Sie keine Ahnung, ob es verschoben herauskommt oder nicht (obwohl es 50-50 ist). Außer den Standardzeichentasten ist nichts auf der Tastatur funktionsfähig. Es gibt keine Maus oder andere Eingabemöglichkeiten.
Irgendwie wissen Sie, dass die einzige Möglichkeit zur Fehlerbehebung darin besteht, ein Programm zu schreiben, das die Ausgabe Dear Computer, please stop giving me shift!
an stdout vornimmt. Glücklicherweise ist Ihre IDE geöffnet und Sie können ein Programm ausführen, aber während Sie es eingeben, wissen Sie natürlich nicht, welche Zeichen verschoben werden.
Mit welcher Tastendrucksequenz würden Sie ein Programm schreiben, das die bestmögliche Chance hat, beim ersten Versuch zu arbeiten?
Einzelheiten
Sie verwenden eine Standard-QWERTZ-Tastatur. Sie können also 50 Zeichentasten drücken.
Unverschobene Versionen (nur 47):
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Verschobene Versionen (nur 47):
~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
Die letzten 3 Tasten sind Enter, Tabund Space, die gleich verschoben und nicht verschoben sind.
Eine Folge von N dieses Zeichens hat 2 N - (Leerzeichen char count) Möglichkeiten , es ausgegeben haben könnte , wenn Sie sie mit Ihrer defekten Tastatur eingegeben hatten. Beispielsweise A Space mkönnte das
Tippen a m
oder A m
oder a M
oder ergeben haben A M
.
Schreiben Sie ein Programm mit diesen Zeichen und sehen Sie sich alle 2 N - (Leerzeichen) möglichen Verschiebungskombinationen an. Je mehr Kombinationen ausgegeben werden, desto Dear Computer, please stop giving me shift!
besser. Ihre Punktzahl ist die Anzahl der Arbeitskombinationen (gültige Programme) geteilt durch die Gesamtzahl der Kombinationen. Die höchste Punktzahl gewinnt.
Anmerkungen
- Für gültige Programme sollte das exakte Drucken
Dear Computer, please stop giving me shift!
und nichts anderes als das Ausdrucken die einzige Nebenwirkung sein. - Gültige Programme sollten keine Eingaben annehmen.
- Ungültige Programme können alles tun.
- Kommentare können überall verwendet werden.
- Whitespace- Antworten können nicht gewinnen, da es (relativ) trivial ist, eine 100% ige Punktzahl zu erhalten. Sie können dennoch eine Whitespace-Lösung zum Spaß einreichen.
- Ihr Programm darf höchstens 1024 Zeichen lang sein.
Update: Geändert Stop giving me shift!
in Dear Computer, please stop giving me shift!
, um komplexere Antworten zu ermöglichen. Bestehende Antworten können auf Wunsch so bleiben, wie sie sind.
quelle
Antworten:
Applescript, 2 0 (100%)
Ich glaube, ich kann hier ein perfektes Ergebnis erzielen:
myFunc
definiert ist, dann werden die IDE automatisch konvertierenMYFUNC
,myfunc
,MyFuNc
usw. Hinweise aufmyFunc
Hier ist:
Dank der Hilfe von @kernigh und @paradigmsort sind dies jetzt 1020 Bytes, was nur unter das Limit von 1024 Bytes hinausläuft!
Erläuterung:
string id <n>
das dem ASCII-Wert entsprechende Zeichen zurückgegeben wirdn
n
mit grundlegenderen Mitteln generiert werden. Insbesondere generieren wir jedesn
Element, indem wir eine Liste zählen und dieser Liste dann ein weiteres Element hinzufügen. Dasrepeat with q in system info
ermöglicht es uns , diese 16 - mal zu tun, wiesystem info
immer gibt eine 16-Punkt - Liste.text
und gedruckt.Ausgabe:
Verwenden des
osascript
Interpreters, aber der Applescript Editor funktioniert genauso gut:quelle
end name
. Wie es ist, muss ich verwenden, um essed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -c
zu zählen. Außerdem können Sie 1044-1037 runter , indemcount of a
aufcount a
und Löschenlog
vonlog f as text
. Ich teste mit einem alten OS X 10.4-System, bei dem derlog
Befehl ein leeres Ergebnis aufweist.osascript
druckt nur das Ergebnis, nicht das Ereignisprotokoll, sodass ich keine Ausgabe erhalte, es sei denn, ich löschelog
.# Interpret all upper case: $ tr A-Z a-z
- Die Argumente sind rückwärts, oder?PHP, 2 ^ -12
PHP ist PHP, Kapitalisierung
echo
,ucwords
und spielenstrtolower
keine Rolle. Die Aufrufe vonucwords
und stellenstrtolower
sicher, dass die Groß- und Kleinschreibung der Zeichenfolgen die Ausgabe nicht ändert.Die einzigen Zeichen, die nicht geändert werden können, sind daher
((,)).(!);
(10 Zeichen).Jedes Paar von Anführungszeichen hat auch eine Chance von 50% gültig sein (
''
und""
sind gültig, aber'"
und"'
sind nicht), also jeweils eine andere Zweierpotenz hinzufügen.quelle
ucwords
den ersten Buchstaben jedes Wortes in''
oder enden""
, und die schließenden Klammern, so dass Sie immer noch eine 50% ige Chance haben(
,)
sollten automatisch sein.strtolower("Dear Computer, '"0)
...<?
zu Beginn des Programms?Hinweis: Dies sind tatsächlich 3 Antworten in einer. Ich habe es nicht verstanden, es in mehrere Antworten aufzuteilen, wenn es sich um so wörtliche Übersetzungen handelt. Wenn sie geteilt werden sollten, lassen Sie es mich wissen und ich werde mich darum kümmern.
Nach dem erneuten Lesen der Spezifikationen stelle ich fest, dass dies tatsächlich ungültig ist. Jede Antwort ist> 4000 Zeichen lang. Aber ich lasse das hier sowieso, wegen der anderen Methode.
Python 2, 2 ** - 41
Nur um einen anderen Lösungsstil bereitzustellen. Es codiert den ASCII-Wert jedes Zeichens in Tabulatoren, die auf Leerzeichen aufgeteilt sind. Die Anzahl der Registerkarten ist die Nummer für den ASCII-Wert.
Dies ist eine identische Lösung in
Pyth, 2 ** - 11
Eine andere identische Lösung - mit Ausnahme von Leerzeichen, die durch Zeilenumbrüche ersetzt wurden - in
Golfscript, 2 ** - 8
quelle
CJam,
2 -72 -12 ChanceEs hat eine ähnliche Idee wie die erste Antwort von Quincunx , aber in CJam.
quelle
K
stattC
?Leerzeichen (645 Bytes, 2 ^ 0 Wahrscheinlichkeit)
Da dieses Programm nur Tabulatoren, Leerzeichen und Zeilenumbrüche verwendet (die alle nicht von Verschiebungen betroffen sind), ergibt sich eine Erfolgsquote von 100%.
Programmablauf
quelle
CJam, 2 -9 Chance, 739 Bytes
base64:
Basierend auf der Idee von Optimizer und der Antwort von Quincunx.
quelle
Python 2, 2 -20 Chance
print
,S
,+
,!
, Und.lower()
alle müssen die richtige Version sein; Das sind 18 Zeichen. Die beiden Anführungszeichen für die Zeichenfolgen müssen auch übereinstimmen, das macht zwei weitere Potenzen von zwei.Für alle
top giving me shift
, die in die Großbuchstabenversion konvertiert wurden, konvertieren wir sie in Kleinbuchstaben und sie funktioniert ordnungsgemäß.Leider kann ich Pythons Raffiniertheit nicht gebrauchen
capitalize()
, da dies einen weiteren Charakter erfordert .quelle
VisualBasic.net 2 ^ -18
Kritische Zeichen:. ("DearC" + ",!". ())
Getestet in LINQPad, Sprache = "VB-Programm"
quelle
>
anstatt.
durch eine ÄnderungConsole.Write(string)
anWrite(string)
und tauschen(string).ToLower()
Sie aufLCase(string)
.Pyth, 2 ** - 15
Ich kann anscheinend nicht Pyths Version von finden
lower()
, also werde ich mir Python ausleihen. Die Zeichen, die nicht vertauscht werden können+"S"$
,!
sind und.lower()
für insgesamt 14 Zeichen. Die Anführungszeichen nach dem$
müssen übereinstimmen und eine weitere Potenz von 2 hinzufügen.quelle
lower()
- es war nicht genug gewöhnt . Ich sollte es wahrscheinlich wieder hinzufügen.Rant, 2-21
Eine Reihe von Metapattern und
caps
Aufrufen erzwingen eine ordnungsgemäße Formatierung. Bei Funktionsnamen und Argumenten wird die Groß- und Kleinschreibung nicht berücksichtigt.Online Version
quelle
CJam, 2 -13 Chance
Gemäß der aktualisierten Zeichenfolge ( 696 Byte).
Nur
""N/:,2/Kfb:c
sind jetzt gefährdet.Probieren Sie es hier online aus und da dieser Texteditor alle Leerzeichen auffrisst , finden Sie hier die Liste mit dem richtigen Code.
quelle
VB.NET,
2 ^ -122 ^ -112 -12
2 -11
quelle
Ich habe über meine Antwort nachgedacht, bevor ich zu den 50 Zeichen gekommen bin, die nur die Regeln "Enter", "Tab" und "Space" enthalten. Also meins ist nicht gültig.
Scheint, dass Groß- und Kleinschreibung nicht beachtet werden muss. Wenn Sie alternativ eine QWERTZ-Standardtastatur von Real (einschließlich Feststelltaste, andere Umschalttaste, Rücktaste und Nummernblock) verwenden könnten, wären nur zwei 50% ige Chancen erforderlich, die nur zwei zusätzliche Tastendrücke pro Fehler zur Folge hätten. Meine ungültige Antwort für eine C # -Konsolenanwendung, die auf tatsächliche Tastendrücke hinweist:
76 minimale Pressen mit nur 2 notwendigen 50% Chancen
quelle
Excel, 2 & ndash; 11
Fall von
PROPER
undLOWER
egal. Eingabe einer Formel ab+
automatischem Einfügen erforderlich=
. Also nur(
,"
,,
,)
,&
,!
können brechen.quelle