Роздрукуйте алфавіт чотири рази


37

Програма повинна надрукувати алфавіт чотири рази: перший у звичайному алфавітному порядку, другий у порядку клавіатури qwerty, третій у порядку двоярусної клавіатури та нарешті у зворотному алфавітному порядку. Вихід повинен нагадувати таке:

abcdefghijklmnopqrstuvwxyz
qwertyuiopasdfghjklzxcvbnm
pyfgcrlaoeuidhtnsqjkxbmwvz
zyxwvutsrqponmlkjihgfedcba

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

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

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

EDIT: Я прийму найкоротшу відповідь у середу, 27.04.2011.

EDIT2: А переможець - як завжди, Гольфскрипт у 64 символах! Друге місце , яке відстає лише у трьох чергах, також у Голфскрипті з 67 символами, за ним третє місце - Баш із 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
Пітон 3,5:q="qwertyuiopasdfghjklzxcvbnm";a=sorted(q);print(*a,q,"pyfgcrlaoeuidhtnsqjkxbmwvz",*a[::-1])
Ведрак

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

@Lowjacker Звичайно, але це, здається, є досить довільним способом вирішити це.
Адріан Петреску

5
@ Adrian, Перевага Unicode при використанні символів та байтів визнана давно. На мою думку, це не має сенсу, щоб це питання позначалося Колмогоровим під час запиту персонажів. Це має бути підрахунок байтів. До питання, що задає запитання, слід бути обережним щодо цих умов.
гніблер

10

Рубін 1,9, 88 87 84 80

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


9

Python, 97 96 "символів"

Вільно використовуючи слово "символи", ось певний пітон, який використовує 16-бітні символи однокодового кодування для кодування 3 звичайних символів кожен. Програма складається з загальних 96 символів, 35 з яких - це найсмішніші символи з унікодом, які я коли-небудь бачив.

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

Я не впевнений, що сміття Unicode надійде хоч правильно, тож ось програма 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}

EDIT: видалено tr -d.

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


2
Правила дозволяють опускати |tr -d ' ', зберігаючи 10 символів і роблячи цю версію лідером на момент написання :-)
Олександр Гладиш

@Alexander, Cool ;-) не знав цього. Завдяки @Roger, хоча за вказівку мене в правильному напрямку.
asoundmove

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

9

Гольфскрипт, 64 символи

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

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


6

Windows PowerShell, 89

Не особливо добре, але принаймні коротше, ніж вихідний рядок:

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

Шлях коротший тепер, коли я побачив, що на пробілі є розслаблення. І ще трохи коротше, якщо я ігнорую випадок, який мені дозволяють.


2
У вас )там є додаткове . Має бути 88.
Ізі

5

Гольфскрипт, 76 , 67 символів

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

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

Дякую Вентеро, я справді це побачив у вашій іншій посаді днями.
ВИ

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 символ менше.
Lowjacker

true, але python автоматично додає пробіл між кожним елементом у списку друку, розділеним комами, тож пробіл - це моя особиста жертва для зміни читаного виводу.
arrdem

Ви можете використовувати +замість цього ,і зберегти простір.
Мартін Удінг

3

C - 133 символів

Скорочена версія від Casey:

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

Пробіл:

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

Пробіл:

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
ПФУ
GurT
HilS
IoaR
JpoQ
KaeP
LsuO
MdiN
NfdM
OghL
PhtK
QjnJ
RksI
SlqH
TjjG
UxkF
VcxE
WvbD
XbmC
YnwB
ЗмвА

Ще не підходить, звичайно.
Олександр Гладиш

1
оголосивши iглобальним і поставивши strcpy(...)на перший блок циклу for, ви отримаєте 129. Хоча все-таки занадто багато.
bebe

3

J

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

Мій перший досвід з Дж. Ідея - просто використовувати канонічне (лексикографічне) число необхідної перестановки; на жаль, це займає більше символів, ніж жорстке кодування. Але якби можна було знайти якийсь арифметичний вираз (використовуючи сили та інше), що дає магічні числа, його можна було б скоротити.


261329910883437428257896643 має основну факторизацію 7 * 601 * 991 * 213987797 * 292923318887, тому в цій немає повноважень.
Джеррі Єремія

3

Python, 90 символів unicode

#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

Луа - 111 символів

Биє C і C ++! :-)

