Generar alfabeto con 4 copias de cada letra.

27

Tenga en cuenta que esto no es lo mismo que Imprimir el alfabeto cuatro veces .

Esta tarea es escribir un programa para generar cuatro copias de cada letra del alfabeto inglés, una letra por línea, en la salida estándar:

A
A
A
A
B
B
B
B

etc.

El resultado debe incluir nuevas líneas después de cada letra.

Se prefieren letras mayúsculas sin salida adicional; sin embargo, las letras minúsculas y / o los espacios en blanco adicionales son aceptables si las mayúsculas / despojo alargarían su solución.

EDITADO PARA AGREGAR: La solución debe ser lo suficientemente completa como para ejecutarse. Debería poder invocar una implementación del lenguaje, pegar el código de la respuesta y obtener resultados, sin escribir ningún código adicional.

La pregunta anterior de completitud surgió en el contexto de una solución C. ¿Seguramente debe haber una regla o convención permanente sobre esto en un sitio de golf de código? Si es así, con gusto cederé a las pautas de la comunidad. Pero esta es mi opinión:

  1. Con respecto a C específicamente, debe incluir (y contar) el main(){... }alrededor del código, ya que de lo contrario no se compilará. Las advertencias porque no hay #include <stdio.h>están bien siempre y cuando el código aún se compile. En general, un lenguaje compilado requiere una unidad compilable.

  2. Una expresión desnuda que produce los resultados deseados es aceptable si hay una manera de ejecutar la expresión directamente; por ejemplo, si el idioma tiene un REPL. Por lo tanto, puede enviar Haskell sin una main=, siempre y cuando realmente funcione como está escrito, por ejemplo, en el ghciindicador. Pero dado que eso significa poner letsus declaraciones, puede ser una ganancia neta quedarse con el runhaskellformato.

  3. Del mismo modo, los awkscripts deben estar en bloques BEGIN(o ENDcon el supuesto de que stdin está adjunto /dev/null) ya que no estamos procesando ninguna entrada.

etc.

Mark Reed
fuente
44
Estoy un poco confundido ¿Es el desafío aquí solo dar salida al alfabeto con cada letra repetida cuatro veces, o la salida realmente necesita almacenarse también en un archivo?
Iszi
¿Y tengo que generar solo el alfabeto?
Justin
@ MarkReed ¿Necesito imprimirlo con líneas nuevas en el medio? ¿Por qué no solo imprimirlo, pero las líneas nuevas son opcionales?
Justin
3
Además, recomiendo reformular su desafío para que sea más como un desafío y menos como contar la historia de cómo inventó su respuesta.
Justin
El último bit enturbia las reglas del espacio en blanco solo un poco. ¿Podrías aclararlo por favor? En particular, ¿estoy leyendo bien para interpretar que los espacios en blanco adicionales están bien, pero la omisión de líneas nuevas no?
Iszi

Respuestas:

16

APL (5)

⍪4/⎕A

Formato matricial ( ) de 4 réplicas ( 4/) del alfabeto ( ⎕A).

marinus
fuente
1
Parece poco probable que lo golpeen. :)
Mark Reed
Cuento 9 bytes.
Oliver Ni
APL usa una página de códigos que asigna cada uno de los caracteres que usa a un byte. Esta página de códigos se puede encontrar aquí, en el sitio web de IBM.
Steven H.
@StevenH. Link está muerto
Stan Strum
@StanStrum Creo que el enlace está muerto debido a la depreciación, pero por el bien del código de golf, esta meta respuesta debería funcionar.
Steven H.
11

Python - 37

for i in range(104):print chr(i/4+65)

iva de 0 a 104; se divide entre cuatro y se agrega al valor ascii para A, y se imprime el carácter resultante.

