Zakoduj program z możliwie najmniejszą liczbą różnych znaków,

12

Celem jest napisanie programu, który koduje inny program (wejście) z możliwie najmniejszą liczbą znaków.

Punktacja

  • Wynik jest równy różnej liczbie znaków potrzebnej do wydruku.
  • Niższy wynik jest lepszy.

Zasady

  • Brak języków docelowych z ograniczonym zestawem poleceń. (Bez Brainf ** k, Biała spacja itp.)
    Edycja : Mam na myśli co najmniej 26 znaczących znaków, Anie zmienia sposobu działania programu brainf ** k, więc nie możesz policzyć tej postaci. To samo dotyczy białych znaków.
  • Język docelowy musi istnieć w momencie pisania tego pytania.
  • Musisz załączyć małe wyjaśnienie, jak zarchiwizować swój wynik.
  • Program wejściowy jest prawidłowy.
  • Zakodowany program musi być poprawnym programem w tym samym języku, co dane wejściowe.
  • Zakodowany program musi wykonać to samo zadanie, co program oryginalny.
  • Twój koder musi działać dla każdego poprawnego programu w tym języku.
  • Uwzględnij przykładowe dane wejściowe i wyjściowe.

Notatki

  • Koder może być napisany w dowolnym języku, nie tylko w języku, na który jest kierowany.
  • To nie jest , zachęca się do programów czytelnych.
  • Wielkim celem jest sprawdzenie, ile różnych znaków potrzeba do napisania czegokolwiek w tym języku. Niedozwoliłem BF itp., Ponieważ nie byłoby żadnego wyzwania.
  • Zostało to zainspirowane wydrukowaniem łańcucha w jak najmniejszej różnych znaków , możesz wziąć to jako przypadku tego pytania.

Przykład

W Javie możesz używać \uXXXXinnych znaków. Prawidłowy wpis koduje w ten sposób każdy znak z wejścia. Miałoby to wynik 18 ( \ 0-9a-f)

Kod w Tcl, koduje program Java:

set res {}
foreach char [split [read stdin] {}] {
    append res [format \\u%04x [scan $char %c]]
}
puts $res
Johannes Kuhn
źródło
przepraszam za zamknięcie głosowania ... myślałem, że to duplikat codegolf.stackexchange.com/questions/6974, ale ten jest specyficzny dla Pythona.
stoisko do
2
Z tobą wynik Java i koder: Nie mówię dużo Tcl, ale nie getsczytam tylko jednego wiersza danych wejściowych? I przegapiłeś ukoder (ale z drugiej strony nie potrzebujesz miejsca i dlatego wynik pozostaje taki sam).
Howard
7
Czy wszystkie języki programowania nie mają „ograniczonego zestawu poleceń”? Gdzie rysujesz linię?
jpjacobs,
4
Głosuję za tym, aby to zakończyć, ponieważ jest to warunek złamanego zwycięstwa, na który nakładany jest bardzo niejasny zakaz języków. Gdyby Unary nie został zbanowany, uzyskałby wynik 1. Gdyby pieprzenie mózgu nie zostało zbanowane, uzyskałoby 7 (zauważ, że sam język ma naturalnie 8 poleceń + 248 znaków komentarza). Więc gdzie jest granica między naturalnym posiadaniem zbyt małej liczby poleceń a posiadaniem wystarczającej ilości, aby być uprawnionym.
1
Nawet języki takie jak Python mają ograniczony zestaw poleceń. Nie możesz „stworzyć nowej”, po prostu tworzysz nową funkcję lub coś, ale słowa zastrzeżone pozostają takie same. Definicja „polecenia” jest niejasna. Pytanie można ewentualnie rozwiązać, nie ograniczając języków (po prostu nie popieraj trywialnych odpowiedzi) i wymagając, aby zestaw używanych znaków musiał być odpowiednim podzbiorem znaków w języku.
mbomb007

Odpowiedzi:

10

GolfScript / GolfScript, wynik 4

"'',,"\{"'"\","*"',+"}%"''+~"

Sam koder jest programem GolfScript, który pobiera oryginalny kod na STDIN i przekształca go w ciąg znaków ',+~. To samo wyjście jest poprawnym kodem GolfScript, który wykonuje te same operacje, co wersja oryginalna.

