Der einfache Teil: Bei einer Eingabezeichenfolge, die nur druckbare ASCII-Zeichen enthält (Leerzeichen - Tilde), zählen Sie die Anzahl der Vorkommen jedes Zeichens und geben Sie das Ergebnis in einem beliebigen geeigneten Format zurück. Das Ergebnis für eine Zeichenfolge a%hda7a
soll wie etwas sein: a:3, %:1, h:1, 7:1, d:1
. Eine Sortierung ist nicht erforderlich, die Begrenzer und Formate sind optional, es muss jedoch leicht verständlich sein, welche Nummer welchem Zeichen entspricht. Sie dürfen keine Zeichen einschließen, die nicht in der Eingabezeichenfolge enthalten sind ( a:3, b:0, c:0, d:1, ...
ist nicht OK).
Die wahre Herausforderung:
Konvertieren Sie jedes Zeichen in Ihrem Code in eine 8-Bit-Binärzahl (oder 16-Bit, wenn Sie UTF-16 oder ähnliches verwenden) und führen Sie alle Zeichen auf, die bei beginnen 0
.
Für jeden Charakter ( i
der Zähler), die i%7
Bit - 1 muss sein 1
. Die Bits sind von rechts nummeriert. Alle anderen Bits können beliebig sein.
Verwenden wir den folgenden Code als Beispiel:
[f]-xif)#f
Wenn wir dies in eine Binärdatei konvertieren, erhalten wir das folgende Array. Die erste Zahl (repräsentiert [
a 1
an der 0. Position, so dass man in Ordnung ist. Die zweite Zahl (repräsentiert f
a 1
an der 1. Position, so dass man auch in Ordnung ist. Fahren Sie so fort, und Sie werden sehen dass der obige Code gültig ist.
C 76543210 Bitnummer - -------- ---------- [0101101 1 0 - OK f 011001 1 0 1 - OK ] 01011 1 01 2 - OK - 0010 1 101 3 - OK x 011 1 1000 4 - OK i 01 1 01001 5 - OK f 0 1 100110 6 - OK ) 0010100 1 0 - OK # 001000 1 1 1 - OK f 01100 1 10 2 - OK
Wenn wir den Code in ändern, erhalten ]f[-xif)#f
wir den folgenden Start der Sequenz:
C 76543210 Bit number
- -------- ----------
] 01011101 0 <- OK
f 01100110 1 <- OK
[ 01011011 2 <- Not OK
- 00101101 3 <- OK
Wie wir sehen, befindet sich das dritte Zeichen [
nicht 1
an der zweiten Position (mit einem Index von Null), und dieser Code ist daher nicht gültig.
Testfälle:
Input:
This is a string containing some symbols: ".#!".#&/#
Output:
! " # & / : T a b c e g h i l m n o r s t y .
7 1 2 3 1 1 1 1 2 1 1 1 2 1 5 1 2 4 3 1 6 2 1 2
Jedes sinnvolle Ausgabeformat ist in Ordnung (was auch immer für Sie am bequemsten ist). Sie könnten zum Beispiel haben: :7, !:1, ":2, #:3, &:1, /:1, T:1, a:2 ...
oder [ ,7][!,1][",2][#,3][&,1]...
. Die Ausgabe erfolgt auf einem beliebigen Standardweg (Rückkehr von der Funktion, Ausdruck nach STDOUT usw.).
1i
Modul 7
.
Dies ist Code-Golf , so dass der kürzeste Code in Bytes ref gewinnt .
quelle
n%7
Stelle verwenden dürfen> pastie.org/pastes/10985263/text00001010
. Es kann auch nützlich sein! :)Antworten:
Pyke,
16 BytesProbieren Sie es hier aus!
Die Hälfte dieses Codes ist nur No-Ops ...
quelle
'abc'==['a','b','c']
, also könnte es auch in Pyke sein ...?Pyth,
1287 Bytes-1 Byte danke an @Loovjo
binäre Darstellung
Versuch es hier
quelle
13
für111
sieht seltsam aus, kann aber nicht missverstanden werden (es kann kein einzelnes Zeichen geben13
, das 1 Mal verwendet wird), das ist also absolut gültig!Befunge-93, 150 Bytes
Probieren Sie es online!
Ich begann damit, dies als reguläres Befunge-Programm zu schreiben, das ich so oft wie möglich spielte. Ich habe dann Auffüllungen hinzugefügt, um sicherzustellen, dass die verschiedenen Zeichen im Programm nur an zulässigen Positionen angezeigt werden. Dieses Auffüllen beruhte auf der Tatsache, dass nicht unterstützte Befehle in Befunge-93 ignoriert werden, sodass ich nur eine Folge nicht verwendeter Zeichen benötigte, deren Bits an den erforderlichen Positionen ausgerichtet waren (die von mir verwendete Folge war
={}{}{}
).Das Komplizierte war, dass die verschiedenen Zweige zwischen den Zeilen richtig ausgerichtet werden mussten (z. B. der
v
Pfeil in einer Zeile muss mit dem<
Pfeil darunter ausgerichtet werden). Dies wurde durch die Tatsache weiter erschwert, dass der Brückenbefehl (#
) nicht von seinem benachbarten Verzweigungspfeil getrennt werden konnte. Anfangs habe ich versucht, das Padding programmatisch zu generieren, aber am Ende war es meist ein manueller Prozess.Aufgrund der Größe des Programms werde ich nicht die vollständige Charakteranalyse auflisten, aber dies ist ein Beispiel von Anfang bis Ende:
Die Zeilenumbrüche werden als Zeilenumbrüche behandelt und befinden sich entweder an Position 1 oder 3.
quelle
MATL , 17 Bytes
Zeigt die Anzahl und dann das entsprechende Zeichen an, alle durch Zeilenumbrüche getrennt. Die größte Schwierigkeit ist das,
@
was ist0b01000000
; Ich hoffe, ich kann einen Weg finden, ohne es auszukommen.Probieren Sie es online!
Erläuterung:
MATL, 15 Bytes (fragliche Ausgabe)
Wenn es erlaubt ist, nur zwei Zeilenvektoren auf dem Stapel zu belassen (funktionsähnliches Verhalten gemäß diesem Meta-Beitrag), können wir zu kommen
Aber hier ist die Ausgabe nicht ganz so ordentlich geordnet.
quelle
D
,Gu
am Ende des Programms), und ich bin nicht sicher, ob die 15-Byte-Version ausreichend anders ist.CJam, 14 Bytes
Probieren Sie es hier aus.
Das Leerzeichen vor
@
unds
nach dem Zeichen sind Füllzeichen, die eingefügt werden, damit die ASCII-Codes dem erforderlichen Muster entsprechen: Das Leerzeichen bewirkt nichts unds
konvertiert einfach eine Zeichenfolge in eine Zeichenfolge. Davon abgesehen ist dies eine ziemlich einfache und unkomplizierte Implementierung der Herausforderungsaufgabe:Für die Eingabe
foobar123
wird dieser Code ausgegeben[['f 1] ['o 2] ['b 1] ['a 1] ['r 1] ['1 2] ['2 2] ['3 1]]
. Wenn Sie einfach die Anzahl in einer Zeile und die entsprechenden Zeichen in einer anderen Zeile drucken, wie in:Wenn dies als akzeptables Ausgabeformat betrachtet wird,
]z
kann das weggelassen werden, um zwei Bytes für insgesamt 12 Bytes zu sparen . Ja, der verkürzte Code besteht weiterhin die Bitmusteranforderung.Ps. Ich habe auch einen einfachen Quellcode-Checker für diese Herausforderung geschrieben. Bei einer Codezeile als Eingabe wird zuerst diese Zeile zurückgegeben und dann dieselbe Zeile gedruckt, wobei jedes Zeichen durch das ( n % 7) -te ASCII-Bit ersetzt wird. Wenn die zweite Zeile nur Einsen enthält, ist die Eingabe gültig.
quelle
Jelly , 6 Bytes in Jellys Codepage
Probieren Sie es online!
Dies ist eine Funktion, die eine Liste von (Zeichen-, Zähl-) Paaren zurückgibt. (Jelly stellt solche Listen als Text, zum Beispiel , wenn sie auf der Standardausgabe gesendet sind, indem Sie die Elemente verketten, weshalb Sie dies als eine Funktion zu behandeln haben , anstatt ein komplettes Programm. ( Hier ist das gleiche Programm mit einigem Code angehängt Rufen Sie die Funktion auf und drucken Sie die interne Struktur in die Standardausgabe, um zu beweisen, dass die Ausgabe ein eindeutiges Format hat.)
Binäre Darstellung und Erklärung:
Es ist ersichtlich, dass sich das zweite, dritte und vierte Zeichen gegenseitig aufheben und nur dazu dienen, das von uns benötigte Bitmuster beizubehalten.
Œr
Das Auffüllen des Programms, damit wir es verwenden können, ist jedoch einfach zu praktisch. Dies gibt uns wahrscheinlich ein kürzeres Programm als der Versuch, das Problem ohne das eingebaute Programm zu lösen.quelle