L'alfabeto nei linguaggi di programmazione


69

Il nostro compito è, per ogni lettera dell'alfabeto (inglese), scrivere un programma che stampa l'alfabeto, in una lingua il cui nome inizia con quella lettera.

Input: nessuno

Produzione:

abcdefghijklmnopqrstuvwxyz

nuova riga maiuscola e finale facoltativa

Regole :

  • La metrica di calcolo del punteggio è la lunghezza del nome del linguaggio di programmazione , più la lunghezza del codice. Pertanto, a C verrà valutata una "penalità" di 1, mentre GolfScript verrà valutata una penalità di 10.
  • Una lingua / implementazione per risposta. Le risposte multiple sono incoraggiate.
  • Se la prima lettera del nome di un linguaggio di programmazione non è una lettera inglese, non dovrebbe essere forzata in una sola. Sarà trattata come una lettera separata (che significa meno concorrenza).
  • Nessuna risposta sarà accettata fino a quando ogni lettera inglese non avrà una soluzione.

Classifiche attuali:

Dimmi se mi manca qualcuno.

Classifica automatica (sperimentale)


1
Ci è permesso stampare junk su stderr?
Peter Taylor,

@Peter Taylor: impazzisci. Per rispondere alla tua domanda, sì, stampare junk su stderr va bene (purché stdout sia corretto).
Joey Adams,


Funge è distinto da Befunge. Sicuramente il mio pedanticismo sarà premiato in un sito dedicato alle sue imprese!
tngreene,

2
È *0*5AB1Elo stesso di *o*sabie: P?
Magic Octopus Urn

Risposte:


13

K è per K , 12 caratteri -> Punteggio: 13

`0:_ci97+!26

Sicuramente puoi adattare una delle tue soluzioni ad A +, giusto?
Joey,

L'impostazione di A + è un po 'funky. L'ho già fatto prima ma non mi va proprio. (Owl, newLISP e zshell erano tutti chiavi in ​​mano.)
Jesse Millikan,

3
presumo che sia k2 o k3. in k4 / q, puoi farlo in 7 caratteri con 1 .Q.a;.
Aaron Davies,

non hai bisogno `0:o 1@in codegolf
ngn

26

P è (in realtà) per Piet - 57 codici

Versione grande (dimensione del codice = 6)

p è per piet - grande

Versione piccola (dimensione del codice = 1)

p è per piet - piccolo

Testato con l'interprete di piet di Erik npiete sviluppato con Piet Creator .

Modifica : ecco una versione "trace" (generata con npiet -tpf) in modo da poter vedere come funziona.

L'esecuzione inizia in alto a sinistra e gira attorno al bordo in senso orario. Il bordo superiore e il bordo destro sono impostati (il calcolo del valore di a(97) richiede alcuni codici). Il ciclo inizia dal bordo inferiore e va al bordo sinistro. Quando zviene raggiunto il valore di il programma gira a destra nella sezione trasversale sotto il primo Pe termina.

Clicca sull'immagine per ingrandire e vedere i dettagli


Oooh, Piet è sempre bello. E non ti capita di avere un binario di Windows funzionante di Piet Creator in giro, vero? (Ero troppo pigro per cacciare tutte le dipendenze e i prerequisiti solo per giocare ancora un po '.)
Joey

E non sono in realtà 400 codici e 57 codici ? (Non credo che abbiamo avuto un consenso su come contare Piet qui, però)
Joey,

1
@Joey vedrò se riesco a cucinare una build di Piet Creator per Windows. È passato un po 'di tempo da quando l'ho provato lì. Hai ragione sui codici. Se dovessi disporre il programma in una riga, sarebbe di 57 codici (dare o prendere alcuni), la versione sopra è più amichevole per gli occhi (come lo spazio bianco in altre lingue). Forse i contributi di Piet dovrebbero avere sia fonti minime che accattivanti. Decidiamo meglio, perché sto programmando molte altre risposte di Piet :)
Casey,

Bene, potresti aprire una domanda su meta per chiedere chiarimenti su come gestire il codice Piet :-). Avrei inviato anche soluzioni Piet, molto tempo fa. Tranne il fatto che pietdev era piuttosto difettoso e per Piet Creator avevo bisogno di Qt e di poche altre cose solo per costruirlo ;-). E solo usare un editor bitmap è abbastanza ... ingombrante ...
Joey,

@Joey Piet Creator ha ancora bisogno di diversi miglioramenti importanti per essere davvero fantastico, spero di poterli aggiungere presto. Finisco per usare principalmente Piet Creator, quindi uso Paint o GIMP per spostare i blocchi di colore. Pietdev è stata la mia principale fonte d'ispirazione per PC. Ottenere un feedback su PC sarebbe fantastico, mi metterò su Windows che costruirà al più presto.
Casey,

