असली अदृश्य पाठ मुद्रित करें


15

मेरी पिछली चुनौती, प्रिंट अदृश्य पाठ काफी लोकप्रिय था, संभावना है कि यह कितना तुच्छ है।

हालाँकि, आप के उन अधिक चौकस लोगों ने देखा होगा कि आप वास्तव में अदृश्य पाठ नहीं छाप रहे हैं, क्योंकि यह पढ़ पाना असंभव है कि केवल आउटपुट दिया गया था।

इसलिए मुझे लगा कि कैसे एक वास्तविक अदृश्य पाठ चुनौती के बारे में है।

केवल मुद्रण योग्य ASCII वर्णों ( 0x20-0x7E) से युक्त एक स्ट्रिंग को देखते हुए , प्रत्येक वर्ण को एक अलग यूनिकोड वर्ण (UTF-8 एन्कोडिंग में) में परिवर्तित करें जो कि 95 मुद्रण योग्य ASCII वर्णों में से एक नहीं है ( 0x20-0x7Eरेंज के बाहर कोई भी UTF-8 वर्ण )

इनपुट

मुद्रण योग्य ASCII वर्णों की एक स्ट्रिंग, या तो एक स्ट्रिंग या वर्ण सरणी / सूची के रूप में

उत्पादन

प्रत्येक वर्ण के साथ इनपुट स्ट्रिंग को एक अलग गैर-मुद्रण योग्य चरित्र के साथ बदल दिया गया। प्रत्येक दिए गए वर्ण में एक समान गैर-मुद्रण योग्य वर्ण होना चाहिए जो किसी अन्य वर्ण के विकल्प के रूप में उपयोग नहीं किया जाता है।

यदि आप गैर-मुद्रण योग्य वर्णों को मुद्रित करने में असमर्थ हैं, तो आप इसके बजाय वर्ण मानों को आउटपुट कर सकते हैं।

उदाहरण यदि आपका कोड सभी लोअरकेस की जगह के लिए aके साथ की 0x01है, तो आप उपयोग नहीं कर सकते 0x01किसी अन्य पात्रों के लिए प्रतिस्थापन के रूप में।

आपका कोड भी निर्धारक होना चाहिए । इसका मतलब यह है कि यदि, स्ट्रिंग को देखते हुए Hello, सभी लोअरकेस lको बदल दिया जाए 0x03, तो आपके कोड को अन्य सभी स्ट्रिंग के lसाथ सभी लोअरकेस को भी बदलना होगा 0x03

परीक्षण के मामलों

इस चुनौती के लिए टेस्टकेस लिखना कुछ हद तक मुश्किल है, इसलिए मैं केवल हेपनोड्स की सूची के रूप में आउटपुट दिखाऊंगा

input     -> output
"Hello"   -> [0x01, 0x02, 0x03, 0x03, 0x04]
"Hi!"     -> [0x01, 0x05, 0x06]
""        -> []
"   H   " -> [0x07, 0x07, 0x07, 0x01, 0x07, 0x07, 0x07]
"yo! "    -> [0x08, 0x04, 0x06, 0x07]

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।


9
UTF-8 चरित्र जैसी कोई चीज नहीं है: UTF-8 यूनिकोड का एक क्रम है, एक चारसेट नहीं। और अगर "नॉन-प्रिंट करने योग्य" एक यूनिकोड संदर्भ में समझ में आता है, तो यह निश्चित रूप से "सभी लेकिन हजारों आवंटित कोडपॉइंट्स के 95" की तुलना में बहुत संकीर्ण है।
पीटर टेलर

11
@PeterTaylor यह देखते हुए कि हम यहाँ चरित्र हनकोड ​​के बारे में बात कर रहे हैं, मैंने माना कि यह स्पष्ट था कि जब मैं यूटीएफ -8 वर्ण कहता हूं तो मेरा मतलब है कि यूटीएफ -8 एन्कोडिंग में एक यूनिकोड चरित्र। ASCII भी एक एन्कोडिंग मानक है, एक charset नहीं, फिर भी लोगों के पास "ASCII चरित्र" शब्द के साथ कोई समस्या नहीं है। वैसे भी, मैं स्पष्ट करने के लिए शब्दों को संपादित करूँगा।
स्काइडदेव

