Програмування за допомогою спорадичної клавіші зсуву


39

З вашою клавіатурою щось не так. ShiftКлюч має свій власний розум. Кожного разу, коли ви вводите персонажа, ви не маєте уявлення, буде він виходить зміщеним чи ні (хоча це 50-50). Крім стандартних символьних клавіш, нічого на клавіатурі не функціонує. Немає миші та інших засобів введення.

Якось ви знаєте, єдиний спосіб виправити речі - це написати програму, яка виводить Dear Computer, please stop giving me shift!на stdout. На щастя, ваш 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 запобігає і це дуже добре. враховуючи все це, я голосую за це, щоб закрити як незрозуміло, про що ви просите. Будь ласка, не змінюйте специфікацію, яка надає недоліки більшості відповідей
Optimizer

1
@ Calvin'sHobbies Шкода, що є обмеження 1024 знаків. Мені потрібно буде переосмислити свою відповідь ...
Джастін

1
@Optimizer Принаймні вони не виграють.
jimmy23013

Відповіді:


46

Яблукопис, 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 повинен бути однією з найбільш читаних мов - ви справді цього не розумієте? ;-) Я спробую трохи додати пояснення ...
Digital Trauma

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 символів та отримує вас під обмеження.
парадигморт

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 символів. Але я залишу це все одно тут, через різний метод.

Пітон 2, 2 ** - 41

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

Просто для надання іншого стилю рішення. Він кодує значення ascii кожного символу на вкладках, розділених на пробіли. Кількість вкладок - це число для значення ascii.

Це ідентичне рішення в Росії

Піт, 2 ** - 11

j""mCldc"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "d

Ще одне ідентичне рішення - крім пробілів, замінених новими рядками - в

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

'                                                                                                                                                                                                                                                                               









































                                                                                                                                    'n/{,}%+

Можливо, кодування у двійковій формі буде працювати для GolfScript. TAB як 1, SPACE як 0 або навпаки.
Джастін

3
Я не єдиний, хто бачить більшість відповідей GolfScript як пробіли, чи не так?
Фарап

1
@Pharap У цьому фокус. Це ціла купа вкладок, розділених новими рядками. Якщо ви пройдетеся повністю вниз і прокрутите праворуч, ви побачите, де закінчується рядок і чинять магію, щоб перетворити її в ascii.
Джастін

4

CJam, 2 -7 2 -12 шанс

'D"ear Komputer, please stop giving me shift!"el4'Ct

У нього схожа ідея, як перша відповідь Quincunx, але в CJam.


Це навмисно це Kзамість C?
Paŭlo Ebermann

@ PaŭloEbermann Цей персонаж не залежить. Це також може бути простір або щось інше.
jimmy23013

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"


Я думаю, що візуальна студія автоматично виправила б корпус для вас.
Фарап

@Pharap, але зовнішні котирування не є проблемою ... VS не виправить '(' перейшов на '9'
edc65

1
У цьому випадку щось більш корисне: ви можете позбутися потенційного випадку отримання > замість того ., Console.Write(string)щоб перейти на Write(string)та замінити (string).ToLower()на нього LCase(string).
Фарап

1

Піт, 2 ** - 15

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

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


Pyth не має lower()- він не використовувався достатньо. Я, мабуть, мушу додати його ще раз.
isaacg

1

Рант, 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% шанси, що призведе до лише двох додаткових натискань клавіш за помилку. Моя недійсна відповідь на додаток консолі 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.