¡Imprime el alfabeto griego!

11

Obviamente, tienes que imprimir el alfabeto griego. Pero pensé que lo haría un poco más interesante, así que hay un giro: cuando su programa se ejecuta con un argumento (cualquier cosa), debería generar el alfabeto griego en minúsculas.

Información

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

Reglas / requisitos

  • Cada presentación debe ser un programa completo.
  • No se permiten las letras para imprimir el alfabeto griego
  • Se aplican lagunas estándar
  • Debe imprimir exactamente lo que se muestra.

Puntuación

Los programas se puntúan según los bytes. Si está utilizando un juego de caracteres diferente a UTF-8, especifique. Intenta obtener la menor cantidad de bytes de todos, ¡esto es !

Casos de prueba

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

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

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

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

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

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

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

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

Envíos

Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:

# Language Name, N bytes

¿Dónde Nestá el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:

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

Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:

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

También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:

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

Tabla de clasificación

Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.

George Gibson
fuente
55
¿Una cadena vacía cuenta como tener un argumento o no tener argumento? Utilice el Sandbox para obtener comentarios antes de publicar un desafío en el sitio principal.
Mego
2
Relacionados .
Erik the Outgolfer
2
¿El argumento será siempre un argumento, o puede haber dos o más argumentos?
Erik the Outgolfer
1
Kritixi aprueba el desafío.
user41805
44
Estoy un poco confundido por tus últimos tres casos de prueba; se ven como llamadas a funciones, pero las reglas piden específicamente un programa completo.
Dennis

Respuestas:

7

05AB1E , 16 bytes

Utiliza la codificación CP-1252 .

24Ý17K913+çJDl¹s

Pruébalo en línea!

Explicación

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
Emigna
fuente
¿Quiso decir [0 ... 23]o en [0, 24)lugar de [0 ... 24]o [0, 24]?
Erik the Outgolfer
1
@EriktheGolfer Hay otro personaje entre el rango de puntos de código del alfabeto griego.
jimmy23013
@ jimmy23013 Ah, claro, estaba realmente confundido. Lo estoy trabajando en otro idioma, que no contaré aquí. Estoy comprometido con eso ahora.
Erik the Outgolfer
7

Ruby, 56 bytes

Programa completo No creo que una respuesta de función / lambda sea más corta que esta para este lenguaje.

Dangit, sigma ς. Por eso no podemos tener cosas buenas. Y usted también, (carácter irrenunciable que sirve como marcador de posición para "mayúsculas" ς)

print *($*[0]?([*?α..?ω]-[?ς]):[*?Α..?Ρ,*?Σ..?Ω])
Tinta de valor
fuente
66
Creo que esto imprime una sigma en minúscula adicional, ς
Angs
1
Esto ahora imprime un U + 03A2 extra.
LegionMammal978
5

JavaScript (ES6), 89 83 81 bytes

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

Si una matriz de caracteres es aceptable, entonces para 82 80 78 bytes:

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

Editar: ahorró un montón de bytes gracias a @ETHproductions.

Neil
fuente
Usar String.fromCharCode(...array)es nuevamente más corto:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i+(i>16)+913+32*!!a.length))
ETHproductions
1
Y desde los String.fromCharCodepisos, puede guardar otros dos bytes así:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i*1.06+913+32*!!a.length))
ETHproductions
@ETHproductions No puedo creer que olvidé usar, ¡ String.fromCharCode(...)pero me gusta ese i*1.06truco! Lamentablemente, las comprensiones son un byte más largo esta vez por lo que puedo decir.
Neil
Me las arreglé para llegar a (...a)=>String.fromCharCode(...[for(_ of Array(i=24))i++*42/41+889+32*!!a.length])(82).
ETHproductions
Puede eliminar el !!, ya que solo habrá cero o un argumento.
ETHproductions
4

Haskell, 114108 bytes

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

Gracias a @xnor por guardar 6 bytes

