Распечатай греческий алфавит!


11

Совершенно очевидно, что вы должны напечатать греческий алфавит. Но я подумал, что сделаю это немного интереснее, поэтому есть поворот: когда ваша программа запускается с аргументом (что угодно), она должна выводить греческий алфавит в нижнем регистре.

Информация

  1. Греческий алфавит (столицы): ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
  2. Греческий алфавит (строчные буквы): αβγδεζηθικλμνξοπρστυφχψω

Правила / Требования

  • Каждое представление должно быть полной программой.
  • Встроенные функции для печати греческого алфавита не допускаются
  • Применяются стандартные лазейки
  • Вы должны напечатать именно то, что показано.

счет

Программы оцениваются в соответствии с байтами. Если вы используете набор символов, отличный от UTF-8, укажите это. Постарайтесь получить как можно меньше байтов из всех, это !

Контрольные примеры

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

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

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

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

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

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

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

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

Материалы

Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:

# Language Name, N bytes

где Nразмер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:

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

Если вы хотите включить в свой заголовок несколько чисел (например, потому что ваш счет равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:

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

Вы также можете сделать название языка ссылкой, которая затем будет отображаться в фрагменте списка лидеров:

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

Leaderboard

Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.


5
Считает ли пустая строка аргументом или не имеет аргумента? Пожалуйста, используйте Песочницу, чтобы получить отзыв, прежде чем размещать вызов на главном сайте.
Мего


2
Будет ли аргумент всегда одним аргументом или может быть два или более аргументов?
Эрик Outgolfer

1
Kritixi одобряет вызов.
user41805 22.10.16

4
Я немного смущен вашими последними тремя контрольными случаями; они похожи на вызовы функций, но правила специально запрашивают полную программу.
Деннис

Ответы:


7

05AB1E , 16 байтов

Использует кодировку CP-1252 .

24Ý17K913+çJDl¹s

Попробуйте онлайн!

объяснение

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

Вы имели в виду [0 ... 23]или [0, 24)вместо [0 ... 24]или [0, 24]?
Эрик Outgolfer

1
@EriktheGolfer Между диапазоном кодовых точек греческого алфавита есть еще один символ.
jimmy23013

@ jimmy23013 Хорошо, я был очень смущен. Я работаю на другом языке, о котором я не буду здесь говорить. Я привержен этому прямо сейчас.
Эрик Outgolfer

7

Рубин, 56 байт

Полная программа. Я не думаю, что функция / лямбда-ответ будет короче этого языка для этого языка.

Дангит, сигма ς. Вот почему у нас не может быть хороших вещей. И вы тоже, (недопустимый символ, который служит заполнителем для «прописных букв» ς)

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

6
Я думаю, что это печатает дополнительную строчную сигму, ς
Angs

1
Это теперь печатает дополнительный U + 03A2.
LegionMammal978

5

JavaScript (ES6), 89 83 81 байт

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

Если массив символов допустим, то для 82 80 78 байтов:

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

Редактировать: Сохранено несколько байтов благодаря @ETHproductions.


Использование String.fromCharCode(...array)снова короче:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i+(i>16)+913+32*!!a.length))
ETHproductions

1
А так как String.fromCharCodeэтажи, вы можете сохранить еще два байта, например, так:(...a)=>String.fromCharCode(...[...Array(24)].map((_,i)=>i*1.06+913+32*!!a.length))
ETHproductions

@ETHproductions Я не могу поверить, что я забыл использовать, String.fromCharCode(...)но мне нравится этот i*1.06трюк! К сожалению, на этот раз, насколько я могу судить, понимания на байт больше.
Нил

Мне удалось снизить его до (...a)=>String.fromCharCode(...[for(_ of Array(i=24))i++*42/41+889+32*!!a.length])(82).
ETHproductions

Вы можете удалить !!, так как будет только ноль или один аргумент.
ETHproductions

4

Haskell, 114 108 байт

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

Спасибо @xnor за сохранение 6 байтов

Это может победить в категории самых длинных импортеров, если ничего больше ...


Похоже, стоит q[a,b]=[a..b]использовать 4 раза.
xnor

1
getArgs>>=putStr.fкороче
Орджан Йохансен



2

На самом деле , 62 байта

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

Попробуйте онлайн!

