Распечатать алфавит четыре раза


37

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

abcdefghijklmnopqrstuvwxyz
qwertyuiopasdfghjklzxcvbnm
pyfgcrlaoeuidhtnsqjkxbmwvz
zyxwvutsrqponmlkjihgfedcba

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

Подвох : программа должна быть не более 104 символов или, другими словами, меньше длины алфавита в четыре раза.

Я приму ответ с самым коротким кодом, если я не увижу что-то действительно умное или интересное, что меня больше поразит.

РЕДАКТИРОВАТЬ: Я приму кратчайший ответ в среду, 27.04.2011.

РЕДАКТИРОВАТЬ 2: И победитель (как обычно) Golfscript в 64 символов! Второе место , которое уступает только три символа, также находится в Golfscript с 67 символами, за которым следует Bash на третьем месте с 72 символами.

Но я хотел упомянуть несколько других, таких как этот , который, в зависимости от вашего определения, использовал только 52 «символа», и этот, где он написал это на языке, который создал.

Было несколько человек, которые нарушили неписаное правило и не подходили, но я упомяну их только для их мышления без коробки.


11
Подумайте об использовании награды за ответ, который поразил вас. Я думаю, что принятие ответа в код-гольфе всегда должно быть естественным критерием (т.е. длина).
Джои

Я проиграл с помощью Tcl: tio.run/…
sergiol

Ответы:


16

Python 2, 97 символов

q="qwertyuiopasdfghjklzxcvbnm"
a="".join(sorted(q))
print a,q,"pyfgcrlaoeuidhtnsqjkxbmwvz",a[::-1]

Сортировка QWERTY и обратное преобразование из списка в строку короче самого алфавита! *

Еще один вариант для создания алфавита в меньшее количество символов, чем сам алфавит:

print map(chr,range(65,91))

Хотя это печатает список символов Python.

Здесь мало что можно сделать с точки зрения сжатия данных; заклинивание букв в 5 разрядов экономит только 39 символов, что не так уж много, если вам придется их разжимать (и вы все равно должны представлять байты буквально); похоже, zlib (просто в качестве примера) экономит менее 20 байт; кодирование последовательности в виде списка дельт для следующей буквы по-прежнему занимает 5 битов для каждой дельты, поскольку наибольшее значение в этой последовательности равно -22:

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
 1, 1, 1, 1, 1, 1, 1, -9, 6, -18, 13, 2, 5, -4, -12, 6, 
 1, -15, 18, -15, 2, 1, 2, 1, 14, -2, -21, 19, -20, 12, 
 -1, 3, 9, -19, 1, -4, 15, -6, -11, 14, -10, 16, -12, -5, 
 4, 12, -6, 5, -2, -7, 1, 13, -22, 11, 10, -1, 4, 0, -1, 
 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]

* Хотя и незначительно


1
Python 3.5:q="qwertyuiopasdfghjklzxcvbnm";a=sorted(q);print(*a,q,"pyfgcrlaoeuidhtnsqjkxbmwvz",*a[::-1])
Veedrac

15

PHP, 100 байт

Как ISO 8859-1:

<?=base64_encode("i·yø!9%z)ª»-ºü1Ë:°z»rº*)jÇ_ä<\½¹æ§'àr¹Z¡ë¢vg²¨äŹ°¿<òÇî¶Êê¦æHâÞuÆÚ");

Надежно воспроизвести,

printf '<?=base64_encode("' > 4times.php
printf abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba | base64 -d >> 4times.php
printf '");' > 4times.php

5
Это интересный способ сделать это. Все остальные являются вариациями одной и той же идеи, но эта немного отличается.
Питер Олсон

Я не думаю, что это должно рассчитывать; вопрос помечен как «сложность Колмогорова» и определяет «104 символа», что означает, что мы должны различать то, что считаем персонажем. В противном случае я просто определю свою собственную кодировку символов с одним символом, который отображается в ASCII для всей программы, которая решает проблему, а затем расшифрую ее.
Адриан Петреску

