Podwójny czas nie jest podwójny


36

W oparciu o to wyzwanie.

W grze rytmicznej osu! , modyfikator trudności „Podwójny czas” faktycznie zwiększa prędkość tylko o 50%.

Twoim zadaniem jest napisanie programu, który wyświetli dodatnią parzystą liczbę całkowitą (większą niż 0), a gdy każdy bajt / znak (twój wybór) w kodzie źródłowym zostanie zduplikowany, powinien wypisać liczbę pomnożoną przez 1,5.

Na przykład, jeśli twój kod źródłowy to ABCi daje wynik 6, to AABBCCpowinien wypisać wynik 9.

Zgodnie z pierwotnymi zasadami wyzwania:

Zasady

  • Musisz zbudować pełny program.
  • 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 pobierać danych wejściowych (lub mieć nieużywane, puste dane wejściowe) i nie może generować błędów (ostrzeżenia kompilatora nie są uważane za błędy).
  • Wyprowadzanie liczb całkowitych ze spacjami końcowymi / wiodącymi jest dozwolone.
  • Nie możesz zakładać nowego wiersza między kopiami swojego źródła.
  • To jest , więc wygrywa najmniej bajtów w każdym języku !
  • Obowiązują domyślne luki .

Wyobrażam sobie, że będzie to o wiele mniej trywialne niż oryginalne wyzwanie, ale mam nadzieję, że zobaczymy kilka kreatywnych i unikalnych odpowiedzi!


@Fatalize write a program that outputs a positive even integerYes will will. Każdą liczbę parzystą można pomnożyć przez 1,5, aby uzyskać całkowitą liczbę całkowitą
Skidsdev

Wydaje mi się to duplikatem.
Erik the Outgolfer,

@EriktheOutgolfer Bardzo podobny, ale jestem pewien, że ten będzie o wiele trudniejszy (chyba że brakuje mi czegoś oczywistego).
TheLethalCoder

9
Duplikowanie znaków może uniemożliwić uruchomienie trywialnych języków. Zastanawiam się, czy istnieje rozwiązanie w języku innym niż styl oparty na poleceniach lub wyrażeniach.
Keyu Gan,

3
@TheLethalCoder Być może największą przeszkodą jest full program. Trudno sobie wyobrazić, że zduplikowany program nadal ma prawidłowy punkt wejścia / funkcję.
Keyu Gan,

Odpowiedzi:


22

Pylony , 7 5 4 bajtów

Wybrałem losowy język w TIO

46vt

Wyjaśnienie:

Wypróbuj online!

46    # Stack is [4, 6]

v     # Reverse the stack [6, 4]

t     # take top of stack 4

Podwojony:

4466   # Stack is [4, 4, 6, 6]

vv     # Reverse the stack twice so it's the same [4, 4, 6, 6]

tt     # take top of stack 6 and again which is 6 again

Zaoszczędź 2 bajty dzięki Officialaimm

Zaoszczędzono 1 bajt dzięki Veedrac


1
Hej, też 4/6vtdziała ...
officialaimm

18
Z całego serca popieram strategię wybierania losowego języka TIO i uczenia się go na wyzwanie
Skidsdev,

@officialaimm masz rację, dzięki.
LiefdeWen,

1
4/6 <- 4 podzielone przez nic -> 4; a następnie 6. 44 // 66 <- 4 podzielone przez 4 -> 1; nic podzielone przez nic -> nic; a następnie 6 i 6. Może. Dobra robota.
V. Courtois,

1
Czy nie 46vtzrobiłby tego samego?
Veedrac


14

LibreOffice Calc, 8 bajtów

=A2+3
19

Zapisz go jako *.csvi otwórz w LibreOffice Calc. Otrzymasz 22 w A1.


Podwój je:

==AA22++33

1199

Otrzymasz 33 w A1


1
sprytny wybór języka!
Giuseppe,

11

MATL , 3 bajty

TnQ

Wypróbuj online! Lub wersja podwójna .

Wyjaśnienie

