Роздрукуйте всі скребблені слова з двох літер


40

Змагання:

Друкуйте кожне 2 буквене слово, прийнятне в програмі Scrabble, використовуючи якомога менше байтів. Я створив тут список текстових файлів . Дивіться також нижче. Є 101 слово. Жодне слово не починається з C або V. Творчі, навіть якщо неоптимальні, рішення рекомендуються.

AA
AB
AD
...
ZA

Правила:

  • Виведені слова повинні якось відокремлюватися.
  • Справа не має значення, але повинна бути послідовною.
  • Дозволені пробіли та нові рядки. Жодних інших символів не слід виводити.
  • Програма не повинна приймати жодних даних. Зовнішні ресурси (словники) використовувати не можна.
  • Немає стандартних лазівки

Список слів:

AA AB AD AE AG AH AI AL AM AN AR AS AT AW AX AY 
BA BE BI BO BY 
DE DO 
ED EF EH EL EM EN ER ES ET EX 
FA FE 
GO 
HA HE HI HM HO 
ID IF IN IS IT 
JO 
KA KI 
LA LI LO 
MA ME MI MM MO MU MY 
NA NE NO NU 
OD OE OF OH OI OM ON OP OR OS OW OX OY 
PA PE PI 
QI 
RE 
SH SI SO 
TA TI TO 
UH UM UN UP US UT 
WE WO 
XI XU 
YA YE YO 
ZA

8
Чи повинні слова виводитися в одному порядку?
Sp3000

2
@ Sp3000 Я скажу ні, якщо щось цікаве можна придумати
qwr

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

5
Добре, знайшли переклад
Mikey Mouse

3
Vi не слово? Новини для мене ...
jmoreno

Відповіді:


39

Пітон 3, 194 188 байт

s="BI ODEXIF BAAX ASOHER LOXUMOPAGOR KI US AMY BOITONOSI MMEMINANEHI UPI AYAHOYOWOMUNUHAID PEFARED QIS BEN JOFETAE KAT ABYESHMALI UTI ZADOELAWE "
while s:" "in s[:2]or print(s[:2]);s=s[1:]

Майже напевно не найкоротший метод, але я думав, що це буде вдалим початком. Спробуйте упакувати кожну пару в контури, максимально перекриваючись (наприклад, "ODEX..."= ["OD", "DE", "EX", ...]). Пробіли використовуються для розділення контурів, а будь-які пари з пробілом у ньому видаляються (пробіл проходить задля запобігання Eдруку сингла в кінці).

Я також спробував регекс-гольф, але це було довше.


1
+1 приємний підхід! Я запозичив ваш рядок для відповіді Рубі
Даніеро

Я також зробив відповідь, грунтуючись на вашій ідеї, використовуючи bash та regex
sergioFC

2
+1 для AYAHOYOWOMUNUHAID!
Рівень Рівер Сент

28

CJam, 96 94 байт