17

P è per Perl, 10 caratteri -> Punteggio: 14

print a..z

28
Che dire say a..z?
mbx,

14

Y è per Yoix , 44 caratteri → Punteggio: 48

int x;for(;++x<27;)yoix.stdio.putchar(96+x);

12

W è per Whitespace, 72 caratteri -> Punteggio: 82

inserisci qui la descrizione dell'immagine

[Sp][Sp][Sp][Tab][Tab][Sp][Sp][Sp][Sp][Tab][LF][LF][Sp][Sp][Tab][Tab][LF][Sp][LF][Sp][Tab][LF][Sp][Sp][Sp][Sp][Sp][Tab][LF][Tab][Sp][Sp][Sp][Sp][LF][Sp][Sp][Sp][Sp][Tab][Tab][Tab][Tab][Sp][Tab][Tab][LF][Tab][Sp][Sp][Tab][LF][Tab][Sp][Sp][Sp][LF][LF][Sp][LF][Tab][Tab][LF][LF][Sp][Sp][Sp][Sp][LF][LF][LF][LF]

Ho passato anni a far funzionare questa cosa stupida ieri sera e poi ho scoperto che gli spazi bianchi non vengono visualizzati come codice qui! Poi, mentre stavo tenendo il broncio, la mia connessione Internet è morta. Quindi, lo sto pubblicando ora solo per non perdere un'ora della mia vita ieri sera per farlo funzionare.


6
Avrei pensato che fosse ovvio dal commento ora cancellato insieme alla mia soluzione che non avevo mai scritto alcun Whitespace prima. Apparentemente no.
Gareth,

@Mego Qualche possibilità che ci possa essere tolto il nome dal momento che non ho avuto nulla a che fare con esso?
Gareth,

11

A è per APL,  14  11 caratteri / byte * → punteggio 14

⎕UCS 96+⍳26

Questo funziona almeno in Dyalog e Nars2000 .


* APL può essere scritto nel proprio set di caratteri a byte singolo (legacy) che mappa i simboli APL sui valori superiori di 128 byte. Pertanto, ai fini del calcolo del punteggio, un programma di N caratteri che utilizza solo caratteri ASCII e simboli APL può essere considerato lungo N byte.


1
⎕afunziona in APLX .
Adám,

la nuova riga maiuscola e finale opzionale⎕A funziona in questo modo .
Adám,

11

P è per Python 2, 30 caratteri -> Punteggio: 36

L'ho fatto, dopo 8 anni mi sono reso conto che c'è un modo più breve in Python 2!

print bytearray(range(97,123))

Codice precedente grande quanto una stampa banale:

print'%c'*26%tuple(range(97,123))

print'abcdefghijklmnopqrstuvwxyz'

Modifica: Scopri la svolta con Python 3 dove ho anche trovato una soluzione più piccola della stampa banale: https://codegolf.stackexchange.com/a/195165/2212


2
Questa è la stessa lunghezza di print'abcdefghijklmnopqrstuvwxyz'...
nneonneo,

10

G è per Golfscript, 8 caratteri -> Punteggio: 18

123,97>+

9

R è per R, 19 → Punteggio: 20

cat(letters,sep="")

In alternativa (20 caratteri): gatto (lettere, sep = "")
Paolo

Non è lettersabbastanza buono? Non vedo le specifiche che specificano l'output deve essere una stringa contigua. Certo, l'esempio fornito è in quella forma, ma la "nuova riga finale è facoltativa"?
Gaffi,

@Gaffi: credo di aver mantenuto altre lingue allo stesso standard in questo thread, vale a dire, l'output deve essere esattamente "abc ... xyz", senza caratteri intermedi). Suppongo che potrei cambiare la regola e vincere il mio concorso, ma non sarebbe molto divertente.
Joey Adams,

7

R è per Ruby, 13 caratteri -> Punteggio: 17

Una soluzione di Ruby 1.9 Matma Rex ha inventato :

print *?a..?z

La mia soluzione Ruby 1.8 originale (15 caratteri -> Punteggio: 19):

$><<[*'a'..'z']

Questo non corrisponde ai criteri? L'output contiene caratteri aggiuntivi. Inoltre, se è OK, sarebbe $><<[*?a..?z]per Ruby 1.9 (rasatura di 2 caratteri).
Matma Rex,

1
La versione corretta più corta che posso concepire è print *?a..?z. È della stessa lunghezza e quella che ho suggerito sopra. Non possiamo usarlo $><<perché <<ha delle strane regole di precedenza e tutto esplode. Non possiamo usare po putsinvece printperché stampano ogni lettera su una riga separata.
Matma Rex,

