Time Capsule String 2016: Jak wszechstronny jest twój język?


71

Mniej więcej rok temu, 31 grudnia 2015 roku, wpadłem na pomysł, że:

Powinniśmy zrobić sznur kapsułki czasu. Każdy może dodać jedną postać, a przez kolejne nowe lata zobaczymy, kto może stworzyć najlepszy program ze wszystkich postaci z istniejącymi wówczas esolangami.

Klamka łaskawie zebrała postacie ze społeczności PPCG i zapewniła im bezpieczeństwo przez rok.

74 osób uczestniczyło więc mamy spiffing 74 druku ASCII postaci do zabawy!

Oto 74 znaki ciągu kapsuły czasowej 2016 w kolejności, w jakiej zostały przesłane:

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Oto 74 znaki ciągu kapsuły czasowej 2016 w kolejności ASCII (uwaga wiodąca):

 !!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

To nie jest dużo do pracy, ale tutaj lubimy wyzwania.

Wyzwanie

Aby określić, który język jest „najlepszy” za pomocą ciągu kapsuły czasowej, będziemy mieli 6 (na 201 6 ) wyzwań, które zwiększają trudność, przy czym w każdym z nich należy użyć podzbioru 74 znaków kapsuły czasu.

Posiadanie 6 różnych wyzwań pomaga konkurować większej liczbie języków, ale tylko najlepsze języki będą w stanie odpowiedzieć na wszystkie z nich i uzyskać wysoką ocenę.

Punktacja:

  • Każde wyzwanie będzie oceniane od 0 do 74 w zależności od liczby użytych postaci.
  • Wyższe wyniki są lepsze.
  • Jeśli Twój język nie może ukończyć wyzwania, Twój wynik za to wyzwanie wynosi 0.
  • Każdy niepusty podzbiór wyzwań może zostać ukończony.
  • Twój końcowy wynik to suma wyników ze wszystkich 6 wyzwań.
  • Najlepszy możliwy wynik końcowy to 6 × 74 lub 444 .

Wyzwania

1. Uruchom

Jeśli kod języka nie może działać w pierwszej kolejności, nie będzie w stanie nic zrobić.

Napisz najdłuższy możliwy program (używając tylko 74 znaków kapsuły czasu, pamiętaj), który działa / wykonuje się bez błędów kompilacji i czasu wykonywania.

Nie ma znaczenia, co robi program, nie ma znaczenia, czy ma wejście / wyjście lub wchodzi w nieskończoną pętlę, liczy się tylko to, że działa bez błędów. (Ostrzeżenia są w porządku, podobnie jak błędy spowodowane złym wprowadzeniem użytkownika).

Komentarze są dozwolone, więc może to być tak proste jak

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

w Pythonie za wynik 74.

(Nie bój się odpowiedzieć, jeśli jest to jedyne wyzwanie, które Twój język może wykonać, ale nie oczekuj też dużej liczby głosów).

Wynik = długość programu (dłuższy program jest lepszy)

2. I / O

Język, który nie ma formy wejścia lub wyjścia, jest prawie tak samo bezużyteczny, jak język, który nie może działać.

Biorąc pod uwagę drukowalny znak ASCII od !(0x33) do }(0x7D) włącznie, wypisz drukowalny znak ASCII przed nim i po nim.

Dane wyjściowe mogą mieć długość dwóch łańcuchów lub list albo znaki oddzielone spacją lub znakiem nowej linii.

Na przykład, jeśli dane wejściowe to }dane wyjściowe to |~lub ["|", "~"]lub | ~lub |\n~.

Podobnie, "jest wyjściem dla !i ACjest wyjściem dla B.

Wynik = 74 - długość programu (krótszy program jest lepszy)

3. Rozgałęzienie

Warunki warunkowe są często wymogiem kompletności Turinga , co często jest wymogiem przydatności języka.

Biorąc pod uwagę dodatnią liczbę całkowitą, jeśli kończy się cyframi dziesiętnymi, 16zmień na 6a 7i wyślij wynik; w przeciwnym razie wyprowadzaj dane wejściowe bez zmian. Jeśli chcesz, możesz użyć ciągów wejściowych / wyjściowych.

Przykłady:

2016 -> 2017
16 -> 17
116 -> 117
1616 -> 1617
6 -> 6
15 -> 15
17 -> 17
106 -> 106
2106 -> 2106

Wynik = 74 - długość programu (krótszy program jest lepszy)

4. Pętla

Język, który nie potrafi wykonywać pętli, odradza się powtarzający się kod, tak żmudny, że musisz na chwilę przerwać programowanie.

Biorąc pod uwagę dodatnią liczbę całkowitą, wyślij kwadrat ASCII-art o tej długości boku wypełniony wzorem koncentrycznych mniejszych kwadratów, który na przemian między dowolnymi dwoma wyraźnymi drukowalnymi znakami ASCII . Nie muszą to być te same dwa znaki dla różnych danych wejściowych.

Na przykład:

1    <- input
X    <- output

2
XX
XX

3
XXX
X-X
XXX

4
XXXX
X--X
X--X
XXXX

5
YYYYY
Y...Y
Y.Y.Y
Y...Y
YYYYY

6
XXXXXX
X----X
X-XX-X
X-XX-X
X----X
XXXXXX

7
ZZZZZZZ
Z-----Z
Z-ZZZ-Z
Z-Z-Z-Z
Z-ZZZ-Z
Z-----Z
ZZZZZZZ

Wynik = 74 - długość programu (krótszy program jest lepszy)

5. Matematyka

Język, który nie jest dobry z liczbami i matematyką, może równie dobrze być dla kierunków humanistycznych.

