Vermeiden Sie es, Buchstaben zwischen fünf einfachen Programmen zu wiederholen

12

Deine Herausforderung besteht darin, 5 verschiedene vollständige Programme für die 5 folgenden Aufgaben zu schreiben:

  1. Drucken Hello, World!

  2. Bei einer Eingabe mit STDIN und Ausgabe der Fakultät kann davon ausgegangen werden, dass die Eingabe eine Ganzzahl> = 0 ist

  3. Berechnen Sie bei einer ganzen Zahl N die Summe der Primzahlen <= N

  4. Bei einer Eingabe mit STDIN geben Sie die in der Eingabe verwendeten Buchstaben aus. Zum Beispiel: Die Eingabe ist Hello world, müssen Sie ausgeben helowrd. Beachten Sie, dass die Ausgabe in Kleinbuchstaben erfolgt. Sie können davon ausgehen, dass die Eingabe bei Whitespaces immer alphabetisch ist, die Whitespaces werden ignoriert.

  5. Gib den folgenden Diamanten genau so aus:

       *
      ***
     *****
    *******
     *****
      ***
       *
    

All diese Herausforderungen sind wahrscheinlich sehr einfach, aber es gibt einen Haken. Jeder Buchstabe, den Sie verwenden, kann in den anderen Programmen nicht mehr verwendet werden. Dies ist nicht verboten, führt jedoch zu einer Strafe von +8 Bytes . Wenn dies beispielsweise Ihr Programm für die erste Aufgabe ist:

print("Hello, World!");

Dann können Sie nicht die folgenden Buchstaben (in Groß- oder Klein Form): p, r, i, n, t, h, e, l, o, w, din den anderen Programmen. Wenn Sie sie verwenden müssen, können Sie jeden Buchstaben für 8 Bytes "kaufen". Wenn Sie den Buchstaben also lerneut in einem anderen Programm verwenden möchten , erhalten Sie eine Strafe von 8 Byte. Nachdem Sie die Strafe bezahlt haben, können Sie in diesem Programm jeden Buchstaben so oft verwenden, wie Sie möchten. Andere Charaktere spielen keine Rolle. Außerdem sollten alle 5 Programme in derselben Sprache sein.

Das ist , also gewinnt die geringste Anzahl von Bytes!

Adnan
quelle
3
Dies ist eine etwas andere Herangehensweise an Herausforderungen, die wir bereits hatten, aber nicht anders genug, um in meinen Augen kein Multi-Dupe zu sein.
Mego
3
@Mego Ich würde dafür stimmen, dies als Multi-Duplikat ohne die Einschränkung zu schließen, aber die Einschränkung macht es zu einem ganz neuen Spiel.
Trichoplax
1
Wenn Sie einen bestimmten Buchstaben in 3 Programmen verwenden, zahlen Sie die 8-Byte-Strafe zweimal (16 Byte)?
Trichoplax
1
@ Trichoplax, ja, Sie zahlen 16 Bytes
Adnan
1
@ Trichoplax Kaum. Die bestehenden Lösungen für die betrogenen Probleme werden weiterhin wettbewerbsfähig sein. Die Top-Lösung ist nur die Verkettung der Lösungen der betrogenen Fragen mit einer höheren Punktzahl aus der Strafe.
Mego

Antworten:

10

CJam, 73 Bytes

"Obkkh+'Phukc&"7f^
q~m!
ri){'j3+_3++~},:+
lS-el_&
4{_' *4@-Y*('**+}%_1>W%\+N*

Jede Zeile ist ein vollständiges Programm. Probieren Sie sie online aus: 1 | 2 | 3 | 4 | 5

Buchstabenkarte

 bc  f h  k   op    u       18
            m   q            4
        ij       r          17
    e      l      s          7
             n        w y   27

Wenn Sie möchten (und jedes Ihrer Programme in eine Zeile passt), können Sie mit diesem CJam-Programm eine Buchstabenübersicht für Ihre eigene Einreichung erstellen.

Dennis
quelle
Beweis, dass kein Javascript dafür erstellt wurde: Ihre gesamte Einsendung umfasst weniger als 2 meiner Programme. XD +1, gute Arbeit.
Addison Crump
4

Pyth, 90 Bytes

Erster Versuch...

Aufgabe 1: 20 Bytes

+"Hello, "+C87"orld!

Aufgabe 2, 3 Bytes

.!Q

Aufgabe 3, 9 Bytes

sf}TPTSvz

Aufgabe 4, 6 + 8 = 14 Bytes