Podstawowa metoda polega na kodowaniu kodu jako łańcucha (za pomocą znaków ',+, patrz poniżej), a następnie ocenieniu tego łańcucha za pomocą polecenia eval ~.

Jeśli połączy się dowolny ciąg wraz z tablicą liczb w GolfScript, liczby są konwertowane na punkty kodowe, a wynikiem jest sam ciąg znaków. Tak więc kodowanie ciągów znaków tworzy po prostu listę liczb (z punktów kodowych kodu wejściowego), a następnie konkatenuje wszystkie z pustym ciągiem znaków.

Przykład:

Kod wejściowy

"hi"
p

jest przetłumaczony na (uwaga: wstawiono podział wiersza i dodano komentarze w celu zwiększenia czytelności)

# initialize an empty array []
'',,

# append number 34 (length of string ',,, ... ,,,')
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',+

# ... other numbers
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',+
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',+
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',+
',,,,,,,,,,',+
',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',+

# result is array [34 104 105 34 10 112]

# append empt string, i.e. convert array to string (results in "\"hi\"\np")
''+

# evaluate
~
Howard
źródło
11

Python -> Python, 8 różnych znaków

def minimal_python(input_code):
    """Convert Python code to minimal Python code."""

    # Create a list of the ordinal numbers of <input_code>'s characters.
    # '%' signs have to be treated specially and are represented with -1.
    ords = []
    num_escaped_chars = 0
    for char in input_code:
        if char == '%':
            ords.append(-1)
        else:
            ords.append(ord(char))
            num_escaped_chars += 1

    modulo_sign_escape = '%' * 2**num_escaped_chars
    def formatters():
        num_escaped_chars_so_far = 0
        for o in ords:
            if o == -1:
                yield modulo_sign_escape
            else:
                yield '%' * 2**num_escaped_chars_so_far + 'c'
                num_escaped_chars_so_far += 1
    format_str = "'" + ''.join(formatters()) + "'"

    values_str = ''.join('%' + '-~'*o + '0' for o in ords if o != -1)

    return 'exec' + format_str + values_str

Używa formatowania modulo do przebudowania ciągu wejściowego. Na przykład print 1wyniki w tym programie:

exec'%c%%c%%%%c%%%%%%%%c%%%%%%%%%%%%%%%%c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%c%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%c'%-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0%-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0%-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~0%-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0%-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0%-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0%-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~0

Teoretycznie możesz zakodować dowolny program taki jak ten, ale wynikowy program zawsze będzie miał więcej niż 2 n znaków, gdzie n jest liczbą znaków na wejściu, nie włączając %symboli.

trzęsienie ziemi
źródło
Dolna granica wynikowego programu to 2**n+3*n-1 + 6znaki, w tym wszystkie znaki wejściowe (jeśli założymy, że każdy znak to bajt NUL). To pochodzi z OEIS A132074 , plus 6 dla exec''. Jeśli przyjmujesz, że znaki muszą być drukowalne ASCII, to dolna granica jest wyższa. repl.it/EHEN
mbomb007
8

CJam -> CJam, wynik: 3

CJam jest nowszy od pytania, więc nie można wygrać.

q{[{_'(>{'(-')*''\+}{is'c+T}?}%{"+"T}*'~]}:T~

Używa ')~. ')jest postacią ), a każdy dodatkowy )zwiększa ją o jeden. ~może ocenić znak lub ciąg. Cały program jest oceniany po połączeniu wszystkich znaków przez ocenę +. I dla każdego znaku oceniana jest liczba całkowita wartości znaku i operacja liczby na znak mniej niż ).

Przykłady

XX{_2$+}I*]N*

jest przetłumaczony na:

'))))))))))))))))))))))))))))))))))))))))))))))))'))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~'))))))))))')))~')))))))))))'))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~')))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))')))~'))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))')))~'))))))))))))))))))))))))))))))))))))))')))~'))')))~~

i

q{[{_'(>{'(-')*''\+}{is'c+T}?}%{"+"T}*'~]}:T~

jest przetłumaczony na:

')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))')))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~'))))))))))))'))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~'))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))')))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~'))))))))))))'))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~')))))')))~')))))))))))')))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~')')))~'))')))~')))))))))))')))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~')))))))))))')))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~'))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))')))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))')))~'))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))')))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))'))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~')))')))~')))))))))))'))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~'))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~'))')))~')))))))))))')))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~')))~'))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))')))~')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~'))))))))))))))))))')))~'))))))))))))))))))))))))))))))))))))))))))))')))~'))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))')))~~
jimmy23013
źródło
4

APL (wynik: 10)

'⍎⎕AV[',(⊃,/{'(⍴',(⍵/'⍬'),')'}¨⎕AV⍳⍞),']'

Znaki użyte w kodowaniu: ⍎⎕AV[(⍴⍬)]

Program APL do kodowania musi ograniczać się do zestawu znaków APL i nie może używać żadnego dodatkowego kodu Unicode.

Kodowanie dla programu 42(który wysyła odpowiedź na Życie, Wszechświat i Wszystko):

⍎⎕AV[(⍴⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬)(⍴⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬⍬)]

Jak to działa: jest pustą listą, ⍬⍬⍬⍬dlatego jest listą czterech pustych list, ⍴⍬⍬⍬⍬jest długością listy czterech pustych list, czyli czterech. Dyadic jest przekształcany, więc instrukcje długości list muszą być owinięte w nawiasach, dając ostateczne kodowanie znaku numer cztery jako (⍴⍬⍬⍬⍬).

Liczby te są następnie sprawdzane, w ⎕AVktórym jest zestaw znaków, i wykonuje wynikowy ciąg.

