Po raz trzeci urok

49

Twoim zadaniem, jeśli chcesz to zaakceptować, jest napisanie programu, który wyświetli dodatnią liczbę całkowitą (większą niż 0). Jeśli kod źródłowy jest zduplikowany, dane wyjściowe muszą pozostać takie same. Problem polega na tym, że jeśli kod źródłowy zostanie wpisany trzy razy (trzykrotnie?), Wynik zostanie pomnożony przez 3.

Zasady

  • Musisz zbudować pełny program . Oznacza to, że wyjście musi zostać wydrukowane do STDOUT.

  • Początkowe źródło musi mieć co najmniej 1 bajt.

  • Obie liczby całkowite muszą znajdować się w bazie 10 (wyprowadzanie ich w jakiejkolwiek innej bazie lub z notacją naukową jest zabronione).

  • Twój program nie może przyjmować danych wejściowych (lub mieć nieużywane, puste dane wejściowe).

  • Wyprowadzanie liczb całkowitych ze spacjami końcowymi / wiodącymi jest dozwolone.

  • Wiodące zera są dozwolone tylko wtedy, gdy liczby cyfr są spójne, np .: 001 - 001 - 003 lub 004 - 004 - 012

  • Nie możesz zakładać nowego wiersza między kopiami swojego źródła.

  • To jest , więc wygrywa najkrótszy (oryginalny) kod w każdym języku !

  • Obowiązują domyślne luki .

Przykład

Powiedzmy, że twój kod źródłowy jest, Abca odpowiadający mu wynik to 4. Jeśli AbcAbczamiast tego napiszę i uruchomię, dane wyjściowe nadal muszą być 4. Jednak jeśli go napiszę AbcAbcAbci uruchomię, dane wyjściowe muszą być 12.


Bezwstydnie skradziony Pochodzi z wyzwania pana Xcodera

przepływ pracy
źródło
Czy nasz kod może czytać własny kod źródłowy?
AdmBorkBork
@AdmBorkBork Zakładam, że tak, ponieważ nie jest to oznaczone jako quine .
Erik the Outgolfer
@AdmBorkBork Tak.
workoverflow
9
Nie sądzę, aby ograniczenie 1-bajtowe było potrzebne, ponieważ nie można byłoby odróżnić niczego od niczego i powtórzyć 3 razy.
maja
1
@ r12 „Abc” jest przykładem dowolnego programu w języku programowania, powiedzmy, że jeśli twój kod to ( int i=1;print i;), to powielony kod ( int i=1;print i;int i=1;print i;) musi generować taki sam numer jak kod oryginalny, a gdy kod jest trzykrotnie powielony na ( int i=1;print i;int i=1;print i;int i=1;print i;), musi pokazywać liczba pomnożona przez 3
przepływ pracy

Odpowiedzi:

21

Wumpus , 6 bajtów

{~)
@O

Wypróbuj online!
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!

Wydruki 1i 3.

Wyjaśnienie

Znalazłem tonę 6-bajtowych rozwiązań metodą brute force, ale żadnego dla 5 bajtów. Nie musi to wcale oznaczać, że nie ma żadnych 5 bajtów, ale prawdopodobnie użyliby dziwnych znaków lub czegoś takiego.

Skończyło się na tym, że wybrałem to rozwiązanie, ponieważ nie drukuje żadnych zer wiodących (większość z nich tak robi) i ma interesujący przepływ kontroli. Zacznijmy od jednego programu:

wprowadź opis zdjęcia tutaj

Wykonany kod to:

{~)O@

{   Turn the IP left by 60°.
~   Swap two implicit zeros on the stack, does nothing.
)   Increment the top zero to 1.
O   Print it.
@   Terminate the program.

Wystarczająco łatwe. Teraz podwójny program. Ponieważ pierwsza linia zostaje dołączona do drugiej linii, siatka rozciąga się na szerokość 5 (i wysokość 3), co znacznie zmienia przepływ sterowania:

wprowadź opis zdjęcia tutaj

IP obchodzi tę pętlę dokładnie raz, więc wykonany kod to:

{~){~)){~O@

{~) As before, we end up with a 1 on top of the stack.
{   Turn left by 60° again.
~   Swap the 1 with the 0 underneath.
))  Increment the zero to 2.
{   Turn left by 60° again.
~   Swap the 2 with the 1 underneath.
O   Print the 1.
@   Terminate the program.

Wreszcie program trzykrotnie jest dość podobny do programu podwójnego, ale otrzymujemy kilka ważnych poleceń w tym trzecim wierszu:

wprowadź opis zdjęcia tutaj

Wykonany kod to:

{~){~)){~~)O@

{~){~)){~
    As before. We end up with a 1 on top of the stack and a 2 underneath.
~   Swap the 1 with the 2 underneath.
)   Increment the 2 to a 3.
O   Print the 3.
@   Terminate the program.
Martin Ender
źródło
1
myślę, że jestem zakochany w tym języku.
konkwistador
11

Łuska , 5 bajtów

KΣK+1

Wypróbuj online!

Powtarzane dwa razy!

Powtarzane trzy razy!

Wyjaśnienie

Trudno jest zbudować powtarzalny program w Husk. Ponieważ system typów zabrania funkcji, która może być zastosowana do siebie, muszę w jakiś sposób pozwolić pierwszej części na ocenę na funkcję, a pozostałą część na ocenę, a typy istniejących wbudowanych funkcji są zaprojektowane, aby temu zapobiec rodzaj dwuznaczności. Tokenami programu są

  • K, który konstruuje funkcję stałą. K a bjest równoważne z a.
  • Σ, Która zajmuje całkowitą n i zwraca n th liczby trójkątnym.
  • +, który dodaje dwie liczby.
  • 1, który jest dosłowny 1.

Oryginalny program jest interpretowany w następujący sposób:

   K Σ (K+) 1
== Σ 1
== 1

(K+)Jest bezsensowne funkcja, która zostanie zjedzona przez pierwszą K.

Dwukrotnie powtórzony program jest interpretowany w następujący sposób:

   K Σ (K+1KΣK+) 1
== Σ 1
== 1

Funkcja w nawiasach jest ponownie zjadana przez pierwszą K.

Trzykrotnie powtarzany program jest interpretowany w następujący sposób:

   K (Σ (K (+1) (KΣK+) 1)) (KΣK+1)
== Σ (K (+1) (KΣK+) 1)
== Σ ((+1) 1)
== Σ (+1 1)
== Σ 2
== 3
Zgarb
źródło
Trwa to naprawdę długo ...
Weijun Zhou,
@WeijunZhou Jeśli masz wiele wystąpień Kw programie, wnioskowanie typu staje się bardzo wolne, ponieważ każdy z nich może potencjalnie „zjeść” dowolną liczbę tokenów, a tłumacz spróbuje wszystkich kombinacji ...
Zgarb
Rozumiem, dziękuję za wyjaśnienie.
Weijun Zhou
2
@Zgarb +1 dla kek +1
workoverflow
10

Galaretka , 7 5 bajtów

»‘µ*Ḃ

Wypróbuj online!

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Jak to działa

»‘µ*Ḃ            Main link. No arguments. Implicit argument: x = 0

 ‘               Increment; yield x + 1 = 1.
»                Take the maximum of x and 1. Yields 1.
  µ              Begin a new, monadic chain. Argument: y = 1
    Ḃ            Bit; yield 1 if y is odd, 0 if it is even. Yields 1.
   *             Power; yield y**1 = 1.
»‘µ*Ḃ»‘µ*Ḃ       Main link.

»‘µ*Ḃ            As before.
      ‘          Increment; yield y + 1 = 2.
     »           Take the maximum of 1 and 2. Yields 2.
       µ         Begin a new, monadic chain. Argument: z = 2
         Ḃ       Bit; yield 1 if z is odd, 0 if it is even. Yields 0.
        *        Power; yield z**0 = 1.
»‘µ*Ḃ»‘µ*Ḃ»‘µ*Ḃ  Main link.

»‘µ*Ḃ»‘µ*Ḃ       As before.
           ‘     Increment; yield z + 1 = 3.
          »      Take the maximum of 1 and 3. Yields 3.
            µ    Begin a new, monadic chain. Argument: w = 3
              Ḃ  Bit; yield 1 if w is odd, 0 if it is even. Yields 1.
             *   Power; yield w**1 = 3.
