Genera alfabeto con 4 copie di ogni lettera


27

Nota che questo non è lo stesso di Stampa l'alfabeto quattro volte .

Questa attività consiste nel scrivere un programma per generare quattro copie di ogni lettera dell'alfabeto inglese, una lettera per riga, sull'output standard:

A
A
A
A
B
B
B
B

eccetera.

L'output dovrebbe includere newline dopo ogni lettera.

Sono preferite lettere maiuscole senza output aggiuntivo; tuttavia, lettere minuscole e / o spazi bianchi extra sono accettabili se le maiuscole / minuscole allungerebbero la soluzione.

MODIFICATO PER AGGIUNGERE: la soluzione deve essere abbastanza completa per essere eseguita. Dovrei essere in grado di invocare un'implementazione della lingua, incollare il codice dalla risposta e ottenere risultati, senza digitare alcun codice aggiuntivo.

La precedente domanda di completezza è emersa nel contesto di una soluzione C. Sicuramente ci deve essere una regola permanente o una convenzione al riguardo su un sito di golf a codice? Se è così, mi arrenderò volentieri alle linee guida della community. Ma questa è la mia opinione:

  1. Per quanto riguarda specificamente C, è necessario includere (e contare) il main(){... }intorno al codice, poiché altrimenti non verrà compilato. Avvertimenti perché non ci #include <stdio.h>sono problemi finché il codice viene ancora compilato. In generale, una lingua compilata richiede un'unità compilabile.

  2. Un'espressione nuda che produce i risultati desiderati è accettabile se esiste un modo per eseguire direttamente l'espressione; ad esempio, se la lingua ha un REPL. Quindi è possibile inviare Haskell senza main=fintanto che in realtà funziona come scritto , ad esempio il ghcimessaggio. Ma dal momento che ciò significa mettere le lettue dichiarazioni, potrebbe essere una vittoria netta attenersi al runhaskellformato.

  3. Allo stesso modo, gli awkscript dovrebbero trovarsi in BEGIN(o END, supponendo che lo stdin sia collegato /dev/null) a blocchi poiché non stiamo elaborando alcun input.

eccetera.


4
Sono leggermente confuso. La sfida qui è solo quella di produrre l'alfabeto con ogni lettera ripetuta quattro volte o l'output deve essere effettivamente archiviato in un file?
Iszi,

E devo produrre solo l'alfabeto?
Giustino,

@MarkReed Devo stamparlo con una nuova riga in mezzo? Perché non solo stamparlo, ma newline opzionale?
Giustino,

3
Inoltre, ti consiglio di riformulare la tua sfida in modo che sia più come una sfida e meno come raccontare la storia di come hai inventato la tua risposta.
Giustino,

L'ultima parte confonde le regole dello spazio bianco solo un po '. Potresti chiarire, per favore? In particolare, sto leggendo bene l'interpretazione dello spazio bianco in più, ma l'omissione delle nuove righe non lo è?
Iszi,

Risposte:


16

APL (5)

⍪4/⎕A

Formato matrice ( ) di 4 repliche ( 4/) di alfabeto ( ⎕A).


1
Sembra improbabile che venga battuto. :)
Mark Reed il


APL utilizza una tabella codici che associa ciascuno dei caratteri che utilizza a un byte. Questa tabella codici è disponibile qui, sul sito Web IBM.
Steven H.,

@StevenH. Il link è morto
Stan Strum il

@StanStrum Credo che il link sia morto a causa della deprecazione, ma per motivi di golf del codice questa meta risposta dovrebbe funzionare.
Steven H.

11

Python - 37

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

iva da 0 a 104; viene diviso per quattro e aggiunto al valore ASCII per Ae il carattere risultante viene stampato.


Lo prendo Python usa la divisione intera per impostazione predefinita? Sarebbe carino se PowerShell lo facesse in questo momento. Così com'è, il codice necessario per forzarlo nella divisione dei numeri interi è troppo lungo perché questo trucco mi aiuti a salvare qualsiasi cosa sul mio script.
Iszi,

