Imprima o alfabeto grego!

11

É óbvio que você precisa imprimir o alfabeto grego. Mas pensei em torná-lo um pouco mais interessante, então há uma reviravolta: quando seu programa é executado com um argumento (qualquer coisa), ele deve exibir o alfabeto grego em letras minúsculas.

Em formação

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

Regras / Requisitos

  • Cada envio deve ser um programa completo.
  • Builtins para imprimir o alfabeto grego não são permitidos
  • Aplicam-se brechas padrão
  • Você deve imprimir exatamente o que é mostrado.

Pontuação

Os programas são pontuados de acordo com os bytes. Se você estiver usando um conjunto de caracteres diferente de UTF-8, especifique. Tente tirar o mínimo de bytes de todos, isto é !

Casos de teste

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

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

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

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

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

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

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

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

Submissões

Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:

# Language Name, N bytes

onde Nestá o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:

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

Se você quiser incluir vários números no cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou você deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:

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

Você também pode transformar o nome do idioma em um link que será exibido no snippet do placar de líderes:

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

Entre os melhores

Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma.

George Gibson
fonte
5
Uma string vazia conta como tendo um argumento ou sem argumento? Use o Sandbox para obter feedback antes de publicar um desafio no site principal.
Mego
2
Relacionado .
Erik the Outgolfer
2
O argumento será sempre um argumento ou pode haver dois ou mais argumentos?
Erik the Outgolfer
11
Kritixi aprova o desafio.
user41805
4
Estou um pouco confuso com seus três últimos casos de teste; eles se parecem com chamadas de função, mas as regras solicitam especificamente um programa completo.
Dennis

Respostas:

7

05AB1E , 16 bytes

Usa CP-1252 codificação .

24Ý17K913+çJDl¹s

Experimente online!

Explicação

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
fonte
Você quis dizer [0 ... 23]ou em [0, 24)vez de [0 ... 24]ou [0, 24]?
Erik the Outgolfer
11
@EriktheGolfer Há outro caractere entre o intervalo de pontos do código do alfabeto grego.
jimmy23013
@ jimmy23013 Oh, certo, eu estava realmente confuso. Estou trabalhando em outro idioma, que não vou contar aqui. Estou comprometido com isso agora.
Erik o Outgolfer
7

Ruby, 56 bytes

Programa completo. Eu não acho que uma resposta de função / lambda seja mais curta que essa para esse idioma.

Dangit, sigma ς. É por isso que não podemos ter coisas boas. E você também (caractere irrecuperável que serve como espaço reservado para "maiúsculas" ς)

print *($*[0]?([*?α..?ω]-[?ς]):[*?Α..?Ρ,*?Σ..?Ω])
Value Ink
fonte
6
Acho que este imprime uma sigma minúsculas adicional, ς
Angs
11
Isso agora imprime um 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))

Se uma matriz de caracteres for aceitável, para 82 80 78 bytes:

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

Editar: salvou um monte de bytes graças a @ETHproductions.

Neil
fonte
O uso String.fromCharCode(...array)é novamente mais curto:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i+(i>16)+913+32*!!a.length))
ETHproductions
11
E desde String.fromCharCodepisos, você pode salvar outros dois bytes assim:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i*1.06+913+32*!!a.length))
ETHproductions
@ETHproductions Não acredito que esqueci de usar, String.fromCharCode(...)mas gosto desse i*1.06truque! Infelizmente, as compreensões são um byte mais longo desta vez, pelo que sei.
Neil
Eu consegui reduzi-lo para (...a)=>String.fromCharCode(...[for(_ of Array(i=24))i++*42/41+889+32*!!a.length])(82).
ETHproductions
Você pode remover o !!, pois haverá apenas zero ou um argumento.
ETHproductions
4

Haskell, 114 108 bytes

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

Obrigado a @xnor por salvar 6 bytes

Isso pode ganhar na categoria de importações mais longas, se nada mais…

Angs
fonte
Parece que vale a pena definir o q[a,b]=[a..b]uso 4 vezes.
Xnor
11
getArgs>>=putStr.fé mais curto.
Ørjan Johansen
3

Pyke, 55 21 20 bytes

24Fi16>913s.C)sz!hAl

Experimente aqui!

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
fonte
2

Na verdade , 62 bytes

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

Experimente online!

Como parte do alfabeto grego maiúsculo não está presente no CP437, essa solução é codificada em UTF-8 e pontuada de acordo. Aqui está um hexdump (reversível com 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.

Explicação:

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

Python 3, 80 77 76 bytes

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

Versão antiga:

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

Versão antiga:

import sys;a='ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ';print(a.lower()if len(sys.argv)>1else a)
Elronnd
fonte
[a,a.lower()][len(sys.argv)-1]porque os comentários afirmam que apenas haverá um argumento.
Valor Ink
Você pode barbear mais um byte [a.lower(),a][-len(sys.argv)].
toriningen
2
Qual codificação você está usando, que são 76 bytes?
AdmBorkBork 24/10
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)))

Jogando golfe na segunda versão que eu tinha anteriormente. Funciona da mesma maneira que a versão anterior.

Graças a @JDL por cortar 7 bytes!

Versões antigas em 104 bytes:

Eu tenho duas soluções diferentes com a mesma contagem de bytes:

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

Ou:

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

Explicações:

#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 algumas razões, ele não funciona no R-Fiddle (muda "para o 'padrão, o que faz com que o código gere um erro), mas você pode testá-lo no Ideone .

