Программирование с помощью Спорадической клавиши Shift


39

Что-то не так с вашей клавиатурой. 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!учесть более сложные ответы. При желании существующие ответы могут остаться такими, какие они есть.


2
+1, это большой вызов, но я бы хотел, чтобы вы дали нам более длинную строку вывода. Я подумал о нескольких хитрых уловках, но все они используют более 18 символов на всех языках, которые я знаю.
Натаниэль

2
@ Calvin'sHobbies, но ... как насчет текущих ответов?
Джон Дворжак

1
@ Calvin'sHobbies Это не так! И ограничение 1024 тоже очень хорошо это предотвращает. Учитывая все это, я голосую за то, чтобы это закрыть, так как неясно, о чем вы спрашиваете. Пожалуйста, не меняйте спецификацию, которая ставит в невыгодное положение большинство ответов
Оптимизатор

1
@ Calvin'sHobbies Жаль, что есть предел в 1024 символа. Мне нужно переосмыслить мой ответ ...
Джастин

1
@Optimizer По крайней мере, они не выиграют.
jimmy23013

Ответы:


46

Applescript, 2 0 (100%)

Я полагаю, что могу претендовать на прекрасную оценку здесь:

  • Редактор Applescript (моя IDE) автоматически преобразует все ключевые слова в нижний регистр при компиляции / запуске
  • Кроме того, определенные имена переменных и обработчик нечувствительны к регистру - Например , если обработчик myFuncопределен, то IDE будет автоматически конвертировать MYFUNC, myfunc, MyFuNcи т.д. ссылки наmyFunc
  • Я использовал только буквенные символы, пробелы и символы новой строки, поэтому мне не нужно беспокоиться о сдвинутых цифрах и знаках препинания.

Вот это:

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

Благодаря помощи @kernigh и @paradigmsort, теперь это 1020 байт, просто вписывается в ограничение в 1024 байта!

Объяснение:

  • Символы для выходной строки генерируются с помощью string id <n>, который возвращает символ, соответствующий значению asciin
  • Поскольку мы избегаем цифр, каждый nдолжен генерироваться более фундаментальными способами. В частности, мы генерируем каждый из них nпутем подсчета списка, а затем добавляем еще один элемент в этот список. Это repeat with q in system infoпозволяет нам делать это 16 раз, как system infoвсегда, возвращает список из 16 элементов.
  • Используя подобную технику, мы добавляем каждый символ последней строки по очереди в список.
  • Наконец, последний список приведен textи распечатан.

Выход:

Использование osascriptинтерпретатора, но редактор Applescript работает так же хорошо:

$ # 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
Очень очень круто! Я надеюсь, что вы можете получить его до 1024. Можете немного объяснить код?
Увлечения Кэлвина

2
@ Calvin'sHobbies Applescript должен быть одним из самых читаемых языков - вы действительно этого не понимаете? ;-) Я постараюсь добавить объяснение немного ...
Цифровая травма

2
Пожалуйста, опубликуйте версию для гольфа, без отступов и имени 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.
Kernigh

3
Изменение c для вызова j дважды вместо трех и обновление сайтов вызовов по мере необходимости экономит 7 символов и ограничивает вас.
paradigmsort

3
# Interpret all upper case: $ tr A-Z a-z- Арги задом наперед, верно?
Изката

16

PHP, 2 ^ -12

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

PHP является PHP, капитализация echo, ucwordsи strtolowerне имеет никакого значения. Призывает ucwordsи strtolowerгарантирует, что регистр строк не изменит вывод.

Поэтому единственными символами, которые нельзя изменить, являются ((,)).(!);(10 символов).

Каждая пара цитат также имеет 50% шанс быть действительным ( ''и ""справедливы, но '"и "'не), поэтому каждый из которых добавляет еще одну степень двойки.


2
@ edc65 ucwordsиспользует первую букву каждого слова
es1024

