Hare Krishna Hare Krishna Krishna Krishna Hare Zając


65

Ostatnio widziałem ludzi Hare Kryszna ze swoją mantrą na godle i odkryłem, że kodowanie golfa może być całkiem interesujące.

Wyzwanie

Napisz mantrę Hare Kryszna , tj .:

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

Kryteria wygranej

To jest , więc wygrywa najkrótszy kod w bajtach!

Zasady

  • Obudowa musi zostać zachowana.
  • Tekst powinien zawierać nowe wiersze.
  • Linie mogą mieć końcowe spacje.
  • Końcowy znak nowej linii jest dozwolony.
  • Przetwarzanie z sieci lub innego zewnętrznego źródła jest niedozwolone.

2
Z tytułu spodziewałem się, że coś zdekoduje ciągi binarne na znaki ASCII. Tytuł reprezentuje odwrotny ukośnik.
user253751

5
Cała mantra ma 97 bajtów. O dziwo, są odpowiedzi zawierające więcej niż tyle bajtów.
Masclins

Hmm, dlaczego zaskakująco wygląda jak duplikat Rickroll?
Matthew Roh

Odpowiedzi:


58

Galaretka , 22 bajty

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

Wypróbuj online!

Jak to działa

“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"]Dzięki Bogu wyjaśniłeś to dalej, ponieważ nie miało to sensu.
Nic Hartley,

11
Potrzebuję ["Hare", "Rama", "Krishna"] więcej korzystać z bazy .
ATaco

63

05AB1E , 38 bajtów

Można skrócić o 2 bajty, jeśli końcowe znaki nowego wiersza są prawidłowe.

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

Wypróbuj online!

Wyjaśnienie

“«Î‡Ä¦í¥Â“                              # 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 dnanaprawdę? Skąd ten pomysł? +1 :)
Stewie Griffin

14
Powiedz szczerze, czy zbudowałeś generator kodu golfowego 05AB1E?
YSC

1
@YSC to niezły pomysł na kompresję słownika. Już nad tym pracuję.
Magic Octopus Urn



39

Oktawa, 74 59 bajtów

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

Sprawdź wynik tutaj .

Wyjaśnienie:

{'Hare ','Krishna ','Rama ',10}tworzy tablicę komórek z trzema łańcuchami, gdzie czwarty to 10(wartość ASCII dla nowej linii).

{'ababdbbaadacacdccaa'-96}to wektor, który indeksuje tablicę komórek powyżej. Wektor jest, [1 2 1 2 4 ...]ponieważ odejmujemy 96od ciągu ababd....

Otaczające nawiasy kwadratowe służą do konkatenacji wyników zamiast uzyskiwania ans = Hare; and = Krishna; ans = ...


Nie wiedziałem, że możesz tak indeksować komórki w Octave (w przeciwieństwie do MATLAB)!
Zapamiętanie

19

Siatkówka , 39 bajtów


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Wypróbuj online!

Przeważnie zwykłe podstawienia, jedyną „sztuczką” jest modyfikator, *który wypisuje wynik podstawienia, a następnie przywraca ciąg znaków do poprzedniego stanu.



12

JavaScript, 75 70 bajtów

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

Wypróbuj online!

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


2
Lepiej używaj dosłownych znaków nowej linii bezpośrednio w ciągu szablonu zamiast cyfr 3. Ciąg szablonu będzie miał tę samą długość, ale nie będziesz musiał go później zastępować. (Nie spowoduje to problemów z indeksem tablic, ponieważ /./nie pasuje do znaków nowej linii.)
manatwork 27.04.17

12

do

154 bajty, 124 bajty, 96 bajtów

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

Wypróbuj online!

28 bajtów zaoszczędzonych dzięki Dennisowi


1
Witamy w Programowaniu zagadek i Code Golf.
Rohan Jhunjhunwala

1
Jest to dość standardowy skrót do programowania łamigłówek i golfa kodowego, nazwa tej wymiany stosów. Przepraszam, powinienem to wyjaśnić. Witamy na naszej stronie, dobry pierwszy post.
Rohan Jhunjhunwala

1
To nie będzie działać ze wszystkimi kompilatorami, ale gcc nie wymaga instrukcji include. Ponadto, jeśli ograniczysz przesyłanie do C, możesz upuścić inti zadeklarować iglobalnie, aby domyślnie było zero. tio.run/nexus/…
Dennis

2
@AnT Zgadza się, ale zawody w golfa kodu nie wymagają „właściwego” kodu. Tutaj w PPCG definiujemy języki według ich implementacji. Tak długo, jak istnieje kompilator, który wytwarza działający plik wykonywalny, odpowiedź jest poprawna.
Dennis

1
main(){for(char*t="BG@ESCB;:N8F6DIBA10Hare \0Krishna \0Rama \0\n";*t^72;printf(t+*t++-48));}Oszczędza 4 bajty.
Johan du Toit

11

V , 40 , 36 bajtów

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

