Una simple hoy. Escriba el programa más corto que dibuje un "alfabeto de diente de sierra" dado un entero positivo para la altura. Debe escribir el nombre de su lenguaje de programación cuando llegue a la letra con la que comienza.
Por ejemplo, si su idioma es Python y la entrada es 1
la salida debe ser:
ABCDEFGHIJKLMNOPythonQRSTUVWXYZ
Si la entrada es 2
la salida debe ser:
B D F H J L N Python R T V X Z
A C E G I K M O Q S U W Y
Si la entrada es 4
la salida debe ser:
D J Python V
C E I K O Q U W
B F H L N R T X Z
A G M S Y
Notas
A
siempre comienza en la parte inferior izquierda.- La entrada puede ser a través de stdin o llamada de función o similar. Salida a stdout.
- La entrada anterior
26
no necesita funcionar. - Sin espacios finales.
Respuestas:
si n tiene la altura:
C + códigos de escape: 81
C: 110
fuente
cc
da error "<bebe.c: 1: 17: error: 'n' no declarado (primer uso en esta función)".n
es una variable global configurada para un número de su elección (como Martin ha pedido anteriormente).C, 134
Compila en gcc con algunas advertencias. Las nuevas líneas no se incluyen en el recuento de caracteres.
122 caracteres si la entrada ya está almacenada
n
.Gracias a user2992539 , tolos y edc65 por las mejoras.
fuente
puts("")
lugar deprintf("\n")
.p-=(c-n+r)%m*((c-n-r)%m)?0:printf("%*c",p,c+65);
lugar deif((c-...
n,m,c,p; main(r){ for(scanf("%d",&n),m=--n?n*2:1;n+r--;puts("")) for(c=-1,p=1;c++<25;) p+=(c-n-r)%m*((c-n+r)%m)?1:1-printf("%*c",p,c+65); }
TI-BASIC: 148 bytes (texto sin formato), 186 bytes (gráfico)
En respuesta al OP, la maravillosa TI-83 (y más reciente) viene con un tamaño de 16 x 8 (solo usando el texto grande estándar) o con un tamaño de 94 x 62 píxeles (que con texto pequeño vale aproximadamente 10 líneas )
Ahora, esto tiene un pequeño problema (al que me gustaría una aclaración). El intérprete no puede "ignorar" las imposiciones de tamaño; en otras palabras, si intentamos establecer la altura del diente de sierra en 20, daría un error que impide la ejecución completa del código. Yo podría escribir código que, en un entorno infinito, producir el resultado correcto, excepto que no se ejecutan en la máquina.
Dicho esto, te presento las versiones (en ejecución) de los programas. Todos dependen de la variable que
N
se establece en la altura deseada en líneas antes de ejecutar:Enfoque de texto sin procesar
Con el fin de hacer que esto funcione independientemente de la terminal, el cambio
For(C,1,16
deFor(C,1,33
y quite la comprobación de límite superior (R<2 or
). Aquí está la salida con5→N
:Enfoque gráfico (esto también puede necesitar
AxisOff
claridad)Este funciona bien, con dos peculiaridades menores. La altura sigue siendo un problema, aunque el ancho no lo es. Sin embargo, no separé las letras, así que en algunos casos (cuando la letra comienza a subir o bajar del diente de sierra), las letras pueden ser cortadas por sus sucesores. Para que funcione independientemente del terminal, elimine la marca de límite superior (
R<7 or
). Luego sigue el gráfico:fuente
0→F
hacerlo, puedeDelvar F
guardar 1 byte una vez tokenizado. Además, estoy seguro de que puede factorizar la Salida / Texto hacia el final gracias a una condición de prueba booleana en línea para la coordenada, y paraC+7→C
, escribirla en un breve if (no then / else / end)Pure Bash (sin coreutils), 181 bytes
Salida:
Dirigido a
cat -E
solo para demostrar que no hay nuevas líneas finales.fuente
JavaScript (ES6) 231
244Editar corrección de errores, algunos reordenamientos y una forma diferente de administrar la altura == 1
Además, se cambió a una función ya que OP lo permite, por lo que no se solicita () para la entrada
No hay cambios en el algoritmo general que probablemente NO sea el mejor para este desafío.
Explicado
Ejemplos
1
3 subiendo
4 en la parte superior
7 bajando
fuente
JAVA (393)
Como siempre, un gran idioma para el golf:
fuente
java.util.Arrays;
. :-(String x="ABC...Z";
y reemplace elfor(char c...
encabezado del bucle confor (char c=65;++c<91;){
, me encantan los caracteres en Java =)c=='J'
conc==74
, guarda dos bytes más en total.public class p{public static void main(String[]a){int h=Integer.valueOf(a[0]),i=h-1,d=-1,n;String[]l=new String[h];for(n=0;n<h;l[n++]="");for(char c=64;++c<91;){for(n=0;n<h;n++){String k=n==i?c==74?"Java":c+"":c==74?" ":" ";l[n]+=k;}if(i==0&d==-1)d=1;if(i==h-1&d==1)d=-1;i+=h>1?d:0;}for(String s:l)System.out.println(s);}}
@Quincunx: ya no es necesario importar.util.Arrays; =)Ruby, 112 bytes
Espera que la entrada se almacene en
h
.Avíseme si esto necesita aclaración.
fuente
%
.puts o...
con$><<o...
.J: 75 bytes
Usando la maravillosa enmienda Conjunta . Como de costumbre, el IO es feo y torpe, sin entrar en detalles allí. La solución central toma 3 gerundios (una especie de verbo con sustantivo (también conocido como función)):
c) generar la matriz para enmendar
x (a
b
c}) ya) es una búsqueda bastante trivial en la tabla ASCII
c) es aún más trivial
b) es el interesante. La moral es que se supone que los índices horizontales comienzan desde 0 hasta y-1 y retroceden, repitiendo esto 26 veces. P.ej. para y == 4:
La implementación de esto da para b):
Y sí, hecho práctico: el nombre de J es ... "J".
fuente
3 :'|:(26$1+(i.1=y),}:|i:<:y)|.@{."+u:65+i.26'
La parte fea de esa solución son los 8 caracteres solo para la altura de caso especial 1, pero esto probablemente se puede acortar un poco.R (204)
Resultado
fuente
for
embargo, puede deshacerse de los espacios alrededor de sus declaraciones (for(i in 1:x)cat(...
por ejemplo) o el que está alrededor%in%
.Javascript -
248224235Aquí hay un enlace al jsfiddle, donde puede probarlo.
editar: hizo un registro de consola para una fuente monoespaciada y eliminó las comas si input == 1.
fuente
|0
o~~
. 2: es más corto construir la matriz w directamente, sinsplit
.for(w=[],v=0;v<z;v++)w[v]="\n";
(i==9?" ":" ")
puedas usar(i^9?" ":" ")
, lo que salva a un personaje.Perl 119
Este programa toma datos
STDIN
e imprime el resultado enSTDOUT
.Y bonificación: una versión que va en contra de las reglas, ya que imprime espacios finales, pero agrega cierta interacción:
... y algunas pruebas a continuación:
fuente
J,
67 5761 caracteresUsar como una función:
Explicación: esta solución utiliza un enfoque diferente que la otra solución J. En lugar de generar una onda de diente de sierra 0 1 2 3 2 1 0 1 ... , miré el espacio entre letras consecutivas. Por ejemplo, para n = 4 si vas desde A hacia arriba, pasa a la segunda columna y alcanzas B, entonces encuentras cuatro espacios entre A y B. Este patrón de espaciado entre letras es muy regular: para n = 4 el patrón es 4 4 4 2 2 2 4 4 4 ... .
Entonces, la idea es construir primero la matriz aplanada (y transpuesta), y luego volver a darle forma y voltearla para que se vea bien. La rutina de salida es sencilla (por ser J, al menos): dtb es "eliminar espacios en blanco finales" y
"1
dice "operar en cada línea". dtb y echo son proporcionados por la biblioteca estándar.Gracias a Zsbán Ambrus por su ayuda en el golf.
fuente
MetaPost (207)
Puedes probarlo aquí.
fuente
Golpe (213)
(223)Pequeños ajustes y hemos llegado a 213.
El original tenía un error menor. Probado y confirmado para trabajar en bash versión 4.2.37.
Gracias a @manatwork por señalar el error y algunos consejos.
fuente
;
que son para que sean un poco más legibles? No afectará su puntaje de golfHaskell: 432 bytes (desafortunadamente ...)
Esto resultó ser mucho más difícil de lo que esperaba lograr puramente, de ahí la gran cantidad de bytes. Estoy seguro de que yo (o alguien) podría hacerlo mejor, pero he pasado demasiado tiempo en esto. La versión de golf es la siguiente:
Para ejecutar, cargue el código
ghci
y ejecuteputStr $ s Int
dondeInt
está su altura deseada. También podrías agregardebajo de la
import
s en un archivo de texto, compíleloghc
y pase la altura como argumento de línea de comando. Versión sin golf:fuente
const
conpure
(utilizando la instancia Aplicativa para funciones) para guardar algunos bytes.C # / LINQ:
Breve explicación:
Enumerable.Range(0, N).Select(...)
hace que se genere una cadena para cada línea que finalmente se concatena en una sola cadena conString.Join(Environment.NewLine, ...)
. Para cada línea con la que pasamos los 26 caracteresEnumerable.Range(0, 26).Select(...)
, la prueba al comienzo de la expresión lambda determina si se genera un carácter o un espacio mientras sei==2
comprueba "C" y se convierte en "C #" o en dos espacios según la línea . LosString.Concat(...)
convierte la resultanteIEnumerable<char>
para cada línea en una cadena antes de pasarlo alTrimEnd(...)
a la tira limpiamente cualquier espacio en blanco al final.fuente
PHP
(216)(205)Nueva versión:
Versión antigua:
espera que la variable $ i sea la altura.
fuente
C,
214169 bytes, sin espacios finalesGracias a @ edc65 y @tolos por sus útiles sugerencias.
fuente
scanf
yprintf
) reciban prototipos, de lo contrario obtendrá un comportamiento indefinido.#include <stdio.h>
es, por supuesto, la forma más corta de dar un prototipo a ambosscanf
yprintf
.int
declaración de main si no está devolviendo nada. Puede eliminar parens adicionales, reemplazar' '
con32
yif(!C)m=c
con una declaración ternarny, y como acabo de aprender (arriba) reemplazarprintf("\n")
conputs("")
18 caracteres:n,i,m,c,z;main(){;scanf("%d",&n);z=n<2?1:2*n-2;for(;i<n;i++){for(m=c=65;c<91;c++)m=C?m:c;for(c=65;c<=m;c++)printf("%c",C?32:c);puts("");}}
Javascript (
204 185150)EDITAR
Ahorró 13 bytes al no construir una matriz y .join ("\ n"). Se requiere voltear los bucles for. Luego, con la ayuda de C coding son, hizo que el código fuera demasiado inteligente para guardar otros 12 bytes.
Aquí está la versión legible que muestra el cambio de lógica.
Golfizado (161):
Golfizado y ofuscado (149):
fuente
.substr(a,1)
=>[a]
h=m=4;d=1<h?-1:0;o=[];for(a=0;35>a;a++){for(r=h;r;r--)o[r]=(o[r]||"")+(r==m?"ABCDEFGHIJavascriptKLMNOPQRSTUVWXYZ"[a]:" ");if(9>a|17<a)if(m+=d,2>m||m==h)d=-d}console.log(o.join("\n"))
K, 60 bytes
Bastante sencillo, y parece que acabo de superar la solución J. :)
Primero, genera un alfabeto:
Y una onda de diente de sierra de una longitud adecuada:
Rellene cada letra del alfabeto con espacios iniciales:
Comprime el alfabeto y la onda cuadrada, y gira cada fila:
Y la transposición de eso es nuestra respuesta:
Pruébalo aquí en OK .
fuente
C:142139 caracteresTerriblemente largo, espero poder acortarlo un poco:Ligeramente más legible:
Editar: Me perdí la regla "sin espacios finales", pero volveré.
fuente
Scala, 246 bytes
reformateado y comentado:
Resultados:
fuente
Python - 137
Entrada para ser almacenada en ieg
i=8
fuente
Raqueta
Aquí hay una versión funcional limpia: sugerencias para acortarlo bienvenido.
Salida
fuente