Wydrukuj grecki alfabet!


13

Oczywiście trzeba wydrukować grecki alfabet. Ale pomyślałem, że uczynię to nieco bardziej interesującym, więc jest pewien zwrot: gdy twój program jest uruchamiany z argumentem (cokolwiek), powinien wypisać alfabet grecki małymi literami.

Informacja

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

Zasady / wymagania

  • Każde zgłoszenie musi być pełnym programem.
  • Wbudowane do drukowania alfabetu greckiego nie są dozwolone
  • Obowiązują standardowe luki
  • Musisz wydrukować dokładnie to, co pokazano.

Punktacja

Programy są oceniane według bajtów. Jeśli używasz zestawu znaków innego niż UTF-8, proszę określić. Postaraj się uzyskać jak najmniej bajtów od wszystkich, to jest !

Przypadki testowe

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

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

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

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

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

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

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

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

Zgłoszenia

Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:

# Language Name, N bytes

gdzie Njest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:

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

Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:

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

Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:

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

Tabela liderów

Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.


5
Czy pusty ciąg znaków liczy się jako mający argument lub bez argumentu? Skorzystaj z piaskownicy, aby uzyskać opinię przed opublikowaniem wyzwania na głównej stronie.
Mego,


2
Czy argument będzie zawsze jednym argumentem, czy może być dwa lub więcej argumentów?
Erik the Outgolfer

1
Kritixi zatwierdza wyzwanie.
user41805,

4
Jestem trochę zdezorientowany twoimi trzema ostatnimi testami; wyglądają jak wywołania funkcji, ale reguły konkretnie wymagają pełnego programu.
Dennis

Odpowiedzi:


7

05AB1E , 16 bajtów

Wykorzystuje kodowanie CP-1252 .

24Ý17K913+çJDl¹s

Wypróbuj online!

Wyjaśnienie

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

Miałeś na myśli [0 ... 23]czy [0, 24)zamiast [0 ... 24]czy [0, 24]?
Erik the Outgolfer

1
@EriktheGolfer Istnieje jeden inny znak między zakresem punktów kodu alfabetu greckiego.
jimmy23013,

@ jimmy23013 No tak, byłem bardzo zdezorientowany. Pracuję w innym języku, którego nie powiem tutaj. Jestem teraz do tego zobowiązana.
Erik the Outgolfer

8

Rubinowy, 56 bajtów

Pełny program Nie sądzę, że odpowiedź na funkcję / lambda będzie krótsza niż dla tego języka.

Dangit, sigma ς. Dlatego nie możemy mieć miłych rzeczy. I ty także (postać niepodlegająca wymianie, która służy jako symbol zastępczy dla „wielkich liter” ς)

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

7
Wydaje

1
Spowoduje to teraz wydrukowanie dodatkowego U + 03A2.
LegionMammal978 22.10.16

5

JavaScript (ES6), 89 83 81 bajtów

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

Jeśli tablica znaków jest dopuszczalna, to dla 82 80 78 bajtów:

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

Edycja: Zaoszczędź sporo bajtów dzięki @ETHproductions.


Korzystanie String.fromCharCode(...array)jest ponownie krótsze:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i+(i>16)+913+32*!!a.length))
ETHprodukcje

1
A ponieważ String.fromCharCodepodłogi, możesz zapisać kolejne dwa bajty w ten sposób:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i*1.06+913+32*!!a.length))
ETHprodukcje

@ETHproductions Nie mogę uwierzyć, że zapomniałem użyć, String.fromCharCode(...)ale lubię tę i*1.06sztuczkę! Niestety, o ile wiem, rozumienie jest tym razem bajtem dłuższym.
Neil,

Udało mi się sprowadzić to do (...a)=>String.fromCharCode(...[for(_ of Array(i=24))i++*42/41+889+32*!!a.length])(82).
ETHproductions

Możesz usunąć !!, ponieważ będzie tylko zero lub jeden argument.
ETHproductions

5

Haskell, 114 108 bajtów

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

Dzięki @xnor za zapisanie 6 bajtów

To może wygrać w kategorii najdłuższego importu, jeśli nic więcej…


Wygląda na to, że warto zdefiniować q[a,b]=[a..b]użycie 4 razy.
xnor

1
getArgs>>=putStr.fjest krótszy.
Ørjan Johansen

4

CJam , 16 bajtów

25,H-ea'α'Α?f+

Wypróbuj online!

25,H-         e# 0 to 24 excluding 17.
ea'α'Α?       e# If the argument list is truthy (non-empty), alpha, otherwise Alpha.
f+            e# Return characters with each number added to the character code.

Czy możesz dodać wyjaśnienie?
XiKuuKy

@XiKuuKy Nie sądzę: /
RGS

1
@RGS Edytowane. : /
jimmy23013

@ jimmy23013 nice one: -PI po prostu przewinął tę odpowiedź i pomyślałem, że skomentuję, jeśli chodzi o potomność. Nie sądziłem, że przyjdziesz i zredagujesz swoją odpowiedź! +1
RGS

3

Pyke, 55 21 20 bajtów

24Fi16>913s.C)sz!hAl

Wypróbuj tutaj!

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

Właściwie 62 bajty

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

Wypróbuj online!