Justin
fuente
¿Supongo que Python usa la división de enteros por defecto? Sería bueno si PowerShell lo hiciera ahora. Tal como está, el código necesario para forzarlo a la división de enteros es demasiado largo para que este truco me ayude a guardar algo en mi script.
Iszi
@lszi - Python toma su señal del tipo de operandos. 3/4es 0, mientras que 3.0/4.0es 0,75; range()genera enteros.
Mark Reed
1
Esto no funciona en versiones más recientes de python. Primero, la función de impresión debe llamarse entre paréntesis, y / ya no hace la división de enteros por defecto (incluso si ambos números son enteros), que es el trabajo de // Pruebe:for i in range(104):print(chr(i//4+65))
3
@ Conciencia lo sé. Deliberadamente elegí usar una versión antigua para poder jugar mejor. Si tuviera que ejecutar esto en Ideone.com, elegiría "Python" en lugar de "Python 3"
Justin
3
@Conciencia - por "versiones más nuevas de python", te refieres a "Python 3", que está lejos de ser universalmente adoptado en este momento. En general, supongo que cualquier cosa que afirme ser "Python" sin una versión especificada es Python 2.x hasta que se demuestre lo contrario; El código de Python 3 tiende a etiquetarse explícitamente.
Mark Reed
8

R, 30 28 27

write(rep(LETTERS,e=4),1,1)

Versión anterior con 30 bytes:

cat(rep(LETTERS,e=4),sep="\n")
Sven Hohenstein
fuente
Creo que una nueva línea literal es un byte más corto :)
Giuseppe
@Giuseppe ¿Puedes especificar esta idea?
Sven Hohenstein
@Giuseppe Muy buena idea! Gracias por señalarlo.
Sven Hohenstein
Puede usar en 1lugar de ""especificar stdout writetambién, lo que guarda otro byte.
Giuseppe
7

C, 59

Presento esto, una respuesta poco competitiva, simplemente porque todavía no veo una presentación en C. Y eso me pone triste. : - /

MÁS TARDE: ¡Apoya a @moala por hacer una versión int "/ 4" de esto, ahorrando 13 caracteres!

float i;main(){while(i<26)printf("%c\n",65+(int)i),i+=.25;}
Piedra de Darren
fuente
¡He editado mi respuesta, ahora ahorrando incluso 2 caracteres más!
moala
¡y otro!
moala
6

J: 18 13

4#u:65+i.26 1

Todavía estoy bastante tembloroso con J, por lo que esto probablemente podría mejorarse

pswg
fuente
3
Puede utilizar la réplica ( #) en lugar de la división, así: 4#u:65+i.26 1. Además, ~intercambia los argumentos de una función, por lo que si alguna vez te encuentras haciendo (expression) F valueeso, puedes reemplazarlo con value F~ expressionpara guardar un personaje.
marinus
@marinus Gracias por el consejo. Todavía estoy aprendiendo J y es difícil encontrar buena información con ese tipo de trucos.
pswg
1
4#65{26,.\a.por 12 bytes.
FrownyFrog
5

Ruby, 23

puts ([*?A..?Z]*4).sort

Todo el crédito a @manatwork - votó su comentario, no esto. :)

Piedra de Darren
fuente
Enorme. @manatwork, haré la edición, ¡pero obviamente no merezco ningún crédito!
Darren Stone
55
Mejor hazlo puts [*?A..?Z].map{|i|[i]*4}o puts ([*?A..?Z]*4).sort, para que las letras se ordenen como en el ejemplo.
manatwork
2
@manatwork: puts (?A..?Z).map{|i|[i]*4}es un personaje más corto. Puede llamar mapdirectamente en un rango, por lo que no necesita el splat en este caso.
Mark Reed
5

PowerShell: 32 23

Código de golf:

[char[]](65..90*4)|Sort

Tutorial:

[char[]](... )toma una matriz de objetos y los convierte en caracteres ASCII.
65..90son los códigos ASCII para AZ.
*4repite la serie 4 veces.
|Sortordena la salida.

Nota:

Si desea que esto se escriba en un archivo, simplemente arroje >, seguido de un nombre de archivo, al final.

Iszi
fuente
5

Haskell, 46

x a=a++a
main=putStr$['A'..'Z']>>=x.x.(:"\n")
MtnViewMark
fuente
1
putStr$['A'..'Z']>>=("golf">>).(:"\n")ahorra 8 bits
Angs
5

Befunge 98-18

1+::'g`#@_4/'A+,a,

Funciona almacenando un número y terminando cuando llega a 104. Imprime el carácter correspondiente del alfabeto para el número dividido por 4, seguido de una nueva línea. Pero si no necesito agregar una nueva línea después de cada letra, entonces son 16 caracteres:

1+::'g`#@_4/'A+,

Se puede reducir si puedo imprimir más caracteres (es decir, todos ellos cuatro veces) ( 7 6 caracteres, incluso funciona en Befunge 93):