plannapus
fonte
Substituir +'if'(missing(x),0,32)por +32*!missing(x)?
JDL
@JDL Thanks! Não sei por que não pensei nisso.
plannapus
2

Japonês , 21 19 bytes

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

Teste (sem entrada)
Teste (entrada de sequência vazia)


Explicação

      :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
Shaggy
fonte
1

Scala, 82 bytes

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

Infelizmente, (('Α'to'Ρ')++('Σ'to'Ω'))é a Vector[Char], que seria impresso como Vector('Α', 'Β', ..., portanto, deve ser convertido em uma sequência com mkString. O argumento para mapé chamado &para salvar espaços entre &else, else&e & toLower.

corvus_192
fonte
1

Gelatina , 21 bytes

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

Um programa completo

TryItOnline! - note que, uma vez executado com um argumento, será necessária uma atualização para executar sem argumento.

Como?

,⁸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
fonte
1

PowerShell v2 +, 68 bytes

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

Somente ASCII, mas gera em UTF-16. Constrói uma charmatriz dos caracteres apropriados, -joinagrupa-os em uma sequência e os armazena $a. Em seguida, usa !$args.countcomo um índice na tupla, para gerar saída $ase nenhum argumento estiver presente ou $a.ToLower()se houver pelo menos um argumento.

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

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

PHP, 84 bytes

Versão Online

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

PHP, 87 bytes

$s="ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ";echo$argc>1?mb_strtolower($s):$s;
Jörg Hülsermann
fonte
peguei . Você parece de alguma forma ausente. $argc>1é 8 bytes menor que isset($argv[1])e não precisa de um espaço em branco.
Titus
1

APL (Dyalog Extended) , 26 bytes

A maneira normal de passar vários argumentos para programas de APL é através de uma lista. Portanto, este programa solicita essa lista, que pode ter 0 ou 1 argumentos.

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

Experimente online!

 prompt para lista de argumentos

 calcula o número de argumentos (0 ou 1)

~ negar que (1 ou 0)

'Ω'× "multiplique" o Omega por isso (1 mantém maiúsculas, 0 dobras para minúsculas)

 Todos os caracteres de Α -Ω ou α- ωrespectivamente

'ς΢'~⍨ remova sigmas finais minúsculos e "maiúsculos"

Adão
fonte
0

Python 2, 108 bytes

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

Terrivelmente golfe, talvez :(

E não, eu não posso usar A.lower() .

Obrigado a 13285 (alexwlchan) por -11 bytes.

Erik, o Outgolfer
fonte
Esta é a versão mais golfe que posso fazer.
Erik the Outgolfer
Você pode salvar 8 bytes, pulando a atribuição para A,ae usando essas cadeias diretamente no print.
alexwlchan
@alexwlchan Certo, eu simplesmente não pensei nisso ... ainda assim terrivelmente jogado.
Erik the Outgolfer
0

Mathematica, 91 bytes

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

Roteiro. Apenas leva o intervalo de caracteres a partir Αde Ω, remove U + 03A2 / ς, sejam convertidos para minúsculas ou não, e impressões.

LegionMammal978
fonte
0

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

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

JavaScript, 95 bytes

95 bytes, mas apenas 71 caracteres. Contador de bytes . Usando a maneira de @Neil para determinar se os argumentos são passados.

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

C #, 174 bytes

Implementação preguiçosa, provavelmente pode jogar muito

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

PHP, 79 bytes

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

gera entidades html unicode e as decodifica. Corra com -r.

Titus
fonte
0

Pip , 21 20 bytes

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

Este é um dia memorável. Pip amarrou Jelly batido! 1

1 E perdeu para dois outros golflangs, mas tanto faz.

Experimente online!

Explicação

             ,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
fonte
0

tcl, 73

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

demonstração

sergiol
fonte
0

Retina , 55 bytes

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

Experimente online

mbomb007
fonte
0

Braingolf , 24 bytes

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

Experimente online!

Explicação:

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
fonte
-1

Script Groovy, 54 51 bytes

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

Editar

Comutado de 913..937e it==930?:para(913..937)-930

Victor A.
fonte
Alguém pode me explicar, por que minha resposta foi rebaixada? Ele quebrou alguma regra?
Victor A.
-1

Perl no Windows - o console não oferece suporte a Unicode - (42 bytes, incluindo espaços)

Esta não é a minha solução, estou apenas adaptando a solução Perl de Denis Ibaev acima, ao console do 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
αβγδεζηθικλμνξοπρσςτυφχψ

O código da página do console deve ser grego, é claro:

chcp 737

NOTA: Apenas uma pequena ideia. Nesta página, vejo que algumas das respostas usam CHARACTERS que parecem ter Unicode acima de 255. Portanto, esses caracteres levam pelo menos 2 bytes para codificar (talvez 4 se alguém estiver usando um console usando caracteres Unicode de 32 bits?). Não seria melhor se a medida do concurso fosse a unidade CHARACTER (sendo Unicode ou ASCII ou EBCDIC ou qualquer outra coisa) em vez de apenas BYTES? Não seria mais simples e mais unificador (pergunto se esse adjetivo existe em inglês, "unificateur" em francês)?


Código anterior com erro: Não imprime ômega minúsculo.

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

Sei que não devemos imprimir a forma sigma 'final da palavra' ('ς'), mas como é um erro de ortografia incorreta no grego antigo usar sigma regular ('σ') no final de uma palavra em minúscula, Eu escolhi imprimi-lo, pois o título deste quebra-cabeça é "Imprima o alfabeto grego" e esse personagem faz parte dele ...

Gilles Maisonneuve
fonte