0000000: 31 30 31 2c 22 5a 0a d0 fd 64 f6 07 a3 81 30 f2  101,"Z...d....0.
0000010: c2 a5 60 0c 59 0f 14 3c 01 dd d1 69 7d 66 47 6e  ..`.Y..<...i}fGn
0000020: db 54 e5 8f 85 97 de b9 79 11 35 34 21 cb 26 c3  .T......y.54!.&.
0000030: f0 36 41 2b b4 51 fb 98 48 fc cb 52 75 1f 1d b1  .6A+.Q..H..Ru...
0000040: 6b c3 0c d9 0f 22 32 36 30 62 33 36 62 66 7b 3c  k...."260b36bf{<
0000050: 31 62 32 35 6d 64 2d 35 35 7d 27 41 66 2b        1b25md-55}'Af+

Вищенаведене - це шістнадцятковий засіб, з яким можна повернути назад xxd -r -c 16 -g 1.

Спробуйте його в Інтернеті в інтерпретаторі CJam .

Залежно від того, що саме вважається відокремленим , кількість байтів може бути знижена до 93 і навіть 92 :

  • Якщо ми замінимо -55на 59, слова будуть розділені пробілами без розриву (0xA0).

  • Якщо ми замінимо -55на W, слова будуть відокремлені знаками at-знаків (0x40).

Ідея

Ми можемо кодувати кожну пару літер xy як (ord (x) - 65) × 25 + (ord (y) - 65) . 1

Замість того, щоб зберігати отримані цілі числа, ми збережемо відмінності всіх пар, які відповідають двом суміжним словам (відсортованим за алфавітом).

Найвища різниця - 35 , тому ми вважаємо їх цифрами базового цілого числа 36 і перетворюємо це ціле число в рядок байта aa.

Код

101,   e# Push [0 ... 100].
"…"    e# Push the string that encodes the differences/increments.
260b   e# Convert from base 260 to integer.
36b    e# Convert from integer to base 36 (array).
f{     e# For each I in [0 ... 100]:
       e#   Push the base 36 array.
  <    e#   Keep it's first I elements.
  1b   e#   Compute their sum.
  25md e#   Push quotient and residue of the sum's division by 25.
  -55  e#   Push -55 = '\n' - 'A'.
}      e#
'Af+   e# Add 'A' to all resulting integers. This casts to Character.

1 Оскільки друга літера ніколи не є Z , достатньо використовувати 25 замість 26 .


14

PHP 224, 218, 210 206

foreach(explode(",","I19SR,9ZY8H,,CNK,5JRU0,H,CN4,G0H,H160,CN4,75,CU9,AMIHD,MTQP,HQOXK,7L,74,G,CXS,CU9,HTOG,,CNK,MHA8,CNL,1")as$a){$b++;for($c=0;$c<26;$c++)echo base_convert($a,36,10)&pow(2,$c)?chr(96+$b).chr(97+$c)." ":"";}
aa ab ad ae ag ah ai al am an ar as at aw ax ay ba be bi bo by de do ed ef eh el em en er es et ex fa fe go ha he hi hm ho id if in is it jo ka ki la li lo ma me mi mm mo mu my na ne no nu od oe of oh oi om on op or os ow ox oy pa pe pi qi re sh si so ta ti to uh um un up us ut we wo xi xu ya ye yo za 

Однозначно не чудовий бал, але мені сподобався виклик.

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

введіть тут опис зображення

Тоді я base-36 закодував ці параметри для отримання рядка:

"I19SR,9ZY8H,,CNK,5JRU0,H,CN4,G0H,H160,CN4,75,CU9,AMIHD,MTQP,HQOXK,7L,74,G,CXS,CU9,HTOG,,CNK,MHA8,CNL,1"

Зауважте, що 3-й запис у цьому рядковому масиві не має значення, оскільки C не має параметрів.

Для друку значень я просто перетворюю дійсні параметри в символи.

Я можу щось зробити, щоб зменшити визнання того, що слова, що не закінчуються на C, J, K, Q, V або Z, але я не можу придумати спосіб зменшити його atm.


Переміщуючи таблицю, з’являється більше порожніх елементів, і дані кодуються трохи компактніше, які виголюють кілька байтів. Тепер масив друкується в іншому порядку:

foreach(explode(",","UB1YB,1,,CUP,CLMEJ,CUO,1,SG0H,5J9MR,,,H,MX01,MTXT,CYO5M,MTQ8,,CNL,MTXT,MHAP,50268,,CN5,CNL,FSZ,,")as$a){$b++;for($c=0;$c<26;$c++)echo base_convert($a,36,10)&pow(2,$c)?chr(97+$c).chr(96+$b)." ":"";} 

aa ba fa ha ka la ma na pa ta ya za ab ad ed id od ae be de fe he me ne oe pe re we ye ef if of ag ah eh oh sh uh ai bi hi ki li mi oi pi qi si ti xi al el am em hm mm om um an en in on un bo do go ho jo lo mo no so to wo yo op up ar er or as es is os us at et it ut mu nu xu aw ow ax ex ox ay by my oy

Дякую Ісмаїлу за вибух та натяки на петлю.

foreach(explode(3,UB1YB3133CUP3CLMEJ3CUO313SG0H35J9MR333H3MX013MTXT3CYO5M3MTQ833CNL3MTXT3MHAP35026833CN53CNL3FSZ)as$d)for($e++,$f=0;$f<26;$f++)echo base_convert($d,36,10)&pow(2,$f)?chr(97+$f).chr(96+$e)." ":"";

Оновлення до php5.6 pow(,)може бути замінено **збереженням ще 4 байтів.

foreach(explode(3,UB1YB3133CUP3CLMEJ3CUO313SG0H35J9MR333H3MX013MTXT3CYO5M3MTQ833CNL3MTXT3MHAP35026833CN53CNL3FSZ)as$d)for($e++,$f=0;$f<26;$f++)echo base_convert($d,36,10)&2**$f?chr(97+$f).chr(96+$e)." ":"";

Замість того, щоб вибухнути ",", ви можете використовуватиexplode(0,UB1YB0100CUP[...])
Ісмаель Мігель

Хіба це не перерва, оскільки в кодуванні є 0?
Джеймс Вебстер

Однак .. немає цього 3я можу цим скористатися! Спасибі
Джеймс Вебстер

Крім того , ви можете замінити $e++;for($f=0;$f<26;$f++)з for($e++,$f=0;$f<26;$f++), і тепер ви можете видалити ці прикрі {}. А якщо ви хочете перетворити символи на малі, використовуйте $e^' '.
Ісмаїл Мігель

Гарний улов! Я б цього не отримав.
Джеймс Вебстер

8

Perl, 167 164 157 байт

"AMAEDOXUHALAXISHENUNUPABEFAHIDEMYESOHOSITAAGOYAYAWOWETOINODOREX KIFEHMMER BYONELI BOEMUS PELOMI UMOFAD BATAR KANAS JOPI UTI ZAI BI QI"=~/$_/&&say for AA..ZZ

Написав окремий сценарій, щоб згрупувати літери якомога компактніше у рядок, який містив усі дійсні 2-літерні слова. Потім це повторюється над усіма двома літерами і друкує дійсні, по одному на рядок. Бігайте з perl -M5.10.1 script.pl.


Я не можу зробити це для роботи в онлайн-компіляторі.
mbomb007

@ mbomb007 Залежно від версії, вам потрібно або прапор командного рядка, -M5.10.1щоб використовувати sayключове слово, додане у цій версії, або додати use feature 'say';в тілі сценарію.
AKHolland

7

C, 155 байт

Гольф-версія

i,v;main(){for(;++i-408;" >b  Ùc :oÒ¹ i ;¹ w so@)ia ¥g¨¸ ´k¦ase    Ù{§k {"[i/8]>>i%8&1||printf("%c%c%c ",i/8%2*v,i/16+65,!(i/8%2)*v))v="YUOIEMHA"[i%8];}

Вихідні дані

YA HA AA BY BO BI BE BA AB DO DE OD ID ED AD YE OE HE AE FE FA OF IF EF GO AG UH OH EH AH OI HI AI JO KI KA LO LI LA EL AL MY MU MO MI ME MM MA UM OM EM HM AM NU NO NE NA UN ON IN EN AN YO HO PI PE PA UP OP QI RE OR ER AR SO SI SH US OS IS ES AS TO TI TA UT IT ET AT WO WE OW AW XU XI OX EX AX OY AY ZA

Безгольова версія

51-байтова магічна рядок у версії для гольфу містить багато символів поза межами ASCII 126, які майже напевно були зібрані в еквіваленти Unicode. Версія без вогків використовує замість нього шістнадцяткову форму, і як константу, а не буквальну. Крім того, версія, яка не перебуває в загоні, відокремлює слова новим рядком, що спрощує копіювання та вставлення в Excel, упорядкування списку та порівняння з потрібним.

char a[]=
{0xFF,0x3E ,0x62,0x7F ,0xFF,0xFF ,0xEB,0x63 ,0xFF,0x3A ,0x6F,0xE3 ,0xFB,0x7F ,0xFF,0x69 ,0xFF,0x3B
,0xFB,0xFF ,0x77,0xFF ,0x73,0x6F ,0x40,0x29 ,0x69,0x61 ,0xFF,0xBE ,0x67,0xF9 ,0xF7,0xFF ,0xEF,0x6B
,0xB3,0x61 ,0x73,0x65 ,0xFF,0xFF ,0xFF,0xFF ,0xEB,0x7B ,0xF5,0x6B ,0xFF,0x7B ,0x7F};

//iterate through i = 16*letter + 8*order + vowel
i,v;main(){for(;i++-408;a[i/8]>>i%8&1||printf("%c%c%c\n",i/8%2*v,i/16+65,!(i/8%2)*v))v="YUOIEMHA"[i%8];}

Пояснення

Якщо ми розширимо визначення голосного, щоб включити 8 букв AHMEIOUY, ми зауважимо, що всі слова складаються з однієї голосної та однієї іншої літери (яка може бути, а може і не бути голосною.) Тому для всіх слів, що закінчуються на голосну, ми потрібна таблиця з 26 байтів, по одному на кожну першу букву, з окремими бітами, що відповідають голосному. Нам потрібна аналогічна таблиця для слів, що починаються з голосної, за винятком того, що цього разу нам потрібно лише 25 байт, оскільки на Z немає слова, що закінчується. Дві таблиці скріплені разом, щоб створити остаточну таблицю.

Щоб уникнути будь-яких кодів ASCII в області 0..31, два найменш розповсюджені "голосні" M і H присвоюються 6-му та 7-му бітам, а кодування вважає 1 недійсним словом і 0 - дійсним словом. Оскільки немає приголосного, який би з'єднувався як з М, так і з Н, можна забезпечити принаймні один з цих бітів 1.

8-й біт призначається A, який є найпоширенішим голосним, щоб спробувати обмежити символи, що не належать до ASCII (все-таки їх досить багато.)

Використовувані таблиці наведені нижче. Для слів, що містять 2 голосні, я віддав пріоритет першій букві як такому, що вважається "голосним", а другому - "буквою". Винятком з цього є слова, що починаються з M, оскільки це дозволяє уникнути зіткнення між MM та HM.

Шестнадцяткове кодування слів, що починаються з голосної

3E 7F FF 63 3A E3 7F 69 3B FF FF 6F 29 61 BE F9 FF 6B 61 65 FF FF 7B 6B 7B

AA AB    AD AE    AG AH AI       AL AM AN          AR AS AT       AW AX AY 
HA          HE          HI          HM    HO 

         ED    EF    EH          EL EM EN          ER ES ET          EX 
         ID    IF                      IN             IS IT 
         OD OE OF    OH OI          OM ON     OP   OR OS          OW OX OY 
                     UH             UM UN     UP       US UT 
YA          YE                            YO 

Шістнадцяткове кодування слів, що закінчуються на голосну

 A  H  M  E  I  O  U  Y
                         FF
BA       BE BI BO    BY  62
                         FF 
         DE    DO        EB
                         FF
FA       FE              6F
               GO        FB
                         FF
                         FF
               JO        FB
KA          KI           77
LA          LI LO        73
MA    MM ME MI MO MU MY  40
NA       NE    NO NU     69
                         FF
PA       PE PI           67
            QI           F7
         RE              EF
    SH      SI  SO       B3
TA          TI  TO       73
                         FF
                         FF
         WE     WO       EB
            XI     XU    F5
                         FF
ZA                       7F

Можливо, зробіть шестигранну версію для гольфу, щоб манглінг можна було легко повернути
masterX244

7

Java, 484 448 407 391 389 байт

Моя перша спроба

public static void main(String[]a){int[]x={57569742,35784706,0,2099200,5534148,35651584,2048,35792896,5247168,2048,33685504,33687552,35794978,35653664,7746958,35782656,131072,2097152,395264,33687552,551296,0,2099200,131104,35653632,33554432};for(Integer i=0;i<26;i++){for(int z=0;z<26;z++){if("".format("%26s",i.toString(x[i],2)).charAt(z)=='1'){System.out.format("%c%c ",'A'+i,'A'+z);}}}}

Відформатовано:

public static void main(String[] a) {
    int[] x = { 57569742, 35784706, 0, 2099200, 5534148, 35651584, 2048, 35792896, 5247168, 2048, 33685504, 33687552, 35794978, 35653664,
            7746958, 35782656, 131072, 2097152, 395264, 33687552, 551296, 0, 2099200, 131104, 35653632, 33554432 };
    for (Integer i = 0; i < 26; i++) {
        for (int z = 0; z < 26; z++) {
            if ("".format("%26s", i.toString(x[i], 2)).charAt(z) == '1') {
                System.out.format("%c%c ", 'A' + i, 'A' + z);
            }
        }
    }
}

Спробуйте в Інтернеті


Хороша робота! Деякі пропозиції: java.lang.Exception можна просто назвати винятком. "аргументи" можуть бути просто "а". String.format () може бути "" .format (). У основній () декларації також є невеликий додатковий пробіл. Хороший підхід загалом, хоча, +1 від мене :)
jrich

Я щойно грав із заявою про друк, але ти мене побив! Ви можете зберегти інший байт, замінивши \nпросто пробіл. Їх не потрібно розділяти новими лініями.
Джеймс Вебстер

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

@JamesWebster thx для підказки.
griFlo

4
"".formatболяче дивитися, але весело.
кодовий прорив

6

Рубі, 166 байт

Запозичення акуратного методу sp3000 для кодування слів у компактний рядок. Тут є короткий метод декодування його назад у двобуквенні слова: Використання значка в регексе, переданого методу сканування String, з метою вилучення збігів, що перекриваються, не зачіпаючи простір:

puts "BI ODEXIF BAAX ASOHER LOXUMOPAGOR KI US AMY BOITONOSI MMEMINANEHI UPI AYAHOYOWOMUNUHAID PEFARED QIS BEN JOFETAE KAT ABYESHMALI UTI ZADOELAWE".scan /(?=(\w\w))/

Рубін, 179 байт

Мій власний підхід: Створіть усі двобуквенні слова між AAта ZA, і виберіть дійсні, використовуючи базову 36 закодовану бітову маску:

i=-1
puts ("AA".."ZA").select{|w|"djmsjr5pfw2omzrfgydo01w2cykswsrjaiwj9f2moklc7okcn4u2uxyjenr7o3ub90fk7ipdq16dyttg8qdxajdthd6i0dk8zlmn5cmdkczrg0xxk6lzie1i45mod7".to_i(36)[i+=1]>0}

6

Матлаб, 177 байт

Створіть двійкову матрицю, що визначає всі дозволені пари букв, переформатуйте її та кодуйте її base-64. Кодований рядок base-64 ( 'CR+ ... % ') використовується як дані в програмі. Програма скасовує операції з розпакування матриці, а потім зчитує дозволені пари:

x=de2bi('CR+"''        1$$ L*\"%$!! !   $!04P@<W(        0$   1"%$$100@RZP4  $$    0$ ! 1$$$$1 0  P (    $ 0 0$ ! # %  '-32)';[i,j]=find(reshape(x(1:650),26,[])');char([j i]+64)

2
Гарний Луїс! Гольф насправді є якоюсь забавою ... = P
Стюі Гріффін

1
Приємно! Абетки немає!
Brain Guider

1
Знімаю капелюх. Це найкриптичніший код математики, який я бачив у віках ...
Хокі

Дякую, хлопці! Це лише криптовалюта через кодування base-64. Цей рядок насправді пакує двійкову матрицю розміром 26x25 дозволених літерних пар
Луїс Мендо

6

Malbolge , 2118 байт

D'``_#>nI||38h6/vdtO*)_^mI7)"XWfB#z@Q=`<)\xwvuWm32ponmfN+ibJfe^$\[`Y}@VUySXQPUNSLpJINMLEiC+G@EDCB;_?>=}|492765.R210p(-,+*#G'&feB"baw=u]sxq7Xnsrkjoh.fNdchgf_%]\a`Y^W{>=YXWPOsSRQ3OHMLKJIBfF('C<`#"8=<;:3W1w5.R2+q/('&J$)"'~D$#"baw=utsxq7Xnsrkjoh.fNdchgf_%c\D`_X|\>=YXWPOsSRQ3OHMLKJIBfFEDC%$@9]=6|:32V6/.3210)M-m+$)"'&%|Bcb~w|u;yxwvuWm3kpinmfe+ihgfH%cb[ZY}]?UZYRWVOs65KPIHGkKJIH*)?c&BA@?8\6|:32V6/.3210)M-,lk)"F&feBzbxw=uzyrwpon4Ukpi/mfkdc)g`ed]#DZ_^]VzZ<;QPt7MLQPOHlFEJIHAe(>C<;_?>765:981Uv.32+*)Mnm%$)(!Efe{zy?}|{zyxqpo5mrkpoh.fNdihg`ed]#DZ_^]Vz=YRQuUTMqQ32NMLEDhHG@(>C<;_?>76;:3W76v43,+O/.nm+*)"Fgf${z@a}v{zyr8vo5Vrqj0nmfN+Lhg`_%cbDCY}@VUySRWPt76Lp3ONMLEDhHG@(>C<;_"8\6|:32V0v.Rs10/.'&+$H('&feB"!x>|^]srwvun4Ukpi/gfe+Lbaf_%cE[`Y}@?[TxRWPUNMLKo2NGFjD,BAeED&<A:^>=6|:32V6v.R21*/(L,+*#"!E}|{z@xw|{t:[qpotsrk1Rhmlkd*Kgfe^$bDZ_^]VzZ<;QuUTMqKJOHGkEJCBA@dD=<;:^>=6|:32V654t,+O).',+*#G'&feBzbx>|^]yr8vXnsrkjoh.fkdcbg`&^Fba`Y^WVzZ<XWPUTMqQ3INMFjD,BAe?>=B;_9>7<54X8765u-Q10)o'&J$)"!~%${A!x}v<]\xwpun4rTpoh.leMchgf_d]#DZ_^]VzZYR:Pt7SLKPOHlFEJIHAeED&<`@"87<5Y98165.3,P*/(-&+$H(!~}C#c!x}|u;\[wvun4lTjih.fN+Lbgfe^c\"CY}@VUyYXWPOsSRKJIHlLE-IBAeE'&<`@"87<5Y98165.3,Pq/.-,+*#G'&fe#"!x>|{zyr8Yotml2ponPlkdcb(fH%]\[`Y^W{zZ<XWPUTMq4JIHMLEi,BA@d>=B;:9]7};:3W7wv.3,+O)o'&J*)('g%${Ay~}v{zyrq7otmrqpoh.fejiha'eG]\[ZY}@VUy<;WVOsSRQPImM/KJIBAe(>=aA:^>=6|:32V65u-Qr0/.'K+$j"'~De#zy~wv<]yrqpo5srkjohg-kdib(feG]b[Z~^]\UTYRvP8TSRKJIHlLKD,BAe?>=B;_?>7<;:981U54t,+O)o'&Jkj('&}C#"bx>_{tyr8vuWVl2pihgle+ihgfH%cEDZ~XWVUy<XWPUTMqQP2NGLEiCBGF?>b%A@?87[;:zy1U54t210/.'K+$j"'~De#zy~wv<zyxwp6Wmlqpohg-kdib(feG]ba`Y^W{>=YXWPOs65KJIHl/KJIBA@dDCB;:9]=<;:zy1Uvu3,P0)o'&J$#(!~D|#"y?}v{zyr8vXnml2ponPledc)gfH%c\D`_^]VzZ<;QVOTSLpPIHGkKJCBG@dD=<;:^>=6|:32Vw543,+*N.nm+*)"F&feB"y~}|{ts9qvonsl2ponmfN+Lha`e^$\[Z_X|\UTYRQVOsM5KJOHGFjD,BA@d>=B;:9]=};4X81w5.R210)o'&J$j"'~%|{"y?w_u;y[wpun4Ukponmfe+Lha'eGc\[!B^WV[TxXQ9ONrRQ32NMLEDh+AeE'&<`#"8=<;:3W7wv.3,+O/.'m+*)(!EfeBcbx>_{tsxwvun4Ukpi/POkdcha'_d]#DZ_^]VzZ<RQPUNMqQ3ONGkE-IBAeED=BA:9]=<|43870/St,+O/.-ml*)(!Ef|Bcb~w|u;y[Zvun4rTpoh.fN+cKgf_%cE[!BXWV[ZSwWP8TSLpJIHMLEJIBf)d'=aA@">=<5Y98165.3,Pq)('K%*#"!EfeBcyxwvu;yxwvuWm3~

Спробуйте в Інтернеті!


5

Баш, 179 байт

echo U`sed -r 's/./& &/g'<<<HAABADEDOEFAEHELAGOFEMAHINAISHMENERESITALOHOMMONOPAMUMYAWETOSOWOYOXUNUPEXI`F `grep -o ..<<<ANARASATAXAYBEBIBOBYJOKAKILIMIOIDOIDORPIQITIUSUTYEZA`
  • Збережено 7 байт завдяки коментарю Адама Каца

Він використовує sedдля заміни регулярного виразу. Перший введення регулярного вибору заснований на ідеї Sp3000, тоді як другий регулярний вираз використовує загальний вхід без пробілів.

Пояснення:

echo              print to standard output the following
U                 boundary U character
sed -r [etc]      the result of replacing regex
    .             select a character
    & &           replace it for: matched char, space, matched char
    g             do it globaly for every character
    <<<HAAB[etc]  string input based on Sp3000 idea => HA AA AB ...
F                 boundary F character
sed -r [etc]      the result of replacing regex
    ..            every two characters
    <space>&      for space+matched character
    g             do it globally
    <<<ANAR       normal input => AN AR ...

1
Ви можете скоротити це на сім байтів, використовуючи пробіл, а потім `grep -o ..замість `sed -r 's/ / &/g', трюк з моєї відповіді нижче.
Адам Кац

5

Попередження, ця відповідь не є програмно цікавою.

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

Це може зробити будь-яка мова, сприятлива для регулярних виразів, деякі ефективніше інших:

Греп (через Bash), 215 байт

grep -o ..<<<AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATIT

Javascript, 224 байти

alert("AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATITOUHUMUNUPUSUTWEWOXIXUYAYEYOZA".match(/../g))

Perl, 225 байт

 $_="AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATITOUHUMUNUPUSUTWEWOXIXUYAYEYOZA";s/../$&\n/g;print

Пітон, 245 байт

import re
print re.sub(r'..','\g<0>\n',"AAABADAEAGAHAIALAMANARASATAWAXAYBABEBIBOBYDEDOEDEFEHELEMENERESETEXFAFEGOHAHEHIHMHOIDIFINISITJOKAKILALILOMAMEMIMMMOMUMYNANENONUODOEOFOHOIOMONOPOROSOWOXOYPAPEPIQIRESHSISOTATITOUHUMUNUPUSUTWEWOXIXUYAYEYOZA")

 


Як зауваження, деякі відповіді тут довші echo, що я б вважав базовим:

Оболонка POSIX, 307 байт

echo AA AB AD AE AG AH AI AL AM AN AR AS AT AW AX AY BA BE BI BO BY DE DO ED EF EH EL EM EN ER ES ET EX FA FE GO HA HE HI HM HO ID IF IN IS IT JO KA KI LA LI LO MA ME MI MM MO MU MY NA NE NO NU OD OE OF OH OI OM ON OP OR OS OW OX OY PA PE PI QI RE SH SI SO TA TI TO UH UM UN UP US UT WE WO XI XU YA YE YO ZA

3
+1 за практичність. Дійсно, надання базового відлуння - це пункт, з якого слід почати кожен.
metalim

+1 на просту відповідь, але ви повинні відзначити це як неконкурентне, чи не так?
Метью Рох

@Matthewro Я не переживаю, тим більше, що є короткі відповіді на кожну мову, яку я опублікував.
Адам Кац

3

C - 228 217 байт - GCC

 _;main(){char *z,*i="AABDEGHILMNRSTWXY AEIOY  EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST  EOU IEO A A ";for(z=i;_++^26;)for(;*++z^32;putchar(_+64),putchar(*z),puts(""));}

Буде оновлено, якщо я можу зменшити його, просто компілюйте з gcc -w, ./a.out ідеально. Якщо у вас є інтерес до невольфів, дайте мені знати.

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


Ось декілька пропозицій, для мене це працює добре (не просто копіюйте та вставляйте, обмін стеком вставляє дивні контрольні символи в коментарі). _;main(){char*z="AABDEGHILMNRSTWXY AEIOY EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST EOU IEO A A ";for(;_++^26;)for(;*++z^32;printf("%c%c ",_+64,*z));}Я змінив роздільник виводу з нового рядка на пробіл, але якщо ви віддаєте перевагу новий рядок (один додатковий байт) змінити рядок формату printf на"%c%c\n"
Level River St,

3

C #, 348 байт

Я мав ходити:

using System;class A{static void Main(){var a=new System.Collections.BitArray(Convert.FromBase64String("tnOciwgCCAAAAAggAFBxHIkAAAAACICIKABQQBgAAAIgIACAgCAAIqIgigCCADfWuIgAAAACAIAAAAAwCICAIAAAYRkAAAAAAggAgAAIIoAACA=="));int c, d;for(var i=0;i<652;i++){if(a[i]){c=Math.DivRem(i,26,out d);Console.Write("{0}{1} ",(char)('A' + c),(char)('@' + d));}}}}

Безголовки:

using System;

class A
{
    static void Main()
    {
        var a = new System.Collections.BitArray(Convert.FromBase64String(
            "tnOciwgCCAAAAAggAFBxHIkAAAAACICIKABQQBgAAAIgIACAgCAAIqIgigCCADfWuIgAAAACAI" + 
            "AAAAAwCICAIAAAYRkAAAAAAggAgAAIIoAACA=="));
        int c, d; 
        for(var i = 0; i < 652; i++)
        {
            if(a[i])
            {
                c = Math.DivRem(i, 26, out d);
                Console.Write("{0}{1} ", (char)('A' + c), (char)('@' + d));
            }
        }
    }
}

4
Це завдання з кодовим гольфом, тому вам слід опублікувати кількість байтів (довжина коду). Також спробуйте трохи скоротити його, наприклад, видаливши пробіл.
Якубе

@Jakube, це краще?
Джодрелл

Так, виглядає нормально
Jakube

3

Піт , 140 байт

K"aeiou"=H+-G+K\zKL.[`Z25.Bib32jdSfTs.e.e?nZ`0+@Gk@HY""byMc"ljjns 1u  a 6jji0 o 2 100u 60hg0 2 k m 101v r 6hr7c s 4 8 g006 m hpg0  a 5 q g"d

Спробуйте в Інтернеті!

Спосіб стиснення. Оскільки Zу другій позиції жодного слова немає, використовуйте впорядкований алфавіт bcdfghjklmnpqrstvwxyaeiouдля кодування дійсності кожної з цих літер як другої літери для кожної першої літери (перші літери в алфавітному порядку).
Це 25 біт на одну літеру, або рівно 5 цифр Base-32. Оскільки більшість приголосних приймають лише голосні як другу букву, я ставлю голосні в кінці, щоб отримати для них переважно одноцифрові числа. Я впевнений, що це в цілому можна покращити шляхом подальшого аналізу та переупорядкування алфавіту, хоча тоді визначення впорядкованого алфавіту займе більше байтів.

Пояснення

K"aeiou"=H+-G+K\zK # Define the reordered alphabet
K"aeiou"           # K := "aeiou"
        =H         # H :=
           -G      #      G.removeAll(
             +K\z  #                   K + "z" 
          +      K #                           ) + K

L.[`Z25.Bib32      # Define a lambda function for decompression
L                  # y = lambda b:
         ib32      # convert b to int using Base 32
       .B          # convert to binary string
 .[`Z25            # pad to the left with "0" to the nearest multiple of 25 in length

                           c"..."d # split the compressed string on " "
                         yM        # Apply y (above lambda) to each element
                                   #   Intermediate result: List of binary strings
                                   #   with 1s for allowed combinations
      .e                           # map over ^ lambda b (current element), k (current index):
        .e              b          # map over b: lambda Z (cur. elem.), Y (cur. ind.):
               +@Gk@HY             # G[k] + H[Y] (G is the regular alphabet)
          ?nZ`0       ""           #     if Z != "0" else ""
     s                             # combine into one large list
   fT                              # remove all falsy values (empty strings)
  S                                # sort (if any order is possible, remove this)
jd                                 # join on spaces (if a normal list with the words is
                                   #   allowed, remove this)

2

PHP: 211 209 204

Ви повинні вимкнути попередження, інакше друкується щодо неявного створення $b

for($a=65;$b<strlen($c="ABDEGHILMNRSTWXY!AEIOY!EO!DFHLMNRSTX!AE!O!AEIMO!DFNST!O!AI!AIO!AEIMOUY!AEOU!DEFHIMNPRSWXY!AEI!I!E!HIO!AIO!HMNPST!EO!IU!AEO!A");$b++)if($c[$b]!='!')echo chr($a).$c[$b].' ';else$a++;

Дуже весело. Ранні спроби були в діапазоні 250, але це моя найтонша досі.


2
Спробуйте цей байт-лічильник . Зауважте, що вимкнення підрахунку пробілів є неправильним, оскільки воно також знижує будь-які пробіли у рядках, тому ваш рахунок повинен бути більшим за 186.
Sp3000

Хороший улов. Я відповідно оновив свої подання
NickW

Я не можу зрозуміти чому .. але це зараз просто друкує "AAAA A ..."
Джеймс Вебстер

Ви вийняли !те, якщо .. вам це було потрібно.
Джеймс Вебстер

Правильно. Я щойно це помітив. Я використовував! Розмежувач раніше, і я швидко знайшов-замінив, не враховуючи, що станеться спочатку.
NickW

2

CJam (99 байт)

Сюди входить кілька спеціальних символів, тому найбезпечніше надати шестинадцятковий. (Зокрема, персонаж зі значенням 0xa0, що відповідає нерозривному простору, доставив мені чимало клопоту в налаштуванні інтернет-демонстрації)

00000000  36 37 36 22 c4 b2 2d 51  3f 04 93 5c 64 6c 8d 6e  |676"..-Q?..\dl.n|
00000010  d7 f9 7d 97 29 aa 43 ef  04 41 12 e1 aa ce 12 4d  |..}.).C..A.....M|
00000020  05 f3 1c 2b 73 43 a0 f0  41 c0 a7 33 24 06 37 a3  |...+sC..A..3$.7.|
00000030  83 96 57 69 9b 91 c4 09  c3 93 e1 ed 05 3b 84 55  |..Wi.........;.U|
00000040  d9 26 fd 47 68 22 32 35  36 62 33 38 62 7b 31 24  |.&.Gh"256b38b{1$|
00000050  2b 7d 2f 5d 7b 32 36 62  28 3b 36 35 66 2b 3a 63  |+}/]{26b(;65f+:c|
00000060  4e 7d 2f                                          |N}/|
00000063

Інтернет демо .

Підхід є різницевим кодуванням в базі-26.


Додавання символу в ціле число дає характер, так що ви можете замінити 65f+:cз 'Af+.
Денніс

Правда. І mdце блискуче вдосконалення, але я не зрозумів, наскільки моя відповідь є вашою.
Пітер Тейлор

2

CJam, 100 98 байт

'A'@" ©Ô&ñ±ð¨9_AÚá¼thÁätÑû¨HÙH&J3p¼ÛèVçckùá%´}xà41"260bGb{_{+N2$2$}{;;)'@}?}%-3<

(постійна посилання)

  • Збережено два байти за допомогою предініціалізованих змінних (дякую Деннісу!)

Це мій перший запис CJam, тому, мабуть, є потенціал для ще одного гольфу. Однак я придумав спосіб скласти список символів до 63 байт, що, сподіваємось, хтось інший знайде корисність.

Спосіб стиснення

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

Я кодую лише останній символ кожного слова і включаю спеціальний елемент, коли перший символ повинен збільшуватися. Символи кодуються як перший символ, потім список відмінностей. Оскільки немає дублікатів слів, всі відмінності повинні бути як мінімум 1. Таким чином, я можу використовувати 0як розділовий елемент. (Зверніть увагу, що тоді я повинен зберігати першу букву кожної послідовності як одноіндексовану, інакше виникне плутанина між «першим символом прокрутки 0» та «починати з букви A 0».)

Оскільки відмінності в цьому випадку ніколи не перевищують 15, ми можемо використовувати base-16 і запакувати два (4-бітні) елементи в кожен (8-бітний) байт. (У фактичному коді я перетворив з base-260 замість base-256, щоб уникнути проблем із недрукуваними символами.)


Ви можете зберегти пару байтів, використовуючи Gі N, які натискають 16 і передачу рядків.
Денніс

@Dennis Спасибі, не усвідомлювали, що змінні були попередньо ініціалізовані!
2012р. Кемпіон

1
Усі 26 великих літер - це преініціалізовані змінні. Повний список можна переглянути тут .
Денніс

Ви можете зберегти більше байт, замінюючи %-3<з /;;або навіть /&. (Другий варіант генерує повідомлення про помилку. Консенсус щодо мета полягає в тому, що це нормально.)
Денніс

2

мозковий ебать , 1371 байт

Досить повально, але я не доклав до цього занадто великих зусиль.

>+[+[<]>>+<+]>[-<<+<+>>>]-[-[-<]>>+<]>-[-<<<<+>>>>]<<<<<<..>>.<<.>+.>.<<.>++.>.<
<.>+.>.<<.>++.>.<<.>+.>.<<.>+.>.<<.>+++.>.<<.>+.>.<<.>+.>.<<.>++++.>.<<.>+.>.<<.
>+.>.<<.>+++.>.<<.>+.>.<<.>+.>.<------------------------<+.>.>.<<.>++++.>.<<.>++
++.>.<<.>++++++.>.<<.>++++++++++.>.<--------------------<++.>.>.<<.>++++++++++.>
.<-----------<+.>.>.<<.>++.>.<<.>++.>.<<.>++++.>.<<.>+.>.<<.>+.>.<<.>++++.>.<<.>
+.>.<<.>+.>.<<.>++++.>.<-----------------------<+.>.>.<<.>++++.>.<<+.>++++++++++
.>.<--------------<+.>.>.<<.>++++.>.<<.>++++.>.<<.>++++.>.<<.>++.>.<-----------<
+.>.>.<<.>++.>.<<.>++++++++.>.<<.>+++++.>.<<.>+.>.<-----<+.>.>.<--------------<+
.>.>.<<.>++++++++.>.<--------<+.>.>.<<.>++++++++.>.<<.>+.>.<---------<+.>.>.<<.>
++++.>.<<.>++++.>.<<.>++++.>.<<.>++.>.<<.>++++++.>.<<.>++++.>.<-----------------
-------<+.>.>.<<.>++++.>.<<.>++++++++++.>.<<.>++++++.>.<-----------------<+.>.>.
<<.>+.>.<<.>+.>.<<.>++.>.<<.>+.>.<<.>++++.>.<<.>+.>.<<.>++.>.<<.>++.>.<<.>+.>.<<
.>++++.>.<<.>+.>.<<.>+.>.<------------------------<+.>.>.<<.>++++.>.<<.>++++.>.<
<+.>.>.<----<+.>.>.<<+.>+++.>.<<.>+.>.<<.>++++++.>.<--------------<+.>.>.<<.>+++
+++++.>.<<.>++++++.>.<-------<+.>.>.<<.>+++++.>.<<.>+.>.<<.>++.>.<<.>+++.>.<<.>+
.>.<---------------<++.>.>.<<.>++++++++++.>.<------<+.>.>.<<.>++++++++++++.>.<--
------------------<+.>.>.<<.>++++.>.<<.>++++++++++.>.<--------------<+.>.>.

Спробуйте в Інтернеті!


Ну з одного боку, ви можете позбутися новинних рядків
Jo King

@JoKing немає реального способу, як я міг би перевершити когось, я не думаю, що в цьому великому масштабі є сенс відгородити пару байтів.
Кшиштоф Щевчик

2

Zsh, 175 байт

У цьому рішенні використовується рядок 125 знаків, де малі літери служать розмежувачами, а перша літера наступної послідовності великої літери.

Ми повторюємо над літерами $L. Якщо для $Xпорівняння ascii поточний лист є малим, встановіть $Wна $X. В іншому випадку друкуйте $Wзв'язаний з, $Xщоб скласти поточне слово.

Спробуйте в Інтернеті!

L=aABDEGHILMNRSTWXYbAEIOYdEOeDFHLMNRSTXfAEgOhAEIMOiDFNSTjOkAIlAIOmAEIMOUYnAEOUoDEFHIMNPRSWXYpAEIqIrEsHIOtAIOuHMNPSTwEOxIUyAEOzA
for X in ${(s::)L};{((#X>90))&&W=$X||<<<$W$X:l}

Редагувати: додається :lдо встановлення рядкових рядків за вимогою
Edit2: -4 байти з використанням $Xзмінної та спрощеної, якщо [[..]]умова
Edit3: -4 байт шляхом видалення лапок ( ")
Edit5: -5 байт за допомогою перетворення масиву замість ітерації Lна нижче нижче
Edit4: Альтернативний підхід для 182 байти , використовуючи оборотні рядки в перших 33 літерах, $Lстановить лише 107 літер

L=aBHLMNTYdEOeFHMNRhOiSTmOUnOUoSWYaADEGIRSWXbEIOYeLSTXfAgOhIMiDFNjOkAIlIOmIMYoEFIPRXpAEIqIsHtOuHPSTwExIUyEzA
for ((;i++<$#L;))X=$L[i]&&((#X>90))&&W=$X:u||<<<$W$X`((i<34))&&<<<\ $X$W`

2

Стакс , 91 байт

âG→æ£ilæα¿:√▒▓uøD¶[│█æä║¢v┼T↨σªΩ■&*φòb¡CÆ?ì▀┬6ù═╦±qBF!╘π╓╙'♣*ù&↕!£ä3±r⌡W-╓D╬☺╝ï╜²á5Æ÷§═ôφF;

Запустіть і налагодіть його

Єдиний акуратний трюк, який використовує ця відповідь, - це використовувати маркер "", щоб показати зміну першої літери, а не зберігати її для кожного слова.

Завдяки рекурсивності за ідею використання оператора m


Чудово зроблено. Я можу побачити пару невеликих оптимізацій. Використовуйте Mзамість цього 1/та використовуйте скорочену карту mзамість явного передбачення та друку { ... PF. Цей пакується до 89.
рекурсивний

1

Пітон 3, 224 байти

s='';i=int("AQHU9HU1X0313T1J9OMYMZZSRFWLCYT3POSE06UGHXDZN6H5SQSZIFCE6VEB",36)
for c in range(26):
 b=i%6;i//=6;k=(1<<b)-1;j=i%(1<<k);i>>=k
 for d in 'AOIEHMUSTMNDFPYBCGJKLQRVWXZ':
  if j&1:s+=chr(c+65)+d+' '
  j>>=1
print s

Використовує бітові маски змінної довжини, щоб кодувати, які другі літери існують для кожної можливої ​​першої літери. Бітові маски можуть бути 0,1,3,7,15 або 31 біт. Біти відображаються на літери з for d in 'AOIEHMUSTMNDFPYBCGJKLQRVWXZ':, більш ранні біти використовуються для більш поширених букв, так що бітові маски в більшості випадків можуть бути короткими (як правило, 3 або 7 біт, оскільки більшість приголосних супроводжується лише одним з 5 голосних або YM або H). На жаль, код для його розшифровки заперечує економію порівняно з більш простими методами (оригінальний список становить лише 303 байти).


1
Я виявив, що краще розшифрувати, яка перша буква існує для кожної можливої другої літери в моєму рішенні. Можливо, варто спробувати у вашому.
Джеймс Вебстер

1

Haskell, 192 байти

putStr$(\(a:b)->((a:).(:" "))=<<b)=<<words"AABDEGHILMNRSTWXY BAEIOY DEO EDFHLMNRSTX FAE GO HAEIMO IDFNST JO KAI LAIO MAEIMOUY NAEOU ODEFHIMNPRSWXY PAEI QI RE SHIO TAIO UHMNPST WEO XIU YAEO ZA"

Для кожного слова, розділеного пробілом у рядку, поставте першу букву перед усіма іншими літерами та додайте пробіл, наприклад SHIO-> SH SI SO.


1

Java, 334 байти

public class C{public static void main(String[]a){for(int i=0;i<26;i++){for(int j=0;j<26;j++){if(java.util.BitSet.valueOf(java.util.Base64.getDecoder().decode("2znORQQBBAAAAAQQAKg4jkQAAAAABEBEFAAoIAwAAAEQEABAQBAAEVEQRQBBgBtrXEQAAAABAEAAAAAYBEBAEACAsAwAAAAAAQQAQAAEEUAABA==")).get(i*26+j)){System.out.format("%c%c\n",'a'+i,'a'+j);}}}}}

Відформатовано:

public class Code {
    public static void main(String[] a) {
        for (int i = 0; i < 26; i++) {
            for (int j = 0; j < 26; j++) {
                if (java.util.BitSet.valueOf(
                        java.util.Base64.getDecoder()
                            .decode("2znORQQBBAAAAAQQAKg4jkQAAAAABEBEFAAoIAwAAAEQEABAQBAAEVEQRQBBgBtrXEQAAAABAEAAAAAYBEBAEACAsAwAAAAAAQQAQAAEEUAABA=="))
                        .get(i * 26 + j)) {
                    System.out.format("%c%c\n", 'a' + i, 'a' + j);
                }
            }
        }
    }
}

Окремо я кодував список слів у довжину 26x26 = 676 BitSet, перетворив його на байтовий масив, а потім, нарешті, на базу 64. Цей рядок в цій програмі жорстко закодований, і зворотна процедура використовується для відтворення BitSet, і в кінцевому підсумку роздрукуйте список слів


1

Java, 356 байт

Для отримання слів використовується генератор випадкових чисел:

import java.util.Random;class X{public static void main(String[]a){int j,n,m=9,x;for(String u:"rgzza 2u2hh r2rxs qs5f fwiag 26i33y 2xqmje 5h94v 16ld2a 17buv 4zvdi 1elb3y 2t108q 5wne9 1mrbfe 1ih89 fh9ts r0gh".split(" ")){x=Integer.parseInt(u,36);Random r=new Random(x/2);j=m-=x%2;while(j-->0){n=r.nextInt(676);System.out.format(" %c%c",65+n/26,65+n%26);}}}}

Безголовки:

import java.util.Random;
class X{
    public static void main(String[]a){
        int j,n,m=9,x;
        for(String u:"rgzza 2u2hh r2rxs qs5f fwiag 26i33y 2xqmje 5h94v 16ld2a 17buv 4zvdi 1elb3y 2t108q 5wne9 1mrbfe 1ih89 fh9ts r0gh".split(" ")){
            x=Integer.parseInt(u,36);
            Random r=new Random(x/2);
            j=m-=x%2;
            while(j-->0){
                n=r.nextInt(676);
                System.out.format(" %c%c",65+n/26,65+n%26);
            }
        }
    }
}

Ви можете спробувати тут: http://ideone.com/Qni32q


1

Perl, 248 байт

@v=split(//,"AEIOU");@s=split(' ',"ADEGIRSWX LSTX DFN EFIPRX HPST BHLMNTY DFHMNR ST DHMNSWY MN ZFKP WYPB KQXLHPMB LGJTB X");for(0..14){foreach $c(split(//,@s[$_])){$_<10?print @v[$_%5].$c." ":a;$_>4?print $c.@v[$_%5]." ":a;}}print "MM MY BY HM SH";

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


Я не знаю Perl, але я припускаю, що ви розділяєте висновки пробілами. Здається, "MM "."MY "."BY "."HM "."SH "його можна скоротити "MM MY BY HM SH".
Рівень річки Св.

@steveverrill Дякую! Я так захопився рештою коду, що я не помітив, наскільки це було зайвим.
VoiceOfFolly

1

Javascript (ES6), 214

Можливо, не найкоротший спосіб це зробити, але, безумовно, цікавий.

_=>(i=0,[...'ABDEFGHILMNOPRSTUWXY'].map(z=>[...`ABFHKLMNPTYZ
A
AEIO
ABDFHMNOPRWY
EIO
A
AEOSU
ABHKLMOPQSTX
AE
AEHMOU
AEIOU
BDGHJLMNSTWY
OU
AEO
AEIOU
AEIU
MNX
AO
AEO
ABMO`.split`
`[i++]].map(g=>g+z).join` `).join`
`)

Проведіть через кожну букву в першому рядку, додавши її до кожної літери у відповідному рядку другого. Це повертає слова в порядку їх останньої літери, наприклад:

AA BA FA HA KA LA MA NA PA TA YA ZA
AB
AD ED ID OD
AE BE DE FE HE ME NE OE PE RE WE YE
EF IF OF
AG
AH EH OH SH UH
AI BI HI KI LI MI OI PI QI SI TI XI
AL EL
AM EM HM MM OM UM
AN EN IN ON UN
BO DO GO HO JO LO MO NO SO TO WO YO
OP UP
AR ER OR
AS ES IS OS US
AT ET IT UT
MU NU XU
AW OW
AX EX OX
AY BY MY OY

Пропозиції Ласкаво просимо!


1

Java, 255 254 байт

Знайшов спосіб видавити з нього ще один байт.

class C{public static void main(String[]a){char c='A';for(char l:"ABDEGHILMNRSTWXY AEIOY  EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST  EO IU AEO A".toCharArray())if(l<'A')c++;else System.out.print(" "+c+l);}}

Або (хоча не набагато зрозуміліше):

class C {
    public static void main(String[] a) {
        char c = 'A';
        for (char l : "ABDEGHILMNRSTWXY AEIOY  EO DFHLMNRSTX AE O AEIMO DFNST O AI AIO AEIMOUY AEOU DEFHIMNPRSWXY AEI I E HIO AIO HMNPST  EO IU AEO A"
                .toCharArray())
            if (l < 'A')
                c++;
            else
                System.out.print(" " + c + l);
    }
}

Ви можете зберегти два байти, змінивши обидва входження 'A'в 65.
ProgramFOX

1

Haskell, 333 308 298 байт

Задля розваги!

Оцінюючи, sбуде надруковано всі слова у дивному порядку - я використав той факт, що більшість комбінацій є голосно-приголосними або навпаки, можливо, можливо оптимізувати ще більше за допомогою спеціальних "класів" персонажів, скорочуючи закодовану матрицю (тут wі k).

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

Крім того, може бути і коротший спосіб виконання pроботи ...

v="AEIOU"
c="BCDFGHJKLMNPQRSTVWXYZ"
w=[976693,321324,50188,945708,52768]
k=[15,0,10,3,8,15,8,5,13,31,27,7,4,2,12,13,0,10,20,11,1]
z a b x=[[c:[e]|(e,f)<-b#p d,f]|(c,d)<-a#x]
(#)=zip
p 0=[]
p n=((n`mod`2)>0):p(n`div`2)
s=mapM_ putStrLn$concat$z v c w++z c v k++[words"AA AE AI BY HM MM MY OE OI SH"]

Це не sequence_те саме, що void$sequence? Тоді ви можете також опустити import.
німі

Це дивно упаковано, але так. Дякую!
Лейф Віллерс

Чи ні, voidдовелося імпортувати. У будь-якому випадку, я / повинен це пам'ятати.
Leif Willerts

1
Ага, і sequence_$map putStrLnє mapM_ putStrLn. Замініть (, )навколо навколо concat$...іншим $.
німі

1

05AB1E , 143 байти (не конкурує)

•ZÐFý8ù6„=4ÅœÿWì±7Ë5Œ¾`ó/îAnµ%Ñ¥Ëø±/ÀéNzքѧIJ¶D—ÙVEStvÖò…¸¾6F³#EXŠm¯Cĵ±ÓoÊ°}^€Ftå߀ðŒ=«j;F-Â1;xX3i&QZÒ'Ü”>lwìlOs>íÙVÇI)~î‰Hç²?Öd0È^ÝQ°•36B2ô»

Спробуйте в Інтернеті!



1
@KevinCruijssen 91 (і я впевнений, що цей метод може знизитись, але я вручну вибрав словникові слова для гумору).
Grimmy

1

PHP, 170 байт

найкоротший підхід, який я міг знайти досі ...

for(;$c=ABFHKLMNPTYZ1A2AEIO1ABDFHMNOPRWY1EIO1A1AEOSU1ABHKJMOPQSTX3AE1AEHMOU1AEIOU1BDGHJLMNSTWY1OU11AEO1AEIOU1AEIU1MNX2AO1AEO1ABMO[$i++];)$c<1?print$c.chr($k+65)._:$k+=$c;

зламатися

for(;$c=CHARACTERS[$i++];)  // loop $c through map
    $c<1                            // if $c is a letter (integer value < 1)
        ?print$c.chr($k+65)._           // print first letter, second letter, delimiter
        :$k+=$c                         // else increase second letter
    ;

Примітка . Найкоротша версія бітового відображення з файлом ascii для друку коштує 190 байт (113 байтів даних + 77 байтів декодування), використовуючи 6 біт = база 64, 174 байти (97 даних, 77 декодування), використовуючи 7 біт (база 128); можливо, ще трохи для втечі.

for(;$p<676;)                   // loop through combinations
    ord("MAPPING"[$p/6])-32>>$p%6&1     // test bit
        ?                                       // if set, do nothing
        :print chr($p/26+65).chr($p++%26+65)._; // if not, print combination+delimiter

База 224 (використовуючи ascii 32..255) приймає 87 байт даних (+ втеча); але я думаю, що розшифровка буде коштувати більше, ніж 10 байт.
Виключення C і V з карти дозволить заощадити 16/14/13 байт на даних, але коштуватиме багато коштів на розшифровку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.