Поскольку часть заглавного греческого алфавита отсутствует в CP437, это решение кодируется в UTF-8 и оценивается соответствующим образом. Вот hexdump (обратимый с 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.

Объяснение:

 "$ù"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 байт

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

Старая версия:

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

Старая версия:

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

[a,a.lower()][len(sys.argv)-1]потому что в комментариях говорится, что будет только один аргумент.
Value Ink

Вы можете побрить еще один байт [a.lower(),a][-len(sys.argv)].
Торининген

2
Какую кодировку вы используете, что это 76 байтов?
AdmBorkBork


2

R, 104 99 92 байта

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

Игра в гольф на второй версии, которую я имел ранее. Работать так же, как и в предыдущей версии.

Спасибо @JDL за 7 байт!

Старые версии по 104 байта:

У меня есть два разных решения с одинаковым количеством байтов:

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

Или:

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

Пояснения:

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

Применение:

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

По некоторым причинам он не работает на R-Fiddle (он меняется "на 'по умолчанию, что заставляет код выдавать ошибку), но вы можете попробовать это на Ideone .


Заменить +'if'(missing(x),0,32)на +32*!missing(x)?
JDL

@JDL Спасибо! Не знаю, почему я не подумал об этом.
plannapus

2

Japt , 21 19 байт

;Ck"rz" c+816+32*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

1

Scala, 82 байта

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

К сожалению, (('Α'to'Ρ')++('Σ'to'Ω'))это Vector[Char], который будет напечатан , как Vector('Α', 'Β', ..., поэтому он должен быть преобразован в строку с mkString.The аргументом mapназывается , &чтобы сохранить пространство между &else, else&и & toLower.


1

Желе , 21 байт

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

Полная программа

TryItOnline! - обратите внимание, что после запуска с аргументом обновление потребуется для запуска без аргумента.

Как?

,⁸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 байт

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

Только для ASCII, но выводится в UTF-16. Создает charмассив из соответствующих символов, -joinобъединяет его в строку и сохраняет в $a. Затем используется !$args.countкак индекс в кортеже, чтобы вывести либо, $aесли аргументы отсутствуют, либо $a.ToLower()если есть хотя бы один аргумент.

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

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

1

PHP, 84 байта

Онлайн версия

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

PHP, 87 байт

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

Гоча . Вы, кажется, как-то отсутствует. $argc>1на 8 байт короче isset($argv[1])и не нуждается в пробеле.
Тит

1

APL (Dyalog Extended) , 26 байт

Обычный способ передачи нескольких аргументов в программы APL - через списки. Таким образом, эта программа запрашивает такой список, который может иметь 0 или 1 аргумент.

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

Попробуйте онлайн!

 запросить список аргументов

 подсчитать количество аргументов (0 или 1)

~ отрицать это (1 или 0)

'Ω'× "умножить" Омега на это (1 держит верхний регистр, 0 сгибает в нижний регистр)

 Все персонажи из Α- Ωили α-ω соответственно

'ς΢'~⍨ удалить строчные и "заглавные" последние сигмы


0

Python 2, 108 байт

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

Ужасно гольф, может быть :(

И нет, я не могу использовать A.lower().

Спасибо 13285 (alexwlchan) за -11 байт.


Это самая играющая в гольф версия, которую я могу сделать.
Эрик Outgolfer

Вы можете сохранить 8 байтов, пропустив присвоение A,aи просто используя эти строки непосредственно в print.
alexwlchan

@alexwlchan Правильно, я просто не думал об этом ... все еще ужасно игра в гольф, все же.
Эрик Outgolfer

0

Mathematica, 91 байт

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

Сценарий. Просто принимает диапазон символов от Αдо Ω, удаляет U + 03A2 / ς, либо переводит в нижний регистр, либо нет, и печатает.



0

JavaScript, 95 байт

95 байтов, но только 71 символ. Счетчик байтов . Используя способ @Neil, чтобы определить, переданы ли аргументы.

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

0

Java 7, 176 байт

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

Java 8, 173 байта

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


0

C #, 174 байта

Ленивая реализация, вероятно, может играть в гольф много

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

0

PHP, 79 байт

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

генерирует юникод html-сущности и декодирует их Беги с -r.


0

Пип , 21 20 байт

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

Это памятный день. Пип связал избитого желе! 1

+1 И проиграл двум другим гольф-глангам, но что угодно.

Попробуйте онлайн!

объяснение

             ,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

Брайнгольф , 24 байта

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

Попробуйте онлайн!

Объяснение:

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 байт

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

редактировать

Переключено с 913..937и it==930?:на(913..937)-930


Может кто-нибудь объяснить мне, почему мой ответ был отклонен? Это нарушило какие-либо правила?
Виктор А.

-1

Perl под Windows - консоль не поддерживает Unicode - (42 байта, включая пробелы)

Это не мое решение, я просто адаптирую решение Perl Дениса Ибаева, описанное выше, для консоли 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
αβγδεζηθικλμνξοπρσςτυφχψ

Код страницы консоли должен быть, конечно, греческим:

chcp 737

ПРИМЕЧАНИЕ: просто маленькая идея. На этой странице я вижу, что некоторые ответы используют CHARACTERS, которые кажутся Unicode выше 255. Поэтому эти символы занимают по крайней мере 2 байта для кодирования (возможно, 4, если один использует консоль, использующую 32-битные символы Unicode?). Разве не было бы лучше, если бы мерой соревнования была единица CHARACTER (будь то Unicode, ASCII или EBCDIC или что-то еще), а не просто BYTES? Разве это не было бы проще и более объединяющим (интересно, существует ли этот adjectif на английском языке, "unificateur" на французском)?


Предыдущий код по ошибке: не печатает строчные буквы омега.

Исправленный код (70 символов):

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

Я знаю, что мы не должны печатать форму сигмы «конец слова» («ς»), но поскольку в древнегреческом языке неправильно вводить обычную сигму («σ») в конце строчного слова, Я решил напечатать его, так как эта загадка называется «Распечатать греческий алфавит», и что этот персонаж является его частью ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.