Schreiben Sie ein Skript, das in die Standardausgabe oder in die entsprechende Sprache 100 Zeilen (gültigen) Java-Code schreibt, der mit Folgendem beginnt:
class Tuple1 {public Object _0;}
class Tuple2 {public Object _0,_1;}
class Tuple3 {public Object _0,_1,_2;}
class Tuple4 {public Object _0,_1,_2,_3;}
class Tuple5 {public Object _0,_1,_2,_3,_4;}
class Tuple6 {public Object _0,_1,_2,_3,_4,_5;}
class Tuple7 {public Object _0,_1,_2,_3,_4,_5,_6;}
class Tuple8 {public Object _0,_1,_2,_3,_4,_5,_6,_7;}
class Tuple9 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8;}
class Tuple10 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8,_9;}
class Tuple11 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10;}
class Tuple12 {public Object _0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11;}
Die letzte Zeile sollte mit beginnen class Tuple100
.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
public static void main(String[] args)
dass Sie auf jeden Fall eine Funktion geben, wenn Sie möchten.n
Tupel-Generator, den ich in Java geschrieben habe, mit anderen zu teilen : github.com/kenzierocks/Tuplocity . Es werden vollständig generische Tupel generiert!Antworten:
Jolf, 42 Bytes
Bekomme ich Bonuspunkte, wenn ich Jelly mit der besten Punktzahl aller Zeiten besiege? Enthält nicht druckbare Dateien. Versuchen Sie es hier online . Ich habe die unprintables mit ihrem jeweiligen Alt-Index zur besseren Lesbarkeit ersetzt.
Erläuterung
quelle
vim
5654 tastenanschlägeDa V abwärtskompatibel ist, können Sie es online ausprobieren!
Dies ist die perfekte Aufgabe für Vim! Ich könnte es später ein bisschen mehr Golf spielen. Beachten Sie auch, dass
<c-a>
dies Strg-A bedeutet und als ein Tastendruck zählt.Erläuterung:
quelle
yy
durch ersetzenY
.class Tuple101
, nichtclass Tuple100
wie die Frage fragt.Jelly, 44 Bytes
Meine erste Gelee Antwort. Probieren Sie es online!
quelle
Pyth,
535048 BytesProbieren Sie es online!
Einfache Iteration über den Bereich (1.100) und Erstellen der entsprechenden Zeichenfolge aus einer gepackten Zeichenfolge durch Formatieren.
Erläuterung
Der entpackte String ist
class Tuple%i {public Object _%s;}
quelle
s[
anstelle von allen diesen+
.[
erstellt eine Liste mit beliebiger Länge unds
verkettet sie. Auch, da Sie wollen[1, 2, ... 100]
, nicht[0, 1, .. 99]
verwendenVS100
, und Sie werden auch nicht brauchenh
.S
-trick! :) Habe schon drauf gesessen das alles loszuwerden++++
, ich wusste es gibt einen besseren Weg."
unnötigerweise ein Trailing hinzugefügt zu haben .j<str><int>
nichtU
?CoffeeScript,
8684 BytesSehen Sie sich die Lösung online an
quelle
for
noch den nachin
.)console.log"
Arbeit? (Ich weiß nicht, Kaffee-Skript, das ist ein allgemeiner Trick.x? y:z
vonx ? y:z
. Das kann manconsole.log?"hello"
aber nicht sagenconsole.log"hello"
. Signifikantes Leerzeichen. Mal schön, mal komisch.Java,
160, 125 BytesVielen Dank an @DenkerAffe, @Denham Coote und @Mathias Ettinger für die Verbesserungen.
Java Schreiben von Java (weil jemand musste!)
Und die Version ohne Golf
quelle
public static void main...
Zeug zu sparen .class Tuple1 {public Object _0,;} class Tuple2 {public Object _0,_1,;}
i++
String s = "_0"
damit Sies += ",_" + i
ein Byte speichern können. Es wird auch das Problem mit dem nachfolgenden Koma lösen. Sie müssen die for-Schleife von starten1
auf weniger als gehen,101
und Sie müssen in der Lage sein, zusätzliche 4 Bytes zu entfernen, indem Sie das(i+1)
in Ihrer Ausgabenachricht in nur konvertiereni
. Offensichtlich müssen Sie vor dem Inkrementieren druckens
.Oracle SQL 9.2,
138137 Bytes@ Peter Danke, dass du auf den Fehler 0/1 hingewiesen hast.
Die Abfrage verwendet die hierarchische Abfrage CONNECT BY CLAUSE, um 100 Zeilen zu generieren.
Die LEVEL-Pseudospalte enthält die Zeilennummer jeder Zeile.
SYS_CONNECT_BY_PATH verketten den ersten Parameter, die Zeilennummer jeder Zeile, und verwenden den zweiten Parameter als Trennzeichen.
quelle
Object _1
anstattObject _0
, so dass noch zwei Bytes (-1
) benötigt werden. Das_
kann jedoch zum Zeichen von hinzugefügt werden,SYS_CONNECT_BY_PATH
anstatt es zu verketten, wodurch es wieder um zwei Bytes reduziert wird:REPLACE('class Tuple'||LEVEL||' {public Object'||SYS_CONNECT_BY_PATH(LEVEL-1,',_')||';}','t,_','t _')
Batch, 128 Bytes
Bearbeiten: 10 Bytes dank @Bob gespeichert. 1 Byte dank @ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ gespeichert.
quelle
enabledelayedexpansion
für 117 Bytes: gist.github.com/Elusive138/4cea555114a979954dcb - wenn Sie nicht das Konsolenfenster dagegen Schließen Sie zwei weitere durch das Entfernen sparen können/b
von argexit
.@echo off
Retina ,
80 bis79 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
quelle
Powershell - 65 Bytes
(Geändert als Antwort auf einen Kommentar.)
Alle Kredite an TimmyD
quelle
Perl 6 , 65 Bytes
quelle
R -
199132123118 BytesVersion 4
Version 3
Version 2
Version 1
quelle
=
für die Zuweisung verwenden, anstatt<-
.for(i in 1:100){f=(p=paste0)("class Tuple",i," {public Object ");for(j in 0:(i-1))f=if(j<i-1)p(f,"_",j,",")else p(f,"_",j,";}");cat(f,sep="\n")}
Ruby, 71 Bytes
quelle
[*0..i]*',_'
wowJava, 103 Bytes
Mein erstes Mal hier. Hallo! Ich habe mich für einen Java8-Lambda-Ausdruck entschieden (auch bekannt als anonyme Funktion).
Ungolfed-Version
Um dies tatsächlich zu verwenden, müssen Sie es, wie in Java8 üblich, einer Variablen einer geeigneten funktionalen Schnittstelle zuweisen (oder in eine solche umwandeln) und dann ihre Methode aufrufen. aber technisch ist die Funktion nur der Lambda-Ausdruck selbst, also zähle ich nur das.
Außerdem ist ein Eingabeparameter erforderlich, der mir einige Bytes erspart, da ich ihn als lokale Variable missbrauchen kann, ohne seinen Typ angeben zu müssen. Ich bin mir nicht sicher, ob dies als Betrug angesehen wird, aber für mich scheint es innerhalb der Regeln zu liegen: Ich habe nur Leute gesehen, die sagten, dass das Posten einer Funktion erlaubt ist, nicht wie diese Funktion aufgerufen werden muss. :) Und es liest den Parameter nicht wirklich, so dass die Funktion immer noch in sich geschlossen ist; Sie können einen beliebigen String oder sogar null übergeben, und es wird immer noch die richtige Ausgabe erzeugt.
Und so benutzt man es:
quelle
Python 2, 96
Python 3, 98
Verwendung:
Ungolfed:
bildner:
103
108
quelle
print f(3)
ergibt:class Tuple1 {public Object _0;}
class Tuple2 {public Object _0,_1;}
class Tuple3 {public Object _0,_1,_2;}
class Tuple4 {public Object _0,_1,_2,_3;}
class Tuple%d {public Object _0,_1,_2,_3
CJam, 53 Bytes
Probieren Sie es hier aus .
quelle
Groovig, 74 Zeichen
"join ()" ist unschlagbar ... Neue Lösung dank @yariash
Alte Lösung, 78 Zeichen:
quelle
100.times{}
anstelle von verwenden(1..100).each{}
.Julia, 77 Bytes
quelle
Lua,
128106 BytesIch versuche immer noch, eine Möglichkeit zu finden, direkt an einem gedruckten Wert und nicht an einer Zeichenfolge zu arbeiten.
Edit: Teilweise gefunden! Ich brauche noch eine Zeichenfolge für den Teil "_0, _1 ...", aber es ist schon besser :).
Alte 128-Byte-Lösung
Ungolfed
quelle
Python 3,
111109105 BytesEs ist nicht die kürzeste Sache der Welt, ich nehme nur teil.
edit1: 2 Bytes runter durch entfernen
0,
zuerst in entferntrange
edit2: Ich habe unnötigerweise
int
auf gewirkt ,str
anstatt nur%i
... Down to 105 zu verwenden.quelle
range(i)
anstelle vonrange(0,i)
oder da Sie esrange
zweimal verwendet haben, versuchen Sie esr=range
vorzeitig und verweisen Sie dann auf jeden Anruf mit nurr
(wie in den anderen Python-Lösungen).range
standardmäßig bei 0 zu beginnen. 2 Bytes weniger, aber das Hinzufügenr=range;
am Anfang ergibt genau die gleiche Zeichenanzahl, das habe ich versucht! : D',_'.join(map(str,range(i)))
Ist hier 7 Bytes kürzer.Mathematica, 130 Bytes
quelle
\n
Kann durch ein wörtliches Zeilenumbruchzeichen ersetzt werden.Scala, 85 Bytes
quelle
Java, 116
(nur für die Druckfunktion - dies steht laut einigen Kommentaren im Einklang mit den Regeln)
quelle
PHP, 112 Bytes
quelle
<?php for($i=0;$i<100;$i++){$m.=$i==0?"_$i":",_$i";echo 'class Tuple'.($i+1)." {public Object $m;}\n";}
echo 'class Tuple'.($i+1)." {public Object $m;}\n";
kann auch verwendet werdenecho'class Tuple',$i+1," {public Object $m;}\n";
, was 3 Bytes kürzer ist. Außerdem können Sie laut Meta das entfernen<?php
und davon ausgehen, dass Ihr Code mit ausgeführt wirdphp -r "code"
. Sie können auchfor(;++$i<101;)echo"class Tuple$i {public Object ",$m=($m?"$m,":'')."_$i",";}\n";
für 80 Bytes tun (Sie müssen die\n
durch eine echte Newline ersetzen ). Versuchen Sie es hier: ideone.com/oOzKtPIm Ernst, 55 Bytes
Hexdump (umschaltbar mit
xxd -r
):Probieren Sie es online!
Ja, diese Newline soll da sein.
Erklärung (Newline ersetzt durch
\n
):quelle
Japt, 52 Bytes
Das
?
sollte das Literalbyte 0x95 sein. Online testen!Japt hat:
Ich kann nicht einmal ein Semikolon in der Zeichenfolge verwenden, da die darin eingeschlossene Funktion alles nach dem Semikolon zurückgeben möchte. Dies sollte nur 46 Bytes sein:
Aber leider ist es nicht. Ich werde sehen, ob ich diese Fehler in den nächsten Stunden beheben kann.
Wie es funktioniert
quelle
X
übrigens die erste erhöhen.Javascript,
112110 Bytes2 Bytes weg danke @ CᴏɴᴏʀO'Bʀɪᴇɴ .
Ungolfed:
quelle
${i+1}
mit${i++}
und ersetzen${[...Array(i++)]
mit${[...Array(i)]
.++i
Groovy, 97 Bytes
Probieren Sie es online!
quelle
join','
), entfernen Sie Leerzeichen nach println und ersetzen.collect{}
mit*.with{}
Python 2, 96 Bytes
Vielen Dank an @DenkerAffe für den Vorschlag zur Verwendung
lambda
.Danke @MathiasEttinger für die
join
Idee.quelle
reduce(lambda x,y:'%s,_%s'%(x,y), r(i))
',_'.join(map(str,r(i)))
um zusätzliche 14 Byte zu entfernen (oder um 15 Byte zu entfernen, da Sie einen zusätzlichen Speicherplatz in Ihrer Datei belassen habenreduce
).C ++,
164159157 Bytes (155 nur als Funktion)Dies ist ein volles Programm. Sie können 2 Byte in Funktion speichern nur bilden , wenn Sie ersetzen
int main()
mitvoid f()
.Führen Sie Code in Ideone aus
Ungolfed, einschließlich Makroexpansion
quelle
j=1
in Ihrer for-Schleife arbeiten, ohne dieif(j)
.for(int j=0;++j<=i;)
ein weiteres Byte sparen.