Cetak abjad Yunani!


11

Jelas sekali, Anda harus mencetak alfabet Yunani. Tapi saya pikir saya akan membuatnya sedikit lebih menarik, jadi ada twist: ketika program Anda dijalankan dengan argumen (apa saja), itu akan menghasilkan alfabet Yunani dalam huruf kecil.

Informasi

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

Aturan / Persyaratan

  • Setiap pengajuan harus merupakan program lengkap.
  • Dibangun untuk mencetak alfabet Yunani tidak diizinkan
  • Celah standar berlaku
  • Anda harus mencetak dengan tepat apa yang ditampilkan.

Mencetak gol

Program diberi skor berdasarkan byte. Jika Anda menggunakan rangkaian karakter yang berbeda dengan UTF-8, harap tentukan. Cobalah untuk mendapatkan byte terkecil dari semua orang, ini adalah !

Uji kasus

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

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

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

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

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

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

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

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

Pengajuan

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

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

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

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

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

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

Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.


5
Apakah string kosong dianggap memiliki argumen atau tidak memiliki argumen? Silakan gunakan Sandbox untuk mendapatkan umpan balik sebelum memposting tantangan di situs utama.
Mego


2
Apakah argumen akan selalu menjadi satu argumen, atau dapatkah ada dua argumen atau lebih?
Erik the Outgolfer

1
Kritixi menyetujui tantangan itu.
user41805

4
Saya agak bingung dengan tiga test case terakhir Anda; mereka tampak seperti pemanggilan fungsi, namun aturan khusus meminta program lengkap.
Dennis

Jawaban:


7

05AB1E , 16 byte

Menggunakan pengodean CP-1252 .

24Ý17K913+çJDl¹s

Cobalah online!

Penjelasan

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

Apakah maksud Anda [0 ... 23]atau [0, 24)bukannya [0 ... 24]atau [0, 24]?
Erik the Outgolfer

1
@EriktheGolfer Ada satu karakter lain antara rentang poin kode alfabet Yunani.
jimmy23013

@ jimmy23013 Oh benar, saya benar-benar bingung. Saya mengerjakannya dalam bahasa lain, yang tidak akan saya ceritakan di sini. Saya berkomitmen untuk itu sekarang.
Erik the Outgolfer

7

Ruby, 56 byte

Program lengkap. Saya tidak berpikir fungsi / lambda jawaban akan lebih pendek dari ini untuk bahasa ini.

Dangit, sigma ς. Inilah mengapa kita tidak bisa memiliki hal-hal yang baik. Dan Anda juga, (karakter tidak dapat diberikan yang berfungsi sebagai pengganti untuk "huruf besar" ς)

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

6
Saya pikir ini mencetak sigma huruf kecil ekstra, ς
Angs

1
Ini sekarang mencetak U + 03A2 tambahan.
LegionMammal978

5

JavaScript (ES6), 89 83 81 byte

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

Jika array karakter dapat diterima, maka untuk 82 80 78 byte:

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

Sunting: Menyimpan banyak byte berkat @ETHproductions.


Penggunaannya String.fromCharCode(...array)lebih singkat lagi:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i+(i>16)+913+32*!!a.length))
ETHproduksi

1
Dan karena String.fromCharCodelantai, Anda dapat menyimpan dua byte seperti:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i*1.06+913+32*!!a.length))
ETHproduksi

@ ETHproductions Saya tidak percaya saya lupa menggunakan String.fromCharCode(...)tapi saya suka i*1.06trik itu! Sedihnya pemahaman adalah byte lebih lama kali ini sejauh yang saya tahu.
Neil

Saya berhasil menurunkannya ke (...a)=>String.fromCharCode(...[for(_ of Array(i=24))i++*42/41+889+32*!!a.length])(82).
ETHproduksi

Anda dapat menghapus !!, karena hanya akan ada nol atau satu argumen.
ETHproduksi

4

Haskell, 114 108 byte

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

Terima kasih kepada @xnor karena telah menghemat 6 byte

Ini mungkin menang dalam kategori impor terlama jika tidak ada yang lain ...


Sepertinya perlu didefinisikan q[a,b]=[a..b]untuk digunakan 4 kali.
xnor

1
getArgs>>=putStr.flebih pendek.
Ørjan Johansen


3

Pyke, 55 21 20 byte

24Fi16>913s.C)sz!hAl

Coba di sini!

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

Sebenarnya , 62 byte

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

Cobalah online!

Karena beberapa alfabet Yunani huruf besar tidak ada dalam CP437, solusi ini dikodekan dalam UTF-8 dan diberi skor yang sesuai. Berikut ini adalah hexdump (dapat dibalik dengan 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.

Penjelasan:

 "$ù"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)])

Versi lama:

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

Versi yang lebih lama:

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

[a,a.lower()][len(sys.argv)-1]karena komentar menyatakan bahwa hanya akan ada satu argumen.
Nilai Tinta

Anda dapat mencukur satu byte lagi dengan [a.lower(),a][-len(sys.argv)].
toriningen

2
Pengkodean apa yang Anda gunakan ini adalah 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)))

Bermain golf pada versi kedua yang saya miliki sebelumnya. Bekerja dengan cara yang sama seperti versi sebelumnya.

Terima kasih kepada @JDL untuk mencukur 7 byte!

Versi lama pada 104 byte:

Saya punya dua solusi berbeda dengan jumlah byte yang sama:

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

Atau:

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

Penjelasan:

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

Pemakaian:

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