Nie przyjmuj danych wejściowych, ale wyślij 72 dzielniki liczb całkowitych z 2016 r. , Dodatnie i ujemne, w dowolnej kolejności. Dane wyjściowe można sformatować jako ciąg lub listę w rozsądny sposób.

Przykład:

-1, -2, -3, -4, -6, -7, -8, -9, -12, -14, -16, -18, -21, -24, -28, -32, -36, -42, -48, -56, -63, -72, -84, -96, -112, -126, -144, -168, -224, -252, -288, -336, -504, -672, -1008, -2016, 1, 2, 3, 4, 6, 7, 8, 9, 12, 14, 16, 18, 21, 24, 28, 32, 36, 42, 48, 56, 63, 72, 84, 96, 112, 126, 144, 168, 224, 252, 288, 336, 504, 672, 1008, 2016

Wynik = 74 - długość programu (krótszy program jest lepszy)

6. Ezoteryzm

(Nie, nie to .) My w PPCG lubimy nasze ezoteryczne rzeczy , a quines jest tego dobrym przykładem.

Napisz najdłuższy możliwy quine, zgodnie ze zwykłymi zasadami quine . Quine to program, który nie pobiera żadnych danych wejściowych i wyjściowych.

Wynik = długość programu (dłuższy program jest lepszy)

Szczegółowe zasady

  • W każdym z 6 wyzwań twój program musi być podzbiorem 74 znaków kapsuły czasowej ułożonych w dowolny sposób. Może to być pusty podzbiór lub niewłaściwy podzbiór , więc każdy Twój program może mieć tylko 0 i 74 znaki.
  • Pojedynczy znak nowej linii na końcu wejścia / wyjścia / kodu jest w porządku wszędzie, ponieważ niektóre języki tego wymagają lub nie można tego łatwo uniknąć.
  • O ile nie określono inaczej, każde wyzwanie może zostać wykonane jako funkcja lub pełny program zgodnie z naszymi domyślnymi ustawieniami .
  • Wszystkie wyzwania muszą być ukończone w tym samym języku.
  • Musisz użyć języka (lub wersji języka) utworzonego przed 2017 r. W dowolnym miejscu na Ziemi .
  • Każdy może odpowiedzieć, niezależnie od tego, czy dodałeś postać do kapsuły czasu, czy nie.

Możesz używać postaci z kapsuły czasu 2016 w swoich własnych wyzwaniach.


4
Yay: D wyzwanie, w którym JavaScript może potencjalnie przodować!
Downgoat

1
Pokój rozmów dyskusyjnych do współpracy przy niektórych rozwiązaniach.
user48538

6
całkiem pewne, że 6×74 or 444nie jest to możliwe, ponieważ oznaczałoby to puste programy, które zachowują się inaczej. dlatego 442 jest faktycznym minimum, ponieważ oznacza to, że dwa z 3 programów pobierających dane wejściowe mają w sobie znak
Destructible Lemon

7
Moim językiem jest Java. Tracę domyślnie: P
Weckar E.

2
Zróbmy to jeszcze raz!
ev3commander

Odpowiedzi:


37

Glif , 74 + (74 - 36) = 112

1. Uruchom (74 bajty)

!!#%QTQT@=A@$!!$)()*!&))+...1449:@HILOQZ\\^`````````eefmpx|||{~~~~~~y~|~ ~

2. IO (36 bajtów)

!!!#!$!$4419TAHT\ee\OQQQ))*+)..)|~~~

Wyjaśnienie

Glif wydawał się dość dobrym wyborem do tego wyzwania, ponieważ nie dba o to, jakie postacie zostaną użyte. Zamiast tego patrzy na grupy czterech znaków i wybiera polecenie na podstawie wzorca powtarzania tych czterech znaków. Ponieważ istnieje wiele duplikatów w ciągu kapsuły czasowej, jesteśmy dość elastyczni w programach, które możemy pisać, z wyjątkiem tego, że ograniczamy się do programów składających się z 18 poleceń (co nie jest dużo w Glypho). Chociaż pozwoliło mi to dość łatwo rozwiązać dwa pierwsze problemy, wątpię, aby Glypho mógł obsłużyć pozostałe z tak małą liczbą postaci.

Przetestowałem je przy użyciu interpretera Java pobranego z 2006-06-23 na maszynie , która używa nieco innego mapowania poleceń:

0000 n
0001 i
0010 >
0011 \
0012 1
0100 <
0101 d
0102 [
0110 +
0111 o
0112 *
0120 -
0121 ]
0122 !
0123 e

Program Run tłumaczy się na:

1d-+[...]

Gdzie ...są jakieś śmieci, których nie zawracałem sobie głowy tłumaczeniem.

1      Push 1.
d      Duplicate.
-      Turn into -1.
+      Add. Gives 0.
[...]  Skip the rest because the top of the stack is zero.

Program IO przekłada się na:

id1-+o1+o

Oto, co to robi:

i   Read a character.
d   Duplicate.
1   Push 1.
-   Turn into -1.
+   Add to character, i.e. decrement it.
o   Output it.
1   Push another 1.
+   Add to character, i.e. increment it.
o   Output it.

24

CJam, 74 + (74–14) + (74–26) = 182 punktów

1. Uruchom (74 bajty)

e# !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````efmpxy{||||~~~~~~~~~

Przejście e#na przód komentuje całą linię.

2. I / O (14 bajtów)

9`)ZH*+~):Q(Q)

Dennis zapisał 8 bajtów.

Wyjaśnienie:

9`                   Push "9".
  )                  Extract character '9'.
   ZH*               Push 3 * 17 = 51.
      +              Add to get character 'l'.
       ~             Eval as CJam code. Command l reads a line.
        )            Extract the only character from the input line
         :Q(         Assign to Q and decrement
            Q)       Push Q and increment

