Coś jest nie tak z klawiaturą. ShiftKlucz ma własny rozum. Za każdym razem, gdy wpisujesz znak, nie masz pojęcia, czy wyjdzie on przesunięty, czy nie (chociaż jest to 50-50). Oprócz standardowych klawiszy znaków nic na klawiaturze nie działa. Nie ma myszy ani innych środków wprowadzania.
W jakiś sposób wiesz, że jedynym sposobem na naprawienie tego jest napisanie programu, który wypisuje Dear Computer, please stop giving me shift!
na standardowe wyjście. Na szczęście twoje IDE jest otwarte i możesz uruchomić program, ale oczywiście podczas pisania nie będziesz wiedział, które znaki zostaną przesunięte.
Jakiej sekwencji naciśnięć klawiszy użyłbyś do napisania programu, który ma najlepszą możliwą szansę pracy przy pierwszej próbie?
Detale
Używasz standardowej klawiatury QWERTY , więc możesz nacisnąć 50 znaków.
Wersje bez zmian (tylko 47):
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Wersje przesunięte (tylko 47):
~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
Ostatnie 3 klawisze to Enter, Tabi Space, które są takie same, przesunięte i nie przesunięte.
Sekwencja N tych znaków ma 2 N - (liczba znaków białych znaków), które można by uzyskać, gdybyś wpisał je za pomocą wadliwej klawiatury. Na przykład pisanie A Space mmogło dać wynik
a m
lub A m
lub a M
lub A M
.
Napisz program o tych znakach i spójrz na wszystkie 2 N - (liczba białych znaków) możliwych kombinacji przesunięć. Im więcej kombinacji, Dear Computer, please stop giving me shift!
tym lepiej. Twój wynik to liczba działających kombinacji (prawidłowe programy) podzielona przez całkowitą liczbę kombinacji. Najwyższy wynik wygrywa.
Notatki
- W przypadku prawidłowych programów drukowanie tylko
Dear Computer, please stop giving me shift!
i wyłącznie na standardowe wyjście powinno być jedynym efektem ubocznym. - Prawidłowe programy nie powinny pobierać danych wejściowych.
- Nieprawidłowe programy mogą zrobić wszystko.
- Komentarze mogą być używane w dowolnym miejscu.
- Odpowiedzi na spacje nie mogą wygrać, ponieważ uzyskanie 100% wyniku jest (względnie) trywialne. Nadal możesz przesłać rozwiązanie Whitespace dla zabawy.
- Twój program musi mieć maksymalnie 1024 znaki.
Aktualizacja: zmieniono, Stop giving me shift!
aby Dear Computer, please stop giving me shift!
pozwolić na bardziej złożone odpowiedzi. W razie potrzeby istniejące odpowiedzi mogą pozostać takie, jakie są.
źródło
Odpowiedzi:
Jabłkowy, 2 0 (100%)
Wierzę, że mogę tutaj uzyskać doskonały wynik:
myFunc
jest określona, wówczas IDE automatycznie konwersjiMYFUNC
,myfunc
,MyFuNc
itp odniesienia domyFunc
Oto jest:
Dzięki pomocy @kernigh i @paradigmsort jest to teraz 1020 bajtów, po prostu piszczenie poniżej limitu 1024 bajtów!
Wyjaśnienie:
string id <n>
, który zwraca znak odpowiadający wartości asciin
n
musi być generowana w bardziej fundamentalny sposób. W szczególności generujemy każdyn
zliczając listę, a następnie dodając kolejny element do tej listy.repeat with q in system info
Pozwala nam zrobić to 16 razy, jaksystem info
zawsze zwraca listę 16 poz.text
i drukowana.Wynik:
Korzystając z
osascript
interpretera, ale Edytor Applescript działa równie dobrze:źródło
end name
. W tej chwili muszęsed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -c
go policzyć. Możesz także przejść z 1044 na 1037, zmieniająccount of a
nacount a
i usuwająclog
zlog f as text
. Testuję na starym systemie OS X 10.4, w którymlog
polecenie ma pusty wynik;osascript
drukuje tylko wynik, a nie dziennik zdarzeń, więc nie otrzymuję danych wyjściowych, chyba że usunę jelog
.# Interpret all upper case: $ tr A-Z a-z
- Argumenty są do tyłu, prawda?PHP, 2 ^ -12
PHP jest PHP, kapitalizacji
echo
,ucwords
istrtolower
nie mają znaczenia. Wywołaniaucwords
istrtolower
upewnienie się, że wielkość liter nie zmieni wyniku.Dlatego jedynymi znakami, których nie można zmienić, są
((,)).(!);
(10 znaków).Każda para cytaty posiada również 50% szans na prawidłowy (
''
i""
są ważne, ale'"
i"'
nie są), więc każdy dodając kolejne potęgi dwójki.źródło
ucwords
rozpoczyna pierwszą literę każdego słowa''
lub""
, podobnie jak nawiasy zamykające, więc chociaż nadal masz 50% szansy(
,)
powinno to być automatyczne.strtolower("Dear Computer, '"0)
...<?
co na początku programu?Uwaga: To właściwie 3 odpowiedzi w jednym. Nie widziałem sensu dzielenia go na wiele odpowiedzi, gdy są one tak dosłownie tłumaczone. Jeśli powinny być podzielone, daj mi znać, a ja się tym zajmę.
Po ponownym przeczytaniu specyfikacji zdaję sobie sprawę, że to faktycznie jest nieprawidłowe. Każda odpowiedź ma> 4000 znaków. Ale i tak zostawię to tutaj, ze względu na inną metodę.
Python 2, 2 ** - 41
Aby zapewnić inny styl rozwiązania. Koduje wartość ascii każdego znaku w tabulatorach, podzielonych na spacje. Liczba zakładek to liczba wartości ascii.
To jest identyczne rozwiązanie w
Pyth, 2 ** - 11
Inne identyczne rozwiązanie - z wyjątkiem spacji zastąpionych znakami nowej linii - w
Golfscript, 2 ** - 8
źródło
CJam,
2 -72 -12 szansaMa podobny pomysł jak pierwsza odpowiedź Quincunx , ale w CJam.
źródło
K
zamiastC
?Biała spacja (645 bajtów, prawdopodobieństwo 2 ^ 0)
Ponieważ ten program używa tylko tabulatorów, spacji i znaków nowej linii (na które nie ma wpływu przesunięcie), daje 100% współczynnik sukcesu.
Uruchom program
źródło
CJam, 2 -9 szansa 739 bajtów
base64:
Oparty na idei Optymalizatora i odpowiedzi Quincunx.
źródło
Python 2, 2-20 szansa
print
,S
,+
,!
, I.lower()
wszystko musi być poprawna wersja; to 18 znaków. Dwa cudzysłowy dla ciągów również muszą być wyrównane, co daje dwie kolejne potęgi dwóch.W przypadku każdego z nich
top giving me shift
, jeśli jest przekonwertowany na wersję kapitałową, konwertujemy go na małe litery i działa poprawnie.Niestety nie mogę skorzystać ze sprytnego Pythona
capitalize()
, ponieważ wymaga to jeszcze jednej postaci.źródło
VisualBasic.net 2 ^ -18
Krytyczne znaki:. („DearC” + ”,!”. ())
Testowane w LINQPad, język = „Program VB”
źródło
>
zamiast dostać się i.
zmienić na .Console.Write(string)
Write(string)
(string).ToLower()
LCase(string)
Pyth, 2 ** - 15
Nie mogę znaleźć wersji Pytha
lower()
, więc pożyczę od Pythona. Znaki, które nie mogą być wymieniane są+"S"$
,!
i.lower()
, w sumie 14 znaków. Cytaty po$
must must pasują, dodając kolejną potęgę 2.źródło
lower()
- nie był wystarczająco przyzwyczajony. Prawdopodobnie powinienem dodać to z powrotem.Rant, 2-21
Seria metapatternów i
caps
wywołań wymusza prawidłowe formatowanie. Nazwy funkcji i argumenty nie uwzględniają wielkości liter.Wersja online
źródło
CJam, 2 -13 szansa
Zgodnie ze zaktualizowanym ciągiem ( 696 bajtów).
Tylko
""N/:,2/Kfb:c
teraz są zagrożeni.Wypróbuj online tutaj, a ponieważ ten edytor tekstu zajmuje wszystkie miejsca, oto sedno z poprawnym kodem.
źródło
VB.NET,
2 ^ -122 ^ -112 -12
2 -11
źródło
Myślałem o mojej odpowiedzi, zanim dotarłem do „50 znaków, w tym tylko Enter, Tab, Spacja”. Więc mój nie jest ważny.
Wydaje się, że kluczową kwestią jest język programowania bez rozróżniania wielkości liter. Alternatywnie, gdybyś mógł użyć prawdziwej standardowej klawiatury QWERTY (w tym Caps Lock, inne Shift, Backspace i okres Numpad), byłyby tylko 2 niezbędne 50% szansy, co skutkowałoby tylko 2 dodatkowymi naciśnięciami klawiszy na awarię. Moja nieprawidłowa odpowiedź dla aplikacji konsoli C # wskazująca faktyczne naciśnięcia klawiszy:
76 minimalnych pras z tylko 2 niezbędnymi 50% szansami
źródło
Excel, 2–11
Przypadek
PROPER
iLOWER
nie ma znaczenia.+
Wymagane jest wprowadzenie formuły rozpoczynającej się od automatycznego wstawiania=
. Tak tylko(
,"
,,
,)
,&
,!
może złamać.źródło