De Wikipedia Definición teórica de conjuntos de números naturales
El conjunto N de números naturales se define como el conjunto más pequeño que contiene 0 y se cierra bajo la función sucesora S definida por S (n) = n ∪ {n}.
Los primeros números definidos de esta manera son 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.
Usando esta definición de números naturales se cuenta la longitud de una cadena.
Ingrese una cadena de caracteres de a-zA-Z de cualquier longitud
Salida de la longitud de la cadena en notación establecida sin separadores
Ejemplos
Introducir cadena vacía
Salida {}
Ingrese un
Salida {{}}
Entrada aaaa
Salida {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}
Para la legibilidad, la salida para 'aaaa' con separadores es
{
{}
{{}}
{{} {{}} }
{{} {{}} {{} {{} } } }
}
Condiciones
- No aparecen dígitos del 0 al 9 en el código;
- No se utiliza la conversión del código de caracteres para generar números;
- Sin uso de + - * / para cálculos aritméticos, incluidos incrementos y decrementos;
- No hay operaciones matemáticas que no sean lógica booleana;
- La cadena de entrada no cuenta para determinar la longitud del byte;
Ganador La longitud de código más corta en bytes.
Como esta es mi primera pregunta, espero haberlo dejado lo suficientemente claro y riguroso. Consejo amistoso aceptado.
fuente
f(n-1)
?Respuestas:
GolfScript (
1817 bytes)Toma entrada en la pila (por lo tanto, si se ejecuta como un programa, a través de stdin). Deja la salida como dos cadenas en la pila (por lo tanto, si se ejecuta como un programa, la salida correcta se envía a stdout).
Para dejar una sola cadena en la pila, agregue
+
a concat o use la alternativaDisección
Alternativa:
Impacto de las restricciones
Si se permitiera la disminución, permitiría la solución de 15 bytes
fuente
Función de Haskell,
3534 caracteresPrograma Haskell con entrada codificada,
48 o 4947 o 48 caracteres(47 caracteres si no le importan las comillas adicionales alrededor de la salida; si lo hace, use en
putStr
lugar deprint
un total de 48 caracteres)Programa Haskell,
5150 caracteresfuente
Python 3 - 64
Si se permite la entrada en línea:
Python 2 - 54
fuente
o[-1]
lugar deo.pop()
o=[]
, que se convierteo=['{}']
después de un paso, y alargar la entrada por uno reemplazándolo por'_'+input()
, cortando el espacio despuésin
.Javascript 70 (caracteres)
Este fue mi esfuerzo antes de formular la pregunta. Supongo que alguien con más conocimiento de Javascript que yo probablemente pueda vencerlo.
Gracias Jan Dvorak y Peter Taylor por nuevas reducciones
ahora 62
y ahora 61
Explicación del código original
establecer s para estar vacío
cadena de entrada en c y dividida en una matriz
Si bien es posible hacer pop () un carácter de c, hacerlo y restablecer s = s {s} como sucesor
Corriente de salida s pero necesita rodear con paréntesis establecidos.
fuente
while
(guarda un personaje).s='{'
y deshacerse de los dos'{'+
. (Esto se comporta como mi solución GS). Hay un ahorro adicional de 1 carácter al usar enfor
lugar dewhile
una de las dos inicializaciones en la inicialización de bucle.for(a;b;c){d}
es directamente equivalente aa;while(b){d;c}
en la mayoría de los idiomas que tienen ambos. Entonces, si bienfor(;b;)
es idéntico alwhile(b)
efecto y al recuento de caracteres,for(a;b;)
guarda un caráctera;while(b)
y tiene un efecto idéntico.J -
2220 charCómo se puede derivar esto:
Alternativamente, esto se puede escribir
'{','{'&(,,~)&'}'@#
, lo que significa lo mismo.Uso:
fuente
Haskell - 35 caracteres
La solución está influenciada por la de Jan Dvorak, pero sin invertir el orden.
fuente
Scala, 64 caracteres
Tenga en cuenta los roles duales que desempeñan las llaves y el
s
juego en este código.EDITAR: eliminó un dígito
fuente
Pitón 3 (44)
En cada paso,
s
es la cadena que representa el conjunto con el final}
eliminado. Creamos el conjunto que representa an+1
partir del conjunto que representa an
través de la relación f (n + 1) = f (n) ∪ {f (n)}. Para implementar la unión con cadenas, agregamos la cadena para {f (n)}, que es exactamentes
pero con la final}
devuelta, y no incluimos la final}
en el resultado. Finalmente, agregamos una final'}'
antes de imprimir.Si puedo codificar la cadena, el recuento de caracteres se reduce a 35 caracteres, cambiando a Python 2 para guardar las paréntesis en el
print
.Puede haber una manera de ahorrar espacio después
print
de hacer algo comoprint'{'+s
con un reversos
, pero esto se equivoca con los+=
anexos a la derecha.fuente
gs2, 12 bytes
mnemotécnica:
fuente
Mathematica, 115 caracteres
El código completo como se muestra tiene 121 caracteres, pero 6 de ellos se usan para la cadena de entrada (
"test"
) que, según las reglas, no cuenta.Sin el requisito de que no haya delimitadores, la longitud del código podría reducirse aún más en 24 caracteres; sin una conversión explícita a cadena, se podrían eliminar otros 9 caracteres
fuente
Ruby, 27, una especie de trampa
Cosas cuestionables
[[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
fuente
inspect
la matriz se realiza manualmente ytr
el resultado.Pure Bash, 54
Salida:
fuente
Julia 43
La construcción {z ...} expande la cadena z en una matriz. Dobla los bucles sobre todos los elementos de la matriz ignorando el contenido y, en su lugar, construyéndolo desde la cadena vacía. La función foldl está disponible en Julia 0.30.
Salida de muestra
fuente
Haskell, 31 bytes
fuente
Mathematica,
455748 bytesUna solución de 36 bytes:
Sin embargo, utiliza algunos cálculos aritméticos.
fuente
Delphi XE3 (264)
Ok, ni siquiera me acerco al otro, pero fue divertido hacerlo :)
Probablemente pensándolo demasiado. A ver si hay una mejor manera de hacer esto.
Golfed
Sin golf
Resultados de las pruebas
Cuerdas probadas con longitud 0..10
fuente
Perl 5: 33 caracteres
No está del todo claro qué caracteres debería contar como parte de la solución. Probablemente no sea laecho ... |
parte porque solo se usa para alimentar una línea en stdin. Probablemente no sea el nombre del binario perl, porque podrías cambiarle el nombre a lo que quieras.Así que he contado los cambios de línea de comando pasados a perl, las comillas envueltas alrededor del código Perl y el código Perl en sí.Además, relacionado .
fuente
pl
como estándar, pero obtienes-e
las cotizaciones del código de forma gratuita. Ref.Perl 6: 37 caracteres
o de STDIN:
{"\{@_.join()\}"}...*
hace una lista perezosa de las formas establecidas de los números naturales, y simplemente tomamos la que necesitamosget.chars
.La lista perezosa podría escribirse de manera más legible:
Que se lee bastante similar a la definición.
fuente
Dart: 85 caracteres
(con nueva línea adicional para facilitar la lectura).
El requisito de no usar "0" realmente muerde, de lo contrario
.first
sería[0]
y(..).isNegative
sería..<0
.fuente
Pyth, 13 bytes
Este es el equivalente Pyth golfizado de la respuesta Python de @ xnor. Tenga en cuenta que Pyth es más nuevo que esta pregunta, por lo que esta respuesta no es elegible para ganar este desafío.
Demostración.
fuente
u+G]GlQY
Javascript,
171149147142 bytes(Probablemente se jugará golf más tarde)
fuente