Elija cualquiera de los cinco caracteres que admite su idioma. Hay 5! = 5 × 4 × 3 × 2 × 1 = 120 formas en que se pueden organizar en una cadena de 5 caracteres que contiene cada carácter una vez; 120 permutaciones .
Elija sus caracteres de modo que, cuando cada una de las 120 cadenas se ejecute en su idioma, las 120 salidas producidas sean tantos enteros únicos del 1 al 120 (inclusive) como sea posible.
Es decir, para cada una de las 120 permutaciones de sus 5 caracteres que producen código ejecutable que genera un solo número, desea que el conjunto de todos esos números coincida lo más cerca posible del conjunto de enteros del 1 al 120.
Entonces, idealmente, su primera permutación saldría 1
, la siguiente 2
, la siguiente 3
, hasta el final 120
. Pero ese ideal es probablemente imposible para la mayoría de los idiomas y caracteres.
Las cadenas de 5 caracteres se pueden ejecutar como:
- un programa sin entrada
- una función sin argumentos
- un comando REPL
Se pueden ejecutar diferentes cadenas de diferentes maneras si se desea
Para que la salida cuente, debe ser una única salida entera de una manera normal , como:
- ser impreso en stdout
- devuelto por la función
- El resultado de la expresión REPL
El código debe terminar normalmente (lo que puede implicar un error siempre que el número se haya enviado primero). El código que no se ejecuta está bien, solo la salida (inexistente) no cuenta. La salida de los números debe estar en decimal a menos que una base diferente sea la norma para su idioma.
La presentación que genera los números más distintos del 1 al 120 gana. La presentación anterior gana en caso de empate.
Notas
- No es necesario que todos sus 5 caracteres sean diferentes, pero, por supuesto, tener caracteres duplicados reduce el número efectivo de permutaciones.
- Salidas flotantes, como
32.0
recuento y sin formato32
. (Pero32.01
no lo haría) - Ceros a la izquierda, como el
032
recuento y el simple32
. - Las salidas válidas deben ser deterministas e invariantes en el tiempo.
- Estamos tratando con caracteres , no con bytes.
Ejemplo
Los personajes 123+*
son una primera opción razonable para REPL de Python (o muchos idiomas). Las 120 permutaciones y salidas resultantes son:
123+* n/a
123*+ n/a
12+3* n/a
12+*3 n/a
12*3+ n/a
12*+3 36
132+* n/a
132*+ n/a
13+2* n/a
13+*2 n/a
13*2+ n/a
13*+2 26
1+23* n/a
1+2*3 7
1+32* n/a
1+3*2 7
1+*23 n/a
1+*32 n/a
1*23+ n/a
1*2+3 5
1*32+ n/a
1*3+2 5
1*+23 23
1*+32 32
213+* n/a
213*+ n/a
21+3* n/a
21+*3 n/a
21*3+ n/a
21*+3 63
231+* n/a
231*+ n/a
23+1* n/a
23+*1 n/a
23*1+ n/a
23*+1 23
2+13* n/a
2+1*3 5
2+31* n/a
2+3*1 5
2+*13 n/a
2+*31 n/a
2*13+ n/a
2*1+3 5
2*31+ n/a
2*3+1 7
2*+13 26
2*+31 62
312+* n/a
312*+ n/a
31+2* n/a
31+*2 n/a
31*2+ n/a
31*+2 62
321+* n/a
321*+ n/a
32+1* n/a
32+*1 n/a
32*1+ n/a
32*+1 32
3+12* n/a
3+1*2 5
3+21* n/a
3+2*1 5
3+*12 n/a
3+*21 n/a
3*12+ n/a
3*1+2 5
3*21+ n/a
3*2+1 7
3*+12 36
3*+21 63
+123* n/a
+12*3 36
+132* n/a
+13*2 26
+1*23 23
+1*32 32
+213* n/a
+21*3 63
+231* n/a
+23*1 23
+2*13 26
+2*31 62
+312* n/a
+31*2 62
+321* n/a
+32*1 32
+3*12 36
+3*21 63
+*123 n/a
+*132 n/a
+*213 n/a
+*231 n/a
+*312 n/a
+*321 n/a
*123+ n/a
*12+3 n/a
*132+ n/a
*13+2 n/a
*1+23 n/a
*1+32 n/a
*213+ n/a
*21+3 n/a
*231+ n/a
*23+1 n/a
*2+13 n/a
*2+31 n/a
*312+ n/a
*31+2 n/a
*321+ n/a
*32+1 n/a
*3+12 n/a
*3+21 n/a
*+123 n/a
*+132 n/a
*+213 n/a
*+231 n/a
*+312 n/a
*+321 n/a
Se generan 36 números, todos afortunadamente entre 1 y 120:
36, 26, 7, 7, 5, 5, 23, 32, 63, 23, 5, 5, 5, 7, 26, 62, 62, 32, 5, 5, 5, 7, 36, 63, 36, 26, 23, 32, 63, 23, 26, 62, 62, 32, 36, 63
Sin embargo, solo 8 de ellos son únicos:
36, 26, 7, 5, 23, 32, 63, 62
Por lo tanto, tal presentación solo obtendría 8 de un máximo de 120.
fuente
c
lenguajes similares!Respuestas:
Python3,
2127 valoresCaracteres:
3479%
Números únicos
[1,2,3,4,5,6,7,8,9,11,12,19,20,21,24,29,34,35,36,37,39,43,46,47,49,73,74]
Como se solicitó, aquí están las permutaciones que cayeron en el rango [1, 120] . Pruébalo en línea!
fuente
/
está la división de enteros?5679%
y5789%
5679%
y5789%
unos) probablemente también sean óptimos para PowerShell.5679%
y5798%
) también a través de una búsqueda exhaustiva en todas las combinaciones de0123456789+-*/&|^#%
con reemplazo. Estoy de acuerdo en que estos son probablemente óptimos.05AB1E ,
273841 númerosGenera los números únicos:
[4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 25, 27, 32, 33, 34, 35, 36, 37, 38, 49, 50, 52, 54, 64, 65, 66, 67, 72, 73, 74, 81, 83, 98, 100, 101, 102]
Utiliza la constante de
4
las operaciones+1
,+2
,*2
y^2
.fuente
-
lugar de+
producir una variedad más amplia de resultados en función de su propiedad no conmutativa?-
, pero nunca obtuve más de 30 números únicos. Un problema es que también obtienes valores negativos que están fuera del rango. Quizás con algunos otros operadores reemplazados podría ser mejor, pero no he encontrado una mejora hasta ahora.Python, 18 números
Produce como resultados válidos:
EDITAR: puedo dar fe de que la solución de TuukkaX es óptima para Python. Ejecuté el siguiente código que aplica todas las combinaciones posibles de 5 caracteres ASCII imprimibles:
Los resultados (después de correr durante casi 7 horas) mostraron que la solución óptima es de hecho 27 números diferentes, producidos por tres soluciones diferentes, todas utilizando cuatro números y MOD (
%
):%3479
,%5679
y%5789
.fuente
Java 8,
24 númerosNo esperabas una respuesta de Java, ¿verdad?
Esta es una lambda que solo se puede organizar de dos maneras (¡y con dos dígitos diferentes!) Para un total de dos números únicos. Todo lo demás no es una lambda válida.
En realidad mejoró la respuesta, gracias a la ayuda de los comentarios! No vi que 0 no era válido, y olvidé que las variables podrían, ya sabes, tener más de un carácter. ¡Tenemos 4!
Una solución aún peor
()->1
Pero, por el lado positivo, ¡dos respuestas únicas en Java!
fuente
n->12
. Esto le da cuatro respuestas distintas que son todo dentro de la gama:n->12
,n->21
,n1->2
,n2->1
.Gelatina,
263032 númerosEsto (y sus anagramas) son programas completos, que no toman entrada y producen salida en salida estándar.
Los resultados de los 120 programas son, en el orden en que Jelly los genera si le pide que genere permutaciones del programa:
Si solo toma las salidas únicas en orden numérico, obtendrá:
Muchos de estos son demasiado pequeños, y 135 es demasiado grande, pero todavía hay 32 que están dentro del rango.
La idea básica es utilizar principalmente instrucciones monádicas (en un programa con solo mónadas y nilas, cada una de ellas solo transforma la salida anterior) y otras que permiten que el valor diverja rápidamente. La excepción es con
3
, que es un nilad (el valor constante 3). Si aparece al comienzo del programa, todas las operaciones se realizarán desde 3. Si aparece en el medio, divide el programa en dos mitades, cada una de las cuales genera un número entero (y cada una imprime a la salida estándar, los resultados terminan siendo concatenados, lo que nos da "concatenar" como una operación adicional para generar números).Las operaciones que tenemos aquí, en el contexto en el que las genera el programa, son: incremento; decremento; constante 3; cuadrado; y doble Lamentablemente, el aumento y la disminución son opuestos, y la disminución tiene una desafortunada tendencia a producir un -1 o -2 en la primera sección (lo que lleva a un número negativo en general), pero esto aún dio una mayor difusión de resultados que las otras cosas que probé . En particular, obtenemos una distribución bastante buena tanto de la primera como de la segunda mitad del número (tenga en cuenta que la primera mitad puede ser la cadena nula, si
3
es el primer carácter del programa).fuente
Œ¿
como la diádicaœ¿
(ver cerca de la parte inferior de la página de átomos de Wiki ), pero ambas son díadas de 2 bytes, lo que reducirá las permutaciones de código que hacen lo que quieres, además necesitarías todas sus entradas para ser listas (12
no es una lista).JavaScript, 27 números
Muy similar a la respuesta de TuukkaX , con otro conjunto de dígitos.
Los 27 valores distintos son:
fuente
~
ayuda? Es una operación unaria que puede ser útil.~
es257&~
que produce 11 valores distintos.Brachylog , 26 números
Esto genera los siguientes números:
[2,3,4,5,6,7,8,9,10,16,17,18,19,20,25,26,30,31,32,35,36,37,48,49,63,64]
Explicación
3
es el entero 3, obviamente.+
es incremento*
es doble^
es cuadrado-
es decrementoHay muchas situaciones en las que el programa simplemente comete errores: por ejemplo,
*+^3-
errores porque pregunta "Tome 0, duplíquelo, incremente, cuadrado, el resultado de ese cuadrado es 3, decremento", lo cual obviamente es incorrecto.Cualquier programa que termine con
3
saldrá3
o no funcionará.Cualquier programa que comience con
*3
un bucle infinito debido a un error (Brachylog está intentando encontrar una lista de sublistas cuyo producto da como resultado 3 que no es posible).fuente
Vim, 16 números
impresión
fuente
3
y el4
ir? Necesita todas las permutaciones de longitud 5.i1234
imprime "1234", ¿se trata de algún tipo de secuencia de comandos o pulsaciones de teclas? Si se presiona una tecla, no funciona.Código de máquina IA-32, 8 números
Valores de bytes hexadecimales:
El código se ejecuta como una función que devuelve el valor en
al
.Permutaciones válidas:
Hice una búsqueda de fuerza bruta, con las siguientes restricciones:
b0
- para inicializar elal
registroc3
- return; los siguientes bytes se descartanadd
or
and
sub
xor
aad
inc
dec
Esto deja solo 3 bytes modificables con un máximo de 15 resultados posibles. De estos, un máximo de 9 puede ser distinto (de hecho, ¡esto sucede solo para un conjunto de bytes!). Uno de los valores está fuera de rango, por lo que deja 8 valores. Hay otro conjunto de bytes
que también proporciona 8 valores distintos: los programas son los mismos, excepto que se
sub
reemplazan porxor
, lo que hace que dos de las salidas posibles sean idénticas.Todos los demás conjuntos de bytes dan 7 o menos resultados posibles.
fuente
Gelatina , 33 números
Ḥ
doble (izquierda);2
literal 2;3
literal 3;+
agregar (izquierda, derecha); yc
elija (izquierda, derecha), es decir, varias formas de elegir los objetos correctos de una colección de objetos izquierdos.Números producidos con un programa de ejemplo:
Traté de elegir los que son fáciles de analizar, pero algunos son raros y un poco extraños, por ejemplo
23
es:... y
72
y13
utilizar la impresión implícita:Tenga en cuenta que
Ḥ34+c
también produce33
valores únicos en[1,120]
.fuente
Brain-Flak 1
Brain-Flak requiere llaves equilibradas, por lo que un programa de 5 caracteres solo es válido si uno de los personajes comienza un comentario. Eso nos deja con 4 personajes para trabajar. De esos, 2 tienen que serlo
(
y de lo)
contrario nada se empujaría a la pila. Esos tienen que ir primero y cuarto con el último comentario ((..)#
). Ahora podemos poner()
,{}
,<>
, o[]
en el interior.{}
,,<>
y[]
cada uno evalúa a 0, pero()
es 1. Eso significa que(())#
es la única cadena de 5 caracteres que produce un programa Brain-Flak válido.Pruébalo en línea!
Si la pregunta fuera "cuáles son los 6 personajes más poderosos", la respuesta sería
(){}[]
que Brain-Flak se está completando usando solo este subconjunto.fuente
@ij
indicador de depuración detiene el programa y permite al usuario ingresar el código de brain-flak para que se ejecute donde@ij
apareció el indicador en el código. Bastante potente, pero desafortunadamente requiere la intervención del usuario, por lo que no es útil aquí.(){}[]
obtendría 0. Olvidó la regla de permutaciones;)Hexagonía , 13 números.
Estos son los 13 números imprimibles con un posible programa para cada uno de ellos:
Los programas deberían explicarse bastante por sí mismos.
@
finaliza el programa,!
imprime el valor actual, lo)
incrementa2
y se4
agrega al valor actual (donde está el valor inicial0
). El diseño hexagonal real del código fuente es irrelevante aquí, los programas simplemente se pueden leer de izquierda a derecha.Esto debería ser óptimo, aunque en lugar de
2
y4
puede elegir cualquier par de dígitosx
yy
tal2 ≤ x ≤ y-2
.La solución anterior fue encontrada por la fuerza bruta (casi exhaustiva), requiriendo una
!
(de lo contrario no imprimiría nada), una@
(de lo contrario, el programa no terminará) y llenando los tres caracteres restantes con cualquier combinación (repetida) del siguiente conjunto de caracteres:No puedo ver cómo cualquiera de los otros comandos podría generar más variedad.
fuente
Perl, 27 números
3479%
Perl no tiene un REPL incorporado, por lo que puede usarlo
re.pl
desde Devel :: REPL .Resultados:
Brute-force usando el siguiente programa:
fuente
perl -de 1
poco de tiempo. Esto técnicamente abre el depurador en un programa vacío, pero el depurador tiene un REPL-like incorporado. Desafortunadamente, necesita escribirp
al comienzo de cada línea para que realmente imprima el resultado.R,
1518 númerosNo es un gran número, pero puede ser lo mejor que se puede hacer con R. Busqué en todas las combinaciones de dígitos
0..9
, operadores+ - * / ^
y el comentario de caracteres#
, y los siguientes ocho arrojaron 18 enteros únicos entre 1 y 120.Como ejemplo, tomemos
-#146
. Aquí están los 18 enteros que podemos obtener:Si tiene curiosidad sobre el código (feo) utilizado para probar todas las combinaciones posibles, aquí está. Produce el número de enteros únicos entre 1 y 120 para cada combinación de caracteres de longitud 5 en un archivo llamado "archivo de datos" en el directorio de trabajo actual.
fuente
Octava, 18
Esto se encontró usando una búsqueda de fuerza bruta en los símbolos
*+-/0123456789:;<\^|~%
. Pero tomó demasiado tiempo calcular ...Salidas posibles:
fuente
Octava, 15 números
No hay mucho de qué jactarse, pero esto es lo mejor que puedo obtener en Octave:
Da los números:
También obtuve 16, pero parece que es idéntico a la respuesta de Sefa ...
fuente
0123456789+-*.%
por octava es139-%
, que produce una matriz de 18:1 2 3 4 6 8 9 13 16 19 22 31 38 39 88 91 92 93
. Para que pueda obtener otros 3 números :)PHP, 15 números
Utiliza el hecho de que php imprime cualquier cosa fuera de sus etiquetas textualmente (sin usar esto, puede hacer exactamente 1 número con algo así
<?=1;
). También usa un carácter de retorno de carro real en lugar de\r
.Crea (ordenó, eliminó los ceros iniciales):
de los cuales los números únicos válidos son:
fuente
12\r30
imprime12\r30
, el terminal simplemente sobrescribe los dos primeros caracteres.\r
no es imprimible, la salida de12\r30
es30
.Cubix , 7 números
Salidas estos números:
Cualquier programa Cubix válido para este desafío debe tener un
O
resultado para un entero y un@
final del programa (Cubix nunca ha oído hablar de "errores"). Esto nos da 3 caracteres para jugar y generar la mayor cantidad de resultados. Además, debido a la forma en que Cubix organiza el código en un cubo, el primer carácter será inútil a menos que uno de los otros sea un carácter direccional.La forma más eficiente que he encontrado para generar múltiples números es usar
"
para empujar una cadena de códigos de caracteres a la pila. Con un reordenamiento cuidadoso, podemos colocar varios caracteres en el último lugar y simplemente generar sus códigos de caracteres. Mediante el uso)
para incrementar el elemento superior, podemos crear salidas adicionales a partir de varios de estos arreglos.Hay dos tipos de programas básicos en uso aquí. El primero es este:
que se expande a
El programa resultante empuja
2
a la pila, lo incrementa con)
, emiteO
y termina con@
.El segundo es este:
que se expande a
El programa resultante empuja los códigos de caracteres de
)
,O
y@
, incrementa el último con)
, emite conO
, y termina con@
.fuente
> <> , 6 números
Obtuvo 2 números gracias a Teal Pelican
Produce los números únicos.
[1, 4, 5, 49, 59, 108]
Necesitamos
n
imprimir un número.Necesitamos
;
terminar.Eso nos deja solo 3 caracteres para trabajar.
Algunas combinaciones diferentes de
value
&operator
junto con"
confirmado para producir 6 valores únicos, pero no he encontrado nada mejor que eso.fuente
Groovy, 10 números
Las soluciones de Man JVM son MALAS para esto ... ¿Quién sabía?
Resultados en:
¿Esperar lo? ¿Cómo demonios hace 17 preguntas?
Secreto comercial, en Groovy / Java, los enteros precedidos por un 0 son octales. Código que usé para probar las respuestas de Groovy en caso de que alguien quiera vencerme:
fuente
MATL, 15 números
%
es el operador de comentarios, por lo que "cortará" en todos los lugares posibles una vez, lo que ayudará a crear todas las combinaciones posibles de los dígitos y subconjuntos dados:fuente
J, 16 números
Nada lujoso, solo probado
1234
con todos los verbos de 1 carácter que eran razonables.]
selecciona su argumento correcto.Los números únicos producidos son
de los cuales 16:
Están en el rango [1.120].
Probado con
fuente
Japt , 41 números
Prácticamente solo prueba y error, por lo que puede haber una mejor solución. Utiliza números enteros
3
&4
y los accesos directos Japt para elevar al cuadrado, la adición1
y la multiplicación por2
. Los 120 programas generan un número entero,>0
pero solo 78 son<=120
y solo 41 de ellos son únicos.Genera los números:
Ver la lista de números o la colección de programas válidos.
Explicación
Algunas cosas a tener en cuenta sobre Japt que son relevantes aquí son:
U
, que por defecto0
es, se inserta automáticamente al principio,3Ä4 = 3+14 = 17
, y, de manera similar4Ѳ = 4*2**2 = 16
), y,²
entonces el²
y todo lo anterior se ignora esencialmente.Las explicaciones de algunos de los programas (que producen
1
,3
,37
y93
, respectivamente):fuente
Befunge, 11 números
Befunge es un poco limitado porque solo admite literales de un solo dígito. Así que lo mejor que pude encontrar fue 11 números, suponiendo que el cálculo nos deje con un solo número en la pila.
Mejores personajes:
358*%
Números generados: (solo un ejemplo de cada uno)
fuente
Python, 16 números
Utiliza # para comentar todos los números innecesarios.
fuente
dc, 19 números
La salida está en la parte superior de la pila y se ignoran los errores (incluido el flujo inferior de la pila) Las permutaciones válidas son:
Aquí está el programa Python que solía mostrar esos resultados:
Otras dos cadenas que dan el mismo puntaje de 19 son
32d+*
y*4zO+
.fuente
Smalltalk, 26 números
Explicación: 12r35 es una notación para usar radix 12, y por lo tanto es 3 * 12 + 5.
Esto se puede verificar en Squeak:
da:
Si reemplazamos la última línea con:
entonces obtenemos las expresiones:
Quería hacer trampa y definir un método r en Integer como
Desafortunadamente, el compilador se corta en 1235r porque reconoce un número inacabado con radix en lugar de un mensaje r enviado a 1235 ...
También podría cambiar fácilmente el compilador, pero es demasiado engañoso para mi gusto.
fuente
Mathematica, 16 números
No es muy interesante, pero parece que no puedo encontrar nada mejor usando aritmética. Lo único que podría funcionar es usar
!
factorial o factorial doble, pero esto es tan propenso a generar números masivos que es imposible la fuerza bruta.Los 16 números (en rango) que se pueden generar a partir de los 5 caracteres anteriores son:
fuente
Encantamientos rúnicos, 19 números
Esencialmente 3 literales, el operador pow y un comando "imprimir la pila completa y terminar".
234p@
imprime 812 (3 ^ 4 concatenado con un 2). Lista de permutación completa , tenga en cuenta que@
se ha reemplazado porak@
para generar una nueva línea entre cada resultado y>
se ha agregado una para asegurar que cada línea se ejecute de forma independiente. Tenga en cuenta también que las salidas no están en el mismo orden que los programas que las generaron (ya que algunos programas pueden terminar más rápidamente).Muchas permutaciones no imprimen nada (p. Ej.
@234p
Op234@
), pero 19 dan como resultado una salida dentro del rango permitido.Números posibles (y un posible programa que resulta en él;
.
indica que esas posiciones pueden ser cualquiera de los caracteres restantes ya que no se ejecuta):fuente
TI-BASIC, 12 números
Lo más probable es que haya una mejor combinación, pero no pude encontrarla.
Todas24 Las permutaciones válidas son las siguientes:
De los cuales hay12 valores únicos:
fuente