1+:4/,

Con nueva línea:

1+:4/,a,
Justin
fuente
4

GolfScript: 17 15 caracteres

26,{65+...}%+n*
hombre trabajando
fuente
4

Perl 5, 21

map{print"$_
"x4}A..Z
Dom Hastings
fuente
2
Nunca se me ha ocurrido poner una nueva línea literal dentro de una cadena entre comillas dobles en Perl. +1.
Mark Reed
Debo señalar que yo tampoco, pero @manatwork lo mencionó en otra respuesta mía y está atascado.
Dom Hastings
4

C, 46 44 43

46 :

i;main(){while(i<104)printf("%c\n",65+i++/4);}

44 :

i=260;main(j){for(;(j=i++>>2)<91;puts(&j));}

44 también:

i=260;main(j){while(j=i++>>2,j<91)puts(&j);}

Gracias a @marinus, 43:

i=260;main(j){while(j=i++/4,j<91)puts(&j);}

¿Debo agregar una recompensa por llegar a 42? :)

moala
fuente
66
50 rep. es necesario para comentar cualquier cosa, y tienes 101 al momento de publicar este comentario.
syb0rg
¡Excelente! ¡Gracias! Respuesta editada!
moala
1
Puedes reemplazar >>2por /4.
marinus
4

Java: 56

for(int i=0;i<104;)System.out.println((char)(i++/4+65));

editar: cambiado de 'print' a 'println'

reblerebel
fuente
El resultado debe incluir nuevas líneas después de cada letra.
Pierre Arlaud
gracias por señalarlo, debería imprimir una nueva línea cada vez ahora
reblerebel
2
The solution must be complete enough to execute. I should be able to invoke an implementation of the language, paste the code from the answer, and get results, without typing any additional code. Creo que su solución viola esta condición
user902383
2
@ user902383 Si lo pega en JShell (Java REPL en Java 9) funciona, y ni siquiera necesita el punto y coma final.
David Conrad
@DavidConrad Es increíble entonces, creo que podría comenzar a usar REPL / JShell.
user902383
4

Adelante, 37

'h 0 [do] [i] 4 / 'A + emit cr [loop]
Piedra de Darren
fuente
35 bytes evitando +.
Bubbler
4

En realidad, 6 bytes

4ú*SÖi

Pruébalo aquí!

Explicación

4ú*SÖi

4 *         Do 4 times
 ú          Create string of alphabet in lowercase
   S        Sort it
    Ö       Switch Case
     i      Push each character of string

4 bytes con minúsculas y sin nueva línea:

4ú*S
Estúpido
fuente
1
Bienvenido a PPCG!
Erik the Outgolfer
4

Código de máquina x86 de 16 bits COM de MS-DOS, 25 bytes

En hexadecimal:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

Este es un programa completo de MS-DOS .COM. Copie la secuencia de bytes al archivo con extensión .com y ejecútelo desde DOSBox

Desmontaje

00: B4 09        mov    ah,0x09         ;INT 21h "Write string to STDOUT" function
02: BA 16 01     mov    dx,0x116        ;Address of the string s ('$'-terminated)
05: 89 D7        mov    di,dx           ;Because there's no way to dereference address in DX
07: B9 68 00     mov    cx,104          ;CX=26*4
_0000000A:
0A: F6 C1 03     test   cl,0x03         ;When lower two bits are zero...
0D: 75 02        jne    _00000011       ;...do not skip the next instruction
0F: FE 05        inc    b,[di]          ;*s++
_00000011:
11: CD 21        int    21              ;Print the string
13: E2 F5        loop   _0000000A       ;Until --CX==0
15: C3           retn
16: 40           db     0x40            ;s[0], starts with 'A'-1
17: 0A           db     0x0A            ;'\n'
18: 24           db     '$'             ;Terminator required by the print function
meden
fuente
3

BrainF * , 79 60

+++++++++++++[->++>+>+++++<<<]>>---<[->>>++++[-<.<.>>]<+<<]
AShelly
fuente
44
+++++++++++++[>+>+++++>++<<<-]>--->>[<.<.>.<.>.<.>.<.>+>-]
alephalpha
3

AWK, 48

Vamos a probarlo con AWK ...

END{s=65;for(i=104;i--;s+=0==i%4)printf"%c\n",s}