W MATL wartość skalarna (liczba, char, wartość logiczna) jest taka sama jak tablica 1 × 1 zawierająca tę wartość.

Wersja normalna:

T    % Push true
n    % Number of elements of true: gives 1
Q    % Add 1: gives 2

Wersja podwójna:

TT   % Push [true, true]
n    % Number of elements of [true, true]: gives 2
n    % Number of elements of 2: gives 1
Q    % Add 1: gives 2
Q    % Add 1: gives 3

7
TnQ na odpowiedź ...: D [Czasami używamy tnq jako skróconego formularza podziękowania]
officialaimm

8
@officialaimm :)[czasami używamy tego, aby uzyskać pierwsze nelementy z tablicy ...]
Luis Mendo

10

vim, 5

i1<esc>X<C-a>

Bez podwajania:

i1<esc>  insert the literal text "1"
X        delete backwards - a no-op, since there's only one character
<C-a>    increment, giving 2

Z podwojeniem:

ii11<esc>   insert the literal text "i11"
<esc>       escape in normal mode does nothing
XX          since the cursor is on the last character, delete "i1"
<C-a><C-a>  increment twice, giving 3

10

Nie jestem pewien, czy ta odpowiedź jest prawidłowa. Po prostu opublikuj tutaj, na wypadek gdyby ktoś wpadł na jakieś pomysły.

Node.js z flagą -p, 7 bajtów

Autorstwa Alex Varga :

3/3*22

33//33**2222

Node.js z flagą -p, 11 bajtów

Stary:

3*2*0/1+22

33**22**00//11++2222

Wyjście 22 i 33.


Jak ma to robić 33? Wydaje się, że TIO nie jest w stanie tego zrobić. Blokuje się na 00.
V. Courtois

1
A co powiesz na:
Alex Varga

@AlexVarga takie słodkie.
tsh

@ V.Courtois używasz trybu ścisłego
tsh

1
@EdmundReed potrzebuje -pflagi do wyprowadzenia wartości wyrażenia
tsh

10

Python 2 REPL, 11 bajtów

(3/1)*(2/1)

To po prostu daje wynik 3 * 2 = 6. To jest zduplikowane

((33//11))**((22//11))

co daje 3 ** 2, czyli 3 do potęgi 2 lub 9.


Witamy na stronie. Ten python nie generuje żadnych danych wyjściowych, a zatem nie jest poprawną odpowiedzią. Jeśli jednak zmienisz swoją odpowiedź na Python REPL , spowoduje to wygenerowanie wyniku, a zatem będzie poprawną odpowiedzią. Będziesz musiał usunąć tę odpowiedź lub zmienić język z python 2 na python 2 repl.
Wheat Wizard

@WheatWizard Dzięki i dziękuję za pomoc! Czy zrobiłem to poprawnie?
Carl Schildkraut,

8

APL, 7 bajtów

⊃⍕⌊3×⍟2

Wydruki 2.

⊃⊃⍕⍕⌊⌊33××⍟⍟22

Wydruki 3.

Wypróbuj online!

Waaat?

Pojedynczy:

3×⍟2         → 2.079441542  ⍝  3 * ln 2
⌊2.079441542 → 2            ⍝  floor
⊃⍕           → '2'          ⍝  format and take first character

Podwójnie:

⍟⍟22          → 1.128508398  ⍝  ln ln 22
×1.128508398  → 1            ⍝ signum
33×1          → 33           ⍝  33 * 1
⌊⌊33          → 33           ⍝  floor
⊃⊃⍕⍕          → '3'          ⍝  format and take first character

Czy możesz wyrównać komentarze w pionie? Czy mamy inne ustawienia lub coś, co powoduje, że po mojej stronie pętla jest taka ?
Kevin Cruijssen

@KevinCruijssen Myślę, że to twoja czcionka przeglądarki, ale przeglądarki i tak nie renderują APL jako monospaced. że moja prntscr.com/fwp0l0
Uriel

No cóż, mimo wszystko jest to czytelne i świetna odpowiedź. :)
Kevin Cruijssen

Dla mnie jest to monospace. Prawdopodobnie zależy tylko od czcionki ( prnt.sc/fwrnz1 ). Komentarze zdecydowanie nie są jednak zgodne: P
tamalfarfetchd 17.07.17

@therealfarfetchd dzięki, zaktualizowałem ostatnie 3 wiersze
Uriel


5

CJam , 4 bajty

],))

