Escriba el programa más corto posible de modo que cuando combine el primer carácter y cada enésimo carácter posterior en un nuevo programa, la salida sea N. Esto debe funcionar para N = 1, 2, ..., 16.
Otra forma de decirlo es, si elimina todos los caracteres de su programa, excepto el primero y cada Nth después de eso, la salida del código restante debería ser N.
Ejemplo
Si tu código fuera
ABCDEFGHIJKLMNOP
N = 1 da como resultado ABCDEFGHIJKLMNOP
. Ejecutar esto debería generar 1.
N = 2 resultados en ACEGIKMO
. Ejecutar esto debería generar 2.
N = 3 resultados en ADGJMP
. Ejecutar esto debería generar 3.
N = 4 resultados en AEIM
. Ejecutar esto debería generar 4.
N = 5 resultados en AFKP
. Ejecutar esto debería generar 5.
N = 6 resultados en AGM
. Ejecutar esto debería generar 6.
N = 7 resultados en AHO
. Ejecutar esto debería generar 7.
N = 8 resultados en AI
. Ejecutar esto debería generar 8.
N = 9 resultados en AJ
. Ejecutar esto debería generar 9.
N = 10 resultados en AK
. Ejecutar esto debería generar 10.
N = 11 resultados en AL
. Ejecutar esto debería generar 11.
N = 12 resulta enAM
. Ejecutar esto debería generar 12.
N = 13 resultados en AN
. Ejecutar esto debería generar 13.
N = 14 resultados en AO
. Ejecutar esto debería generar 14.
N = 15 resultados en AP
. Ejecutar esto debería generar 15.
N = 16 resultados en A
. Ejecutar esto debería generar 16.
Detalles
- Todos los caracteres están permitidos, ASCII y no ASCII. (También se permiten líneas nuevas y ASCII no imprimibles. Tenga en cuenta que el retorno de carro y el avance de línea cuentan como caracteres distintos).
- Su puntaje es la longitud en caracteres de su programa inalterado (15 en el ejemplo). El puntaje más bajo gana.
- Una puntuación por debajo de 16 es claramente imposible porque entonces al menos dos de los programas alterados serían idénticos.
- La salida puede ser a un archivo o stdout o cualquier otra cosa razonable. Sin embargo, la salida de los 16 programas diferentes debe ir al mismo lugar (por ejemplo, no está bien si
AO
va a stdout peroA
va a un archivo). No hay entrada - La salida debe estar en decimal, no hexadecimal. La salida real solo debe contener los 1 o 2 caracteres que componen el número del 1 al 16, nada más. (Cosas como las de Matlab
ans =
están bien). - Su programa no tiene que funcionar para N = 17 o superior.
fuente
ABCDEFGHIJKLMNO
yN = 15
, el código de resultado es justoA
.Respuestas:
APL, 49
Programas alterados
Explicación
Comenzaré desde abajo ya que facilitaría la explicación
Hay dos características de lenguaje de APL a tener en cuenta. Uno, APL no tiene prioridad de operador, las declaraciones siempre se evalúan de derecha a izquierda. Dos, muchas funciones APL se comportan de manera bastante diferente dependiendo de si se le da un argumento a su derecha (monádico) o dos argumentos a su izquierda y derecha (diádico).
Monadic
⌊
es redondeado hacia abajo (función de piso), Dyadic×
es obviamente una multiplicación,⍝
comenta el resto de la línea.
9:
⌊/9×1
/
es reducir. Básicamente toma la función de la izquierda y la matriz de la derecha, inserta la función entre cada par de elementos de la matriz y evalúa. (Esto se llama "plegar" en algunos idiomas)Aquí, el argumento correcto es un escalar, por lo
/
que no hace nada.8:
⌊|8×× 2
Monadic
×
es la función signum y monadic|
es la función de valor absoluto Entonces, se× 2
evalúa1
y|8×1
es, por supuesto,8
7:
⌊11-4 ⍝
debería ser obvio6:
⌊⍟19×51⍝2
Monadic
⍟
es un registro naturalEntonces,
⍟19×51
evalúaln(19×51) = 6.87626...
y⌊
redondea a6
5:
⌊⍟21×○5
Monadic
○
multiplica su argumento por π⍟21×○5
esln(21×5π) = 5.79869...
4:
⌊7|18××4×1 ⍝2
Dyadic
|
es la función mod que se×4×1
evalúa1
y7|18×1
es18 mod 7 = 4
3:
⌊○⍟/119-××5 1 ⍝ 2
los valores separados por espacios son una matriz. Tenga en cuenta que en APL, cuando la mayoría de las funciones escalares son argumentos de matriz, es un mapa implícito.
Dyadic
⍟
es logEntonces
××5 1
, es signum of signum en 5 y 1, lo que da1 1
,119-1 1
es¯118 ¯118
(¯
es solo el signo menos. APL tiene que distinguir entre números negativos y resta), y⍟/¯118 ¯118
es log -118 (-118) = 12:
⌊⍟7⍟|21189×1×345× 1 ⍝⍝_2
Puedes resolverlo tú mismo
1:
⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_× 1_ _⍝_⍝ __2
Este consiste en un uso más complicado de
/
. Sin
es un número,F
es una función yA
es una matriz,nF/A
toma cada grupo den
entradas consecutivasA
y aplicaF/
. Por ejemplo,2×/1 2 3
toma cada par de entradas consecutivas (que son1 2
y2 3
) y se aplica×/
a cada grupo para dar2 6
So,
1|/2111118 9
solo retorna2111118 9
(como se aplica|/
a los escalares). Luego,⍟○7⍟⍟
aplica ln, luego registra 7 a esos números, luego los multiplica por π y ln nuevamente. Los números que salen del otro lado están1.46424... 0.23972...
aquí,
⊃
solo se usan para seleccionar el primer elemento de una matriz.fuente
Python -
12011137 (generador:241218) - ¡Vivan los hashes!Estrategia:
Traté de comenzar cada línea con tantos hashes como la salida deseada
n
. Entonces, todas las demás versiones omitirán esta línea por completo.La principal dificultad, sin embargo, fue agregar el número correcto de hashes para que la próxima ejecución llegue exactamente al comienzo de la siguiente línea. Además, pueden producirse interferencias con otras versiones, por ejemplo, la versión 16 salta directamente al
print
comando de la línea 5 y así sucesivamente. Así que esto fue una gran cantidad de prueba y error combinados con un script auxiliar para pruebas rápidas.Estadísticas:
1201113710661002 (88,1%)Código:
Script de prueba:
Salida:
Actualización: ¡Un script generador!
Pensé en mi solución y que debe haber un patrón para generarla algorítmicamente. Así que, aquí vamos:
Construye el programa línea por línea:
i
con elprint i
comando y losi - 1
hashes entre cada dos caracteres vecinos.print i
(debido a una desalineación) o cualquiern
versión conn in range(1, 17)
una excepción, agrega otro hash a la línea anterior.En realidad, devolvió un programa más corto que el que encontré manualmente esta mañana. (Así que actualicé mi solución anterior). Además, estoy bastante seguro de que no hay una implementación más corta siguiendo este patrón. ¡Pero nunca se sabe!
Versión golfizada -
241218:Tenga en cuenta que puede haber un generador más corto, por ejemplo, codificando el número requerido de hashes sucesivos para cada línea. Pero éste los calcula por sí mismo y podría usarse para cualquier N> 16.
fuente
p 1
lugar deprint 1
.Befunge 93: cinco millones setecientos sesenta y cinco mil setecientos setenta y seis caracteres
Exijo que me tomen en serio ...
3 razones por las cuales 1.a razón: un script befunge siempre es 80x25, así que no importa qué, debe haber algo que se reduzca en las líneas con código. 2da razón: por qué ese algo tiene aproximadamente 5.5 millones de espacios es porque 720 720 es el múltiplo común más pequeño de 1 a 16 ... Significa que no habrá desorden cuando salteamos caracteres. Tercera razón: wow, esto es bastante absurdo.
fuente
209 caracteres (varios idiomas)
Solo traté de mantener las cosas simples y evitar poner algo en posiciones con muchos factores primos. La ventaja es la capacidad de ejecutarse en muchos lenguajes de secuencias de comandos. Debería funcionar en cualquier idioma que no sea deliberadamente perverso y tenga las siguientes características:
Por ejemplo,
Intérprete de línea de comandos de Python 2 (aunque no de un archivo):
MATLAB (simplemente reemplace '#' con '%'):
NB Debe haber 17 espacios antes del primer '1'. Ustedes saben muchos idiomas, así que por favor, ayúdenme a enumerar más de lo que podría ejecutarse (:
EDITAR: Se agregó unario + en la posición 0 para Python para evitar que la línea se sangra.
fuente
IndentationError
carrera en la línea de comando. Pero tal vez no usó la sintaxis de rebaja correcta al publicar el código aquí.unexpected indent
en la consola Python 2.7 también. Pero funciona en Matlab, así que no te preocupes. Creo que también funciona en Ruby.CJam, 89 bytes
Este enfoque no utiliza ningún tipo de comentarios.
i
se convierte en entero, por lo que es un noop aquí. Podría ser reemplazado por espacios en blanco, pero las letras me parecen más legibles ...Pruébelo en línea ejecutando el siguiente código :
Ejecución de ejemplo
fuente
GolfScript, 61 bytes
Esto aprovecha los comentarios (
#
) y los "supercomentarios" no documentados (todo lo que sigue a un no}
coincidente se ignora en silencio)._
Es un noop. Podría ser reemplazado por espacios en blanco, pero los guiones bajos me parecen más legibles ...Pruébalo en línea.
Ejecución de ejemplo
fuente