1
хорошая IDE добавит для вас правильные закрывающие кавычки (у вас когда-нибудь останутся только ''или "", а также закрывающие скобки, поэтому, хотя у вас все еще есть шанс 50% (, это )должно быть автоматически.
WOUNDEDStevenJones

Во-вторых, вы не можете использовать какие-либо навигационные клавиши (стрелки), поэтому, даже если ваша IDE правильно выполнила автозаполнение, вам нужно будет снова ввести этот же символ, иначе он вставит новый (неправильный), например так: strtolower("Dear Computer, '"0)...
ОБРАЩЕНО Стивен Джонс

1
@WOUNDEDStevenJones Я полагаю, что полагаться на функции IDE будет считаться обманом.
Инго Бюрк

1
Как насчет <?в начале программы?
Майкл Миор

5

Примечание: на самом деле это 3 ответа в одном. Я не видел смысла разбивать его на несколько ответов, когда они являются такими буквальными переводами друг друга. Если они будут разделены, дайте мне знать, и я позабочусь об этом.

Перечитав спецификации, я понимаю, что это на самом деле неверно. Каждый ответ> 4000 символов. Но я все равно оставлю это здесь из-за другого метода.

Python 2, 2 ** - 41

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

Просто чтобы предоставить другой стиль решения. Он кодирует значение ascii каждого символа во вкладках, разделенных пробелами. Количество вкладок - это число для значения ascii.

Это идентичное решение в

Пиф, 2 ** - 11

j""mCldc"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "d

Другое идентичное решение - за исключением пробелов, замененных на новые строки - в

Гольфскрипт, 2 ** - 8

'                                                                                                                                                                                                                                                                               









































                                                                                                                                    'n/{,}%+

Возможно, кодирование в двоичном коде будет работать для GolfScript. TAB как 1, пробел как 0 или наоборот.
Джастин

3
Я не единственный, кто видит большую часть ответа GolfScript пробелом, не так ли?
Pharap

1
@ Фарап Вот в чем дело. Это целая куча вкладок, разделенных символами новой строки. Если вы пройдете весь путь вниз и прокрутите вправо, вы увидите, где заканчивается строка и выполняет магию, чтобы преобразовать ее в ascii.
Джастин


4

Пробелы (645 байт, вероятность 2 ^ 0)

Так как эта программа использует только табуляцию, пробелы и переводы строк (на которые не влияют сдвиги), она дает 100% успеха.

             





















































































  

Запуск программы


1
Но обратите внимание, что это вне конкуренции по правилам.
Инго Бюрк

3

CJam, 2 -9 шанс, 739 байт

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

base64:

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

Основано на идее ответа Оптимизатора и Quincunx.


3

Python 2, 2 -20 шанс

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

print, S , +, !, И .lower()все должны быть правильная версия; это 18 символов. Две кавычки для строк также должны совпадать, что делает еще две степени двойки.

Для любого из top giving me shift , если он конвертируется в заглавную версию, мы конвертируем его в нижний регистр, и он работает правильно.

К сожалению, я не могу использовать изящную Python capitalize(), потому что это занимает еще один символ.


Если это помогает, фраза теперь длиннее (но обычно не пишется с большой буквы).
Увлечения Кэлвина

@ Calvin'sHobbies Я видел это. Это не помогает; это вредит.
Джастин

2

VisualBasic.net 2 ^ -18

Критические символы:. ("DearC" + ",!". ())

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

Протестировано в LINQPad, Language = "Программа VB"


Я думаю, что Visual Studio автоматически исправит корпус для вас.
Pharap

@Pharap, но заключенные в кавычки не проблема ... VS не исправил бы '(' смещено на '9'
edc65

1
В этом случае, что-то более полезное: вы можете избавиться от потенциального случая получения >вместо того ., Console.Write(string)чтобы перейти на Write(string)и поменять (string).ToLower()на LCase(string).
Pharap

1

Пиф, 2 ** - 15

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

Кажется, я не могу найти версию Pyth lower(), поэтому я позаимствую у Python. Символы , которые не могут быть перепутаны являются +"S"$, !и .lower(), в общей сложности 14 символов. Кавычки после $должны совпадать, добавляя еще одну степень 2.


У Пифа нет lower()- оно не привыкло достаточно. Я должен, вероятно, добавить его обратно.
Исаак

1

Rant, 2 -21

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

Ряд метапаттернов и capsвызовов заставляет правильное форматирование. Имена функций и аргументы нечувствительны к регистру.

Онлайн версия



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

Я подумал о своем ответе, прежде чем перейти к правилу «50 символов, включая только Enter, Tab, Space». Так что мое недействительно.

Кажется, ключ к этому - наличие языков программирования без учета регистра. В качестве альтернативы, если бы вы могли использовать настоящую стандартную клавиатуру QWERTY (включая Caps Lock, другие Shift, Backspace и Numpad Period), было бы только 2 необходимых 50% шанса, что привело бы только к 2 дополнительным нажатиям клавиш на каждый сбой. Мой неверный ответ для консольного приложения C #, указывающий фактические нажатия клавиш:

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 минимальных нажатий с 2 ​​необходимыми шансами 50%


0

Excel, 2 -11

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

Случай PROPERи LOWERне имеет значения. Ввод формулы, начинающейся с +автоматически вставляемых полей =. Так только (, ", ,, ), &, !может привести к поломке.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.