Spróbuj normalnie!

Spróbuj dwukrotnie!

Wyjaśnienie

Normalna:

]     e# Wrap the stack in an array: []
 ,    e# Get its length: 0
  ))  e# Increment twice: 2

Podwójnie:

]         e# Wrap the stack in an array: []
 ]        e# Wrap the stack in an array: [[]]
  ,       e# Get its length: 1
   ,      e# Get the range from 0 to n-1: [0]
    )     e# Pull out its last element: 0
     )))  e# Increment 3 times: 3

Przeciążenia są trudne ...;)
Erik Outgolfer

AB],działa również.
geokavel




3

R 11 bajtów

8*(!0)+1*!1

Wypróbuj online!

!jest negacją i **jest potęgowaniem (alias dla ^). Liczby są konwertowane na logiczne: 0na FALSE, wszystkie inne na TRUE. Wartości logiczne przekonwertowane na liczby całkowite: FALSEdo 0, TRUEdo 1, tak !0==1, !1==0, !!00==0i !!11==1.

W ten sposób obliczana jest pojedyncza wersja 8×1+1×0=8, a wersja podwójna jest obliczana 880+111=12.


1
Właśnie próbowałem wymyślić rozwiązanie polegające na *i **, ale pobiłeś mnie!
Giuseppe,

@Giuseppe Nie jestem przekonany, że moje rozwiązanie jest optymalne (potrzeba nawiasów wokół !0jest denerwująca). Może być coś krótszego -i *, ale nie znalazłem jeszcze takiego rozwiązania ...
Robin Ryder

2

Cubix , 6 bajtów

O.1)W@

Wydruki 2.

  O
. 1 ) W
  @

Przesuwa 1, )inkrementuje, Wprzeskakuje w lewo do Októrych wyjść 2i @kończy program.

Podwojone, oczywiście OO..11))WW@@, że na kostce jest:

    O O
    . .
1 1 ) ) W W @ @
. . . . . . . .
    . .
    . .

Popycha 1dwa razy, )dwukrotnie zwiększa,W ponownie skacze w lewo, co umieszcza go po prawej stronie Ona północ, który wyprowadza 3, a następnie następna komenda @kończy działanie programu.

Wypróbuj online!

Podwojony online!


2

Klein , 8 6 bajtów

/3+@4\

Pojedyncze , podwójne

Wyjaśnienie

W przypadku singla program podąża dość prostą ścieżką. Pierwsze lustro odchyla je do drugiego, które odchyla je przez4 do końca programu.

Podwójny jest trochę bardziej złożony. Oto on:

//33++@@44\\

Pierwsze dwa zwierciadła działają tak samo, jednak istnieje nowe zwierciadło ze względu na podwojenie, które odchyla ip z powrotem do początku, jest łapane przez duplikat pierwszego zwierciadła i odchylane w kierunku końca. Wszystko, co jest uruchamiane, to to, 33++które ocenia na 6.


2

TI-Basic, 3 bajty

Pojedynczy:

int(√(8

Ostatnie wyrażenie jest domyślnie zwracane / drukowane w TI-Basic, więc jest drukowane 2

Podwojony:

int(int(√(√(88

Zwraca / drukuje 3

TI-Basic to tokenizowany język ; int(, √(i 8każdy z nich ma w pamięci jeden bajt.


Technicznie rzecz biorąc, specyfikacja wyzwania wyraźnie określa, kiedy każda postać jest podwojona, ale pozwolę na to i zaktualizuję specyfikację
Skidsdev

2

Rubinowy REPL, 8 bajtów

";3#";22

REPL drukuje tylko ostatnią wartość oceniana: 22.

Podwojony:

"";;33##"";;22

Ten czas 33jest ostatnią ocenianą wartością. Ciąg jest odrzucany ponownie, a a #rozpoczyna komentarz.


2

> <>, 19 8 bajtów

32b*!{n;

Wydruki 22
Wypróbuj online!

Wyjaśnienie:

32b   push literals onto the stack: [3,2,11]
*     multiply the top two values: [3,22]
!     skip the next instruction
{     (skipped)
n     pop and print the top value from the stack (22)
;     end execution

Podwojony:

3322bb**!!{{nn;;

Wydruki 33
Wypróbuj online!

Wyjaśnienie:

3322bb push literals onto the stack: [3,3,2,2,11,11]
**     multiply top values (twice): [3,3,2,242]
!      skip next instruction
!      (skipped)
{{     rotate the stack to the left (twice): [2,242,3,3]
nn     pop and print the top two values from the stack (33)
;      end execution

Stara wersja:
Normal:

11+!vn;
    n
    ;

Wydruki 2
Wypróbuj online!

Wyjaśnienie:

1    push 1 on the stack: [1]
 1    push 1 on the stack: [1,1]
  +    add top two values of the stack: [2]
   !    skip the next instruction
    v    (skipped)
     n    print the top value of the stack (2)
      ;    end execution

Podwojony:

1111++!!vvnn;;
        nn
        ;;

Wydruki 3
Wypróbuj online!

Wyjaśnienie:

1111    push four 1's on the stack: [1,1,1,1]
    +    add top two values of the stack: [1,1,2]
     +    add top two values of the stack: [1,3]
      !    skip the next instruction
       !    (skipped)
        v    change direction of execution (down)
         n    print the top value of the stack (3)
          ;    end execution


5
Myślę, że powinieneś także powielić nowe linie.
Erik the Outgolfer,

@EriktheOutgolfer Nie ma już nowych linii.
KSmarts

1

Zsh , 14 bajtów

<:|echo 22
3
:

Wypróbuj online!

Przygotowanie pełnego programu w języku innym niż golfowy do drukowania czegokolwiek ze zduplikowanym kodem źródłowym jest wyzwaniem. Zsh jest bardzo przydatny do tego, ponieważ pliki i heredoki są domyślnie przekazywane do cat. Spójrzmy na pierwszą linię w obu przypadkach:

<:|echo 22            # Give the file : on stdin to cat. cat pipes to 'echo 22', which ignores stdin
<<::||eecchhoo  2222  # Start heredoc on following lines with EOF string '::', pass to cat.
                      # Since cat exits 0, 'eecchhoo 2222' is not executed

Dopóki 3nie jest to program, pierwszy program będzie drukował tylko 22. Drugi program wydrukuje w 33otoczeniu dodatkowych znaków nowej linii (z powodu duplikacji).


Jeśli 3jest funkcją / programem / aliasem, to 18-bajtowe rozwiązanie nadal będzie działać!

<:|echo 22\\c\
3
:

Wypróbuj online!

Ostatnim \jest kontynuacja linii, więc nowa linia jest odrzucana, skutecznie tworząc polecenie echo echo '22\c3'. Do \cprzyczyn echo zatrzymać po drukowaniu 22(co także tłumić przełamane).


1

Perl 6 , 14 bajtów

'|d 3#';say 22

Wypróbuj online! Spróbuj dwukrotnie!

Korzysta z wygodnie nazwanej funkcji debugowania, ddaby wyprowadzić podwójny program do STDERR. Aby oddzielić logikę, umieszczamy podwójny program w cudzysłowach, które następnie się znoszą, gdy są podwojone, wraz ze znakiem komentarza, #aby skomentować nieprawidłowy program normalny.



0

MathGolf , 2 bajty

▬)

Wypróbuj online! Spróbuj dwukrotnie

Podobnie do innych odpowiedzi, ponieważ pierwsza instrukcja daje 1parzystą, gdy jest podwojona, a druga zwiększa ją. W tym przypadku użyłem odwrotnego potęgowania ( 0**0 = 0**0**0 = 1), ale mogła to być także dowolna z !£≤°instrukcji, a może nawet więcej.


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.