print'abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba'

"Розумна" версія в Луа

129 символів

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

Пробіл:

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 (інші не перевірені). Так, для опущення #includes, типів повернення та декларацій змінних! Жорстке кодування призвело б до скорочення програми, але це не весело.

Версія білого кольору:

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 char

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

Explanation:

  • (,\:~) y - Sort y in descending order (\:~), and append (,) that to y.

  • x (,~|.) y - Reverse (|.) y, and append that to the front of x.

  • x F&G y - Execute (G y) F (G y), that is, perform F on the results of applying G to the arguments.

So, all together, we append the alphabet, backwards, to both the Dvorak and reverse-QWERTY strings, then reverse the QWERTY/alphabet one and put that in front of the Dvorak/alphabet one.


2

Bash, 64

I'm very late to the party, but I have a 64 character solution. Program needs to be saved to disk to work

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

How it works:

{a..z} and {z..a} are pretty self explanatory, but basically that just prints every character in that respective range.

$(sed 1d $0|base64) outputs the program, ignores the first line, then passes it through a base64 encoder (as some other examples have done).

The reason this is shorter than other similar examples...

... це тому, що {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++

It's kind of sad when the shortest way to do something in a language is to hard-code it.

#include <iostream>

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

You don't need to output the linefeeds.
Lowjacker

@Low: Doh! I forgot to remove those when I took out the line breaks I realized I didn't need. Thanks for pointing that out.
John

This is a very obvious solution, and it surpasses the maximum length requirement.
Peter Olson

std::cout is shorter that using namespace std, and you can skip void.
Alexander Gladysh

@Alex: Thanks for pointing that out.
John

1

J (77)

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

Shaved off 3 characters by using a variable:

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

Shaved off 2 more characters by using a value-level approach:

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

1

Haskell (95)

main=putStr$['a'..'z']++"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"++['z','y'..'a']

Perl (51)

There's no rule that says I can't.

use LWP::Simple;print get("http://bit.ly/fGkflf");

1
See the list of standard loopholes.
boboquack

1

Q (68)

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

Outputs:

"abcdefghijklmnopqrstuvwxyzqwertyuiopasdfghjklzxcvbnmpyfg     
crlaoeuidhtnsqjkxbmwvzzyxwvutsrqponmlkjihgfedcba"

Tried to find an improvement on hard-coding the middle two but didn't come up with one.


1

K - 69 char

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

Explanation:

  • 26#a: - Assign the two keyboard layouts to a, and then take the first 26 characters.

  • b:a@< - Sort a and assign that to b: < provides the permutation for an ascending sort, and @ lets us index a in order to sort it.

  • b,a,| - Append in a row b, then a, then the reverse (|) of b.


1

Pyth, 57

G"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"VG

Alphabet, string, reversed alphabet. G is the alphabet. Print is implicit.


1

Dyalog APL, 60 bytes

⎕A'QWERTYUIOPASDFGHJKLZXCVBNMPYFGCRLAOEUIDHTNSQJKXBMWVZ',⌽⎕A

Prints:

  ABCDEFGHIJKLMNOPQRSTUVWXYZ  QWERTYUIOPASDFGHJKLZXCVBNMPYFGCRLAOEUIDHTNSQJKXBMWVZ ZYXWVUTSRQPONMLKJIHGFEDCBA

Which is permitted as per OP:

The output is not case-sensitive, and you can add or omit newlines or spaces wherever you wish.


1

Jelly, 36 bytes (non-competing)

Øa;Øq;“pyfgcrlaoeuidhtnsqjkxbmwvz”;U

Try it online!

Explanation:

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

1

05AB1E, 60 59 bytes

AÂ"qwertyuiopasdfghjklzxcvbnm""pyfgcrlaoeuidhtnsqjkxbmwvz"»

Try it online!

- pushes the bifurcated alphabet.

"qwertyuiopasdfghjklzxcvbnm""pyfgcrlaoeuidhtnsqjkxbmwvz" - Pushes qwerty and drovak.

» - Prints stack.

05AB1E, 57 bytes (If you don't care about random \n)

AÂ"qwertyuiopasdfghjklzxcvbnmpyfgcrlaoeuidhtnsqjkxbmwvz"»

Try it online!


In the first example, you can save a byte by replacing "" with a newline.
Neil A.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.