Doppelte Zeit ist keine doppelte Zeit

36

Basierend auf dieser Herausforderung.

Im Rhythmus-Spiel osu! erhöht der Schwierigkeits-Modifikator "Double-Time" die Geschwindigkeit tatsächlich nur um 50%.

Ihre Aufgabe ist es, ein Programm zu schreiben, das eine positive gerade Ganzzahl (höher als 0) ausgibt , und wenn jedes Byte / Zeichen (welches Sie wählen) in Ihrem Quellcode dupliziert wird, sollte es die mit 1,5 multiplizierte Zahl ausgeben.

Wenn Ihr Quellcode beispielsweise ABC6 ausgibt, AABBCCsollte 9 ausgegeben werden.

Befolgen Sie die Regeln der ursprünglichen Herausforderung:

Regeln

  • Sie müssen ein vollständiges Programm erstellen.
  • Die ursprüngliche Quelle muss mindestens 1 Byte lang sein.
  • Beide Ganzzahlen müssen sich in der Basis 10 befinden (die Ausgabe in einer anderen Basis oder mit wissenschaftlicher Notation ist verboten).
  • Ihr Programm darf keine Eingaben annehmen (oder eine nicht verwendete, leere Eingabe haben) und darf keine Fehler auslösen (Compiler-Warnungen werden nicht als Fehler betrachtet).
  • Die Ausgabe der Ganzzahlen mit nachgestellten / führenden Leerzeichen ist zulässig.
  • Sie dürfen keinen Zeilenumbruch zwischen Kopien Ihrer Quelle annehmen.
  • Das ist , also gewinnen die wenigsten Bytes in jeder Sprache !
  • Es gelten Standardlücken .

Ich kann mir vorstellen, dass dies weitaus weniger trivial ist als die ursprüngliche Herausforderung, aber wir werden hoffentlich einige kreative und einzigartige Antworten finden!

Skidsdev
quelle
@Fatalize write a program that outputs a positive even integerJa, das wird es. Jede gerade Zahl kann mit 1,5 multipliziert werden, um eine ganze Zahl zu erhalten
Skidsdev
Es kommt mir wie ein Trottel vor.
Erik der Outgolfer
@EriktheOutgolfer Sehr ähnlich, aber ich bin sicher, dass dies viel schwieriger sein wird (es sei denn, mir fehlt etwas Offensichtliches).
TheLethalCoder
9
Das Duplizieren von Zeichen kann dazu führen, dass einfache Sprachen nicht mehr ausgeführt werden können. Ich frage mich, ob es eine Lösung in einer Sprache gibt, die nicht aus einem einzelnen Zeichen oder einem Ausdruck besteht.
Keyu Gan
3
@TheLethalCoder Vielleicht ist das größte Hindernis full program. Es ist schwer vorstellbar, dass ein dupliziertes Programm noch einen gültigen Einstiegspunkt / eine gültige Einstiegsfunktion hat.
Keyu Gan

Antworten:

22

Pylone , 7 5 4 Bytes

Hat eine zufällige Sprache für TIO ausgewählt und verwendet

46vt

Erläuterung:

Probieren Sie es online!

46    # Stack is [4, 6]

v     # Reverse the stack [6, 4]

t     # take top of stack 4

Verdoppelt:

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

2 Bytes dank officialaimm gespart

Dank Veedrac 1 Byte gespart

LiefdeWen
quelle
1
Hey, 4/6vtfunktioniert auch ...
officialaimm
18
Ich bin voll und ganz mit der Strategie
einverstanden
@officialaimm du hast recht, danke.
LiefdeWen
1
4/6 <- 4 geteilt durch nichts -> 4; und dann 6. 44 // 66 <- 4 geteilt durch 4 -> 1; nichts geteilt durch nichts -> nichts; und dann 6 und 6. Vielleicht. Gut gemacht.
V. Courtois
1
Würde das nicht 46vtauch so sein?
Veedrac
21

Gelee , 2 Bytes

!‘

Probieren Sie es online!

Erläuterung:

!‘ Implicit 0
!  Factorial
 ‘ Increment

