Stampa l'alfabeto greco!


11

Abbastanza ovviamente, devi stampare l'alfabeto greco. Ma ho pensato di renderlo leggermente più interessante, quindi c'è una svolta: quando il tuo programma viene eseguito con un argomento (qualsiasi cosa), dovrebbe produrre l'alfabeto greco in minuscolo.

Informazione

  1. Alfabeto greco (maiuscolo): ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
  2. Alfabeto greco (minuscolo): αβγδεζηθικλμνξοπρστυφχψω

Regole / Requisiti

  • Ogni invio deve essere un programma completo.
  • Non sono ammessi builtin per stampare l'alfabeto greco
  • Si applicano scappatoie standard
  • È necessario stampare esattamente ciò che viene mostrato.

punteggio

I programmi vengono classificati in base ai byte. Se si utilizza un set di caratteri diverso da UTF-8, specificare. Cerca di ottenere il minor numero di byte da tutti, questo è !

Casi test

./program
==> ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ

./program 1
==> αβγδεζηθικλμνξοπρστυφχψω

./program 'lower'
==> αβγδεζηθικλμνξοπρστυφχψω

./program 123897883421
==> αβγδεζηθικλμνξοπρστυφχψω

./program ""
==> αβγδεζηθικλμνξοπρστυφχψω

greek();
==> ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ

greek("blah");
==> αβγδεζηθικλμνξοπρστυφχψω

greek(123);
==> αβγδεζηθικλμνξοπρστυφχψω

Inseriti

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

# Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

# Perl, 43 + 2 (-p flag) = 45 bytes

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes

Classifica

Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.


5
Una stringa vuota conta come avere un argomento o non avere argomento? Si prega di utilizzare Sandbox per ottenere feedback prima di pubblicare una sfida sul sito principale.
Mego,


2
L'argomento sarà sempre un argomento o possono esserci due o più argomenti?
Erik the Outgolfer,

1
Kritixi approva la sfida.
user41805,

4
Sono un po 'confuso dai tuoi ultimi tre casi di test; sembrano chiamate di funzione, ma le regole richiedono specificamente un programma completo.
Dennis,

Risposte:


7

05AB1E , 16 byte

Utilizza la codifica CP-1252 .

24Ý17K913+çJDl¹s

Provalo online!

Spiegazione

24Ý               # push range [0 ... 24]
   17K            # remove 17
      913+        # add 913 to each
          ç       # convert from code point
           J      # join to string
            Dl    # push a lowercase copy
              ¹   # push the input
               s  # swap the top 2 elements of the stack
                  # implicitly display the top of the stack

Intendevi [0 ... 23]o [0, 24)invece di [0 ... 24]o [0, 24]?
Erik the Outgolfer,

1
@EriktheGolfer C'è un altro carattere tra l'intervallo dei punti del codice alfabetico greco.
jimmy23013,

@ jimmy23013 Oh giusto, ero davvero confuso. Sto lavorando in un'altra lingua, che non dirò qui. Sono impegnato in questo proprio ora.
Erik the Outgolfer,

7

Rubino, 56 byte

Programma completo. Non credo che una risposta funzione / lambda sarà più breve di questa per questa lingua.

Dangit, sigma ς. Questo è il motivo per cui non possiamo avere cose carine. E anche tu, (personaggio non rendering che funge da segnaposto per "lettere maiuscole" ς)

print *($*[0]?([*?α..?ω]-[?ς]):[*?Α..?Ρ,*?Σ..?Ω])

6
Penso che questo stampi un sigma extra minuscolo, ς
Angs

1
Questo ora stampa un U + 03A2 extra.
LegionMammal978,

5

JavaScript (ES6), 89 83 81 byte

(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i*1.06+913+32*a.length))

Se una matrice di caratteri è accettabile, per 82 80 78 byte:

(...a)=>[...Array(24)].map((_,i)=>String.fromCharCode(i*1.06+913+32*a.length))