Esto podría ganar en la categoría de importaciones más largas si nada más ...

Angs
fuente
Parece que vale la pena definirlo q[a,b]=[a..b]para usar 4 veces.
xnor
1
getArgs>>=putStr.fEs más corto.
Ørjan Johansen
3

Pyke, 55 21 20 bytes

24Fi16>913s.C)sz!hAl

Pruébalo aquí!

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()
Azul
fuente
2

En realidad , 62 bytes

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

Pruébalo en línea!

Debido a que parte del alfabeto griego en mayúsculas no está presente en CP437, esta solución se codifica en UTF-8 y se califica en consecuencia. Aquí hay un hexdump (reversible 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.

Explicación:

 "$ù"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
Mego
fuente
2

Python 3, 80 77 76 bytes

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

Versión antigua:

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

Versión antigua:

import sys;a='ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ';print(a.lower()if len(sys.argv)>1else a)
Elronnd
fuente
[a,a.lower()][len(sys.argv)-1]porque los comentarios indican que solo habrá un argumento.
Value Ink el
Puedes afeitarte un byte más con [a.lower(),a][-len(sys.argv)].
toriningen
2
¿Qué codificación estás usando para que sea 76 bytes?
AdmBorkBork
2

R, 104 99 92 bytes

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

Jugar al golf en la segunda versión que tenía anteriormente. Trabaja de la misma manera que la versión anterior.

¡Gracias a @JDL por eliminar 7 bytes!

Versiones anteriores a 104 bytes:

Tengo dos soluciones diferentes con el mismo número de bytes:

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)))

Explicaciones:

#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")
αβγδεζηθικλμνξοπρστυφχψω