Doppelte Version:

!!‘‘

Probieren Sie es online!

Erläuterung:

!!‘‘ Implicit 0
!    Factorial
 !   Factorial
  ‘  Increment
   ‘ Increment
Erik der Outgolfer
quelle
Wenn Sie es ein drittes Mal tun, geht es von 3 -> 4, nicht 3-> 4,5 ??
Tuskiomi
@tuskiomi Nein, da dies nicht erwartet wird.
Erik der Outgolfer
14

LibreOffice Calc, 8 Bytes

=A2+3
19

Speichern Sie es als *.csvund öffnen Sie es in LibreOffice Calc. Sie erhalten 22 in A1.


Verdopple sie:

==AA22++33

1199

Sie erhalten 33 in A1

tsh
quelle
1
clevere Sprachwahl!
Giuseppe
11

MATL , 3 Bytes

TnQ

Probieren Sie es online! Oder doppelte Version .

Erläuterung

In MATL entspricht ein Skalarwert (Zahl, Zeichen, logischer Wert) einem 1 × 1-Array, das diesen Wert enthält.

Normale Version:

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

Doppelte Version:

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
Luis Mendo
quelle
7
TnQ für die Antwort ...: D [Wir verwenden manchmal tnq als Kurzform für Danke]
offiziell
8
@officialaimm :)[manchmal verwenden wir das, um die ersten nElemente aus einem Array zu erhalten ...]
Luis Mendo
10

vim, 5

i1<esc>X<C-a>

Ohne zu verdoppeln:

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

Mit Verdopplung:

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
Türknauf
quelle
10

Ich bin nicht sicher, ob diese Antwort gültig ist. Posten Sie einfach hier, falls jemand Ideen von hier hat.

Node.js mit -p Flag, 7 Bytes

Von Alex Varga :

3/3*22

33//33**2222

Node.js mit -p Flag, 11 Bytes

Alte:

3*2*0/1+22

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

Ausgang 22 und 33.

tsh
quelle
Wie soll es 33 machen? TIO scheint dazu nicht in der Lage zu sein. Es schließt auf 00.
V. Courtois
1
Wie wäre es mit: 3/3 * 22
Alex Varga
@ AlexVarga so süß.
TSH
@ V.Courtois Sie verwenden den strengen Modus
tsh
1
@ EdmundReed brauchen -pFlag, um Ausdruckswert auszugeben
tsh
10

Python 2 REPL, 11 Bytes

(3/1)*(2/1)

Dies ergibt einfach 3 * 2 = 6. Dupliziert ist es

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

Dies ergibt 3 ** 2, was 3 hoch 2 ist, oder 9.

Carl Schildkraut
quelle
Willkommen auf der Seite. Dieser Python erzeugt keine Ausgabe und ist daher keine gültige Antwort. Wenn Sie Ihre Antwort jedoch in eine Python- REPL ändern , wird eine Ausgabe erstellt und ist daher eine gültige Antwort. Sie müssen diese Antwort entweder löschen oder die Sprache von Python 2 auf Python 2 Repl ändern.
Weizen-Assistent
@ WheatWizard Vielen Dank und vielen Dank für Ihre Hilfe! Habe ich das richtig gemacht?
Carl Schildkraut
8

APL, 7 Bytes

⊃⍕⌊3×⍟2

Druckt 2.

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

Druckt 3.

Probieren Sie es online!

Waaat?

Single:

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

Doppelt:

⍟⍟22          → 1.128508398  ⍝  ln ln 22
×1.128508398  → 1            ⍝ signum
33×1          → 33           ⍝  33 * 1
⌊⌊33          → 33           ⍝  floor
⊃⊃⍕⍕          → '3'          ⍝  format and take first character
Uriel
quelle
Könnten Sie bitte die Kommentare vertikal ausrichten? Oder haben wir andere Einstellungen oder etwas, was dazu führt, dass es an meinem Ende eine Schleife wie diese gibt ?
Kevin Cruijssen
@ KevinCruijssen Ich denke, das ist Ihre Browser-Schriftart, aber Browser rendern APL sowieso nicht als monospaced. Diese
Uriel
Na ja, es ist immer noch lesbar und trotzdem eine großartige Antwort. :)
Kevin Cruijssen
Es wird für mich zum Monospace. Kommt wahrscheinlich nur auf die Schriftart an ( prnt.sc/fwrnz1 ). Die Kommentare
stimmen
@therealfarfetchd danke, ich habe die letzten 3 Zeilen aktualisiert
Uriel
5

