Drucken Sie die verlorenen Nummern


15

Als großer Fan der Lost-TV-Serie war ich immer fasziniert von der Zahlenfolge, die in den Folgen immer wieder vorkommt. Diese Zahlen sind:

4,8,15,16,23,42 ( A104101 )

Schreiben Sie in einer beliebigen Programmiersprache einen Code, der diese Zahlen ausgibt.

Wertung:

  • Kürzeste Antwort gewinnt

  • Die Ausgabe darf keine anderen Zahlen oder Buchstaben enthalten. Sie können ein beliebiges anderes Zeichen als Trennzeichen oder gar kein Trennzeichen verwenden.

  • Sie können keine Ziffern derselben Nummer trennen. ist eine gültige Antwort, jedoch nicht.48_15162342481_5162342

  • Sie müssen die Reihenfolge einhalten.

  • Wenn Ihr Code keine der Zahlen aus der Sequenz enthält, reduzieren Sie Ihre Punktzahl um 30%. Mit dieser Regel können Sie die Ziffern getrennt eingeben. Z.B:

    abcde1fg5h
    

    Ist ein gültiger Kandidat, da die Antwort nicht die Nummer , sondern nur die Ziffern enthält. Bei oder wird der Bonus jedoch ungültig.1548

  • Wenn der Code überhaupt keine Ziffer enthält, reduzieren Sie Ihre Punktzahl um 50%. Andere Zeichen wie , oder ³ sind für diesen Bonus weiterhin gültig.¹²³


2
Verwandte, geschlossene Frage: codegolf.stackexchange.com/q/23808/67312
Giuseppe


1
Müssen wir sie in dieser Reihenfolge ausdrucken?
Titus

6
Zum späteren Nachschlagen haben wir ein restricted-sourceTag, das hier verwendet werden könnte: Obwohl die meisten Antworten offensichtliche Lösungen vermeiden, wäre die Herausforderung meiner Meinung nach etwas interessanter gewesen, wenn die Verwendung von Ziffern insgesamt verboten gewesen wäre.
Arnauld

Antworten:


31

Verloren , 29 27/2 = 13,5 Bytes

%?\>>>>>>>>>>
>>\"*"@"

Probieren Sie es online! oder überprüfen Sie, ob es deterministisch ist

Schien die richtige Sprache zu verwenden.

Erläuterung:

Lost ist eine 2D-Sprache, bei der der Zeiger überall beginnt und in eine beliebige Richtung zeigt. Dies führt im Allgemeinen zu einer Vielzahl von Überprüfungen, ob der Zeiger nicht zu früh in einen Abschnitt eingetreten ist.

...>>>>>>>>>>  These arrows filter all pointers that appear on the top line
.............  Or going vertically


%............  This flips the flag so that the program can end
.............  This stops premature termination

.?\..........  Clear the stack by skipping if a value popped from the stack is positive
.............  When the stack is empty, the \ directs the pointer down

.............  The \ directs the pointer right
..\"*"..  The string literal pushes all the Lost values to the stack

..\..........  The @ terminates the program if the % flag is switched
>>\........@.  Otherwise it clears the stack and repeats

.............  The quote here is to prevent the pointer getting stuck
............"  This happens when the pointer starts between the other quotes

11

Jelly , 7/2 = 3,5 Bytes

“ƲÞIȥ’Ḥ

Druckt die Zahlen ohne Trennzeichen, dh die Ganzzahl .4815162342

Probieren Sie es online!

Wie es funktioniert

“ƲÞIȥ’ist ein bijektives Basis-250-Integer-Literal.
Ʋ, Þ, I, Und ȥhat (Basis 1) Indizes , , und in Jelly der Codeseite, so dass sie der ganzen Zahl kodieren .15421741712503154+250221+25074+171=2407581171

Schließlich wird die ganze Zahl verdoppelt (nicht halbiert), was .22407581171=4815162342

