Заєць Кришна Заєць Кришна Кришна Кришна Заєць заєць


65

Нещодавно я бачив людей із Зайцем Крішною з їх мантрою на емблемі, і я виявив, що це може бути дуже цікаво кодувати гольф.

Змагання

Напишіть мантру Зайця Крішни , тобто:

Hare Krishna Hare Krishna
Krishna Krishna Hare Hare
Hare Rama Hare Rama
Rama Rama Hare Hare

Критерії виграшу

Це , тому найкоротший код у байтах виграє!

Правила

  • Корпус повинен бути збережений.
  • Текст повинен містити нові рядки.
  • У рядках може бути простір (-ів).
  • Дозвільна лінія нового рядка дозволена.
  • Заборонено аналіз веб-сайту або будь-якого іншого зовнішнього ресурсу.

2
Від назви я очікував, що щось розшифрує бінарні рядки в символи ASCII. Заголовок являє собою зворотний проріз.
користувач253751

5
Усього мантра має 97 байт. Як не дивно, але є відповіді з більш ніж багатьма байтами.
Masclins

Хм, чому це напрочуд схоже на дупа Рикрола?
Меттью Рог

Відповіді:


58

Желе , 22 байти

“t,ȧṫÞċḅ»Ḳ“¡¥Ɓc’ṃs4K€Y

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

Як це працює

“t,ȧṫÞċḅ»Ḳ“¡¥Ɓc’ṃs4K€Y  Main link. No arguments.

“t,ȧṫÞċḅ»               Use Jelly's dictionary to yield the string
                        "Hare Rama Krishna". Fortunately, the words Rama, Krishna,
                        and hare (lowercase H) are in the dictionary.
         Ḳ              Split at spaces, yielding ["Hare", "Rama", "Krishna"].
          “¡¥Ɓc’        Base-250 literal; yielding 15973600.
                ṃ       Convert 15973600 to base ["Hare", "Rama", "Krishna"]
                        (ternary), where "Krishna" = 0, "Hare" = 1, and "Rama" = 2.
                 s4     Split the resulting string array into chunks of length 4.
                   K€   Join each of the four chunks by spaces.
                     Y  Join the resulting strings by linefeeds.

43
Convert 15973600 to base ["Hare", "Rama", "Krishna"]Слава богу, ви пояснили це далі, бо це не мало сенсу.
Нік Хартлі

11
Мені потрібно більше використовувати базу ["Hare", "Rama", "Krishna"] .
Атако

63

05AB1E , 38 байт

Можна скоротити на 2 байти, якщо непогані нові рядки.

“«Î‡Ä¦í¥Â“#€¦`«'kì)™ð«•2ÍZì•3BSè#4ô¨»?

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

Пояснення