3
किसी विशेष कारण से UTF-8 की आवश्यकता है?
कैलक्यूलेटरफलाइन

क्या इनपुट खाली हो सकता है?
डेनिस

1
+1 के लिए "यदि आप गैर-मुद्रण योग्य वर्णों को प्रिंट करने में असमर्थ हैं"
रॉबर्ट फ्रेजर

जवाबों:


13

जेली , 3 बाइट्स

O²Ọ

इसे ऑनलाइन आज़माएं!

प्रत्येक कोडपॉइंट्स।


मैं जिस जैप समाधान के साथ आया था, उसके समान है, उम्मीद है कि मैंने इसे लिखने के बजाय कोडपॉइंट को काट दिया है - आप मेरे साथ इसे पोस्ट करने के लिए ठीक हैं?
झबरा

2
@ शगेट जप्ट elly जेली, ताकि आप इसे पोस्ट कर सकें।
द एग्रीग्राफर

चतुर समाधान, चुकता करने के बारे में नहीं सोचा।
स्काइडदेव

1
ग्रांड, बस यकीन करना चाहता था, ऐसा न हो कि आपको लगा कि मैं सिर्फ आपके समाधान को छोड़ रहा हूं :)
झबरा

4
@ किसी अन्य भाषा के समाधान को पोर्ट करने के खिलाफ कोई दिशानिर्देश नहीं है; अगर यह भयानक था, क्योंकि आमतौर पर एक इष्टतम एल्गोरिथ्म होता है जो अधिकांश भाषाओं में इष्टतम कार्यान्वयन देता है, और कोई भी लेकिन पहला पोस्टर यह साबित करने में सक्षम नहीं होगा कि वे अपने आप एल्गोरिथ्म के साथ आए थे। बेशक अगर आप वास्तव में किसी और के समाधान को पोर्ट करते हैं, तो उनके जवाब का उल्लेख करना केवल निष्पक्षता है।
हारून

13

व्हॉट्सएप , 39 36 बाइट्स


  
   	  
 
  
 	
	 				  
	
  
 


इसे ऑनलाइन आज़माएं!

व्याख्या

nssn  ; label 'loop'
ssstssn ; push 4 to use as a multiplication operand
sns   ; dup 4 to use as a heap address
sns   ; dup 4 to use as a heap address
tnts  ; getchar and store at address 4
ttt   ; retrieve the value at address 4
tssn  ; multiply the character value by 4
tnss  ; putchar output the new character
nsnn  ; jmp 'loop'

मूल रूप से मैं -0 या -1 से गुणा करना चाहता था क्योंकि वे व्हॉट्सएप में घोषित करने वाले सबसे कम अंक होंगे। TIO -0 और +0 के बीच अंतर नहीं करता है इसलिए यह बाहर है। दुर्भाग्य से, जबकि ट्यूटोरियल / कल्पना एक नकारात्मक मूल्य की व्याख्या करने के बारे में अस्पष्ट है कि एक TIO के रूप में (सही तरीके से) अमान्य तर्क के बारे में एक त्रुटि फेंकता है ताकि एक विकल्प भी न हो।

अगले सबसे कम समय तक काम करने वाला स्थान 4 है इसलिए हम Powershell / Pyth समाधानों के समान मूल दृष्टिकोण का प्रदर्शन करते हैं।


व्हॉट्सएप , 56 53 बाइट्स - टैग पात्रों के लिए नक्शे


  
   			                 
 
  
 	
	 				   	
  
 


इसे ऑनलाइन आज़माएं!

व्याख्या