Dennis
źródło
10

Cubix , 5 bajtów

)<@OP

Wypróbuj online: raz , dwa razy , trzy razy .


Wyjaśnienie

Cubix to język oparty na stosach, którego instrukcje są owinięte na zewnątrz sześcianu. Ważne jest, aby pamiętać, że stos jest początkowo wypełniony nieskończonymi zerami, co pozwala nam „wyciągać wartości z powietrza” operatorami, zamiast je jawnie popychać.

Muszę przyznać, że został znaleziony przez brutalnego napastnika; Nigdy bym tego nie znalazł. W rzeczywistości @MartinEnder był tym, który poprosił mnie, abym spróbował brutalnego wymuszenia, ponieważ szukał tego rozwiązania bez powodzenia. To jedyne rozwiązanie, które znalazł brutalny forcer, i uważam, że jest to jedyne najkrótsze rozwiązanie w Cubix.

Pojedynczy program

Zobacz, jak biegnie!

Oryginalny program mieści się na kostce jednostkowej. Oto rozwinięta sieć:

  )
< @ O P
  .

IP (wskaźnik instrukcji) zaczyna się od lewej twarzy (the <) skierowanej na wschód. <Natychmiast wskazuje go na zachód, i owija wokół do P. Pjest potęgowaniem, a ponieważ nic nie ma na stosie, interpreter wyciąga dwa 0 i oblicza 0 0 , co oznacza 1 według JavaScript. Onastępnie wypisuje tę wartość i @kończy program.

Podwójny program

Zobacz, jak biegnie!

)<@OP)<@OP

Program 10-bajtowy jest zbyt długi, aby zmieścił się w kostce jednostkowej, dlatego został rozszerzony do kostki o rozmiarze 2:

    ) <
    @ O
P ) < @ O P . .
. . . . . . . .
    . .
    . .

Tak jak poprzednio, adres IP zaczyna się w lewym górnym rogu lewej twarzy. Tym razem jest to pierwsza instrukcja P, która wypycha 1 jak poprzednio. Następnie )dodajemy najwyższy element, zamieniając go w 2 . Następnie <odwraca adres IP i uderza )ponownie, przekształcając 2 w 3 .

Oto, gdzie robi się ciekawie. Ppodnosi drugi od najwyższego przedmiotu do potęgi pierwszego przedmiotu, co daje 0 3 = 0 . Następnie IP owija się w prawą twarz i przechodzi przez dwa no-opy, .zanim trafi w kolejną P. Tutaj widzimy kolejne dziwactwo Cubix: operatory binarne (takie jak P) nie usuwają swoich operandów ze stosu. Ponieważ stos jest teraz [3, 0], obliczamy 3 0 = 1 , co Owyprowadza i @kończy działanie programu.

Potrójny program

Zobacz, jak biegnie!

)<@OP)<@OP)<@OP

Podobnie jak w przypadku programu podwójnego, potrójny może zmieścić się na kostce rozmiaru 2:

    ) <
    @ O
P ) < @ O P ) <
@ O P . . . . .
    . .
    . .

Ten program rozpoczyna się w taki sam sposób jak poprzedni: Pprzesuwa 1 , )zwiększa, <wskazuje IP na zachód, )ponownie zwiększa, a Pteraz przesuwa 0 . Własność intelektualna jest następnie owijana wokół <prawej twarzy, co nie robi nic, ponieważ IP jest już skierowana na zachód.

Oto jedna różnica w stosunku do programu podwójnego: )zwiększa 0 na stosie do 1 . Kiedy Pponownie wykonuje swoją magię, tym razem oblicza 3 1 = 3 . Owychodzi i @kończy, i ostatecznie dowodzimy, że trzeci raz jest rzeczywiście urokiem.

ETHprodukcje
źródło
1
Naprawdę podobało mi się twoje wyjaśnienie. +1
przepływ pracy
7

Brain-Flak , 10 bajtów

<>([]{}())

Wypróbuj online!

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Wyjaśnienie:

#Toggle stacks
<>

#Push
(
    #Stack-height (initially 0) + 
    []

    #The TOS (initially 0) + 
    {}

    #1
    ()
)