Eine Verdopplung ist notwendig, da die Codierung der Ausgabe direkt zu führt “¡9)Ƙ[’, die eine Ziffer enthält.


9

Neim , 6 5 Bytes, 3 2,5 Punkte

Jσς§A

Erläuterung:

J     Push 48
 σ    Push 15
  ς   Push 16
   §  Push 23
    A Push 42
      Implicitly join the contents 
      of the stack together and print

Probieren Sie es online!


6

05AB1E , Score: 10 9 7 Bytes / 2 = 3,5

•‘o]Ê•·

Probieren Sie es online aus.

Oder 7 Bytes Alternative :

•’µ[%•R

Probieren Sie es online aus.

Beide geben die ganze Zahl aus 4815162342.

Erläuterung:

•‘o]Ê•     # Compressed integer 2407581171
      ·    # Doubled

•’µ[%•     # Compressed integer 2432615184
      R    # Reversed

Sehen Sie diese 05AB1E Spitze Mine (Abschnitt Wie große natürliche Zahlen zu komprimieren? ) Zu verstehen , warum •‘o]Ê•ist 2407581171und •’µ[%•ist 2432615184.


Alte 9 Bytes beantworten die Ausgabe der Liste [4,8,15,16,23,42]:

•ΓƒÇ²•т;в

-1 Byte (und damit -0,5 Punkte) dank @Emigna .

Länger als die andere 05AB1E-Antwort , aber dies gibt die Liste [4,8,15,16,23,42]anstelle der Ganzzahl aus 4815162342.

Probieren Sie es online aus.

Erläuterung:

•ΓƒÇ²•       # Compressed integer 1301916192
      т;     # Integer 50 (100 halved)
        в    # Convert the first integer to Base-50 (arbitrary): [4,8,15,16,23,42]

Sehen Sie sich meinen Tipp zu 05AB1E an (Abschnitte Wie komprimiere ich große Ganzzahlen? Und Wie komprimiere ich Ganzzahlenlisten? ) , Um zu verstehen, warum •ΓƒÇ²•ist 1301916192und •ΓƒÇ²•50вist [4,8,15,16,23,42].


1
Sie könnten •ΓƒÇ²•т;вfür 4,5 haben, da Nachskript-Nummern für den Bonus in Ordnung sind.
Emigna

@Emigna Ah, schön! Vielen Dank.
Kevin Cruijssen

6

JavaScript (ES7), 34/2 = 17 Byte

_=>eval(atob`NjUwNTgxMDErNDEqKjY`)

Probieren Sie es online!

Dies decodiert und wertet den Ausdruck aus "65058101+41**6", der keine Ziffer enthält, die einmal in base-64 codiert wurde.

65058101+416=65058101+4750104241=4815162342


JavaScript (ES6), 13 Byte

Langweilige offensichtliche Lösung.

_=>4815162342

Probieren Sie es online!


6

Python 3 , 25 Bytes, 12,5 Punkte

print(*map(ord,'ዏٗ*'))

Probieren Sie es online!

𩦦 (, ⿰ ⿰ 馬 葬, 𧨦 (, 謚 ⿰ 言 ⿱⿵ 八一) kosten 4 Bytes, aber U + 0657 kosten nur 2 Bytes ...


Python 3 , 29 Bytes, 14,5 Punkte

print(ord('𩦦')*ord('湡'))

Probieren Sie es online!

𩦦 𩦦 (⿰ 馬 葬 ist eine Variante von., Was "schmutzig" bedeutet. 湡 ist der Name eines Flusses. Und sie haben nichts mit dieser Frage zu tun, wie ich wusste.


Ich habe nach Trennzeichenregeln gefragt, und wir können jedes einzelne Trennzeichen verwenden, das 4815 162342gültig ist. So print(*map(ord,'ዏ𧨦'))spart 1,5 Punkte :) ( print(*map(ord,'밗'))würde zwei Punkte sparen , sondern wird als ungültig festgelegt wurde).
Jonathan Allan


4

Java 8, Score: 12 11,9 (70% von 17 Bytes)

v->767*6277917L+3

-0,1 Punkte dank @RickHitchcock .

Probieren Sie es online aus.

Erläuterung:

v->               // Method with empty unused parameter and long return-type
  767             //  767
     *6277917L    //  multiplied by 6277917 (as long)
              +3  //  And then 3 is added

Alte Antwort mit einem Score von: 12 (50% von 24 Bytes):

v->(long)''*'Ⓥ'*'䧶'

Enthält ein nicht druckbares Zeichen 0x1B.

Probieren Sie es online aus.

Erläuterung:

v->                   // Method with empty unused parameter and long return-type
  (long)              //  Cast the character (and therefore the result) to a long
        ''            //  27
           *'Ⓥ'       //  Multiplied by 9419
                *'䧶'  //  Multiplied by 18934

In Java können Zeichen automatisch mit Ganzzahlen verknüpft werden, die ihren Unicode-Wert enthalten. Leider ist die maximal unterstützte Unicode für Zeichen 65,535, so dass ich nicht nur zwei Zeichen zu vermehren können (da die beiden größten Zahlen , die die erwartete teilen 4,815,162,342sind 56,802und 84,771, wo die 84,771leider das Maximum überschreitet 65,535.
Da darüber hinaus die maximale Größe ein intist 32 2 -1 ( 2,147,483,647) und das Ergebnis 4,815,162,342ist größer als das, eine explizite Umwandlung in long, die bis zu 64 2 -1 ( 9,223,372,036,854,775,807) enthalten kann, ist erforderlich.


Langweilige Antwort wäre 14 Bytes ohne Boni gewesen:

v->4815162341L

Probieren Sie es online aus.


1
Ich mag dieses. Ziemlich kurz für Java :)
Emigna

@Emigna Danke. Es ist zu schade, dass es die Besetzung erfordert longund keine sehr großen Unicode-Zeichen unterstützt. Ohne die beiden genannten Einschränkungen v->'𩦦'*'湡'wären lediglich (15 Byte, Punktzahl 7,5) ausreichend gewesen. Aber es ist immer noch sehr kurz. :) Obwohl Java meist viele, viele Schwächen in Bezug auf Codegolf hat (duhh ..), ist das Rechnen mit Zeichen, weil wir keine Ziffern verwenden dürfen, eine der wenigen Stärken. War auch ziemlich nützlich in dieser ziemlich ähnlichen Antwort von mir .
Kevin Cruijssen

1
11,9 Bytes: v->767*6277917L+3
Rick Hitchcock

3
@ RickHitchcock Es kommt nicht jeden Tag vor, dass 0,1 Byte eingespart werden. ;)
Arnauld