(Na pierwszy rzut oka wygląda na to, że wynik mógłby zostać podniesiony do 9 za pomocą ⎕UCSzamiast ⎕AVi zapisywania [], ale to nie działa, ponieważ (⍴⍬)(⍴⍬) jest to lista list skalarów, tj. [[1], [1]]Zamiast tych, [1, 1]które byłyby wymagane, i obejście tego wymagałoby przeplatania zakodowanych wartości przecinkami, co doprowadziłoby do powrotu wyniku do 10.)

marinus
źródło
2

RProgN , 7 odrębnych znaków, niekonkurujące

RProgN jest nowszy niż to pytanie.

' do.Lc

Konwertuj program na 'oooo...' L c 'ooooo...' L c 'oo...' L c . . . do, gdzie każdy „oo ...” reprezentuje kod znakowy w o, otoczony apostrofami, aby utworzyć z nich ciąg znaków. Lc następnie przekształca je w stałą liczbową. Po umieszczeniu wszystkich ciągów na stosie, łańcuch o wartości równej liczbie znaków w zakodowanym ciągu minus jeden odbudowuje zakodowany ciąg i wykonuje go.

Enkoder, również napisany w RProgN.

'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo' L c 'ooooooooooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooo' L c 'oooooooooooooooooooooooooooooooooooooooooooooo' L c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . do

Wypróbuj online!

ATaco
źródło
1

Ruby -> Ruby, 8

#Convert a number from 0 to 255 to the form "111+11+11+1+1+1"
def byte_to_ones(byte)
  output = []
  ones = [111,11,1]
  ones.each do |one|
    while byte>=one
      byte-=one
      output<<one
    end
  end
  output.join('+')
end

bytes = $<.each_byte.map { |byte| byte_to_ones(byte) }

puts "eval''<<#{bytes.join('<<')}"

Próba:

puts "Hello, world!" => eval''<<111+1<<111+1+1+1+1+1+1<<111+1+1+1+1+1<<111+1+1+1+1<<11+11+1+1+1+1+1+1+1+1+1+1<<11+11+11+1<<11+11+11+11+11+11+1+1+1+1+1+1<<11+11+11+11+11+11+11+11+11+1+1<<11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1<<11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1<<111<<11+11+11+11<<11+11+1+1+1+1+1+1+1+1+1+1<<111+1+1+1+1+1+1+1+1<<111<<111+1+1+1<<11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1<<11+11+11+11+11+11+11+11+11+1<<11+11+11<<11+11+11+1<<1+1+1+1+1+1+1+1+1+1

Implementuje rozwiązanie Ruby podane w powiązanym problemie i zastępuje we / wy eval.

histocrat
źródło
Zostało już powiązane z treścią pytania; Nie używałem twojego komentarza. Przeniesienie stamtąd odpowiedzi nie jest trywialne, ponieważ trzeba je poddać inżynierii wstecznej.
histocrat
1
Brakowało mi odniesienia do tego pytania w treści pytania. Nadal nie sądzę, że to bardzo interesujące, aby po prostu przekształcić z niego odpowiedzi, ale wycofuję mój poprzedni komentarz z przeprosinami.
Peter Taylor
0

05AB1E , 8 różnych bajtów (niekonkurujące)

žĆISk'>×€"žĆ0ÿè"J…J.V«?

Niekonkurencyjne, ponieważ ta wersja 05AB1E została wydana w połowie 2018 r. (A pierwsza wersja starszej wersji 05AB1E została wydana w grudniu 2015 r., Chociaż i tak ta wersja nie miała wbudowanego žĆ).

Wypróbuj online.

Wyjaśnienie:

žĆ        # Push the 05AB1E code-page
  IS      # Push the input, and convert it to a list of characters
    k     # Get the index of each character in the codepage-string
     '>× '# Convert each index to a string of that many repeated ">"-characters
         # For each ">"-string:
 "žĆ0ÿè"  #  Map it to the string "žĆ0ÿè",
          #  where the `ÿ` is automatically filled with the ">"-string
J         # Join these strings together
 J.V«    # And append "J.V" at the end
      ?   # After which we output the string without trailing newline

Spowoduje to utworzenie programu z 8 odrębnymi bajtami žĆ0>èJ.Vw następującym formacie:

Wielokrotność žĆ0>...>èdla każdego znaku programu, który wprowadzamy (gdzie nie >...>ma między nimi, a maksymalnie 256 >):

  • žĆ: Naciśnij stronę kodową 05AB1E
  • 0: Naciśnij a 0
  • Pewna ilość >(potencjalnie żadna, maksymalnie 256), która zwiększa się o 1
  • è: Zindeksuj tę liczbę całkowitą do ciągu strony kodowej

I potem:

  • J: Połącz te indeksowane znaki na stosie razem bez separatora
  • .V: I oceń ten ciąg jako kod 05AB1E
  • (po czym wynik jest dorozumiany)

Wypróbuj taki program dla ( będzie naciskać małe litery i palindromizować je).

Kevin Cruijssen
źródło