Unikaj powtarzania liter między pięcioma prostymi programami

12

Twoim wyzwaniem jest napisanie 5 różnych pełnych programów dla 5 następujących zadań:

  1. Wydrukować Hello, World!

  2. Biorąc pod uwagę wejście z STDIN, wyślij silnię, możesz założyć, że wejście jest liczbą całkowitą> = 0

  3. Biorąc pod uwagę liczbę całkowitą N, oblicz sumę liczb pierwszych <= N

  4. Biorąc pod uwagę parametr STDIN, wypisz litery użyte w danych wejściowych. Na przykład: dane wejściowe Hello worldwymagają wyjścia helowrd. Zauważ, że dane wyjściowe są pisane małymi literami. Możesz założyć, że dane wejściowe są zawsze alfabetyczne z białymi spacjami, białe spacje są ignorowane.

  5. Wyjmij następujący diament dokładnie tak:

       *
      ***
     *****
    *******
     *****
      ***
       *
    

Wszystkie te wyzwania są prawdopodobnie bardzo łatwe, ale jest pewien haczyk. Każda litera, której używasz, nie może być ponownie użyta w innych programach. Nie jest to zabronione, ale da ci karę w wysokości +8 bajtów . Na przykład, jeśli jest to twój program do pierwszego zadania:

print("Hello, World!");

Wtedy nie można użyć następujących liter (w wielkie lub małe litery) postaci: p, r, i, n, t, h, e, l, o, w, dw innych programach. Jeśli musisz ich użyć, możesz „kupić” każdą literę za 8 bajtów. Jeśli więc chcesz ponownie użyć litery lw innym programie, otrzymasz karę w wysokości 8 bajtów. Po zapłaceniu kary możesz w tym programie dowolnie korzystać z każdej litery. Inne postacie nie mają znaczenia. Ponadto wszystkie 5 programów powinno być w tym samym języku.

To jest , więc wygrywa najmniej bajtów!

Adnan
źródło
3
Jest to nieco inny obrót w stosunku do wyzwań, które już mieliśmy, ale nie na tyle różni się, aby w moich oczach nie był to duplikat.
Mego,
3
@Mego Głosowałbym za zamknięciem tego jako wielokrotnego duplikatu bez ograniczenia, ale ograniczenie sprawia, że ​​jest to zupełnie nowa gra.
trichoplax
1
Jeśli używasz danej litery w 3 programach, czy płacisz karę 8 bajtów dwukrotnie (16 bajtów)?
trichoplax
1
@trichoplax, tak, płacisz 16 bajtów
Adnan
1
@trichoplax Trudno. Istniejące rozwiązania powielanych problemów będą nadal konkurencyjne. Najważniejszymi rozwiązaniami tutaj będzie po prostu połączenie rozwiązanych pytań z wyższym wynikiem od kary.
Mego

Odpowiedzi:

10

CJam, 73 bajty

"Obkkh+'Phukc&"7f^
q~m!
ri){'j3+_3++~},:+
lS-el_&
4{_' *4@-Y*('**+}%_1>W%\+N*

Każda linia to pełny program. Wypróbuj je online: 1 | 2 | 3 | 4 | 5

Mapa liter

 bc  f h  k   op    u       18
            m   q            4
        ij       r          17
    e      l      s          7
             n        w y   27

Jeśli chcesz (a każdy z twoich programów mieści się w jednej linii), możesz użyć tego programu CJam, aby utworzyć mapę listów dla własnego zgłoszenia.

Dennis
źródło
Dowód, że osascript nie został zbudowany w tym celu: Twoje zgłoszenie to mniej niż 2 moje programy. XD +1, niezła robota.
Addison Crump,
4

Pyth, 90 bajtów

Pierwsze podejscie...

Zadanie 1: 20 bajtów

+"Hello, "+C87"orld!

Zadanie 2, 3 bajty

.!Q

Zadanie 3, 9 bajtów

sf}TPTSvz

Zadanie 4, 6 + 8 = 14 bajtów