Untuk beberapa alasan, itu tidak berfungsi pada R-Fiddle (itu berubah "menjadi 'secara default yang membuat kode melemparkan kesalahan) tetapi Anda dapat mencobanya di Ideone .


Ganti +'if'(missing(x),0,32)dengan +32*!missing(x)?
JDL

@JDL Terima kasih! Tidak tahu mengapa saya tidak memikirkan yang itu.
plannapus

2

Japt , 21 19 byte

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

Uji (tanpa input)
Uji (input string kosong)


Penjelasan

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

Tidak Disatukan:

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

Sayangnya, (('Α'to'Ρ')++('Σ'to'Ω'))adalah Vector[Char], yang akan dicetak sebagai Vector('Α', 'Β', ..., sehingga harus dikonversi ke string dengan mkString. Argumen ke mapdipanggil &untuk menghemat ruang antara &else, else&dan & toLower.


1

Jelly , 21 byte

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

Program lengkap

TryItOnline! - note sekali dijalankan dengan argumen, refresh akan diperlukan untuk berjalan tanpa argumen.

Bagaimana?

,⁸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]

Hanya ASCII, tetapi output dalam UTF-16. Membangun char-array karakter yang sesuai, -joins bersama-sama menjadi string, menyimpannya ke dalam $a. Kemudian, gunakan !$args.countsebagai indeks ke dalam tuple, untuk menampilkan $aapakah tidak ada argumen, atau $a.ToLower()jika ada setidaknya satu argumen.

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

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

1

PHP, 84 Bytes

Versi Online

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

PHP, 87 Bytes

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

Gotcha . Kamu sepertinya entah bagaimana absen. $argc>18 byte lebih pendek dari isset($argv[1])dan tidak perlu kosong.
Titus

1

APL (Dyalog Extended) , 26 byte

Cara normal untuk menyampaikan beberapa argumen ke program APL adalah melalui daftar. Jadi program ini meminta daftar seperti itu, yang mungkin memiliki 0 atau 1 argumen.

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

Cobalah online!

 meminta daftar argumen

 menghitung jumlah argumen (0 atau 1)

~ negate that (1 atau 0)

'Ω'× "gandakan" Omega dengan itu (1 membuat huruf besar, 0 lipat ke huruf kecil)

 Semua karakter dari Α- Ωatau α- ωmasing - masing

'ς΢'~⍨ hapus sigma terakhir huruf kecil dan "huruf besar"


0

Python 2, 108 byte

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

Sangat golf, mungkin :(

Dan tidak, saya tidak bisa menggunakan A.lower().

Berkat 13285 (alexwlchan) untuk -11 byte.


Ini adalah versi paling golf yang bisa saya lakukan.
Erik the Outgolfer

Anda dapat menyimpan 8 byte dengan melewatkan penugasan A,a, dan hanya menggunakan string itu secara langsung di print.
alexwlchan

@alexwlchan Benar, aku hanya tidak memikirkannya ... masih sangat pegolf.
Erik the Outgolfer

0

Mathematica, 91 byte

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

Naskah. Hanya mengambil rentang karakter dari Αhingga Ω, menghilangkan U + 03A2 / ς, baik dikonversi ke huruf kecil atau tidak, dan dicetak.


0

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

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

0

JavaScript, 95 byte

95 byte, tetapi hanya 71 karakter. Penghitung byte . Menggunakan cara @Neil untuk menentukan apakah argumen dilewatkan.

(...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

Implementasi malas, mungkin bisa banyak golf

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

menghasilkan entitas html unicode dan menerjemahkannya. Jalankan dengan -r.


0

Pip , 21 20 byte

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

Ini adalah hari yang tak terlupakan. Pip telah mengikat Jelly yang sudah dikalahkan! 1

1 Dan kalah dari dua golf lainnya, tapi apa pun itu.

Cobalah online!

Penjelasan

             ,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?"αβγδεζηθικλμνξοπρστυφχψω":"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"]

demo



0

Braingolf , 24 byte

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

Cobalah online!

Penjelasan:

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

Script Groovy, 54 51 byte

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

Edit

Beralih dari 913..937dan it==930?:ke(913..937)-930


Adakah yang bisa menjelaskan kepada saya, mengapa jawaban saya dibatalkan? Apakah itu melanggar aturan?
Victor A.

-1

Perl di bawah Windows - konsol tidak memiliki dukungan Unicode - (42 byte, termasuk spasi)

Ini bukan solusi saya, saya hanya mengadaptasi solusi Perl dari Denis Ibaev di atas, ke konsol 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
αβγδεζηθικλμνξοπρσςτυφχψ

Kode halaman konsol tentunya harus dalam bahasa Yunani:

chcp 737

CATATAN: Hanya ide kecil. Pada halaman ini saya dapat melihat bahwa beberapa jawaban menggunakan KARAKTER yang tampaknya Unicode di atas 255. Oleh karena itu karakter-karakter tersebut membutuhkan setidaknya 2 byte untuk kode (mungkin 4 jika seseorang menggunakan konsol menggunakan 32bits Unicode chars?). Bukankah lebih baik jika ukuran kontes adalah unit CHARACTER (menjadi Unicode atau ASCII atau EBCDIC ou apa pun) daripada hanya BYTES? Bukankah lebih sederhana dan lebih menyatukan (bertanya-tanya apakah kata sifat ini ada dalam bahasa Inggris, "unificateur" dalam bahasa Prancis)?


Kode sebelumnya salah: Tidak mencetak omega huruf kecil.

Kode yang diperbaiki (70 karakter):

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

Saya tahu kita tidak seharusnya mencetak 'end-of-word' bentuk sigma ('ς') tetapi karena itu adalah kesalahan ejaan dalam bahasa Yunani kuno untuk menggunakan sigma biasa ('σ') di akhir kata huruf kecil, Saya memilih untuk mencetaknya, karena judul puzzle ini adalah "Cetak alfabet Yunani" dan bahwa karakter ini adalah bagian darinya ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.