@ RickHitchcock Danke! Und ich stimme dem obigen Kommentar von Arnauld zu. : D
Kevin Cruijssen

4

R, 18 × 0,7 = 12,6 Punkte

cat(9*2*267509019)

Ziemlich selbsterklärend, rechnet nur unter Vermeidung der fraglichen Zahlen.


4

7 , 10 Bytes, 27 Zeichen

115160723426754314105574033

Probieren Sie es online!

Die gepackte Darstellung dieses Programms auf der Festplatte ist ( xxdFormat):

00000000: 269c 3a71 6f63 308b 7c0d                 &.:qoc0.|.

Erläuterung

Wir haben diese Zahlenfolge bereits in Automate Saving the World gesehen , in dem es darum ging, die Zahlen in regelmäßigen Abständen zu drucken, was es interessant macht, eine sehr alte Sprache zu verwenden. Viel neuere Sprachen können jedoch ihre eigenen Wendungen haben, die diese Herausforderung interessant machen. (Ja, dieser Absatz und in der Tat der Grund, warum ich diese Antwort geschrieben habe, ist effektiv nur ein Weg, um alle damit verbundenen Herausforderungen in der Seitenleiste zusammen zu bringen. Normalerweise machen die Leute das mit Kommentaren, aber ich habe nicht genug Repräsentanten .)

Als erstes ist zu beachten, dass 7 vollständig aus Ziffern besteht, so dass es unwahrscheinlich ist, dass die Boni hier verwendet werden (obwohl, wenn Sie das Programm als eine Folge von Oktetten betrachten, keine der beiden ASCII-Darstellungen einer der ursprünglichen Zahlen entspricht) , so könnten Sie den Bonus in diesem Sinne beanspruchen). Als nächstes ist zu beachten, dass 7 Befehle zum Wiederherstellen der Befehlssequenz enthält, die wahrscheinlich ein bestimmtes Datenelement erzeugt hat. Könnten wir also die verlorenen Zahlen möglicherweise 4815162342als Teil eines 7-Programms interpretieren ?

