Während ich Zahlen schrieb, bemerkte ich nach einer Weile, dass meine Tastatur die ShiftTaste gedrückt und blockiert hatte und alles, was ich schrieb, waren $%&
ähnliche Zeichen. Und noch schlimmer war, dass ich zwischen der englischen und der spanischen Tastatur umgeschaltet habe, sodass ich nicht weiß, welche ich für jede Nummer verwendet habe.
Herausforderung
Versuchen Sie anhand einer Zeichenfolge mit Symbolzeichen zu erraten, welche Zahl ich geschrieben habe. Meine Tastatur erzeugt die folgenden Zeichen für die Zahlen, wenn die ShiftTaste gedrückt wird:
1234567890
----------
!"·$%&/()= Spanish layout
!@#$%^&*() English layout
- Die Eingabe ist eine nicht leere Zeichenfolge, die aus den obigen Symbolen besteht.
- Die Ausgabe ist eine einzelne Zahl, wenn das Tastaturlayout aus der Zeichenfolge abgeleitet werden kann (dh wenn die Zeichenfolge
@
ein englisches Layout enthält und wenn die Zeichenfolge"
ein spanisches Layout enthält ) oder wenn die Zahl dieselbe ist beide Layouts (dh die Eingabe entspricht!$
der14
für beide Layouts); Andernfalls werden die beiden möglichen Zahlen für beide Layouts ausgegeben, wenn dies nicht möglich ist und die resultierenden Zahlen unterschiedlich sind. - Die Eingabezeichenfolge wird immer in einem einzigen Layout geschrieben. Sie müssen also nicht mit
"@
Eingaben rechnen .
Beispiele
Input --> Output
------------------
/() 789 (Spanish layout detected by the use of /)
$%& 456,457 (Layout cannot be inferred)
!@# 123 (English layout detected by the use of @ and #)
()&! 8961,9071 (Layout cannot be inferred)
((·)) 88399 (Spanish layout detected by the use of ·)
!$ 14 (Layout cannot be inferred but the result is the same for both)
!!$$%% 114455 (Layout cannot be inferred but the result is the same for both)
==$" 0042/42 (Spanish layout, if a number starts with 0 you can choose to
omit them in the result or not)
Single character translations:
------------------------------
! 1
" 2
· 3
$ 4
% 5
& 6,7
/ 7
( 8,9
) 9,0
= 0
@ 2
# 3
^ 6
* 8
Das ist Code-Golf , also kann der kürzeste Code für jede Sprache gewinnen!
·
·
ist das für Spanisch nutzlos, es wird nur in der katalanischen Sprache verwendet.{(8, 9, 6, 1), (9, 0, 7, 1)}
(für den 4. Testfall) akzeptabel?Antworten:
Jelly ,
3231 BytesProbieren Sie es online!
quelle
Python 3 , 76 Bytes
Probieren Sie es online!
quelle
Perl 6 , 62 Bytes
Probieren Sie es online!
Gibt ein Set zurück. (Könnte zwei gemacht werden , oder drei Bytes kürzer , wenn es nicht ein Fehler war in Rakudo Bei der Verarbeitung von # in den Suchlisten.)
quelle
Java (JDK) , 173 Byte
Golf gespielt
Probieren Sie es online!
Ungolfed
Das Magic Hashing Lookup Array
Nach einigem Experimentieren mit Werten wurde mir klar, dass jeder der ASCII-Werte der Zeichen
!"·$%&/()=@#^*
modulo 16 eine eindeutige Zahl zurückgibt. Das 'Magic Hashing Lookup Array' speichert die englischen Zahlen, die jedem Zeichen in diesem eindeutigen Index zugeordnet sind, und jede der spanischen Zahlen in diesem Index, die um 16 versetzt sind. Dadurch wird das Abrufen der erforderlichen Nummer aus dem Array für jede Sprache trivial. Ein Hash wird für Werte gespeichert, die für beide Sprachen ungültig sind.quelle
toCharArray()
und die Berechnung des Exponenten, der auf den int-Wert angewendet werden soll, haben es weitaus länger gemacht als die beiden.contains()
Anweisungen.s.equals(e)|s.contains("#")
kann seins.matches(e+"|.*#.*")
.Japt, 38 Bytes
Gibt zuerst ein Array von Zeichenfolgen mit dem spanischen Layout aus.
Versuch es
quelle
Jelly , 38 Bytes
Probieren Sie es online!
quelle
()
oder(())
als Eingabe probiert , aber dein Code gibt dann nichts zurück. Ich nehme an, das ist eine Einschränkung dessen, was Jelly als Input erhält.'()'
und'(())'
. Ja, wenn Sie das Argument nicht in Anführungszeichen setzen, wird es nur als Zeichenfolge eingegeben, wenn es nichteval
auf einen Python 3-Wert angepasst werden kann.Retina 0.8.2 , 60 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Duplizieren Sie die Eingabe.
Versuchen Sie, jede Zeile mit einem anderen Tastaturlayout zu übersetzen.
Deduplizieren Sie das Ergebnis.
Behalten Sie nur Zeilen bei, die nur Ziffern enthalten.
quelle
m
in deiner letzten Etappe?JavaScript (ES6), 99 Byte
Probieren Sie es online!
Wie?
x >= 0
quelle
05AB1E ,
4241 BytesPort of @dylnans Gelee Antwort .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie komprimiere ich Integer-Listen? ) An, um zu verstehen, warum das so
•Hhç₁d©u÷^Σ(“ðΣèõĆ\n-•184в
ist[33,34,183,36,37,38,47,40,41,61,33,64,35,36,37,94,38,42,40,41]
. Das (mit dem2ä
) ist 1 Byte kürzer als die Unicode - Werte der Zeichenfolge unter:'""!ÿ·$%&/()=""!@#$%^&*()"‚Ç
.quelle
!$
und!!$$%%
sollten nur eine Zahl ausgeben, da das Ergebnis für beide Layouts gleich ist und keine Mehrdeutigkeit besteht.Ruby , 68 Bytes
Probieren Sie es online!
quelle
Sauber , 116 Bytes
Probieren Sie es online!
Übernimmt die Eingabe und ist in CP437 codiert. TIO unterstützt nur UTF-8, daher wird im Demo-Code ein Escape verwendet, um den Literal-Bytewert 250 abzurufen, der dem Mittelpunkt (gezählt als ein Byte) entspricht.
quelle
!$%
Eingabe sollte nur eine Zahl und nicht zwei ausgeben, da das Ergebnis für beide Layouts gleich ist.APL (Dyalog) , 40 Bytes
Anonyme implizite Präfixfunktion. Obwohl nicht verwendet,
·
ist in der Dyalog einzelnen Byte - Zeichensatzes . Nimmt eine 0-basierte Indizierung (⎕IO←0
) an, die auf vielen Systemen standardmäßig verwendet wird.Probieren Sie es online!
⊂
das gesamte Argument'=!"·$%&/()' ')!@#$%^&*('⍳¨
Indizes der Zeichen in jeder dieser Zeichenfolgen{∪⍵/⍨~10∊¨⍵}
Wende das folgende Lambda an (⍵
ist das Argument):10∊¨⍵
für jede Liste von Ziffern, ob 10 (was "nicht gefunden" anzeigt) ein Mitglied davon ist~
lokale Negation (dh nur diejenigen, bei denen alle Ziffern gefunden werden)⍵/⍨
filtere das Argument danach∪
finde die einzigartigen Elemente davonquelle
Pfeil , 125 Bytes
Ungolfed:
Probieren Sie es auf Dartpad!
quelle
T-SQL, 143 Bytes
Die Eingabe erfolgt über die bereits vorhandene Tabelle i mit dem Varchar-Feld v . je unseren IO - Standards .
Verbindet die Eingabetabelle mit den zwei verschiedenen Zeichenfolgen und verwendet dann die neue SQL 2017-Funktion
TRANSLATE
, um einzelne Zeichen auszutauschen undTRY_CAST
festzustellen, ob wir eine Zahl erhalten. Wenn nicht,TRY_CAST
kehrt zurückNULL
.Das letzte Äußere
SELECT DISTINCT
kombiniert identische Ergebnisse und filtert das herausNULLS
.quelle