Kiedy raz to uruchomimy, umieści (0 + 0 + 1) == 1się na alternatywnym stosie. Zbiegł drugi raz, kładzie to samo na głównym stosie. Uruchom po raz trzeci , ocenia to (1 + 1 + 1) == 3i wypycha na alternatywny stos i niejawnie drukuje.

DJMcMayhem
źródło
7

SQL, 25 24 23 bajtów

( -1 bajt Usunięto źle wpisaną postać, która zawsze była komentowana i nic nie robiła )
( -1 bajt zmieniono SELECTna PRINTzalecaną przez Razvana Socol'a )

PRINT 2/*
*2+1--*/-1
--

Jak to działa:
W SQL możesz komentować tagi komentarza, tak jak:

/*
'Comment'--*/

vs

--/*
'Not Comment'--*/

Kod w 1 linii z wykluczonymi komentarzami:
Pierwsza iteracja: SELECT 2-1Wyjście: 1
Druga iteracja: SELECT 2-1*2+1Wyjście: 1
Trzecia iteracja: SELECT 2-1*2+1*2+1Wyjście:3

Chronocidal
źródło
1
PRINTzamiast SELECTzaoszczędziłby dodatkowy bajt.
Razvan Socol
6

SOGL V0.12 , 7 5 4 bajtów

ē»«I

Wypróbuj tutaj!

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Wyjaśnienie:

ē»«I
ē     push counter, then increment it.
      First time running this will push 0, then 1, then 2.
             TOS on each: 0  1  2
 »    floor divide by 2   0  0  1
  «   multiply by 2       0  0  2
   I  and increment       1  1  3
dzaima
źródło
Próbowałem zrobić coś podobnego do ē1|, ale najwyraźniej nie ma polecenia bitowego LUB ...
ETHproductions
@ETHproductions Tak, też chciałem spróbować czegoś takiego, a najlepsze, co dostałem, to ē:2\+: /
dzaima 13.03.19
5

05AB1E , 6 5 bajtów

.gDÈ+

Wypróbuj online! lub Wypróbuj dwukrotnie! lub Spróbuj trzykrotnie!

Wyjaśnienie

.g     # push length of stack
  D    # duplicate
   È   # check if even
    +  # add

Pojedyncze: 0 + (0 % 2 == 0) -> 1
Podwójne: 1 + (1 % 2 == 0) -> 1
Potrójne:2 + (2 % 2 == 0) -> 3

Emigna
źródło
Czy powinno to być % 2potrójne wyjaśnienie?
LarsW,
@LarsW: Tak, rzeczywiście :)
Emigna,
@Emigna Myślę, że „sprawdź, czy w ogóle” ma 2%_rację?
Magic Octopus Urn
2 + (2 % 2 == 0) -> 2ale 2 + !(2 % 2 == 0) -> 3(dla twojego wyjaśnienia).
Magic Octopus Urn
@MagicOctopusUrn 2%_jest taki sam jak Èyes. Nie jestem pewien, co masz na myśli na temat wyjaśnienia. 2+(2%2==0) = 2+(0==0) = 2+1 = 3. Prawdopodobnie byłoby to jaśniejsze, gdybym zbadał obliczenia.
Emigna,
5

> <> , 9 bajtów

\5 n;
\\1

Wypróbuj online!

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Znalazłem ten rodzaj szczęścia, stosując filozofię, że „jeśli doprowadzisz rybę do wystarczająco skomplikowanej ścieżki, w końcu coś się uda”. Oryginalne i podwójne wersje drukują 5, a wersja trzykrotnie drukuje 1, a następnie 5, aby uzyskać 15 = 3 × 5. Oto zwielokrotnione wersje dla twojego przejrzenia:

\5 n;
\\1\5 n;
\\1
\5 n;
\\1\5 n;
\\1\5 n;
\\1
Nie drzewo
źródło
5

Python 2 ,  46 45  39 bajtów

Zainspirowany odpowiedzią Halvarda . Cieszę się, że moje wyzwanie zainspirowało nowe, które wydaje mi się jeszcze bardziej interesujące. Zaoszczędził 6 bajtów dzięki Kevin Cruijssen .

print open(__file__,"a").tell()/79*3|1#

