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.


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.


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


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.


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



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


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!

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.