Створіть алфавіт з 4 примірниками кожної літери


27

Зауважте, що це не те саме, що друкувати алфавіт чотири рази .

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

A
A
A
A
B
B
B
B

тощо.

Вихідні дані повинні включати нові рядки після кожної літери.

Великі літери не мають додаткового виводу; однак, малі літери та / або додаткові пробіли є прийнятними, якщо написання великої літери / зачистки подовжить ваше рішення.

ВИДАЛЕНО ДО ДОДАТИ: Рішення повинно бути достатньо повним для виконання. Я повинен мати можливість викликати реалізацію мови, вставити код з відповіді та отримати результати, не вводячи жодного додаткового коду.

Вищезазначене питання повноти постало в контексті рішення С. Напевно, на кодовому майданчику для гольфу повинні бути правила чи конвенція щодо цього? Якщо це так, я з радістю поступлюся до рекомендацій громади. Але це моя думка:

  1. Що стосується конкретно C, вам потрібно включити (і порахувати) main(){... }навколо коду, оскільки він не складе інше. Попередження, оскільки немає #include <stdio.h>штрафу, поки код все ще збирається. Загалом, для складеної мови потрібна одиниця, що компілюється.

  2. Голий вираз, який дає бажані результати, є прийнятним, якщо є спосіб виконати вираз безпосередньо; наприклад, якщо мова має REPL. Таким чином , ви можете уявити Haskell без main=тих пір , як він на справді працює , як написано в , наприкладghci , запрошення. Але оскільки це означає розміщення letваших декларацій, це може бути чистий виграш дотримуватися runhaskellформату.

  3. Аналогічно, awkсценарії повинні знаходитись у блоках BEGIN(або ENDз припущенням, що stdin додається до /dev/null) блоків, оскільки ми не обробляємо жодного вводу.

тощо.


4
Я трохи розгублений. Чи є тут завданням лише вивести алфавіт із кожною буквою, повтореною чотири рази, чи результат насправді потрібно також зберігати у файлі?
Іссі

І чи повинен я виводити лише алфавіт?
Джастін

@MarkReed Чи потрібно друкувати його новими рядками між ними? Чому б не просто надрукувати його, а нові рядки необов’язково?
Джастін

3
Також я рекомендую перефразовувати свій виклик, щоб він більше нагадував виклик і менше нагадував історію того, як ви вигадали свою відповідь.
Джастін

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

Відповіді:


16

APL (5)

⍪4/⎕A

Формат матриці ( ) 4-реплікації ( 4/) алфавіту ( ⎕A).


1
Здається, що вони будуть побиті. :)
Марк Рід


APL використовує кодову сторінку, яка відображає кожен з використаних символів в один байт. Цю кодову сторінку можна знайти тут, на веб-сайті IBM.
Стівен Х.

@StevenH. Посилання мертве
Стен Струм

@StanStrum Я вважаю, що посилання є мертвою через депресію, але заради гольфу на коді цей метавідповідь повинен працювати.
Стівен Х.

11

Пітон - 37

for i in range(104):print chr(i/4+65)

iйде від 0 до 104; він ділиться на чотири і додається до значення ascii для A, і отриманий символ друкується.


Я вважаю, що Python використовує ціле ділення за замовчуванням? Як би непогано було б, якби PowerShell зробив саме зараз. У цьому випадку код, необхідний для примушування його до цілого поділу, занадто довгий, щоб цей трюк міг допомогти мені зберегти що-небудь на моєму сценарії.
Іссі

@lszi - Python визначає тип операндів. 3/4дорівнює 0, тоді 3.0/4.0як 0,75; range()генерує цілі числа.
Марк Рід

1
Це не працює на новіших версіях python. По-перше, функцію друку потрібно викликати дужками, і / більше не виконує ціле ділення за замовчуванням (навіть якщо обидва числа є цілими числами), що // // робота. Спробуйте:for i in range(104):print(chr(i//4+65))

3
@Consciousness Я це знаю. Я навмисно вирішив використовувати стару версію, щоб можна було краще пограти в гольф. Якщо ви запустили це на Ideone.com, ви вибрали б "Python" замість "Python 3"
Джастін

3
@Consciousness - "новішими версіями python" ви маєте на увазі "Python 3", який далеко не є загальновизнаним на даний момент. Я загалом припускаю, що все, що претендує на "Python" без вказаної версії, є Python 2.x, поки не буде доведено інше; Код Python 3, як правило, так явно позначений.
Марк Рід

8

R, 30 28 27

write(rep(LETTERS,e=4),1,1)

Колишня версія з 30 байтами:

cat(rep(LETTERS,e=4),sep="\n")

