Witaj świecie! bez powtórzeń

27

W dowolnym języku programowania, który istniał przed zadaniem tego pytania, napisz program (nie funkcję), który wypisuje znaki, Hello world!po których następuje nowa linia. Twój program:

  • nie należy używać żadnych znaków więcej niż jeden raz (w tym białych znaków)
  • powinien używać tylko znaków ASCII
  • nie powinien używać żadnych wbudowanych bibliotek
  • nie powinien otrzymywać danych wejściowych (użytkownik, plik, nazwa pliku, zmienna systemowa, internet, cokolwiek)
  • nie powinien wypisywać niczego innego

Zwycięzcą jest ten, kto ma najwięcej głosów po 14 dniach i przestrzega sześciu zasad.

Szósta zasada mówi, że nie możesz używać H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + ani Fugue. Ponadto wszystkie odpowiedzi wymagające implementacji nowszych niż to wyzwanie muszą zostać oznaczone jako niekonkurujące.


Zastrzeżenie: To pytanie zostało wysłane przy założeniu, że Hello world! z ograniczoną liczbą powtórzeń nie spowodował uszkodzenia komputera ani mózgu w trakcie uzyskiwania odpowiedzi.

Timtech
źródło
jeśli unikamy kodów znaków, czy można użyć znaku „\” więcej niż jeden raz?
WallyWest,
4
Co z pietem?
Victor Stafusa,
@Victor „powinien używać tylko znaków ASCII”
Timtech
3
To była świetna łamigłówka i podobało mi się to :-).
Konrad Borowski,
9
„Powinien używać tylko znaków ASCII” - co drakońskie ograniczenie. To usuwa całą klasę języków, które nie korzystają z ASCII.
Timwi

Odpowiedzi:

33

Perl 6 (29 28 znaków)

To było trochę denerwujące, ale w końcu udało mi się stworzyć program do tego zadania. Dziękujemy wielkiej społeczności # perl6 za pomoc w tym zadaniu. Zajęło mi to dwie godziny, mam nadzieję, że ci się spodoba. Dane wyjściowe są całkowicie zgodne ze specyfikacją, w tym nową linią.

say
Q[@A`DO world!]~|<HeLhg>

Istnieją cztery znaki zainteresowania.

  • say

    To generuje argument z nową linią na końcu. Nowy wiersz po samym poleceniu jest potrzebny jako zamiennik spacji.

  • Q[@A`DO world!]

    To jest pierwszy ciąg. Q[]jest dla surowych ciągów znaków (jak r""w Pythonie). W tym przypadku może zająć dowolny ogranicznik (lub ich parę) []. W tym przypadku używam tego do cytatów, nie potrzebuję zachowania nieprzetworzonego łańcucha.

  • ~|

    Jest to operator łańcuchowy ( ~) bitowy lub ( |).

  • <HeLhg>

    <>to lista literał, która zajmuje listę elementów oddzieloną spacjami. W tym przypadku ma jeden element i użyty jako skalar, daje ciąg.

Konrad Borowski
źródło
3
Niesamowity! Muszę się uczyć. Trochę składni Perla 6! Zgadzam się również z twoim komentarzem, był to zdecydowanie fajny problem!
Dom Hastings,
4
Woah ... mój umysł jest oszalały: O +1
Klamka
12

Perl 5 z -M5.010, 29 bajtów

say+He.v108
x2,q(O world!)^$"

Wypróbuj online!

Zdobyłem dużo wiedzy, odkąd po raz pierwszy tego spróbowałem. Wciąż nie tak krótkie jak inne odpowiedzi, ale najlepsze, co mogę wymyślić!

Dom Hastings
źródło
Wyzwanie ma małe litery w.
Ørjan Johansen
@ ØrjanJohansen Dzięki, zapomniałem!
Dom Hastings,
11

Perl 5.10+: 24 znaki

say+He,YZX^q(567 world!)

OK, myślę, że jest tak krótki, jak to możliwe w Perlu.

Uruchom z perl -M5.010(lub po prostu perl -E), aby włączyć funkcję Perl 5.10+ say.

Ilmari Karonen
źródło
Poważnie pod wrażeniem! Spędziłem wieki próbując obejść ll...
Dom Hastings
9

