Programación con una tecla de cambio esporádico

39

Hay algo mal con tu teclado. La Shiftclave tiene una mente propia. Cada vez que escribes un personaje no tienes idea de si saldrá desplazado o no (aunque sea 50-50). Además de las teclas de caracteres estándar, nada en el teclado es funcional. No hay mouse u otro medio de entrada.

De alguna manera, sabes que la única forma de arreglar las cosas es escribir un programa que salga Dear Computer, please stop giving me shift!a stdout. Afortunadamente, su IDE está abierto y es capaz de ejecutar un programa, pero, por supuesto, a medida que lo escribe, no sabrá qué caracteres se cambiarán.

¿Qué secuencia de teclas presionarías para escribir un programa que tenga la mejor posibilidad de trabajar en el primer intento?

Detalles

Está utilizando un teclado QWERTY estándar , por lo que puede presionar 50 teclas de caracteres.

Versiones sin desplazamiento (solo 47):

`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./

Versiones cambiadas (solo 47):

~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?

Las 3 últimas son claves Enter, Taby Spaceque son los mismos desplazada y no desplazada.

Una secuencia de N de estos caracteres tiene 2 N - (recuento de caracteres de espacio en blanco) formas en que podría haberse generado si los hubiera escrito con su teclado defectuoso. Por ejemplo, escribir A Space mpodría haber producido a mo A mo a Mo A M.

Escriba un programa para estos personajes y observe todas sus 2 N - (recuento de caracteres de espacio en blanco) posibles combinaciones de turnos. Cuantas más combinaciones produzcan, Dear Computer, please stop giving me shift!mejor. Su puntaje es el número de combinaciones de trabajo (programas válidos) dividido por el número total de combinaciones. El puntaje más alto gana.

Notas

  • Para programas válidos, la impresión precisa Dear Computer, please stop giving me shift!y nada más para stdout debería ser el único efecto secundario.
  • Los programas válidos no deben recibir aportes.
  • Los programas inválidos pueden hacer cualquier cosa.
  • Los comentarios pueden usarse en cualquier lugar.
  • Las respuestas de espacios en blanco no pueden ganar porque obtener una puntuación del 100% es (relativamente) trivial. Aún puede enviar una solución de Whitespace por diversión.
  • Su programa debe tener como máximo 1024 caracteres.

Actualización: cambiado Stop giving me shift!para Dear Computer, please stop giving me shift!permitir respuestas más complejas. Las respuestas existentes pueden permanecer como están si se desea.

Pasatiempos de Calvin
fuente
2
+1, es un gran desafío, pero desearía que nos hubieras dado una cadena de salida más larga. He pensado en varios trucos ingeniosos, pero todos tienen más de 18 caracteres en todos los idiomas que conozco.
Nathaniel
2
@ Calvin'sHobbies pero ... ¿qué pasa con las respuestas actuales?
John Dvorak
1
@ Calvin'sHobbies ¡No lo es! Y la limitación 1024 también lo impide muy bien. Dado todo esto, estoy votando para que esto cierre, ya que no está claro lo que está preguntando. Por favor, no cambie las especificaciones, lo que da una desventaja a la mayoría de las respuestas
Optimizer
1
@ Calvin'sHobbies Lástima que haya un límite de 1024 char. Voy a necesitar repensar mi respuesta ...
Justin
1
@Optimizer Al menos no ganarán.
jimmy23013

Respuestas:

46

Applescript, 2 0 (100%)

Creo que puedo reclamar una puntuación perfecta aquí:

  • El Editor Applescript (mi IDE) convierte automáticamente todas las palabras clave a minúsculas al compilar / ejecutar
  • Además, los nombres de variables y de controlador definidos son sensibles a mayúsculas - Por ejemplo, si un controlador myFuncse define, entonces el IDE convertirá automáticamente MYFUNC, myfunc, MyFuNc, etc referencias amyFunc
  • Solo he usado caracteres alfabéticos, espacios y líneas nuevas, así que no necesito preocuparme por los números desplazados y los caracteres de puntuación.

Aquí está es:

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

Gracias a la ayuda de @kernigh y @paradigmsort, esto ahora es de 1020 bytes, ¡solo chirriando por debajo del límite de 1024 bytes!

Explicación:

  • Los caracteres para la cadena de salida se generan utilizando string id <n>, lo que devuelve el carácter correspondiente al valor ascii.n
  • Debido a que estamos evitando dígitos, cada uno ntiene que ser generado por medios más fundamentales. Específicamente, generamos cada uno ncontando una lista y luego agregando otro elemento a esa lista. El repeat with q in system infonos permite hacer esto 16 veces, ya que system infosiempre devuelve una lista de 16 elementos.
  • Usando una técnica similar, agregamos cada carácter de la cadena final a su vez a una lista.
  • Finalmente, esa última lista se coacciona texte imprime.

Salida:

Usando el osascriptintérprete, pero el Editor de Applescript funciona igual de bien:

$ # 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!
$ 
Trauma digital
fuente
2
¡Muy muy genial! Espero que puedas llegar a 1024. ¿Te importa explicar un poco el código?
Aficiones de Calvin
2
@ Calvin'sHobbies Applescript se supone que es uno de los idiomas más legibles, ¿realmente no entiendes esto? ;-) Intentaré agregar una explicación en un momento ...
Digital Trauma
2
Publique la versión de golf, sin sangría y sin nombre end name. Como es, debo usar sed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -cpara contarlo. Además, se puede bajar 1044-1037 cambiando count of aa count a, y eliminar logde log f as text. Pruebo con un viejo sistema OS X 10.4, donde el logcomando tiene un resultado vacío; osascriptsolo imprime el resultado, no el registro de eventos, por lo que no obtengo salida a menos que elimine log.
kernigh
3
Cambiar c para llamar a j dos veces en lugar de tres y actualizar los sitios de llamadas según sea necesario ahorra 7 caracteres y lo pone por debajo del límite.
paradigmsort
3
# Interpret all upper case: $ tr A-Z a-z- Los args están al revés, ¿verdad?
Izkata
16

PHP, 2 ^ -12

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

PHP siendo PHP, capitalización de echo, ucwordsy strtolowerno importan. Las llamadas a ucwordsy strtoloweraseguran que el caso de las cadenas no va a cambiar la salida.

Por lo tanto, los únicos caracteres que no se pueden cambiar son ((,)).(!);(10 caracteres).

Cada par de citas también tiene un 50% de probabilidad de ser válida ( ''y ""son válidas, pero '"y "'no lo son), por lo tanto cada adición de otra potencia de dos.

es1024
fuente
2
@ edc65 escribe en ucwordsmayúscula la primera letra de cada palabra
es1024
1
un buen IDE agregará las cotizaciones de cierre correctas para usted (solo terminará con ''o "", así como los paréntesis de cierre, por lo que aunque todavía tiene un 50% de posibilidades de (, el )debería ser automático.
WOUNDEDStevenJones
dispare, no puede usar ningún tipo de teclas de navegación (flechas), por lo que incluso si su IDE se completó automáticamente, necesitaría escribir ese mismo carácter nuevamente o de lo contrario insertará una nueva (incorrecta), como esta: strtolower("Dear Computer, '"0)...
WOUNDEDStevenJones
1
@WOUNDEDStevenJones Creo que confiar en las funciones IDE se consideraría una trampa.
Ingo Bürk
1
¿Qué pasa <?al comienzo del programa?
Michael Mior
5

Nota: Esto es en realidad 3 respuestas en una. No entendí el punto de dividirlo en múltiples respuestas cuando son traducciones tan literales entre sí. Si deben separarse, avíseme y me encargaré de eso.

Después de volver a leer las especificaciones, me doy cuenta de que esto no es realmente válido. Cada respuesta tiene> 4000 caracteres de longitud. Pero dejaré esto aquí de todos modos, debido al método diferente.

Python 2, 2 ** - 41

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

Solo para proporcionar un estilo diferente de solución. Codifica el valor ascii de cada carácter en pestañas, divididas en espacios. El número de pestañas es el número para el valor ascii.

Esta es una solución idéntica en

Pyth, 2 ** - 11

j""mCldc"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "d

Otra solución idéntica, excepto espacios reemplazados por líneas nuevas, en

Golfscript, 2 ** - 8

'                                                                                                                                                                                                                                                                               









































                                                                                                                                    'n/{,}%+
Justin
fuente
Quizás la codificación en binario funcionaría para GolfScript. TAB como 1, ESPACIO como 0 o viceversa.
Justin
3
No soy el único que ve la mayoría de las respuestas de GolfScript como espacios en blanco, ¿verdad?
Pharap
1
@Pharap Ese es el truco. Es un montón de pestañas separadas por nuevas líneas. Si vas todo el camino hacia abajo y te desplazas hacia la derecha, verás dónde termina la cuerda y hace la magia para convertirla en ascii.
Justin
4

Cjam, 2 -7 2 -12 oportunidad

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

Tiene una idea similar a la primera respuesta de Quincunx , pero en CJam.

jimmy23013
fuente
¿Es esto intencionalmente un en Klugar de C?
Paŭlo Ebermann
@ PaŭloEbermann Ese personaje es independiente. También puede ser un espacio o algo más.
jimmy23013
4

Espacio en blanco (645 bytes, probabilidad 2 ^ 0)

Dado que este programa solo usa pestañas, espacios y líneas nuevas (que no se ven afectados por los cambios), ofrece una tasa de éxito del 100%.

             





















































































  

Ejecución del programa

Frxstrem
fuente
1
Pero tenga en cuenta que esto está fuera de competencia según las reglas.
Ingo Bürk
3

CJam, 2 -9 chance, 739 bytes

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

base64:

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

Basado en la idea de Optimizer y la respuesta de Quincunx.

jimmy23013
fuente
3

Python 2, 2-20 posibilidades

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

print, S, +, !, Y .lower()debe ser toda la versión correcta; Eso es 18 caracteres. Las dos comillas para las cadenas también deben alinearse, lo que hace que dos poderes más de dos.

Para cualquiera de los top giving me shift, si se convierte a la versión capital, lo convertimos a minúsculas y funciona correctamente.

Lamentablemente, no puedo usar el ingenioso Python capitalize(), porque eso requiere un personaje más.

Justin
fuente
Si ayuda, la frase ahora es más larga (pero normalmente no está en mayúscula).
Aficiones de Calvin
@ Calvin'sHobbies Lo vi. No ayuda; Daña.
Justin
2

VisualBasic.net 2 ^ -18

Caracteres críticos:. ("DearC" + ",!". ())

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

Probado en LINQPad, Idioma = "Programa VB"

edc65
fuente
Creo que Visual Studio corregirá automáticamente la carcasa por usted.
Pharap
@Pharap, pero las mayúsculas y minúsculas no son el problema ... VS no corrigió un '(' cambiado a '9'
edc65
1
En ese caso, algo más útil: usted puede deshacerse de la causa potencial de conseguir >en lugar de .mediante el cambio Console.Write(string)de Write(string)e intercambiando (string).ToLower()hacia fuera para LCase(string).
Pharap
1

Pyth, 2 ** - 15

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

Parece que no puedo encontrar la versión de Pyth lower(), por lo que tomaré prestado de Python. Los caracteres que no se pueden intercambiar son +"S"$, !y .lower(), para un total de 14 caracteres. Las comillas después del $must deben coincidir, agregando otra potencia de 2.

Justin
fuente
Pyth no tiene un lower()- no se estaba acostumbrando lo suficiente. Probablemente debería agregarlo nuevamente.
isaacg
1

Rant, 2-21

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

Una serie de metapatrones y capsllamadas fuerzan el formato adecuado. Los nombres y argumentos de la función no distinguen entre mayúsculas y minúsculas.

Versión en línea

Berkin
fuente
1

Cjam, 2 -13 oportunidad

Según la cadena actualizada ( 696 bytes).

"   




















































































             "N/:,2/Kfb:c

Solamente ""N/:,2/Kfb:c están en riesgo en este momento.

Pruébelo en línea aquí y dado que este editor de texto está consumiendo todos los espacios, aquí está la esencia con el código correcto.

Optimizador
fuente
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
Qwertiy
fuente
0

Pensé en mi respuesta antes de llegar a la regla de '50 caracteres que incluye solo Enter, Tab, Space '. Entonces el mío no es válido.

Parece tener lenguajes de programación que no distinguen entre mayúsculas y minúsculas es la clave aquí. Alternativamente, si pudieras usar un teclado QWERTY estándar real (incluido el Bloqueo de mayúsculas, el otro Shift, Retroceso y el Período numérico) solo habría 2 posibilidades de 50% necesarias que solo darían como resultado 2 pulsaciones de teclas adicionales por falla. Mi respuesta no válida para una aplicación de consola C # que señala las pulsaciones de teclas reales:

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 prensas mínimas con solo 2 oportunidades necesarias del 50%

Micro
fuente
0

Excel, 2-11

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

Caso de PROPERy LOWERno importa. Se +requiere ingresar una fórmula que comience con inserciones automáticas =. Por lo que sólo (, ", ,, ), &, !se pueden romper.

Wernisch
fuente