Wypróbuj online!

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

Wyjaśnienie:

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>Komenda jest niezwykle przydatna dla wyzwań, takich jak ten. :)


10

C #, 109 bajtów

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

Dość proste, Console.Writedomyślnie formatuje ciąg, a użycie Writezamiast WriteLinenie tylko oszczędza 4 bajty, ale pozwala uniknąć końcowego znaku nowej linii. Używa znaków nowej linii w stylu Unix, więc może nie działać tak dobrze w systemie Windows, dodatkowe 6 bajtów dla systemu Windows, zmieniając \nna\r\n

Ta metoda wyświetli dane bezpośrednio do konsoli, jeśli wolisz metodę zwracającą ciąg znaków:

C #, 118 bajtów

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

Alternatywnie, jeśli potrzebujesz w pełni samodzielnego i kompilowalnego programu:

C #, 135 bajtów

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

Powinno to działać jako skompilowany program, pod warunkiem, że ustawisz go Ajako klasę wejściową.


Wygląda trochę dziwnie bez odstępów między słowami.
manatwork

@manatwork dobry punkt, na szczęście spec mówi, że spacje końcowe są w porządku, więc kosztują tylko 3 bajty
Skidsdev

Mógłby rozpocząć wojnę z płomieniem, ale możesz użyć var ​​zamiast struny, aby jeszcze bardziej zmniejszyć drugi przykład.
John Baughman

@JohnBaughman Zwracana wartość metody nie może być, varo ile wiem, i var.Format()zdecydowanie nie jest rzeczą
Skidsdev

Duh ... Nie myślałem o tym. Masz rację, właśnie wkroczyłem w świat Lamby i źle zinterpretowałem to, co czytałem.
John Baughman

8

C, 85 bajtów

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

Wolałbym świecką mantrę, ale mam nadzieję, że jest to jedna z tych pokojowych religii.

Zobacz, jak to działa tutaj .

To kompaktuje naiwną implementację o 23 bajty.


8

Python 2, 92 88 74 bajty

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

Wypróbuj online!

Nie , to nie jest sprytne, nie, nie jest najkrótsze, ale hej, jestem nowy i działa.

Inne rozwiązanie ( 84 80 bajtów):

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

Zamień zera i jedynki oraz „Zając” i „Kryszna” na liście. To usuwa wiodące zero. Następnie przekonwertuj nowy numer (1010300113121232211) na szesnastkowy (0xe054e999f20c553), otocz go backtickami i wreszcie uświadom sobie, że odpowiedź xnora wciąż wyprzedza o 12 bajtów! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 bajtów

Inspirowany tym wpisem JavaScript .

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

Perl, 67 bajtów

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

2
(Hare,Krishna,Rama)zapisuje dwa bajty w pierwszym kodzie.
Dada

5

Matlab 139 136 105 bajtów (dzięki @ 2501 )

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

Wypróbuj online w Octave!


lub 126 bajtów, jeśli końcowy nowy wiersz jest dozwolony
13267

@ 2501: haha, to świetnie. Właściwie myślę, że może 105 bajtów, powinieneś opublikować to jako odpowiedź
13267

5
Jestem prawie pewien, że możliwe są dalsze ulepszenia.
2501

1
Do Twojej wiadomości, TIO obsługuje Octave :) tio.run/nexus/…
Beta Decay

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]ma 64 bajty. : P (tłumaczenie przesłania @Stewie Griffin)
Memming

5

MySQL, 115 100 bajtów