3. Rozgałęzienie (26 bajtów)

4`)4Z|`I!`|~^~~T$AT$*%H(=+

Wyjaśnienie:

4`)                            Push character '4'
   4Z|`                        Push 4 | 3 = 7, stringify
       I!`                     Push !18 = 0, stringify
          |~                   Setwise or and eval to get 70
            ^                  XOR to get 'r'
             ~                 Eval to read input
              ~                Eval the input as CJam code to turn
                               it into an integer
               T$              Duplicate it
                 A             Push 10
                  T$*          Duplicate that and multiply → 100
                     %         Mod the copy by 100
                      H(=      Compare to 17 - 1 = 16
                         +     Add the result (1 or 0) to the original

Zobaczę później. ( EDYCJA : Wątpię, czy są możliwe, bez literałów blokowych lub łańcuchowych… może matematyczne?)


Do # 2 możesz użyć 9`)ZH*+~):Q(Q).
Dennis

11

J, wynik 71 + (74–19) = 126

Zadanie 1, długość 71

AHILO=:( |T`T`Z`e`e`f`m`p`x`y|.~~%~@{|~^|Q@Q@Q+.*.449!~!~!~!!#$$&1\\~~)

To definiuje czasownik AHILOjako wnętrze. Nie używany:

)))

Nie sądzę, że istnieje sposób na przedłużenie tego czasu.

Zadanie 3, długość 19

+($#~$~4)=1e4|&%:*~

Sposób na wykonanie tego zadania bez ograniczeń +16=100|]brzmi następująco:

        ]  Input
    100|   mod 100
 16=       equals 16? (Evaluates to 1 or 0)
+          Add to input.

Mamy +, =i kilka kopii lub |w naszej dyspozycji, a to łatwo obejść ], ale numery są bardziej problematyczne. Oto pierwsza część, która oblicza wejście modulo 100:

1e4|&%:*~
       *~  Input squared (multiplied with itself).
1e4        The number 10000.
   |       Perform modulo
    &      on
     %:    their square roots.

Po tym, skończmy z tym, stwórzmy liczbę 16. Najprostszym sposobem jest *~4(4 razy pomnożone przez siebie), ale już użyliśmy, *więc jest to zabronione. Zamiast tego dokonamy pewnych manipulacji tablicowych.

($#~$~4)
    $~4   Reshape 4 to shape 4, resulting in the array 4 4 4 4.
  #~      Replicate wrt itself: replace each 4 by four 4s.
 $        Take length.

Praca

2)

Jest to zdecydowanie niemożliwe. Jedyne sposoby manipulowania wartości znaków są a.a u:, a my mamy dostęp do żadnego z nich.

Jeśli moglibyśmy użyć azamiast, powiedzmy, Ato byłoby to rozwiązanie:

Q{~(*^.4%9 1)+I.~&Q=:a.

Najtrudniejszą częścią tego, aby to zadziałało, było uzyskanie liczby -1.

Q{~(*^.4%9 1)+I.~&Q=:a.
                     a.  The array of all bytes.
                  Q=:    Bind it to Q
              I.~&       and find the input's index in it.
   (        )+           Add the following array:
    *                    Signum of
     ^.                  logarithm of
       4%                4 divided by
         9 1             the array 9 1.
                         This evaluates to -1 1.
Q{~                      Index back into Q.

4

(*.1:"|~@+.)

Generuje to kształt łuski, ale nie mogę znaleźć sposobu na generowanie postaci. Niestety.

5

Wprawdzie wydaje się to najłatwiejszym zadaniem do wykonania w J. Jednak bez i.tego będzie to dość trudne.

6

Jest to prawdopodobnie niemożliwe bez fałszywego quinu 449lub czegoś takiego, ponieważ ciąg kapsułek nie zawiera cudzysłowów ani żadnego innego sposobu wytwarzania ciągów J.


Dla zadania 2, Q{~1+I.~&Q=:a.daje kolejny znak: wiązania alfabetu a.do Q, znaleźć indeks wejściu w nią z I., dodać jeden i indeks do Q. Spróbuj. Jedynym pozostałym problemem jest produkowanie -1...
Zgarb

Ponadto, zadanie 3 mogą być wykonane bez funkcji łańcuchowych: +16=100&|. Musisz jakoś wyprodukować 16 i 100.
Zgarb

@Zgarb (1) Tak ... (2) Och! To super! Hmmm nie powinno być zbyt trudne
Conor O'Brien

Ha, myślę, że mam 3: +($@#~@$~4)=1e4|&%:*~To było bardzo irytujące, ponieważ mamy tylko jedno (&=:+*i dwa 4.
Zgarb

Aaand tutaj 2: Q{~(*^.4%9 1)+I.~&Q=:a.Zrozumiałem, że logarytm ^.podaje liczby ujemne dla danych wejściowych ściśle między 0 a 1, i mamy %do produkcji ułamków i *do uzyskania wyników do -1 i 1.
Zgarb

8

PowerShell - łączny wynik: 74

1. Run - Wynik: 74

#~= `TeQ.)`~H|$QL4yA)\*`!^O$1)!Z`!`~|\`&T@!x+e(f|Q`.|!4%.{~`:~~)m@~`@p~I9~

Ponieważ jest to niezwykle trudne w programie PowerShell (o ile wiem, każda możliwa metoda uzyskania danych wejściowych jest niemożliwa), przynajmniej zdecydowałem o losowaniu pierwszego wyzwania, więc nie wszyscy kopiujemy przykład bezpośrednio z postu.

Oto losowy generator odpowiedzi 1 wyzwanie (dla języków, w których #jest komentarz):

'#'+$(-join([char[]]' !!!!!$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~'|Get-Random -Count 73))

Wypróbuj online!


Myślę, że masz rację. Najbliższe, jakie moglibyśmy uzyskać, $^to „pierwszy token poprzedniej linii w sesji”, który byłby bardzo ograniczony i bardzo prawdopodobne, że będzie to poważne zakłócenie standardowych reguł we / wy.
AdmBorkBork

@ TimmyD tak, i tak $^jest pusty w nowej sesji.
briantist

8

memy , wynik ( 62 65 + 70) 135

1: Uruchom

Usunąłem wszystkie backticks ( `) i operatory matematyczne. Konfliktowali, ponieważ nie było wystarczającej liczby, aby zadowolić każdego operatora jednoargumentowego i binarnego. Zostawiłem trochę, co daje +3 bajty . Wynikowy program:

 !!!!!#$$%&())))...+1^4*49:=@@@AHILOQQQTTZ\\eefmpxy{||||~~~~~~~~~

Nie mam pojęcia, dlaczego i jak to działało. Przynajmniej nie zgłasza żadnego wyjątku czasu wykonywania w języku C #, a zatem nie ulega awarii.

6: Quine

Wiesz, gdyby gdzieś te 74 znaki -zawierały małe lub małe litery q, byłoby to zbyt łatwe. Przynajmniej cieszę się z tego Ioperatora.

1/4I

Ten kod nie jest do końca oczywisty. Oto wyjaśnienie:

1    Set object to 1 (1)
/4   Divide by 4     (0.25)
I    Set object to a fraction string. (1/4)

Ciągi ułamkowe (np. 1/4) Są wyświetlane z I na końcu, aby dokładnie to wskazać. IOperator jest zwykle bezużyteczne, dodałem go za pomocą innych środków, ale hej, to działa w ten sposób!

Powyższy kod jest nieprawidłowy. Głupie, że nie widziałem, aby 74 znaki nie zawierały jednego operatora podziału, forwardslash ( /). Wpadłem na coś innego:

True

Wyjaśnienie:

T    Set object to "true" (bool value)
rue  None of these are valid tokens, so they don't get interpreted.

Dane wyjściowe True(z powodu sposobu, w jaki C # obsługuje Boolean.ToString()wielkie i nie małe litery). Nie jestem pewien, czy to jest właściwe quine, tymczasem wciąż łamię sobie głowę za prawidłowy, naprawdę właściwy i intuicyjny.

Mógłby również rozwiązać problemy We / Wy i matematyczne, ale brakuje mi określonych żetonów (znaków), które nie są zawarte w 74 znakach.


8

Brainfuck, 74 bajty

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Po prostu musiałem.

Wyjaśnienie:

Każda postać, która nie jest prawidłową postacią Brainfuck, jest traktowana jako komentarz. Jedyny kod, który faktycznie uruchamia się, to:

.+..

Nie powoduje to wydruku, ponieważ ani 0, ani 1 nie są znakami drukowalnymi w ASCII. Nie powoduje to jednak błędu, więc z powodzeniem wykonujemy pierwsze wyzwanie.


3
W rzeczywistości produkuje dane wyjściowe. Wytwarza te postacie. Mogą nie być „drukowalne” (czytaj: widoczne), ale mimo to są wysyłane na standardowe wyjście.
mbomb007

7

Mathematica, ocena 62

Byłbym zaskoczony, gdyby ktokolwiek mógł zmusić wyzwania 2-6 do pracy w Mathematica. Oto najlepsze, co zrobiłem z wyzwaniem 1:

A:=1.`!#&@(4`+4.`*9.`^$$H~I~L~O~Q~Q~Q~T~T||Z||e@@efmpxy%)!!!!

Definiuje całkiem głupią funkcję Ao stałej wartości. 12 nieużywanych znaków to:

)))\\`````{~

6

Oktawa, wynik 74

1. Uruchom

x =@(AHILOQQQTTZeefmpy)+.1||!!!!!~~~~~~~~~4.^.4||9%#$$)))*@@\`````````{\&:

50 z tych znaków jest częścią funkcji, a pozostałe 24 nie.

Co to robi:

x =@(AHILOQQQTTZeefmpy)tworzy funkcję, xktóra może przyjmować zmienną AHILOQQQTTZeefmpyjako dane wejściowe.

Aby zrozumieć resztę:

a||bwywołuje funkcję all()na obu ai b. Jeśli jeden lub oba z nich zwrócą wartość true, ||operator zwróci wartość true.

!ai ~aoznacza to samo tutaj, oboje są not(a).

a.^b jest mocą elementarną (a(1)^b(1), a(2)^b(2) ...)

Dalsze wyjaśnienia

Będę skracał każdy z tych kroków:

4.^.4||9  % This is 4 raised to the power of .4||9
          % .4||9 is true, since both .4 and 9 are true
          % true is evaluated to 1 when used in an expression
...       % 4 raised to the power of 1 is simply 4.
4         % The above expression simplified

I:

!!!!!~~~~~~~~~4  % ! and ~ are the not() operator, so this is equivalent to:
not(not(not(not(not(not(not(not(not(not(not(not(not(not(4))))))))))))))

Istnieje parzysta liczba not, więc jest to odpowiednik tego, not(not(4))który jest truelub 1.

+.1||1      % This is equivalent to all(+.1) | all(1), which returns true

Reszta jest komentowana.


6

*> <> , łączny wynik = 74

1. Uruchom, zdobądź 74

f:4%*e+e14=p!Q H@~^)$.`~A|Q)~`\ZI~O.~@``#|9@)T\T`(!``|`~!y!`)Q~$x.|m~~&!L{

Wypróbuj tutaj!

To było niezwykle trudne bez ;postaci. Właściwie myślałem, że będzie to niemożliwe przez kilka chwil, dopóki nie zobaczyłem %, że w zasadzie zrezygnowałem.

Jest to również prawidłowy program> <>.

Wyjaśnione (pominięto nieistotne części)

f:4%*e+e14=p!Q 

f:               copy 15
  4%             pop 15, push 15%4 (3)
    *            pop 15 and 3, push 15*3 (45)
     e+          pop 45, push 45+14 (59, ascii ";")
       e         push 14
        14=      push 0
           p     replace coord (14, 0) with ";"
            !Q   skip Q (this is just filler)
              ;  end execution

Wyzwania

Mogę spróbować innych wyzwań ... byłyby bardzo trudne i mogą wymagać dziwnego naginania zasad, ale swobodne korzystanie z |luster i !trampolin powinno umożliwić przynajmniej jedno wyzwanie.

Wyzwania te są szczególnie trudne, ponieważ nie wolno nam wyprowadzać żadnych wyników za pomocą *> <> ( oi n), a nawet wywołań funkcji ( C), zwrotów funkcji ( R) lub terminatorów programów ( ;). Mimo że brakuje nam również idanych wejściowych, nadal możemy umieścić dane wejściowe na stosie, co jest plusem. Kolejnym plusem jest to, że otrzymujemy pojedynczą pinstrukcję, która pozwala nam zastąpić instrukcję w pudełku kodowym. Może być to możliwe do wielokrotnego użycia (jeszcze nie wymyślono praktycznego sposobu), co sprawiłoby, że inne programy wydawałyby się bardziej możliwe (ponieważ bylibyśmy w stanie wygenerować dwie lub więcej instrukcji).


5

Haskell, ocena 63

1. Uruchom:

(!!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~)fmpxyAHILOQQQTTZ e=14`e`49

Nie są używane )))```````{. Komentarze w Haskell są --lub {- ... -}, więc nie ma łatwej wersji z wszystkimi komentarzami.

Ten kod definiuje operator infix, !!!!!#$$%&*+...:@@@\^||||~~~~~~~~~który przyjmuje dwa argumenty:

  1. fmpxyAHILOQQQTTZ który jest ignorowany i dlatego może być dowolnego typu
  2. e, która musi być funkcją przyjmującą dwie liczby

W funkcji ciało ejest następnie stosowane do 14 i 49, używając `notacji -infix.