Ponieważ część greckiego alfabetu nie występuje w CP437, to rozwiązanie jest zakodowane w UTF-8 i odpowiednio oceniane. Oto zrzut heksowy (odwracalny z 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.

Wyjaśnienie:

 "$ù"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 bajtów

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

Stara wersja:

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

Starsza wersja:

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

[a,a.lower()][len(sys.argv)-1]ponieważ komentarze mówią, że zawsze będzie tylko jeden argument.
Wartość tuszu

Możesz ogolić jeszcze jeden bajt [a.lower(),a][-len(sys.argv)].
toriningen

2
Jakiego kodowania używasz, że ma on 76 bajtów?
AdmBorkBork


2

R, 104 99 92 bajtów

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

Gra w golfa na drugiej wersji, którą wcześniej miałem. Działa tak samo jak poprzednia wersja.

Dzięki @JDL za golenie 7 bajtów!

Stare wersje o 104 bajtach:

Mam dwa różne rozwiązania z tą samą liczbą bajtów:

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

Lub:

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

Objaśnienia:

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

Stosowanie:

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

Z niektórych powodów nie działa na R-Fiddle (zmienia "się 'na domyślnie, co powoduje, że kod generuje błąd), ale możesz wypróbować go na Ideone .


Wymień +'if'(missing(x),0,32)się +32*!missing(x)?
JDL

@JDL Thanks! Nie wiem, dlaczego o tym nie pomyślałem.
plannapus


1

Scala, 82 bajty

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

Nie golfowany:

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

Niestety, (('Α'to'Ρ')++('Σ'to'Ω'))jest to Vector[Char], które byłoby wypisane jako Vector('Α', 'Β', ..., więc musi zostać przekonwertowane na ciąg znaków za pomocą mkString. Argument to mapjest wywoływany, &aby zaoszczędzić spacje między &else, else&a & toLower.


1

Galaretka , 21 bajtów

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

Pełny program

TryItOnline! - Uwaga: po uruchomieniu z argumentem konieczne będzie odświeżenie, aby uruchomić bez argumentu.

W jaki sposób?

,⁸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 bajtów

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

Tylko ASCII, ale dane wyjściowe w UTF-16. Konstruuje chartablicę odpowiednich znaków, -joins razem w łańcuch, przechowuje w $a. Następnie używa !$args.countjako indeksu w krotce, aby wyświetlać dane wyjściowe, $ajeśli nie ma żadnych argumentów lub $a.ToLower()jeśli jest co najmniej jeden argument.

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

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

1

Python 3, 80 bajtów

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

1

C #, 174 bajtów

Leniwa implementacja, prawdopodobnie może dużo w golfa

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

1

tcl, 73

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

próbny


1

PHP, 84 bajtów

Wersja online

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

PHP, 87 bajtów

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

gotcha . Wydajesz się jakoś nieobecny. $argc>1jest o 8 bajtów krótszy niż isset($argv[1])i nie wymaga spacji.
Tytus


1

APL (Dyalog Extended) , 26 bajtów

Normalnym sposobem przekazywania wielu argumentów do programów APL są listy. Tak więc ten program monituje o taką listę, która może zawierać 0 lub 1 argumenty.

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

Wypróbuj online!

 monit o listę argumentów

 oblicz liczbę argumentów (0 lub 1)

~ zaneguj to (1 lub 0)

'Ω'× „pomnóż” Omegę przez to (1 zachowuje wielkie litery, 0 fałduje małe)

 Wszystkie postacie odpowiednio Α- Ωlub α-ω

'ς΢'~⍨ usuń końcowe sigmas małe i „wielkie litery”


1

Braingolf , 24 bajty

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

Wypróbuj online!

Wyjaśnienie:

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

Python 3, 78 bajtów

import sys;a=(len(sys.argv)-1)<<5;print(''.join(map(chr,range(a+913,a+938))))

Wyjaśnienie

ajest przesunięciem 32, gdy podano argument, aby użyć zakresu małych liter. Od 913 do 937 to zakres wartości Unicode dla wielkich liter alfabetu greckiego.



0

Python 2, 108 bajtów

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

Strasznie golfa, może :(

I nie, nie mogę użyć A.lower().

Dzięki 13285 (alexwlchan) za -11 bajtów.


To najbardziej golfowa wersja, jaką mogę zrobić.
Erik the Outgolfer

Możesz zapisać 8 bajtów, pomijając przypisanie do A,ai po prostu używając tych ciągów bezpośrednio w print.
alexwlchan

@alexwlchan Racja, po prostu nie pomyślałem o tym ... ale nadal strasznie grałem w golfa.
Erik the Outgolfer

0

Mathematica, 91 bajtów

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

Scenariusz. Po prostu pobiera zakres znaków od Αdo Ω, usuwa U + 03A2 / ς, konwertuje na małe litery lub nie, i drukuje.


0

Perl, 39 + 3 ( -C2flaga) = 44 42 bajty

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

0

JavaScript, 95 bajtów

95 bajtów, ale tylko 71 znaków. Licznik bajtów . Za pomocą metody @Neil można ustalić, czy argumenty są przekazywane.

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

0

Java 7, 176 bajtów

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

Java 8, 173 bajtów

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

0

PHP, 79 bajtów

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

generuje jednostki HTML-u Unicode i dekoduje je. Uruchom z -r.


0

Pip , 21 20 bajtów

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

To jest niezapomniany dzień. Pip związał pobitą Galaretkę! 1

1 I przegrałem z dwoma innymi golfami, ale cokolwiek.

Wypróbuj online!

Wyjaśnienie

             ,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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.