Что-то не так с вашей клавиатурой. ShiftКлюч имеет свой собственный разум. Каждый раз, когда вы вводите символ, вы не представляете, будет ли он сдвинутым или нет (хотя это 50-50). Кроме стандартных символьных клавиш на клавиатуре ничего не работает. Там нет мыши или других средств ввода.
Каким-то образом вы знаете, что единственный способ исправить ситуацию - это написать программу, которая выводит Dear Computer, please stop giving me shift!
на стандартный вывод. К счастью, ваша IDE открыта, и вы можете запустить программу, но, конечно, по мере ее ввода вы не будете знать, какие символы будут смещены.
Какую последовательность нажатий клавиш вы бы использовали для написания программы, которая имеет наилучшие шансы работать с первой попытки?
Детали
Вы используете стандартную QWERTY-клавиатуру , поэтому вы можете нажать 50 символов.
Версии без изменений (только 47):
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./
Сдвинутые версии (только 47):
~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
Последние 3 клавиши - это Enter, Tabи Space, которые одинаково сдвинуты и не сдвинуты.
Последовательность из N этих символов имеет 2 N - (количество пробельных символов), которые могли бы быть выведены, если вы набрали их с неисправной клавиатуры. Например, набор текста A Space mмог дать
a m
или A m
или a M
или или A M
.
Запишите в программу эти символы и посмотрите на все ее 2 N - (количество пробельных символов) возможных комбинаций сдвига. Чем больше комбинаций, Dear Computer, please stop giving me shift!
тем лучше. Ваша оценка - это количество рабочих комбинаций (действительных программ), деленное на общее количество комбинаций. Самый высокий балл побеждает.
Заметки
- Для действительных программ
Dear Computer, please stop giving me shift!
единственным побочным эффектом должна быть точная печать и ничего больше для стандартного вывода. - Действительные программы не должны принимать входные данные.
- Неверные программы могут делать что угодно.
- Комментарии могут использоваться где угодно.
- Пробелы ответы не могут победить, потому что получение 100% баллов (относительно) тривиально. Вы все еще можете отправить решение Whitespace для развлечения.
- Ваша программа должна содержать не более 1024 символов.
Обновление: изменено, Stop giving me shift!
чтобы Dear Computer, please stop giving me shift!
учесть более сложные ответы. При желании существующие ответы могут остаться такими, какие они есть.
источник
Ответы:
Applescript, 2 0 (100%)
Я полагаю, что могу претендовать на прекрасную оценку здесь:
myFunc
определен, то IDE будет автоматически конвертироватьMYFUNC
,myfunc
,MyFuNc
и т.д. ссылки наmyFunc
Вот это:
Благодаря помощи @kernigh и @paradigmsort, теперь это 1020 байт, просто вписывается в ограничение в 1024 байта!
Объяснение:
string id <n>
, который возвращает символ, соответствующий значению asciin
n
должен генерироваться более фундаментальными способами. В частности, мы генерируем каждый из нихn
путем подсчета списка, а затем добавляем еще один элемент в этот список. Этоrepeat with q in system info
позволяет нам делать это 16 раз, какsystem info
всегда, возвращает список из 16 элементов.text
и распечатан.Выход:
Использование
osascript
интерпретатора, но редактор Applescript работает так же хорошо:источник
end name
. Как есть, я должен использовать,sed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -c
чтобы посчитать это. Кроме того , вы можете получить вниз от 1044 до 1037, изменяяcount of a
кcount a
, и удалениеlog
отlog f as text
. Я тестирую со старой системой OS X 10.4, гдеlog
команда имеет пустой результат;osascript
печатает только результат, а не журнал событий, поэтому я не получаю вывод, пока не удалюlog
.# Interpret all upper case: $ tr A-Z a-z
- Арги задом наперед, верно?PHP, 2 ^ -12
PHP является PHP, капитализация
echo
,ucwords
иstrtolower
не имеет никакого значения. Призываетucwords
иstrtolower
гарантирует, что регистр строк не изменит вывод.Поэтому единственными символами, которые нельзя изменить, являются
((,)).(!);
(10 символов).Каждая пара цитат также имеет 50% шанс быть действительным (
''
и""
справедливы, но'"
и"'
не), поэтому каждый из которых добавляет еще одну степень двойки.источник
ucwords
использует первую букву каждого слова''
или""
, а также закрывающие скобки, поэтому, хотя у вас все еще есть шанс 50%(
, это)
должно быть автоматически.strtolower("Dear Computer, '"0)
...<?
в начале программы?Примечание: на самом деле это 3 ответа в одном. Я не видел смысла разбивать его на несколько ответов, когда они являются такими буквальными переводами друг друга. Если они будут разделены, дайте мне знать, и я позабочусь об этом.
Перечитав спецификации, я понимаю, что это на самом деле неверно. Каждый ответ> 4000 символов. Но я все равно оставлю это здесь из-за другого метода.
Python 2, 2 ** - 41
Просто чтобы предоставить другой стиль решения. Он кодирует значение ascii каждого символа во вкладках, разделенных пробелами. Количество вкладок - это число для значения ascii.
Это идентичное решение в
Пиф, 2 ** - 11
Другое идентичное решение - за исключением пробелов, замененных на новые строки - в
Гольфскрипт, 2 ** - 8
источник
CJam,
2 -72 -12 шансИдея схожа с первым ответом Quincunx , но в CJam.
источник
K
вместоC
?Пробелы (645 байт, вероятность 2 ^ 0)
Так как эта программа использует только табуляцию, пробелы и переводы строк (на которые не влияют сдвиги), она дает 100% успеха.
Запуск программы
источник
CJam, 2 -9 шанс, 739 байт
base64:
Основано на идее ответа Оптимизатора и Quincunx.
источник
Python 2, 2 -20 шанс
print
,S
,+
,!
, И.lower()
все должны быть правильная версия; это 18 символов. Две кавычки для строк также должны совпадать, что делает еще две степени двойки.Для любого из
top giving me shift
, если он конвертируется в заглавную версию, мы конвертируем его в нижний регистр, и он работает правильно.К сожалению, я не могу использовать изящную Python
capitalize()
, потому что это занимает еще один символ.источник
VisualBasic.net 2 ^ -18
Критические символы:. ("DearC" + ",!". ())
Протестировано в LINQPad, Language = "Программа VB"
источник
>
вместо того.
,Console.Write(string)
чтобы перейти наWrite(string)
и поменять(string).ToLower()
наLCase(string)
.Пиф, 2 ** - 15
Кажется, я не могу найти версию Pyth
lower()
, поэтому я позаимствую у Python. Символы , которые не могут быть перепутаны являются+"S"$
,!
и.lower()
, в общей сложности 14 символов. Кавычки после$
должны совпадать, добавляя еще одну степень 2.источник
lower()
- оно не привыкло достаточно. Я должен, вероятно, добавить его обратно.Rant, 2 -21
Ряд метапаттернов и
caps
вызовов заставляет правильное форматирование. Имена функций и аргументы нечувствительны к регистру.Онлайн версия
источник
CJam, 2 -13 шанс
Согласно обновленной строке ( 696 байт).
Только
""N/:,2/Kfb:c
в опасности прямо сейчас.Попробуйте это онлайн здесь, и поскольку этот текстовый редактор поглощает все пробелы, вот суть с правильным кодом.
источник
VB.NET,
2 ^ -122 ^ -112 -12
2 -11
источник
Я подумал о своем ответе, прежде чем перейти к правилу «50 символов, включая только Enter, Tab, Space». Так что мое недействительно.
Кажется, ключ к этому - наличие языков программирования без учета регистра. В качестве альтернативы, если бы вы могли использовать настоящую стандартную клавиатуру QWERTY (включая Caps Lock, другие Shift, Backspace и Numpad Period), было бы только 2 необходимых 50% шанса, что привело бы только к 2 дополнительным нажатиям клавиш на каждый сбой. Мой неверный ответ для консольного приложения C #, указывающий фактические нажатия клавиш:
76 минимальных нажатий с 2 необходимыми шансами 50%
источник
Excel, 2 -11
Случай
PROPER
иLOWER
не имеет значения. Ввод формулы, начинающейся с+
автоматически вставляемых полей=
. Так только(
,"
,,
,)
,&
,!
может привести к поломке.источник