Я думаю, що буквальний новий рядок є на байт коротшим :)
Джузеппе

@Giuseppe Чи можете ви вказати цю ідею?
Свен Хогенштайн


@Giuseppe Дійсно гарна ідея! Дякуємо, що вказали.
Sven Hohenstein

Ви можете використовувати 1замість того, ""щоб вказати stdout write, а також, що зберігає інший байт.
Джузеппе

7

С, 59

Я подаю цю, неконкурентоспроможну довгу відповідь, просто тому, що ще не бачу подання С. І це мене сумує. : - /

ПІСНЕ: Реквізит до @moala для створення "/ 4" інт-версії цього, заощаджуючи 13 символів!

float i;main(){while(i<26)printf("%c\n",65+(int)i),i+=.25;}

Я відредагував свою відповідь, тепер економив ще 2 символи!
моала

і ще один!
моала

6

J: 18 13

4#u:65+i.26 1

Я все ще досить хиткий з J, так що, можливо, це можна було б покращити


3
Ви можете використовувати копировщик ( #) замість розподіл приблизно так: 4#u:65+i.26 1. Крім того, ~міняється аргументами функції, так що якщо ви коли-небудь опинитесь (expression) F value, ви можете замінити це value F~ expressionна збереження персонажа.
marinus

@marinus Дякую за пораду. Я все ще вчу J, і важко знайти будь-яку хорошу інформацію з такими хитрощами.
pswg

1
4#65{26,.\a.за 12 байт.
FrownyFrog

5

Рубі, 23

puts ([*?A..?Z]*4).sort

Вся заслуга @manatwork - підтверджуйте його коментар, не це. :)


Величезний. @manatwork, я буду редагувати, але очевидно, я не заслуговую жодної кредити!
Даррен Стоун

5
Краще зробіть це, puts [*?A..?Z].map{|i|[i]*4}або puts ([*?A..?Z]*4).sortтак, щоб букви були впорядковані, як у прикладі.
манатура

2
@manatwork: puts (?A..?Z).map{|i|[i]*4}символ коротший. Ви можете зателефонувати mapбезпосередньо на дальність, тому в цьому випадку вам не знадобиться сплеск.
Марк Рід

5

PowerShell: 32 23

Код для гольфу:

[char[]](65..90*4)|Sort

Покрокова інструкція:

[char[]](... )приймає масив об'єктів і перетворює їх у символи ASCII.
65..90є кодами ASCII для AZ.
*4повторює серію 4 рази.
|Sortсортує вихід.

Примітка:

Якщо ви хочете, щоб це було записано у файл, просто киньте >, а в кінці - ім'я файлу.


5

Хаскелл, 46 років

x a=a++a
main=putStr$['A'..'Z']>>=x.x.(:"\n")

1
putStr$['A'..'Z']>>=("golf">>).(:"\n")економить 8 біт
ангс

5

Befunge 98 - 18

1+::'g`#@_4/'A+,a,

Працює, зберігаючи число і закінчуючи, коли воно досягає 104. Виводить відповідний символ алфавіту на число, розділене на 4, а потім новий рядок. Але якщо мені не потрібно додавати новий рядок після кожної літери, це 16 символів:

1+::'g`#@_4/'A+,

Можна зменшити, якщо я можу надрукувати більше символів (тобто їх усі чотири рази) ( 7 6 символів, навіть працює в Befunge 93):

1+:4/,

З новим рядком:

1+:4/,a,


4

Перл 5, 21

map{print"$_
"x4}A..Z

2
Мені ніколи не приходило в голову поміщати буквальний новий рядок всередині дворядкового рядка в Perl. +1.
Марк Рід

Слід зазначити, що я цього не зробив, але @manatwork згадав це в іншій моїй відповіді, і вона застрягла!
Дом Гастінгс

4

С, 46 44 43

46 :

i;main(){while(i<104)printf("%c\n",65+i++/4);}

44 :

i=260;main(j){for(;(j=i++>>2)<91;puts(&j));}

44 також:

i=260;main(j){while(j=i++>>2,j<91)puts(&j);}

Дякуємо @marinus, 43:

i=260;main(j){while(j=i++/4,j<91)puts(&j);}

Чи варто додати щедрість за досягнення 42? :)


6
50 відп. потрібно коментувати що-небудь, і у вас на момент публікації цього коментаря у вас 101.
syb0rg

Чудово! Спасибі! Відповідь відредаговано!
моала

1
Ви можете замінити >>2на /4.
marinus

4

Ява: 56

for(int i=0;i<104;)System.out.println((char)(i++/4+65));

редагувати: змінено з 'друкувати' на 'println'