@lszi - Python prende spunto dal tipo di operandi. 3/4è 0, mentre 3.0/4.0è 0,75; range()genera numeri interi.
Mark Reed,

1
Questo non funziona con le versioni più recenti di Python. Innanzitutto, la funzione di stampa deve essere chiamata tra parentesi e / non esegue più la divisione intera per impostazione predefinita (anche se entrambi i numeri sono numeri interi), che è il lavoro di // Prova:for i in range(104):print(chr(i//4+65))

3
@Coscienza lo so. Ho deliberatamente scelto di utilizzare una versione precedente in modo che possa essere giocata al meglio. Se dovessi eseguirlo su Ideone.com, sceglieresti "Python" invece di "Python 3"
Justin

3
@Consciousness - per "versioni più recenti di python", ti riferisci a "Python 3", che è tutt'altro che universalmente adottato a questo punto. In genere suppongo che tutto ciò che afferma di essere "Python" senza una versione specificata è Python 2.x fino a prova contraria; Il codice Python 3 tende ad essere esplicitamente così etichettato.
Mark Reed,


7

C, 59

Inoltro questa, una risposta non competitiva, semplicemente perché non vedo ancora un invio C. E questo mi rende triste. : - /

DOPO: Propone a @moala per aver fatto una versione "/ 4" int di questo, risparmiando 13 caratteri!

float i;main(){while(i<26)printf("%c\n",65+(int)i),i+=.25;}

Ho modificato la mia risposta, ora salvando anche altri 2 caratteri!
Moala,

e un altro!
Moala,

6

J: 18 13

4#u:65+i.26 1

Sono ancora piuttosto traballante con J, quindi probabilmente questo potrebbe essere migliorato


3
È possibile utilizzare replica ( #) al posto di divisione in questo modo: 4#u:65+i.26 1. Inoltre, ~scambia gli argomenti di una funzione, quindi se ti ritrovi a farlo (expression) F value, puoi sostituirlo con value F~ expressionper salvare un personaggio.
Marin

@marinus Grazie per la punta. Sto ancora imparando J ed è difficile trovare buone informazioni con questo tipo di trucchi.
pswg

1
4#65{26,.\a.per 12 byte.
FrownyFrog,

5

Ruby, 23 anni

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

Tutto merito a @manatwork - ha votato il suo commento, non questo. :)


Enorme. @manatwork, farò la modifica ma ovviamente non merito alcun merito!
Darren Stone,

5
Meglio farlo puts [*?A..?Z].map{|i|[i]*4}o puts ([*?A..?Z]*4).sort, quindi le lettere vengono ordinate come nell'esempio.
arte

2
@manatwork: puts (?A..?Z).map{|i|[i]*4}è un personaggio più corto. È possibile chiamare mapdirettamente su un intervallo, quindi in questo caso non è necessario lo splat.
Mark Reed,

5

PowerShell: 32 23

Codice golfizzato:

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

Procedura dettagliata:

[char[]](... )prende una matrice di oggetti e li converte in caratteri ASCII.
65..90sono i codici ASCII per AZ.
*4ripete la serie 4 volte.
|Sortordina l'output.

Nota:

Se vuoi che questo sia scritto su un file, lancia >, seguito da un nome di file, alla fine.


5

Haskell, 46

x a=a++a
main=putStr$['A'..'Z']>>=x.x.(:"\n")

1
putStr$['A'..'Z']>>=("golf">>).(:"\n")salva 8 bit
Angs

5

Befunge 98-18

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

Funziona memorizzando un numero e terminando quando raggiunge 104. Stampa il carattere corrispondente dell'alfabeto per il numero diviso per 4, seguito da una nuova riga. Ma se non ho bisogno di aggiungere una nuova riga dopo ogni lettera, allora sono 16 caratteri:

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

Può essere ridotto se riesco a stampare più caratteri (cioè tutti quattro volte) ( 7 6 caratteri, funziona anche in Befunge 93):

1+:4/,

Con newline:

1+:4/,a,


4

Perl 5, 21