Golfscript 42 33

Równie dobrze mógłbym zagrać w golfa, biorąc pod uwagę, że musiałem dopasować część kodu i wszystkie dane w tym samym bloku bez możliwości rozgraniczenia dwóch, myślę, że jest to dość krótki wynik. W przeciwieństwie do mojego pierwszego przesłania, kod bloku jest teraz w pełni zintegrowaną częścią danych, dlatego {1nie tylko zaczynaj blok i umieszczaj 1na stosie, ale także dane, które definiują Hi tak dalej. Tworzenie tablicy obejmuje teraz pusty ciąg wejściowy, co oznacza, że ​​nie muszę przycinać początku, ponieważ między pustym ciągiem a jest tylko jeden znak H, znak ten jest odcinany, gdy biorę co drugi znak, a pusty łańcuch jest ostatecznie wyprowadzany jako nic.

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

Demo online: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

Definiuje blok kodu. Tworzy kopię bloku kodu i konwertuje go na ciąg znaków. Używa bloku kodu do iteracji po ciągu. Dla każdej iteracji kod utworzy kopię poprzedniej wartości char, xor ją z bieżącą wartością char, i odejmie 1. Wynikowy ciąg usuwa następnie pierwsze 6 znaków, a co drugi znak jest usuwany. W końcu dołączany jest wiersz.

„r iFNGDJUHv98oIMgtplbh4m” to tylko dwie niezadeklarowane zmienne, nic nie robią, ale są starannie skonstruowane, aby uzyskać pożądany rezultat.

Demo online: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r

aaaaaaaaaaaa
źródło
6

Vim 7.3, 18 klawiszy

:h-cu
9j3wy$<C-^>P<End>r!o

Kopiuje ciąg Hello worldz tego pliku pomocy , który niestety został usunięty w nigdy wersjach Vima.

Gajówka
źródło
Zgodnie z tym , <Esc>kombinacje klawiszy i kombinacje z klawiszem Ctrl liczą się jako jeden bajt
oktupol
6

Befunge-98 , 34 31 bajtów

f"v!dlrow
+c<>a,kb@#*98e':g05-3

Wypróbuj online!

Używa kilku różnych metod, aby uniknąć powielania znaków.

Po pierwsze, używamy literału zawijania, aby uniknąć użycia dwóch "liter s. To dodaje „świat!” do stosu.

Idąc w lewo w drugim wierszu, dodajemy 9 do dodatkowego, faby dodać o„Hello”. Badamy gznak z komórki 5,0 ( l), a następnie go powielamy. 'Służy do pobierania list e. Pomnóż 9 przez 8, aby uzyskać 72, wartość ASCII z H. Następnie drukujemy wszystko za pomocą ck,i odwracamy kierunek za pomocą, >aby ponownie użyć ,do drukowania nowej linii ( a).

Jo King
źródło
Bardzo dobrze, ale to wyzwanie jest bez przecinka.
Ørjan Johansen
Oh lol, to ułatwia ... Dzięki @ ØrjanJohansen
Jo King
Masz dwa +i d.
Ørjan Johansen
@ ØrjanJohansen oops. powinno zostać naprawione teraz
Jo King
3

Eliksir , 37 bajtów

IO.puts~c(He#{[?n-2,108]}\x6f world!)

Wypróbuj online!

Nie mogę zagwarantować, że zadziałałoby to w 2014 r., Kiedy opublikowano to wyzwanie, a Elixir był jeszcze w wersji wcześniejszej niż 1.0 (a zatem, czy formalnie „konkuruje”, ale patrząc na informacje o wydaniu, myślę, że powinien być DOBRZE). W każdym razie cieszę się, że w końcu znalazłem prawidłowe rozwiązanie tego zadania, używając konwencjonalnego języka ogólnego przeznaczenia innego niż Perl!

Przewodnik

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!
Kirill L.
źródło
0

Stax (niekonkurencyjny), 8 bajtów

`dx/&\p4

Wypróbuj online!

Tylko skompresowany dosłowny ciąg znaków. Na szczęście Stax pozwala mi odejść bez zamykania się.

Weijun Zhou
źródło