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 m
o A m
o a M
o 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.
fuente
Respuestas:
Applescript, 2 0 (100%)
Creo que puedo reclamar una puntuación perfecta aquí:
myFunc
se define, entonces el IDE convertirá automáticamenteMYFUNC
,myfunc
,MyFuNc
, etc referencias amyFunc
Aquí está es:
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:
string id <n>
, lo que devuelve el carácter correspondiente al valor ascii.n
n
tiene que ser generado por medios más fundamentales. Específicamente, generamos cada unon
contando una lista y luego agregando otro elemento a esa lista. Elrepeat with q in system info
nos permite hacer esto 16 veces, ya quesystem info
siempre devuelve una lista de 16 elementos.text
e imprime.Salida:
Usando el
osascript
intérprete, pero el Editor de Applescript funciona igual de bien:fuente
end name
. Como es, debo usarsed -e 's/^ *//' -e 's/^end.*/end/' dearcase.scpt | wc -c
para contarlo. Además, se puede bajar 1044-1037 cambiandocount of a
acount a
, y eliminarlog
delog f as text
. Pruebo con un viejo sistema OS X 10.4, donde ellog
comando tiene un resultado vacío;osascript
solo imprime el resultado, no el registro de eventos, por lo que no obtengo salida a menos que eliminelog
.# Interpret all upper case: $ tr A-Z a-z
- Los args están al revés, ¿verdad?PHP, 2 ^ -12
PHP siendo PHP, capitalización de
echo
,ucwords
ystrtolower
no importan. Las llamadas aucwords
ystrtolower
aseguran 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.fuente
ucwords
mayúscula la primera letra de cada palabra''
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.strtolower("Dear Computer, '"0)
...<?
al comienzo del programa?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
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
Otra solución idéntica, excepto espacios reemplazados por líneas nuevas, en
Golfscript, 2 ** - 8
fuente
Cjam,
2 -72 -12 oportunidadTiene una idea similar a la primera respuesta de Quincunx , pero en CJam.
fuente
K
lugar deC
?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
fuente
CJam, 2 -9 chance, 739 bytes
base64:
Basado en la idea de Optimizer y la respuesta de Quincunx.
fuente
Python 2, 2-20 posibilidades
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.fuente
VisualBasic.net 2 ^ -18
Caracteres críticos:. ("DearC" + ",!". ())
Probado en LINQPad, Idioma = "Programa VB"
fuente
>
en lugar de.
mediante el cambioConsole.Write(string)
deWrite(string)
e intercambiando(string).ToLower()
hacia fuera paraLCase(string)
.Pyth, 2 ** - 15
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.fuente
lower()
- no se estaba acostumbrando lo suficiente. Probablemente debería agregarlo nuevamente.Rant, 2-21
Una serie de metapatrones y
caps
llamadas 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
fuente
Cjam, 2 -13 oportunidad
Según la cadena actualizada ( 696 bytes).
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.
fuente
VB.NET,
2 ^ -122 ^ -112 -12
2 -11
fuente
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:
76 prensas mínimas con solo 2 oportunidades necesarias del 50%
fuente
Excel, 2-11
Caso de
PROPER
yLOWER
no importa. Se+
requiere ingresar una fórmula que comience con inserciones automáticas=
. Por lo que sólo(
,"
,,
,)
,&
,!
se pueden romper.fuente