Die Antwort lautet "nicht ganz". Der problematischste Teil ist die zweite Zahl 8. 7 Programme sind oktal geschrieben; Es gibt keine Zahl wie 8. Der Anfang der Zeichenfolge muss also anders gedruckt werden.

Die Basis des Programms basiert daher auf dem Programm 7 "Hallo Welt":

5431410557403
543141055          string literal
         7         separate data from code
          4        rearrange stack: {program's source}, empty element, {literal}
           0       escape {the literal}, appending it to {the empty element}
            3      output {the escaped literal}, pop {the program's source}

mit dem maskierten Literal in einer domänenspezifischen Sprache, die wie folgt interpretiert wird:

5                  output format: US-TTY using pairs of digits in the string
 43                select character set: digits and common symbols
   14              "4"
     10            "8"
       55          forget the set output format

Danach folgt ein zusätzliches 3Element, das das verbleibende Stapelelement ausgibt (und aufgrund eines unzureichenden verbleibenden Stapels beendet wird). Dieses Element wird zu Beginn des Programms angegeben. Um zu vermeiden, dass das Element nicht übereinstimmt 6(was ein bisschen wie eine schließende Klammer funktioniert), generieren wir es mit Code, anstatt es direkt als Daten zu schreiben. (Beachten Sie, dass es 7zu Beginn des Programms zwei implizite Zeichen gibt , die hier relevant sind):

{77}115160723426
 7                 empty stack element
  7 11516          append "1151"
         0         append "6"
          723246   append "2324"

Das ergibt das folgende Literal:

115162324
1                  set output format: literally as octal
 15162324          "15162324"

das wird ausgedruckt.


Es fühlt sich komisch an, dass Sie keinen Ruf haben, obwohl Sie einige ziemlich gute Antworten veröffentlicht haben. Ich habe Ihre Argumentation für das Posten von Community-Antworten gelesen und unterstütze Sie dabei voll und ganz, aber es muss manchmal ärgerlich werden, wenn Sie keine Kommentare abgeben können:(
Jo King,

@JoKing: Nun, es hat mich dazu inspiriert, tatsächlich eine Antwort auf diese Frage zu schreiben, und es hat sich als viel interessanter herausgestellt, als ich erwartet hatte. Ich denke, dies ist ein weiterer Beweis für meine Hypothese, dass Ihre Beiträge, wenn Sie keinen Ruf suchen, für die Website vorteilhafter sind als sonst. (Der größte Frust, den ich habe, wenn ich ständig bei 11 Reputationen feststecke, ist, dass ich keine Änderungen für Meta vorschlagen kann. Wenn ich dort Fehlinformationen sehe, habe ich keine Möglichkeit, dies zu korrigieren.)
ais523


3

MASM 8088 Assembly-Quelle (93 Byte - 50%) = 46,5 Byte

Verwenden Sie keine Zahlen oder die Reihenfolge in der Quelle:

MOV AH,'P'-'G'
LEA DX,L
INT '!'
RET
T EQU '-'-'+'
L DW 'ph'/T,'jb'/T,'lb'/T,'fd'/T,'dh'/T,'$'

Ausgabe:

A>LOST.COM
4815162342

2

Kohle , 13 Bytes / 2 = 6,5

IETPIHA.⁻⁸⁸℅ι

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Subtrahiert die ASCII-Codes der Zeichenfolge TPIHA.von 88 und wandelt sie in Zeichenfolge um.


2

Aheui (Esotop) , 45 Bytes (15 Zeichen) * 0,5 = 22,5 Punkte

반밤밪박밭빠따받발따밣뱣히망어

Probieren Sie es online!


Erläuterung:

Siehe dies auch; Aheui Referenz ( Englisch )

Aheui program starts with default stack '아'(or none)

반: push 2, move cursor right by 1(→).
밤: push 4, →
밪: push 3, →
박: push 2, →
밭: push 4, →
빠: dup, →
따: pop 2, push mul result(16).
받: push 3, →
발: push 5, →
따: pop 2, push mul result(15).
밣: push 8, →
뱣: push 4, move cursor right by 2(→→).
히: end.
망: pop 1, print, → (if stack is empty, move cursor left by 1.)
어: move cursor left by 1(←).

Beachten Sie, dass ㅁ (Druckanweisung) den Cursor in umgekehrter Richtung bewegt, wenn der Stapel (oder die Warteschlange) leer ist.




1

JavaScript, 143 Bytes (nicht sicher, wie man punktet)

(g=`${2*2}`)=>g.repeat(6).replace(/(.)/g,(m,p,i,k='')=>
  (k=m*[g-3,g-2,g,g,+g+2,g*3-1][i]
  ,RegExp(`${g-2}|${g}`).test(i)?k-1:i==+g+1?k-(g/2):k))

Probieren Sie es online!

Beginnen Sie mit 4Sechsern, multiplizieren Sie, addieren Sie, subtrahieren Sie, um, von 4, um die Ausgabe abzuleiten.


2
Ok, Sie haben versucht, den Bonus zu bekommen, aber mit einem Code dieser Größe konnte dies nicht ausgeglichen werden. Warum nicht einfach '4815162342'?
Eduardo Hoefel

@EduardoHoefel Sammle nicht das "Score" - oder "Bonus" -System, habe nicht versucht, den Bonus zu erhalten, sondern nur versucht, keine der für die Ausgabe erforderlichen Zahlen zu verwenden. Der Code gibt die Zahlen aus, ohne eine der Zahlen fest zu codieren. Die Zahl 4mit Addition, Subtraktion, Multiplikation und dem Index der Zahl 4innerhalb eines Strings (oder Arrays) kann verwendet werden, um die erforderlichen Zahlen abzuleiten.
guest271314

Ihr Ergebnis ist143*0.7=100.1
Jo King

1

PHP, 35/2 = 17,5

<?=zzzzzzzzzzzzzzz^NVBVKOVKLVHIVNH;

ein digitaler Ansatz: 40 * .7 = 28

<?=2+2,_,5+3,_,17-2,_,17-1,_,17+6,_,7*6;

Keine Ziffern, keine Zeichenketten: 68/2 = 34

<?=$p++,!$p++,$p+=$p,_,$p+=$p,_,~-$q=$p+$p,_,$q,_,--$p+$q,_,$p*~-$p;

Probieren Sie sie online aus .


1
Oder nur 14 Bytes für<?=4815162342;
Jo King

1
OP hat nicht geantwortet, ob wir die Begrenzer weglassen können oder nicht; aber ja. Warum nicht nur 10 Bytes: 4815162342. Oder <?=~+ 10 nicht druckbare Dateien -> 15/2 = 7,5
Titus

1

JavaScript (SpiderMonkey), 67 Bytes / 2 = 33,5 60 Bytes / 2 = 30 58 Bytes / 2 = 29 48 Bytes / 2 = 24

-7 Bytes / 3,5 , -2 Bytes / 1 mit freundlicher Genehmigung von @JoKing, -10 Bytes / 5 mit freundlicher Genehmigung von @tsh

print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)

Probieren Sie es online!


1
print(a=-~-~-~-~[],a+=a,b=a+~-a,a+a,a+b,--b+b+b)
Dienstag,

2
Oder nur print(4815162342)für 17 Bytes
Jo King



1

Leerzeichen , Punktzahl: 49 41 Bytes / 2 = 20,5

[S S S T    S S S T T   T   T   T   S S S S S S S T T   S S S T S T T   T   T   T   S S T   T   S N
_Push_4815162342][T N
S T _Print_number]

Buchstaben S(Leerzeichen), T(Tabulator) und N(Zeilenumbruch) werden nur als Hervorhebungen hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).

Pseudocode:

Integer i = 4815162342
Print i as number to STDOUT

Erläuterung:

In Leerzeichen wird eine Zahl wie folgt verschoben:

  • S: Stack-Manipulation aktivieren
  • S: Nummer drücken
  • S/ T: Positiv / negativ
  • Einige T/ Sgefolgt von einer einzelnen N: Dezimalzahl als Binärzahl, wobei T1 und S0 ist

Danach wird es einfach gedruckt mit TNST:

  • TN: I / O aktivieren
  • S: Gibt den oberen Teil des Stapels aus
  • T: Als Nummer

Ist es einfach, die Zahl selbst länger zu drücken als die zusätzlichen Multiplikations- und Push-Integer-Anweisungen?
Jo King

@JoKing Ich verwende normalerweise den vii5ard-Online-Whitespace-Compiler , da er die Befehle auf der linken Seite hervorhebt und anzeigt . Aber anscheinend funktioniert es ähnlich wie Java-Ganzzahlen, da das Maximum 32 Bit beträgt und es sich um das Negative darüber dreht. Die Zahl war also zu groß, um in einem Zug verschoben zu werden. Wenn ich die Nummer in TIO drücke , funktioniert es jedoch einwandfrei, was ich jetzt merke.
Kevin Cruijssen

1

F #, 45 Bytes = 22,5 Punkte

Nur eine gewöhnliche forSchleife, die die Ziffern druckt:

for c in"DHOPWj"do printf"%d"(int c-int '@')

Das obige ist ein vollständiges Programm, das in eine ausführbare Datei kompiliert werden kann.

In einer REPL (Read-Eval-Print-Schleife), z. B. FSI (F # Interactive), funktioniert die folgende kürzere Version, da die REPL eine Darstellung des ausgewerteten Ausdrucks ausgibt. es hat 35 Bytes = 17,5 Punkte:

[for c in"DHOPWj"->int c-int '@'];;

1

Pyke , 3 Punkte

77 91 f8 86 98 06

Probieren Sie es hier aus!

Das erste Byte gibt an, dass die Basis 128 eingelesen werden soll, bis ein Byte ohne das hohe Bit gesetzt ist.

Schließlich werden 32 vom Ergebnis abgezogen (aus historischen Gründen).

Dies ermöglicht die Erzeugung großer Stückzahlen auf kleinstem Raum


1

MathGolf , 7 Bytes * 0,5 = 3,5

ÿ≤┼ÇÅ$∞

Probieren Sie es online!

Erläuterung

Beachten Sie, dass dieser Code auf TIO noch nicht funktioniert. Ich habe kürzlich einige Änderungen an MathGolf vorgenommen, einschließlich des Hinzufügens des $Operators. Sobald es zu TIO gezogen wird, können Sie es dort ausführen. Ich werde dann ein Update für diese Antwort vornehmen. Es läuft perfekt im Terminal

ÿ≤┼ÇÅ     Push "≤┼ÇÅ"
     $    pop(a), push ord(a) (pushes 2407581171)
      ∞   pop a, push 2*a

Ich nutze die Tatsache, dass MathGolf 1-Byte-Literale zum Erstellen von Zeichenfolgen mit einer Länge von bis zu 4 hat. Wenn ich die gesamte Zahl von einer Basis-256-Zeichenfolge konvertieren wollte, hätte ich zwei verwenden müssen ", und die Zeichenfolge wäre 5 gewesen Zeichen. Auf diese Weise spare ich 2 Bytes, aber ich verliere ein Byte, indem ich am Ende den Verdopplungsoperator habe.






1

Runenverzauberungen , 15/2 = 7.5

\>`*`
Rn$!;

Probieren Sie es online!

Codiert die Werte einfach in so wenigen Bytes wie möglich. 42, 16, 15, 8, Und 4, nötigt sie numerische Werte und druckt sie in umgekehrter Reihenfolge. 4 8 15 16 42ohne Leerzeichen, wie 48151642ein akzeptables Ausgabeformat.

4und 8konnte nicht kombiniert werden ( 48), da dies eine Zahl ist 0und nicht verwendet werden durfte. Es ist möglich, 15, 16 und 42 zu 2 Zeichen (anstelle von 3) ʂauf Kosten von +1 Byte zu kombinieren , was sich nicht gelohnt hat.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.