प्रभावी रूप से पिछले संस्करण के समान ही दृष्टिकोण इसके अलावा 0xE0000 को स्थिर के रूप में उपयोग करता है और गुणकों के बजाय जोड़ता है। यह ASCII वर्णों को संबंधित यूनिकोड टैग कैरेक्टर (रेंज U + E0000-U + E007F) में मैप करता है। इस सीमा के लिए इच्छित उपयोग एक टेक्स्ट फाइल की भाषा को एक प्लेनटेक्स्ट फ़ाइल में इंगित करने के लिए किया गया था, हालांकि इसका उपयोग हतोत्साहित किया गया था। यदि आप किसी 0x01 वर्ण के साथ उपसर्ग स्ट्रिंग करते हैं तो यह कोड मान्य लेबल आउटपुट करेगा।

यूनिकोड स्टैंडर्ड का कहना है कि इस में पात्रों सीमा नहीं दिखाई प्रतिपादन है तो मैं इस चुनौती की भावना पिछले दृष्टिकोण की तुलना में बेहतर मिलता है लग रहा है।


5
अदृश्य पाठ मुद्रित करने के लिए एक अदृश्य कार्यक्रम का उपयोग करना। मुझे पसंद है।
मार्क

7

जाप , 5 2 बाइट्स

cp

इसे ऑनलाइन आज़माएं


व्याख्या

     :Implicit input of string U
c    :Map over the character codes of the string.
p    :Square them.
     :Implicit output of result.

हम्म, घनिष्ठ परीक्षा के बाद, ऐसा लगता है 126 ** 3 == 2000376, जो कि सीमा में नहीं है [0..1114111]। आप अभी भी वर्ग कर सकते हैं :) क्योंकि UTF-8 वहाँ समाप्त होता है, जबकि UTF-16 जारी है।
द एग्रिकॉलफर

1
@EriktheOutgolfer एहम। UTF-8 की परिभाषा के अनुसार UTF-16 के समान रेंज है। (सिद्धांत में, UTF-8 उच्च कोडपॉइंट्स को स्टोर कर सकता है, प्रति कोडपॉइंट पर 5 या 6 बाइट्स का उपयोग कर सकता है, लेकिन यह अवैध है।)
श्री लिस्टर


4

ब्रिंगोल्फ v0.6, 17 बाइट्स

VRl1-M[R.*>v]R&@

प्रत्येक चार मूल्य को प्रिंट करता है।

-1 बाइट की बदौलत एरिक आउटगॉल्फ के स्क्वेरिंग समाधान

ब्रिंगोल्फ v0.7, 6 बाइट्स [गैर-प्रतिस्पर्धात्मक]

{.*}&@

इसके बाद प्रत्येक मूल्य को प्रिंट करता है, लेकिन v0.7 में "फ़ॉरच" {}लूप होता है


4

मैथेमेटिका, 48 बाइट्स