Przykład użycia:

Prelude> () !!!!!#$$%&*+...:@@@\\^||||~~~~~~~~~ (*)
686

Operator jest stosowany do ()pustej krotki i (*)operatora mnożenia, więc 14*49 = 686jest obliczany.

Wypróbuj online!

Inne wyzwania

Wątpię, czy jakiekolwiek inne wyzwanie jest możliwe, szczególnie ze względu na brak możliwych nazw zmiennych, które mogą pojawić się dwukrotnie, co jest tylko e(lub coś w tym rodzaju eQT), ponieważ nazwy zmiennych nie mogą zaczynać się wielką literą. Oczywiście posiadanie tylko jednego =nie pomaga.


5

Pyth, na razie 131 (ukończone 2 wyzwania)

1. Uruchom, 74

# `````````!!!)!)!)*$AOeIefLmpxQ|Q|y|Q|~~~~~~~~~()${+%&\=@@@^\:.1.4.49TTZH

Ten program nie pobiera danych wejściowych i nie tworzy danych wyjściowych.

Ten program używa $$, co pozwala na wykonanie dowolnego kodu, dlatego jest zbanowany online, więc ten program działa online. Oto dane wyjściowe kompilacji, dzięki czemu możesz zobaczyć, co faktycznie zostanie uruchomione:

while True:
 try:
  (repr(repr(repr(repr(repr(repr(repr(repr(repr(Pnot(Pnot(Pnot()))))))))))))
  imp_print(Pnot())
  imp_print(Pnot())
  imp_print(times(AOeIefLmpxQ|Q|y|Q|~~~~~~~~~(),uniquify(plus(mod(("=" and lookup(lookup(lookup(Ppow(":",.1),.4),.49),T)),T),Z))))
  imp_print(H)
 except Exception:
  break

Pisanie programu z dowolnymi znakami, które nie zawierają błędów w Pyth, jest dość trudne. Postawiłem sobie dodatkowe wyzwanie polegające na wymaganiu, aby program działał również bez potrzeby wprowadzania danych przez użytkownika.

Pierwszym krokiem jest #zjedzenie wszystkich błędów. Następnie musimy uniknąć błędów spowodowanych przez ~, Ii L, z których każdy ma swoje własne dane. Osiąga się to poprzez umieszczenie ich wewnątrz $$, co osadza je w kompilacji wyjściowej, a tym samym poddaje je regułom kompilacji Pythona, a nie Pythowi. Wreszcie, aby uniknąć wprowadzania danych przez użytkownika, różne znaczniki arity 0 (Zmienne i podobne) są umieszczane na końcu, a Qs są przenoszone do $$bloku.

2. IO

Będzie to niezwykle trudne, jeśli to w ogóle możliwe. Żadna z funkcji Pytha, które tworzą dowolne ciągi znaków lub znaki, nie jest obecna, z wyjątkiem tego .f, że naprawdę źle wykonuje tworzenie dowolnych znaków.

3. Rozgałęzienie: 74–17 = 57

|&x%Q*TTye|LZ9Q+1