“«Î‡Ä¦í¥Â“                              # push the string "drama share irish dna"
          #                             # split on spaces
           €¦                           # remove the first character of each word
             `                          # split to stack as separate words 
              «'kì                      # concatenate the last 2 and prepend "k"
                  )™                    # wrap in list and title-case
                    ð«                  # append a space to each
                      •2ÍZì•            # push 27073120
                            3B          # convert to base-3: 1212221110100011
                              Sè        # index into the list with each
                                #       # split on spaces
                                 4ô     # split into pieces of 4
                                   ¨    # remove the last
                                    »   # join on spaces and newlines
                                     ?  # print without newline

58
drama share irish dna, справді? Звідки виникла ця ідея? +1 :)
Стюі Гріффін

14
Скажіть відверто, ви побудували генератор коду для гольфу 05AB1E?
YSC

1
@YSC це не погана ідея для стиснення словника. Я на це.
Чарівний восьминога Урна



39

Октава, 74 59 байт

[{'Hare ','Krishna ','Rama ',10}{'ababdbbaadacacdccaa'-96}]

Тут перевірте вихід .

Пояснення:

{'Hare ','Krishna ','Rama ',10}створює масив комірок з трьома рядками, де четвертий - 10значення ASCII для нового рядка.

{'ababdbbaadacacdccaa'-96}- вектор, який індексує масив комірок вище. Вектор, [1 2 1 2 4 ...]оскільки ми віднімаємо 96рядок ababd....

Навколишні квадратні дужки використовуються для об'єднання результатів, а не для отримання ans = Hare; and = Krishna; ans = ...


Я не знав, що ви можете індексувати цю клітинку в Octave (на відміну від MATLAB)!
Спогад



12

JavaScript, 75 70 байт

`0101
1100
0202
2200`.replace(/./g,n=>['Hare ','Krishna ','Rama '][n])

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

console.log(`0101
1100
0202
2200`.replace(/./g,n=>['Hare ','Krishna ','Rama '][n]))


2
Краще використовувати буквальні символи нового рядка в рядку шаблону безпосередньо замість цифри 3. Рядок шаблону матиме однакову довжину, але вам не доведеться їх замінювати пізніше. (Не спричиняє проблеми з індексом масиву, оскільки /./не відповідає символам нового рядка.)
manatwork

12

С

154 байти, 124 байти, 96 байт

i;main(){char*c="agagvggaavapapvppaaHare \0Krishna \0Rama \0\n";while(i<19)printf(c+c[i++]-78);}

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

28 байт збережено, завдяки Деннісу


1
Ласкаво просимо до головоломок програмування та коду для гольфу.
Rohan Jhunjhunwala

1
Це досить стандартна абревіатура для програмування головоломок та кодового гольфу, назва цього обміну стеками. Вибачте, я повинен був це зрозуміти. Ласкаво просимо на наш сайт, гарне перше повідомлення.
Rohan Jhunjhunwala

1
Це не працюватиме з усіма компіляторами, але gcc не вимагає оператора include. Крім того, якщо ви обмежите свою заявку на C, ви можете скинути intта оголосити iглобально, щоб він за замовчуванням дорівнював нулю. tio.run/nexus/…
Денніс

2
@AnT Це правильно, але змагання з коду з гольфу не вимагають "належного" коду. Тут на PPCG ми визначаємо мови за їх реалізацією. Поки є компілятор, який створює працюючий виконуваний файл, відповідь справедлива.
Денніс

1
main(){for(char*t="BG@ESCB;:N8F6DIBA10Hare \0Krishna \0Rama \0\n";*t^72;printf(t+*t++-48));}Економить 4 байти.
Йохан дю Тойт

11

V , 40 , 36 байт

iHare Krishna 
 Rama ç^/ä$Ùdww.$2p

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

Hexdump:

00000000: 6948 6172 6520 4b72 6973 686e 6120 0a0e  iHare Krishna ..
00000010: 2052 616d 6120 1be7 5e2f e424 d964 7777   Rama ..^/.$.dww
00000020: 2e24 3270                                .$2p

Пояснення:

iHare Krishna   " Enter 'Hare Krishna' on line 1
<C-n> Rama      " Enter 'Hare Rama' on line 2. This works because <C-n>
                " autocompletes alphabetically, and 'Hare' comes before 'Krishna'
<esc>           " Return to normal mode
ç^/             " On every line:
   ä$           "   Duplicate the text on the line horizontally
     Ù          "   Make a new copy of the line
      dw        "   Delete a word
        w       "   Move forward a word
         .      "   Delete a word again
          $     "   Move to the end of the line
           2p   "   And paste what we've deleted twice

<C-n>Команда дуже корисна для завдань , як це. :)


10

C #, 109 байт

void a(){Console.Write("{0}{1}{0}{1}\n{1}{1}{0}{0}\n{0}{2}{0}{2}\n{2}{2}{0}{0}","Hare ","Krishna ","Rama ");}

Досить прямо, Console.Writeнеявно форматує рядок і, використовуючи Writeзамість того, WriteLineне тільки зберігає 4 байти, але уникає зворотного нового рядка. Використовує нові рядки у стилі Unix, тому може не так добре працювати у Windows, додаткові 6 байт для Windows, змінивши \nна\r\n

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

C #, 118 байт

string a(){return string.Format("{0}{1}{0}{1}\n{1}{1}{0}{0}\n{0}{2}{0}{2}\n{2}{2}{0}{0}","Hare ","Krishna ","Rama ");}

Крім того, якщо вам потрібна повністю автономна і складна програма:

C #, 135 байт

class A{static void main(){System.Console.Write("{0}{1}{0}{1}\n{1}{1}{0}{0}\n{0}{2}{0}{2}\n{2}{2}{0}{0}","Hare ","Krishna ","Rama ");}}

Це має працювати як складена програма за умови, що ви вказали Aклас вступу.


Виглядає дещо дивно без пробілів між словами.
манатура

@manatwork хороший момент, на щастя, специфікація каже, що пробіли просто добре, тому коштують лише 3 байти
Skidsdev

Може початися війна полум'я, але ви можете використовувати var замість струни, щоб зменшити другий приклад ще більше.
Джон Бафман

@JohnBaughman Повернення значення методу не може бути varнаскільки я знаю, і var.Format()це точно не річ
Skidsdev

Да ... не думав про це. Ви маєте рацію, я щойно потрапив у світ ламба і неправильно тлумачив те, що читав.
Джон Бафман

8

C, 85 байт

i;f(){for(i=0;printf("$0$0900$$9$*$*9**$$)"[i++]-36+"Hare \0Rama \0Krishna \0\n"););}

Я вважаю за краще світську мантру, але сподіваюся, що це одна з тих мирних релігій.

Дивіться, як це працює тут .

Це ущільнює наївну реалізацію на 23 байти.


8

Python 2, 92 88 74 байт

for i in'0101311003020232200':print['Hare','Krishna','Rama','\n'][int(i)],

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

Ні , це не розумно, ні, це не найкоротше, але ей, я новачок у цьому, і це працює.

Ще одне рішення ( 84 80 байт):

h='Hare'
k='Krishna'
r='Rama'
n='\n'
print h,k,h,k,n+k,k,h,h,n+h,r,h,r,n+r,r,h,h

Поміняйте місцями нулі та одиниці, а також "Заєць" та "Кришна" у списку. Це знімає провідний нуль. Потім конвертуйте нове число (1010300113121232211) у шістнадцятковий (0xe054e999f20c553), оточіть його зворотними посиланнями, і нарешті зрозумійте, що відповідь xnor все ще попереду на 12 байт! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 байт

Натхненний цим записом JavaScript .

$_='0101
1100
0202
2200
';s/./qw'Hare Krishna Rama'[$&].$"/ge;print

Perl, 67 байт

@_=<Hare Krishna Rama>;print"@_[split//]\n"for<0101 1100 0202 2200>

2
(Hare,Krishna,Rama)зберігає два байти у першому коді.
Дада

5

Matlab 139 136 105 байт (завдяки @ 2501 )

fprintf('Hare Krishna Hare Krishna\nKrishna Krishna Hare Hare\nHare Rama Hare Rama\nRama Rama Hare Hare')

Спробуйте онлайн в Octave!


або 126 байт, якщо допустимий новий рядок
user13267

@ 2501: ха-ха, це чудово. Насправді я думаю, що це 105 байт, можливо, ви повинні залишити це як відповідь
user13267

5
Я впевнений, що можливі подальші вдосконалення.
2501,

1
FYI, TIO підтримує Octave :) tio.run/nexus/…
Beta Decay

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]становить 64 байти. : P (переклад октави @Stewie Griffin)
Спогад

5

MySQL, 115 100 байт

(Дякую @manatwork!)

SELECT CONCAT(a,b,a,b,d,b,b,a,a,d,a,c,a,c,d,c,c,a,a)FROM(SELECT'Hare 'a,'Krishna 'b,'Rama 'c,'\n'd)t

Ви можете видалити всіх AS .
манастирство

Хороший трюк, я точно буду використовувати цей метод для деяких проблем.
BradC

5

R, 75 85 83 байт

cat(x<-c("Hare ","Krishna ","\n")[c(1,2,1:3,2,2,1,1,3)],sub(x[2],"Rama ",x),sep="")

Він створює вектор з Hare, Krishnaта новою лінією, бере необхідні, а потім повторює, замінюючи Krishnaна Rama.

Потрібно включити пробіл у кожному слові, а sep=""тому, що в іншому випадку cat()було б пробіл на початку кожного рядка


Я не можу змусити це працювати в TIO
Джузеппе,

Напевно, потрібен принт () чи щось.
BLT

@Giuseppe Я використовую тут, що R автоматично друкує. Але залежно від того, як ви це назвете, print()чи cat()знадобиться. Це зажадає набагато більше байтів. Я опублікую альтернативу з ними в ці вихідні :)
Masclins

1
@AlbertMasclans ні, я отримую помилку, кажучи object 'h' not found tio.run/nexus/…
Джузеппе

2
Я думаю , вам потрібно замінити h=з h<-всередині викликівp
Giuseppe

5

PowerShell, 73 53 52 байт

абсолютно зруйнований Джефф Фрімен - використовуючи фактичний новий рядок замість того, щоб \nзберегти ще один байт, а також зберегти ще один у форматі масиву. (від (1,2)до ,1,2)

-1 завдяки TesselatingHeckler, в нотації масиву немає кома.

$a="Hare ";"Krishna ","Rama "|%{"$a$_$a$_
$_$_$a$a"}

Моя стара відповідь - спробував кілька інших методів заміни, але все якось було трохи довше.

$a,$b,$c="Hare ","Krishna ","Rama ";"$a$b$a$b
$b$b$a$a
$a$c$a$c
$c$c$a$a"

є рядки в рядку.

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


Гарне рішення, але я закликаю вас зменшити це, помітивши схему на виході та трубопровід. Я знизив його до 55 байт. Я не знаю, як зіпсувати коментар, тому просто відповідайте тут, якщо ви хочете його побачити (або якщо ви хочете отримати деякі підказки!).
Джефф Фрімен

2
Замість тегу спойлера я придумав, як поділитися через посилання. Спробуйте в Інтернеті!
Джефф Фріман

@JeffFreeman приємний, поголив ще два, що на новій лінії та масиві - до 52, перемігши майже всі мови, що не гольфують.
colsw

4

Сід, 72

Оцінка включає +1 для -rпрапора.

s/^/Hari Krishna/
s/.*/& &/
s/(\S+)(.*)\b(.+)/&\n\3\2\1/p
s/K\S+/Rama/g

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


Досить впевнений, що існує спосіб видалити деякі байти за допомогою hange c, append або insert замість substitute. Редагувати: вже не впевнений; Редагувати редагування: так, ні, це не працює, оскільки вони не працюють на просторі шаблону, а натомість безпосередньо виводять
Aaron

4

Рубі , 62 61 байт

Коли я працював над цим, він врешті-решт став майже ідентичним відповіді Python @ xnor, за винятком того, що у Ruby немає пробілів між аргументами у своїй printфункції, що змушує мене використовувати об'єднання замість цього і призводить до більш тривалої відповіді ...

-1 байт від @manatwork

%w"Krishna Rama".map{|i|puts [h=:Hare,i]*2*' ',[i,i,h,h]*' '}

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


Складіть :Hareсимвол.
манатура

4

Bash, 93 90 байт

h="Hare " k="Krishna " r="Rama " s="$h$k$h$k\n$k$k$h$h\n$h$r$h$r\n$r$r$h$h"
echo -e "${s}"

1
Приємна перша спроба. Чи можу я запропонувати пару незначних удосконалень? pastebin.com/0bYQF26n
манатура

@manatwork слід додати це як свою відповідь.
Пандія

1
Без змінної s=це знизиться до 79h="Hare " k="Krishna " r="Rama ";echo -e "$h$k$h$k\n$k$k$h$h\n$h$r$h$r\n$r$r$h$h"
ULick


3

AHK , 107 92 байт

Це здається смішним, але я не можу знайти коротший засіб в AHK для цього:

h=Hare
k=Krishna
Send %h% %k% %h% %k%`n%k% %k% %h% %h%`n%h% Rama %h% Rama`nRama Rama %h% %h%

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