map{print"$_
"x4}A..Z

2
Non mi è mai venuto in mente di inserire una nuova riga letterale all'interno di una stringa tra virgolette doppie in Perl. +1.
Mark Reed,

Dovrei notare che neanche io, ma @manatwork lo ha menzionato in un'altra mia risposta ed è bloccato!
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 anche:

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

Grazie a @marinus, 43:

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

Devo aggiungere una taglia per arrivare a 42? :)


6
50 rep. è necessario per commentare qualsiasi cosa e hai 101 al momento della pubblicazione di questo commento.
syb0rg,

Grande! Grazie! Risposta modificata!
Moala,

1
Puoi sostituirlo >>2con /4.
Marin

4

Java: 56

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

modifica: cambiato da 'stampa' a 'println'


L'output dovrebbe includere newline dopo ogni lettera.
Pierre Arlaud,

grazie per averlo sottolineato, dovrebbe stampare ogni volta una nuova riga
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. penso che la tua soluzione violi questa condizione
user902383

2
@ user902383 Se lo si incolla in JShell (REPL Java in Java 9) funziona, e non è nemmeno necessario il punto e virgola finale.
David Conrad,

@DavidConrad È fantastico allora, penso che potrei iniziare a usare REPL / JShell.
user902383


4

In realtà, 6 byte

4ú*SÖi

Provalo qui!

Spiegazione

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 byte con lettere minuscole e nessuna riga nuova:

4ú*S

1
Benvenuti in PPCG!
Erik the Outgolfer,

4

Codice macchina x86 a 16 bit MS-DOS COM, 25 byte

In esadecimale:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

Questo è un programma MSC-DOS completo. Copia la sequenza di byte nel file con estensione .com ed eseguila da DOSBox

Smontaggio:

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

3

BrainF * , 79 60

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

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

3

AWK, 48

Proviamo con AWK ...

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

Come suggerito dall'uomo, possiamo sbarazzarci di 2 caratteri

AWK, 46 (Modifica)

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

AWK, 40 (modifica del codice di MarkReed )

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

Rimuovendo l'inizializzazione della variabile s si può risparmiare 2 caratteri: END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}.
arte

1
Mettere il codice in un ENDblocco significa che richiede un flusso di input (anche se è /dev/null) per funzionare. Questo modifica il conteggio dei caratteri? Comunque, BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}è di 5 caratteri più corto.
Mark Reed,

@MarkReed Il tuo codice non funziona. Controllare questo
Wasi

D'oh. Così vicino! :) Ma ancora non mi piace il ENDrequisito del modello per un flusso di input ...
Mark Reed,

3

PowerShell, 21

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

Un approccio leggermente diverso a quello di Iszi. E più breve :-)


3

C # LINQ 115 byte 110 byte

Enumerable.Range(65, 26).SelectMany(i => Enumerable.Repeat(i,4))
.ToList().ForEach(i=> Console.WriteLine((char)i));

1
Benvenuti in PPCG! Bel primo post!
Rɪᴋᴇʀ

3

05AB1E, 6 byte

A4×{S»

Spiegazione:

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

Senza newline, 4 byte

A4×{

Provalo online!



3

Perl 6, 32

.say for (('A'..'Z') »xx»4)[*;*]

Penso che questa sia la prima volta che Perl 6 è stata la prima soluzione a cui ho pensato, ma l'iperoperatore sembrava semplicemente una soluzione naturale.
Mark Reed,

3

Tela , 5 byte

Z41*⟳

Provalo qui!

Spiegazione:
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 sostituito con \nal momento della stampa.



3

Brainfuck , 48 byte

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

Provalo online!

Stampa in minuscolo, separato da ritorni a capo. Utilizza il wrapping di celle a 8 bit e celle a sinistra dell'origine, sebbene sia possibile anteporre a >per contrastare quest'ultima.


Stavo per pubblicarne uno nuovo, ma sei riuscito a fare del mio meglio, ho ottenuto 71 byte con ++++++ [-> ++> ++++> ++++++++ ++ <<<] ++++> +> ++> +++++ <[-........> << >> << >> << >> << +>]
KrystosTheOverlord,



2

Scala, 42

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.