Wypróbuj online

Odpowiednikiem programu Pyth byłby:

?n%Q100 16Q+1

Ten kod pobiera mod wejściowy 100, porównuje go z 16, a następnie używa trójskładnika, aby wybrać między wejściem a wejściem plus jeden. Z powodu ograniczeń postaci dokonałem pewnych zmian:

  • Zamiast ?, trójskładnikowego, kiedyś |&, orpotem and, który ma taką samą funkcjonalność, oprócz tego, że łamie jeśli wejście jest zero, ale ponieważ mamy zagwarantowane wejście dodatnia, to w porządku. (Można to naprawić bez dodatkowych znaków, ale w ten sposób jest to prostsze).

  • Zamiast bezpośrednio porównywać te dwie liczby, biorę ich XOR x, który wynosi zero, jeśli i tylko jeśli są równe, zgodnie z życzeniem.

  • Zamiast pisać 100bezpośrednio, generuję go *TT, ponieważ Tjest inicjowany 10.

  • Zamiast pisać 16bezpośrednio, generuję to za pomocą ye|LZ9. |LZzasadniczo działa jako funkcja zakresu, więc |LZ9daje [0, 1, 2, 3, 4, 5, 6, 7, 8]. ebierze ostatni element listy, dając 8. ypodwaja go, dając 16zgodnie z życzeniem. Z dodatkowym +lub dodatkowym *mogę uratować postać, ale oba są bardziej przydatne gdzie indziej.

Więcej w przyszłości!


3

Ruby - Ocena: 74

1. Uruchom

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Podjęto wyzwanie.


1
To samo dotyczy Python
Daniel

3

JavaScript (ES6), wynik = 74

1. Uruchom, 74 bajty

Z=` !!!!!#$$%())))...1449:@@@\AHILOQQQTT^\`eefmpxy{||||~~~~~~~~~`*``+``&``

6. Ezoteryzm (nieważny)

Dla przypomnienia, moim sugerowanym quine było:

1.4e+49

które okazały się nieprawidłowe, jak omówiono w komentarzach poniżej.


Ten quine jest ważny.
wizzwizz4

3
Quine jest niepoprawny. Odpowiednie zasady są powiązane w wyzwaniu. W szczególności żadna quine oparta na pojedynczym literale nie koduje części źródła w innej części źródła. cc @ wizzwizz4
Martin Ender

@MartinEnder W mojej przeglądarce program ten wypisuje kod źródłowy dosłownie. Jest to stwierdzenie, które ocenia się samo. Nie jestem pewien, co mówisz; nie ma innej części źródła.
wizzwizz4

1
@ wizzwizz4 ta społeczność ma więcej wymagań dla quines niż tylko „program drukuje własne źródło”, ponieważ pozwala to na różnego rodzaju rozwiązania oszukiwania, które nie są w duchu quines. Zobacz link.
Martin Ender

1
@ wizzwizz4 z najczęściej głosowanej odpowiedzi „Musi istnieć możliwość zidentyfikowania części programu, która koduje inną część programu. („ Różne ”, co oznacza, że ​​te dwie części pojawiają się w różnych pozycjach.) dla wielkiego dobra wyzwanie (i powiązana odpowiedź) są kilka lat starsze niż powiązany meta post.
Martin Ender

3

Siatkówka, ocena 74

1. Uruchom, zdobądź 74

)))` !!!!!#$$%&()*.+..1449:=@@@AHILOQQQTTZ\\^````````eefmpxy{||||~~~~~~~~~

Przeniosłem dodatkowe pareny do konfiguracji, aby mogły się zrównoważyć w wyrażeniu regularnym. Przeniosłem się `zaraz po nich i zmieniłem +.na .+.

Wypróbuj online

Inne są prawdopodobnie niemożliwe, ponieważ nie ma nowych linii. Nie ma też -transliteracji ani dklasy znaków cyfr.


3

Pip, wynik 74 + (74–19) = 129

Tyle tylnych chwytów, że nie ma cytatu, pojedynczego lub podwójnego!

Zadanie 1, ocena 74

`` `\``!!!!!`#$$%&())))*+...1449:=@@@ILOQQQTTZ\^efmpx{|||~~~~~~~~~`|`yeAH`

Zasadniczo tylko seria literałów wzorcowych (regex) w backticks, z których ostatni jest drukowany. Ponieważ istnieje nieparzysta liczba backsicków, musimy uciec z ukośnikiem jeden z nich ( `\``). Wypróbuj online , z -wdodaną flagą, aby udowodnić, że nie są generowane żadne ostrzeżenia.

Zadanie 3, wynik 55 (długość 19)