Вихідні дані повинні включати нові рядки після кожної літери.
П'єр Арло

дякую, що
вказали

2
The solution must be complete enough to execute. I should be able to invoke an implementation of the language, paste the code from the answer, and get results, without typing any additional code. Я думаю, що ваше рішення порушує цю умову
user902383

2
@ user902383 Якщо вставити його в JShell (Java REPL в Java 9), він працює, і вам навіть не потрібна остаточна крапка з комою.
Девід Конрад

@DavidConrad Це дивовижно тоді, я думаю, я можу почати використовувати REPL / JShell.
user902383



4

16-розрядний машинний код x86 MS-DOS COM, 25 байт

У шістнадцятковій формі:

B409BA160189D7B96800F6C1037502FE05CD21E2F5C3400A24

Це повна програма MS-DOS .COM. Скопіюйте послідовність байтів у файл із розширенням .com та запустіть його з DOSBox

Розбирання:

00: B4 09        mov    ah,0x09         ;INT 21h "Write string to STDOUT" function
02: BA 16 01     mov    dx,0x116        ;Address of the string s ('$'-terminated)
05: 89 D7        mov    di,dx           ;Because there's no way to dereference address in DX
07: B9 68 00     mov    cx,104          ;CX=26*4
_0000000A:
0A: F6 C1 03     test   cl,0x03         ;When lower two bits are zero...
0D: 75 02        jne    _00000011       ;...do not skip the next instruction
0F: FE 05        inc    b,[di]          ;*s++
_00000011:
11: CD 21        int    21              ;Print the string
13: E2 F5        loop   _0000000A       ;Until --CX==0
15: C3           retn
16: 40           db     0x40            ;s[0], starts with 'A'-1
17: 0A           db     0x0A            ;'\n'
18: 24           db     '$'             ;Terminator required by the print function


3

AWK, 48

Давайте спробуйте з AWK ...

END{s=65;for(i=104;i--;s+=0==i%4)printf"%c\n",s}

За пропозицією манатурки ми можемо позбутися 2 символів

AWK, 46 (редагувати)

END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}

AWK, 40 (редагування коду MarkReed )

END{for(;i<104;){printf"%c\n",i++/4+65}}

Видаляючи ініціалізацію змінних з ви можете заощадити 2 символів: END{for(i=104;i--;s+=0==i%4)printf"%c\n",s+65}.
манатура

1
Введення коду в ENDблок означає, що для його роботи потрібен вхідний потік (навіть якщо він є /dev/null). Чи це змінює кількість символів? У будь-якому випадку, BEGIN{for(;++i<104;){printf"%c\n",i/4+65}}це на 5 символів коротше.
Марк Рід

@MarkReed Ваш код не працює. Перевірте це
Васі

D'oh. Дуже близько! :) Але мені все ще не подобається ENDвимога шаблону для вхідного потоку ...
Позначте Рід

3

PowerShell, 21

65..90|%{,[char]$_*4}

Трохи інший підхід до Ізі. І коротше :-)


3

C # LINQ 115 байт 110 байт

Enumerable.Range(65, 26).SelectMany(i => Enumerable.Repeat(i,4))
.ToList().ForEach(i=> Console.WriteLine((char)i));

1
Ласкаво просимо до PPCG! Гарний перший пост!
Rɪᴋᴇʀ



3

Перл 6, 32

.say for (('A'..'Z') »xx»4)[*;*]

Я думаю, що це перший раз, коли Perl 6 був першим рішенням, про який я думав, але гіпероператор просто здавався природним придатним.
Марк Рід

3

Полотно , 5 байт

Z41*⟳

Спробуйте тут!

Пояснення:
Code        | Explanation                                  | Stack
------------+----------------------------------------------+------------------------------
Z          | The uppercase alphabet                       | "ABC..."
  41*     | Stretched by 4 horizontally and 1 vertically | "AAAABBBBCCCC..."
        ⟳  | Rotated clockwise                            | "A¶A¶A¶A¶B¶B¶B¶B¶C¶C¶C¶C¶..."
            | Print ToS (implicit)                         |

З замінено \nна друк.



3

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

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

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

Друкується малими літерами, розділеними поверненнями каретки. Використовує обгортання 8-бітових комірок, а також комірок, що залишилися від початку, хоча ви можете додати a >для протидії останнім.


Я збирався опублікувати новий, але вам вдалося повністю зробити все можливе, я отримав 71 байт з ++++++ [-> ++> ++++> ++++++++ ++ <<<] ++++> +> ++> +++++ <[->. <<. >>. <<. >>. <<. >>. + <<.>]
KrystosTheOverlord




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