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 golf golfowy , więc wygrywa najkrótszy (oryginalny) kod w każdym języku !
Przykład
Powiedzmy, że twój kod źródłowy jest, Abc
a odpowiadający mu wynik to 4
. Jeśli AbcAbc
zamiast tego napiszę i uruchomię, dane wyjściowe nadal muszą być 4
. Jednak jeśli go napiszę AbcAbcAbc
i uruchomię, dane wyjściowe muszą być 12
.
Bezwstydnie skradziony Pochodzi z wyzwania pana Xcodera
źródło
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 3Odpowiedzi:
Wumpus , 6 bajtów
Wypróbuj online!
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!
Wydruki
1
i3
.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:
Wykonany kod to:
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:
IP obchodzi tę pętlę dokładnie raz, więc wykonany kod to:
Wreszcie program trzykrotnie jest dość podobny do programu podwójnego, ale otrzymujemy kilka ważnych poleceń w tym trzecim wierszu:
Wykonany kod to:
źródło
Łuska , 5 bajtów
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 b
jest równoważne za
.Σ
, 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+)
Jest bezsensowne funkcja, która zostanie zjedzona przez pierwsząK
.Dwukrotnie powtórzony program jest interpretowany w następujący sposób:
Funkcja w nawiasach jest ponownie zjadana przez pierwszą
K
.Trzykrotnie powtarzany program jest interpretowany w następujący sposób:
źródło
K
w 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 ...Galaretka ,
75 bajtówWypróbuj online!
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!
Jak to działa
źródło
Haskell , 24 bajty
Wydruki
1
: Wypróbuj online!Drukuje także
1
: Wypróbuj online!Wydruki
3
: Wypróbuj online!źródło
Cubix , 5 bajtów
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ć:
IP (wskaźnik instrukcji) zaczyna się od lewej twarzy (the
<
) skierowanej na wschód.<
Natychmiast wskazuje go na zachód, i owija wokół doP
.P
jest potęgowaniem, a ponieważ nic nie ma na stosie, interpreter wyciąga dwa 0 i oblicza 0 0 , co oznacza 1 według JavaScript.O
następnie wypisuje tę wartość i@
kończy program.Podwójny program
Zobacz, jak biegnie!
Program 10-bajtowy jest zbyt długi, aby zmieścił się w kostce jednostkowej, dlatego został rozszerzony do kostki o rozmiarze 2:
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.
P
podnosi 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 jakP
) nie usuwają swoich operandów ze stosu. Ponieważ stos jest teraz[3, 0]
, obliczamy 3 0 = 1 , coO
wyprowadza i@
kończy działanie programu.Potrójny program
Zobacz, jak biegnie!
Podobnie jak w przypadku programu podwójnego, potrójny może zmieścić się na kostce rozmiaru 2:
Ten program rozpoczyna się w taki sam sposób jak poprzedni:
P
przesuwa 1 ,)
zwiększa,<
wskazuje IP na zachód,)
ponownie zwiększa, aP
teraz 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 . KiedyP
ponownie wykonuje swoją magię, tym razem oblicza 3 1 = 3 .O
wychodzi i@
kończy, i ostatecznie dowodzimy, że trzeci raz jest rzeczywiście urokiem.źródło
Brain-Flak , 10 bajtów
Wypróbuj online!
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!
Wyjaśnienie:
Kiedy raz to uruchomimy, umieści
(0 + 0 + 1) == 1
się na alternatywnym stosie. Zbiegł drugi raz, kładzie to samo na głównym stosie. Uruchom po raz trzeci , ocenia to(1 + 1 + 1) == 3
i wypycha na alternatywny stos i niejawnie drukuje.źródło
SQL,
252423 bajtów( -1 bajt Usunięto źle wpisaną postać, która zawsze była komentowana i nic nie robiła )
( -1 bajt zmieniono
SELECT
naPRINT
zalecaną przez Razvana Socol'a )Jak to działa:
W SQL możesz komentować tagi komentarza, tak jak:
vs
Kod w 1 linii z wykluczonymi komentarzami:
Pierwsza iteracja:
SELECT 2-1
Wyjście:1
Druga iteracja:
SELECT 2-1*2+1
Wyjście:1
Trzecia iteracja:
SELECT 2-1*2+1*2+1
Wyjście:3
źródło
PRINT
zamiastSELECT
zaoszczędziłby dodatkowy bajt.SOGL V0.12 ,
754 bajtówWypróbuj tutaj!
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!
Wyjaśnienie:
źródło
ē1|
, ale najwyraźniej nie ma polecenia bitowego LUB ...ē:2\+
: /05AB1E ,
65 bajtówWypróbuj online! lub Wypróbuj dwukrotnie! lub Spróbuj trzykrotnie!
Wyjaśnienie
Pojedyncze:
0 + (0 % 2 == 0) -> 1
Podwójne:
1 + (1 % 2 == 0) -> 1
Potrójne:
2 + (2 % 2 == 0) -> 3
źródło
% 2
potrójne wyjaśnienie?2%_
rację?2 + (2 % 2 == 0) -> 2
ale2 + !(2 % 2 == 0) -> 3
(dla twojego wyjaśnienia).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.> <> , 9 bajtów
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:
źródło
Python 2 ,
46 4539 bajtówZainspirowany 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 .
Wypróbuj online!
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!
Jak to działa (nieaktualne)
Po podwojeniu długość staje się 90 , ale nowy kod jest ignorowany dzięki
#
, więck==90
oceniaTrue
. Logiczne są podklasami liczb całkowitych w Pythonie, więck>>True
jest to równoważne zk>>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==90
obliczaFalse
, więck>>(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.
Wypróbuj online! Spróbuj dwukrotnie! Spróbuj trzykrotnie!
źródło
print open(__file__,"a").tell()/79*3|1#
być może?R ,
373128 bajtówDzięki Giuseppe za grę w golfa z ostatnich 3 bajtów.
(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 , gdziestdin
przekierowuje do pliku źródłowego. Ten kod w zasadzie zlicza tylko ile linii istnieje poniżej pierwszego wiersza i zwraca,1
jeśli jest 1 lub 3 linie (tj. Kod jest pojedynczy lub podwojony), lub3
jeśli jest 5 linii (tzn. Kod jest potrojony).źródło
s
aby to działało poprawnie, ALE powinieneś być w stanie zagrać w golfa do 28 bajtów poprzez ponowne przetworzenie niektórych obliczeń.%/%2
, powinno zadziałaćUtracone , 38 bajtów
Wypróbuj online!
Wypróbuj online!
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
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 liniiOznacza 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 .
Podstawą naszego programu jest lewa strona, która przesuwa szereg
2
s. Za każdym razem, gdy dodajemy kopię programu, kolejna2
zostaje dodana do szkieletu programu, co oznacza, że dodatkowe 2 są wypychane na stos. Gdy zejdzie z dołu, odbija się\\>
i wykonuje kodUsuwa 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.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.źródło
Stax , 5 bajtów
Uruchom i debuguj online! · Podwojony · Potrójne
Wyjaśnienie
źródło
C (gcc) ,
959185 bajtówWypróbuj online!
źródło
Japt ,
865 bajtów-1 bajt dzięki @ETHproductions
Wyjaśnienie:
To ocenia na
1-0 = 1
Podwójny ocenia na
2-1 = 1
Potrójne ocenia na
3-0 = 3
źródło
°U-v
(plus nowa linia) zaoszczędzić na drugimU
.v
jest idealny do tego wyzwania :-)Pure Bash (brak
wc
lub inne narzędzia zewnętrzne), 27źródło
EXIT
z0
Perl 5 ,
1815131211 bajtów-3 bajty dzięki nwellnhof
Raz Wypróbuj online!
Dwa razy Wypróbuj online!
Trzy razy Wypróbuj online!
źródło
n;$_=$a++|1;say
(15 bajtów)> <> ,
10 98 bajtówWypró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
g
polecenie et w trzeciej iteracji. Przez pierwsze dwa drukuje05
, a następnie drukuje15
.źródło
C (gcc) , 107 bajtów
Moje pierwsze zgłoszenie w C (gcc). Zbyt długo ...
Linki TIO: pojedyncze , podwójne , potrójne .
źródło
Labirynt ,
12119 bajtówTIO (1x) , TIO (2x) , TIO (3x)
źródło
JavaScript,
81 77 7470 bajtówZaoszczędź 4 bajty dzięki Shaggy
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 naturzevar
, która podnosi zmienne deklaracje.Dwa razy:
Pokaż fragment kodu
Trzy razy:
Pokaż fragment kodu
źródło
a
jako trzeci argumentsetTimeout
:setTimeout(alert,9,a)
C (gcc) ,
5352 bajtyZwróć uwagę na miejsce po
#endif
.Wypróbuj online!
źródło
Węgiel drzewny , 12 bajtów
Wypróbuj online! Link jest do pełnego kodu.
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!
Wyjaśnienie
ź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υω³
PI⊕⊗÷L⊞Oυω³
to kolejna wersja mojej odpowiedzi, ale wciąż 11 bajtów ...MapAssign(Incremented, i)
JavaScript,
4340 bajtów2x:
Pokaż fragment kodu
3x:
Pokaż fragment kodu
źródło
PowerShell ,
54484544 bajtówWypróbuj online!
Spróbuj dwukrotnie!
Spróbuj trzykrotnie!
Dostaje swoją własną ścieżkę wywołania z
$PSCOMMANDPATH
i wykonujeg
et-c
ontent na plik.If
liczba znaków w tym pliku jest mniejsza niż99
(sprawdzane przezwc -c
coreutils), a następnie wypisujemy1
iexit
(tj. zatrzymujemy wykonanie). To odpowiada oryginalnemu kodowi i podwójnemu kodowi. W przeciwnym razie wyjdziemy3
i wyjdziemy. Rzeczywisty kod, który znajduje się w sekcjach podwójnych lub potrójnych, jest bez znaczenia, ponieważ alboexit
przejdziemy do niego, albo kryje się za nim komentarz#
.Zaoszczędzono 6 bajtów dzięki Mr. Xcoder Zaoszczędzono
34 bajty dzięki Pavelowiźródło
-lt99
na a,99-gt
aby rzutowanie działało poprawnie, ale tak naprawdę jest to o jeden bajt krótszy. Dzięki!C # (178 bajtów)
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ą.
źródło
Runiczne Zaklęcia , 35 bajtów
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'3w
sekwencję obecną w prawym górnym rogu, który zastępuje1
z3
dnia 14 wiersz, tuż przed wykonaniem go przez pierwotny adres IP, powodując, że program potrojony wyświetla3
zamiast tego1
(wartości mogą być również2
i6
,3
i9
,4
i12
lub5
i15
ze względu na dostępnośća-f
stałych liczbowych;1
i3
został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!
źródło
Perl 5,
2825 bajtów-3 bajty dzięki @neil!
Przesuwa kursor do tyłu (nic nie robi na początku wiersza) i wypisuje wartość
$a
pierwszego i trzeciego czasu (tj. Za trzecim razem, gdy drukowana jest 1, kursor przesuwa się, a 3 jest drukowane na pozycji 1).źródło
print"\e[D$a"if(++$a!=2);
być może?QBasic, 19 bajtów
Ź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:źródło