Modifica: salvato un sacco di byte grazie a @ETHproductions.


L'uso String.fromCharCode(...array)è di nuovo più breve:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i+(i>16)+913+32*!!a.length))
ETHproductions

1
E dai String.fromCharCodepiani, è possibile salvare altri due byte in questo modo:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i*1.06+913+32*!!a.length))
ETHproductions

@ETHproductions Non riesco a credere di aver dimenticato di usare String.fromCharCode(...)ma mi piace quel i*1.06trucco! Purtroppo, per quanto ne so, le comprensioni sono più lunghe di un byte.
Neil,

Sono riuscito a farlo scendere a (...a)=>String.fromCharCode(...[for(_ of Array(i=24))i++*42/41+889+32*!!a.length])(82).
ETHproductions

Puoi rimuovere il !!, poiché ci saranno solo zero o uno args.
ETHproductions

4

Haskell, 114 108 byte

import System.Environment
q[a,b]=[a..b]
f[]=q"ΑΡ"++q"ΣΩ"
f _=q"αρ"++q"σω"
main=f<$>getArgs>>=putStr

Grazie a @xnor per aver salvato 6 byte

Questo potrebbe vincere nella categoria delle importazioni più lunghe se non altro ...


Sembra che valga la pena definire q[a,b]=[a..b]4 volte.
xnor

1
getArgs>>=putStr.fè più corto.
Ørjan Johansen


3

Pyke, 55 21 20 byte

24Fi16>913s.C)sz!hAl

Provalo qui!

24F          )       -   for i in range(24):
   i16>              -       i > 16
       913s          -      sum(i, ^, 913)
           .C        -     chr(^)
              s      -  sum(^) - created uppercase alphabet
                  Al - [len, lower, upper][V](^)
                 h   -  V + 1
               z!    -   not input()

2

In realtà , 62 byte

 "$ù"E"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"@ƒ.X

Provalo online!

Poiché parte dell'alfabeto greco maiuscolo non è presente in CP437, questa soluzione è codificata in UTF-8 e ha ottenuto un punteggio di conseguenza. Ecco un hexdump (reversibile con xxd -r):

00000000: 2022 24c3 b922 4522 ce91 ce92 ce93 ce94   "$.."E"........
00000010: ce95 ce96 ce97 ce98 ce99 ce9a ce9b ce9c  ................
00000020: ce9d ce9e ce9f cea0 cea1 cea3 cea4 cea5  ................
00000030: cea6 cea7 cea8 cea9 2240 c692 2e58 0a    ........"@...X.

Spiegazione:

 "$ù"E"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"@ƒ.X
<space>                               push the number of items present on the stack
 `$ù`E                                select `ù` (lowercase) if the number of items is not 0, else `$` (stringify - does nothing to a string)
      "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"      push the uppercase Greek alphabet
                                @ƒ    call the selected function
                                  .   print
                                   X  discard

2

Python 3, 80 77 76 byte

import sys;a='ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ';print([a,a.lower()][-len(sys.argv)])

Vecchia versione:

import sys;a='ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ';print([a,a.lower()][len(sys.argv)-1])

Versione precedente:

import sys;a='ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ';print(a.lower()if len(sys.argv)>1else a)

[a,a.lower()][len(sys.argv)-1]perché i commenti affermano che ci sarà sempre e solo un argomento.
Value Ink

Puoi radere un altro byte con [a.lower(),a][-len(sys.argv)].
toriningen,

2
Quale codifica stai usando per 76 byte?
AdmBorkBork,


2

R, 104 99 92 byte

g=function(x)for(i in sprintf("'\\u%04X'",913:937+32*!missing(x))[-18])cat(eval(parse(t=i)))

Giocare a golf sulla seconda versione che avevo in precedenza. Funziona allo stesso modo della versione precedente.

Grazie a @JDL per la rasatura di 7 byte!