(Dzięki @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

Możesz usunąć wszystko AS .
manatwork

Dobra sztuczka, na pewno będę używać tej metody do niektórych wyzwań.
BradC

5

R, 75 85 83 bajtów

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

Tworzy wektor za pomocą Hare, Krishnai nowa linia, pobiera potrzebne, a następnie powtarza ją, zastępując KrishnaRama.

Musiał zawierać spację w każdym słowie, sep=""ponieważ w przeciwnym cat()razie wstawiałby spację na początku każdej linii.


Nie mogę tego zmusić do pracy w TIO
Giuseppe,

Prawdopodobnie potrzebuje print () lub czegoś takiego.
BLT

@Giuseppe Używam tutaj, że R automatycznie drukuje. Ale w zależności od tego, jak to nazwiesz, print()lub cat()byłoby to potrzebne. Wymagałoby to znacznie więcej bajtów.
Zamieszczę

1
@AlbertMasclans nie dostaję komunikat o błędzie mówiąc: object 'h' not found tio.run/nexus/…
Giuseppe

2
Myślę, że trzeba wymienić h=z h<-wewnątrz zaproszeń dop
Giuseppe

5

PowerShell, 73 53 52 bajtów

absolutnie zburzony przez Jeffa Freemana - użycie rzeczywistej nowej linii zamiast \nzapisuje kolejny bajt, a także zapisuje jeszcze jeden w formacie tablicy. (od (1,2)do ,1,2)

-1 dzięki TesselatingHeckler, bez przecinka w notacji tablicowej.

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

Moja stara odpowiedź - wypróbowałem kilka innych metod zastępowania, ale wszystkie okazały się nieco dłuższe.

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

w ciągu są nowe znaki.

całkiem proste, wykorzystuje fakt, że PowerShell rozwinie zmienne w podwójnych cudzysłowach oraz krótszą metodę przypisywania zmiennych w celu zaoszczędzenia niektórych bajtów.


Dobre rozwiązanie, ale wzywam cię do jeszcze większego obniżenia poziomu, zauważając wzorzec w danych wyjściowych i potokach. Mam to do 55 bajtów. Nie wiem, jak zepsuć komentarz, więc po prostu odpowiedz tutaj, jeśli chcesz go zobaczyć (lub jeśli chcesz podpowiedzi!).
Jeff Freeman

2
Zamiast tagu spoilera wymyśliłem, jak udostępnić przez link. Wypróbuj online!
Jeff Freeman

@JeffFreeman miło, ogolił jeszcze dwa z tego na nowej linii i tablicy - do 52, pokonując prawie wszystkie języki inne niż golf.
colsw

4

Sed, 72

Wynik obejmuje +1 dla -rflagi.

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

Wypróbuj online .


Jestem całkiem pewien, że istnieje sposób na usunięcie niektórych bajtów za pomocą hange c, append lub nsert izamiast substitute. Edycja: już nie jestem tego pewien; Edytuj edycję: tak nie, to nie działa, ponieważ nie działają one w obszarze wzorów, ale zamiast tego bezpośrednio generują
Aaron

4

Rubin , 62 61 bajtów

Gdy nad tym pracowałem, ostatecznie stała się prawie identyczna z odpowiedzią Python @ xnor, z tym wyjątkiem, że Ruby nie ma spacji między argumentami w swojej printfunkcji, zmuszając mnie do używania złączeń, co skutkuje dłuższą odpowiedzią ...

-1 bajty z @manatwork

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

Wypróbuj online!


Zrób :Haresymbol.
manatwork

4

Bash, 93 90 bajtów

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
Niezła pierwsza próba. Czy mogę zasugerować kilka drobnych usprawnień? pastebin.com/0bYQF26n
manatwork

@manatwork powinieneś dodać go jako odpowiedź.
Pandya

1
Bez zmiennej s=spada do 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 bajtów

To śmieszne, ale w AHK nie mogę znaleźć krótszego sposobu na zrobienie tego:

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

Oto, co próbowałem najpierw, to było 107 bajtów i starałem się być fantazyjny. Jak zauważył Digital Trauma , wysłanie surowego tekstu byłoby krótsze.

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

StringSplit tworzy pseudo-tablicę z 1 jako pierwszym indeksem. Tak więc pierwszy termin jest przywoływany s1, drugi z s2itd. W przeciwnym razie nie ma tu nic wyszukanego.


13
Całe wyjście ma tylko 92 bajty. Czy byłoby lepiej po prostu Send Hare Krishna ...?
Cyfrowa trauma

@DigitalTrauma HA! Prawdopodobnie tak. Przypuszczałem, że fantazja jest lepsza i nawet nie sprawdziłem. AHK nie jest do tego dobrym językiem.
Inżynier Toast

3

Partia, 75 bajtów

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

3

C 96 bajtów

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

Potrzebujesz tylko dwóch bitów informacji, aby dowiedzieć się, które słowo z modlitwy jest potrzebne w następnej kolejności, więc zamiast używać wiązki pamięci i kodować ją jako ciąg znaków, możesz po prostu zakodować ją jako 40-bitową liczbę całkowitą (tj. Wewnątrz długiej int ).


3

ksh / bash / sh, 66 bajtów

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

@nimi Dzięki. Zmieniłem go na <CR>, czyni go jeszcze krótszym. Nie mogę tego przetestować, ale to powinno działać. Przynajmniej działa w trybie bash, a nawet (busybox) sh.
ULick

wygląda na to, że dodałem spację do edycji, ale odjąłem jedną ze względu na zmianę z „\ n” na <CR>
ULick

3

APL (Dyalog) , 47 bajtów

Wymaga ⎕IO←0ustawienia domyślnego w wielu systemach.

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

Wypróbuj online!

8×4 1 5 2 zwielokrotniać; [32, 8, 40, 16]

(4⍴3)⊤ przekonwertować na 4-cyfrową bazę 3; macierz [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] wskaźnik

 podzielony na listę list

∊¨ zaciągnąć (spłaszczyć każdy)

 wmieszać w matrycę (wypełnienie spacjami)



2

Java 7, 104 103 bajty

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

Wyjaśnienie:

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

Wypróbuj tutaj.


2

Partia, 117 111 103 bajtów

@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%

Do 103 teraz, gdy końcowe znaki nowej linii są dozwolone.

^\n\nsłuży do wstawiania nowej linii na końcu pierwszych trzech wierszy, a po niej jest spacja Rama.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.