e+!!e%(1.#x.!9)=4*4

Jest to możliwe przy użyciu raczej nieparzystej metody wprowadzania danych - piątego argumentu wiersza poleceń. Wypróbuj online!

                     e is 5th cmdline arg; x is empty string
       1.#x.!9       Concatenate 1, 0 (length of x), and 0 (not 9)
    e%(       )      e mod 100...
               =4*4  ... equals 16?
  !!                 Logically negate twice
e+                   Add to e (+1 if number mod 100 is 16, +0 otherwise)
                     Expression is autoprinted

Inne zadania

Możliwe jest uzyskanie danych wejściowych do zadania 2 tą samą metodą, co zadanie 3 powyżej. Problem polega na konwersji na kod ASCII i powrót do znaku. Pierwsze z nich można wykonać za pomocą A, ale drugie wymaga C, lub ewentualnie indeksowania do PAzmiennej. Konstruowanie i ocena kodu nie jest możliwa bez V. Nie sądzę, że to zadanie jest możliwe.

Zadanie 4 stanowi wyzwanie nawet bez ograniczonego zestawu znaków. Domyślam się, że wymagałoby to list (bez użycia []ograniczników lub RL(lista powtórzeń) i tylko jednej szansy użycia AL(lista dołączeń) - mało prawdopodobne) lub ewentualnie czegoś z CG(siatka współrzędnych) lub MC( współrzędne mapy), oba niedozwolone .

Zadanie 5 jest na granicy możliwości. Pętle byłyby trudne, ponieważ Fani Map nie są możliwe, a zakresów nie można konstruować ,. Z Tchorym może być coś do zrobienia . Przyrost może być x:x+1różny (oczywiście ze zmienną inną niż xjednak). Można użyć kontroli podzielności %. Mimo to nie sądzę, aby było wystarczająco dużo znaków - zwłaszcza powtarzających się liter - aby zrobić wszystko, co trzeba.

Zadanie 6 wygląda zupełnie niemożliwie. Wszystkie znane piny Pip mają "w sobie. Używają również R(zamień), RP(repr) lub V(eval), z których żaden nie jest dostępny.


2

W rzeczywistości wynik (74 + 0 + 0 + 0 + 0 + 0 ) = 74

Tak, ciąg kapsułki będzie działał z Rzeczywistym tak, jak w przypadku Uruchom, ponieważ Faktycznie odrzuca wszelkie błędy, a każdy błąd staje się NOP.

H@~*^)$.~+1A|Q)p~\Z!IQ~e:O.~@#|9@)Tf\eT`=(!|~!y!) Q~$x.4|m4~~&!L{%( Wypróbuj online! )

Będzie jednak generować bałagan rzeczy (ale także raz jego źródło: 3).

Będę jednak pracował nad innymi wyzwaniami.


1
Program quine (miejmy nadzieję) będzie dość prosty, jeśli będziesz mógł zrobić kilka operacji w noops.
wizzwizz4

1
Program Quine nie jest prosty. Nie możesz w ogóle używać Q(ponieważ jest to wbudowana funkcja quining) i nie ma podwójnych cudzysłowów, więc nie możesz wykonywać formatowania ciągów. Pracowałem nad tym wczoraj i jestem całkiem pewien, że inne programy nie są możliwe wyłącznie z 74 znakami.
Mego