CJam , 4 Bytes

],))

Probiere es normal aus!

Probieren Sie es doppelt aus!

Erläuterung

Normal:

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

Doppelt:

]         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
Geschäfts-Katze
quelle
Die Überladungen sind knifflig ...;)
Erik der Outgolfer
AB],funktioniert auch.
Geokavel
4

05AB1E , 2 Bytes

X>

Probieren Sie es online!

Erläuterung:

X> Only top of stack is printed
X  Push X (default 1)
 > Increment

Doppelte Version:

XX>>

Probieren Sie es online!

Erläuterung:

XX>> Only top of stack is printed
X    Push X (default 1)
 X   Push X (default 1)
  >  Increment
   > Increment
Erik der Outgolfer
quelle
4

Neim , 2 Bytes

𝐓>

Probieren Sie es online!

Erläuterung:

𝐓> Implicit 0
𝐓  Factorial
 > Increment

Doppelte Version:

𝐓𝐓>>

Probieren Sie es online!

𝐓𝐓>> Implicit 0
𝐓    Factorial
 𝐓   Factorial
  >  Increment
   > Increment
Erik der Outgolfer
quelle
4 von 5 Antworten ... du wirst es wirklich wollen!
TheLethalCoder
5
@TheLethalCoder Zumindest ist es noch nicht 15. ;)
Erik der Outgolfer
3

R , 11 Bytes

8*(!0)+1*!1

Probieren Sie es online!

!ist Negation und **Exponentiation (ein Alias ​​für ^). Numerik wird in Boolesche Werte konvertiert: 0zu FALSE, alle anderen zu TRUE. Boolesche Werte erhalten auf ganze Zahlen umgewandelt: FALSEzu 0, TRUEzu 1, so !0==1, !1==0, !!00==0und !!11==1.

8×1+1×0=8880+111=12

Robin Ryder
quelle
1
Ich habe nur versucht, eine Lösung zu finden, die auf *und beruht **, aber Sie haben mich geschlagen!
Giuseppe,
@ Giuseppe Ich bin nicht überzeugt, dass meine Lösung optimal ist (die Notwendigkeit von Klammern !0ist ärgerlich). Es gibt vielleicht etwas kürzeres mit -und *, aber ich habe noch keine solche Lösung gefunden ...
Robin Ryder
2

Cubix , 6 Bytes

O.1)W@

Druckt 2.

  O
. 1 ) W
  @

Drückt 1, )erhöht, Wspringt nach links zu Oden Ausgängen 2und @beendet das Programm.

Verdoppelt ist es offensichtlich OO..11))WW@@, was auf einem Würfel ist:

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

Es wird 1zweimal )gedrückt, zweimal inkrementiert, Werneut nach links gesprungen, wodurch es rechts in ORichtung Norden positioniert 3wird , was ausgegeben wird , und der nächste Befehl ist, @der das Programm beendet.

Probieren Sie es online!

Online verdoppelt!

Giuseppe
quelle
2

Klein , 8 6 Bytes

/3+@4\

Einzel , Doppel

Erläuterung

Für die Single folgt das Programm einem ziemlich einfachen Weg. Der erste Spiegel lenkt es in den zweiten um, der es 4bis zum Ende des Programms lenkt .

Das Double ist etwas komplexer. Hier ist es:

//33++@@44\\

Die ersten beiden Spiegel funktionieren genauso, es gibt jedoch einen neuen Spiegel aufgrund der Verdopplung, die die IP zurück zum Anfang ablenkt. Sie wird vom Duplikat des ersten Spiegels erfasst und gegen Ende abgelenkt. Alles, was ausgeführt wird, ist das, 33++was zu 6 ausgewertet wird.