@G{rw0

Aufgabe 5, 44 Bytes

"   *
  ***
 *****
*******
 *****
  ***
   *
Lirtosiast
quelle
3

osascript, 759 Bytes

Ich wusste, dass dies eine Menge werden würde, als ich anfing. oo

Aufgabe 1: 15 Bytes

"Hallo Welt!"

Ich wusste, dass es von diesem Punkt an schlimm werden würde.

Aufgabe 2: 64 + 8 * 4 = 96 Bytes

auf rennen a
setze o auf 1
wiederhole a
setze o auf a * o
setze a auf a-1
Ende
Ö
Ende

Oh gawd.

Aufgabe 3: 170 + 8 * 13 = 274 Bytes

auf rennen a
setze o auf 0
setze t auf false
wiederhole mit i von 2 bis a
setze t auf true
Wiederholen Sie mit c von 2 bis i-1
wenn i mod c = 0 ist, setze t auf false
Ende
wenn t dann setze o auf o + i
Ende
Ende

Dennis war außer sich.

Aufgabe 4: 225 + 8 * 13 = 329

auf rennen a
setze o auf ""
Wiederholen Sie mit i in Elementen von a
Wiederholen Sie mit c in Zeichen von i
wenn c nicht in o ist, dann
wenn ASCII-Nummer von c <91 dann
setze o auf o & (ASCII-Zeichen von (ASCII-Nummer von c + 32))
sonst
setze o auf o & c
Ende
Ende
Ende
Ende
Ö
Ende

...

Schritt 5: 45 Bytes

"*
  ***
 *****
*******
 *****
  ***
   * "

Also ja. Ich wusste von Anfang an, dass ich verlieren würde. Aber es war interessant, es würde mich interessieren, ob es einen Weg gibt, dies mit weniger Charakteren zu tun. Zeichentabelle (wie von Dennis bereitgestellt):

   de hlorw 15
ein cdef hi lmnop rstu w 160
a de nop rstu 57
abcdef hi lmnop rstu w 214
                            39
                             0

Die oben angegebene Zeichenanzahl ist geringfügig falsch - bei Zeilenumbrüchen wurden Probleme festgestellt, da die Zeilenumbrüche nicht gezählt wurden.

ANMERKUNG: Der Grund dafür, a's charactersdass 'solche Dinge nicht verwendet werden, ist, dass das Zeichen verwendet werden muss, wenn es über die JavaScript-Befehlszeile ausgeführt wird. Wenn ich verwendet hätte ', müsste ich verwenden \'oder etwas ähnliches, was mir überhaupt nicht geholfen hätte. Außerdem erkennt es nur "als String Capturer, so dass ich irgendwie auch dort geschraubt wurde. Aber das hat Spaß gemacht.

Addison Crump
quelle
1

NARS2000 APL, 144 Bytes (85 Zeichen)

Aufgabe 1, 21 Bytes (17 Zeichen)

⎕←"Hello, World!"

Aufgabe 2, 10 Bytes (4 Zeichen)

⎕←!⎕

Aufgabe 3, 22 Bytes (11 Zeichen)

⎕←+/¯2π⍳2π⎕

Aufgabe 4, 53 Bytes (29 Zeichen)

⎕←∪Q[26∣Q⍸⍞∩Q←⎕AV[97+⍳26]∪⎕A]

Aufgabe 5, 38 Bytes (24 Zeichen)

⎕←" *"[1+4<∘.+⍨(⍳3),⊖⍳4]
Oberon
quelle
1
Sind das eigentlich volle Programme? Ich kenne NARS2000 nicht (und es ist auf meiner Plattform nicht verfügbar), aber für alle mir bekannten Dialekte muss festgelegt werden, dass außerhalb einer REPL gedruckt werden soll.
Dennis
@ Tennis Sorry, hab vergessen, dass ich in der REPL rumgespielt habe.
Oberon
Sie dürfen keine Leerzeichen für den Diamanten ausgeben.
Lirtosiast
1

Jelly , 46 Bytes (nicht konkurrierend)

“3ḅaė;œ»
Ɠ!
ÆRS
ɠQḲŒl
4Ḷ¤‘+¤ṖṚṭ×”*Fµ4Ḷṭ4ḶṚṖ¤F×⁶+⁸Y

Probieren Sie es online! (Kopieren Sie jedes Snippet und fügen Sie es ein.)

Anscheinend hat die Einschränkung das Golfen nicht eingeschränkt :) Nur Vorschläge für den letzten, natürlich, bitte.

Erik der Outgolfer
quelle