I wydaje się, że nie ma kursywy f ... :(
user48538

2

05AB1E - Łączny wynik: 74

1. Uruchom, 74 bajty

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Wszystko, co powoduje błąd, jest pomijane przez 05AB1E. Cały wiersz kodu to NOP.

Wypróbuj online!


2

(nadużywane) PHP, 74 + 74 = 148

H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``#|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

Interpreter PHP po prostu zrzuca kod źródłowy, dopóki nie znajdzie, <?ponieważ brak <każdej permutacji tych znaków jest działającym quine. Wydaje mi się, że nie jest to gorsze niż użycie wbudowanego polecenia quine: P


9
To nie spełnia naszych specyfikacji dla quines, patrz tutaj . Nie koduje się sam (tzn. Nie drukuje się sam, po prostu jest generowany przez kompilator.
Rɪᴋᴇʀ

@ W każdym razie interpreter traktuje każdy znak jak output this chardo momentu, gdy spotka <. Nie mówię, że jest przystosowany do ładunku lub coś, po prostu mówię, że to nie ma różnicy dla języka, który mówi char output the source. Jeśli nie jest to prawidłowa odpowiedź dla części 1, niż jakikolwiek język, który akceptuje dowolne wprowadzanie danych bez błędu, również nie jest poprawną odpowiedzią. Nie sądzę, że jest to bardziej obelżywe niż większość odpowiedzi tutaj.
Christoph

4
@Christoph jest ważny dla części pierwszej, ale nie jest prawidłową quiną według zasad powiązanych w wyzwaniu. Ta społeczność uważa, że ​​quine jest ważne, jeśli można zidentyfikować część źródła, która koduje inną część kodu. W twoim programie każda postać koduje się tylko sama.
Martin Ender

@MartinEnder: #! / Bin / cat był wcześniej uważany za quine.
Joshua

@Joshua rzeczywiście, ale obecnie tak nie jest i kot nie jest uważany za język programowania.
Martin Ender

2

Mathematica, wynik 68

`A: = .1% *. 44y # +. 9 ^` H @ `$ I @` L @ (`$ O ~` Q ~ `Q ~` Q ~ `T ~ T ~ Z ~ e ~ e | f | m | p | x) !!!!! & \

Zwróć uwagę na końcowy znak nowej linii. Nie sądzę, aby jakiekolwiek inne wyzwania można było osiągnąć dzięki Mathematica.


2

Labirynt, ocena 74

AH)
IL)
OQ:
`=!)~`{+4.@ !!!$$%&(*..149@@TTZ\\^```eefmpxy||||~~~~~~~~
`Q#
`Q)
``!

Jestem pewien, że jakikolwiek asortyment tych znaków tworzy prawidłowy program Labiryntu, ale aby uczynić go przynajmniej nieco bardziej interesującym, drukuje 2016cyfra po cyfrze. (Podsumowując: pchnij 2 2na stosie, pop / wydrukuj jeden, przenieś drugi na stos Aux, wydrukuj 0, pchnij 2 1na stosie, pop / print 1, przyrost, bitowe nie, negacja (to ostatnie 1jest 3w tym momencie), zsumuj ze 2stosu Aux, 5 * 10 + 4 = 54, wydrukuj jako wartość ascii, zakończ)

Większość długiej linii jest po prostu ignorowana, ponieważ @kończy działanie programu.

Wyzwania 2, 3 i 4 są niemożliwe, ponieważ żadne z poleceń wejściowych Labiryntu nie jest dostępne ( ,lub ?), a ja nie wymyśliłem niczego dla 5 lub 6.


2

SmileBASIC, 48 punktów

wyzwanie 1:

@LOQQQTTZ A$=H$+@efmy+@9414*!exp(!!.||!!.#||I%):

wyjaśnienie:

@LOQQTTZ 'label
A$= 'set value of A$ (string)
H$ 'string
+@efmy 'adds label, interpreted as string literal
+@9414 'adds label, interpreted as string literal
*!exp( 'multiplies by logical not e^x (= 0)
!!. 'not not 0.0 (= 0)
||!!.# 'or not not 0.0 converted to a float (= 0)
||I% 'or I% (integer variable)
: 'equivalent to a line break, does nothing here

inne:

Żadne polecenia wejścia / wyjścia nie są dostępne, więc pozostałe nie są możliwe.

Nadal nieźle jak na prawdziwy język bez komentarzy.


+1 naprawdę piękna. Zastanawiałem się, jak bym to zrobił i nigdy tego nie dostanę. Co to w ogóle robi?
snail_

1

MATL , łączny wynik 74

1. Uruchom, zdobądź 74

`4.e4 1.$!!!!!T+Zyf9.)AH^ILx@Q@Q@Qm||||~~~~~~~~~:=Tp*O%#$&()))\\````````e{

Wszystko co to %jest rzeczywisty kod. %jest symbolem komentarza, więc znaki po jego prawej stronie są ignorowane.

Program wyświetla wyniki 1bez błędów.

Wypróbuj online!


1

uderzenie, wynik 74

1: Uruchom. Możemy uruchomić wszystkie 74

#H@~*^)$.`~+1A|Q)p~`\Z!IQ~e:O.~@``|9@)Tf\eT`=(!``|`~!y!`) Q~$x.4|m4~~&!L{%

6: Ezoteryzm:

Pusty program to quine w bash.

Bez żadnych białych znaków nie można osiągnąć nic innego na liście. Ergo, mam zwycięski wpis bash.


Uwaga dotycząca zasady: jeśli ktoś wyzwań, które są puste, nie jest prawidłową wygraną i wygrywa, nadal mam zwycięską wejściówkę (bez żadnej wygranej). Z drugiej strony, jeśli tego nie postawię, a zrobi to ktoś inny i wygrają wyzwanie, pokonają mnie. Więc tam zostaje.
Joshua

1

Perl 6 , łączny wynik 74

1. Uruchom, zdobądź 74

my @TOTAL=$!||(e*4...9^e)Z+1~4||!!Q`{fp)))\#\&`~Q!```HI````!~Q:x~~~$~@~@~%

Bez komentarza.
(Po prostu umieszczenie #przodu, aby wszystko było komentarzem, również działa, ale to jest bardziej zabawne.)

Praca

To jest podzbiór języka Perl 6, który używa tylko dozwolonych znaków:

Stałe: e

Wpisz nazwy: IO

Funkcje: exp

Metody:
    na typ IO: .e .f .x
    (... prawdopodobnie więcej.)

Operatorzy: | infix: | prefiks:
    ----------- + ----------------------- + ---------
    numeryczny: | + * + ^ + | + I% | + + ^
    ciąg: | ~ x ~ ^ ~ | ~ I | ~
    boolean: | || ~~ | !
    skrzyżowania: | | & ^ |  
    misc: | =: = Z .. ... |  

składnia:
    literały liczbowe: 1 4 9
    literały łańcuchowe: Q`` Q! ! itp.
    polecenia powłoki: P: x`` P: x! ! itp.
    Niezależnie od gwiazdy: *
    zmienne: my \ $ @ &
    grupowanie: ()
    komentarze: # # `()
    unspace: \

Bezpośrednią przeszkodą w zapobieganiu wyzwaniom 2-6 jest to, że nie ma sposobu na wykonanie operacji wejścia / wyjścia:

  • Jeśli założymy, że istnieje plik o nazwie f, możemy użyć go Q`f`.IO.edo sprawdzenia, czy istnieje, lub Q`f`.IO.xdo sprawdzenia, czy jest wykonywalny. Ale nie możemy tego przeczytać ani z niego napisać.

  • Możemy użyć Q:x` `polecenia powłoki (zakładając, że znajdziemy znaki dla jednego). Ale nie możemy niczego interpolować, więc byłoby to dobre tylko do czytania, a nie pisania.

  • Ponieważ nie ma nawiasu zamykającego, nie możemy utworzyć bloku lambda (np. {1 + $_}), Który automatycznie zwraca wartość ostatniej instrukcji.

  • My mogliśmy użyć gwiazdki dokonać lambda wyrażenia (np 1+*), ale potem możemy wziąć tylko jeden argument, odnoszą się do tego argumentu tylko raz, i są jeszcze bardziej ograniczone w składni / operatorów możemy wykorzystać.


Świetnie zrobione, naprawdę! :)
Dada

0

Lua, wynik 31

1. Uruchom (31 z 74 punktów)

AHILOQQQTTZeefmpxy=1.%4+(4.*9.)

3
Straciłeś miejsce. variable =stuffjest o 1 bajt dłuższy.
devRicher


0

/// , wynik: 146

1. Bieg, wynik: 74

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ\\^`````````eefmpxy{||||~~~~~~~~~

6. Quine, wynik: 72

!!!!!#$$%&())))*+...1449:=@@@AHILOQQQTTZ^`````````eefmpxy{||||~~~~~~~~~

Tak, kiedy w kodzie nie ma żadnych ukośników, to po prostu drukuje się.

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.