Spiacente, avrei dovuto dire che questo è per Ruby 1.8. In Ruby 1.8 Array#to_sè lo stesso di Array#join, quindi stampa l'alfabeto senza caratteri extra. Ma la tua soluzione 1.9 è davvero più breve.
Ventero,


@George: il tuo output proviene da Ruby 1.8 (che può essere verificato qui: codepad.org/pvyqzaPP ). Come menziona il post, questa è una soluzione per Ruby 1.9.
Ventero,

7

F è per Fish (> <>), 19 caratteri -> Punteggio: 23

Perché è una lingua dannatamente bella!

30"`"1+::o&p&"y"(?;

Non è questa risposta segnata 22 perché <>>è lunga solo tre caratteri, non quattro. C'è un motivo per cui hai usato il nome più lungo nella partitura.
pepery

@ppperry Beh, il nome della lingua non può iniziare con una F ed essere <><.
terremoto del

1
Il nome della lingua è ><>, non<><
TuxCrafting

Questo non sembra funzionare, ma semplicemente stampa a. tio.run/##S8sszvj/39hAKUHJUNvKKl@tQE2pUknD3vr/fwA
Chris


6

S sta per Scala, 16 caratteri => punteggio 21

'a'to'z'mkString

18 caratteri => punteggio 23

'a'to'z'mkString""

22 caratteri => punteggio 27

('a'to'z')map(print _)




6

D è per cc, 17 caratteri → Punteggio: 19

97[dP1+dBD>x]dsxx

genera "ab" ed esce dalla versione 1.06.95 dc
Wossname

@Wossname echo '97[dP1+dBD>x]dsxx' | dcfunziona nella versione 1.07.1 dc
BlackCap

6

C è per C, 36 35 caratteri → Punteggio: 36

main(a){for(;putchar(a+++64)-90;);}

È possibile rilasciare 2 caratteri assumendo che (argc) sia uguale a uno anziché inizializzarlo.
Joey Adams,

Ma questo non si compila nemmeno ...
deceleratedcaviar

Il migliore che ho potuto compilare era 59 o 42 senza includere: #include <stdio.h> main () {for (int a = 27; - a;) putchar (96 + a);}
deceleratedcaviar

Daniel, funziona con MSVC 10 qui.
Joey,

5

P è per Python 2, 41 caratteri → Punteggio: 47

print''.join(chr(i+97)for i in range(26))

5

P è per PowerShell, 15 caratteri → Punteggio: 25

-join('a'..'z')

1
Hmm, non sono sicuro se fare questo W o P.
Joey Adams,

1
Tecnicamente è W, poiché il nome corretto della lingua (e del prodotto) è Windows PowerShell . Sì, anche questo mi dà fastidio.
Joey,


@dorukayhan: quando si utilizza PowerShell Core, possiamo anche accorciarlo, il -join('a'..'z')che risulta in 25.
Joey



4

T è per Gio, 35 caratteri → Punteggio: 39

0::=~abcdefghijklmnopqrstuvwxyz
::=
0

4

A è per AppleScript, 41 -> Punteggio: 52

display alert"abcdefghijklmnopqrstuvwxyz"

1
So che questo è molto tempo dalla pubblicazione, ma è possibile utilizzare "abcdefghijklmnopqrstuvwxyz", poiché il valore restituito viene emesso nel riquadro dei risultati.
Addison Crump,

4

M per Matlab, 13 caratteri, punteggio 19

disp('a':'z')

M per Matlab, 18 caratteri, punteggio 24

disp(char(97:122))

1
Non ho matlab a portata di mano, ma penso che devi disp(..)evitare questo risultato ans = .
Nabb,

Corretto, modificato nella risposta.
jpjacobs,

4

B è per BrainF ***, 38 + 9 = 47

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

Può essere ridotto a 31 + 9 = 40 , se le celle si avvolgono a 256:

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

4

B è per Bash: 4 + 16 = 20

printf %s {a..z}

o 15 con solo:

echo {a..z}

se a b c ...è consentito l'output del modulo (come si vede in molte altre risposte).


Io non la penso così. Linefeed è facoltativo, l'output è "abcdefghijklmnopqrstuvwxyz"
utente sconosciuto


3

U è per Unlambda - 8 + 79 = 87

``````````````````````````.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.zr

3

J è per J, 14 caratteri -> Punteggio: 15

echo u:97+i.26

Perché preoccuparsi di echo? u:97+i.26è un programma J completo.
Gregory Higley,

5
Perché questo non ha output quando viene eseguito come script (per me, comunque).
Jesse Millikan,

3

B, 45 -> Punteggio: 46

main(){auto i;i=95;while(i++<122)putchar(i);}
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.