Vecchie versioni a 104 byte:

Ho due diverse soluzioni con lo stesso numero di byte:

f=function(x){a="ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ";cat(if(missing(x))a else tolower(a))}

O:

g=function(x)for(i in sprintf("'\\u%04X'",if(missing(x))913:937 else 945:969)[-18])cat(eval(parse(t=i)))

spiegazioni:

#First one is trivial
f=function(x){
     a="ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ" #String to print
     #If argument missing, print uppercase else lowercase 
     cat(if(missing(x))a else tolower(a)) 
     }
#Second one more interesting:
g=function(x)
     #Create escaped unicode strings (i. e. "'\\u03B1'" etc.), loop over them...
     for(i in sprintf("'\\u%04X'",if(missing(x))913:937 else 945:969)[-18])
          #...eval the strings
          cat(eval(parse(t=i))) 

Uso:

> f()
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
> g()
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
> f(1)
αβγδεζηθικλμνξοπρστυφχψω
> g(1)
αβγδεζηθικλμνξοπρστυφχψω
> f("a")
αβγδεζηθικλμνξοπρστυφχψω
> g("a")
αβγδεζηθικλμνξοπρστυφχψω

Per alcuni motivi, non funziona su R-Fiddle (cambia "di 'default il che genera un errore nel codice) ma puoi provarlo su Ideone .


Sostituisci +'if'(missing(x),0,32)con +32*!missing(x)?
JDL,

@JDL Grazie! Non so perché non ci abbia pensato.
plannapus,

2

Japt , 21 19 byte

;Ck"rz" c+816+32*NÊ

Test (nessun input)
Test (input stringa vuota)


Spiegazione

      :Implicit input.
;C    :The lowercase alphabet.
k"rz" :Remove r & z.
c+    :Map over the charcodes of the string and add...
816+  :    816 plus...
32*NÊ :    32 multiplied by the length of the array of input variables; 0 if no input is supplied, 1 if a single input is supplied.
      :Implicit output of resulting string

1

Scala, 82 byte

print((('Α'to'Ρ')++('Σ'to'Ω')).mkString.map(& =>if(args.size<1)&else&toLower))

Ungolfed:

print((('Α'to'Ρ')++('Σ'to'Ω')).mkString.map(s=>if(args.size==0)s else s.toLower))

Purtroppo, (('Α'to'Ρ')++('Σ'to'Ω'))è un Vector[Char], che verrebbe stampato come Vector('Α', 'Β', ..., quindi deve essere convertito in una stringa con mkString. L'argomento a mapviene chiamato &per salvare spazi tra &else, else&e & toLower.


1

Gelatina , 21 byte

,⁸Ea32µ24R%18T+912+µỌ

Un programma completo

TryItOnline! - nota una volta eseguito con un argomento sarà richiesto un aggiornamento per eseguire senza alcun argomento.

Come?

,⁸Ea32µ24R%18T+912+µỌ - Main link
,⁸                    - pair (,) with left argument (defaults: left=0, ⁸=[])
                            no argument: [0,[]]
                               argument: [argument,argument]
  E                   - all items equal? -> no argument: 0; argument: 1
   a32                - and 32           -> no argument: 0; argument: 32
      µ               - monadic chain separation
       24R            - range(25)        -> [  1,  2,  3,..., 17, 18, 19,..., 25]
          %18         - mod 18           -> [  1,  1,  1,...,  1,  0,  1,...,  1]
             T        - truthy indices   -> [  1,  2,  3,..., 17,     19,..., 25]
              +912    - add 912          -> [913,914,915,...,929,    931,...,937]
                  +   - add the 0 or 32 (lowercase letters are 32 code points higher)
                   µ  - monadic chain separation
                    Ọ - cast to ordinals

1

PowerShell v2 +, 68 byte

(($a=-join([char[]](913..929+931..937))).toLower(),$a)[!$args.count]

Solo ASCII, ma emette in UTF-16. Costruisce una charmatrice dei caratteri appropriati, -joinla unisce in una stringa, la memorizza in $a. Quindi, utilizza !$args.countcome indice nella tupla, per generare $ase non sono presenti argomenti o $a.ToLower()se esiste almeno un argomento.

PS C:\Tools\Scripts\golfing> .\print-the-greek-alphabet.ps1
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ

PS C:\Tools\Scripts\golfing> .\print-the-greek-alphabet.ps1 ''
αβγδεζηθικλμνξοπρστυφχψω

1

PHP, 84 byte

Versione online

<?=($argc<2?trim:mb_strtolower)("ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ");

PHP, 87 byte

$s="ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ";echo$argc>1?mb_strtolower($s):$s;

gotcha . Sembri in qualche modo assente. $argc>1è 8 byte più corto di isset($argv[1])e non ha bisogno di uno spazio.
Tito

1

APL (Dyalog Extended) , 26 byte

Il modo normale per passare più argomenti ai programmi APL è attraverso un elenco. Quindi questo programma richiede tale elenco, che può avere 0 o 1 argomenti.

'ς΢'~⍨⍳'Ω'×~≢⎕

Provalo online!

 richiedere l'elenco degli argomenti

 calcolare il numero di argomenti (0 o 1)

~ negalo (1 o 0)

'Ω'× "moltiplica" Omega per quello (1 mantiene maiuscole, 0 volte per minuscole)

 Tutti i personaggi di Α- Ωo α- ωrispettivamente

'ς΢'~⍨ rimuove i sigmi finali minuscoli e "maiuscoli"


0

Python 2, 108 byte

#coding=iso-8859-7
import sys;print'αβγδεζηθικλμνξοπρστυφχψω'if~-len(sys.argv)else'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ'

Terribilmente golf, forse :(

E no, non posso usare A.lower() .

Grazie a 13285 (alexwlchan) per -11 byte.


Questa è la versione più golfata che posso fare.
Erik the Outgolfer,

Puoi salvare 8 byte saltando il compito A,ae semplicemente usando quelle stringhe direttamente nel file print.
alexwlchan,

@alexwlchan Giusto, non ci avevo pensato ... comunque terribilmente giocato a golf.
Erik the Outgolfer,

0

Mathematica, 91 byte

Print@{#&,ToLowerCase}[[Length@$ScriptCommandLine]][""<>"Α"~CharacterRange~"Ω"~Drop~{18}]

Script. Prende solo l'intervallo di caratteri da Αa Ω, rimuove U + 03A2 / ς, converte in minuscolo o no e stampa.


0

Perl, 39 + 3 ( -C2flag) = 44 42 byte

 perl -C2 -E 'say map{chr$_+954-!@ARGV*32}-9..7,9..15'

0

JavaScript, 95 byte

95 byte, ma solo 71 caratteri. Contatore byte . Utilizzando il modo di @Neil per determinare se gli argomenti vengono passati.

(...a)=>'ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ'[`to${a.length?'Low':'Upp'}erCase`]()

0

Java 7, 176 byte

class M{public static void main(String[]a){System.out.print(a.length>0?"αβγδεζηθικλμνξοπρστυφχψω":"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ");}}

Java 8, 173 byte

interface M{static void main(String[]a){System.out.print(a.length>0?"αβγδεζηθικλμνξοπρστυφχψω":"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ");}}

0

Python 3, 80 byte

import sys;print(''.join(chr(x+881+len(sys.argv)*32)for x in range(25)if x!=17))

0

C #, 174 byte

L'implementazione pigra, probabilmente può golf molto

class P{static void main(string[] a){System.Console.Write(a.Length>0?"αβγδεζηθικλμνξοπρστυφχψω":"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ");}}

0

PHP, 79 byte

for($i=944-32*!--$argc;$i++-9&31;$i+=$i%32==1)echo html_entity_decode("&#$i;");

genera entità HTML unicode e le decodifica. Corri con -r.


0

Pip , 21 20 byte

C:913+32*#g+Y,24RM17

Questa è una giornata memorabile. Pip ha legato Jelly battuto! 1

1 E perso con altri due golflang, ma qualunque cosa.

Provalo online!

Spiegazione

             ,25      Numbers 0 through 24
                RM17  Remove 17 (ς)
            Y         Yank (to get correct order of operations)
  913                 Char code of capital alpha
      32*#g           32 times number of cmdline args (must be 0 or 1)
     +     +          Add everything up
C:                    Convert to characters (using the compute-and-assign metaoperator to
                        lower the precedence of C)

0

tcl, 73

 puts [expr $argc>0?"αβγδεζηθικλμνξοπρστυφχψω":"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"]

dimostrazione



0

Braingolf , 24 byte

l?#α:#Α|# 9->[.!@ 1+];

Provalo online!

Spiegazione:

l?#α:#Α|# 9->[.!@ 1+];  Implicit input of args to stack
l                       Push length of stack
 ?                      If last item (length) is != 0..
  #α                    ..Push lowercase alpha
    :                   else
     #Α                 ..Push uppercase alpha
       |                endif
        #<space>        Push 32 (ordinal of a space)
          9-            Subtract 9 (23)
            >           Move last item to start of stack
             [......]   Do-While loop, will run 24 times
              .         Duplicate last item
               !@       Print without popping
                  1     Push 1
                   +    Pop last 2 items (1 and duplicate) and push sum
                     ;  Suppress implicit output


-1

Groovy Script, 54 51 byte

((913..937)-930).each{print((char)(args?it+32:it))}

modificare

Passato da 913..937e it==930?:a(913..937)-930


Qualcuno può spiegarmi, perché la mia risposta è stata sottoposta a downgrade? Ha infranto qualche regola?
Victor A.

-1

Perl sotto Windows - la console non ha supporto Unicode - (42 byte, spazi inclusi)

Questa non è la mia soluzione, sto semplicemente adattando la soluzione Perl di Denis Ibaev sopra, alla console Windows Perl.

perl -E"say map{chr$_+151-!@ARGV*24}1..24"
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
$ perl -E"say map{chr$_+151-!@ARGV*24}1..24" with one or many arguments
αβγδεζηθικλμνξοπρσςτυφχψ

Il codice della pagina della console deve essere in greco ovviamente:

chcp 737

NOTA: solo una piccola idea. In questa pagina posso vedere che alcune delle risposte usano PERSONAGGI che sembrano essere Unicode sopra 255. Pertanto quei caratteri impiegano almeno 2 byte per codificare (forse 4 se uno sta usando una console usando caratteri Unicode a 32 bit?). Non sarebbe meglio se la misura del concorso fosse l'unità PERSONAGGIO (essendo Unicode o ASCII o EBCDIC o qualsiasi altra cosa) piuttosto che solo BYTES? Non sarebbe più semplice e di più unificante (mi chiedo se questa modifica esiste in inglese, "unificateur" in francese)?


Codice precedente in errore: non stampa omega minuscole.

Codice corretto (70 caratteri):

perl -E"$i=!@ARGV+0;@a=73;pop@a if$i;say map{chr$_+151-$i*24}1..24,@a"
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
perl -E"$i=!@ARGV+0;@a=73;pop@a if$i;say map{chr$_+151-$i*24}1..24,@a" foo
αβγδεζηθικλμνξοπρσςτυφχψω

So che non dovremmo stampare la forma sigma "end-of-word" ("ς") ma poiché è un errore di ortografia nell'antico greco usare sigma regolare ("σ") alla fine di una parola minuscola, Ho scelto di stamparlo, poiché il piccolo pezzo di questo puzzle è "Stampa l'alfabeto greco" e che questo personaggio ne fa parte ...

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.