Por alguna razón, no funciona en I-violín (cambia "a 'por defecto que hace que el código de lanzar un error), pero se puede probar en Ideone .

plannapus
fuente
Reemplazar +'if'(missing(x),0,32)con +32*!missing(x)?
JDL
@JDL ¡Gracias! No sé por qué no pensé en eso.
plannapus
2

Japt , 21 19 bytes

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

Pruébelo (sin entrada)
Pruébelo (entrada de cadena vacía)


Explicación

      :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
Lanudo
fuente
1

Scala, 82 bytes

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

Sin golf:

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

Lamentablemente, (('Α'to'Ρ')++('Σ'to'Ω'))es un Vector[Char], que se imprimiría como Vector('Α', 'Β', ..., por lo que debe convertirse en una cadena con mkString. El argumento a mapse llama &para guardar espacios entre &else, else&y & toLower.

corvus_192
fuente
1

Jalea , 21 bytes

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

Un programa completo

TryItOnline! - tenga en cuenta que una vez que se ejecuta con un argumento, se requerirá una actualización para ejecutar sin argumento.

¿Cómo?

,⁸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
Jonathan Allan
fuente
1

PowerShell v2 +, 68 bytes

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

Solo ASCII, pero salidas en UTF-16. Construye una charmatriz de los caracteres apropiados, -joinlos une en una cadena y los almacena $a. Luego, se usa !$args.countcomo índice en la tupla, para generar resultados $asi no hay argumentos presentes o $a.ToLower()si hay al menos un argumento.

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

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

PHP, 84 bytes

Versión en línea

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

PHP, 87 bytes

$s="ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ";echo$argc>1?mb_strtolower($s):$s;
Jörg Hülsermann
fuente
Gotcha . Pareces de alguna manera ausente. $argc>1es 8 bytes más corto que isset($argv[1])y no necesita un espacio en blanco.
Titus
1

APL (Dyalog Extended) , 26 bytes

La forma normal de pasar múltiples argumentos a los programas APL es a través de una lista. Por lo tanto, este programa solicita dicha lista, que puede tener 0 o 1 argumentos.

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

Pruébalo en línea!

 solicitud de lista de argumentos

 cuenta el número de argumentos (0 o 1)

~ negar eso (1 o 0)

'Ω'× "multiplica" Omega por eso (1 mantiene mayúsculas, 0 pliegues a minúsculas)

 Todos los personajes de Α- Ωo α- ωrespectivamente

'ς΢'~⍨ eliminar las sigmas finales en minúsculas y "mayúsculas"

Adán
fuente
0

Python 2, 108 bytes

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

Terriblemente golfizado, tal vez :(

Y no, no puedo usar A.lower().

Gracias a 13285 (alexwlchan) por -11 bytes.

Erik el Outgolfer
fuente
Esta es la versión más golfizada que puedo hacer.
Erik the Outgolfer
Puede guardar 8 bytes omitiendo la asignación A,ay simplemente usando esas cadenas directamente en print.
alexwlchan
@alexwlchan Correcto, simplemente no lo pensé ... aunque todavía estoy terriblemente jugando al golf.
Erik the Outgolfer
0

Mathematica, 91 bytes

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

Guión. Simplemente toma el rango de caracteres de Αa Ω, elimina U + 03A2 / ς, convierte a minúsculas o no, e imprime.

LegionMammal978
fuente
0

Perl, 39 + 3 ( -C2bandera) = 44 42 bytes

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

JavaScript, 95 bytes

95 bytes, pero solo 71 caracteres. Contador de bytes . Usando la forma de @Neil para determinar si se pasan argumentos.

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

Java 7, 176 bytes

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

Java 8, 173 bytes

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

Python 3, 80 bytes

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

C #, 174 bytes

Implementación perezosa, probablemente puede jugar mucho golf

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

PHP, 79 bytes

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

genera entidades html unicode y las decodifica. Corre con -r.

Titus
fuente
0

Pip , 21 20 bytes

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

Este es un día memorable. ¡Pip ha atado a Jelly vencida! 1

1 Y perdió con otros dos golflangs, pero lo que sea.

Pruébalo en línea!

Explicación

             ,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)
DLosc
fuente
0

tcl, 73

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

manifestación

sergiol
fuente
0

Retina , 55 bytes

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

Pruébalo en línea

mbomb007
fuente
0

Braingolf , 24 bytes

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

Pruébalo en línea!

Explicación:

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
Skidsdev
fuente
-1

Groovy Script, 54 51 bytes

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

Editar

Cambiado de 913..937y it==930?:a(913..937)-930

Victor A.
fuente
¿Alguien puede explicarme por qué mi respuesta fue rechazada? ¿Rompió alguna regla?
Victor A.
-1

Perl en Windows: la consola no es compatible con Unicode (42 bytes, incluidos los espacios)

Esta no es mi solución, solo estoy adaptando la solución Perl de Denis Ibaev anterior, a la consola de 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
αβγδεζηθικλμνξοπρσςτυφχψ

El código de la página de la consola debe ser griego, por supuesto:

chcp 737

NOTA: Solo una pequeña idea. En esta página puedo ver que algunas de las respuestas usan CARACTERES que parecen ser Unicode superiores a 255. Por lo tanto, esos caracteres toman al menos 2 bytes para codificar (¿quizás 4 si uno está usando una consola con caracteres Unicode de 32 bits?). ¿No sería mejor si la medida del concurso fuera la unidad CHARACTER (siendo Unicode o ASCII o EBCDIC o lo que sea) en lugar de solo BYTES? ¿No sería más simple y más unificador (me pregunto si este adjetivo existe en inglés, "unificateur" en francés)?


Código anterior por error: no imprime omega en minúsculas.

Código corregido (70 caracteres):

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
αβγδεζηθικλμνξοπρσςτυφχψω

Sé que se supone que no debemos imprimir la forma sigma 'fin de palabra' ('ς') pero como es un error de ortografía en griego antiguo usar sigma regular ('σ') al final de una palabra minúscula, Elijo imprimirlo, ya que el título de este rompecabezas es "Imprime el alfabeto griego" y que este personaje es parte de él ...

Gilles Maisonneuve
fuente