2
@ Адриан Петреску: это легко решить, потребовав, чтобы кодирование уже существовало на момент постановки задачи.
Лоуджекер,

@Lowjacker Конечно, но это, кажется, довольно произвольный способ решить эту проблему.
Адриан Петреску

5
@Adrian, Преимущество юникода при использовании символов по сравнению с байтами давно признано. На мой взгляд, не имеет смысла помечать вопрос Колмогоровым при запросе персонажей. Стоит считать байты. Это вопрос, который задает вопрос, чтобы быть осторожным с этими условиями.
gnibbler

10

Рубин 1.9, 88 87 84 80

puts b=[*?a..?z],:qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz,b.reverse


9

Питон, 97 96 "символов"

Если вы используете слово «символы» в широком смысле, вот вам немного Python, который использует 16-битные символы Юникода для кодирования 3-х нормальных символов каждый. Всего в программе 96 символов, 35 из которых самые странные символы юникода, которые я когда-либо видел.

for i in range(104):print chr((ord(u'ࠠᒃ⃦ⵉ��割廕��匓�เ᳅ⵉૹ�懬ࣅű傎ᱨ�⤰〷�弙劶��ⶍKᓇࡤ^A'[i/3])>>i%3*5&31)+97),

Я не уверен, что юникодный мусор придет, хотя правильно, поэтому вот программа на python для генерации вышеупомянутой программы на python:

#!/usr/bin/python                                                                                                                                                                 
import codecs
f=codecs.open('alpha.py','w','utf-8')
f.write('#!/usr/bin/python\n')
f.write('# coding=utf-8\n')
f.write('for i in range(104):print chr((ord(u\"')
S='''abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcbaa'''
for i in xrange(0,104,3):
 n=32*32*(ord(S[i+2])-97)+32*(ord(S[i+1])-97)+ord(S[i+0])-97
 f.write(u'%c'%n)
f.write('"[i/3])>>i%3*5&31)+97),\n')

9

Баш, 72

echo {a..z} qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz {z..a}

РЕДАКТИРОВАТЬ: удалено tr -d.

Кредиты: Александр, Роджер.


2
Правила позволяют опускать |tr -d ' ', сохраняя 10 символов и делая эту версию лидером на момент написания :-)
Александр Гладыш

@ Александр, Круто ;-) не знал этого. Спасибо @Roger за то, что указал мне правильное направление.
Asoundmove

Я пытался найти более элегантное решение с каким-то полиномом со степенями простых чисел и по модулю (или, другими словами, найти достаточно простую функцию перестановки, которая работает через эту последовательность) ... но не могу потратить необходимое время для такого решения, поэтому я оставлю это на этом. Плюс было бы довольно сложно выразить кратко.
Asoundmove

9

Golfscript, 64 символа

"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz".$2%\1$-1%

Примечание: также 64 байта. На самом деле, игра с Unicode и базовыми изменениями кажется контрпродуктивной, потому что baseэто слишком длинное ключевое слово.


6

Windows PowerShell, 89

Не особенно хорошо, но по крайней мере короче, чем выходная строка:

[char[]](65..90)
'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'
[char[]](90..65))

Короче теперь, когда я увидел, что на пустом месте есть расслабление. И еще немного короче, если я проигнорирую дело, которое мне позволено.


2
У тебя там есть лишнее ). Должно быть 88.
Изи

5

Golfscript, 76 , 67 символов

123,97>+."qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"\-1%

Используйте 123,97>+для генерации начального алфавита.
Вентеро

Спасибо Ventero, я действительно видел это в вашем другом посте на днях.
ВЫ

4

CI - 92 символа

'a(1p'z((,0(4d)(.$)<)$)(0c0c.1+2p$.)>)$)qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz

CI («Компилятор / Интерпретатор») - это простой язык на основе стека, который я создал для задачи «Интерпретатор-интерпретатор» ( ссылка на ответ ). Я отправил этот ответ примерно за два часа до того, как был опубликован этот вызов. Это не GolfScript (который я до сих пор не изучал), так как моей целью было сделать переводчика коротким.

Эта программа должна быть передана ciпереводчику через стандартный ввод. Интерпретатор обрабатывает символы после завершения )как ввод в программу. Мой язык не поддерживает строковые литералы, поэтому stdin занимает его место.


3

Python 2.7.X - по иронии судьбы 103 персонажа ...

a='abcdefghijklmnopqrstuvwxyz'
print a,'qwertyuiopasdfghjklzxcvbnm pyfgcrlaoeuidhtnsqjkxbmwvz',a[::-1]

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


1
Вам не нужно пространство между строками QWERTY и DVORAK, оно будет на 1 символ меньше.
Лоуджекер,

true, но python автоматически добавляет пробел между каждым элементом в списке печати через запятую, поэтому пробел - это моя личная жертва перед изменением читабельного вывода.
arrdem

Вы можете использовать +вместо ,и сохранить это место.
Мартин Уединг,

3

C - 133 символа

Укороченная версия от Кейси:

main(i){char a[105];strcpy(a+26,"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");for(i=0;i<26;)a[i]=a[103-i]=i+++65;puts(a);}

Whitespaced:

main(i) {
    char a[105];
    strcpy(a+26, "qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");
    for(i=0;i<26;)
        a[i]=a[103-i]=i+++65;
    puts(a);
}

Транспонированный вывод

Вот версия, которая делает транспонированный вывод, для развлечения. 134 символа

main(i){char*a="qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz";for(i=0;i<26;i++,a++)printf("%c%c%c%c\n",i+65,*a,*(a+25),90-i);}

Whitespaced:

main(i){
  char*a="qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz";
  for(i=0;i<26;i++,a++)
    printf("%c%c%c%c\n",i+65,*a,*(a+25),90-i);
}

Печать:

AqmZ
BwpY
Ceyx
DrfW
EtgV
FycU
Гурт
Хилс
IoaR
JpoQ
KaeP
LsuO
MdiN
NFDM
OghL
PhtK
QjnJ
RksI
SlqH
TzjG
UxkF
VcxE
WvbD
XBMC
YnwB
ZmvA

Все еще не подходит, конечно.
Александр Гладыш

1
объявив iглобальным и поместив strcpy(...)в первый блок цикла for, вы получите 129. все же слишком много.
bebe

3

J