FromCharacterCode[4Mod[Hash/@Characters@#,978]]&

स्पष्टीकरण:

                             Characters@#      & - Convert string to array of characters
                       Hash/@                    - Hash them all using default hash
                   Mod[                  ,978]   - apply a modulus which uniquely transforms each potential character's hash into a number
                  4                              - times by 4 to move values out of 0x20-0x7E.
FromCharacterCode[                            ]  - Convert array of numbers back to string

दिलचस्प बात यह है कि 1000 से कम दो मापांक विकल्पों में से जो 96 वर्णों को 96 अद्वितीय मानों में बदल देता है जिसमें 978 सबसे कम दो मान थे, फिर 33. 4 बार सौभाग्य से यह 28 और 132 में परिवर्तित हो जाता है जो दोनों सिर्फ दृश्य सीमा के बाहर आते हैं। यदि मैंने 784 के अन्य मापांक का उपयोग किया है तो मुझे सीमा से बाहर संख्याओं को स्थानांतरित करने के लिए 18 से गुणा करना होगा।

परीक्षण का मामला।

ध्यान दें: अतिरिक्त backslashes वहाँ के लिए भागने के पात्रों के रूप में "और \। इसके अलावा चरित्र 0x7E सही ढंग से चिपकाना नहीं चाहता है।

Input: "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"

आउटपुट: यहां छवि विवरण दर्ज करें

के Hashरूप ToCharacterCodeमें के बारे में आया का उपयोग वास्तव में लंबा है। हालाँकि हैशिंग के रूप में यह लगभग महंगा था। ऐसा करने का आसान गणितीय तरीका 49 बाइट्स होगा:

FromCharacterCode[4ToCharacterCode@Characters@#]&

2

CJam , 8 5 बाइट्स

l95f+

इसे ऑनलाइन आज़माएं!

प्रत्येक कोडपॉइंट पर 95 जोड़ता है।


क्या इसके बजाय गुणा या वर्ग करने का कोई तरीका नहीं है?
नीदेज्ज्कोब

@NieDzejkob नहीं, यह इस तथ्य पर आधारित है कि कैरेक्टर + लॉन्ग = chr (ord (कैरेक्टर) + लॉन्ग)। चरित्र * लंबा = [चरित्र] * लंबा। कैरेक्टर # लॉन्ग = एरर (# CJam में एक्सप्रेशन है)।
एग्रीकल्चर से एरिक


2

पॉवरशेल, 32 31 बाइट्स

-1 नील को धन्यवाद, 99+को4*

[char[]]"$args"|%{[char](4*$_)}

प्रत्येक वर्ण कोड द्वारा 9 को गुणा करता है और इसे वापस प्रिंट करता है।


ब्याज से बाहर, एक छोटी संख्या (4-9) काम से गुणा करेंगे?
नील

सबसे कम मुद्रण योग्य समय 4 सबसे बड़ा मुद्रण योग्य से अधिक है, यह -1 है - धन्यवाद!
colsw



1

दशमलव , 37 बाइट्स

91D31030030012255D412D590D543D301291D

स्पष्टीकरण:

91D             ; declare jump 1
    310         ; push user input to stack
    300         ; duplicate
    300         ; duplicate
    12255D      ; push EOF to stack
    412D        ; compare top two values, pop, push result
    5 90D 5     ; if result == true, quit
    43D         ; multiply top two values, pop, push result
    301         ; print
    2           ; pop
91D             ; goto jump 1

इसे ऑनलाइन आज़माएं!


इतना शून्य करने के लिए कूद ( 90D) समाप्त होता है?

@ माय्यूब बिल्कुल।
एमडी XF

1

Google शीट, 68 बाइट्स

=ArrayFormula(Join("",IfError(Char(Code(Mid(A1,Row(A:A),1))^2),"")))

मैं यह दिखाने के लिए पोस्ट करना चाहता था कि शीट्स में कुछ बुनियादी कार्य करना कितना अजीब है। क्या आप एक कक्ष में प्रत्येक वर्ण का संचालन करना चाहते हैं और संक्षिप्त परिणाम को बाहर करना चाहते हैं? उन पात्रों पर कार्रवाई करने से पहले आप 42 बाइट्स पर हैं।

=ArrayFormula(Join("",Mid(A1,Row(A:A),1)))

अन्यथा, यह अन्य समाधानों के समान है: प्रत्येक वर्ण का कोड बिंदु वर्ग।




0

साफ , 25 बाइट्स

import StdEnv

map((+)'~')

एक आंशिक कार्य शाब्दिक।

इसे ऑनलाइन आज़माएं!

वास्तविक:

f s = {# c+'~' \\ c <-: s}

एक ही प्रकार ( {#Char} -> {#Char}) के अनबॉक्स किए गए सरणी पर अनबॉक्ड सरणी समझ । स्वच्छ यह निर्धारित करने में सक्षम होगा कि विशिष्टता ट्रांसफ़रेबल ( !u:{#Char} -> u:{#Char}) है, और यह कि आकार इनपुट आकार के समान है। इसका मतलब है कि यदि आप पास*String , तो प्रत्येक वर्ण को विनाशकारी रूप से आउटपुट में संबंधित एक के साथ अपडेट किया जाएगा, जिसका अर्थ है कि कोई मेमोरी आवंटन या आंदोलन नहीं किया जाता है और ग्राफ़ नोड पूरी तरह से पुन: उपयोग किया जाता है।

इसे ऑनलाइन आज़माएं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.