@G{rw0

Zadanie 5, 44 bajty

"   *
  ***
 *****
*******
 *****
  ***
   *
lirtosiast
źródło
3

osascript, 759 bajtów

Wiedziałem, że to będzie dużo, kiedy zacznę. z oo

Zadanie 1: 15 bajtów

"Witaj świecie!"

Wiedziałem, że od tego momentu będzie źle.

Zadanie 2: 64 + 8 * 4 = 96 bajtów

w biegu
ustaw o na 1
powtórz a
ustaw o na * o
ustaw a na a-1
koniec
o
koniec

O rany.

Zadanie 3: 170 + 8 * 13 = 274 bajtów

w biegu
ustaw o na 0
ustaw t na false
powtórz z i od 2 do a
ustaw wartość t na true
powtórz z c od 2 do i-1
jeśli i mod c = 0, to ustaw t na false
koniec
jeśli t, to ustaw o na o + i
koniec
koniec

Dennis ≠ outgolfed.

Zadanie 4: 225 + 8 * 13 = 329

w biegu
ustaw o na „”
powtórz z i w pozycjach a
powtórz za pomocą cw znakach i
jeśli c nie jest o, wtedy
jeśli liczba ASCII c <91, to
ustaw o na o & (znak ASCII z (liczba ASCII c + 32))
jeszcze
ustaw o na o & c
koniec
koniec
koniec
koniec
o
koniec

...

Zadanie 5: 45 bajtów

„*
  ***
 *****
*******
 *****
  ***
   * ”

Więc tak. Od początku wiedziałem, że przegram. Ale to było interesujące, chciałbym wiedzieć, czy można to zrobić za pomocą mniejszej liczby postaci. Mapa znaków (dostarczona przez Dennisa):

   de hlorw 15
a cdef hi lmnop rstu w 160
a de nop rstu 57
abcdef hi lmnop rstu w 214
                            39
                             0

Liczba znaków powyżej jest nieznacznie mniejsza - nowe wiersze sprawiły, że wystąpiły problemy, ponieważ nowe wiersze nie zostały policzone.

UWAGA: Powodem nieużywania rzeczy takich jak a's charactersi tym podobnych jest to, że 'znak musi być użyty podczas wykonywania z wiersza poleceń osascript. Gdybym użył ', musiałbym użyć \'czegoś podobnego, co by mi wcale nie pomogło. Ponadto rozpoznaje tylko "jako przechwytywacze łańcuchów, więc też trochę mnie tam wkręciłem. Ale to była zabawa.

Addison Crump
źródło
1

NARS2000 APL, 144 bajty (85 znaków)

Zadanie 1, 21 bajtów (17 znaków)

⎕←"Hello, World!"

Zadanie 2, 10 bajtów (4 znaki)

⎕←!⎕

Zadanie 3, 22 bajty (11 znaków)

⎕←+/¯2π⍳2π⎕

Zadanie 4, 53 bajty (29 znaków)

⎕←∪Q[26∣Q⍸⍞∩Q←⎕AV[97+⍳26]∪⎕A]

Zadanie 5, 38 bajtów (24 znaki)

⎕←" *"[1+4<∘.+⍨(⍳3),⊖⍳4]
Oberon
źródło
1
Czy to naprawdę pełne programy? Nie znam NARS2000 (i nie jest dostępny na mojej platformie), ale wszystkie znane mi dialekty wymagają przypisania do drukowania poza REPL.
Dennis
@Dennis Przepraszam, zapomniałem, że majstrowałem w REPL.
Oberon,
Nie możesz wyprowadzać końcowych spacji dla diamentu.
lirtosiast
1

Galaretka , 46 bajtów (niekonkurencyjna)

“3ḅaė;œ»
Ɠ!
ÆRS
ɠQḲŒl
4Ḷ¤‘+¤ṖṚṭ×”*Fµ4Ḷṭ4ḶṚṖ¤F×⁶+⁸Y

Wypróbuj online! (Skopiuj / wklej każdy fragment)

Najwyraźniej ograniczenie nie ograniczało gry w golfa :) Poproszę tylko sugestie dotyczące ostatniego.

Erik the Outgolfer
źródło