x=:(97+/i.26){a.
x
261329910883437428257896643x A.x
247073478763191548160234722x A.x
(_1+/-i.26){x

Мой первый опыт работы с J. Идея состоит в том, чтобы просто использовать каноническое (лексикографическое) число требуемой перестановки; к сожалению, это требует больше символов, чем жесткое его кодирование. Но если бы можно было найти какое-то арифметическое выражение (используя полномочия и еще много чего), дающее магические числа, оно могло бы быть сокращено.


261329910883437428257896643 имеет простую факторизацию 7 * 601 * 991 * 213987797 * 292923318887, так что в этом нет полномочий.
Джерри Иеремия

3

Python, 90 символов Юникода

#coding:u8
print u"扡摣晥桧橩汫湭灯牱瑳癵硷穹睱牥祴極灯獡晤桧歪穬捸扶浮祰杦牣慬敯極桤湴煳歪扸睭究祺睸當獴煲潰浮歬楪杨敦捤慢".encode("u16")[2:]

запустить на ideone - http://ideone.com/R2dlI или кодовой панели - http://codepad.org/lp77NL9w


2
На самом деле, он имеет только 52 "персонажа".
Питер Олсон

3

Javascript 139 121

новые:

q='qwertyuiopasdfghjklzxcvbnm'
a=q.split('').sort()
alert(a.join('')+q+'pyfgcrlaoeuidhtnsqjkxbmwvz'+a.reverse().join(''))

старый:

a=[]
a[26]='qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'
for(i=0;i<26;i++)a[i]=a[52-i]=String.fromCharCode(i+65)
alert(a.join(''))

Вы также можете иметь 121 с: alert((a=(q='qwertyuiopasdfghjklzxcvbnm').split('').sort()).join('')+q+'pyfgcrlaoeuidhtnsqjkxbmwvz'+a.reverse().join(''))
WallyWest

2

Lua - 111 персонажей

Бьет С и С ++! :-)

print'abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba'

«Умная» версия в Lua

129 символов

q='qwertyuiopasdfghjklzxcvbnm'a={q:byte(1,-1)}table.sort(a)a=q.char(unpack(a))print(a,q,'pyfgcrlaoeuidhtnsqjkxbmwvz',a:reverse())

Whitespaced:

q='qwertyuiopasdfghjklzxcvbnm'
a={q:byte(1,-1)}
table.sort(a)
a=q.char(unpack(a))
print(a,q,'pyfgcrlaoeuidhtnsqjkxbmwvz',a:reverse())

2

C - 163 135 символов

Это не соответствует требованиям, поскольку в нем более 104 символов, но сделать это было весело. Возможно, у кого-то будут какие-то предложения.

main(i){char a[105];strcpy(&a[26],"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");for(i=0;i<26;)a[i]=a[103-i]=i+++65;puts(a);}

Это компилируется в GCC 4.5.1 (другие не проверены). Yay за пропуск #include, возвращаемых типов и объявлений переменных! Жесткое кодирование привело бы к сокращению программы, но это было бы неинтересно.

Пробельная версия:

main(i) {                                                                                   
    char a[105];                                                                        
    strcpy(&a[26], "qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz");                 
    for(i=0;i<26;)                                                                          
        a[i]=a[103-i]=i+++65;                                                               
    puts(a);                                                                                
}

C - 124 122 хромой

Вот хромая жестко закодированная версия, и она все еще не делает разрез.

main(){puts("abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba");}

Используйте puts()вместо printf во втором случае - на 2 символа меньше.
Александр Гладыш

И заменить whileс puts(a);в первом случае, капельной *p=a; - 138 символов вместо 163.
Александр Гладыш

Потрясающие предложения! Я полностью забыл оputs . Изменено.
Кейси

2

PHP 88 байт

<?=$a=join(range(a,z)),~Žˆš‹†Š–žŒ›™˜—•”“…‡œ‰‘’†™˜œ“žšŠ–›—‹‘ŒŽ•”‡’ˆ‰…,strrev($a);

2

J - 69 символов

'pyfgcrlaoeuidhtnsqjkxbmwvz'(,~|.)&(,\:~)'mnbvcxzlkjhgfdsapoiuytrewq'

Объяснение:

  • (,\:~) y- Сортировать yв порядке убывания ( \:~) и добавить ( ,), что к y.

  • x (,~|.) y- Обратный ( |.) y, и добавьте это перед x.

  • x F&G y- Выполнить (G y) F (G y), то есть выполнить Fпо результатам обращения Gк аргументам.

Итак, все вместе, мы добавляем алфавит в обратном порядке к строкам Dvorak и reverse-QWERTY, затем обращаем вспять к QWERTY / алфавитному и помещаем его перед двоичным / алфавитным.


2

Баш, 64

Я очень опаздываю на вечеринку, но у меня есть 64-х символьное решение. Программа должна быть сохранена на диск для работы

echo {a..z} $(sed 1d $0|base64) {z..a};exit
««·+¢¢–¬uø!ŽIsÅËÛžjr~+•ªº'a¶{*ŽL[›ó

Как это работает:

{a..z}и {z..a}довольно понятны, но в основном это просто печатает каждый символ в этом диапазоне.

$(sed 1d $0|base64) выводит программу, игнорирует первую строку, а затем пропускает ее через кодировщик base64 (как это сделали некоторые другие примеры).

Причина этого короче, чем другие подобные примеры ...

... потому что {a..z}диапазоны короче, чем в кодировках base64, поэтому мне нужно только кодировать base64 половиной строки. И поскольку я читаю двоичные данные из файла, а не храню их в строке, мне не нужно экранировать символы в коде.

Как воссоздать этот скрипт:

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

echo 'echo {a..z} $(sed 1d $0|base64) {z..a};exit' > alphabetgolf
echo 'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz' | base64 -d >> alphabetgolf

Затем запустить:

bash alphabetgolf


1

C ++

Грустно, когда самый короткий способ сделать что-то на языке - это жестко его кодировать.

#include <iostream>

int main()
{
 std::cout<<"abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba";
}

Вам не нужно выводить перевод строки.
Лоуджекер,

@Low: Дох! Я забыл удалить их, когда вынул разрывы строк, я понял, что мне не нужно. Спасибо что подметил это.
Джон

Это очень очевидное решение, и оно превышает требование максимальной длины.
Питер Олсон

std::cout короче что using namespace std , и вы можете пропустить void.
Александр Гладыш

@ Алекс: Спасибо за указание на это.
Джон

1

J (77)

(,|.@(26&{.))(,~/:~@(26&{.))'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'

Сбрил 3 символа с помощью переменной:

(,|.@a)(,~/:~@(a=.26&{.))'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'

Побрил еще 2 символа, используя подход на уровне значений:

(|.a),~t,~a=./:~26{.t=.'qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz'


1

Q (68)

.Q.a,"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz",(|:).Q.a

Выходы:

"abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfg     
crlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba"

Пытался найти улучшение в жестком кодировании средних двух, но не придумал ни одного.


1

К - 69 символов

b,a,|b:a@<26#a:"qwertyuiopasdfghjklzxcvbnmpyfgcrlaeouidhtnsqjkxbmwvz"

Объяснение:

  • 26#a: - Назначьте две раскладки клавиатуры a , а затем возьмите первые 26 символов.

  • b:a@<- Сортировать aи назначить это b: <обеспечивает перестановку для сортировки по возрастанию и @позволяет нам индексироватьa для ее сортировки.

  • b,a,|- Добавить в строку b, затем a, затем наоборот ( |)b .


1

Пиф, 57

G"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"VG

Алфавит, строка, обратный алфавит. G это алфавит. Печать неявная.


1

Dyalog APL , 60 байт

⎕A'QWERTYUIOPASDFGHJKLZXCVBNMPYFGCRLAOEUIDHTNSQJKXBMWVZ',⌽⎕A

Печать:

  ABCDEFGHIJKLMNOPQRSTUVWXYZ  QWERTYUIOPASDFGHJKLZXCVBNMPYFGCRLAOEUIDHTNSQJKXBMWVZ ZYXWVUTSRQPONMLKJIHGFEDCBA

Что разрешено согласно ОП:

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


1

Желе, 36 байт (не конкурирует)

Øa;Øq;“pyfgcrlaoeuidhtnsqjkxbmwvz”;U

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

Объяснение:

Øa;Øq;“pyfgcrlaoeuidhtnsqjkxbmwvz”;U    |
Øa;                                     | alphabet
   Øq;                                  | list with all rows of the qwerty keyboard
      “pyfgcrlaoeuidhtnsqjkxbmwvz”;     | string
                                   U    | reverse

1

05AB1E , 60 59 байт

AÂ"qwertyuiopasdfghjklzxcvbnm""pyfgcrlaoeuidhtnsqjkxbmwvz"»

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

- толкает раздвоенный алфавит.

"qwertyuiopasdfghjklzxcvbnm""pyfgcrlaoeuidhtnsqjkxbmwvz" - толкает qwerty и дровак.

» - Печатает стопку.

05AB1E , 57 байт (если вас не волнует случайность \ n)

AÂ"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"»

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


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