Zeichenfolgen drucken, ohne Zeichen zu teilen

15

Bearbeiten: Darf Leerzeichen wiederverwenden.

Ihre Aufgabe ist es, n Programme (oder Funktionen oder Funktionskörper ohne Verwendung von Parametern oder Funktionsnamen) in derselben Sprache zu schreiben . Das k- te Programm sollte die (Kardinal-) Zahl k in Standard-Englisch in Kleinbuchstaben ausgeben (mit optionalem abschließendem Zeilenumbruch). Das erste Programm sollte also ausgegeben werden one, das zweite sollte ausgegeben twowerden usw. Bei einer Zahl mit zwei Teilen sollten diese durch einen Bindestrich getrennt werden twenty-one.

Zwei Programme in Ihrer Übermittlung können jedoch keine Nicht-Leerzeichen oder Leerzeichen gemeinsam verwenden, um nützliche Arbeiten auszuführen. Wenn zum Beispiel Ihr erstes Programm gerade ist "one", dann kann keines von " o nund ewieder in Ihren anderen Programmen verwendet werden.

Sie können in zwei oder mehr Programmen Leerzeichen (Leerzeichen, Zeilenumbrüche und Tabulatoren) verwenden, wenn diese nur als Trennzeichen oder Einrückung dienen und nichts für sich tun. Sie können sie also nicht in der Whitespace- Sprache wiederverwenden und Sie können sie nicht in Zeichenfolgen in mehr als einem Programm verwenden.

Sie können nur druckbare ASCII-Zeichen, Tabulatoren und Zeilenumbrüche (einschließlich CR und LF) verwenden. Jedes Programm muss mindestens 1 Zeichen enthalten.

Ihre Punktzahl ist die Summe von 1 / Programmgröße ^ 1,5. Höchste Punktzahl gewinnt. Sie können dieses Stack-Snippet ( oder diesen CJam-Code ) verwenden, um Ihre Punktzahl zu berechnen:

function updatescore(a){var l=a.value.split("\n"),s=0;for(var i=0;i<l.length;i++){var t=l[i].length;t-=t&&l[i][t-1]=="\r";if(t)s+=Math.pow(t,-1.5);}document.getElementById('result').textContent=s;}
<textarea id="input" placeholder="Put your code here, one per line." style="width:100%;height:150px;box-sizing:border-box" oninput="updatescore(this)" onpropertychange="updatescore(this)"></textarea><div>Your score: <span id="result">0</span></div>