n=1212422114131343311
a=Hare |Krishna |Rama |`n
StringSplit,s,a,|
Loop,Parse,n
r:=r s%A_LoopField%
Send %r%

StringSplit створює псевдомасив з 1 в якості першого індексу. Отже, на перший термін посилається s1, на другий з s2і т. Д. Інакше тут немає нічого фантазійного.


13
Весь вихід складає всього 92 байти. Було б краще просто Send Hare Krishna ...?
Цифрова травма

@DigitalTrauma HA! Так, певно, тоді. Я припускав, що фантазія була кращою і навіть не перевіряла. AHK - це не гарна мова для цього.
Інженер Тост

3

Пакет, 75 байт

@for %%h in (Krishna Rama)do @echo Hare %%h Hare %%h&echo %%h %%h Hare Hare

3

C 96 байт

*v[]={"Hare ","Krishna ","Rama ","\n"};
main(){for(long a=0x30ae2305d10;a/=4;printf(v[a&3]));}

Вам потрібно лише два біти інформації, щоб зрозуміти, яке слово з молитви потрібно далі, тож замість того, щоб використовувати купу пам'яті та кодувати її як рядок, ви можете просто закодувати її як 40-бітове ціле число (тобто всередині довгого int ).


3

кш / баш / ш, 66 байт

h=Hare;for j in Krishna Rama;do echo $h $j $h $j"
"$j $j $h $h;done

@nimi Спасибі Змінивши його на <CR>, зробить його ще коротшим. Я не можу перевірити це сам, але це має працювати. Принаймні, це працює в bash і навіть (busybox) sh.
ULick

Здається, я додав пробіл під час редагування, але відняв його через зміни з '\ n' на <CR>
ULick

3

APL (Діалог) , 47 байт

Потрібно, ⎕IO←0що для багатьох систем за замовчуванням.

↑∊¨↓'Krishna ' 'Hare ' 'Rama '[(43)⊤8×4 1 5 2]

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

8×4 1 5 2 примножувати; [32,8,40,16]

(4⍴3)⊤ перетворити на 4-значну базу 3; матриця [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] індекс

 розділити на список списків

∊¨ зарахувати (згладити кожного)

 змішати в матрицю (прокладка з пробілами)



2

Java 7, 104 103 байти

String c(){return"xyxy\nyyxx\nxRama xRama\nRama Rama xx".replace("x","Hare ").replace("y","Krishna ");}

Пояснення:

String c(){                                      // Method without parameters and String return-type
  return"xyxy\nyyxx\nxRama xRama\nRama Rama xx"  //  Return this String
    .replace("x","Hare ")                        //  after we've replaced all "x" with "Hare "
    .replace("y","Krishna ");                    //  and all "y" with "Krishna "
}                                                // End of method

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


2

Пакетна, 117 111 103 байт

@set a=Hare &set b=Krishna &set c=Rama 
@echo %a%%b%%a%%b%^

%b%%b%%a%%a%^

%a%%c%%a%%c%^

%c%%c%%a%%a%

Внизу до 103 зараз, коли дозволено проходження нових рядків.

^\n\nвикористовується для вставки нового рядка в кінці перших трьох рядків, а після є пробіл Rama.


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