Wypróbuj online!

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Jak to działa (nieaktualne)

k=open(__file__,"a").tell() # Read the source code in "append" mode and get its length.
                            # Assign it to a variable k.
;print k>>(k==90)#          # Print k, with the bits shifted to the right by 1 if k
                            # is equal to 90, or without being shifted at all overwise.
                            # By shifting the bits of a number to the right by 1 (>>1),
                            # we basically halve it.

Po podwojeniu długość staje się 90 , ale nowy kod jest ignorowany dzięki #, więc k==90ocenia True. Logiczne są podklasami liczb całkowitych w Pythonie, więc k>>Truejest to równoważne z k>>1, co w zasadzie k / 2 = 45 . Po potrojeniu nowy kod jest ponownie ignorowany, dlatego nowa długość wynosi 135 , co nie ulega przesunięciu, ponieważ k==90oblicza False, więc k>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k, a k jest wypisywane w niezmienionej postaci.


Python 2 , 36 bajtów

To była sugestia Aidana F. Pierce'a na 38 bajtów, a ja grałem w golfa o 2 bajty. Nie publikuję tego jako mojego głównego rozwiązania, ponieważ sam tego nie wymyśliłem.

0and""
True+=1
print True>3and 3or 1

Wypróbuj online! Spróbuj dwukrotnie! Spróbuj trzykrotnie!

Pan Xcoder
źródło
Dzięki za pomysł użycia komentarza - zaoszczędziłem 6 bajtów.
AdmBorkBork
print open(__file__,"a").tell()/79*3|1#być może?
Kevin Cruijssen
@KevinCruijssen Świetnie, dziękuję!
Pan Xcoder,
Jeden bajt mniej, brak odczytu kodu źródłowego: tio.run / ##K6gsycjPM/r/... Drukuje z wiodącymi spacjami dla dwóch i trzech powtórzeń, ale wydaje się to dozwolone.
Aidan F. Pierce
@ AidanF.Pierce Dziękuję bardzo! Grałem w golfa trochę więcej i opublikowałem jako alternatywne rozwiązanie.
Pan Xcoder,
5

R , 37 31 28 bajtów

Dzięki Giuseppe za grę w golfa z ostatnich 3 bajtów.

length(readLines())%/%2*2+1

(z końcowym znakiem nowej linii).

Wypróbuj raz!

Spróbuj dwa razy!

Spróbuj trzy razy!

Wykorzystuje to readLines()sztuczkę z odpowiedzi Giuseppe na wyzwanie z 8 piłkami , gdzie stdinprzekierowuje do pliku źródłowego. Ten kod w zasadzie zlicza tylko ile linii istnieje poniżej pierwszego wiersza i zwraca, 1jeśli jest 1 lub 3 linie (tj. Kod jest pojedynczy lub podwojony), lub 3jeśli jest 5 linii (tzn. Kod jest potrojony).

rturnbull
źródło
och, schludnie, +1! Nie byłem pewien, jak to zrobić w R. Myślę, że potrzebujesz nowej linii po tym, saby to działało poprawnie, ALE powinieneś być w stanie zagrać w golfa do 28 bajtów poprzez ponowne przetworzenie niektórych obliczeń.
Giuseppe,
@Giuseppe Dziękujemy za zwrócenie uwagi na problem nowej linii! Nie udało mi się uruchomić twojej wersji, gdy kod został potrojony - czy coś mi brakuje?
rturnbull
och dziwne, musiałem mieć ostatnią nową linię, ale jeśli to zrobisz %/%2, powinno zadziałać
Giuseppe
5

Utracone , 38 bajtów

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Wypróbuj online!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Wypróbuj online!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Wypróbuj online!

Wyjaśnienie

Lost to bardzo interesujący język dla tego wyzwania. Zwykłą techniką Lost jest budowanie „pułapki”. Pułapka to część programu zaprojektowana do łapania wszystkich IP w jednym miejscu, aby można było wyczyścić ich stosy i kontrolować je, aby podążały w określonym kierunku. To sprawia, że ​​pisanie programów w Lost jest łatwiejsze do zarządzania. Ponieważ jednak program jest powielony, musimy również unikać duplikowania pułapek. Wymaga to od nas zaprojektowania nowej pułapki, która będzie działała poprawnie, ale gdy zostanie zduplikowana, działa tylko jedna pułapka. Mój podstawowy pomysł tutaj jest następujący

