Харе Кришна Харе Кришна Кришна Кришна Харе Харе


65

Недавно я видел людей Харе Кришна с их мантрой на эмблеме, и я обнаружил, что может быть довольно интересно кодировать гольф.

Соревнование

Напишите Харе Кришна мантру , то есть:

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

Критерии победы

Это , поэтому выигрывает самый короткий код в байтах!

правила

  • Оболочка должна быть сохранена.
  • Текст должен содержать новые строки.
  • Линии могут иметь пробел (ы).
  • Трейлинг новой строки разрешен.
  • Разбор из сети или любого другого внешнего ресурса запрещен.

2
Из заголовка я ожидал что-то, чтобы декодировать двоичные строки в символы ASCII. Название представляет обратную косую черту.
user253751

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"] .
ATaco

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?
СМУ

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)!
17

19

Сетчатка , 39 байт


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

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

В основном простые замены, единственный «трюк» - это модификатор, *который печатает результат замены, а затем возвращает строку обратно к тому, что было раньше.



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
Добро пожаловать в Программирование головоломок и Code Golf.
Рохан

1
Это довольно стандартная аббревиатура для программирования головоломок и кода гольфа, как называется этот стек обмена. Извините, я должен был это прояснить. Добро пожаловать на наш сайт, хорошее первое сообщение.
Рохан

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, поэтому может не работать так хорошо на окнах, дополнительные 6 байтов для окон, если изменить \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

@manatwork хорошая точка зрения, к счастью, спецификация говорит, что пробелы в порядке, поэтому стоит всего 3 байта
Skidsdev

Может начать войну пламенем, но вы можете использовать var вместо string, чтобы еще больше сократить второй пример.
Джон

@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')

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


или 126 байтов, если разрешается завершающая новая строка
user13267

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

5
Я уверен, что дальнейшие улучшения возможны.
2501

1
К вашему сведению, TIO поддерживает Octave :) tio.run/nexus/…
Beta Decay

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

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 .
manatwork

Хороший трюк, я определенно буду использовать этот метод для некоторых задач.
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()будет необходимо. Это потребует гораздо больше байтов. Я
опубликую

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"

в строке есть переводы строки.

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


Хорошее решение, но я призываю вас сделать это еще больше, заметив закономерность в выводе и конвейерной обработке. Я получил его до 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 байт

Когда я работал над этим, он в конечном итоге стал почти идентичным ответу @ xnor на Python, за исключением того, что в Ruby в его printфункции нет пробелов между аргументами , что вынуждает меня использовать соединения и приводит к более длинному ответу ...

-1 байт из @manatwork

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

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


Сделать :Hareсимвол.
manatwork

4

Баш, 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

@manatwork, вы должны добавить его в качестве ответа.
Pandya

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-битное целое число (т.е. внутри длинного целого ).


3

ksh / bash / sh, 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 (Dyalog) , 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.