Weizen-Assistent
quelle
2

TI-Basic, 3 Bytes

Single:

int(√(8

Der letzte Ausdruck wird implizit in TI-Basic zurückgegeben / gedruckt, daher wird dieser gedruckt 2

Verdoppelt:

int(int(√(√(88

Rückgabe / Druck 3

TI-Basic ist eine Token-Sprache . int(, √(Und 8jeweils ein Byte im Speicher.

Pizzapants184
quelle
In der Herausforderungsspezifikation wird explizit angegeben, wann jeder Charakter verdoppelt wird, aber ich werde dies zulassen und die Spezifikation aktualisieren
Skidsdev,
2

Ruby REPL, 8 Bytes

";3#";22

Die REPL druckt nur den letzten Wert ausgewertet: 22.

Verdoppelt:

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

Diese Zeit 33ist der letzte ausgewertete Wert. Die Zeichenfolge wird erneut verworfen und #ein Kommentar wird gestartet.

m-chrzan
quelle
2

> <>, 19 8 Bytes

32b*!{n;

Drucke 22
Probieren Sie es online!

Erläuterung:

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

Verdoppelt:

3322bb**!!{{nn;;

Drucke 33
Probieren Sie es online!

Erläuterung:

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

Alte Version:
Normal:

11+!vn;
    n
    ;

Drucke 2
Probieren Sie es online!

Erläuterung:

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

Verdoppelt:

1111++!!vvnn;;
        nn
        ;;

Drucke 3
Probieren Sie es online!

Erläuterung:

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

KSmarts
quelle
5
Ich denke, Sie sollten auch die Zeilenumbrüche duplizieren.
Erik der Outgolfer
@EriktheOutgolfer Es gibt keine Newlines mehr.
KSmarts
1

Zsh , 14 Bytes

<:|echo 22
3
:

Probieren Sie es online!

Es ist eine Herausforderung, ein vollständiges Programm in einer Nicht-Golf-Sprache zu erstellen, um alles zu drucken, dessen Quellcode so dupliziert wurde. Zsh ist dafür sehr nützlich, da Dateien und Heredocs implizit an übergeben werden cat. Schauen wir uns in beiden Fällen die erste Zeile an:

<:|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

Solange 3es sich nicht um ein Programm handelt, wird nur das erste Programm gedruckt 22. Das zweite Programm wird 33mit zusätzlichen Zeilenumbrüchen gedruckt (aufgrund der Duplizierung).


Wenn 3es sich um eine Funktion / ein Programm / einen Alias ​​handelt, funktioniert diese 18-Byte- Lösung weiterhin!

<:|echo 22\\c\
3
:

Probieren Sie es online!

Der letzte \ist die Fortsetzung der Zeile, sodass die neue Zeile verworfen wird und die Echo-Anweisung ausgeführt wird echo '22\c3'. Das \cbewirkt, dass das Echo nach dem Drucken stoppt 22(was auch dazu führt, dass die neue Zeile unterdrückt wird).

GammaFunktion
quelle
1

Perl 6 , 14 Bytes

'|d 3#';say 22

Probieren Sie es online! Probieren Sie es doppelt aus!

Dies verwendet die bequem benannte Debug-Funktion, ddum das verdoppelte Programm an STDERR auszugeben. Um die Logik zu trennen, setzen wir das verdoppelte Programm in Anführungszeichen, die sich beim Verdoppeln gegenseitig aufheben, sowie ein Kommentarzeichen #, um das jetzt ungültige normale Programm auszukommentieren.

Scherzen
quelle
0

MathGolf , 2 Bytes

▬)

Probieren Sie es online! Probieren Sie es doppelt aus

Ähnlich wie bei anderen Antworten ergibt der erste Befehl eine 1Gerade, wenn er verdoppelt wird, und der zweite erhöht sie. In diesem Fall habe ich die umgekehrte Potenzierung ( 0**0 = 0**0**0 = 1) verwendet, aber es könnte auch eine der !£≤°Anweisungen und vielleicht noch mehr gewesen sein, die ich verpasst habe.

Scherzen
quelle