jimmy23013
quelle
Eine bessere Bewertungsregel kann die Summe von 1 / (Programmgröße + c) ^ 1,5 sein, wobei c eine Konstante ist. Aber ich denke, es ist wahrscheinlich zu spät, um das zu ändern.
Jimmy23013
Können wir einen Multiplikator für das Erreichen einer höheren Kardinalzahl hinzufügen, da dies das Ziel zu sein scheint? Ich wurde zwölf, höher als alle anderen, aber ich verliere immer noch.
mbomb007
@ mbomb007 Tut mir leid, dass ich Headsecks absichtlich niedriger bewertet habe. Aber wenn Headsecks eine ähnliche Punktzahl wie andere hat, wird Glypho vermutlich zu viel gewinnen (um nicht zu sagen, Lenguage).
Jimmy23013
Ich möchte dies in Leerzeichen tun :(
YoYoYonnY
1
@ mbomb007 Wenn ich noch einmal eine ähnliche Frage stelle, werde ich wahrscheinlich eine kleine Konstante zu den Programmgrößen in der Partitur hinzufügen. Aber es ist zu willkürlich, diese Frage zu ändern.
Jimmy23013

Antworten:

6

gs2 , 0,38669200758867045

Entfernen Sie Whitespace aus allen diesen Programmen, aber drei , es ist nur für die (Husten-) Lesbarkeit. Eins und Sechs sind gs2-Programme, die abstürzen (indem sie den Stack unterlaufen), wodurch sie in Quines umgewandelt werden .

eins (3 Bytes)

one

zwei (1384 Bytes)

A?"A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0000000000000
000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000A?"A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"00000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000A?"A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000

drei (92 Bytes)

0a 21 2c 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 2f 20 0a 21 28 3c 0a 21 2c 21 20 21 20
21 20 21 20 2f 20 0a 21 28 3c 45 21 20 21 20 21
2f 20 0a 21 28 3c 0a 21 2c 21 20 2f 20 0a 21 28
3c 0a 21 2c 21 20 2f 20 0a 21 28 3c

Viele signifikante Leerzeichen, hier ist also ein Hex-Dump. Am Anfang steht ein einzelner Zeilenvorschub:


!,! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / 
!(<
!,! ! ! ! / 
!(<E! ! !/ 
!(<
!,! / 
!(<
!,! / 
!(<

vier (276 Bytes)

f$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f
$f$31f$f$31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31Mf$f$f$31f$f$31f
$f$31f$f$31f$f$31f$f$31f$f$31f$f$31M

fünf (178 Bytes)

hd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&
&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&K

sechs (3 Bytes)

six
Lynn
quelle
Ich habe diese Anforderung nicht gesehen - ich werde die Zwischenlösungen durcharbeiten und reparieren.
Lynn
Ich kann 20durch 7E, 09(Tab), 0A(LF) und 0D(CR), richtig?
Lynn
Ja. Bearbeitet, um CR explizit zuzulassen.
Jimmy23013
Das 1in fünf war ein Tippfehler; Ich bin gegangen und habe es entfernt. Ich werde jetzt drei reparieren .
Lynn
2
Bei den Programmen eins und sechs handelt es sich im Wesentlichen um Syntaxfehler, die den Quellcode an STDOUT senden und bei STDERR einen Fehler anzeigen. Konsens scheint zu sein, dass dies in Ordnung ist (so viel Lob), aber Sie sollten es in Ihrer Antwort erwähnen.
Dennis
13

CJam, 0,24075

Programme

BA1]100cf|
"two"
{hree}`W<7a.-
N)92+_9+_6+_2~+
S(84^I^U$F^X$G^Y$(
's'i'x

Vielen Dank an @ user23013 für seinen Vorschlag, ihn 'für sechs zu verwenden .

Ausgabe, Länge, Punktzahl, verwendete Zeichen

one    10  0.03162          01       AB         ]    c f         |  
two     5  0.08944  "                                     o  tw     
three  13  0.02133        -.     7  <        W     `a e h  r    { } 
four   15  0.01721      )+    2 6  9      N       _                ~
five   18  0.01309   $ (       4  8    FGI SU XY ^                  
six     6  0.06804    '                                  i  s  x

Überprüfen Sie die Ergebnisse selbst im CJam-Interpreter .

Dennis
quelle
6

Schlaflosigkeit , 0,100688383057110116

Nur um die Dinge in Gang zu bringen. Es ist sehr unwahrscheinlich, dass dies gewinnen wird. Nach dem derzeitigen Bewertungsschema hat jede Sprache, die oneaus 5 oder weniger Zeichen besteht, einen überwältigenden Vorteil.

eins (8 Byte, 0,04419417382415922)

uuyp>~p~

zwei (9 Bytes, 0,037037037037037035)

oeoojdoLj

drei (21 Bytes, 0.010391328106475828)

*FFFFF
=
=z"
n=nnFzzB

vier (23 Byte, 0,009065844089438033)

)HGGGkGGGtGkGk<GGh$HGGt
n̴̖̋h̴̖̋ã̷͉h̷̭̿d̷̰̀ĥ̷̳
quelle
4

Headsecks , 0,044623631135793776

Hier generiert

Diese Sprache ist eine einfache BF-Substitution, bei der es nur auf den Zeichenwert modulo 8 ankommt.

Leider erzielen längere Programme eine schlechtere Punktzahl, obwohl sie zwölf erreichen können ! (Ich könnte höher kommen, wenn ich nicht druckbares ASCII und Unicode verwenden könnte.)

einer

##%%%%%%%&##$%&#&%&%%%%%%%%%&

zwei

--------+--.+++,-..+++.--------.

drei

5555555535563334566555555555555633333333336555555555555566

vier

==;=====>;<=>>;;;;;;;;;>;;;;;;>===>

fünf

EECEEEEEFCDEFFCCCFCEFCCCCCCDEFFCCEFCCCDEFF

sechs

KKMMMMMMMMMNKKLMNKNMMMMMMMMMMNMKMMMNKLMNN

Sieben

SSUUUUUUUUUVSSTUVSVSSSSSUVSSSTUVVSUUUVSTUVUVSSUVSSSTUVVSSSSSSSSSV

acht

]][]]]]]^[\]^]^[[[[^]]^[^[[[[[[[[[[[[^

neun

cceeeeeeefccdeffeeeeefcccccfeeeeeeeeef

zehn

mmmmmmmmkmmnkkklmnnkkkkmnkkklmnnkkkkkkkkkn

elf

uusuuuuuvstuvuvsssssssvuuuuuuuvsuuuvstuvuvssuvssstuvvsssssssssv

zwölf

}}}}}}}}{}}~{{{|}~~{{{~{}~{{{|}~~{{{{{{{~{{{{{{{{{{~{{}~{{{|}~~
mbomb007
quelle
Sie können nur druckbare ASCII-Zeichen, Tabulatoren und Zeilenumbrüche verwenden.
Jimmy23013
@ user23013 Ich habe so viele wie möglich gemacht und bin am 12.
mbomb007
2

/// , 0,19245008972987526

one

Diese Antwort ist inspiriert von @ n̴̖̋h̷͉̃ã̷͉h̷̭̿d̷̰̀ĥ̷̳s Antwort, in der er sagte

Nach dem derzeitigen Bewertungsschema hat jede Sprache, die oneaus 5 oder weniger Zeichen besteht, einen überwältigenden Vorteil.

user12205
quelle
OK, der Bewertungsalgorithmus scheint eine Lücke zu haben. Gut gespielt.
Dennis
Nun, diese Frage ist so lang, um eine bessere Bewertungsmethode zu erhalten. Und es hat immer noch nicht gut funktioniert ... Dies funktioniert auch in PHP, ASP, etc.
Jimmy23013
0

SmileBASIC, .10062

"einer"

?"one

"zwei"

PRINT MID$(@two,1,3)

Meine andere Antwort ist interessanter, aber diese bekommt eine höhere Punktzahl.

Eine wichtige Strategie, um die längste Kette zu erhalten, besteht darin, MEHR Zeichen zum Speichern von EINZIGARTIGEN Zeichen zu verwenden (z. B. x - -xin Programm 2 zum Speichern y + yvon Programm 3).

Das Problem mit dem Bewertungssystem ist, dass es 2 kurze Programme besser bewertet als 3 lange Programme. Es gibt also keinen Grund, Zeichen für spätere Programme zu speichern, wenn das aktuelle Programm länger wird.

Außerdem werden einzelne Kurzprogramme höher bewertet als eine kleinere Gesamtgröße. Wenn ich tausche ?und PRINTin meiner Antwort kann ich 1 Charakter speichern, aber meine Punktzahl ist HALB.

Ich denke, es wäre besser gewesen, es nur auf die Anzahl der Programme mit der Gesamtgröße als Tiebreaker zu gründen .

12Me21
quelle
3
Ich denke, beide Programme teilen eine o...
JayCe