Como sugiere manatwork , podemos deshacernos de 2 caracteres

AWK, 46 (Editar)

END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}

AWK, 40 (editando el código de MarkReed )

END{for(;i<104;){printf"%c\n",i++/4+65}}
Wasi
fuente
Mediante la eliminación de la inicialización de variables s le sobran 2 caracteres: END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}.
manatwork
1
Poner el código en un ENDbloque significa que requiere una secuencia de entrada (incluso si es /dev/null) para funcionar. ¿Eso modifica el recuento de caracteres? De todos modos, BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}es 5 caracteres más corto.
Mark Reed
@ MarkReed Su código no funciona. Mira esto
Wasi
D'oh ¡Tan cerca! :) Pero todavía no me gusta el ENDrequisito del patrón para una secuencia de entrada ...
Mark Reed
3

PowerShell, 21

65..90|%{,[char]$_*4}

Un enfoque ligeramente diferente al de Iszi. Y más corto :-)

Joey
fuente
3

C # LINQ 115 Bytes 110 Bytes

Enumerable.Range(65, 26).SelectMany(i => Enumerable.Repeat(i,4))
.ToList().ForEach(i=> Console.WriteLine((char)i));
supermeerkat
fuente
1
Bienvenido a PPCG! Bonito primer post!
Rɪᴋᴇʀ
3

05AB1E, 6 bytes

A4×{S»

Explicación:

A       # Push 'abcdefghijklmnopqrstuvwxyz'
 4×     # Repeat four times
   {    # Sort
    S   # Split into list
     »  # Join by newlines
        # Implicit print

Sin saltos de línea, 4 bytes

A4×{

Pruébalo en línea!

Oliver Ni
fuente
3

Jelly , 5 bytes (¿no compite?)

ØAx4Y

Pruébalo en línea!

Explicación:

ØAx4Y Main link
ØA    “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
   4  4
  x   Repeat each element of x y times
    Y Join x with newlines
Erik el Outgolfer
fuente
3

Perl 6, 32

.say for (('A'..'Z') »xx»4)[*;*]
Mark Reed
fuente
Creo que esta es la primera vez que Perl 6 fue la primera solución que pensé, pero el hiperoperador parecía un ajuste natural.
Mark Reed
3

Lienzo , 5 bytes.

Z41*⟳

Pruébalo aquí!

Explicación:
Code        | Explanation                                  | Stack
------------+----------------------------------------------+------------------------------
Z          | The uppercase alphabet                       | "ABC..."
  41*     | Stretched by 4 horizontally and 1 vertically | "AAAABBBBCCCC..."
        ⟳  | Rotated clockwise                            | "A¶A¶A¶A¶B¶B¶B¶B¶C¶C¶C¶C¶..."
            | Print ToS (implicit)                         |

Con reemplazado por \nal imprimir.

hakr14
fuente
3

Kotlin , 66 59 bytes

Ahorre 7 bytes eliminando para el bucle.

fun main(a:Array<String>){repeat(104){println('A'+(it/4))}}

Pruébalo en línea!

JohnWells
fuente
3

brainfuck , 48 bytes

+++[[-<+>>++<]+>]<<<<<<+[->,++++[->.<<<.>>]>+<<]

Pruébalo en línea!

Imprime en minúsculas, separadas por retornos de carro. Utiliza envolver celdas de 8 bits y celdas a la izquierda del origen, aunque puede anteponer a >para contrarrestar la última.

Jo King
fuente
Estaba a punto de publicar uno nuevo, pero lograste superar mi mejor esfuerzo, obtuve 71 bytes con ++++++ [-> ++> ++++> ++++++++ ++ <<<] ++++> +> ++> +++++ <[->. <<. >>. <<. >>. <<. >>. + <<.>]
KrystosTheOverlord
2

Bash: 24 caracteres

printf %s\\n {A..Z}{,,,}
hombre trabajando
fuente
2

Dc: 35 caracteres

[rdP10Pr1-d1<p]sp65[5lpx+d91>l]dslx
hombre trabajando
fuente
2

Scala, 42

('A'to'Z')map(x=>List.fill(4)(println(x)))
pt2121
fuente
2

Julia, 39 , 36

println([char(i/4+64.5)for i=0:103])
Sven Hohenstein
fuente