v<<<<>
>%?!^^

Gdy stos jest niepusty ?, usunie przedmiot i spowoduje, że przeskoczy on z powrotem na początek, jeśli ten przedmiot nie jest zerem. Kluczem tutaj jest to, że kiedy układa się w stos, ^^s ustawia się w linii

v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^

Oznacza to, że bez względu na to, jak wejdziesz, zawsze będziesz wychodzić w tym samym miejscu.

Stąd możemy spróbować wdrożyć ten sam pomysł z mojej odpowiedzi Kleina .

\\<<<<<v<<<<>
2>((1+@>?!^%^

Podstawą naszego programu jest lewa strona, która przesuwa szereg 2s. Za każdym razem, gdy dodajemy kopię programu, kolejna 2zostaje dodana do szkieletu programu, co oznacza, że ​​dodatkowe 2 są wypychane na stos. Gdy zejdzie z dołu, odbija się \\>i wykonuje kod

((1+@

Usuwa to pierwsze 2 elementy stosu, dodaje jeden do wszystkiego, co pozostało i wychodzi. Gdy nasz kręgosłup będzie miał 3 2, dodamy 1 i otrzymamy 3, jeśli będziemy mieli mniej niż 3 przedmioty, po prostu odrzucimy cały stos i zwrócimy 1.

Teraz pozostaje tylko problem, że !w naszym programie może powodować nieskończoną pętlę. Jeśli ip zacznie !iść w górę, podskoczy i wyląduje dokładnie tam, gdzie było. Oznacza to, że musimy dodać kolejną linię poniżej, aby zapobiec pętli.

\\<<<<</<<<<>
2>((1+@>?!^%^
.........^

Ma to niewielki problem z umieszczeniem niektórych ukośników między naszymi ^w pułapce. Jednak raczej cudem wszystko się udaje. Nasze IP odbijają się prawidłowo, aby nie miało to znaczenia.

Kreator pszenicy
źródło
@ żartuję niestety na razie utknąłem na telefonie komórkowym. Czy możesz to opublikować jako odpowiedź z wyjaśnieniem?
Wheat Wizard
Wysłano
Jo King,
4

Stax , 5 bajtów

|dhH^

Uruchom i debuguj online! · Podwojony · Potrójne

Wyjaśnienie

|dhH^
|d       Push Current stack depth `d`, originally 0
         Doubled -> 1, Tripled -> 2
  hH^    Map d to 2*(floor(d/2))+1
         Implicit print
Weijun Zhou
źródło
4

C (gcc) , 95 91 85 bajtów

#ifndef a
#define a-1
main(){puts(3
#include __FILE__
?"1":"3");}
#define a
#endif
a

Wypróbuj online!

l4m2
źródło
Następnie sugeruję edycję poprawnego linku TIO.
Erik the Outgolfer
Czasami nie mogę się połączyć z TIO, nie wiem dlaczego
l4m2
4

Japt , 8 6 5 bajtów

-1 bajt dzięki @ETHproductions

°U-v

Wyjaśnienie:

°U-v
 U     # variable U=0                # U=0
°U     # ++U                         # U=1
  -    # minus:
   v   #   1 if U is divisible by 2  
       #     else
       #   0                         # U=1

To ocenia na 1-0 = 1

Podwójny ocenia na 2-1 = 1

Potrójne ocenia na 3-0 = 3

Oliver
źródło
1
Trochę przestawiając, myślę, że możesz °U-v(plus nowa linia) zaoszczędzić na drugim U.
ETHprodukcje
@ETHproductions Dzięki! vjest idealny do tego wyzwania :-)
Oliver
4

> <> , 10 9 8 bajtów

562gn|

Wypróbuj online!

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Jestem pewien, że gdzieś tam jest rozwiązanie 8-bajtowe.

Niedrukowalne na końcu ma wartość ASCII 1 i jest pobierane tylko przez gpolecenie et w trzeciej iteracji. Przez pierwsze dwa drukuje 05, a następnie drukuje 15.

Jo King
źródło
8-bajtowe rozwiązanie okazuje się nieuchwytne, ale oto kilka kolejnych 9-bajtowych na wypadek, gdyby Cię zainspirowały: TIO , TIO
To nie jest drzewo
1
@Notatree Mam 8 bajtów z nadrukiem
Jo King
4

C (gcc) , 107 bajtów

Moje pierwsze zgłoszenie w C (gcc). Zbyt długo ...

i;
#ifdef c
#define c
#ifdef b
i=2;
#else
#define b
#endif
#else
#define c main(){putchar(i+49);}
#endif
c

Linki TIO: pojedyncze , podwójne , potrójne .

Weijun Zhou
źródło
3

JavaScript, 81 77 74 70 bajtów

Zaoszczędź 4 bajty dzięki Shaggy

var t,i=(i||[3,1,1]),a=i.pop()
clearTimeout(t)
t=setTimeout(alert,9,a)

Całkiem kiepskie rozwiązanie JS. Pobiera wartości z [3,1,1]tablicy z prawej ( pop()). Rejestruje limit czasu, aby wyświetlić bieżącą wartość w przyszłości. Jeśli limit czasu został już zarejestrowany, anuluj go. Opiera się na brudnej naturze var, która podnosi zmienne deklaracje.

Dwa razy:

Trzy razy:

Cristian Lupascu
źródło
Do działania wymaga to średnika końcowego lub nowej linii, ale możesz zaoszczędzić 4 bajty, przekazując ajako trzeci argument setTimeout:setTimeout(alert,9,a)
Shaggy
@Shaggy Thanks! Działa dobrze nawet bez dodatkowego średnika.
Cristian Lupascu,
2

Węgiel drzewny , 12 bajtów

⎚≔⁺ι¹ιI⁻ι⁼ι²

Wypróbuj online! Link jest do pełnego kodu.

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Wyjaśnienie

⎚             Clear
 ≔⁺ι¹ι        Assign plus(i, 1) to i
       I      Cast (and implicitly print)
         ⁻ ⁼ι² Subtract equals(i, 2) from
          ι    i
Tylko ASCII
źródło
MapAssignRight(Plus, 1, i)zapisuje ci bajt, co sprowadza cię do tej samej długości co port mojej odpowiedzi na @Mr. Wyzwanie XCodera:PI∨›³L⊞Oυω³
Neil
PI⊕⊗÷L⊞Oυω³to kolejna wersja mojej odpowiedzi, ale wciąż 11 bajtów ...
Neil
Znaleziono 10 bajtów!
Neil,
: / Naprawdę powinienem to naprawićMapAssign(Incremented, i)
tylko ASCII
2

JavaScript, 43 40 bajtów

var t=t?--t:~!setTimeout`t=alert(1|~t)`;

2x:

3x:

l4m2
źródło
ps to rozwiązanie nie niszczy środowiska
l4m2
2

PowerShell , 54 48 45 44 bajtów

if(99-gt(gc $PSCOMMANDPATH|wc -c)){1;exit}3#

Wypróbuj online!

Spróbuj dwukrotnie!

Spróbuj trzykrotnie!

Dostaje swoją własną ścieżkę wywołania z $PSCOMMANDPATHi wykonuje get- content na plik. Ifliczba znaków w tym pliku jest mniejsza niż 99(sprawdzane przez wc -ccoreutils), a następnie wypisujemy 1i exit(tj. zatrzymujemy wykonanie). To odpowiada oryginalnemu kodowi i podwójnemu kodowi. W przeciwnym razie wyjdziemy 3i wyjdziemy. Rzeczywisty kod, który znajduje się w sekcjach podwójnych lub potrójnych, jest bez znaczenia, ponieważ albo exitprzejdziemy do niego, albo kryje się za nim komentarz #.

Zaoszczędzono 6 bajtów dzięki Mr. Xcoder Zaoszczędzono 3 4 bajty dzięki Pavelowi

AdmBorkBork
źródło
@Pavel Aha, tak. Muszę zamienić -lt99na a, 99-gtaby rzutowanie działało poprawnie, ale tak naprawdę jest to o jeden bajt krótszy. Dzięki!
AdmBorkBork
2

C # (178 bajtów)

Console.WriteLine(1+2*4%int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]=(int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]??"0"))+1+""));

zwariowane rozwiązanie w C #, ale cieszę się, że w ogóle jest możliwe w jednej linii w C #. :)

Dla mnie najtrudniejsze było posiadanie prawidłowego języka C #, który zainicjalizowałby lub zwiększył tę samą zmienną, więc skończyłem nadużywaniem ConfigurationManager, ponieważ potrzebowałem globalnego statycznego NameValueCollection, a ConfigurationManager był jedynym, jaki mogłem wymyślić, że mógłbym zaktualizować w pamięci. EnvironmentVariables to kolejna opcja, w której szukałem, ale nie ma ona indeksatora, więc nie jestem pewien, jak to zrobić w jednym wierszu, który można skopiować i wkleić, aby uzyskać wymagane dane wyjściowe zgodnie ze specyfikacją.

zawietrzny
źródło
2

Runiczne Zaklęcia , 35 bajtów

^w3'\
    f
    1
/1@
/
 '54\w
/yyy

Wypróbuj online!

Praca nad tym pozwoliła mi znaleźć błąd w moim parserze zajmującym się nowymi znakami modyfikującymi opóźnienie, chociaż ostatecznie nie wpłynęło to na końcowy wynik, ponieważ ostatecznie ich nie potrzebowałem.

Działa z uwagi na fakt, że w ostatnim wierszu nie ma końcowej nowej linii (lub, w tym przypadku, spacji końcowych), umożliwiając powielanie się adresów IP w innym miejscu. W lewym górnym rogu kończy się duża pętla wokół siatki, podczas gdy drugie IP wykonuje operację Odbicia, zastępując \szóstą linię znakiem a . Ten adres IP zapętla się na zawsze i nic nie robi.

Trzeci IP sprawia, że również ten sam wymiany w tym samym czasie, ale ponieważ jest położony na 13 linii, jej kopia tego reflektora wysyła go do góry i wykonuje 1f'3wsekwencję obecną w prawym górnym rogu, który zastępuje 1z 3dnia 14 wiersz, tuż przed wykonaniem go przez pierwotny adres IP, powodując, że program potrojony wyświetla 3zamiast tego 1(wartości mogą być również 2i 6, 3i 9, 4i 12lub 5i 15ze względu na dostępność a-fstałych liczbowych; 1i 3zostały wybrane dowolnie). Następnie jest pozostawiony w nieskończonej pętli, wykonując więcej poleceń odbicia, które nic nie robią.

Wypróbuj w trzech egzemplarzach!

Draco18s
źródło
29 bajtów , choć myślę, że mógłbym obniżyć to, jeśli naprawdę to zrozumiałem: P
Jo King
@JoKing Nie jestem zaskoczony, że wiele białych znaków może wyjść. Zrobiłem to w pracy i ze względu na problem z tłumaczem, byłem szczęśliwy, że dostałem coś, co zadziałało (mój oryginał miał 52 bajty i po naprawieniu interpretera byłem w stanie usunąć dobrą porcję).
Draco18s,
1

Perl 5, 28 25 bajtów

-3 bajty dzięki @neil!

print"\e[D$a"if(++$a!=2);

Przesuwa kursor do tyłu (nic nie robi na początku wiersza) i wypisuje wartość $apierwszego i trzeciego czasu (tj. Za trzecim razem, gdy drukowana jest 1, kursor przesuwa się, a 3 jest drukowane na pozycji 1).

Marijn
źródło
1
print"\e[D$a"if(++$a!=2);być może?
Neil
1

QBasic, 19 bajtów

CLS
x=2^x
?x-1OR 1

Źródło powinno zawierać końcowy znak nowej linii.

Wyjaśnienie

Chcemy wyjście 1, 1, 3. Zauważ, że te liczby są o jeden mniejsze niż potęgi 2. Zatem:

CLS      ' CLear Screen of any output from previous copies of the code

x        ' Numeric variables are preset to 0...
 =2^x    ' so as this statement is repeated, the value of x goes 1, 2, 4

 x-1     ' Therefore x-1 goes 0, 1, 3...
    OR 1 ' and we bitwise OR it with 1 to change the 0 to 1...
?        ' and print.
DLosc
źródło