A pesar de su protesta, su jefe lo puso a trabajar en un programa que toma un solo entero sin signo como entrada e imprime la cadena "primo" si ese entero es primo y "no primo" si no lo es. Puede elegir en qué idioma hacer esto, siempre que el programa resultante sea corto; tu jefe aprecia mucho el bajo recuento de caracteres. (Realmente contará manualmente los caracteres después de imprimir el código fuente).
Así que es mejor que lo hagas, gana el recuento de caracteres más bajo.
La parte divertida
Esto es solo entre usted y yo, pero su programa también debe ser válido en otro idioma. Sin embargo, en este lenguaje, debería imprimir la cadena "Si el jefe encuentra esto, renuncio". Asegúrate de que tu jefe no descubra que hay un insulto oculto al leer el código una y otra vez, ya que siempre se olvida si había contado hasta 17 o 18 hasta ahora. Por esa razón, no puede usar ninguna de las palabras en "el jefe encuentra esta salida" en parte del código ni puede usar anagramas de esas 5 palabras.
Desafío de bonificación para el que he creado una recompensa
Escriba un programa que realmente parezca que solo resuelve la primera pregunta para el ojo inexperto y no parece contener caracteres innecesarios. Esto incluye comentarios y segmentos de código que obviamente no aportan nada. Idealmente, un laico creería que su programa es en realidad lo más corto posible sin ser inmanejable. Sin embargo, un comentario útil aquí y allá está bien.
Las reglas para el desafío de la bonificación son un poco más flexibles, en lugar de ser juzgadas según criterios fácilmente medibles, su programa será juzgado más sobre cómo se me presenta (y a los votantes, por supuesto)
Seré el juez final de cuál entrada se acerca más a merecer esta recompensa.
Editar:
Después de unos minutos de contar a tu jefe, hizo que uno de tus colegas escribiera un programa de conteo de personajes para él. Por lo tanto, incluso los personajes que no son visibles cuentan para tu personaje.
Respuestas:
CJam ( GolfScript ),
6059 bytes¡Gracias a @mnbvmar por jugar golf en 1 byte!
Cómo funciona (CJam)
Pruébalo en línea!
Cómo funciona (GolfScript)
Pruébalo en línea!
fuente
Python 2 / Python 3 - 128
Identifica números primos con Python 2 , te mete en problemas con Python 3 .
Prima
¡Pruébalo con Python 2 o Python 3 ! (En contraste con la versión de golf anterior, los roles cambiaron: Python 3 es el identificador de número primo. Python 2 contiene el huevo de Pascua).
¡Por favor, disculpe mi mal inglés en el texto de ayuda! ;)
Y uso la palabra "dejar de fumar". Pero de alguna manera necesito describir cuándo termina mi programa. ;)
fuente
/
problema"? (división entera vs. división de coma flotante)Envío de bonificación (C / C ++ 11)
La prueba de primalidad utilizando el método ingenuo habitual es muy convencional. ¡Es por eso que he inventado un nuevo método ingenuo aleatorizado! Esta prueba es la siguiente:
sqrt(n)
.not prime
.20sqrt(n)
tiempos de prueba , salidaprime
, de lo contrario repita.Si el número es compuesto, hay muy poca probabilidad (alrededor de 10 -9 ) de que no funcione. Por supuesto, no creo que el generador de números pseudoaleatorios C / C ++ sea lo suficientemente potente. ¡Es por eso que uso mi propio generador LFSR de 256 bits !
C ++ 11 funciona correctamente. Sin embargo, el compilador de C parece estar generando un programa defectuoso para n> 2 ...
Nota : recuerde que C necesita la
-lm
opción (biblioteca matemática de enlaces) para compilar con éxito.Si encuentra la siguiente salida defectuosa:
incorrecto, simplemente elimine la
fprintf
línea apropiada .fuente
Mathematica / Brainfuck, 260
fuente
Golfscript / Javascript (126
125129130132134205207)Pruebe Golfscript aquí y Javascript aquí .
Diría que es sorprendentemente cercano a esas soluciones de Mathematica que, después de todo, tienen un cheque incorporado para números primos.
Editar: ¡ Gracias a Peter por guardar otros
dosseis bytes!Aquí hay algunos detalles:
1.
es necesario porque el siguiente//
es un comentario en Javascript, pero realiza la división dos veces en Golfscript. Esto generará un error si no hay nada en la pila, por lo que debemos darle dos números. Por cierto,1.
es una sintaxis perfectamente válida en Javascript y simplemente será ignorada."…"{(}%
toma la cadena, disminuye sus valores de código de caracteres en uno y la empuja como una cadena. Esto da como resultado la cadena que necesitamos imprimir.'
inicia una cadena en Golfscript que, de manera predeterminada, se extiende sobre varias líneas, lo que hace que el Javascript a continuación solo se coloque en la cadena.';#'
cierra la cadena de varias líneas en Golfscript, la descarta y luego ignora el resto de la línea. En Javascript, esto es simplemente un literal de cadena que será ignorado.fuente
1+
es)
. Y1 1
es1.
, con lo que sospecho que el JS estaría tan feliz como1
{)}/]""+
podría ser{)}%
.C ++ / C99 / C90 - 248
El código se ejecutará bien en C90, pero puede mostrar algo más en C99 / C ++.
Sin golf para mayor claridad:
Cómo funciona esto: como C90 no reconoce los comentarios de una sola línea, la cadena del problema ya no se multiplica por cero.
fuente
for
. Imprime "not not prime" siprime
n
al principio establece el número primo que se va a encontrar.prime
para cero y uno, como pqnet notó anteriormente.CJam / Ruby,
132959187Mi solución anterior fue significativamente sobre ingeniería; Este se inspiró en gran medida en la solución de Martin Büttner, incluida su comprensión de que el
#bytes
método aparentemente puede tomar un bloqueo.¿Como funciona?
El carácter de comentario de Ruby (
#
) es el operador de exponenciación en CJam, por lo que necesitaremos al menos dos números en la pila antes de comenzar, pero dos números desnudos (0 0
) es un error de sintaxis en Ruby. Sin embargo, uno está bien y, útilmente, los números de Ruby pueden contener guiones bajos como separadores (1_234
)._
es el operador de duplicación de CJam, por lo que debemos hacer pop dos veces (;;
) una vez que estemos dentro del comentario.limp
lee una línea desde la entrada estándar, la convierte en un número entero, la saca y empuja si es primo o no.Para ingresar al modo Ruby, abrimos una cadena y continuamos en la siguiente línea para que ya no estemos en el comentario de Ruby (por lo tanto, la nueva línea es significativa y debe contarse). Cada carácter del mensaje se decodifica e imprime, y luego comenzamos otro comentario de Ruby para que podamos cerrar con seguridad la cadena de CJam antes de abrirla. Lo que queda en la pila es si la entrada fue primordial o no, lo que se imprime al finalizar el programa CJam.
CJam / Whitespace, 353 caracteres (25 significativos cuando se imprimen)
Dada la naturaleza encubierta del desafío y el hecho de que el jefe imprimirá nuestros programas para contar los personajes, acepté la sugerencia de hacer una solución que involucrara a Whitespace .
Contrariamente a mi afirmación anterior de que el programa Whitespace más corto posible que imprime "Si el jefe encuentra esto, renuncio". serían 372 caracteres, este lo hace en 330. El truco consiste en utilizar la
copy
instrucción para extraer caracteres repetidos de algún lugar de la pila en lugar de presionar todos los valores ASCII, que siempre serán mucho más grandes y, por lo tanto, requerirán más espacios y pestañas para codificar. Aquí hay una representación de pseudoensamblaje del programa para curiosos:fuente
#chars
y#lines
también, que tendré que tener en cuenta para futuros desafíos.chars
y no funcionó por alguna razón.limp4*"not prime">
para que sea aún más cortoEnvío de premio adicional (Perl / B? F? N? E-? 3)
Editar: Originalmente olvidé imprimir la oración y luego noté que la imprimiría en orden inverso. Me di cuenta de esto después de haber terminado. Estaba a punto de matar a un gatito, pero lo arreglé ahora.
Esto ya no es corto, pero creo que hacerlo poco útil y corto es una tarea extremadamente difícil. Principalmente he reutilizado una de mis presentaciones de golf reales, pero en esta diría que el segundo idioma es realmente difícil de detectar.
Si el jefe encuentra esto, realmente renuncio, porque nunca podré insultarlo en secreto y si no puedo hacerlo, ¿qué sentido tiene?
Doblar
y romperlas reglas:Estoy usando la palabra "the" allí, pero no es "the" lo que se imprime. Puede ser técnicamente inválido, dejaré que el OP decida si las reglas deben ser tan estrictas para el desafío de bonificación. Si es así, que así sea.fuente
^
= subir). Ciertas cartas de comentarios se colocan en una pila, que se imprime al final, imprimiendoIf the boss finds this, I quit.
Vea el ejemplo a través de la URL en la reacción de Ingo:"!dlrow olleH">:#,_@
Mathematica / Ruby,
115106bytesLa parte de Mathematica se inspiró ligeramente en la presentación de Peter Olson, pero la políglota con Ruby es un poco más elaborada aquí.
Ruby funciona, porque los dos
#
comentan todo lo que es Mathematica. La razón por la cual Mathematica funciona es un poco más interesante. El código que quiero ejecutar es:Pero eso no es válido Ruby, así que necesito agregar un
#
lugar.#
es el parámetro de Mathematica para funciones anónimas. Así que pongo#
al frente, que multiplica el argumento con el resultado deIf
. Sí, lo multiplicará con una cadena , lo que sea que eso signifique. Luego convierto esto en una función anónima con&
y lo llamo inmediatamente con argumento1
. Bueno, Mathematica es lo suficientemente inteligente como para saber que la multiplicación por 1 es siempre la identidad y solo genera la cadena. Luego, el código Ruby simplemente se coloca en un comentario de bloque.fuente
C (Presentación de bonificación)
La versión C es un verificador principal, matriz de entrada en la parte superior. Trata de adivinar qué idioma produce
If the boss finds this, I quit.
(no es espacio en blanco).El otro idioma:
fuente
Perl / Befunge-93 (108
106110)Mi segunda presentación, solo porque. También usa expresiones regulares. Apuesto a que hay una mejor opción que Perl, por ejemplo, Octave, pero no pude encontrar la forma de imprimir condicionalmente de una manera corta.
Estoy abusando de la regla para que se imprima la cadena, ya que evito los anagramas al dividirla en varias cadenas.
El número a verificar se toma de stdin.
if
lugar deunless
4 bytes guardados.fuente
Lua / PBrain (Brainf * ck procesal) - 813
Je ... Lo siento, me quedé atrapado tratando de ser tortuoso. PBrain es como BF, pero le permite activar y definir bloques reutilizables de código BF. Su uso era completamente innecesario.
fuente
Python 2 / Rot13 - 270 Bytes (69 sin contar comentarios)
Esto utiliza un algoritmo muy simple (es decir, ineficiente). Cuando se ejecuta con rot13 (posiblemente no es un lenguaje de programación), produce la oración requerida (junto con otras tonterías).
La peor parte es que los comentarios dicen lo obvio y de todos modos son bastante inútiles.
Este es un políglota de otra manera, al contener inglés y "esperanto". Espero que el jefe no sea un políglota.
fuente
05AB1E / Jelly , 28 bytes
¡No uno, sino DOS idiomas de golf!
Explicación en 05AB1E:
Explicación en gelatina:
Pruébalo en línea! (Jelly) ¡ Pruébalo en línea! (05AB1E)
fuente
Python, 403 bytes
Esto está destinado para el desafío de bonificación. Los comentarios no cuentan para el bytecount.
Las pruebas en la parte inferior del código se imprimen:
Ese número entero máximo que definí (mi) esconde el secreto. Si se convierte en hexadecimal, la representación de la letra ASCII de cada dos dígitos del hexadecimal hace que "si el jefe encuentra esto, renuncio". La parte disimulada está usando la función chr. Si el jefe sabe lo que hace y está mirando con suficiente cuidado, sabrá que el código oculta un mensaje secreto. Sin embargo, lo ofusqué un poco y proporcioné suficiente explicación a todo el número entero máximo para, con suerte, asegurarle al jefe que es una parte legítima del programa.
Tenga en cuenta que para la mayoría de los parámetros funciona como lo desea el jefe, pero si la entrada no es un número entero o el número es de alguna manera mayor que mi, p devuelve el error que contiene la cadena oculta. Podría haber puesto una llamada de impresión dentro de la función, pero pensé que se vería más real si se devolviera.
fuente
C # - 288
Ciertamente no es el más corto, pero podría pasar por muchos jefes:
Una versión legible:
fuente